diff options
author | Tor Andersson <tor@ccxvii.net> | 2022-10-23 11:35:44 +0200 |
---|---|---|
committer | Tor Andersson <tor@ccxvii.net> | 2023-02-18 12:42:59 +0100 |
commit | b41a70ba13ce4638fa1690407d2d619142dccd94 (patch) | |
tree | 9574a3142ecfa58583f1b574286f5cd0ff198567 | |
parent | 4f40cad7a178b8b9409883b18f75623fe9992840 (diff) | |
download | 300-earth-and-water-b41a70ba13ce4638fa1690407d2d619142dccd94.tar.gz |
Allow Miltiades in attack after an amphibious landing.
Move trigger prompt to just before land battle round instead of after
movement.
-rw-r--r-- | rules.js | 44 |
1 files changed, 32 insertions, 12 deletions
@@ -1223,18 +1223,10 @@ states.greek_land_movement_confirm = { if (is_inactive_player(current)) return view.prompt = "Greek Land Movement."; view.prompt = "Greek Land Movement: Confirm destination."; - if (game.greek.hand.includes(MILTIADES) && can_play_miltiades_attack()) { - view.prompt += " You may play Miltiades."; - gen_action(view, 'card_event', MILTIADES); - } gen_action(view, 'city', game.where); gen_action(view, 'next'); gen_action_undo(view); }, - card_event: function () { - push_undo(); - play_miltiades_attack(); - }, city: end_greek_land_movement, next: end_greek_land_movement, undo: pop_undo, @@ -1695,13 +1687,21 @@ function goto_greek_land_battle() { log("Greece attacked " + game.where + "!"); game.immortals = Math.min(3, count_persian_armies(game.where)); game.active = GREECE; - greek_land_battle_round(); + goto_greek_land_battle_react(); } else { game.from = null; end_greek_movement(); } } +function goto_greek_land_battle_react() { + if (can_play_miltiades_attack()) { + game.state = 'greek_land_battle_react'; + } else { + greek_land_battle_round(); + } +} + states.persian_land_battle_react = { prompt: function (view, current) { let m = can_play_miltiades_defense(); @@ -1748,6 +1748,25 @@ states.persian_land_battle_react = { }, } +states.greek_land_battle_react = { + prompt: function (view, current) { + if (is_inactive_player(current)) + return view.prompt = "Greek Land Battle: Greece may play Miltiades."; + view.prompt = "Greek Land Battle: Greece attacks " + game.where + "!"; + + gen_action(view, 'next'); + if (game.greek.hand.includes(MILTIADES)) { + gen_action(view, 'card_event', MILTIADES); + view.prompt += " You may play Miltiades."; + } + }, + card_event: function (card) { + play_miltiades_attack(); + }, + next: greek_land_battle_round, + undo: pop_undo, +} + function greek_battle_dice() { if (game.greek.battle_event === MILTIADES) return 3; @@ -2904,6 +2923,7 @@ function play_miltiades_attack() { if (count_greek_armies(RESERVE) > 0) { remove_greek_army(RESERVE); game.trigger.miltiades = 1; + goto_greek_land_battle_react(); } else { game.state = 'miltiades_attack_pay'; } @@ -2912,7 +2932,7 @@ function play_miltiades_attack() { states.miltiades_defense_pay = { prompt: function (view, current) { if (is_inactive_player(current)) - return view.prompt = "Leonidas."; + return view.prompt = "Miltiades."; view.prompt = "Miltiades: Remove one Greek army to pay for the event."; for (let city of CITIES) { let need = (city === game.where) ? 2 : 1; @@ -2933,7 +2953,7 @@ states.miltiades_defense_pay = { states.miltiades_attack_pay = { prompt: function (view, current) { if (is_inactive_player(current)) - return view.prompt = "Leonidas."; + return view.prompt = "Miltiades."; view.prompt = "Miltiades: Remove one Greek army to pay for the event."; for (let city of CITIES) { let need = (city === game.where) ? 2 : 1; @@ -2946,7 +2966,7 @@ states.miltiades_attack_pay = { push_undo(); remove_greek_army(space); game.trigger.miltiades = 1; - game.state = 'greek_land_movement_confirm'; + goto_greek_land_battle_react(); }, undo: pop_undo, } |