From 1499afe7b4fa9b7e87736106f83dff390d0e3ddb Mon Sep 17 00:00:00 2001 From: Joël Simoneau Date: Sun, 9 Mar 2025 13:58:46 -0400 Subject: Event 34. --- events.txt | 7 ++++-- rules.js | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 75 insertions(+), 9 deletions(-) diff --git a/events.txt b/events.txt index 3a27b50..c348c54 100644 --- a/events.txt +++ b/events.txt @@ -625,10 +625,13 @@ SHADED 33 resources_opt VE (-Math.floor(game.resources[VE]/2)) EVENT 34 - log "NOT IMPLEMENTED" + current VE + steal VE BK 2 + steal_cavalry VE BK 2 SHADED 34 - log "NOT IMPLEMENTED" + current BK + conspire_trade EVENT 35 current REBEL_FACTIONS diff --git a/rules.js b/rules.js index 8de4676..a1eab39 100644 --- a/rules.js +++ b/rules.js @@ -266,7 +266,7 @@ exports.setup = function (seed, scenario, _options) { } function setup_deck() { - game.deck = [ 38, 4, 12, 13, 6, 7, 21, 28, 29, 30, 31 ] + game.deck = [ 4, 12, 13, 6, 34, 7, 21, 28, 29, 30, 31 ] } function setup_standard() { @@ -2933,6 +2933,12 @@ function gen_take_cavalry(faction) { return can_place } +function gen_take_faction_cavalry(faction) { + for (let c = 0; c <= LAST_CAVALRY; ++c) + if (game.cavalry[c] === faction) + gen_action_token(c) + } + function set_cavalry_faction(c, f) { game.cavalry[c] = f } @@ -2956,6 +2962,10 @@ function has_cavalry(faction) { return find_cavalry(faction) != -1 } +function n_cavalry(faction) { + return game.cavalry.filter(c => c === faction).length +} + function use_cavalry(faction) { let c = find_cavalry(faction) game.cavalry[c] = AVAILABLE @@ -4323,7 +4333,6 @@ states.vm_steal = { // VM : CAVALRY OR RESOURCES function vm_cav_resources() { - push_undo() push_summary() game.vm.count = vm_inst(1) game.state = "vm_cav_resources" @@ -4356,6 +4365,39 @@ function tick_cav_resources() { } } +function vm_steal_cavalry() { + game.state = "vm_steal_cavalry" +} + +states.vm_steal_cavalry = { + prompt() { + let f1 = vm_operand(1) + let f2 = vm_operand(2) + let n = Math.min(vm_operand(3), n_cavalry(f2)) + if (n == 0) { + event_prompt(`${faction_name[f2]} has no Cavalry token.`) + view.actions.skip = 1 + } else { + event_prompt(`Steal ${n} Calvary token from ${faction_name[f2]}.`) + gen_take_faction_cavalry(f2) + } + }, + token(c) { + let f2 = vm_operand(2) + let n = Math.min(vm_operand(3), n_cavalry(f2)) + for (let i = 0; i < n; ++i) { + c = find_cavalry(f2) + set_cavalry_faction(c, game.current) + } + log(`${faction_name[game.current]} steals ${n} Cavalry token from ${faction_name[f2]}.`) + vm_next() + }, + skip() { + vm_next() + } +} + + // VM : REBEL function vm_to_rebel() { @@ -4459,6 +4501,27 @@ function vm_free_rally() { goto_rally_space() } +// VM: MIX + +function vm_conspire_trade() { game.state = "vm_conspire_trade" } + +states.vm_conspire_trade = { + prompt() { + event_prompt("Conspire or Trade") + view.actions.conspire = can_conspire() ? 1 : 0 + view.actions.trade = can_trade() ? 1 : 0 + }, + conspire() { + push_undo() + goto_conspire() + }, + trade() { + push_undo() + goto_trade() + } +} + + // VM: EVENT_4 function vm_event_4() { @@ -4914,9 +4977,6 @@ CODE[12 * 2 + 1] = [ // EVENT 13 CODE[13 * 2 + 0] = [ - [ vm_add_influence, VE ], - [ vm_add_influence, VE ], - [ vm_add_influence, VE ], [ vm_current, VE ], [ vm_asm, ()=>game.vm.count = (Math.min((4 - game.inf[VE]), 2) * 2) ], [ vm_add_influence, VE ], @@ -5416,13 +5476,16 @@ CODE[33 * 2 + 1] = [ // EVENT 34 CODE[34 * 2 + 0] = [ - [ vm_log, "NOT IMPLEMENTED" ], + [ vm_current, VE ], + [ vm_steal, VE, BK, 2 ], + [ vm_steal_cavalry, VE, BK, 2 ], [ vm_return ], ] // SHADED 34 CODE[34 * 2 + 1] = [ - [ vm_log, "NOT IMPLEMENTED" ], + [ vm_current, BK ], + [ vm_conspire_trade ], [ vm_return ], ] -- cgit v1.2.3