diff options
author | Tor Andersson <tor@ccxvii.net> | 2025-04-01 23:32:52 +0200 |
---|---|---|
committer | Tor Andersson <tor@ccxvii.net> | 2025-04-01 23:52:15 +0200 |
commit | 957687eee3e06581a32a42f0fe4435e9bf838b36 (patch) | |
tree | e0a70675beac7b00d0d47c128570f8d0bd8d391c /rules.js | |
parent | 6cabceb4930650751189f7e9a6559fa30799fdce (diff) | |
download | maria-957687eee3e06581a32a42f0fe4435e9bf838b36.tar.gz |
Improve Austria+PA combat phase.
Compute all combats at start. Resolve Austrian attacks first.
Fixes glitch where general retreats from Austrian general next to
PA general and is attacked twice!
Diffstat (limited to 'rules.js')
-rw-r--r-- | rules.js | 38 |
1 files changed, 26 insertions, 12 deletions
@@ -1479,8 +1479,8 @@ const advanced_sequence_of_play = [ { power: P_PRAGMATIC, action: goto_movement }, { power: P_PRAGMATIC, action: validate_end_movement }, + // austria + pragmatic shared combat phase { power: P_AUSTRIA, action: goto_combat }, - { power: P_PRAGMATIC, action: goto_combat }, { power: P_AUSTRIA, action: end_action_stage }, { power: P_FRANCE, action: goto_end_turn }, @@ -3806,7 +3806,7 @@ function goto_combat() { let from = [] let to = [] - for (let p of all_controlled_generals(game.power)) { + for (let p of all_coop_generals(game.power)) { if (piece_power[p] === P_PRUSSIA && is_prussia_neutral()) continue if (piece_power[p] === P_SAXONY && is_saxony_neutral()) @@ -3834,14 +3834,26 @@ function goto_combat() { } } - if (game.combat.length > 0) - game.state = "combat" - else - goto_retroactive_conquest() + next_combat() } -function next_combat() { +function set_active_to_next_combat_power() { set_active_to_current_sequence_of_play() + if (is_intro() || is_two_player()) + return + // resolve all austria combat first + if (game.power === P_AUSTRIA) { + for (let i = 0; i < game.combat.length; i += 2) { + let p = get_supreme_commander(game.combat[i]) + if (p >= 0 && piece_power[p] === P_AUSTRIA) + return + } + set_active_to_power(P_PRAGMATIC) + } +} + +function next_combat() { + set_active_to_next_combat_power() game.count = 0 delete game.attacker delete game.defender @@ -3855,8 +3867,11 @@ states.combat = { inactive: "attack", prompt() { prompt("Resolve your attacks.") - for (let i = 0; i < game.combat.length; i += 2) - gen_action_supreme_commander(game.combat[i]) + for (let i = 0; i < game.combat.length; i += 2) { + let p = get_supreme_commander(game.combat[i]) + if (p >= 0 && is_controlled_power(game.power, piece_power[p])) + gen_action_piece(p) + } }, piece(p) { push_undo() @@ -4502,9 +4517,8 @@ function goto_retroactive_conquest() { apply_retroactive_conquest(conq, game.power) } } else { - if (game.power === P_AUSTRIA) { - // wait until pragmatic has also finished combat - } else if (game.power === P_PRAGMATIC) { + if (game.power === P_AUSTRIA || game.power === P_PRAGMATIC) { + // shared combat phase apply_retroactive_conquest(conq, P_AUSTRIA) apply_retroactive_conquest(conq, P_PRAGMATIC) } else { |