From 08a6dd93a3d475a9f9f666fe00505131e1bd231e Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Sat, 27 Jul 2024 19:56:26 +0200 Subject: capture washington during movement --- rules.js | 63 +++++++++++++++++++++++++++++++++++++++++++++++---------------- 1 file changed, 47 insertions(+), 16 deletions(-) diff --git a/rules.js b/rules.js index 96763e2..8132a93 100644 --- a/rules.js +++ b/rules.js @@ -1,15 +1,17 @@ "use strict" -// TODO: capture washington // TODO: draw after battle - delay until end of campaign // TODO: more manual steps (events) /* washington's capture - winning general with no CU on enemy PC (no undo anyway) + at end of activation - retreat after battle (no undo anyway) - + at end of activation - place reinforcements (no player shift) + at end of activation - move (no player shift) + immediately */ /* DATA */ @@ -806,7 +808,7 @@ function capture_washington() { } console.log("CAPTURE WASHINGTON!!!") - game.captured_washington = 1 + game.washington_captured = 1 } function capture_british_general(where) { @@ -1478,8 +1480,7 @@ function end_strategy_card() { return false } - if (game.captured_washington) { - delete game.captured_washington + if (game.washington_captured) { goto_george_washington_captured() return false } @@ -2228,6 +2229,9 @@ function resume_moving() { // TODO: auto-end move or require manually stopping at final space? if (game.move.count === 0) end_move(false) + else + if (game.washington_captured) + goto_george_washington_captured_during_move() } function end_move(stop) { @@ -2484,8 +2488,6 @@ function can_retreat_before_battle_to(to) { return false if (has_friendly_cu(to)) return false - if (is_lone && has_friendly_general(to)) - return false return true } @@ -3181,7 +3183,7 @@ function end_battle() { if (game.combat.british_losses >= 3) lose_regular_advantage() - // TODO: delay until end of campaign + // TODO: delay until end of campaign (at end of player's impulse) if (game.combat.b_draw_after_battle) set_add(game.b_hand, deal_card()) if (game.combat.a_draw_after_battle) @@ -3692,11 +3694,28 @@ function end_declaration_of_independence() { end_strategy_card() } +function do_event(c) { + let card = CARDS[c] + if (card.event in events) + events[card.event](c, card) + else + throw new Error("Event not implemented yet: " + card.event) +} + +/* GEORGE WASHINGTON CAPTURED */ + function goto_george_washington_captured() { game.state = "george_washington_captured" game.save = game.active game.active = P_BRITAIN game.count = 5 + delete game.washington_captured +} + +function goto_george_washington_captured_during_move() { + game.state = "george_washington_captured_during_move" + game.count = 5 + delete game.washington_captured } states.george_washington_captured = { @@ -3719,20 +3738,32 @@ states.george_washington_captured = { }, } +states.george_washington_captured_during_move = { + prompt() { + view.prompt = "George Washington is captured! Remove American PC markers. " + game.count + " left." + for (let space of all_spaces) + if (has_american_pc(space) && has_no_american_unit(space)) + gen_action_space(space) + view.actions.pass = 1 + }, + space(where) { + push_undo() + remove_pc(where) + if (--game.count === 0) + game.state = "ops_general_move" + }, + pass() { + push_undo() + game.state = "ops_general_move" + }, +} + function end_george_washington_captured() { game.active = game.save delete game.save end_strategy_card() } -function do_event(c) { - let card = CARDS[c] - if (card.event in events) - events[card.event](c, card) - else - throw new Error("Event not implemented yet: " + card.event) -} - /* WINTER ATTRITION PHASE */ function apply_single_winter_attrition(remove_cu, space) { -- cgit v1.2.3