summaryrefslogtreecommitdiff
path: root/rules.js
diff options
context:
space:
mode:
authorTor Andersson <tor@ccxvii.net>2023-07-09 11:43:17 +0200
committerTor Andersson <tor@ccxvii.net>2023-07-09 11:54:10 +0200
commite551a58b7fe81ffc551340ade778e79da3650a88 (patch)
tree9ec6de4b273860ec40bc48ff0a8d17cad145e0bd /rules.js
parent74993275741c293fa0ac8ec99c8ec9c177e6210d (diff)
downloadtime-of-crisis-e551a58b7fe81ffc551340ade778e79da3650a88.tar.gz
Fully Automatix.
Diffstat (limited to 'rules.js')
-rw-r--r--rules.js140
1 files changed, 103 insertions, 37 deletions
diff --git a/rules.js b/rules.js
index 76908c5..9101394 100644
--- a/rules.js
+++ b/rules.js
@@ -1221,12 +1221,13 @@ states.setup_province = {
states.setup_hand = {
inactive: "Setup",
prompt() {
- prompt("Setup: Draw cards.")
let hand = current_hand()
if (hand.length < 5) {
+ prompt("Setup: Draw cards.")
for (let c of current_draw())
gen_action_card(c)
} else {
+ prompt("Setup: Done.")
view.actions.done = 1
}
},
@@ -2339,12 +2340,12 @@ function count_units_in_capital(where) {
return n
}
-function calc_needed_votes(where, pg) {
+function calc_needed_votes(where, praetorian_guard) {
let n = get_support(where) * 2 // base number of votes
let old_governor = get_province_governor(where)
let old_player = (old_governor < 0) ? -1 : (old_governor / 6 | 0)
// Praetorian Guard ignores units in capital
- if (!pg) {
+ if (!praetorian_guard) {
let army_general = get_capital_general(where)
if (army_general >= 0) {
let army_player = army_general / 6 | 0
@@ -2370,6 +2371,13 @@ function calc_extra_votes(where) {
return n
}
+function calc_used_dice(where) {
+ let dice = game.count
+ if (game.where === ITALIA)
+ dice += count_own_basilicas()
+ return dice
+}
+
function format_votes(need, extra, dice) {
let s = "Need " + need + (need === 1 ? " vote." : " votes.")
if (extra > 0)
@@ -2383,9 +2391,7 @@ states.place_governor = {
prompt() {
let need = calc_needed_votes(game.where, false)
let extra = calc_extra_votes(game.where)
- let dice = game.count
- if (game.where === ITALIA)
- dice += count_own_basilicas()
+ let dice = calc_used_dice(game.where)
view.color = SENATE
view.selected_region = game.where
view.selected_governor = game.selected_governor
@@ -2398,6 +2404,13 @@ states.place_governor = {
view.actions.spend_senate = 1
else
view.actions.spend_senate = 0
+ if (is_neutral_province(game.where)) {
+ let enough = Math.max(0, need - extra - dice)
+ if (game.sip >= enough)
+ view.actions.spend_enough = 1
+ else
+ view.actions.spend_enough = 0
+ }
view.actions.roll = 1
},
card(c) {
@@ -2410,6 +2423,16 @@ states.place_governor = {
spend_senate(1)
game.count += 1
},
+ spend_enough() {
+ push_undo()
+ let need = calc_needed_votes(game.where, false)
+ let extra = calc_extra_votes(game.where)
+ let dice = calc_used_dice(game.where)
+ let enough = Math.max(0, need - extra - dice)
+ spend_senate(enough)
+ game.count += enough
+ auto_replace_neutral_governor(false)
+ },
roll() {
clear_undo()
roll_to_place_governor()
@@ -2421,9 +2444,7 @@ states.praetorian_guard = {
prompt() {
let need = calc_needed_votes(game.where, true)
let extra = calc_extra_votes(game.where)
- let dice = game.count
- if (game.where === ITALIA)
- dice += count_own_basilicas()
+ let dice = calc_used_dice(game.where)
view.color = MILITARY
view.selected_region = game.where
view.selected_governor = game.selected_governor
@@ -2436,6 +2457,13 @@ states.praetorian_guard = {
view.actions.spend_military = 1
else
view.actions.spend_military = 0
+ if (is_neutral_province(game.where)) {
+ let enough = Math.max(0, need - extra - dice)
+ if (game.mip >= enough)
+ view.actions.spend_enough = 1
+ else
+ view.actions.spend_enough = 0
+ }
view.actions.roll = 1
},
card(c) {
@@ -2448,24 +2476,31 @@ states.praetorian_guard = {
spend_military(1)
game.count += 1
},
+ spend_enough() {
+ push_undo()
+ let need = calc_needed_votes(game.where, true)
+ let extra = calc_extra_votes(game.where)
+ let dice = calc_used_dice(game.where)
+ let enough = Math.max(0, need - extra - dice)
+ spend_military(enough)
+ game.count += enough
+ auto_replace_neutral_governor(true)
+ },
roll() {
clear_undo()
roll_to_place_governor()
},
}
-function roll_to_place_governor(pg) {
- let need = calc_needed_votes(game.where, pg)
+function roll_to_place_governor(praetorian_guard) {
+ let need = calc_needed_votes(game.where, praetorian_guard)
let have = calc_extra_votes(game.where)
+ let dice = calc_used_dice(game.where)
set_placed_governor(game.where)
- if (game.where === ITALIA)
- game.count += count_own_basilicas()
-
-
log_br()
- if (pg)
+ if (praetorian_guard)
log("Praetorian Guard in %" + game.where + ".")
else
log("Place Governor in %" + game.where + ".")
@@ -2476,11 +2511,11 @@ function roll_to_place_governor(pg) {
log("Need " + need + " votes.")
if (is_neutral_province(game.where))
- have += roll_dice(game.count, 1)
- else if (!pg && has_quaestor(game.where))
- have += roll_dice(game.count, 3)
+ have += roll_dice(dice, 1)
+ else if (!praetorian_guard && has_quaestor(game.where))
+ have += roll_dice(dice, 3)
else
- have += roll_dice(game.count, 2)
+ have += roll_dice(dice, 2)
if (game.where === ITALIA && is_populace_emperor()) {
log("Populace Emperor")
@@ -2493,27 +2528,57 @@ function roll_to_place_governor(pg) {
}
if (have >= need) {
- if (game.where === ITALIA) {
- // Remember for Damnatio Memoriae
- let was_senate_emperor = is_senate_emperor()
- let old_emperor = get_province_player(ITALIA)
- let old_support = get_support(ITALIA)
+ goto_place_governor_success()
+ } else {
+ log("Failed!")
+ log_br()
+ resume_take_actions()
+ }
+}
+
+function auto_replace_neutral_governor(praetorian_guard) {
+ let need = calc_needed_votes(game.where, praetorian_guard)
+ let have = calc_extra_votes(game.where)
+ let dice = calc_used_dice(game.where)
- place_governor(game.where, game.selected_governor)
+ log_br()
+ if (praetorian_guard)
+ log("Praetorian Guard in %" + game.where + ".")
+ else
+ log("Place Governor in %" + game.where + ".")
- if (old_emperor >= 0 && !was_senate_emperor && (has_card_event(CARD_S4) || has_card_event(CARD_S4B))) {
- game.count = (old_emperor << 3) | old_support
- game.state = "damnatio_memoriae"
- } else {
- goto_becoming_emperor()
- }
+ if (need === 1)
+ log("Need " + need + " vote.")
+ else
+ log("Need " + need + " votes.")
+
+ logi(new Array(dice).fill("B0").join(" "))
+
+ if (game.ambitus > 0) {
+ log("Ambitus")
+ logi(new Array(game.ambitus).fill("B0").join(" "))
+ }
+
+ goto_place_governor_success()
+}
+
+function goto_place_governor_success() {
+ if (game.where === ITALIA) {
+ // Remember for Damnatio Memoriae
+ let was_senate_emperor = is_senate_emperor()
+ let old_emperor = get_province_player(ITALIA)
+ let old_support = get_support(ITALIA)
+
+ place_governor(game.where, game.selected_governor)
+
+ if (old_emperor >= 0 && !was_senate_emperor && (has_card_event(CARD_S4) || has_card_event(CARD_S4B))) {
+ game.count = (old_emperor << 3) | old_support
+ game.state = "damnatio_memoriae"
} else {
- place_governor(game.where, game.selected_governor)
- resume_take_actions()
+ goto_becoming_emperor()
}
} else {
- log("Failed!")
- log_br()
+ place_governor(game.where, game.selected_governor)
resume_take_actions()
}
}
@@ -5033,16 +5098,17 @@ function goto_refill_hand() {
states.refill_hand = {
inactive: "End of Turn",
prompt() {
- prompt("End of Turn: Draw cards.")
let hand = current_hand()
let draw = current_draw()
let n = 5
if (game.frumentarii & (1 << game.current))
n = 3
if (hand.length < n && draw.length > 0) {
+ prompt("End of Turn: Draw cards.")
for (let c of draw)
gen_action_card(c)
} else {
+ prompt("End of Turn: Done.")
view.actions.end_turn = 1
}
},