diff options
author | Tor Andersson <tor@ccxvii.net> | 2023-04-12 13:26:33 +0200 |
---|---|---|
committer | Tor Andersson <tor@ccxvii.net> | 2023-05-03 18:48:16 +0200 |
commit | 63d05083dae2e5af214163f0c4677d4abb758462 (patch) | |
tree | c7e662f227894f390f9b9fddf2776e9732ef4a62 | |
parent | 2f183332df1cf228bfb7efdb880e8e839fc4250b (diff) | |
download | andean-abyss-63d05083dae2e5af214163f0c4677d4abb758462.tar.gz |
Improve piece layout.
-rw-r--r-- | play.js | 602 | ||||
-rw-r--r-- | tools/boxes.svg | 307 | ||||
-rw-r--r-- | tools/genlayout.py | 48 | ||||
-rw-r--r-- | tools/layout.svg | 846 |
4 files changed, 1329 insertions, 474 deletions
@@ -1,7 +1,9 @@ -// TODO: show selected op spaces with highlight / pawn ? +"use strict" /* global view, data, player, send_action, action_button */ +// TODO: layout loc + // Factions const GOVT = 0 const FARC = 1 @@ -17,6 +19,44 @@ const GUERRILLA = 1 const TROOPS = 2 const POLICE = 3 +// Cities +const BOGOTA = 0 +const CALI = 1 +const MEDELLIN = 2 +const BUCARAMANGA = 3 +const IBAGUE = 4 +const SANTA_MARTA = 5 +const CARTAGENA = 6 +const CUCUTA = 7 +const NEIVA = 8 +const PASTO = 9 +const SINCELEJO = 10 + +// 1+ Pop Depts +const ATLANTICO = 11 +const CHOCO = 12 +const NARINO = 13 +const META_WEST = 14 +const GUAVIARE = 15 +const PUTUMAYO = 16 +const CESAR = 17 +const ANTIOQUIA = 18 +const SANTANDER = 19 +const HUILA = 20 +const ARAUCA = 21 +const META_EAST = 22 + +// 0 Pop Depts +const VICHADA = 23 +const GUAINIA = 24 +const VAUPES = 25 +const AMAZONAS = 26 + +// Foreign Countries +const ECUADOR = 27 +const PANAMA = 28 + + const first_piece = data.first_piece const last_piece = data.last_piece @@ -184,99 +224,173 @@ function on_click_action(evt) { send_action(evt.target.my_action, evt.target.my_id) } -const center_xy = { - "Santa Marta": [682,436], - "Cartagena": [500,512], - "Sincelejo": [514,708], - "Medellin": [513,1066], - "Ibague": [507,1278], - "Cali": [391,1497], - "Pasto": [274,1783], - "Neiva": [589,1542], - "Bogota": [754,1336], - "Bucaramanga": [839,980], - "Cucuta": [951,864], - "Guainia": [1409,1542], - "Vaupes": [1167,1785], - "Amazonas": [1085,2064], - "Vichada": [1340,1274], - "Ecuador": [94,1792], - "Panama": [188,686], - "Cesar": [802,533], - "Atlantico": [646,642], - "Antioquia": [666,910], - "Choco": [373,1040], - "Narino": [212,1642], - "Huila": [457,1628], - "Santander": [818,1177], - "Arauca": [1092,1128], - "Meta East": [973,1410], - "Meta West": [720,1539], - "Guaviare": [976,1669], - "Putumayo": [680,1826], - "Sincelejo / Ayacucho": [642,696], - "Cucuta / Arauca": [994,977], - "Bucaramanga / Ibague / Bogota": [626,1224], - "Bogota / Yopal": [887,1276], - "Bogota / Neiva": [612,1414], - "Bogota / San Jose": [826,1474], - "Neiva / Pasto": [530,1698], - "Pasto / Tumaco": [146,1766], - "Cali / Pasto": [348,1625], - "Cali / Buenaventura": [368,1412], - "Ibague / Cali": [436,1362], - "Medellin / Ibague": [511,1169], - "Cartagena / Sincelejo": [514,613], - "Sincelejo / Medellin": [563,876], - "Bucaramanga / Ayacucho": [778,830], - "Cucuta / Ayacucho": [872,708], - "Santa Marta / Ayacucho": [746,601], - "Santa Marta / Cartagena": [588,466], - // TODO: - "Brasil": [10, 10], - "Peru": [30, 10], - "Venezuela": [40, 10], -} - -const layout_xy = { - "Atlantico": [620,540], - "Choco": [370,1190], - "Narino": [260,1530], - - "Cesar": [860,420], - "Antioquia": [640,1010], - "Santander": [710,1175], - "Huila": [525,1425], - - "Arauca": [1210,1090], - "Vichada": [1210,1305], - "Meta East": [971,1320], - - "Meta West": [720,1630], - "Guaviare": [860,1670], - "Putumayo": [840,1880], - - "Guainia": [1310,1540], - "Vaupes": [1080,1810], - "Amazonas": [950,2080], - - "Ecuador": [190,1870], - "Panama": [235,810], - "Brasil": [1300, 1900], - "Peru": [720, 2170], - "Venezuela": [1130, 880], +// TODO: process LAYOUT into specific arrays for each layout type indexed by space number rather than string id + +// :r !python3 tools/genlayout.py +const LAYOUT = { + "Santa Marta": [682, 436], + "Cartagena": [500, 512], + "Sincelejo": [514, 708], + "Medellin": [513, 1066], + "Ibague": [507, 1278], + "Cali": [391, 1497], + "Pasto": [274, 1783], + "Neiva": [589, 1542], + "Bogota": [754, 1336], + "Bucaramanga": [839, 980], + "Cucuta": [951, 864], + "Guainia": [1409, 1542], + "Vaupes": [1167, 1785], + "Amazonas": [1085, 2064], + "Vichada": [1340, 1274], + "Ecuador": [94, 1792], + "Panama": [188, 686], + "Cesar": [802, 533], + "Atlantico": [646, 642], + "Antioquia": [666, 910], + "Choco": [373, 1040], + "Narino": [212, 1642], + "Huila": [457, 1628], + "Santander": [818, 1177], + "Arauca": [1092, 1128], + "Meta East": [973, 1410], + "Meta West": [720, 1539], + "Guaviare": [976, 1669], + "Putumayo": [680, 1826], + "Sincelejo / Ayacucho": [642, 696], + "Cucuta / Arauca": [994, 977], + "Bucaramanga / Ibague / Bogota": [626, 1224], + "Bogota / Yopal": [887, 1276], + "Bogota / Neiva": [612, 1414], + "Bogota / San Jose": [826, 1474], + "Neiva / Pasto": [530, 1698], + "Pasto / Tumaco": [146, 1766], + "Cali / Pasto": [348, 1625], + "Cali / Buenaventura": [368, 1412], + "Ibague / Cali": [436, 1362], + "Medellin / Ibague": [511, 1169], + "Cartagena / Sincelejo": [514, 613], + "Sincelejo / Medellin": [563, 876], + "Bucaramanga / Ayacucho": [778, 830], + "Cucuta / Ayacucho": [872, 708], + "Santa Marta / Ayacucho": [746, 601], + "Santa Marta / Cartagena": [588, 466], + "Atlantico BASE": [714, 674], + "Putumayo INSURGENT": [822, 1866], + "Putumayo COIN": [551, 1835], + "Amazonas COIN": [841, 2057], + "Amazonas INSURGENT": [980, 2058], + "Vaupes COIN": [1195, 1696], + "Vaupes INSURGENT": [1068, 1824], + "Guaviare INSURGENT": [850, 1657], + "Guaviare COIN": [1100, 1620], + "Guainia INSURGENT": [1298, 1544], + "Guainia COIN": [1499, 1463], + "Vichada INSURGENT": [1213, 1298], + "Vichada COIN": [1463, 1226], + "Arauca INSURGENT": [1216, 1104], + "Arauca COIN": [992, 1114], + "Meta East COIN": [975, 1287], + "Meta East INSURGENT": [866, 1407], + "Meta West INSURGENT": [718, 1643], + "Meta West COIN": [825, 1546], + "Santander INSURGENT": [714, 1160], + "Santander COIN": [845, 833], + "Antioquia INSURGENT": [644, 1026], + "Antioquia COIN": [630, 767], + "Huila COIN": [608, 1343], + "Huila INSURGENT": [383, 1733], + "Narino INSURGENT": [276, 1520], + "Narino COIN": [189, 1729], + "Choco COIN": [416, 908], + "Choco INSURGENT": [377, 1157], + "Panama INSURGENT": [216, 816], + "Panama COIN": [97, 690], + "Ecuador COIN": [98, 1897], + "Ecuador INSURGENT": [203, 1862], + "Cesar INSURGENT": [908, 405], + "Cesar COIN": [817, 608], + "Atlantico INSURGENT": [617, 511], + "Atlantico COIN": [586, 562], + "Amazonas DRUGS": [934, 2155], + "Putumayo DRUGS": [890, 1935], + "Huila DRUGS": [516, 1434], + "Vaupes DRUGS": [1180, 1905], + "Guainia DRUGS": [1357, 1653], + "Vichada Drugs INSURGENT": [1217, 1393], + "Arauca DRUGS": [1075, 1213], + "Meta East DRUGS": [981, 1499], + "Guaviare DRUGS": [971, 1751], + "Meta West DRUGS": [690, 1458], + "Narino DRUGS": [155, 1565], + "Choco DRUGS": [359, 1251], + "Panama DRUGS": [201, 876], + "Antioquia DRUGS": [586, 1157], + "Santander DRUGS": [809, 1081], + "Atlantico DRUGS": [597, 626], + "Cesar DRUGS": [1021, 329], + "Ecuador DRUGS": [315, 1895], + "Bogota / Neiva 2": [664, 1410], + "Bogota / Neiva 1": [602, 1456], + "Bucaramanga / Ibague / Bogota 1": [641, 1165], + "Bucaramanga / Ibague / Bogota 2": [737, 1028], + "Bogota / Yopal 1": [911, 1237], + "Bogota / Yopal 2": [861, 1304], + "Cucuta / Arauca 1": [956, 953], + "Cucuta / Arauca 2": [1059, 983], + "Cucuta / Ayacucho 1": [911, 759], + "Cucuta / Ayacucho 2": [826, 740], + "Sincelejo / Ayacucho 2": [675, 721], + "Sincelejo / Ayacucho 1": [607, 676], + "Santa Marta / Ayacucho 1": [712, 554], + "Santa Marta / Ayacucho 2": [774, 653], + "Sincelejo / Medellin 1": [527, 825], + "Sincelejo / Medellin 2": [547, 941], + "Medellin / Ibague 1": [508, 1199], + "Medellin / Ibague 2": [511, 1143], + "Cali / Pasto 2": [303, 1664], + "Cali / Pasto 1": [372, 1595], + "Neiva / Pasto 1": [559, 1644], + "Neiva / Pasto 2": [490, 1743], + "Pasto / Tumaco 1": [188, 1792], + "Pasto / Tumaco 2": [93, 1732], + "Cali / Buenaventura 1": [306, 1397], + "Cali / Buenaventura 2": [350, 1399], + "Bucaramanga / Ayacucho 1": [787, 887], + "Bucaramanga / Ayacucho 2": [771, 779], + "Bogota / San Jose 1": [871, 1494], + "Bogota / San Jose 2": [786, 1446], + "Cartagena / Sincelejo 1": [517, 631], + "Cartagena / Sincelejo 2": [516, 589], + "Santa Marta / Cartagena 1": [566, 479], + "Santa Marta / Cartagena 2": [610, 441], + "Ibague / Cali 2": [425, 1403], + "Ibague / Cali 1": [450, 1335], } function get_center_xy(s) { let id = data.spaces[s].id - return center_xy[id] + return LAYOUT[id] } -function get_layout_xy(s) { - let id = data.spaces[s].id - if (layout_xy[id]) - return layout_xy[id] - return center_xy[id] +function get_layout_coin(s) { + let id = data.spaces[s].id + " COIN" + return LAYOUT[id] +} + +function get_layout_loc(s, n) { + let id = data.spaces[s].id + " " + n + return LAYOUT[id] +} + +function get_layout_insurgents(s) { + let id = data.spaces[s].id + " INSURGENT" + return LAYOUT[id] +} + +function get_layout_shipments(s) { + let id = data.spaces[s].id + " DRUGS" + return LAYOUT[id] } function get_layout_radius(s) { @@ -350,13 +464,19 @@ function init_ui() { register_card_tip(ui.tokens.darien, EVT_DARIEN) register_card_tip(ui.tokens.sucumbios, EVT_SUCUMBIOS) + ui.farc_zones = [ + document.getElementById("tokens").appendChild(create("div", { className: "hide" })), + document.getElementById("tokens").appendChild(create("div", { className: "hide" })), + document.getElementById("tokens").appendChild(create("div", { className: "hide" })), + ] + for (let i = 0; i < data.spaces.length; ++i) { let id = data.spaces[i].id let type = data.spaces[i].type let e = null if (type === "road" || type === "pipeline") { e = document.createElement("div") - let [ x, y ] = center_xy[id] + let [ x, y ] = LAYOUT[id] e.className = "box loc" e.style.left = x - 28 + "px" e.style.top = y - 28 + "px" @@ -376,7 +496,7 @@ function init_ui() { } if (i <= last_pop) { - let [x, y] = center_xy[id] + let [x, y] = LAYOUT[id] if (i <= last_city) ui.support[i] = e = create("div", { className: "hide" }) else @@ -386,14 +506,14 @@ function init_ui() { e.style.left = (x - 20) + "px" e.style.top = (y - 20 - r) + "px" } else { - e.style.left = (x + 14) + "px" - e.style.top = (y - 45) + "px" + e.style.left = (x - 20) + "px" + e.style.top = (y - 20 - 40) + "px" } document.getElementById("tokens").appendChild(e) } - if (i <= last_dept || id === "Panama" || id === "Ecuador") { - let [x, y] = center_xy[id] + if (i <= last_dept) { + let [x, y] = LAYOUT[id] if (i <= last_city) ui.control[i] = e = create("div", { className: "token govt_control" }) else @@ -402,18 +522,18 @@ function init_ui() { let r = get_layout_radius(i) e.style.left = (x - 25 + r) + "px" e.style.top = (y - 25) + "px" - } else if (i > last_pop) { + } else if (i <= last_pop) { + e.style.left = (x - 25 + 50) + "px" + e.style.top = (y - 25 - 25) + "px" + } else { e.style.left = (x - 25) + "px" e.style.top = (y - 25) + "px" - } else { - e.style.left = (x - 57) + "px" - e.style.top = (y - 49) + "px" } document.getElementById("tokens").appendChild(e) } if (i >= first_loc && i <= last_loc) { - let [x, y] = center_xy[id] + let [x, y] = LAYOUT[id] ui.sabotage[i] = e = create("div", { className: "hide" }) e.style.left = (x - 20) + "px" e.style.top = (y - 20) + "px" @@ -444,12 +564,6 @@ function init_ui() { ui.pieces[p] = create_piece(c, "piece", p, x, y) } - ui.farc_zones = [ - document.getElementById("tokens").appendChild(create("div", { className: "hide" })), - document.getElementById("tokens").appendChild(create("div", { className: "hide" })), - document.getElementById("tokens").appendChild(create("div", { className: "hide" })), - ] - ui.shipments = [ create_piece("token shipment", "shipment", 0, 0, 0), create_piece("token shipment", "shipment", 1, 0, 0), @@ -529,24 +643,36 @@ function place_piece(p, x, y, z) { p.my_z = z } -function layout_space_bases(list, xc, yc, r) { - // base is 44x38 - if (r > 0) { - let a = 45 * Math.PI / 180 - let dx = Math.round((r) * Math.cos(a)) - let dy = Math.round((r) * Math.sin(a)) - if (list.length > 0) - place_piece(list[0], xc - 22 + dx, yc - 19 + dy) - if (list.length > 1) - place_piece(list[1], xc - 22 - dx, yc - 19 + dy) - } else { - if (list.length > 0) - place_piece(list[0], xc - 20 - 34, yc + 13) - if (list.length > 1) - place_piece(list[1], xc - 20 + 31, yc + 13) +function layout_loc_pieces(list, xorig, yorig, dir) { + let a = (dir * Math.PI) / 4 + let dx = Math.round(24 * Math.sin(a)) + let dy = -Math.round(15 * Math.cos(a)) + let sx = Math.round(24 * Math.sin(a + Math.PI/2)) + let sy = -Math.round(15 * Math.cos(a + Math.PI/2)) + // if (list.length > 3) { xorig += sx xorig += sy } + let n = 1.5 + for (let i = 0; i < list.length; ++i) { + let x = xorig + dx * ((i&3)+n) + sx * ((i>>2)) + list[i].my_x_offset - 15 + let y = yorig + dy * ((i&3)+n) + sy * ((i>>2)) + list[i].my_y_offset - 24 + let z = (dy>0) ? 1 + i : list.length - i + place_piece(list[i], x, y, z) } } +function layout_loc_pieces2(list, xorig, yorig, dir) { + let a = (dir * Math.PI) / 4 + let dx = Math.round(24 * 2 * Math.sin(a)) + let dy = -Math.round(15 * 2 * Math.cos(a)) + layout_pieces(list, xorig + dx, yorig + dy) +} + +function layout_dept_bases(list, xc, yc) { + if (list.length > 0) + place_piece(list[0], xc - 21 - 25, yc - 19, 50) + if (list.length > 1) + place_piece(list[1], xc - 21 + 25, yc - 19, 50) +} + function layout_available_bases(list, x0, y0, cols, rows, dx, dy) { let x = x0 let y = y0 @@ -709,21 +835,52 @@ function update_guerrillas_underground(faction, type, underground) { } function layout_terror(tix, s, n) { + let id = data.spaces[s].id let [ tx, ty ] = get_center_xy(s) tx -= 20 ty -= 20 if (s <= last_city) { let r = get_layout_radius(s) - tx -= r + if (data.spaces[s].pop === 1) + r += 14 + else if (data.spaces[s].pop === 2) + r += 12 + else if (data.spaces[s].pop === 3) + r += 8 + else if (data.spaces[s].pop === 8) + r += 8 + let a = (312 * Math.PI) / 180 + tx += Math.round(r * Math.cos(a)) + ty += Math.round(r * Math.sin(a)) } else { - ty += -60 + if (set_has(view.farc_zones, s)) { + if (s <= last_pop) { + ty -= 85 + } else { + ty -= 52 + tx += 25 + } + } else { + if (s <= last_pop) { + ty -= 25 + tx -= 45 + } else { + ty -= 0 + tx += 50 + } + } } for (let i = 0; i < n; ++i) { ui.terror[tix].className = "token terror" ui.terror[tix].style.left = tx + "px" ui.terror[tix].style.top = ty + "px" - tx += 5 - ty += 5 + if (s <= last_city || s > last_pop || set_has(view.farc_zones, s)) { + tx += 10 + ty -= 10 + } else { + tx -= 10 + ty -= 10 + } ++tix } return tix @@ -732,7 +889,12 @@ function layout_terror(tix, s, n) { function layout_farc_zone(s, elt) { let [x, y] = get_center_xy(s) if (s <= last_pop) { - y -= 65 + x -= 49 + if (s === META_WEST) + y -= 25 + 40 + else + y -= 25 + } else { x += 55 } @@ -749,24 +911,17 @@ const shipment_layout_city = [ ] const shipment_layout_dept = [ - [ -18, -60, 2 ], - [ 18, -60, 3 ], - [ -54, -60, 1 ], - [ 54, -60, 4 ], -] - -const shipment_layout_loc_ns = [ - [ 36, 18, 3 ], - [ 36, -18, 2 ], - [ 36, 54, 4 ], - [ 36, -54, 1 ], + [ -18, 0, 2 ], + [ 18, 0, 3 ], + [ -54, 0, 1 ], + [ 54, 0, 4 ], ] -const shipment_layout_loc_ew = [ - [ -18, 36, 2 ], - [ 18, 36, 3 ], - [ 54, 36, 4 ], - [ -54, 36, 1 ], +const shipment_layout_loc = [ + [ 30, -18, 1 ], + [ 30, 18, 1 ], + [ -30, 18, 1 ], + [ -30, -18, 1 ], ] function layout_shipments_push(list, pc, sh) { @@ -779,32 +934,75 @@ function layout_shipments_push(list, pc, sh) { list.push([pc, sh]) } -function layout_shipments(s, list, xc, yc) { - let shipment_layout = shipment_layout_dept - if (s <= last_city) - shipment_layout = shipment_layout_city - if (s >= first_loc) - shipment_layout = shipment_layout_loc_ew - if (list.length > 0) { - for (let i = 0; i < list.length; ++i) { - let [xo, yo, zo] = shipment_layout[i] - let x = xc + xo - let y = yc + yo - let z = zo * 4 - let pc = list[i][0] - if (pc) { - pc.style.left = (x+5) + "px" - pc.style.top = (y-8) + "px" - pc.style.zIndex = z + 1 - } - for (let k = 1; k < list[i].length; ++k) { - let sh = list[i][k] - sh.style.left = (x) + "px" - sh.style.top = (y) + "px" - sh.style.zIndex = z-- - x += 8 - y += 8 - } +function layout_dept_shipments(s, list, xc, yc) { + for (let i = 0; i < list.length; ++i) { + let [xo, yo, zo] = shipment_layout_dept[i] + let x = xc + xo - 27 + let y = yc + yo - 27 + let z = zo * 4 + let pc = list[i][0] + if (pc) { + pc.style.left = (x+5) + "px" + pc.style.top = (y-8) + "px" + pc.style.zIndex = z + 1 + } + for (let k = 1; k < list[i].length; ++k) { + let sh = list[i][k] + sh.style.left = (x) + "px" + sh.style.top = (y) + "px" + sh.style.zIndex = z-- + x += 8 + y += 8 + } + } +} + +function layout_city_shipments(s, list, xc, yc) { + let r = get_layout_radius(s) + 10 + for (let i = 0; i < list.length; ++i) { + let a = (160 + i * 20) * Math.PI / 180 + let xo = Math.round(r * Math.cos(a)) + let yo = Math.round(r * Math.sin(a)) + let zo = 4-i + let x = xc + xo - 27 + let y = yc + yo - 27 + let z = zo * 4 + let pc = list[i][0] + if (pc) { + pc.style.left = (x+5) + "px" + pc.style.top = (y-8) + "px" + pc.style.zIndex = z + 1 + } + for (let k = 1; k < list[i].length; ++k) { + let sh = list[i][k] + sh.style.left = (x) + "px" + sh.style.top = (y) + "px" + sh.style.zIndex = z-- + x += 8 + y += 8 + } + } +} + +function layout_loc_shipments(s, list, xc, yc) { + for (let i = 0; i < list.length; ++i) { + let [xo, yo, zo] = shipment_layout_loc[i] + let x = xc + xo - 27 + let y = yc + yo - 27 + let z = zo * 4 + let pc = list[i][0] + if (pc) { + pc.style.left = (x+5) + "px" + pc.style.top = (y-8) + "px" + pc.style.zIndex = z + 1 + } + for (let k = 1; k < list[i].length; ++k) { + let sh = list[i][k] + sh.style.left = (x) + "px" + sh.style.top = (y) + "px" + sh.style.zIndex = z-- + x += 8 + y += 8 } } } @@ -905,6 +1103,9 @@ function on_update() { let list = [] for (let s = 0; s < data.spaces.length; ++s) { + let id = data.spaces[s].id + let xy + if (s <= last_pop) { switch (view.support[s]) { case -2: ui.support[s].className = "token active_opposition"; break @@ -934,22 +1135,48 @@ function on_update() { ui.control[s].className = "hide" } + tix = layout_terror(tix, s, map_get(view.terror, s, 0) * 1) + update_guerrillas_underground(FARC, GUERRILLA, view.underground[FARC]) update_guerrillas_underground(AUC, GUERRILLA, view.underground[AUC]) update_guerrillas_underground(CARTELS, GUERRILLA, view.underground[CARTELS]) - list.length = 0 - filter_piece_list(list, s, FARC, GUERRILLA) - filter_piece_list(list, s, AUC, GUERRILLA) - filter_piece_list(list, s, CARTELS, GUERRILLA) - filter_piece_list(list, s, GOVT, TROOPS) - filter_piece_list(list, s, GOVT, POLICE) + if (s <= last_city) { + list.length = 0 + filter_piece_list(list, s, FARC, GUERRILLA) + filter_piece_list(list, s, AUC, GUERRILLA) + filter_piece_list(list, s, CARTELS, GUERRILLA) + filter_piece_list(list, s, GOVT, TROOPS) + filter_piece_list(list, s, GOVT, POLICE) + xy = get_center_xy(s) + layout_pieces(list, xy[0], xy[1]) + } else if (s <= last_dept) { + list.length = 0 + filter_piece_list(list, s, FARC, GUERRILLA) + filter_piece_list(list, s, CARTELS, GUERRILLA) + xy = get_layout_insurgents(s) + layout_pieces(list, xy[0], xy[1]) - tix = layout_terror(tix, s, map_get(view.terror, s, 0) * 1) + list.length = 0 + filter_piece_list(list, s, AUC, GUERRILLA) + filter_piece_list(list, s, GOVT, TROOPS) + filter_piece_list(list, s, GOVT, POLICE) + xy = get_layout_coin(s) + layout_pieces(list, xy[0], xy[1]) + } else { + list.length = 0 + filter_piece_list(list, s, FARC, GUERRILLA) + filter_piece_list(list, s, AUC, GUERRILLA) + filter_piece_list(list, s, CARTELS, GUERRILLA) + xy = get_layout_loc(s, 1) + layout_pieces(list, xy[0], xy[1]) - let xy = get_layout_xy(s) - if (xy) + list.length = 0 + filter_piece_list(list, s, GOVT, TROOPS) + filter_piece_list(list, s, GOVT, POLICE) + xy = get_layout_loc(s, 2) layout_pieces(list, xy[0], xy[1]) + } list.length = 0 filter_piece_list(list, s, GOVT, BASE) @@ -958,10 +1185,14 @@ function on_update() { filter_piece_list(list, s, CARTELS, BASE) xy = get_center_xy(s) - if (xy) - layout_space_bases(list, xy[0], xy[1], s <= last_city ? get_layout_radius(s) : 0) + if (s <= last_city) + layout_dept_bases(list, xy[0], xy[1] + get_layout_radius(s) - 12) + else if (s === ATLANTICO) + layout_dept_bases(list, 714, 674) + else if (s <= last_pop) + layout_dept_bases(list, xy[0], xy[1] + 32, 0) else - console.log("NO SPACE", s, data.space_name[s]) + layout_dept_bases(list, xy[0], xy[1] + 32+25, 0) list.length = 0 for (let i = 0; i < 4; ++i) { @@ -973,7 +1204,18 @@ function on_update() { layout_shipments_push(list, null, ui.shipments[i]) } } - layout_shipments(s, list, xy[0]-26, xy[1]-26) + if (list.length > 0) { + if (s <= last_city) { + xy = get_center_xy(s) + layout_city_shipments(s, list, xy[0], xy[1]) + } else if (s <= last_dept) { + xy = get_layout_shipments(s) + layout_dept_shipments(s, list, xy[0], xy[1]) + } else { + xy = get_center_xy(s) + layout_loc_shipments(s, list, xy[0], xy[1]) + } + } ui.spaces[s].classList.toggle("action", is_action("space", s)) ui.spaces[s].classList.toggle("selected", view.where === s) diff --git a/tools/boxes.svg b/tools/boxes.svg index 80c34e5..e0cc506 100644 --- a/tools/boxes.svg +++ b/tools/boxes.svg @@ -41,9 +41,9 @@ inkscape:window-height="480" id="namedview6" showgrid="true" - inkscape:zoom="0.53295475" - inkscape:cx="864.23733" - inkscape:cy="1174.1586" + inkscape:zoom="1.3461235" + inkscape:cx="802.50318" + inkscape:cy="1865.5624" inkscape:current-layer="svg4" inkscape:document-rotation="0"> <inkscape:grid @@ -51,295 +51,15 @@ id="grid12" /> </sodipodi:namedview> <image - sodipodi:absref="/home/tor/src/rally/public/andean-abyss/tools/map75.png" - xlink:href="map75.png" - id="image2" - style="display:inline;image-rendering:pixelated" - height="2550" - width="1650" - y="0" + sodipodi:absref="/home/tor/src/rally/public/andean-abyss/map75.png" + xlink:href="../map75.png" + sodipodi:insensitive="true" x="0" - sodipodi:insensitive="true" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.493691;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect840" - width="187" - height="525" - x="21" - y="85" - ry="0.60471976" - inkscape:label="Government Troops & Police" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.506976;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect842" - width="207" - height="149" - x="224" - y="461" - ry="0.60640913" - inkscape:label="Government Capabilities" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.274073;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect844" - width="177" - height="54.999989" - x="287" - y="371" - ry="0.2798028" - inkscape:label="Government Bases" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.48446;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect846" - width="75.998398" - height="168" - x="240.00162" - y="129" - ry="0.60329688" - inkscape:label="President Samper" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.524685;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect848" - width="78" - height="168" - x="322" - y="129" - ry="0.60329688" - inkscape:label="President Pastrana" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.517915;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect850" - width="76" - height="168" - x="406" - y="129" - ry="0.60329688" - inkscape:label="President Uribe" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.5;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect14" - width="361" - height="303" - x="1215" - y="83" - ry="0.610479" - inkscape:label="FARC Guerrillas" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.486173;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect852" - width="350" - height="207.99992" - x="21" - y="2266" - ry="0.57717991" - inkscape:label="AUC Guerrillas" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.334478;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect854" - width="358" - height="55.000072" - x="447" - y="2386" - ry="0.33576393" - inkscape:label="AUC Bases" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.331207;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect856" - width="543" - height="56.000008" - x="445" - y="2295" - ry="0.31078935" - inkscape:label="FARC Bases" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.348075;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect858" - width="145" - height="125" - x="1391" - y="1728" - ry="0.4488816" - inkscape:label="Shipments" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.5;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect860" - width="230" - height="200" - x="1350" - y="1870" - ry="0.610479" - inkscape:label="Cartels Guerrillas" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.398203;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect862" - width="183" - height="305" - x="1373" - y="2117" - ry="0.46549022" - inkscape:label="Cartels Bases" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.514317;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect866" - width="102.99951" - height="225.99954" - x="1113" - y="439.00049" - ry="0.62712717" - inkscape:label="Eligible Factions" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.511935;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect882" - width="103.00004" - height="229" - x="1458" - y="439" - ry="0.62133193" - inkscape:label="Ineligible Factions" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.507445;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect868" - width="103" - height="45" - x="1113" - y="666" - ry="0.610479" - inkscape:label="Pass" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.517845;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect870" - width="73" - height="72" - x="1262" - y="439" - ry="0.62792122" - inkscape:label="SOP A1" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.517845;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect872" - width="73" - height="72" - x="1337" - y="439" - ry="0.62792122" - inkscape:label="SOP A2" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.521429;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect874" - width="73" - height="73" - x="1262" - y="517" - ry="0.6366424" - inkscape:label="SOP B1" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.521429;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect876" - width="73" - height="73" - x="1337" - y="517" - ry="0.6366424" - inkscape:label="SOP B2" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.500286;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect878" - width="73" - height="72" - x="1262" - y="596" - ry="0.62792128" - inkscape:label="SOP C1" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.537393;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect880" - width="73" - height="72" - x="1337" - y="596" - ry="0.67622286" - inkscape:label="SOP C2" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.475;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect884" - width="57" - height="57" - x="1025" - y="662" - ry="0.57995504" - inkscape:label="Prop Card marker" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.508231;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect886" - width="447" - height="72" - x="1113" - y="719" - ry="0.62792122" - inkscape:label="Propaganda Track" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.494975;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect888" - width="58" - height="49" - x="19" - y="16" - ry="0.66474378" - inkscape:label="S0" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.494975;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect890" - width="50" - height="49" - x="79" - y="16" - ry="0.5982694" - inkscape:label="S1" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.5;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect892" - width="50" - height="50" - x="1589" - y="16" - ry="0.610479" - inkscape:label="S30" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.5;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect894" - width="50" - height="50" - x="1589" - y="2486" - ry="0.610479" - inkscape:label="S77" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.5;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect896" - width="50" - height="50" - x="444" - y="2486" - ry="0.610479" - inkscape:label="S99" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.498627;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect898" - width="196" - height="274" - x="220" - y="1935" - ry="0.61952311" - inkscape:label="Momentum 2" /> - <rect - style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.501643;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" - id="rect864" - width="197" - height="274" - x="14" - y="1935" - ry="0.60825908" - inkscape:label="Momentum 1" - sodipodi:insensitive="true" /> + y="0" + width="1650" + height="2550" + style="display:inline;image-rendering:pixelated" + id="image2" /> <rect style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.5;stroke-miterlimit:10;stroke-dasharray:none;stroke-opacity:1" id="rect935" @@ -600,8 +320,7 @@ x="666" y="1812" ry="0.610479" - inkscape:label="Putumayo" - sodipodi:insensitive="true" /> + inkscape:label="Putumayo" /> <rect style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.493054;stroke-miterlimit:10" id="rect193" @@ -630,7 +349,7 @@ x="610" y="1208.7765" ry="0.64194202" - inkscape:label="Bucaramanga / Bogota / Ibague" + inkscape:label="Bucaramanga / Ibague / Bogota" clip-path="none" /> <rect style="fill:#000000;fill-opacity:0.25098;stroke:#fe0000;stroke-width:0.490613;stroke-miterlimit:10" diff --git a/tools/genlayout.py b/tools/genlayout.py new file mode 100644 index 0000000..f6003bd --- /dev/null +++ b/tools/genlayout.py @@ -0,0 +1,48 @@ +list = [] + +def flush(): + global mode, name, x, y, w, h + if mode == 'rect': + list.append((name, round(x+w/2), round(y+h/2))) + if mode == 'circle': + list.append((name, round(x), round(y))) + mode = None + +def readsvg(filename): + global mode, name, x, y, w, h + mode = None + name = None + x = y = w = h = 0 + for line in open(filename).readlines(): + line = line.strip() + if line == "<rect": + flush() + mode = 'rect' + x = y = w = h = 0 + name = None + elif line == "<ellipse" or line == "<circle": + flush() + mode = 'circle' + x = y = w = h = 0 + name = None + if line.startswith('x="'): x = round(float(line.split('"')[1])) + if line.startswith('y="'): y = round(float(line.split('"')[1])) + if line.startswith('width="'): w = round(float(line.split('"')[1])) + if line.startswith('height="'): h = round(float(line.split('"')[1])) + if line.startswith('cx="'): x = round(float(line.split('"')[1])) + if line.startswith('cy="'): y = round(float(line.split('"')[1])) + if line.startswith('inkscape:label="'): name = line.split('"')[1] + flush() + +readsvg("tools/boxes.svg") +readsvg("tools/layout.svg") + +def print_list(): + print("const LAYOUT = {") + for (name,x,y) in list: + xc = round((x+w/2.0)) + yc = round((y+h/2.0)) + print(f'\t"{name}": [{x}, {y}],') + print("}") + +print_list() diff --git a/tools/layout.svg b/tools/layout.svg new file mode 100644 index 0000000..ef423bf --- /dev/null +++ b/tools/layout.svg @@ -0,0 +1,846 @@ +<?xml version="1.0" encoding="UTF-8" standalone="no"?> +<svg + xmlns:dc="http://purl.org/dc/elements/1.1/" + xmlns:cc="http://creativecommons.org/ns#" + xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" + xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" + width="1650" + height="2550" + viewBox="0 0 1650 2550" + version="1.1" + id="svg4" + sodipodi:docname="layout.svg" + inkscape:version="1.0.2 (e86c870879, 2021-01-15)"> + <metadata + id="metadata10"> + <rdf:RDF> + <cc:Work + rdf:about=""> + <dc:format>image/svg+xml</dc:format> + <dc:type + rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> + </cc:Work> + </rdf:RDF> + </metadata> + <defs + id="defs8" /> + <sodipodi:namedview + pagecolor="#ffffff" + bordercolor="#666666" + borderopacity="1" + objecttolerance="10" + gridtolerance="10" + guidetolerance="10" + inkscape:pageopacity="0" + inkscape:pageshadow="2" + inkscape:window-width="640" + inkscape:window-height="480" + id="namedview6" + showgrid="true" + inkscape:zoom="2.0178853" + inkscape:cx="557.0476" + inkscape:cy="1406.6856" + inkscape:current-layer="svg4" + inkscape:document-rotation="0"> + <inkscape:grid + type="xygrid" + id="grid12" /> + </sodipodi:namedview> + <image + sodipodi:absref="/home/tor/src/rally/public/andean-abyss/map75.jpg" + xlink:href="../map75.jpg" + x="0" + y="0" + width="1650" + height="2550" + style="display:inline;image-rendering:pixelated" + id="board" /> + <rect + style="fill:#ff5757;fill-opacity:0.349594;stroke-width:2.01289;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="rect831" + width="113.46967" + height="46.991089" + x="656.53033" + y="651.17676" + ry="0.61036325" + inkscape:label="Atlantico BASE" /> + <ellipse + style="fill:#faff23;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="path847" + cx="821.71857" + cy="1865.5933" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Putumayo INSURGENT" /> + <ellipse + style="fill:#23ffff;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="path847-3" + cx="551.06122" + cy="1834.8098" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Putumayo COIN" /> + <ellipse + style="fill:#23ffff;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse893" + cx="841.44849" + cy="2057.3931" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Amazonas COIN" /> + <ellipse + style="fill:#faff23;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse895" + cx="979.77069" + cy="2058.1609" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Amazonas INSURGENT" /> + <ellipse + style="fill:#23ffff;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse897" + cx="1194.6422" + cy="1695.9675" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Vaupes COIN" /> + <ellipse + style="fill:#faff23;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse899" + cx="1068.3137" + cy="1824.4529" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Vaupes INSURGENT" /> + <ellipse + style="fill:#faff23;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse901" + cx="850.08185" + cy="1656.6271" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Guaviare INSURGENT" /> + <ellipse + style="fill:#23ffff;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse903" + cx="1099.7336" + cy="1620.0236" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Guaviare COIN" /> + <ellipse + style="fill:#faff23;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse923" + cx="1298.3999" + cy="1544.4958" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Guainia INSURGENT" /> + <ellipse + style="fill:#23ffff;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse925" + cx="1498.7815" + cy="1463.3098" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Guainia COIN" /> + <ellipse + style="fill:#faff23;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse927" + cx="1213.4673" + cy="1298.0275" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Vichada INSURGENT" /> + <ellipse + style="fill:#23ffff;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse929" + cx="1462.9934" + cy="1226.4136" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Vichada COIN" /> + <ellipse + style="fill:#faff23;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse931" + cx="1215.7032" + cy="1103.6714" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Arauca INSURGENT" /> + <ellipse + style="fill:#23ffff;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse933" + cx="992.04993" + cy="1114.1803" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Arauca COIN" /> + <ellipse + style="fill:#23ffff;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse935" + cx="974.78748" + cy="1286.8606" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Meta East COIN" /> + <ellipse + style="fill:#faff23;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse937" + cx="866.47168" + cy="1406.8763" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Meta East INSURGENT" /> + <ellipse + style="fill:#faff23;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse939" + cx="718.11243" + cy="1642.7832" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Meta West INSURGENT" /> + <ellipse + style="fill:#23ffff;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse941" + cx="824.59546" + cy="1546.0435" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Meta West COIN" /> + <ellipse + style="fill:#faff23;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse943" + cx="713.95709" + cy="1160.3865" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Santander INSURGENT" /> + <ellipse + style="fill:#23e4ff;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse945" + cx="844.80853" + cy="832.81464" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Santander COIN" /> + <ellipse + style="fill:#faff23;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse947" + cx="644.14142" + cy="1026.3208" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Antioquia INSURGENT" /> + <ellipse + style="fill:#23ffff;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse949" + cx="630.17358" + cy="766.72473" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Antioquia COIN" /> + <ellipse + style="fill:#23ffff;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse951" + cx="608.1076" + cy="1343.2896" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Huila COIN" /> + <ellipse + style="fill:#faff23;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse953" + cx="382.87402" + cy="1733.3823" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Huila INSURGENT" /> + <ellipse + style="fill:#faff23;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse955" + cx="276.37039" + cy="1519.9783" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Narino INSURGENT" /> + <ellipse + style="fill:#23ffff;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse957" + cx="188.54849" + cy="1728.8357" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Narino COIN" /> + <ellipse + style="fill:#23ffff;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse959" + cx="415.78534" + cy="907.65546" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Choco COIN" /> + <ellipse + style="fill:#faff23;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse961" + cx="376.83643" + cy="1157.1735" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Choco INSURGENT" /> + <ellipse + style="fill:#faff23;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse963" + cx="216.12793" + cy="816.09753" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Panama INSURGENT" /> + <ellipse + style="fill:#23fffa;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse965" + cx="97.446869" + cy="690.03168" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Panama COIN" /> + <ellipse + style="fill:#23dfff;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse967" + cx="98.207031" + cy="1897.3101" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Ecuador COIN" /> + <ellipse + style="fill:#faff23;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse969" + cx="203.16486" + cy="1862.1837" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Ecuador INSURGENT" /> + <ellipse + style="fill:#faff23;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse971" + cx="907.6908" + cy="404.95953" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Cesar INSURGENT" /> + <ellipse + style="fill:#23ffff;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse973" + cx="817.27185" + cy="608.40936" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Cesar COIN" /> + <ellipse + style="fill:#faff23;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse975" + cx="617.40442" + cy="511.20871" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Atlantico INSURGENT" /> + <ellipse + style="fill:#23cfff;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="ellipse977" + cx="585.80151" + cy="561.57281" + rx="50" + ry="35" + inkscape:transform-center-x="-37.246603" + inkscape:transform-center-y="79.630668" + inkscape:label="Atlantico COIN" /> + <rect + style="fill:#ff5757;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="rect981" + width="120" + height="50" + x="874.46167" + y="2130.4414" + ry="0.76309872" + inkscape:label="Amazonas DRUGS" /> + <rect + style="fill:#ff5757;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="rect994" + width="120" + height="50" + x="830" + y="1910" + ry="0.76309872" + inkscape:label="Putumayo DRUGS" /> + <rect + style="fill:#ff5757;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="rect996" + width="120" + height="50" + x="455.8833" + y="1408.6779" + ry="0.76309872" + inkscape:label="Huila DRUGS" /> + <rect + style="fill:#ff5757;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="rect998" + width="120" + height="50" + x="1120" + y="1880" + ry="0.76309872" + inkscape:label="Vaupes DRUGS" /> + <rect + style="fill:#ff5757;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="rect1000" + width="120" + height="50" + x="1296.8048" + y="1627.8364" + ry="0.76309872" + inkscape:label="Guainia DRUGS" /> + <rect + style="fill:#ff5757;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="rect1002" + width="120" + height="50" + x="1157.3679" + y="1367.9188" + ry="0.76309872" + inkscape:label="Vichada Drugs INSURGENT" /> + <rect + style="fill:#ff5757;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="rect1004" + width="120" + height="50" + x="1015.0145" + y="1187.9541" + ry="0.76309872" + inkscape:label="Arauca DRUGS" /> + <rect + style="fill:#ff5757;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="rect1006" + width="120" + height="50" + x="920.51288" + y="1474.4927" + ry="0.76309872" + inkscape:label="Meta East DRUGS" /> + <rect + style="fill:#ff5757;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="rect1008" + width="120" + height="50" + x="911" + y="1726" + ry="0.76309872" + inkscape:label="Guaviare DRUGS" /> + <rect + style="fill:#ff5757;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="rect1010" + width="120" + height="50" + x="630" + y="1433" + ry="0.76309872" + inkscape:label="Meta West DRUGS" /> + <rect + style="fill:#ff5757;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="rect1012" + width="120" + height="50" + x="94.765198" + y="1540.1451" + ry="0.76309872" + inkscape:label="Narino DRUGS" /> + <rect + style="fill:#ff5757;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="rect1014" + width="120" + height="50" + x="299.2511" + y="1226.458" + ry="0.76309872" + inkscape:label="Choco DRUGS" /> + <rect + style="fill:#ff5757;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="rect1016" + width="120" + height="50" + x="141.0954" + y="850.96411" + ry="0.76309872" + inkscape:label="Panama DRUGS" /> + <rect + style="fill:#ff5757;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="rect1018" + width="120" + height="50" + x="525.9303" + y="1131.8228" + ry="0.76309872" + inkscape:label="Antioquia DRUGS" /> + <rect + style="fill:#ff5757;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="rect1020" + width="120" + height="50" + x="748.66882" + y="1056.3224" + ry="0.76309872" + inkscape:label="Santander DRUGS" /> + <rect + style="fill:#ff5757;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="rect1022" + width="120" + height="50" + x="536.53033" + y="601.17676" + ry="0.76309872" + inkscape:label="Atlantico DRUGS" /> + <rect + style="fill:#ff5757;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="rect1024" + width="120" + height="50" + x="961" + y="304" + ry="0.76309872" + inkscape:label="Cesar DRUGS" /> + <rect + style="fill:#ff5757;fill-opacity:0.349594;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:0.581301" + id="rect1026" + width="120" + height="50" + x="255" + y="1870" + ry="0.76309872" + inkscape:label="Ecuador DRUGS" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle890" + cx="663.70923" + cy="1409.8788" + r="15" + inkscape:label="Bogota / Neiva 2" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle892" + cx="601.77673" + cy="1455.9117" + r="15" + inkscape:label="Bogota / Neiva 1" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle894" + cx="641.37469" + cy="1165.2909" + r="15" + inkscape:label="Bucaramanga / Ibague / Bogota 1" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle896" + cx="736.83411" + cy="1028.1122" + r="15" + inkscape:label="Bucaramanga / Ibague / Bogota 2" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle898" + cx="910.91309" + cy="1237.2157" + r="15" + inkscape:label="Bogota / Yopal 1" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle900" + cx="861.26099" + cy="1303.9882" + r="15" + inkscape:label="Bogota / Yopal 2" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle902" + cx="955.89471" + cy="953.00348" + r="15" + inkscape:label="Cucuta / Arauca 1" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle904" + cx="1059.0409" + cy="983.20764" + r="15" + inkscape:label="Cucuta / Arauca 2" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle906" + cx="911.19659" + cy="758.53296" + r="15" + inkscape:label="Cucuta / Ayacucho 1" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle908" + cx="826.46509" + cy="740.02686" + r="15" + inkscape:label="Cucuta / Ayacucho 2" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle910" + cx="675.01428" + cy="720.54156" + r="15" + inkscape:label="Sincelejo / Ayacucho 2" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle912" + cx="607.04877" + cy="675.6593" + r="15" + inkscape:label="Sincelejo / Ayacucho 1" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle914" + cx="712.22498" + cy="554.26031" + r="15" + inkscape:label="Santa Marta / Ayacucho 1" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle916" + cx="774.2583" + cy="653.20776" + r="15" + inkscape:label="Santa Marta / Ayacucho 2" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle918" + cx="526.50665" + cy="824.5907" + r="15" + inkscape:label="Sincelejo / Medellin 1" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle920" + cx="546.73438" + cy="941.22528" + r="15" + inkscape:label="Sincelejo / Medellin 2" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle922" + cx="508.43851" + cy="1198.8612" + r="15" + inkscape:label="Medellin / Ibague 1" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle924" + cx="511.26694" + cy="1143.3706" + r="15" + sodipodi:insensitive="true" + inkscape:label="Medellin / Ibague 2" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle926" + cx="302.58243" + cy="1664.4843" + r="15" + inkscape:label="Cali / Pasto 2" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle928" + cx="371.8735" + cy="1594.8569" + r="15" + inkscape:label="Cali / Pasto 1" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle930" + cx="558.64307" + cy="1644.0022" + r="15" + inkscape:label="Neiva / Pasto 1" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle932" + cx="490.11145" + cy="1743.2944" + r="15" + inkscape:label="Neiva / Pasto 2" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle934" + cx="187.91862" + cy="1792.177" + r="15" + inkscape:label="Pasto / Tumaco 1" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle936" + cx="93.068954" + cy="1731.5269" + r="15" + inkscape:label="Pasto / Tumaco 2" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle938" + cx="305.89505" + cy="1396.8805" + r="15" + inkscape:label="Cali / Buenaventura 1" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle940" + cx="350.00513" + cy="1398.524" + r="15" + inkscape:label="Cali / Buenaventura 2" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle942" + cx="787.16791" + cy="886.78687" + r="15" + inkscape:label="Bucaramanga / Ayacucho 1" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle944" + cx="771.16791" + cy="778.78687" + r="15" + inkscape:label="Bucaramanga / Ayacucho 2" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle946" + cx="870.53571" + cy="1494.4539" + r="15" + inkscape:label="Bogota / San Jose 1" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle948" + cx="786.06989" + cy="1446.0952" + r="15" + inkscape:label="Bogota / San Jose 2" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle950" + cx="517.04877" + cy="630.6593" + r="15" + inkscape:label="Cartagena / Sincelejo 1" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle952" + cx="516.04877" + cy="588.6593" + r="15" + inkscape:label="Cartagena / Sincelejo 2" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle954" + cx="565.59393" + cy="479.23947" + r="15" + inkscape:label="Santa Marta / Cartagena 1" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle956" + cx="609.58752" + cy="440.97626" + r="15" + inkscape:label="Santa Marta / Cartagena 2" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle99" + cx="424.80762" + cy="1402.9027" + r="15" + inkscape:label="Ibague / Cali 2" /> + <circle + style="fill:#ffffff;fill-opacity:0.703252;stroke:#000000;stroke-width:2;stroke-linecap:round;stroke-linejoin:bevel;stroke-opacity:1" + id="circle888" + cx="450.0816" + cy="1335.0099" + r="15" + inkscape:label="Ibague / Cali 1" /> +</svg> |