summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Andersson <tor@ccxvii.net>2022-08-01 01:29:25 +0200
committerTor Andersson <tor@ccxvii.net>2023-02-18 11:54:52 +0100
commit120e91eac89b0af42a28dc5e54238e62524fd34d (patch)
treedf411e49df7746d729a37272da727baa187d8613
parent10aab982ed82610f9f1112736929e2e07c9f6ad7 (diff)
downloadwilderness-war-120e91eac89b0af42a28dc5e54238e62524fd34d.tar.gz
Small Pox should count friendly units and eliminate all indians.
-rw-r--r--rules.js42
1 files changed, 36 insertions, 6 deletions
diff --git a/rules.js b/rules.js
index 0f98c02..a74fe98 100644
--- a/rules.js
+++ b/rules.js
@@ -831,6 +831,15 @@ function for_each_friendly_leader_in_space(s, fn) {
}
}
+function for_each_unit_in_space(s, fn) {
+ for (let p = first_french_unit; p <= last_french_unit; ++p)
+ if (is_piece_in_space(p, s))
+ fn(p)
+ for (let p = first_british_unit; p <= last_british_unit; ++p)
+ if (is_piece_in_space(p, s))
+ fn(p)
+}
+
function for_each_friendly_unit_in_space(s, fn) {
for (let p = first_friendly_unit; p <= last_friendly_unit; ++p) {
if (is_piece_in_space(p, s))
@@ -1311,6 +1320,17 @@ function has_unbesieged_french_fortification(s) {
return is_space_unbesieged(s) && has_french_fortifications(s)
}
+function count_units_in_space(s) {
+ let n = 0
+ for (let p = first_french_unit; p <= last_french_unit; ++p)
+ if (is_piece_in_space(p, s))
+ ++n
+ for (let p = first_british_unit; p <= last_british_unit; ++p)
+ if (is_piece_in_space(p, s))
+ ++n
+ return n
+}
+
function count_enemy_units_in_space(s) {
let n = 0
for (let p = first_enemy_unit; p <= last_enemy_unit; ++p)
@@ -1430,6 +1450,16 @@ function has_friendly_rangers(s) {
return false
}
+function has_any_indians(s) {
+ for (let p = first_french_unit; p <= last_french_unit; ++p)
+ if (is_indian(p) && is_piece_in_space(p, s))
+ return true
+ for (let p = first_british_unit; p <= last_british_unit; ++p)
+ if (is_indian(p) && is_piece_in_space(p, s))
+ return true
+ return false
+}
+
function has_friendly_indians(s) {
for (let p = first_friendly_unit; p <= last_friendly_unit; ++p)
if (is_indian(p) && is_piece_in_space(p, s))
@@ -7601,7 +7631,7 @@ states.governor_vaudreuil_interferes = {
events.small_pox = {
can_play() {
for (let s = first_space; s <= last_space; ++s)
- if (count_enemy_units_in_space(s) > 4)
+ if (count_units_in_space(s) > 4)
return true
return false
},
@@ -7614,13 +7644,13 @@ states.small_pox = {
prompt() {
view.prompt = "Small Pox: Choose a space with more than 4 units."
for (let s = first_space; s <= last_space; ++s)
- if (count_enemy_units_in_space(s) > 4)
+ if (count_units_in_space(s) > 4)
gen_action_space(s)
},
space(s) {
log(`Small Pox at ${space_name(s)}.`)
let roll = roll_die()
- if (count_enemy_units_in_space(s) > 8) {
+ if (count_units_in_space(s) > 8) {
game.count = roll
} else {
game.count = Math.ceil(roll / 2)
@@ -7667,7 +7697,7 @@ states.small_pox_eliminate_steps = {
reduce_unit(p, false)
},
next() {
- if (has_friendly_indians(game.small_pox)) {
+ if (has_any_indians(game.small_pox)) {
game.state = 'small_pox_remove_indians'
} else {
end_small_pox()
@@ -7681,14 +7711,14 @@ states.small_pox_remove_indians = {
},
prompt() {
view.prompt = `Small Pox at ${space_name(game.small_pox)}: Remove all indians.`
- for_each_friendly_unit_in_space(game.small_pox, p => {
+ for_each_unit_in_space(game.small_pox, p => {
if (is_indian(p))
gen_action_piece(p)
})
},
piece(p) {
eliminate_piece(p, false)
- if (!has_friendly_indians(game.small_pox))
+ if (!has_any_indians(game.small_pox))
end_small_pox()
},
}