diff options
author | Tor Andersson <tor@ccxvii.net> | 2025-02-08 10:13:34 +0100 |
---|---|---|
committer | Tor Andersson <tor@ccxvii.net> | 2025-02-08 10:13:34 +0100 |
commit | d47697e08d02fa0b955c4be6c734fd5d10a95e6b (patch) | |
tree | cc835e0b8ca7238756229d78327a76c23f052422 /rules.js | |
parent | 21f9d57c419e57d180921ccd3175622f1f92cc6c (diff) | |
download | maria-d47697e08d02fa0b955c4be6c734fd5d10a95e6b.tar.gz |
Only remove stack from combat if completely moved.
For example mixed prussian/saxon stack when saxony defects.
Diffstat (limited to 'rules.js')
-rw-r--r-- | rules.js | 26 |
1 files changed, 18 insertions, 8 deletions
@@ -1112,6 +1112,13 @@ function is_protected_from_conquest(s) { return false } +function has_no_generals_in_space(s) { + for (let p of all_generals) + if (game.pos[p] === s) + return false + return true +} + /* STATE */ function is_intro() { @@ -3770,10 +3777,10 @@ function end_recruit() { /* COMBAT (CHOOSE TARGETS) */ -function remove_from_combat(p) { - let s = game.pos[p] +function remove_from_combat(s) { if (game.combat) - game.combat = map_filter(game.combat, (atk, def) => atk !== s && def !== s) + if (has_no_generals_in_space(s)) + game.combat = map_filter(game.combat, (atk, def) => atk !== s && def !== s) } function goto_combat() { @@ -5692,10 +5699,11 @@ states.saxony_return_foreign_where = { gen_action_space(s) }, space(s) { - if (is_general(game.selected)) - remove_from_combat(game.selected) + let from = game.pos[game.selected] log(">P" + game.selected + " to S" + s) enter_piece_at(game.selected, s) + if (is_general(game.selected)) + remove_from_combat(from) game.selected = -1 game.state = "saxony_return_foreign_who" }, @@ -5721,11 +5729,12 @@ states.saxony_return_home = { view.actions.next = 1 }, piece(p) { - if (is_general(p)) - remove_from_combat(p) + let from = game.pos[p] let s = setup_piece_position[p] game.pos[p] = s log(">P" + p + " to S" + s) + if (is_general(p)) + remove_from_combat(from) }, next() { end_saxony_neutral() @@ -5768,9 +5777,10 @@ states.saxony_move_general = { gen_action_space(s) }, space(s) { - remove_from_combat(game.selected) + let from = game.pos[game.selected] log(">P" + game.selected + " to S" + s) enter_piece_at(game.selected, s) + remove_from_combat(from) end_saxony_neutral() }, } |