summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--rules.js186
1 files changed, 103 insertions, 83 deletions
diff --git a/rules.js b/rules.js
index 0810eb6..dbc4562 100644
--- a/rules.js
+++ b/rules.js
@@ -177,9 +177,11 @@ function is_map_hex(x) {
function is_hex_or_adjacent_to(x, where) {
if (x === where)
return true
- for (let s = 0; s < 6; ++s)
- if (x === where + hexnext[s])
+ for (let s = 0; s < 6; ++s) {
+ let y = where + hexnext[s]
+ if (is_map_hex(y) && x === y)
return true
+ }
return false
}
@@ -205,6 +207,42 @@ var supply_allied_line = new Array(sidecount).fill(0)
var first_friendly_unit, last_friendly_unit
var first_enemy_unit, last_enemy_unit
+function set_active_player() {
+ game.active = game.phasing
+ update_aliases()
+}
+
+function set_passive_player() {
+ if (game.phasing === AXIS)
+ game.active = ALLIED
+ else
+ game.active = AXIS
+ update_aliases()
+}
+
+function set_enemy_player() {
+ if (is_active_player())
+ set_passive_player()
+ else
+ set_active_player()
+}
+
+function is_active_player() {
+ return game.active === game.phasing
+}
+
+function is_passive_player() {
+ return game.active !== game.phasing
+}
+
+function is_axis_player() {
+ return game.active === AXIS
+}
+
+function is_allied_player() {
+ return game.active === ALLIED
+}
+
function update_aliases() {
if (game.active === AXIS) {
first_friendly_unit = first_axis_unit
@@ -1333,82 +1371,7 @@ function find_valid_regroup_destinations(from, rommel) {
}
}
-// === TURN ===
-
-function set_active_player() {
- game.active = game.phasing
- update_aliases()
-}
-
-function set_passive_player() {
- if (game.phasing === AXIS)
- game.active = ALLIED
- else
- game.active = AXIS
- update_aliases()
-}
-
-function set_enemy_player() {
- if (is_active_player())
- set_passive_player()
- else
- set_active_player()
-}
-
-function is_active_player() {
- return game.active === game.phasing
-}
-
-function is_passive_player() {
- return game.active !== game.phasing
-}
-
-function is_axis_player() {
- return game.active === AXIS
-}
-
-function is_allied_player() {
- return game.active === ALLIED
-}
-
-function end_player_turn() {
- // Forget partial retreats
- set_clear(game.partial_retreats)
-
- // Reveal supply cards
- log_br()
- log(`Supply Cards Played:\n${game.commit[0]} real and ${game.commit[1]} dummy.`)
- game.commit = [ 0, 0 ]
-
- if (game.passed === 2)
- return end_month()
-
- if (game.phasing === AXIS)
- game.phasing = ALLIED
- else
- game.phasing = AXIS
- set_active_player()
- goto_player_turn()
-}
-
-function goto_player_turn() {
- log_h2(game.phasing)
-
- // paranoid resetting of state
- game.side_limit = {}
- game.rommel = 0
- game.from1 = game.from2 = 0
- game.to1 = game.to2 = 0
-
- // reset moved and fired flags
- game.forced = []
- set_clear(game.fired)
- set_clear(game.moved)
-
- game.commit = [ 0, 0 ]
-
- goto_initial_supply_check()
-}
+// === SUPPLY COMMITMENT ===
function goto_supply_commitment() {
game.state = 'supply_commitment'
@@ -1446,6 +1409,18 @@ states.supply_commitment = {
function goto_turn_option() {
set_active_player()
+
+ let n = game.commit[0] + game.commit[1]
+ if (n === 0)
+ log(`Played zero supply cards.`)
+ else if (n === 1)
+ log(`Played one supply card.`)
+ else if (n === 2)
+ log(`Played two supply cards.`)
+ else if (n === 3)
+ log(`Played three supply cards.`)
+ log_br()
+
game.state = 'turn_option'
}
@@ -1502,6 +1477,49 @@ states.turn_option = {
},
}
+// === PLAYER TURN ===
+
+function goto_player_turn() {
+ set_active_player()
+
+ log_h2(game.phasing)
+
+ // paranoid resetting of state
+ game.side_limit = {}
+ game.rommel = 0
+ game.from1 = game.from2 = 0
+ game.to1 = game.to2 = 0
+
+ // reset moved and fired flags
+ game.forced = []
+ set_clear(game.fired)
+ set_clear(game.moved)
+
+ game.commit = [ 0, 0 ]
+
+ goto_initial_supply_check()
+}
+
+function end_player_turn() {
+ // Forget partial retreats
+ set_clear(game.partial_retreats)
+
+ // Reveal supply cards
+ log_br()
+ log(`Supply Cards Revealed:\n${game.commit[0]} real and ${game.commit[1]} dummy.`)
+ game.commit = [ 0, 0 ]
+
+ if (game.passed === 2)
+ return end_month()
+
+ if (game.phasing === AXIS)
+ game.phasing = ALLIED
+ else
+ game.phasing = AXIS
+
+ goto_player_turn()
+}
+
// === INITIAL & FINAL SUPPLY CHECK ===
function goto_initial_supply_check() {
@@ -3116,7 +3134,8 @@ function goto_hits() {
game.hits[2] |= 0
game.hits[3] |= 0
- if (game.hits[0] + game.hits[1] + game.hits[2] + game.hits[3] > 0) {
+ // TODO: if (game.hits[0] + game.hits[1] + game.hits[2] + game.hits[3] > 0) {
+ if (true) {
if (game.state === 'battle_fire')
game.state = 'battle_hits'
else
@@ -3377,7 +3396,7 @@ function goto_pursuit_fire_during_refuse_battle(where) {
if (can_pursuit_fire(true))
game.state = 'pursuit_fire'
else
- goto_pursuit_hits()
+ end_pursuit_fire()
}
function goto_rout_hits() {
@@ -3390,7 +3409,8 @@ function goto_rout_hits() {
function goto_pursuit_hits() {
set_enemy_player()
- if (game.hits > 0)
+ // TODO: if (game.hits > 0)
+ if (true)
game.state = 'pursuit_hits'
else
end_pursuit_fire()
@@ -3420,7 +3440,7 @@ function can_rout_fire(verbose) {
let result = false
let slowest = slowest_enemy_unit_speed(game.pursuit)
if (verbose)
- log(`Slowest routing unit was ${speed_name[slowest]} ${game.active} at #${game.pursuit}.`)
+ log(`Slowest was ${speed_name[slowest]} unit.`)
for_each_undisrupted_friendly_unit_in_hex(game.pursuit, u => {
if (unit_speed(u) >= slowest && !is_unit_fired(u))
result = true
@@ -3432,7 +3452,7 @@ function can_pursuit_fire(verbose) {
let result = false
let slowest = slowest_undisrupted_enemy_unit_speed(game.pursuit)
if (verbose)
- log(`Slowest retreating unit was ${speed_name[slowest]} ${game.active} at #${game.pursuit}.`)
+ log(`Slowest was ${speed_name[slowest]} unit.`)
for_each_undisrupted_friendly_unit_in_hex(game.pursuit, u => {
if (unit_speed(u) >= slowest && !is_unit_fired(u))
result = true