summaryrefslogtreecommitdiff
path: root/rules.js
diff options
context:
space:
mode:
authorTor Andersson <tor@ccxvii.net>2023-10-07 15:34:29 +0200
committerTor Andersson <tor@ccxvii.net>2023-12-10 18:16:55 +0100
commitc90f1e3a43709736d7a61c517e94f19b2dff8e8e (patch)
treebdcf6f61c85bbc5c03da14647489c2c44e7bb2d3 /rules.js
parent936a573b340afda735139318646cca057a6d2c03 (diff)
downloadplantagenet-c90f1e3a43709736d7a61c517e94f19b2dff8e8e.tar.gz
Fix P1/P2 vs York/Lancaster issues.
P1 and P2 are dynamically set to either York or Lancaster. Only use these to determine play order during steps. Use YORK or LANCASTER for everything else. Bugs fixed: * P1/P2 aliases were not set after setup is done, leaving them unset for first action since load_state doesn't call update_alias unless the state object changes. * goto_command_activation should only end after both players exhaust, not as soon as Lancaster has run out of cards. * current_hand was returning opponents hand if rebel is not York.
Diffstat (limited to 'rules.js')
-rw-r--r--rules.js164
1 files changed, 81 insertions, 83 deletions
diff --git a/rules.js b/rules.js
index d59a622..5609abb 100644
--- a/rules.js
+++ b/rules.js
@@ -6,8 +6,8 @@ const BOTH = "Both"
const LANCASTER = "Lancaster"
const YORK = "York"
-var P1 = LANCASTER
-var P2 = YORK
+var P1 = null
+var P2 = null
const INFLUENCE_TURNS = [ 1, 4, 6, 9, 11, 14 ]
const GROW_TURNS = [ 4, 9, 14 ]
@@ -718,10 +718,9 @@ function current_turn_name() {
}
function current_hand() {
- // LIKELY BUG, CHECK goto_command_activation()
- if (game.active === P1)
- return game.hand1
- return game.hand2
+ if (game.active === YORK)
+ return game.hand_y
+ return game.hand_l
}
function is_summer() {
@@ -807,15 +806,14 @@ function set_active(new_active) {
}
function set_active_enemy() {
- game.active = enemy_player()
- update_aliases()
+ set_active(enemy_player())
}
function enemy_player() {
- if (game.active === P1)
- return P2
- if (game.active === P2)
- return P1
+ if (game.active === YORK)
+ return LANCASTER
+ if (game.active === LANCASTER)
+ return YORK
return null
}
@@ -1188,9 +1186,9 @@ function is_lancaster_card(c) {
}
function is_card_in_use(c) {
- if (set_has(game.hand1, c))
+ if (set_has(game.hand_y, c))
return true
- if (set_has(game.hand2, c))
+ if (set_has(game.hand_l, c))
return true
if (set_has(game.events, c))
return true
@@ -1217,14 +1215,14 @@ function is_friendly_card(c) {
function has_card_in_hand(c) {
if (game.active === YORK)
- return set_has(game.hand1, c)
- return set_has(game.hand2, c)
+ return set_has(game.hand_y, c)
+ return set_has(game.hand_l, c)
}
function can_discard_card(c) {
- if (set_has(game.hand1, c))
+ if (set_has(game.hand_y, c))
return true
- if (set_has(game.hand2, c))
+ if (set_has(game.hand_l, c))
return true
if (game.pieces.capabilities.includes(c))
return true
@@ -1804,7 +1802,7 @@ exports.setup = function (seed, scenario, options) {
log: [],
undo: [],
- active: P1,
+ active: null,
rebel: null,
crown: null,
state: "setup_lords",
@@ -1812,10 +1810,10 @@ exports.setup = function (seed, scenario, options) {
victory_check: 0,
influence: 0,
- hand1: [],
- hand2: [],
- plan1: [],
- plan2: [],
+ hand_y: [],
+ hand_l: [],
+ plan_y: [],
+ plan_l: [],
turn: 0,
events: [], // this levy/this campaign cards
@@ -1857,32 +1855,32 @@ exports.setup = function (seed, scenario, options) {
parley: 0,
}
- update_aliases()
-
log_h1(scenario)
switch (scenario) {
- default:
- case "Ia. Henry VI":
- setup_Ia()
- break
- case "Ib. Towton":
- setup_Ib()
- break
- case "Ic. Somerset's Return":
- setup_Ic()
- break
- case "II. Warwicks' Rebellion" :
- setup_II()
- break
- case "III. My Kingdom for a Horse":
- setup_III()
- break
+ default:
+ case "Ia. Henry VI":
+ setup_Ia()
+ break
+ case "Ib. Towton":
+ setup_Ib()
+ break
+ case "Ic. Somerset's Return":
+ setup_Ic()
+ break
+ case "II. Warwicks' Rebellion":
+ setup_II()
+ break
+ case "III. My Kingdom for a Horse":
+ setup_III()
+ break
case "I-III. Wars of the Roses":
- setup_ItoIII()
- break
+ setup_ItoIII()
+ break
}
+ update_aliases()
+
return game
}
@@ -2323,9 +2321,9 @@ function prompt_shift_lord_on_calendar(boxes) {
function play_held_event(c) {
log(`Played E${c}.`)
if (c >= first_york_card && c <= last_york_card)
- set_delete(game.hand1, c)
+ set_delete(game.hand_y, c)
else
- set_delete(game.hand2, c)
+ set_delete(game.hand_l, c)
}
function end_held_event() {
@@ -2613,10 +2611,10 @@ states.levy_arts_of_war = {
hold() {
let c = game.what.shift()
log(`${game.active} Held Event.`)
- if (game.active === P1)
- set_add(game.hand1, c)
+ if (game.active === YORK)
+ set_add(game.hand_y, c)
else
- set_add(game.hand2, c)
+ set_add(game.hand_l, c)
resume_levy_arts_of_war()
},
discard() {
@@ -3035,14 +3033,14 @@ function goto_campaign_plan() {
set_active(BOTH)
game.state = "campaign_plan"
- game.plan1 = []
- game.plan2 = []
+ game.plan_y = []
+ game.plan_l = []
}
states.campaign_plan = {
inactive: "Plan",
prompt(current) {
- let plan = current === YORK ? game.plan1 : game.plan2
+ let plan = current === YORK ? game.plan_y : game.plan_l
let first = current === YORK ? first_york_lord : first_lancaster_lord
let last = current === YORK ? last_york_lord : last_lancaster_lord
view.plan = plan
@@ -3072,15 +3070,15 @@ states.campaign_plan = {
},
plan(lord, current) {
if (current === YORK)
- game.plan1.push(lord)
+ game.plan_y.push(lord)
else
- game.plan2.push(lord)
+ game.plan_l.push(lord)
},
undo(_, current) {
if (current === YORK) {
- game.plan1.pop()
+ game.plan_y.pop()
} else {
- game.plan2.pop()
+ game.plan_l.pop()
}
},
end_plan(_, current) {
@@ -3103,7 +3101,7 @@ function end_campaign_plan() {
// === CAMPAIGN: COMMAND ACTIVATION ===
function goto_command_activation() {
- if (game.plan2.length === 0) {
+ if (game.plan_y.length === 0 && game.plan_l.length === 0) {
game.command = NOBODY
goto_end_campaign()
return
@@ -3112,18 +3110,18 @@ function goto_command_activation() {
if (check_campaign_victory())
return
- if (game.plan2.length > game.plan1.length) {
+ if (game.plan_l.length > game.plan_y.length) {
set_active(LANCASTER)
- game.command = game.plan2.shift()
- } else if (game.plan2.length < game.plan1.length) {
+ game.command = game.plan_l.shift()
+ } else if (game.plan_l.length < game.plan_y.length) {
set_active(YORK)
- game.command = game.plan1.shift()
+ game.command = game.plan_y.shift()
} else {
set_active(P1)
- if (P1 === "Lancaster")
- game.command = game.plan2.shift()
+ if (P1 === LANCASTER)
+ game.command = game.plan_l.shift()
else
- game.command = game.plan1.shift()
+ game.command = game.plan_y.shift()
}
if (game.command === NOBODY) {
@@ -4923,9 +4921,9 @@ function could_play_card(c) {
if (set_has(game.events, c))
return false
if (is_york_card(c))
- return game.hand1.length > 0
+ return game.hand_y.length > 0
if (is_lancaster_card(c))
- return game.hand2.length > 0
+ return game.hand_l.length > 0
return true
}
@@ -6813,10 +6811,10 @@ function check_campaign_victory() {
goto_game_over("Draw", "The game ended in a draw.")
return true
} else if (york_v) {
- goto_game_over(P1, `${YORK} won a Campaign Victory!`)
+ goto_game_over(YORK, `${YORK} won a Campaign Victory!`)
return true
} else if (lancaster_v) {
- goto_game_over(P2, `${LANCASTER} won a Campaign Victory!`)
+ goto_game_over(LANCASTER, `${LANCASTER} won a Campaign Victory!`)
return true
}
@@ -6831,10 +6829,10 @@ function check_disband_victory() {
goto_game_over("Draw", "The game ended in a draw.")
return true
} else if (york_v) {
- goto_game_over(P1, `${YORK} won a Campaign Victory!`)
+ goto_game_over(YORK, `${YORK} won a Campaign Victory!`)
return true
} else if (lancaster_v) {
- goto_game_over(P2, `${LANCASTER} won a Campaign Victory!`)
+ goto_game_over(LANCASTER, `${LANCASTER} won a Campaign Victory!`)
return true
}
@@ -7047,12 +7045,12 @@ states.reset = {
},
card(c) {
push_undo()
- if (set_has(game.hand1, c)) {
+ if (set_has(game.hand_y, c)) {
log("Discarded Held card.")
- set_delete(game.hand1, c)
- } else if (set_has(game.hand2, c)) {
+ set_delete(game.hand_y, c)
+ } else if (set_has(game.hand_l, c)) {
log("Discarded Held card.")
- set_delete(game.hand2, c)
+ set_delete(game.hand_l, c)
}
},
end_discard() {
@@ -7672,8 +7670,8 @@ function gen_action_routed_militia(lord) {
gen_action("routed_militia", lord)
}
-const P1_LORD_MASK = 0x1fff
-const P2_LORD_MASK = P1_LORD_MASK << 14
+const YORK_LORD_MASK = 0x1fff
+const LANCASTER_LORD_MASK = YORK_LORD_MASK << 14
exports.view = function (state, current) {
load_state(state)
@@ -7693,8 +7691,8 @@ exports.view = function (state, current) {
pieces: game.pieces,
battle: game.battle,
- held1: game.hand1.length,
- held2: game.hand2.length,
+ held_y: game.hand_y.length,
+ held_l: game.hand_l.length,
command: game.command,
hand: null,
@@ -7705,16 +7703,16 @@ exports.view = function (state, current) {
view.reveal = -1
if (current === YORK) {
- view.hand = game.hand1
- view.plan = game.plan1
+ view.hand = game.hand_y
+ view.plan = game.plan_y
if (game.hidden)
- view.reveal |= P1_LORD_MASK
+ view.reveal |= YORK_LORD_MASK
}
if (current === LANCASTER) {
- view.hand = game.hand2
- view.plan = game.plan2
+ view.hand = game.hand_l
+ view.plan = game.plan_l
if (game.hidden)
- view.reveal |= P2_LORD_MASK
+ view.reveal |= LANCASTER_LORD_MASK
}
if (game.battle) {