summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--play.js602
-rw-r--r--tools/boxes.svg307
-rw-r--r--tools/genlayout.py48
-rw-r--r--tools/layout.svg846
4 files changed, 1329 insertions, 474 deletions
diff --git a/play.js b/play.js
index 20e99a4..101031e 100644
--- a/play.js
+++ b/play.js
@@ -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 &amp; 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>