From ab9b2237075a6841e990d1a4e223e5d122ff9879 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Sat, 8 Apr 2023 02:04:54 +0200 Subject: Last events for the day. --- data.js | 2 +- events.txt | 313 +++++++++++++++++++++++++++++++++++++++---------------- rules.js | 288 +++++++++++++++++++++++++++++++++++--------------- tools/gendata.js | 4 +- 4 files changed, 434 insertions(+), 173 deletions(-) diff --git a/data.js b/data.js index 3962c0f..df89b98 100644 --- a/data.js +++ b/data.js @@ -1,2 +1,2 @@ -const data = {"first_space":0,"first_pop":0,"first_city":0,"last_city":10,"first_dept":11,"last_pop":22,"last_dept":28,"first_loc":29,"last_loc":46,"last_space":46,"card_order":[null,[0,1,2,3],[0,1,2,3],[0,1,2,3],[0,1,3,2],[0,1,3,2],[0,1,3,2],[0,2,1,3],[0,2,1,3],[0,2,1,3],[0,2,3,1],[0,2,3,1],[0,2,3,1],[0,3,1,2],[0,3,1,2],[0,3,1,2],[0,3,2,1],[0,3,2,1],[0,3,2,1],[1,0,2,3],[1,0,2,3],[1,0,2,3],[1,0,3,2],[1,0,3,2],[1,0,3,2],[1,2,0,3],[1,2,0,3],[1,2,0,3],[1,2,3,0],[1,2,3,0],[1,2,3,0],[1,3,0,2],[1,3,0,2],[1,3,0,2],[1,3,2,0],[1,3,2,0],[1,3,2,0],[2,0,1,3],[2,0,1,3],[2,0,1,3],[2,0,3,1],[2,0,3,1],[2,0,3,1],[2,1,0,3],[2,1,0,3],[2,1,0,3],[2,1,3,0],[2,1,3,0],[2,1,3,0],[2,3,0,1],[2,3,0,1],[2,3,0,1],[2,3,1,0],[2,3,1,0],[2,3,1,0],[3,0,1,2],[3,0,1,2],[3,0,1,2],[3,0,2,1],[3,0,2,1],[3,0,2,1],[3,1,0,2],[3,1,0,2],[3,1,0,2],[3,1,2,0],[3,1,2,0],[3,1,2,0],[3,2,0,1],[3,2,0,1],[3,2,0,1],[3,2,1,0],[3,2,1,0],[3,2,1,0],[0,1,2,3],[0,1,2,3],[0,1,2,3],[0,1,2,3]],"card_title":[null,"1st Division","Ospina & Mora","Tapias","Caño Limón - Coveñas","Occidental & Ecopetrol","Oil Spill","7th Special Forces","Fuerza Aérea Colombiana","High Mountain Battalions","Blackhawks","National Defense & Security Council","Plan Colombia","Plan Meteoro","Tres Esquinas","War Tax","Coffee Prices","Madrid Donors","NSPD-18","General Offensive","Mono Jojoy","Raúl Reyes","Alfonso Cano","DoD Contractors","Operación Jaque","Ejército de Liberación Nacional","Gramaje","Misil Antiaéreo","Hugo Chávez","Kill Zone","Peace Commission","Betancourt","Secuestrados","Sucumbíos","Airdropped AKs","Crop Substitution","Zona de Convivencia","Former Military","National Coordination Center","Soldados Campesinos","Demobilization","Mancuso","Senado & Cámara","Calima Front","Colombia Nueva","Los Derechos Humanos","Limpieza","Pinto & del Rosario","Unión Sindical Obrera","Bloques","Carabineros","Pipeline Repairs","Castaño","Criminal Air Force","Deserters & Defectors","DEA Agents","Drogas La Rebaja","Op Millennium","General Serrano","Salcedo","The Chess Player","Air Bridge","Amazonía","Narco-War","Cocaine Labs","Poppies","Tingo María","Mexican Traffickers","Narco-Subs","Riverines & Fast Boats","Ayahuasca Tourism","Darién","Sicarios","Propaganda!","Propaganda!","Propaganda!","Propaganda!"],"card_flavor":[null,"Jointness","COIN experts take charge","CO tightens civil-military bonds","Profitable pipeline","Oil company security","Rebels blamed","Infrastructure protection training","COIN strike aircraft","Elites guard high-altitude corridors","US helos delivered","Military-police jointness","US \"War on Drugs\"","Transport protection units","Forward base","Defense budget shot in the arm","They're up","Aid conference generous","US \"War on Terror\" takes on FARC",null,"KIA puts FARC in disarray","FARC Deputy killed","FARC leader killed in military strike","US provides aircrew","Dramatic hostage rescue","ELN and FARC jockey","FARC protection rejected","FARC MANPADs deemed a myth","Caracas controls border","Army sniffs out FARC trap","FARC accused in Commissioner's killing","Sympathy for famous hostage","Fed up with hostage-taking","Ecuadoran buffer zone","Insurgents scammed by Russian criminals","Government initiative","ELN gets its DMZ","Ties that bind","New command fights paramilitaries","Local forces platoons","Negotiated reintegration","AUC No.2 extradited","Unity behind Presidential war policy","Suspect leftists massacred","Anti-corruption campaign","Officers disciplined","Ruthless elimination","Human rights investigators","AUC targets oil labor organizers","Militias defy Castaño","National police field forces","Speedy patching","AUC leader's memoir a best seller","Insurgent access to small aircraft",null,"Law enforcement assistance","Cali cartel's drugstore chain seized","Colombian-US strike at Bernal syndicate","National Police hammer cartels","Cartel informant","Kingpin strategy scores","Peruvian coca supply controlled","Brasília's Op Cobra blocks border","Rival syndicates go for the throat","FARC taps suppliers","Growers and Government eradication focus on heroin source","Coca crop fails","Major shipment busted en route","Submersibles seized",null,"Eco-tourism helps trade balance","Arms traffic interdicted","Hired drug guns unreliable"],"card_flavor_shaded":[null,"Service parochialism","COIN strategy eludes Army","Civil-military rivalries fester","Pipeline draws attacks","Industry thought exploitative","Multinationals make mess","US training ineffective","Budget diverted to expensive jets","Equipment not delivered","Delivery of US helos delayed","Military-police rivalry","US aid focuses on drug war","Transport security deemphasized","Base overrun","Middle class resents cost of war","They're down","EU aid focuses on reconstruction","US focused on Mid-East and South Asia",null,"Military strategist","FARC Deputy channels foreign support","Ideologue","Plane down - hostage search and evasion","Hostage rescue goes awry","ELN and FARC coordinate ops","Schedule of fees","MANPADs feared","Caracas aids rebels","Tactics lure enemy in","Peace bid","Hostage negotiations forum for FARC","Ransoming highly profitable","Cross-border war","Covert weapons delivery","FARC proposals lauded",null,"Ex-officers advise paramilitaries","Sympathizers alert AUC","Local forces augment autodefensas","Talks a ruse, fighters recycled","AUC drug lord","Insurgent sympathies","Brutality blamed on Army","Political campaign divisive","International human rights cartel",null,"Prosecutors killed","Labor backs FARC","Independent militias join AUC","National police corruption","Security concerns hinder maintenance","Charismatic AUC political leader",null,null,"Más Yanquis","Retail empire","Investigation penetrated","Officials on cartel payroll","Cali cartel security chief","Cali's Gilberto Rodríguez Orejuela expands empire","Colombian coca growers fill Peruvian void","Jungle landing strips",null,"Well-oiled industry",null,"Hearty coca variety","New routes to US market","Littoral stealth",null,"Eco-tourists taken","Border sanctuary","Unemployed ready to work for syndicates"],"card_unshaded_lines":[0,3,2,3,3,3,3,3,2,2,2,2,3,3,3,3,4,3,3,0,3,3,3,3,3,2,3,3,3,3,4,3,4,3,3,3,0,4,4,2,3,3,3,4,4,3,0,3,3,3,3,3,3,0,4,3,3,3,3,3,3,3,3,0,4,0,3,2,3,0,3,3,3],"card_shaded_lines":[0,3,3,3,3,4,4,3,2,3,4,3,4,3,3,3,2,4,4,0,4,4,4,4,4,4,4,4,4,4,3,3,2,4,4,4,0,4,3,3,4,3,4,3,3,4,0,4,4,3,4,4,4,0,0,4,4,4,3,4,4,4,3,0,3,0,4,4,3,0,4,4,4],"space_name":["Bogotá","Cali","Medellín","Bucaramanga","Ibagué","Santa Marta","Cartagena","Cúcuta","Neiva","Pasto","Sincelejo","Atlántico","Chocó","Nariño","Meta West","Guaviare","Putumayo","Cesar","Antioquia","Santander","Huila","Arauca","Meta East","Vichada","Guainía","Vaupés","Amazonas","Ecuador","Panamá","Santa Marta / Cartagena","Cali / Pasto","Neiva / Pasto","Bogotá / San José","Pasto / Tumaco","Cali / Buenaventura","Cartagena / Sincelejo","Sincelejo / Medellín","Medellín / Ibagué","Ibagué / Cali","Bucaramanga / Ibagué / Bogotá","Bogotá / Neiva","Cúcuta / Arauca","Bogotá / Yopal","Santa Marta / Ayacucho","Bucaramanga / Ayacucho","Sincelejo / Ayacucho","Cúcuta / Ayacucho"],"spaces":[{"type":"city","id":"Bogota","pop":8,"adjacent":[14,19,20,22,32,39,40,42]},{"type":"city","id":"Cali","pop":3,"adjacent":[12,13,20,30,34,38]},{"type":"city","id":"Medellin","pop":3,"adjacent":[12,18,36,37]},{"type":"city","id":"Bucaramanga","pop":2,"adjacent":[18,19,39,44]},{"type":"city","id":"Ibague","pop":2,"adjacent":[12,18,20,37,38,39]},{"type":"city","id":"Santa Marta","pop":2,"adjacent":[11,17,29,43]},{"type":"city","id":"Cartagena","pop":1,"adjacent":[11,29,35]},{"type":"city","id":"Cucuta","pop":1,"adjacent":[19,41,46]},{"type":"city","id":"Neiva","pop":1,"adjacent":[14,16,20,31,40]},{"type":"city","id":"Pasto","pop":1,"adjacent":[13,16,20,27,30,31,33]},{"type":"city","id":"Sincelejo","pop":1,"adjacent":[11,12,18,35,36,45]},{"type":"forest","id":"Atlantico","pop":1,"adjacent":[5,6,10,17,18,19,29,35,43,44,45,46]},{"type":"forest","id":"Choco","pop":1,"adjacent":[1,2,4,10,13,18,20,28,34,36,37,38]},{"type":"forest","id":"Narino","pop":1,"adjacent":[1,9,12,20,27,30,33,34]},{"type":"forest","id":"Meta West","pop":1,"adjacent":[0,8,15,16,20,22,32,40]},{"type":"forest","id":"Guaviare","pop":1,"adjacent":[14,16,22,23,24,25,32]},{"type":"forest","id":"Putumayo","pop":1,"adjacent":[8,9,14,15,20,25,26,27,31]},{"type":"mountain","id":"Cesar","pop":1,"adjacent":[5,11,18,19,43,44,45,46]},{"type":"mountain","id":"Antioquia","pop":2,"adjacent":[2,3,4,10,11,12,17,19,20,36,37,39,43,44,45,46]},{"type":"mountain","id":"Santander","pop":2,"adjacent":[0,3,7,11,17,18,20,21,22,39,41,42,43,44,45,46]},{"type":"mountain","id":"Huila","pop":2,"adjacent":[0,1,4,8,9,12,13,14,16,18,19,30,31,38,39,40]},{"type":"grassland","id":"Arauca","pop":1,"adjacent":[19,22,23,41,42]},{"type":"grassland","id":"Meta East","pop":1,"adjacent":[0,14,15,19,21,23,32,42]},{"type":"grassland","id":"Vichada","pop":0,"adjacent":[15,21,22,24]},{"type":"forest","id":"Guainia","pop":0,"adjacent":[15,23,25]},{"type":"forest","id":"Vaupes","pop":0,"adjacent":[15,16,24,26]},{"type":"forest","id":"Amazonas","pop":0,"adjacent":[16,25]},{"type":"foreign","id":"Ecuador","pop":0,"adjacent":[9,13,16,33]},{"type":"foreign","id":"Panama","pop":0,"adjacent":[12]},{"type":"road","id":"Santa Marta / Cartagena","econ":1,"adjacent":[5,6,11]},{"type":"road","id":"Cali / Pasto","econ":1,"adjacent":[1,9,13,20]},{"type":"road","id":"Neiva / Pasto","econ":1,"adjacent":[8,9,16,20]},{"type":"road","id":"Bogota / San Jose","econ":1,"adjacent":[0,14,15,22]},{"type":"road","id":"Pasto / Tumaco","econ":1,"adjacent":[9,13,27]},{"type":"pipeline","id":"Cali / Buenaventura","econ":1,"adjacent":[1,12,13]},{"type":"pipeline","id":"Cartagena / Sincelejo","econ":1,"adjacent":[6,10,11]},{"type":"pipeline","id":"Sincelejo / Medellin","econ":2,"adjacent":[2,10,12,18]},{"type":"pipeline","id":"Medellin / Ibague","econ":1,"adjacent":[2,4,12,18]},{"type":"pipeline","id":"Ibague / Cali","econ":1,"adjacent":[1,4,12,20]},{"type":"pipeline","id":"Bucaramanga / Ibague / Bogota","econ":2,"adjacent":[0,3,4,18,19,20]},{"type":"pipeline","id":"Bogota / Neiva","econ":2,"adjacent":[0,8,14,20]},{"type":"pipeline","id":"Cucuta / Arauca","econ":3,"adjacent":[7,19,21,21]},{"type":"pipeline","id":"Bogota / Yopal","econ":2,"adjacent":[0,19,21,22]},{"type":"pipeline","id":"Santa Marta / Ayacucho","econ":2,"adjacent":[5,11,17,18,19,44,45,46]},{"type":"pipeline","id":"Bucaramanga / Ayacucho","econ":2,"adjacent":[3,11,17,18,19,43,45,46]},{"type":"pipeline","id":"Sincelejo / Ayacucho","econ":3,"adjacent":[10,11,17,18,19,43,44,46]},{"type":"pipeline","id":"Cucuta / Ayacucho","econ":3,"adjacent":[7,11,17,18,19,43,44,45]}],"adjacent_patrol":[[32,39,40,42],[30,34,38],[36,37],[39,44],[37,38,39],[29,43],[29,35],[41,46],[31,40],[30,31,33],[35,36,45],[5,6,10,29,35,43,44,45,46],[1,2,4,10,34,36,37,38],[1,9,30,33,34],[0,8,32,40],[32],[8,9,31],[5,43,44,45,46],[2,3,4,10,36,37,39,43,44,45,46],[0,3,7,39,41,42,43,44,45,46],[0,1,4,8,9,30,31,38,39,40],[41,42],[0,32,42],[],[],[],[],[9,33],[],[5,6],[1,9],[8,9],[0],[9],[1],[6,10],[2,10],[2,4],[1,4],[0,3,4],[0,8],[7],[0],[5,44,45,46],[3,43,45,46],[10,43,44,46],[7,43,44,45]],"first_piece":[[0,3,3,33,0],[63,72],[102,108],[126,141]],"last_piece":[[2,2,32,62,-1],[71,101],[107,125],[140,152]]} +const data = {"first_space":0,"first_pop":0,"first_city":0,"last_city":10,"first_dept":11,"last_pop":22,"last_dept":28,"first_loc":29,"last_loc":46,"last_space":46,"card_order":[null,[0,1,2,3],[0,1,2,3],[0,1,2,3],[0,1,3,2],[0,1,3,2],[0,1,3,2],[0,2,1,3],[0,2,1,3],[0,2,1,3],[0,2,3,1],[0,2,3,1],[0,2,3,1],[0,3,1,2],[0,3,1,2],[0,3,1,2],[0,3,2,1],[0,3,2,1],[0,3,2,1],[1,0,2,3],[1,0,2,3],[1,0,2,3],[1,0,3,2],[1,0,3,2],[1,0,3,2],[1,2,0,3],[1,2,0,3],[1,2,0,3],[1,2,3,0],[1,2,3,0],[1,2,3,0],[1,3,0,2],[1,3,0,2],[1,3,0,2],[1,3,2,0],[1,3,2,0],[1,3,2,0],[2,0,1,3],[2,0,1,3],[2,0,1,3],[2,0,3,1],[2,0,3,1],[2,0,3,1],[2,1,0,3],[2,1,0,3],[2,1,0,3],[2,1,3,0],[2,1,3,0],[2,1,3,0],[2,3,0,1],[2,3,0,1],[2,3,0,1],[2,3,1,0],[2,3,1,0],[2,3,1,0],[3,0,1,2],[3,0,1,2],[3,0,1,2],[3,0,2,1],[3,0,2,1],[3,0,2,1],[3,1,0,2],[3,1,0,2],[3,1,0,2],[3,1,2,0],[3,1,2,0],[3,1,2,0],[3,2,0,1],[3,2,0,1],[3,2,0,1],[3,2,1,0],[3,2,1,0],[3,2,1,0],[0,1,2,3],[0,1,2,3],[0,1,2,3],[0,1,2,3]],"card_title":[null,"1st Division","Ospina & Mora","Tapias","Caño Limón - Coveñas","Occidental & Ecopetrol","Oil Spill","7th Special Forces","Fuerza Aérea Colombiana","High Mountain Battalions","Blackhawks","National Defense & Security Council","Plan Colombia","Plan Meteoro","Tres Esquinas","War Tax","Coffee Prices","Madrid Donors","NSPD-18","General Offensive","Mono Jojoy","Raúl Reyes","Alfonso Cano","DoD Contractors","Operación Jaque","Ejército de Liberación Nacional","Gramaje","Misil Antiaéreo","Hugo Chávez","Kill Zone","Peace Commission","Betancourt","Secuestrados","Sucumbíos","Airdropped AKs","Crop Substitution","Zona de Convivencia","Former Military","National Coordination Center","Soldados Campesinos","Demobilization","Mancuso","Senado & Cámara","Calima Front","Colombia Nueva","Los Derechos Humanos","Limpieza","Pinto & del Rosario","Unión Sindical Obrera","Bloques","Carabineros","Pipeline Repairs","Castaño","Criminal Air Force","Deserters & Defectors","DEA Agents","Drogas La Rebaja","Op Millennium","General Serrano","Salcedo","The Chess Player","Air Bridge","Amazonía","Narco-War","Cocaine Labs","Poppies","Tingo María","Mexican Traffickers","Narco-Subs","Riverines & Fast Boats","Ayahuasca Tourism","Darién","Sicarios","Propaganda!","Propaganda!","Propaganda!","Propaganda!"],"card_flavor":[null,"Jointness","COIN experts take charge","CO tightens civil-military bonds","Profitable pipeline","Oil company security","Rebels blamed","Infrastructure protection training","COIN strike aircraft","Elites guard high-altitude corridors","US helos delivered","Military-police jointness","US \"War on Drugs\"","Transport protection units","Forward base","Defense budget shot in the arm","They're up","Aid conference generous","US \"War on Terror\" takes on FARC",null,"KIA puts FARC in disarray","FARC Deputy killed","FARC leader killed in military strike","US provides aircrew","Dramatic hostage rescue","ELN and FARC jockey","FARC protection rejected","FARC MANPADs deemed a myth","Caracas controls border","Army sniffs out FARC trap","FARC accused in Commissioner's killing","Sympathy for famous hostage","Fed up with hostage-taking","Ecuadoran buffer zone","Insurgents scammed by Russian criminals","Government initiative","ELN gets its DMZ","Ties that bind","New command fights paramilitaries","Local forces platoons","Negotiated reintegration","AUC No.2 extradited","Unity behind Presidential war policy","Suspect leftists massacred","Anti-corruption campaign","Officers disciplined","Ruthless elimination","Human rights investigators","AUC targets oil labor organizers","Militias defy Castaño","National police field forces","Speedy patching","AUC leader's memoir a best seller","Insurgent access to small aircraft",null,"Law enforcement assistance","Cali cartel's drugstore chain seized","Colombian-US strike at Bernal syndicate","National Police hammer cartels","Cartel informant","Kingpin strategy scores","Peruvian coca supply controlled","Brasília's Op Cobra blocks border","Rival syndicates go for the throat","FARC taps suppliers","Growers and Government eradication focus on heroin source","Coca crop fails","Major shipment busted en route","Submersibles seized",null,"Eco-tourism helps trade balance","Arms traffic interdicted","Hired drug guns unreliable"],"card_flavor_shaded":[null,"Service parochialism","COIN strategy eludes Army","Civil-military rivalries fester","Pipeline draws attacks","Industry thought exploitative","Multinationals make mess","US training ineffective","Budget diverted to expensive jets","Equipment not delivered","Delivery of US helos delayed","Military-police rivalry","US aid focuses on drug war","Transport security deemphasized","Base overrun","Middle class resents cost of war","They're down","EU aid focuses on reconstruction","US focused on Mid-East and South Asia",null,"Military strategist","FARC Deputy channels foreign support","Ideologue","Plane down - hostage search and evasion","Hostage rescue goes awry","ELN and FARC coordinate ops","Schedule of fees","MANPADs feared","Caracas aids rebels","Tactics lure enemy in","Peace bid","Hostage negotiations forum for FARC","Ransoming highly profitable","Cross-border war","Covert weapons delivery","FARC proposals lauded",null,"Ex-officers advise paramilitaries","Sympathizers alert AUC","Local forces augment autodefensas","Talks a ruse, fighters recycled","AUC drug lord","Insurgent sympathies","Brutality blamed on Army","Political campaign divisive","International human rights cartel",null,"Prosecutors killed","Labor backs FARC","Independent militias join AUC","National police corruption","Security concerns hinder maintenance","Charismatic AUC political leader",null,null,"Más Yanquis","Retail empire","Investigation penetrated","Officials on cartel payroll","Cali cartel security chief","Cali's Gilberto Rodríguez Orejuela expands empire","Colombian coca growers fill Peruvian void","Jungle landing strips",null,"Well-oiled industry",null,"Hearty coca variety","New routes to US market","Littoral stealth",null,"Eco-tourists taken","Border sanctuary","Unemployed ready to work for syndicates"],"card_unshaded_lines":[0,3,2,3,3,3,3,3,2,2,2,2,3,3,3,3,4,3,3,0,3,3,3,3,3,2,3,3,3,3,4,3,4,3,3,3,0,4,4,2,3,3,3,4,4,3,0,3,3,3,3,3,3,0,0,3,3,3,3,3,3,3,3,0,4,0,3,2,3,0,3,3,3],"card_shaded_lines":[0,3,3,3,3,4,4,3,2,3,4,3,4,3,3,3,2,4,4,0,4,4,4,4,4,4,4,4,4,4,3,3,2,4,4,4,0,4,3,3,4,3,4,3,3,4,0,4,4,3,4,4,4,0,0,4,4,4,3,4,4,4,3,0,3,0,4,4,3,0,4,4,4],"space_name":["Bogotá","Cali","Medellín","Bucaramanga","Ibagué","Santa Marta","Cartagena","Cúcuta","Neiva","Pasto","Sincelejo","Atlántico","Chocó","Nariño","Meta West","Guaviare","Putumayo","Cesar","Antioquia","Santander","Huila","Arauca","Meta East","Vichada","Guainía","Vaupés","Amazonas","Ecuador","Panamá","Santa Marta / Cartagena","Cali / Pasto","Neiva / Pasto","Bogotá / San José","Pasto / Tumaco","Cali / Buenaventura","Cartagena / Sincelejo","Sincelejo / Medellín","Medellín / Ibagué","Ibagué / Cali","Bucaramanga / Ibagué / Bogotá","Bogotá / Neiva","Cúcuta / Arauca","Bogotá / Yopal","Santa Marta / Ayacucho","Bucaramanga / Ayacucho","Sincelejo / Ayacucho","Cúcuta / Ayacucho"],"spaces":[{"type":"city","id":"Bogota","pop":8,"adjacent":[14,19,20,22,32,39,40,42]},{"type":"city","id":"Cali","pop":3,"adjacent":[12,13,20,30,34,38]},{"type":"city","id":"Medellin","pop":3,"adjacent":[12,18,36,37]},{"type":"city","id":"Bucaramanga","pop":2,"adjacent":[18,19,39,44]},{"type":"city","id":"Ibague","pop":2,"adjacent":[12,18,20,37,38,39]},{"type":"city","id":"Santa Marta","pop":2,"adjacent":[11,17,29,43]},{"type":"city","id":"Cartagena","pop":1,"adjacent":[11,29,35]},{"type":"city","id":"Cucuta","pop":1,"adjacent":[19,41,46]},{"type":"city","id":"Neiva","pop":1,"adjacent":[14,16,20,31,40]},{"type":"city","id":"Pasto","pop":1,"adjacent":[13,16,20,27,30,31,33]},{"type":"city","id":"Sincelejo","pop":1,"adjacent":[11,12,18,35,36,45]},{"type":"forest","id":"Atlantico","pop":1,"adjacent":[5,6,10,17,18,19,29,35,43,44,45,46]},{"type":"forest","id":"Choco","pop":1,"adjacent":[1,2,4,10,13,18,20,28,34,36,37,38]},{"type":"forest","id":"Narino","pop":1,"adjacent":[1,9,12,20,27,30,33,34]},{"type":"forest","id":"Meta West","pop":1,"adjacent":[0,8,15,16,20,22,32,40]},{"type":"forest","id":"Guaviare","pop":1,"adjacent":[14,16,22,23,24,25,32]},{"type":"forest","id":"Putumayo","pop":1,"adjacent":[8,9,14,15,20,25,26,27,31]},{"type":"mountain","id":"Cesar","pop":1,"adjacent":[5,11,18,19,43,44,45,46]},{"type":"mountain","id":"Antioquia","pop":2,"adjacent":[2,3,4,10,11,12,17,19,20,36,37,39,43,44,45,46]},{"type":"mountain","id":"Santander","pop":2,"adjacent":[0,3,7,11,17,18,20,21,22,39,41,42,43,44,45,46]},{"type":"mountain","id":"Huila","pop":2,"adjacent":[0,1,4,8,9,12,13,14,16,18,19,30,31,38,39,40]},{"type":"grassland","id":"Arauca","pop":1,"adjacent":[19,22,23,41,42]},{"type":"grassland","id":"Meta East","pop":1,"adjacent":[0,14,15,19,21,23,32,42]},{"type":"grassland","id":"Vichada","pop":0,"adjacent":[15,21,22,24]},{"type":"forest","id":"Guainia","pop":0,"adjacent":[15,23,25]},{"type":"forest","id":"Vaupes","pop":0,"adjacent":[15,16,24,26]},{"type":"forest","id":"Amazonas","pop":0,"adjacent":[16,25]},{"type":"grassland","id":"Ecuador","pop":0,"adjacent":[9,13,16,33]},{"type":"forest","id":"Panama","pop":0,"adjacent":[12]},{"type":"road","id":"Santa Marta / Cartagena","econ":1,"adjacent":[5,6,11]},{"type":"road","id":"Cali / Pasto","econ":1,"adjacent":[1,9,13,20]},{"type":"road","id":"Neiva / Pasto","econ":1,"adjacent":[8,9,16,20]},{"type":"road","id":"Bogota / San Jose","econ":1,"adjacent":[0,14,15,22]},{"type":"road","id":"Pasto / Tumaco","econ":1,"adjacent":[9,13,27]},{"type":"pipeline","id":"Cali / Buenaventura","econ":1,"adjacent":[1,12,13]},{"type":"pipeline","id":"Cartagena / Sincelejo","econ":1,"adjacent":[6,10,11]},{"type":"pipeline","id":"Sincelejo / Medellin","econ":2,"adjacent":[2,10,12,18]},{"type":"pipeline","id":"Medellin / Ibague","econ":1,"adjacent":[2,4,12,18]},{"type":"pipeline","id":"Ibague / Cali","econ":1,"adjacent":[1,4,12,20]},{"type":"pipeline","id":"Bucaramanga / Ibague / Bogota","econ":2,"adjacent":[0,3,4,18,19,20]},{"type":"pipeline","id":"Bogota / Neiva","econ":2,"adjacent":[0,8,14,20]},{"type":"pipeline","id":"Cucuta / Arauca","econ":3,"adjacent":[7,19,21,21]},{"type":"pipeline","id":"Bogota / Yopal","econ":2,"adjacent":[0,19,21,22]},{"type":"pipeline","id":"Santa Marta / Ayacucho","econ":2,"adjacent":[5,11,17,18,19,44,45,46]},{"type":"pipeline","id":"Bucaramanga / Ayacucho","econ":2,"adjacent":[3,11,17,18,19,43,45,46]},{"type":"pipeline","id":"Sincelejo / Ayacucho","econ":3,"adjacent":[10,11,17,18,19,43,44,46]},{"type":"pipeline","id":"Cucuta / Ayacucho","econ":3,"adjacent":[7,11,17,18,19,43,44,45]}],"adjacent_patrol":[[32,39,40,42],[30,34,38],[36,37],[39,44],[37,38,39],[29,43],[29,35],[41,46],[31,40],[30,31,33],[35,36,45],[5,6,10,29,35,43,44,45,46],[1,2,4,10,34,36,37,38],[1,9,30,33,34],[0,8,32,40],[32],[8,9,31],[5,43,44,45,46],[2,3,4,10,36,37,39,43,44,45,46],[0,3,7,39,41,42,43,44,45,46],[0,1,4,8,9,30,31,38,39,40],[41,42],[0,32,42],[],[],[],[],[9,33],[],[5,6],[1,9],[8,9],[0],[9],[1],[6,10],[2,10],[2,4],[1,4],[0,3,4],[0,8],[7],[0],[5,44,45,46],[3,43,45,46],[10,43,44,46],[7,43,44,45]],"first_piece":[[0,3,3,33,0],[63,72],[102,108],[126,141]],"last_piece":[[2,2,32,62,-1],[71,101],[107,125],[140,152]]} if (typeof module !== 'undefined') module.exports = data diff --git a/events.txt b/events.txt index 5a969f6..d41aa73 100644 --- a/events.txt +++ b/events.txt @@ -1,5 +1,20 @@ # Events for Andean Abyss. +# TODO: format prompt "Remove N Piece(s)" +# TODO: prompt wording to match card texts + +# TODO: piece/space_opt_1 - optional if at least 1 + +# TODO: 5.1.3 - as much as possible - for doing multiple things in one space +# 14, 34, 49 (place base + other piece) priority to spaces with room for all available pieces +# 65 priority to where both (place or remove shipment) and (place or remove insurgent base) + +# TODO: replace pieces - must check stacking if replacement piece is available +# 35, 39, 40, 50, 54, 57, 72 + +# TODO: allow voluntarily removing pieces before taking event (but disable passing if did so) +# - needed for 66 shaded (within stacking place base) etc + EVENT 1 log "1 Civic Action space each Support Phase requires Government Control and any cube." capability CAP_1ST_DIV @@ -132,6 +147,7 @@ SHADED 13 EVENT 14 current GOVT prompt "Place 1 Base and 3 Troops into any Department." + # TODO: 5.1.3 do as much as can! space 1 is_dept(s) && can_stack_any(s, GOVT) # TODO: auto or manual ? auto_place GOVT BASE @@ -435,6 +451,7 @@ EVENT 34 SHADED 34 current [FARC,AUC,CARTELS] prompt "Place 2 Guerrillas and 1 Base into a 0 Population Department." + # TODO: 5.1.3 do as much as can! space 1 is_zero_pop_dept(s) && can_stack_any(s, game.current) # TODO: auto or manual ? auto_place (game.current) GUERRILLA @@ -529,13 +546,14 @@ EVENT 40 set_piece_space remove auto_place GOVT POLICE + set_space -1 endpiece SHADED 40 prompt "Move all cubes in a Department with AUC to any Cities." space 1 is_dept(s) && has_auc_piece(s) && has_cube(s) prompt "Move all cubes to any Cities." - piece_no_undo 0 is_piece_in_event_space(p) && is_cube(p) + piece 0 is_piece_in_event_space(p) && is_cube(p) save_space prompt "Move cube to any City." space_no_undo 1 is_city(s) @@ -617,7 +635,7 @@ EVENT 45 endspace SHADED 45 - # TODO: sum and manual aid once? + # TODO: aid (-count_spaces_with_faction_piece(AUC)) prompt "Aid -1 for each space with AUC pieces." space 0 has_auc_piece(s) auto_aid -1 @@ -657,7 +675,8 @@ EVENT 47 SHADED 47 current AUC set_space CUCUTA - prompt "Place AUC Guerrillas in Cúcuta." + prompt "Place 2 AUC Guerrillas in Cúcuta." + # set_space CUCUTA space 1 s === CUCUTA auto_place AUC GUERRILLA auto_place AUC GUERRILLA @@ -667,7 +686,7 @@ SHADED 47 terror_aid_cut endpiece endspace - prompt "Flip any AUC Guerrillas Underground." + prompt "Flip any 2 AUC Guerrillas Underground." piece 2 is_auc_guerrilla(p) && is_active(p) underground endpiece @@ -679,45 +698,64 @@ EVENT 48 remove endif if game.vm.s >= 0 - shift_support + # https://boardgamegeek.com/thread/1132718/article/15062894#15062894 + set_neutral endif SHADED 48 - space 2 s !== BOGOTA && is_city(s) + prompt "Shift 2 Cities other than Bogotá 1 level toward Active Opposition." + space 2 s !== BOGOTA && is_city(s) && can_shift_opposition(s) shift_opposition endspace EVENT 49 + prompt "Permanently remove 3 available AUC Guerrillas." remove_permanently AUC GUERRILLA remove_permanently AUC GUERRILLA remove_permanently AUC GUERRILLA SHADED 49 - space 1 is_dept(s) + prompt "Place an AUC Guerrilla and Base in any Department." + # TODO: 5.1.3 do as much as can! + space 1 is_dept(s) && can_stack_any(s, AUC) auto_place AUC GUERRILLA auto_place AUC BASE endspace EVENT 50 - # UPTO current GOVT - space 1 is_dept(s) && !is_farc_zone(s) - auto_place GOVT POLICE - endspace - space_opt 1 is_dept(s) && !is_farc_zone(s) - auto_place GOVT POLICE - endspace - space_opt 1 is_dept(s) && !is_farc_zone(s) - auto_place GOVT POLICE - endspace + repeat 3 + if !game.vm.opt + prompt "Place up to 3 Police into any Departments." + space_opt 1 is_dept(s) && can_stack_any(s, GOVT) + auto_place GOVT POLICE + endspace + endif + endrepeat SHADED 50 - # TODO: remove 2 / replace 2 / remove 1 + replace 1 ? - piece 2 is_police(p) + # Note: strictly remove 2 or replace 2 + prompt "Remove any 2 Police or replace them with available AUC Guerrillas." + piece_undo 1 is_police(p) set_piece_space remove place_opt AUC GUERRILLA + set_space -1 endpiece + if game.vm.opt + prompt "Remove 1 more Police." + piece_undo 1 is_police(p) + remove + endpiece + else + prompt "Replace 1 more Police with AUC Guerrilla." + piece_undo 1 is_police(p) + set_piece_space + remove + auto_place AUC GUERRILLA + set_space -1 + endpiece + endif EVENT 51 if is_any_pipeline_sabotaged() @@ -725,35 +763,52 @@ EVENT 51 space 0 is_pipeline(s) && has_sabotage(s) remove_sabotage endspace - return + else + resources GOVT 12 endif - resources GOVT 12 SHADED 51 - prompt "Sabotage Pipelines with or adjacent to FARC Guerrillas." + prompt "Sabotage 3 Pipelines with or adjacent to FARC Guerrillas." space 3 is_pipeline(s) && is_with_or_adjacent_to_farc_guerrilla(s) sabotage endspace EVENT 52 - space 2 is_city(s) || is_mountain(s) + prompt "Shift 2 City or Mountain each 1 level toward Active Support." + space 2 (is_city(s) || is_mountain(s)) && can_shift_support(s) shift_support endspace SHADED 52 + prompt "Place an AUC Base into a space with AUC." space 1 has_auc_piece(s) && can_stack_base(s, AUC) auto_place AUC BASE endspace - resources AUC (count_pieces_on_map(AUC,BASE)) + # TODO: resources AUC (count_pieces_on_map(AUC,BASE)) + prompt "AUC Resources +1 per AUC Base." + piece 0 is_auc_base(p) + auto_resources AUC 1 + endpiece EVENT 53 current [FARC,AUC,CARTELS] prompt "Select Departments to move Guerrillas between." - space 2 is_dept(s) + space 1 is_dept(s) mark_space endspace + if has_piece(game.vm.m[0], game.current, GUERRILLA) + prompt "Select Departments to move Guerrillas between." + space 1 (s !== game.vm.m[0]) && is_dept(s) + mark_space + endspace + else + prompt "Select Departments to move Guerrillas between." + space 1 is_dept(s) && has_piece(s, game.current, GUERRILLA) + mark_space + endspace + endif prompt "Move Guerrillas between Departments." - piece 2 is_any_guerrilla(p) && (s === game.vm.m[0] || s === game.vm.m[1]) + piece 2 is_piece(p, game.current, GUERRILLA) && (s === game.vm.m[0] || s === game.vm.m[1]) if piece_space(game.vm.p) === game.vm.m[0] set_space (game.vm.m[1]) else @@ -761,29 +816,79 @@ EVENT 53 endif move underground + set_space -1 endpiece EVENT 54 - # UPTO - piece_opt 2 is_any_guerrilla(p) - set_piece_space - remove - if piece_faction(game.vm.p) === FARC - place_opt [AUC,CARTELS] GUERRILLA - endif - if piece_faction(game.vm.p) === AUC - place_opt [FARC,CARTELS] GUERRILLA - endif - if piece_faction(game.vm.p) === CARTELS - place_opt [FARC,AUC] GUERRILLA + if false + # Note: may remove one and replace another. + prompt "Remove up to 2 Guerrillas or replace them with with another Faction." + # TODO: don't remove just placed guerrilla + piece_undo_opt 2 is_any_guerrilla(p) + set_piece_space + remove + if piece_faction(game.vm.p) === FARC + place_opt [AUC,CARTELS] GUERRILLA + endif + if piece_faction(game.vm.p) === AUC + place_opt [FARC,CARTELS] GUERRILLA + endif + if piece_faction(game.vm.p) === CARTELS + place_opt [FARC,AUC] GUERRILLA + endif + set_space -1 + endpiece + + else + # Note: strictly remove 2 or replace 2 (see shaded 50) + prompt "Remove up to 2 Guerrillas or replace them with with another Faction's." + piece_undo 1 is_any_guerrilla(p) + set_piece_space + remove + if piece_faction(game.vm.p) === FARC + place_opt [AUC,CARTELS] GUERRILLA + endif + if piece_faction(game.vm.p) === AUC + place_opt [FARC,CARTELS] GUERRILLA + endif + if piece_faction(game.vm.p) === CARTELS + place_opt [FARC,AUC] GUERRILLA + endif + set_space -1 + endpiece + if game.vm.opt + # TODO: don't remove just placed guerrilla! + prompt "Remove 1 more Guerrilla." + piece_undo_opt 1 is_any_guerrilla(p) + remove + endpiece + else + # TODO: don't replace just placed guerrilla! + prompt "Replace 1 more Guerrilla." + piece_undo_opt 1 is_any_guerrilla(p) + set_piece_space + remove + if piece_faction(game.vm.p) === FARC + place [AUC,CARTELS] GUERRILLA + endif + if piece_faction(game.vm.p) === AUC + place [FARC,CARTELS] GUERRILLA + endif + if piece_faction(game.vm.p) === CARTELS + place [FARC,AUC] GUERRILLA + endif + set_space -1 + endpiece endif - endpiece + + endif EVENT 55 + prompt "Remove 2 Shipments." shipment 2 true remove_shipment - endpiece - prompt "Remove N Cartels Guerrillas." + endshipment + prompt "Remove 5 Cartels Guerrillas." piece 5 is_cartels_guerrilla(p) remove endpiece @@ -799,24 +904,29 @@ EVENT 56 transfer CARTELS GOVT 15 SHADED 56 + prompt "Add twice Cartels pieces in Cities to Cartels Resources." piece 0 is_cartels_piece(p) && is_city(s) auto_resources CARTELS 2 endpiece + prompt "Place a Cartels Base in each of 2 Cities." space 2 is_city(s) && can_stack_base(s, CARTELS) auto_place CARTELS BASE endspace EVENT 57 - prompt "Replace Cartels pieces with Police." - piece_opt 3 is_cartels_piece(p) + prompt "Replace up to 3 Cartels pieces with Police." + piece_undo_opt 3 is_cartels_piece(p) set_piece_space remove auto_place GOVT POLICE + set_space -1 endpiece SHADED 57 - prompt "In 2 spaces replace 1 Police with any Cartels piece." + prompt "In each of 2 spaces replace a Police with any Cartels piece." + # TODO: prompt "Replace a Police with any Cartels piece in 2 spaces." space 2 has_police(s) + prompt "Replace a Police with any Cartels piece." piece 1 is_piece_in_event_space(p) && is_police(p) remove place CARTELS [BASE,GUERRILLA] @@ -825,6 +935,7 @@ SHADED 57 EVENT 58 resources CARTELS -6 + prompt "Remove all Cartels Guerrillas." piece 0 is_cartels_guerrilla(p) remove endpiece @@ -832,36 +943,42 @@ EVENT 58 SHADED 58 current CARTELS prompt "Relocate up to 4 Police to any spaces." - piece_opt 4 is_police(p) - space 1 can_stack_piece(s, GOVT, POLICE) + piece_undo_opt 4 is_police(p) + prompt "Relocate Police to any space." + space_no_undo 1 can_stack_piece(s, GOVT, POLICE) move endspace endpiece EVENT 59 current GOVT + prompt "All Cartels Guerrillas to Active." piece 0 is_cartels_guerrilla(p) && is_underground(p) activate endpiece + prompt "Free Assault against Cartels in each space." space 0 can_assault(s, CARTELS) free_assault_cartels endspace SHADED 59 current CARTELS - prompt "Flip all Cartels Guerrillas underground." + prompt "Flip all Cartels Guerrillas Underground." piece 0 is_cartels_guerrilla(p) && is_active(p) underground endpiece - prompt "Relocate Cartels Guerrillas anywhere." - piece_opt 3 is_cartels_guerrilla(p) - space 1 can_stack_piece(s, CARTELS, GUERRILLA) + prompt "Relocate up to 3 Cartels Guerrillas anywhere." + piece_undo_opt 3 is_cartels_guerrilla(p) + prompt "Relocate Cartels Guerrilla anywhere." + space_no_undo 1 !is_event_piece_space(s) && can_stack_piece(s, CARTELS, GUERRILLA) move endspace endpiece EVENT 60 + prompt "Remove all Cartels pieces from 2 Cities or 1 Department." space 2 has_cartels_piece(s) && ((is_city(s) && (game.vm.ss.length === 0 || is_city(game.vm.ss[0]))) || (is_dept(s) && game.vm.ss.length === 0)) + prompt "Remove all Cartels pieces." piece 0 is_piece_in_event_space(p) && is_cartels_piece(p) remove endpiece @@ -870,46 +987,53 @@ EVENT 60 SHADED 60 current CARTELS + prompt "Place a Cartels Base in each of 2 Cities." space 2 is_city(s) && can_stack_base(s, CARTELS) auto_place CARTELS BASE endspace - # TODO: can_bribe - space 1 is_space(s) + prompt "Free Bribe in 1 space." + space 1 !is_empty(s) free_bribe endspace EVENT 61 - space 1 is_city(s) - piece 0 is_piece_in_event_space(p) && is_cartels_piece(p) + prompt "Remove all Cartels pieces from 1 City." + space 1 is_city(s) && has_cartels_piece(s) + prompt "Remove all Cartels pieces." + piece_undo 0 is_piece_in_event_space(p) && is_cartels_piece(p) remove endpiece endspace resources CARTELS -6 SHADED 61 - space 3 !has_cartels_piece(s) && can_stack_base(s, CARTELS) + prompt "Place 1 Cartels Base into each of 3 Departments with no Cartels pieces." + space 3 is_dept(s) && !has_cartels_piece(s) && can_stack_base(s, CARTELS) auto_place CARTELS BASE endspace EVENT 62 - piece_opt 3 is_insurgent_piece(p) && is_zero_pop_forest(s) + prompt "Remove up to 3 Insurgent pieces for 0 Population Forests." + piece_undo_opt 3 is_insurgent_piece(p) && is_zero_pop_forest(s) remove endpiece SHADED 62 - space 3 s === GUAINIA || s === VAUPES || s === AMAZONAS + prompt "Place 1 Cartels Base each in Guainia, Vaupés, and Amazonas." + space 3 (s === GUAINIA || s === VAUPES || s === AMAZONAS) && can_stack_base(s, CARTELS) auto_place CARTELS BASE endspace EVENT 63 current CARTELS + prompt "In each space with Cartels Guerrillas..." space 0 has_cartels_guerrilla(s) prompt "Remove all but one Cartels Guerrilla." - piece_no_undo 0 is_piece_in_event_space(p) && is_cartels_guerrilla(p) && count_pieces(s, CARTELS, GUERRILLA) > 1 + piece 0 is_piece_in_event_space(p) && is_cartels_guerrilla(p) && count_pieces(s, CARTELS, GUERRILLA) > 1 remove endpiece prompt "Free Terror with remaining Cartels Guerrilla." - piece_no_undo 1 is_piece_in_event_space(p) && is_cartels_guerrilla(p) + piece 1 is_piece_in_event_space(p) && is_cartels_guerrilla(p) free_terror endpiece endspace @@ -917,33 +1041,42 @@ EVENT 63 ineligible CARTELS EVENT 64 - prompt "Place Shipments with FARC Guerrillas." - piece 2 is_farc_guerrilla(p) && has_cartels_base(s) && has_available_shipment() - place_shipment - endpiece + repeat 2 + prompt "Place 2 Shipments with FARC Guerrillas in the same spaces as Cartels Bases." + if has_available_shipment() + asm game.vm.shipment = find_available_shipment() + piece_undo 1 is_farc_guerrilla(p) && has_cartels_base(s) + place_shipment + endpiece + endif + endrepeat SHADED 64 - prompt "Select each Cartels Base in a City." + prompt "Cartels Resources +2 for each Cartels Base in a City." piece 0 is_cartels_base(p) && is_city(s) auto_resources CARTELS 2 endpiece - prompt "Select each Cartels Base in a Department." + prompt "Cartels Resources +1 for each Cartels Base in a Department." piece 0 is_cartels_base(p) && is_dept(s) auto_resources CARTELS 1 endpiece EVENT 65 + prompt "Place or remove 1 Shipment and Insurgent Base in any Mountain Department." + # TODO: 5.1.3 do as much as can! space 1 is_mountain(s) place_or_remove_shipment place_or_remove_insurgent_base endspace EVENT 66 - piece 3 is_cartels_base(p) && is_forest(s) + prompt "Remove 3 Cartels Bases from Forest." + piece_undo 3 is_cartels_base(p) && is_forest(s) remove endpiece SHADED 66 + prompt "Place Cartels Base into each Forest that already has one." space 0 is_forest(s) && has_cartels_base(s) && can_stack_base(s, CARTELS) auto_place CARTELS BASE endspace @@ -956,23 +1089,25 @@ SHADED 67 momentum MOM_MEXICAN_TRAFFICKERS EVENT 68 - prompt "Remove 2 Cartels pieces or up to 2 Shipments in coastal spaces." + prompt "Remove 2 Cartels pieces or up to 2 Shipments from coastal spaces." select_shipment_or_cartels_piece_in_coastal_space if game.vm.p >= 0 remove + prompt "Remove 1 more Cartels piece from coastal spaces." piece 1 is_coastal_space(s) && is_cartels_piece(p) remove endpiece endif if game.vm.sh >= 0 remove_shipment + prompt "Remove up to 1 more Shipment from coastal spaces." shipment_opt 1 is_coastal_space(s) remove_shipment endshipment endif SHADED 68 - prompt "Select each Cartels piece in coastal spaces." + prompt "Cartels Resources +2 per Cartels piece in coastal spaces." piece 0 is_cartels_piece(p) && is_coastal_space(s) auto_resources CARTELS 2 endpiece @@ -988,35 +1123,34 @@ EVENT 69 mark_space endspace endif - prompt "Select destination space." - if game.current === GOVT - space 1 (s !== game.vm.m[0]) && !is_farc_zone(s) && is_within_adjacent_depts(s, game.vm.m[0], 3) + prompt "Select destination Department." + space 1 (s !== game.vm.m[0]) && is_within_adjacent_depts(s, game.vm.m[0], 3) && can_stack_any(s, game.current) + if game.current === GOVT prompt "Move cubes to destination." - piece_opt 0 (s === game.vm.m[0]) && is_cube(p) + piece_undo_opt 0 (s === game.vm.m[0]) && is_cube(p) && can_stack_any(s, GOVT) move endpiece - # TODO: free sweep move or only flip? free_train_sweep_assault - endspace - else - space 1 (s !== game.vm.m[0]) && is_within_adjacent_depts(s, game.vm.m[0], 3) + else prompt "Move Guerrillas to destination." - piece_opt 0 console.log("CHECK",p,s) || ((s === game.vm.m[0]) && is_piece(p, game.current, GUERRILLA)) + piece_undo_opt 0 (s === game.vm.m[0]) && is_piece(p, game.current, GUERRILLA) && can_stack_any(s, game.current) move endpiece free_rally_attack_terror - endspace - endif + endif + endspace EVENT 70 - prompt "Select each Forest without Guerrillas." + prompt "Government Resources +6 for each Forest without Guerrillas." space_no_undo 0 is_forest(s) && !has_any_guerrilla(s) auto_resources GOVT 6 endspace SHADED 70 current [FARC,AUC,CARTELS] + prompt "Free Terror in each Forest and +3 Resources per Terror." space 0 is_forest(s) && has_piece(s, game.current, GUERRILLA) + prompt "Free Terror with any 1 Guerrilla." piece 1 is_piece_in_event_space(p) && is_piece(p, game.current, GUERRILLA) free_terror auto_resources (game.current) 3 @@ -1034,26 +1168,29 @@ EVENT 71 SHADED 71 capability EVT_DARIEN - # TODO: auto or manual select Ecuador ? - set_space PANAMA - # prompt "Place 1-2 Bases in Panamá." - # space 1 s === PANAMA - place (game.current) BASE + # TODO: auto or manual select Panama ? + # set_space PANAMA + prompt "Place 1-2 Bases in Panamá." + space 1 s === PANAMA + auto_place (game.current) BASE place_opt (game.current) BASE - # endspace + endspace EVENT 72 + prompt "Replace all Cartels Guerrillas in 2 spaces with other Guerrillas." space 2 has_cartels_guerrilla(s) - piece 0 is_piece_in_event_space(p) && is_cartels_guerrilla(p) + prompt "Replace all Cartels Guerrillas with other Guerrillas." + piece_undo 0 is_piece_in_event_space(p) && is_cartels_guerrilla(p) remove place [FARC,AUC] GUERRILLA endpiece endspace SHADED 72 - prompt "Place all available Cartels Guerrillas into spaces with Cartels Bases." if count_pieces_on_map(CARTELS, BASE) > 0 while has_piece(AVAILABLE, CARTELS, GUERRILLA) + prompt "Place all available Cartels Guerrillas into spaces with Cartels Bases." + asm game.vm.p = find_piece(AVAILABLE, CARTELS, GUERRILLA) space 1 has_cartels_base(s) auto_place CARTELS GUERRILLA endspace diff --git a/rules.js b/rules.js index 651e36b..7fb78f7 100644 --- a/rules.js +++ b/rules.js @@ -302,7 +302,7 @@ exports.setup = function (seed, scenario, options) { } game.deck[0] = - /* TEST */ 47 + /* TEST */ 72 log("DECK " + game.deck.join(", ")) update_control() @@ -4678,7 +4678,8 @@ function vm_free_bribe() { } function goto_bribe() { - push_undo() + if (!game.vm) + push_undo() move_cylinder_to_special_activity() log_h3("Bribe") game.sa = { @@ -5458,6 +5459,10 @@ function is_piece_in_event_space(p) { return piece_space(p) === game.vm.s } +function is_event_piece_space(s) { + return piece_space(game.vm.p) === s +} + function goto_vm(start) { game.state = "vm" game.vm = { @@ -5472,20 +5477,11 @@ function goto_vm(start) { vm_exec() } -function event_prompt(str, n0, n) { +function event_prompt(str) { + if (typeof str === "number") + str = CODE[str][1] if (typeof str === "function") str = str() - if (n0 === 0) { - str = str.replace(/\bN\b/, "each") - str = str.replace("(s)", "") - } - if (n0 > 0) { - str = str.replace(/\bN\b/, n) - if (n === 1) - str = str.replace("(s)", "") - else - str = str.replace("(s)", "s") - } view.prompt = data.card_title[this_card()] + ": " + str } @@ -5922,7 +5918,7 @@ states.vm_remove_permanently = { prompt() { let faction = vm_operand(1) let type = vm_operand(2) - event_prompt(`Remove ${piece_faction_type_name[faction][type]} permanently.`) + event_prompt(game.vm.prompt) gen_place_piece(OUT_OF_PLAY, faction, type) }, piece(p) { @@ -5992,7 +5988,7 @@ states.vm_space = { let f = CODE[game.vm.pc][4] view.who = game.vm.p if (game.vm.prompt) - event_prompt(CODE[game.vm.prompt][1]) + event_prompt(game.vm.prompt) else event_prompt("Select space.") for (let s = first_space; s <= last_space; ++s) @@ -6011,6 +6007,8 @@ states.vm_space = { skip() { if (CODE[game.vm.pc][1]) push_undo() + if (CODE[game.vm.pc][2]) + game.vm.opt = 1 vm_goto(vm_endspace, vm_space, 1, 1) }, } @@ -6047,9 +6045,12 @@ states.vm_piece = { prompt() { let n = CODE[game.vm.pc][3] let f = CODE[game.vm.pc][4] - view.where = game.vm.s + if (game.vm.shipment !== undefined) + view.selected_shipment = game.vm.shipment + if (game.vm.s >= 0) + view.where = game.vm.s if (game.vm.prompt) - event_prompt(CODE[game.vm.prompt][1]) + event_prompt(game.vm.prompt) else event_prompt("Select piece.") for (let p = all_first_piece; p <= all_last_piece; ++p) @@ -6068,6 +6069,8 @@ states.vm_piece = { skip() { if (CODE[game.vm.pc][1]) push_undo() + if (CODE[game.vm.pc][2]) + game.vm.opt = 1 vm_goto(vm_endpiece, vm_piece, 1, 1) }, } @@ -6107,7 +6110,7 @@ states.vm_shipment = { let n = CODE[game.vm.pc][3] let f = CODE[game.vm.pc][4] if (game.vm.prompt) - event_prompt(CODE[game.vm.prompt][1]) + event_prompt(game.vm.prompt) else event_prompt("Select shipment.") for (let sh = 0; sh < 4; ++sh) { @@ -6129,6 +6132,8 @@ states.vm_shipment = { skip() { if (CODE[game.vm.pc][1]) push_undo() + if (CODE[game.vm.pc][2]) + game.vm.opt = 1 vm_goto(vm_endshipment, vm_shipment, 1, 1) }, } @@ -6230,6 +6235,8 @@ states.vm_place = { skip() { if (CODE[game.vm.pc][1]) push_undo() + if (CODE[game.vm.pc][2]) + game.vm.opt = 1 vm_next() }, } @@ -6258,8 +6265,9 @@ states.vm_set_passive_support_or_passive_opposition = { } function vm_place_or_remove_shipment() { - if (has_available_shipment() || - (is_any_shipment_held_in_space(game.vm.s) && has_any_guerrilla(game.vm.s))) + if (has_available_shipment() && has_any_guerrilla(game.vm.s)) + game.state = "vm_place_or_remove_shipment" + else if (is_any_shipment_held_in_space(game.vm.s)) game.state = "vm_place_or_remove_shipment" else vm_next() @@ -6278,10 +6286,12 @@ states.vm_place_or_remove_shipment = { } }, shipment(sh) { + push_undo() remove_shipment(sh) vm_next() }, piece(p) { + push_undo() let sh = find_available_shipment() place_shipment(sh, p) vm_next() @@ -6309,6 +6319,7 @@ states.vm_place_or_remove_insurgent_base = { gen_place_piece(game.vm.s, CARTELS, BASE) }, piece(p) { + push_undo() if (piece_space(p) === AVAILABLE) place_piece(p, game.vm.s) else @@ -6345,7 +6356,7 @@ function vm_select_shipment_or_cartels_piece_in_coastal_space() { states.vm_select_shipment_or_cartels_piece_in_coastal_space = { prompt() { - event_prompt(CODE[game.vm.prompt][1]) + event_prompt(game.vm.prompt) for (let s = first_space; s <= last_space; ++s) { if (is_coastal_space(s)) { gen_piece_in_space(s, CARTELS, GUERRILLA) @@ -6394,7 +6405,7 @@ states.vm_select_space_or_piece = { prompt() { let sf = CODE[game.vm.pc][1] let pf = CODE[game.vm.pc][2] - event_prompt(CODE[game.vm.prompt][1]) + event_prompt(game.vm.prompt) for (let s = first_space; s <= last_space; ++s) if (sf(s)) gen_action_space(s) @@ -7513,6 +7524,7 @@ const CODE = [ [ vm_set_piece_space ], [ vm_remove ], [ vm_auto_place, 0, 0, GOVT, POLICE ], + [ vm_set_space, -1 ], [ vm_endpiece ], [ vm_return ], // SHADED 40 @@ -7639,7 +7651,7 @@ const CODE = [ // SHADED 47 [ vm_current, AUC ], [ vm_set_space, CUCUTA ], - [ vm_prompt, "Place AUC Guerrillas in Cúcuta." ], + [ vm_prompt, "Place 2 AUC Guerrillas in Cúcuta." ], [ vm_space, 1, 0, 1, (s)=>s === CUCUTA ], [ vm_auto_place, 0, 0, AUC, GUERRILLA ], [ vm_auto_place, 0, 0, AUC, GUERRILLA ], @@ -7649,7 +7661,7 @@ const CODE = [ [ vm_terror_aid_cut ], [ vm_endpiece ], [ vm_endspace ], - [ vm_prompt, "Flip any AUC Guerrillas Underground." ], + [ vm_prompt, "Flip any 2 AUC Guerrillas Underground." ], [ vm_piece, 0, 0, 2, (p,s)=>is_auc_guerrilla(p) && is_active(p) ], [ vm_underground ], [ vm_endpiece ], @@ -7661,43 +7673,61 @@ const CODE = [ [ vm_remove ], [ vm_endif ], [ vm_if, ()=>game.vm.s >= 0 ], - [ vm_shift_support ], + [ vm_set_neutral ], [ vm_endif ], [ vm_return ], // SHADED 48 - [ vm_space, 1, 0, 2, (s)=>s !== BOGOTA && is_city(s) ], + [ vm_prompt, "Shift 2 Cities other than Bogotá 1 level toward Active Opposition." ], + [ vm_space, 1, 0, 2, (s)=>s !== BOGOTA && is_city(s) && can_shift_opposition(s) ], [ vm_shift_opposition ], [ vm_endspace ], [ vm_return ], // EVENT 49 + [ vm_prompt, "Permanently remove 3 available AUC Guerrillas." ], [ vm_remove_permanently, AUC, GUERRILLA ], [ vm_remove_permanently, AUC, GUERRILLA ], [ vm_remove_permanently, AUC, GUERRILLA ], [ vm_return ], // SHADED 49 - [ vm_space, 1, 0, 1, (s)=>is_dept(s) ], + [ vm_prompt, "Place an AUC Guerrilla and Base in any Department." ], + [ vm_space, 1, 0, 1, (s)=>is_dept(s) && can_stack_any(s, AUC) ], [ vm_auto_place, 0, 0, AUC, GUERRILLA ], [ vm_auto_place, 0, 0, AUC, BASE ], [ vm_endspace ], [ vm_return ], // EVENT 50 [ vm_current, GOVT ], - [ vm_space, 1, 0, 1, (s)=>is_dept(s) && !is_farc_zone(s) ], - [ vm_auto_place, 0, 0, GOVT, POLICE ], - [ vm_endspace ], - [ vm_space, 1, 1, 1, (s)=>is_dept(s) && !is_farc_zone(s) ], - [ vm_auto_place, 0, 0, GOVT, POLICE ], - [ vm_endspace ], - [ vm_space, 1, 1, 1, (s)=>is_dept(s) && !is_farc_zone(s) ], + [ vm_repeat, 3 ], + [ vm_if, ()=>!game.vm.opt ], + [ vm_prompt, "Place up to 3 Police into any Departments." ], + [ vm_space, 1, 1, 1, (s)=>is_dept(s) && can_stack_any(s, GOVT) ], [ vm_auto_place, 0, 0, GOVT, POLICE ], [ vm_endspace ], + [ vm_endif ], + [ vm_endrepeat ], [ vm_return ], // SHADED 50 - [ vm_piece, 0, 0, 2, (p,s)=>is_police(p) ], + [ vm_prompt, "Remove any 2 Police or replace them with available AUC Guerrillas." ], + [ vm_piece, 1, 0, 1, (p,s)=>is_police(p) ], [ vm_set_piece_space ], [ vm_remove ], [ vm_place, 0, 1, AUC, GUERRILLA ], + [ vm_set_space, -1 ], + [ vm_endpiece ], + [ vm_if, ()=>game.vm.opt ], + [ vm_prompt, "Remove 1 more Police." ], + [ vm_piece, 1, 0, 1, (p,s)=>is_police(p) ], + [ vm_remove ], [ vm_endpiece ], + [ vm_else ], + [ vm_prompt, "Replace 1 more Police with AUC Guerrilla." ], + [ vm_piece, 1, 0, 1, (p,s)=>is_police(p) ], + [ vm_set_piece_space ], + [ vm_remove ], + [ vm_auto_place, 0, 0, AUC, GUERRILLA ], + [ vm_set_space, -1 ], + [ vm_endpiece ], + [ vm_endif ], [ vm_return ], // EVENT 51 [ vm_if, ()=>is_any_pipeline_sabotaged() ], @@ -7705,35 +7735,51 @@ const CODE = [ [ vm_space, 1, 0, 0, (s)=>is_pipeline(s) && has_sabotage(s) ], [ vm_remove_sabotage ], [ vm_endspace ], - [ vm_return ], - [ vm_endif ], + [ vm_else ], [ vm_resources, GOVT, 12 ], + [ vm_endif ], [ vm_return ], // SHADED 51 - [ vm_prompt, "Sabotage Pipelines with or adjacent to FARC Guerrillas." ], + [ vm_prompt, "Sabotage 3 Pipelines with or adjacent to FARC Guerrillas." ], [ vm_space, 1, 0, 3, (s)=>is_pipeline(s) && is_with_or_adjacent_to_farc_guerrilla(s) ], [ vm_sabotage ], [ vm_endspace ], [ vm_return ], // EVENT 52 - [ vm_space, 1, 0, 2, (s)=>is_city(s) || is_mountain(s) ], + [ vm_prompt, "Shift 2 City or Mountain each 1 level toward Active Support." ], + [ vm_space, 1, 0, 2, (s)=>(is_city(s) || is_mountain(s)) && can_shift_support(s) ], [ vm_shift_support ], [ vm_endspace ], [ vm_return ], // SHADED 52 + [ vm_prompt, "Place an AUC Base into a space with AUC." ], [ vm_space, 1, 0, 1, (s)=>has_auc_piece(s) && can_stack_base(s, AUC) ], [ vm_auto_place, 0, 0, AUC, BASE ], [ vm_endspace ], - [ vm_resources, AUC, ()=>(count_pieces_on_map(AUC,BASE)) ], + [ vm_prompt, "AUC Resources +1 per AUC Base." ], + [ vm_piece, 0, 0, 0, (p,s)=>is_auc_base(p) ], + [ vm_auto_resources, AUC, 1 ], + [ vm_endpiece ], [ vm_return ], // EVENT 53 [ vm_current, [FARC,AUC,CARTELS] ], [ vm_prompt, "Select Departments to move Guerrillas between." ], - [ vm_space, 1, 0, 2, (s)=>is_dept(s) ], + [ vm_space, 1, 0, 1, (s)=>is_dept(s) ], [ vm_mark_space ], [ vm_endspace ], + [ vm_if, ()=>has_piece(game.vm.m[0], game.current, GUERRILLA) ], + [ vm_prompt, "Select Departments to move Guerrillas between." ], + [ vm_space, 1, 0, 1, (s)=>(s !== game.vm.m[0]) && is_dept(s) ], + [ vm_mark_space ], + [ vm_endspace ], + [ vm_else ], + [ vm_prompt, "Select Departments to move Guerrillas between." ], + [ vm_space, 1, 0, 1, (s)=>is_dept(s) && has_piece(s, game.current, GUERRILLA) ], + [ vm_mark_space ], + [ vm_endspace ], + [ vm_endif ], [ vm_prompt, "Move Guerrillas between Departments." ], - [ vm_piece, 0, 0, 2, (p,s)=>is_any_guerrilla(p) && (s === game.vm.m[0] || s === game.vm.m[1]) ], + [ vm_piece, 0, 0, 2, (p,s)=>is_piece(p, game.current, GUERRILLA) && (s === game.vm.m[0] || s === game.vm.m[1]) ], [ vm_if, ()=>piece_space(game.vm.p) === game.vm.m[0] ], [ vm_set_space, ()=>(game.vm.m[1]) ], [ vm_else ], @@ -7741,10 +7787,29 @@ const CODE = [ [ vm_endif ], [ vm_move ], [ vm_underground ], + [ vm_set_space, -1 ], [ vm_endpiece ], [ vm_return ], // EVENT 54 - [ vm_piece, 0, 1, 2, (p,s)=>is_any_guerrilla(p) ], + [ vm_if, ()=>false ], + [ vm_prompt, "Remove up to 2 Guerrillas or replace them with with another Faction." ], + [ vm_piece, 1, 1, 2, (p,s)=>is_any_guerrilla(p) ], + [ vm_set_piece_space ], + [ vm_remove ], + [ vm_if, ()=>piece_faction(game.vm.p) === FARC ], + [ vm_place, 0, 1, [AUC,CARTELS], GUERRILLA ], + [ vm_endif ], + [ vm_if, ()=>piece_faction(game.vm.p) === AUC ], + [ vm_place, 0, 1, [FARC,CARTELS], GUERRILLA ], + [ vm_endif ], + [ vm_if, ()=>piece_faction(game.vm.p) === CARTELS ], + [ vm_place, 0, 1, [FARC,AUC], GUERRILLA ], + [ vm_endif ], + [ vm_set_space, -1 ], + [ vm_endpiece ], + [ vm_else ], + [ vm_prompt, "Remove up to 2 Guerrillas or replace them with with another Faction's." ], + [ vm_piece, 1, 0, 1, (p,s)=>is_any_guerrilla(p) ], [ vm_set_piece_space ], [ vm_remove ], [ vm_if, ()=>piece_faction(game.vm.p) === FARC ], @@ -7756,13 +7821,38 @@ const CODE = [ [ vm_if, ()=>piece_faction(game.vm.p) === CARTELS ], [ vm_place, 0, 1, [FARC,AUC], GUERRILLA ], [ vm_endif ], + [ vm_set_space, -1 ], + [ vm_endpiece ], + [ vm_if, ()=>game.vm.opt ], + [ vm_prompt, "Remove 1 more Guerrilla." ], + [ vm_piece, 1, 1, 1, (p,s)=>is_any_guerrilla(p) ], + [ vm_remove ], [ vm_endpiece ], + [ vm_else ], + [ vm_prompt, "Replace 1 more Guerrilla." ], + [ vm_piece, 1, 1, 1, (p,s)=>is_any_guerrilla(p) ], + [ vm_set_piece_space ], + [ vm_remove ], + [ vm_if, ()=>piece_faction(game.vm.p) === FARC ], + [ vm_place, 0, 0, [AUC,CARTELS], GUERRILLA ], + [ vm_endif ], + [ vm_if, ()=>piece_faction(game.vm.p) === AUC ], + [ vm_place, 0, 0, [FARC,CARTELS], GUERRILLA ], + [ vm_endif ], + [ vm_if, ()=>piece_faction(game.vm.p) === CARTELS ], + [ vm_place, 0, 0, [FARC,AUC], GUERRILLA ], + [ vm_endif ], + [ vm_set_space, -1 ], + [ vm_endpiece ], + [ vm_endif ], + [ vm_endif ], [ vm_return ], // EVENT 55 + [ vm_prompt, "Remove 2 Shipments." ], [ vm_shipment, 0, 0, 2, (p,s)=>true ], [ vm_remove_shipment ], - [ vm_endpiece ], - [ vm_prompt, "Remove N Cartels Guerrillas." ], + [ vm_endshipment ], + [ vm_prompt, "Remove 5 Cartels Guerrillas." ], [ vm_piece, 0, 0, 5, (p,s)=>is_cartels_guerrilla(p) ], [ vm_remove ], [ vm_endpiece ], @@ -7778,24 +7868,28 @@ const CODE = [ [ vm_transfer, CARTELS, GOVT, 15 ], [ vm_return ], // SHADED 56 + [ vm_prompt, "Add twice Cartels pieces in Cities to Cartels Resources." ], [ vm_piece, 0, 0, 0, (p,s)=>is_cartels_piece(p) && is_city(s) ], [ vm_auto_resources, CARTELS, 2 ], [ vm_endpiece ], + [ vm_prompt, "Place a Cartels Base in each of 2 Cities." ], [ vm_space, 1, 0, 2, (s)=>is_city(s) && can_stack_base(s, CARTELS) ], [ vm_auto_place, 0, 0, CARTELS, BASE ], [ vm_endspace ], [ vm_return ], // EVENT 57 - [ vm_prompt, "Replace Cartels pieces with Police." ], - [ vm_piece, 0, 1, 3, (p,s)=>is_cartels_piece(p) ], + [ vm_prompt, "Replace up to 3 Cartels pieces with Police." ], + [ vm_piece, 1, 1, 3, (p,s)=>is_cartels_piece(p) ], [ vm_set_piece_space ], [ vm_remove ], [ vm_auto_place, 0, 0, GOVT, POLICE ], + [ vm_set_space, -1 ], [ vm_endpiece ], [ vm_return ], // SHADED 57 - [ vm_prompt, "In 2 spaces replace 1 Police with any Cartels piece." ], + [ vm_prompt, "In each of 2 spaces replace a Police with any Cartels piece." ], [ vm_space, 1, 0, 2, (s)=>has_police(s) ], + [ vm_prompt, "Replace a Police with any Cartels piece." ], [ vm_piece, 0, 0, 1, (p,s)=>is_piece_in_event_space(p) && is_police(p) ], [ vm_remove ], [ vm_place, 0, 0, CARTELS, [BASE,GUERRILLA] ], @@ -7804,6 +7898,7 @@ const CODE = [ [ vm_return ], // EVENT 58 [ vm_resources, CARTELS, -6 ], + [ vm_prompt, "Remove all Cartels Guerrillas." ], [ vm_piece, 0, 0, 0, (p,s)=>is_cartels_guerrilla(p) ], [ vm_remove ], [ vm_endpiece ], @@ -7811,36 +7906,42 @@ const CODE = [ // SHADED 58 [ vm_current, CARTELS ], [ vm_prompt, "Relocate up to 4 Police to any spaces." ], - [ vm_piece, 0, 1, 4, (p,s)=>is_police(p) ], - [ vm_space, 1, 0, 1, (s)=>can_stack_piece(s, GOVT, POLICE) ], + [ vm_piece, 1, 1, 4, (p,s)=>is_police(p) ], + [ vm_prompt, "Relocate Police to any space." ], + [ vm_space, 0, 0, 1, (s)=>can_stack_piece(s, GOVT, POLICE) ], [ vm_move ], [ vm_endspace ], [ vm_endpiece ], [ vm_return ], // EVENT 59 [ vm_current, GOVT ], + [ vm_prompt, "All Cartels Guerrillas to Active." ], [ vm_piece, 0, 0, 0, (p,s)=>is_cartels_guerrilla(p) && is_underground(p) ], [ vm_activate ], [ vm_endpiece ], + [ vm_prompt, "Free Assault against Cartels in each space." ], [ vm_space, 1, 0, 0, (s)=>can_assault(s, CARTELS) ], [ vm_free_assault_cartels ], [ vm_endspace ], [ vm_return ], // SHADED 59 [ vm_current, CARTELS ], - [ vm_prompt, "Flip all Cartels Guerrillas underground." ], + [ vm_prompt, "Flip all Cartels Guerrillas Underground." ], [ vm_piece, 0, 0, 0, (p,s)=>is_cartels_guerrilla(p) && is_active(p) ], [ vm_underground ], [ vm_endpiece ], - [ vm_prompt, "Relocate Cartels Guerrillas anywhere." ], - [ vm_piece, 0, 1, 3, (p,s)=>is_cartels_guerrilla(p) ], - [ vm_space, 1, 0, 1, (s)=>can_stack_piece(s, CARTELS, GUERRILLA) ], + [ vm_prompt, "Relocate up to 3 Cartels Guerrillas anywhere." ], + [ vm_piece, 1, 1, 3, (p,s)=>is_cartels_guerrilla(p) ], + [ vm_prompt, "Relocate Cartels Guerrilla anywhere." ], + [ vm_space, 0, 0, 1, (s)=>!is_event_piece_space(s) && can_stack_piece(s, CARTELS, GUERRILLA) ], [ vm_move ], [ vm_endspace ], [ vm_endpiece ], [ vm_return ], // EVENT 60 + [ vm_prompt, "Remove all Cartels pieces from 2 Cities or 1 Department." ], [ vm_space, 1, 0, 2, (s)=>has_cartels_piece(s) && ((is_city(s) && (game.vm.ss.length === 0 || is_city(game.vm.ss[0]))) || (is_dept(s) && game.vm.ss.length === 0)) ], + [ vm_prompt, "Remove all Cartels pieces." ], [ vm_piece, 0, 0, 0, (p,s)=>is_piece_in_event_space(p) && is_cartels_piece(p) ], [ vm_remove ], [ vm_endpiece ], @@ -7849,38 +7950,46 @@ const CODE = [ [ vm_return ], // SHADED 60 [ vm_current, CARTELS ], + [ vm_prompt, "Place a Cartels Base in each of 2 Cities." ], [ vm_space, 1, 0, 2, (s)=>is_city(s) && can_stack_base(s, CARTELS) ], [ vm_auto_place, 0, 0, CARTELS, BASE ], [ vm_endspace ], - [ vm_space, 1, 0, 1, (s)=>is_space(s) ], + [ vm_prompt, "Free Bribe in 1 space." ], + [ vm_space, 1, 0, 1, (s)=>!is_empty(s) ], [ vm_free_bribe ], [ vm_endspace ], [ vm_return ], // EVENT 61 - [ vm_space, 1, 0, 1, (s)=>is_city(s) ], - [ vm_piece, 0, 0, 0, (p,s)=>is_piece_in_event_space(p) && is_cartels_piece(p) ], + [ vm_prompt, "Remove all Cartels pieces from 1 City." ], + [ vm_space, 1, 0, 1, (s)=>is_city(s) && has_cartels_piece(s) ], + [ vm_prompt, "Remove all Cartels pieces." ], + [ vm_piece, 1, 0, 0, (p,s)=>is_piece_in_event_space(p) && is_cartels_piece(p) ], [ vm_remove ], [ vm_endpiece ], [ vm_endspace ], [ vm_resources, CARTELS, -6 ], [ vm_return ], // SHADED 61 - [ vm_space, 1, 0, 3, (s)=>!has_cartels_piece(s) && can_stack_base(s, CARTELS) ], + [ vm_prompt, "Place 1 Cartels Base into each of 3 Departments with no Cartels pieces." ], + [ vm_space, 1, 0, 3, (s)=>is_dept(s) && !has_cartels_piece(s) && can_stack_base(s, CARTELS) ], [ vm_auto_place, 0, 0, CARTELS, BASE ], [ vm_endspace ], [ vm_return ], // EVENT 62 - [ vm_piece, 0, 1, 3, (p,s)=>is_insurgent_piece(p) && is_zero_pop_forest(s) ], + [ vm_prompt, "Remove up to 3 Insurgent pieces for 0 Population Forests." ], + [ vm_piece, 1, 1, 3, (p,s)=>is_insurgent_piece(p) && is_zero_pop_forest(s) ], [ vm_remove ], [ vm_endpiece ], [ vm_return ], // SHADED 62 - [ vm_space, 1, 0, 3, (s)=>s === GUAINIA || s === VAUPES || s === AMAZONAS ], + [ vm_prompt, "Place 1 Cartels Base each in Guainia, Vaupés, and Amazonas." ], + [ vm_space, 1, 0, 3, (s)=>(s === GUAINIA || s === VAUPES || s === AMAZONAS) && can_stack_base(s, CARTELS) ], [ vm_auto_place, 0, 0, CARTELS, BASE ], [ vm_endspace ], [ vm_return ], // EVENT 63 [ vm_current, CARTELS ], + [ vm_prompt, "In each space with Cartels Guerrillas..." ], [ vm_space, 1, 0, 0, (s)=>has_cartels_guerrilla(s) ], [ vm_prompt, "Remove all but one Cartels Guerrilla." ], [ vm_piece, 0, 0, 0, (p,s)=>is_piece_in_event_space(p) && is_cartels_guerrilla(p) && count_pieces(s, CARTELS, GUERRILLA) > 1 ], @@ -7895,33 +8004,41 @@ const CODE = [ [ vm_ineligible, CARTELS ], [ vm_return ], // EVENT 64 - [ vm_prompt, "Place Shipments with FARC Guerrillas." ], - [ vm_piece, 0, 0, 2, (p,s)=>is_farc_guerrilla(p) && has_cartels_base(s) && has_available_shipment() ], + [ vm_repeat, 2 ], + [ vm_prompt, "Place 2 Shipments with FARC Guerrillas in the same spaces as Cartels Bases." ], + [ vm_if, ()=>has_available_shipment() ], + [ vm_asm, ()=>game.vm.shipment = find_available_shipment() ], + [ vm_piece, 1, 0, 1, (p,s)=>is_farc_guerrilla(p) && has_cartels_base(s) ], [ vm_place_shipment ], [ vm_endpiece ], + [ vm_endif ], + [ vm_endrepeat ], [ vm_return ], // SHADED 64 - [ vm_prompt, "Select each Cartels Base in a City." ], + [ vm_prompt, "Cartels Resources +2 for each Cartels Base in a City." ], [ vm_piece, 0, 0, 0, (p,s)=>is_cartels_base(p) && is_city(s) ], [ vm_auto_resources, CARTELS, 2 ], [ vm_endpiece ], - [ vm_prompt, "Select each Cartels Base in a Department." ], + [ vm_prompt, "Cartels Resources +1 for each Cartels Base in a Department." ], [ vm_piece, 0, 0, 0, (p,s)=>is_cartels_base(p) && is_dept(s) ], [ vm_auto_resources, CARTELS, 1 ], [ vm_endpiece ], [ vm_return ], // EVENT 65 + [ vm_prompt, "Place or remove 1 Shipment and Insurgent Base in any Mountain Department." ], [ vm_space, 1, 0, 1, (s)=>is_mountain(s) ], [ vm_place_or_remove_shipment ], [ vm_place_or_remove_insurgent_base ], [ vm_endspace ], [ vm_return ], // EVENT 66 - [ vm_piece, 0, 0, 3, (p,s)=>is_cartels_base(p) && is_forest(s) ], + [ vm_prompt, "Remove 3 Cartels Bases from Forest." ], + [ vm_piece, 1, 0, 3, (p,s)=>is_cartels_base(p) && is_forest(s) ], [ vm_remove ], [ vm_endpiece ], [ vm_return ], // SHADED 66 + [ vm_prompt, "Place Cartels Base into each Forest that already has one." ], [ vm_space, 1, 0, 0, (s)=>is_forest(s) && has_cartels_base(s) && can_stack_base(s, CARTELS) ], [ vm_auto_place, 0, 0, CARTELS, BASE ], [ vm_endspace ], @@ -7934,23 +8051,25 @@ const CODE = [ [ vm_momentum, MOM_MEXICAN_TRAFFICKERS ], [ vm_return ], // EVENT 68 - [ vm_prompt, "Remove 2 Cartels pieces or up to 2 Shipments in coastal spaces." ], + [ vm_prompt, "Remove 2 Cartels pieces or up to 2 Shipments from coastal spaces." ], [ vm_select_shipment_or_cartels_piece_in_coastal_space ], [ vm_if, ()=>game.vm.p >= 0 ], [ vm_remove ], + [ vm_prompt, "Remove 1 more Cartels piece from coastal spaces." ], [ vm_piece, 0, 0, 1, (p,s)=>is_coastal_space(s) && is_cartels_piece(p) ], [ vm_remove ], [ vm_endpiece ], [ vm_endif ], [ vm_if, ()=>game.vm.sh >= 0 ], [ vm_remove_shipment ], + [ vm_prompt, "Remove up to 1 more Shipment from coastal spaces." ], [ vm_shipment, 0, 1, 1, (p,s)=>is_coastal_space(s) ], [ vm_remove_shipment ], [ vm_endshipment ], [ vm_endif ], [ vm_return ], // SHADED 68 - [ vm_prompt, "Select each Cartels piece in coastal spaces." ], + [ vm_prompt, "Cartels Resources +2 per Cartels piece in coastal spaces." ], [ vm_piece, 0, 0, 0, (p,s)=>is_cartels_piece(p) && is_coastal_space(s) ], [ vm_auto_resources, CARTELS, 2 ], [ vm_endpiece ], @@ -7966,34 +8085,34 @@ const CODE = [ [ vm_mark_space ], [ vm_endspace ], [ vm_endif ], - [ vm_prompt, "Select destination space." ], + [ vm_prompt, "Select destination Department." ], + [ vm_space, 1, 0, 1, (s)=>(s !== game.vm.m[0]) && is_within_adjacent_depts(s, game.vm.m[0], 3) && can_stack_any(s, game.current) ], [ vm_if, ()=>game.current === GOVT ], - [ vm_space, 1, 0, 1, (s)=>(s !== game.vm.m[0]) && !is_farc_zone(s) && is_within_adjacent_depts(s, game.vm.m[0], 3) ], [ vm_prompt, "Move cubes to destination." ], - [ vm_piece, 0, 1, 0, (p,s)=>(s === game.vm.m[0]) && is_cube(p) ], + [ vm_piece, 1, 1, 0, (p,s)=>(s === game.vm.m[0]) && is_cube(p) && can_stack_any(s, GOVT) ], [ vm_move ], [ vm_endpiece ], [ vm_free_train_sweep_assault ], - [ vm_endspace ], [ vm_else ], - [ vm_space, 1, 0, 1, (s)=>(s !== game.vm.m[0]) && is_within_adjacent_depts(s, game.vm.m[0], 3) ], [ vm_prompt, "Move Guerrillas to destination." ], - [ vm_piece, 0, 1, 0, (p,s)=>console.log("CHECK",p,s) || ((s === game.vm.m[0]) && is_piece(p, game.current, GUERRILLA)) ], + [ vm_piece, 1, 1, 0, (p,s)=>(s === game.vm.m[0]) && is_piece(p, game.current, GUERRILLA) && can_stack_any(s, game.current) ], [ vm_move ], [ vm_endpiece ], [ vm_free_rally_attack_terror ], - [ vm_endspace ], [ vm_endif ], + [ vm_endspace ], [ vm_return ], // EVENT 70 - [ vm_prompt, "Select each Forest without Guerrillas." ], + [ vm_prompt, "Government Resources +6 for each Forest without Guerrillas." ], [ vm_space, 0, 0, 0, (s)=>is_forest(s) && !has_any_guerrilla(s) ], [ vm_auto_resources, GOVT, 6 ], [ vm_endspace ], [ vm_return ], // SHADED 70 [ vm_current, [FARC,AUC,CARTELS] ], + [ vm_prompt, "Free Terror in each Forest and +3 Resources per Terror." ], [ vm_space, 1, 0, 0, (s)=>is_forest(s) && has_piece(s, game.current, GUERRILLA) ], + [ vm_prompt, "Free Terror with any 1 Guerrilla." ], [ vm_piece, 0, 0, 1, (p,s)=>is_piece_in_event_space(p) && is_piece(p, game.current, GUERRILLA) ], [ vm_free_terror ], [ vm_auto_resources, ()=>(game.current), 3 ], @@ -8011,22 +8130,27 @@ const CODE = [ [ vm_return ], // SHADED 71 [ vm_capability, EVT_DARIEN ], - [ vm_set_space, PANAMA ], - [ vm_place, 0, 0, ()=>(game.current), BASE ], + [ vm_prompt, "Place 1-2 Bases in Panamá." ], + [ vm_space, 1, 0, 1, (s)=>s === PANAMA ], + [ vm_auto_place, 0, 0, ()=>(game.current), BASE ], [ vm_place, 0, 1, ()=>(game.current), BASE ], + [ vm_endspace ], [ vm_return ], // EVENT 72 + [ vm_prompt, "Replace all Cartels Guerrillas in 2 spaces with other Guerrillas." ], [ vm_space, 1, 0, 2, (s)=>has_cartels_guerrilla(s) ], - [ vm_piece, 0, 0, 0, (p,s)=>is_piece_in_event_space(p) && is_cartels_guerrilla(p) ], + [ vm_prompt, "Replace all Cartels Guerrillas with other Guerrillas." ], + [ vm_piece, 1, 0, 0, (p,s)=>is_piece_in_event_space(p) && is_cartels_guerrilla(p) ], [ vm_remove ], [ vm_place, 0, 0, [FARC,AUC], GUERRILLA ], [ vm_endpiece ], [ vm_endspace ], [ vm_return ], // SHADED 72 - [ vm_prompt, "Place all available Cartels Guerrillas into spaces with Cartels Bases." ], [ vm_if, ()=>count_pieces_on_map(CARTELS, BASE) > 0 ], [ vm_while, ()=>has_piece(AVAILABLE, CARTELS, GUERRILLA) ], + [ vm_prompt, "Place all available Cartels Guerrillas into spaces with Cartels Bases." ], + [ vm_asm, ()=>game.vm.p = find_piece(AVAILABLE, CARTELS, GUERRILLA) ], [ vm_space, 1, 0, 1, (s)=>has_cartels_base(s) ], [ vm_auto_place, 0, 0, CARTELS, GUERRILLA ], [ vm_endspace ], @@ -8034,5 +8158,5 @@ const CODE = [ [ vm_endif ], [ vm_return ], ] -const UCODE = [0,1,7,13,19,29,47,61,67,74,80,86,92,98,104,125,133,140,146,153,165,181,193,201,221,239,254,265,273,290,311,323,337,344,356,366,382,392,408,424,438,462,476,486,503,515,527,544,570,583,592,609,623,632,648,662,676,685,700,713,733,748,759,767,781,795,800,808,813,833,862,876,888] -const SCODE = [0,4,10,16,24,41,52,64,72,77,83,89,95,101,113,128,138,143,149,0,174,187,198,213,227,247,260,270,281,300,320,332,342,351,358,376,0,398,416,429,445,471,482,496,509,520,0,553,579,587,603,618,627,0,0,671,678,692,705,721,740,755,763,0,786,0,804,810,828,0,867,883,895] +const UCODE = [0,1,7,13,19,29,47,61,67,74,80,86,92,98,104,125,133,140,146,153,165,181,193,201,221,239,254,265,273,290,311,323,337,344,356,366,382,392,408,424,438,463,477,487,504,516,528,545,571,585,596,628,642,656,684,740,755,766,783,798,821,840,854,864,879,898,904,914,919,941,968,984,998] +const SCODE = [0,4,10,16,24,41,52,64,72,77,83,89,95,101,113,128,138,143,149,0,174,187,198,213,227,247,260,270,281,300,320,332,342,351,358,376,0,398,416,429,446,472,483,497,510,521,0,554,580,590,606,637,647,0,0,750,757,774,789,808,830,849,859,0,889,0,909,916,936,0,973,991,1007] diff --git a/tools/gendata.js b/tools/gendata.js index f28a134..93a72d5 100644 --- a/tools/gendata.js +++ b/tools/gendata.js @@ -454,8 +454,8 @@ def_space("forest", 0, "Amazonas") // Foreign Countries -def_space("foreign", 0, "Ecuador") -def_space("foreign", 0, "Panamá") +def_space("grassland", 0, "Ecuador") +def_space("forest", 0, "Panamá") data.last_dept = spaces.length-1 -- cgit v1.2.3