summaryrefslogtreecommitdiff
path: root/rules.js
diff options
context:
space:
mode:
authorTor Andersson <tor@ccxvii.net>2022-09-01 12:37:19 +0200
committerTor Andersson <tor@ccxvii.net>2023-02-18 11:54:52 +0100
commit5e0c76f4fcc07f3d891ad7b2745a4b8eaaf85308 (patch)
tree6f66428d0b361980c8a6d539437906cf0d4e59f0 /rules.js
parentbd0d3720b726ca64b95216986cb0b7dc6db9959e (diff)
downloadwilderness-war-5e0c76f4fcc07f3d891ad7b2745a4b8eaaf85308.tar.gz
Fix case where retreating lone leader step was missed.
Move the lone leader leader retreat check from end_move_step into the beginning of resume_move. This way, interrupting the end_move_step for "Massacre!" won't skip the leader retreats.
Diffstat (limited to 'rules.js')
-rw-r--r--rules.js31
1 files changed, 19 insertions, 12 deletions
diff --git a/rules.js b/rules.js
index efe3408..ce96410 100644
--- a/rules.js
+++ b/rules.js
@@ -2922,6 +2922,25 @@ function max_movement_cost(type) {
}
function resume_move() {
+ let who = moving_piece()
+ let where = moving_piece_space()
+
+ let enemy_units = has_unbesieged_enemy_units(where)
+ let enemy_leader = has_unbesieged_enemy_leader(where)
+ let friendly_units = has_unbesieged_friendly_units(where)
+ let friendly_leader = has_unbesieged_friendly_leader(where)
+
+ if (enemy_leader && !enemy_units && friendly_units) {
+ return goto_retreat_lone_leader(where, 'move')
+ }
+
+ // Can happen if enemy intercepted into moving piece and lone friendly leaders remain after battle.
+ if (friendly_leader && !friendly_units && enemy_units) {
+ game.state = 'retreat_lone_leader'
+ game.retreat = { from: where, reason: 'friendly_move' }
+ return
+ }
+
// Interrupt for Foul Weather response at first opportunity to move.
if (game.move.used < 0) {
if (is_enemy_card_available(FOUL_WEATHER) && !enemy_player.pass_fw) {
@@ -3640,18 +3659,6 @@ function end_move_step(final=false, overrun=false) {
logbr()
}
- if (!is_lone_leader(who) && is_piece_on_map(who)
- && has_unbesieged_enemy_leader(where)
- && !has_unbesieged_enemy_units(where))
- return goto_retreat_lone_leader(where, 'move')
-
- // If enemy intercepted into moving piece and lone friendly leaders remain after battle.
- if (has_unbesieged_friendly_leader(where) && !has_unbesieged_friendly_units(where) && has_unbesieged_enemy_units(where)) {
- game.state = 'retreat_lone_leader'
- game.retreat = { from: where, reason: 'friendly_move' }
- return
- }
-
resume_move()
}