summaryrefslogtreecommitdiff
path: root/rules.js
diff options
context:
space:
mode:
Diffstat (limited to 'rules.js')
-rw-r--r--rules.js201
1 files changed, 199 insertions, 2 deletions
diff --git a/rules.js b/rules.js
index 28435af..ac0bd39 100644
--- a/rules.js
+++ b/rules.js
@@ -1165,7 +1165,7 @@ function goto_strategy_phase(new_active) {
log("=b Britain")
}
-states.strategy_phase = {
+states.strategy_phase_OLD = {
inactive: "to play a strategy card",
prompt() {
view.prompt = "Play a strategy card."
@@ -1263,6 +1263,151 @@ states.strategy_phase = {
},
}
+states.strategy_phase = {
+ inactive: "to play a strategy card",
+ prompt() {
+ view.prompt = "Play a strategy card."
+ for (let c of active_hand())
+ gen_action_card("card", c)
+ },
+ card(c) {
+ push_undo()
+ let card = CARDS[c]
+ game.card = c
+ switch (card.type) {
+ case "ops":
+ game.state = "strategy_phase_ops"
+ break
+ default:
+ game.state = "strategy_phase_event"
+ break
+ }
+ },
+}
+
+states.strategy_phase_ops = {
+ inactive: "to play a strategy card",
+ prompt() {
+ let c = game.card
+ view.selected_card = game.card
+ view.prompt = "Use " + CARDS[c].title + "."
+ if (can_exchange_for_discard(c))
+ view.actions.exchange = 1
+ if (can_activate_general(c))
+ view.actions.activate = 1
+ if (can_play_reinforcements())
+ view.actions.reinforce = 1
+ if (game.active === P_AMERICA && game.a_queue < 2 && CARDS[c].count < 3)
+ view.actions.queue = 1
+ if (game.active === P_BRITAIN && game.b_queue < 2 && CARDS[c].count < 3)
+ view.actions.queue = 1
+ view.actions.pc_action = 1
+ },
+
+ pc_action() {
+ let c = game.card
+ game.did_discard_event = 0
+ clear_queue()
+ play_card(c, "for PC")
+ goto_ops_pc(CARDS[c].count)
+ },
+ activate() {
+ let c = game.card
+ game.did_discard_event = 0
+ goto_ops_general(c)
+ },
+ reinforce() {
+ let c = game.card
+ game.did_discard_event = 0
+ clear_queue()
+ goto_ops_reinforcements(c)
+ },
+ queue() {
+ let c = game.card
+ game.did_discard_event = 0
+ play_card(c, "to queue")
+ if (game.active === P_BRITAIN)
+ game.b_queue += CARDS[c].count
+ else
+ game.a_queue += CARDS[c].count
+ end_strategy_card()
+ },
+ exchange() {
+ let c = game.card
+ let d = game.did_discard_event
+ game.did_discard_event = 0
+ discard_card(c, "exchange")
+ set_add(active_hand(), d)
+ logp("picked up up #" + d)
+ },
+}
+
+states.strategy_phase_event = {
+ inactive: "to play a strategy card",
+ prompt() {
+ let c = game.card
+ view.selected_card = game.card
+ view.prompt = "Use event card."
+
+ view.actions.event = 0
+ view.actions.pc_action = 0
+
+ let card = CARDS[c]
+ switch (card.type) {
+ case "mandatory-event":
+ view.actions.event = 1
+ view.actions.pc_action = 0
+ break
+ case "campaign":
+ view.actions.campaign = 1
+ view.actions.pc_action = 0
+ break
+ case "british-event":
+ case "british-event-or-battle":
+ if (game.active === P_BRITAIN) {
+ if (can_play_event(c))
+ view.actions.event = 1
+ else
+ view.actions.event = 0
+ }
+ view.actions.pc_action = 1
+ break
+ case "american-event":
+ if (game.active === P_AMERICA) {
+ if (can_play_event(c))
+ view.actions.event = 1
+ else
+ view.actions.event = 0
+ }
+ view.actions.pc_action = 1
+ break
+ case "british-battle":
+ case "american-battle":
+ view.actions.pc_action = 1
+ break
+ }
+ },
+ campaign() {
+ let c = game.card
+ game.did_discard_event = 0
+ clear_queue()
+ goto_campaign(c)
+ },
+ event() {
+ let c = game.card
+ game.did_discard_event = 0
+ clear_queue()
+ do_event(c)
+ },
+ pc_action() {
+ let c = game.card
+ game.did_discard_event = c
+ clear_queue()
+ discard_card(c, "PC action")
+ game.state = "discard_event_pc_action"
+ },
+}
+
function end_strategy_card() {
if (automatic_victory()) {
clear_undo()
@@ -2329,6 +2474,10 @@ states.play_attacker_battle_card = {
view.actions.pass = 1
gen_battle_card()
},
+ card(c) {
+ play_battle_card(this, c)
+ // TODO: pause!
+ },
card_battle_play(c) {
play_card(c, "for +2 DRM")
if (game.active === P_BRITAIN) {
@@ -2369,6 +2518,10 @@ states.play_defender_battle_card = {
view.actions.pass = 1
gen_battle_card()
},
+ card(c) {
+ play_battle_card(this, c)
+ // TODO: pause!
+ },
card_battle_play(c) {
play_card(c, "for +2 DRM")
if (game.active === P_BRITAIN) {
@@ -2398,7 +2551,7 @@ states.play_defender_battle_card = {
},
}
-function gen_battle_card() {
+function gen_battle_card_OLD() {
for (let c of active_hand()) {
let card = CARDS[c]
if (game.active === P_BRITAIN) {
@@ -2429,6 +2582,50 @@ function gen_battle_card() {
}
}
+function play_battle_card(st, c) {
+ let card = CARDS[c]
+ if (game.active === P_BRITAIN) {
+ switch (card.type) {
+ case "british-battle":
+ case "british-event-or-battle":
+ st.card_battle_play(c)
+ break
+ case "british-event":
+ case "american-event":
+ case "american-battle":
+ st.card_battle_discard(c)
+ break
+ }
+ } else {
+ switch (card.type) {
+ case "british-battle":
+ case "british-event-or-battle":
+ case "british-event":
+ case "american-event":
+ st.card_battle_discard(c)
+ break
+ case "american-battle":
+ st.card_battle_play(c)
+ break
+ }
+ }
+}
+
+function gen_battle_card() {
+ for (let c of active_hand()) {
+ let card = CARDS[c]
+ switch (card.type) {
+ case "british-battle":
+ case "british-event-or-battle":
+ case "british-event":
+ case "american-event":
+ case "american-battle":
+ gen_action_card("card", c)
+ break
+ }
+ }
+}
+
/* RESOLVE BATTLE */
function roll_loser_combat_losses(log) {