summaryrefslogtreecommitdiff
path: root/rules.js
diff options
context:
space:
mode:
authorTor Andersson <tor@ccxvii.net>2025-02-08 10:13:34 +0100
committerTor Andersson <tor@ccxvii.net>2025-02-08 10:13:34 +0100
commitd47697e08d02fa0b955c4be6c734fd5d10a95e6b (patch)
treecc835e0b8ca7238756229d78327a76c23f052422 /rules.js
parent21f9d57c419e57d180921ccd3175622f1f92cc6c (diff)
downloadmaria-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.js26
1 files changed, 18 insertions, 8 deletions
diff --git a/rules.js b/rules.js
index eac3734..f035903 100644
--- a/rules.js
+++ b/rules.js
@@ -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()
},
}