From b4401cc81a4264b21a10f849438174d383ebade7 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Sun, 7 May 2023 21:30:39 +0200 Subject: Event tweaks. --- events.txt | 4 ++-- rules.js | 36 +++++++++++++++++++++++++++++++++--- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/events.txt b/events.txt index bb6cff4..279339c 100644 --- a/events.txt +++ b/events.txt @@ -54,6 +54,8 @@ CARD 9 - Socialist Newspaper Ban CARD 10 - Fortification of Mont-Valérien place_up_to 1 MONT_VALERIEN + # reassess control after placing the cube + asm update_presence_and_control() if (is_control(MONT_VALERIEN)) may_place_disc MONT_VALERIEN endif @@ -100,7 +102,6 @@ CARD 18 - Paule Minck replace 1 (where_present(MILITARY)) CARD 19 - Walery Wroblewski - # NOTE: exact place_disc (where_present(PARIS)) CARD 20 - Banque de France @@ -174,7 +175,6 @@ CARD 34 - Charles Delescluze # Neutral Cards CARD 35 - Conciliation - # move_between_up_to 2 PUBLIC_OPINION PARIS prompt "Move up to 2 from Public Opinion or Paris to the other." switch ["public_opinion","paris"] case "public_opinion" diff --git a/rules.js b/rules.js index 5ee771b..e73ff63 100644 --- a/rules.js +++ b/rules.js @@ -752,7 +752,7 @@ function find_available_cube(removed=0) { if (p >= 0) return p } - for (let i = 0; i < 3; ++i) { + for (let i = 2; i >= 0; --i) { p = find_commune_cube(RED_CUBE_POOL[i]) if (p >= 0) return p @@ -1490,10 +1490,14 @@ states.operations_done = { } function end_operations() { - if (game.vm) + if (game.vm) { vm_next() - else + // Fast-forward past "All done" if Ops was the last thing in an event. + if (game.state === "vm_return") + end_event() + } else { end_card_play() + } } // === SET ASIDE CARDS === @@ -1554,6 +1558,7 @@ states.bonus_action = { let dimension = DIMENSION_SPACES[game.where] view.prompt = "Bonus Action in " + DIMENSION_NAME[game.where] + "." view.where = game.where + view.actions.skip = 1 view.actions.de_escalate = 1 view.actions.spread_influence = 1 if (can_replace_cube_in_any(dimension)) @@ -1575,6 +1580,9 @@ states.bonus_action = { push_undo() game.state = "turncoat" }, + skip() { + resume_pivotal_space_bonus_actions() + }, } states.de_escalate_1 = { @@ -1867,6 +1875,7 @@ function resume_final_crisis() { if (game.red_hand.length === 0 && game.blue_hand.length === 0) { goto_pivotal_space_bonus_actions() } else { + game.state = "final_crisis_events" game.active = game.final_active game.active = enemy_player() } @@ -1972,6 +1981,7 @@ function goto_play_event(c) { function end_event() { if (is_objective_card(game.vm.fp)) { + assess_crisis_breach_all() game.vm = null resume_objective_card_events() } else { @@ -2506,6 +2516,26 @@ states.vm_remove = { }, } +states.vm_remove_own = { + prompt() { + event_prompt() + if (game.vm.upto) + view.actions.skip = 1 + for (let s of game.vm.spaces) + for_each_friendly_cube(s, gen_action_piece) + }, + piece(p) { + push_undo() + remove_piece(p) + if (--game.vm.count === 0) + vm_next() + }, + skip() { + push_undo() + vm_next() + }, +} + function can_vm_move() { let from = false let to = false -- cgit v1.2.3