diff options
author | Tor Andersson <tor@ccxvii.net> | 2022-08-05 19:56:59 +0200 |
---|---|---|
committer | Tor Andersson <tor@ccxvii.net> | 2022-11-17 13:11:26 +0100 |
commit | 8928a46b8869ef65fff4bd2a5d77504eeb532c8d (patch) | |
tree | bb6c959a73123bd99ef1d6e9c654a5100d1247ff | |
parent | 2d6ca25d35f83bccaa9c06cdc21d6929a6ffa4b9 (diff) | |
download | rommel-in-the-desert-8928a46b8869ef65fff4bd2a5d77504eeb532c8d.tar.gz |
Fix rules interpretations based on answers from Craig.
* May not cross enemy hexsides when disengaging during redeployment.
* "Unfired" refreshed every phase.
* Units routed again during enemy phase don't recover.
-rw-r--r-- | rules.js | 48 |
1 files changed, 28 insertions, 20 deletions
@@ -1,32 +1,24 @@ "use strict" // TODO: RAIDERS -// TODO: MINEFIELDS -// TODO: legal pass withdrawal moves (reduce supply net, withdraw from fortress attack) -// TODO: fortress combat in pass turns (must withdraw) // TODO: group move from queue holding box to base // TODO: 1942 malta group (reinforce, reduce supply card draw) +// TODO: MINEFIELDS +// TODO: create minefields +// TODO: tear down 2 minefields to create new minefield +// TODO: track minefields to be revealed when moved through +// TODO: reveal minefields at end of movement + +// TODO: legal pass withdrawal moves (reduce supply net, withdraw from fortress attack) +// TODO: fortress combat in pass turns (must withdraw) + // TODO: log summaries (deploy, rebuild, move, etc) // TODO: put initial deployment stack somewhere more accessible (spread out along the top?) // UI: pause after all fires (in case 0 hits the dialog disappears fast) -// RULES: may units redeploying out of battle hex cross enemy controlled hexsides? (yes / doesn't matter) - -// RULES: can fortress supplied units be part of supply lines for non-fortress supplied units for withdrawals to base? -// RULES: can non-fortress supplied units be part of supply lines for fortress supplied units for withdrawals? - -// RULES: for sea redeployment, can bases be "besieged"? (NO?) -// RULES: may units redeploying out of battle hex leave disrupted units behind to be routed? (no) -// RULES: may units returning for refit enter enemy supply network? (no) - -// RULES: if disrupted units are routed again during their "full enemy turn", can they still recover? -// RULES: may oasis supplied units refuse battle or withdraw to base? (yes) -// RULES: when is "fired" status cleared? -// RULES: are minefields moved through (but not stopped at) revealed? - // TODO: black hit outline in battles ("steploss/bad" action) and skip "apply 0 hits" step // ERRATA: forbid single-group regroup moves or convert to group moves after the fact, @@ -1659,7 +1651,7 @@ function search_path_bfs(from, cost, start, road, max_cost, retreat, sline, sdis } function search_path_redeploy_bfs(cost, start, road) { - let path_enemy, friendly_network, enemy_network + let path_enemy, friendly_network, enemy_network, enemy_sides if (presence_invalid) update_presence() @@ -1667,10 +1659,12 @@ function search_path_redeploy_bfs(cost, start, road) { path_enemy = presence_allied friendly_network = game.buildup.axis_network enemy_network = game.buildup.allied_network + enemy_sides = game.allied_sides } else { path_enemy = presence_axis friendly_network = game.buildup.allied_network enemy_network = game.buildup.axis_network + enemy_sides = game.axis_sides } cost.fill(63) @@ -1718,6 +1712,10 @@ function search_path_redeploy_bfs(cost, start, road) { if (next_enemy) continue + // if disengaging from battle, must not cross enemy hexside + if (here === start && path_enemy[here] && set_has(enemy_sides, side)) + continue + cost[next] = next_cost // don't care about distance (need to find home base for refit) @@ -2233,6 +2231,8 @@ states.initial_supply_check_rout = { function goto_final_supply_check() { set_active_player() + set_clear(game.fired) + log_br() capture_fortress(BARDIA, 2) @@ -2295,6 +2295,7 @@ states.final_supply_check_rout = { // ==== MOVEMENT PHASE === function goto_move_phase() { + set_clear(game.fired) game.state = 'select_moves' if (game.phasing === AXIS) { // Automatically select Rommel Move for 1-move turn options @@ -3454,6 +3455,11 @@ function goto_rout(from, enemy, after) { if (enemy) set_enemy_player() + // RULES: Will be disrupted again, so won't be able to recover. + for_each_friendly_unit_in_hex(from, u => { + set_delete(game.recover, u) + }) + game.state = 'rout_attrition' } @@ -3672,7 +3678,6 @@ function goto_blitz_turn() { log_h2(`Blitz Turn`) if (game.rommel) game.rommel = 3 - set_clear(game.fired) game.turn_option = 'second blitz' goto_move_phase() } @@ -5078,6 +5083,8 @@ function goto_initial_supply_cards() { game.phasing = AXIS set_active_player() + set_clear(game.fired) + log_br() let scenario = current_scenario() @@ -5629,7 +5636,8 @@ exports.setup = function (seed, scenario, options) { axis_minefields: [], allied_minefields: [], - minefields: [], + reveal_minefields: [], // to be revealed at end of movement + minefields: [], // revealed to both players // fortress control fortress: 7, |