From ea9dd06941674256b07c5353d39121c3983ab9b1 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Sat, 24 Jun 2023 00:16:39 +0200 Subject: Prompts. --- rules.js | 266 ++++++++++++++++++++++++++++++++++++--------------------------- 1 file changed, 152 insertions(+), 114 deletions(-) (limited to 'rules.js') diff --git a/rules.js b/rules.js index 26f4bba..08faab7 100644 --- a/rules.js +++ b/rules.js @@ -4,10 +4,14 @@ TODO ---- -[ ] cut holes for capital in region svg [ ] combat battle screen - splay stack / dialog for watching contents and taking hits [ ] killed leader stash for buy/trash phase +[ ] emperor variant (and tokens) +[ ] expansion cards (and images) + +[ ] barbarian_count + */ var game @@ -46,7 +50,7 @@ const SENATE = 1 const POPULACE = 2 const LEGION_COUNT = 33 -const BARBARIAN_COUNT = 53 +const BARBARIAN_COUNT = [ 33, 43, 53 ] // REGIONS @@ -301,7 +305,7 @@ const EVENT_NAME = [ "Raiding Parties", "Preparing for War", "Inflation", - "Good_auguries", + "Good Auguries", "Diocletian", ] @@ -338,9 +342,9 @@ const CARD_INDEX = [ ] const CARD_INFO = [ - { name: "M1", type: 0, value: 1, event: "None" }, - { name: "S1", type: 1, value: 1, event: "None" }, - { name: "P1", type: 2, value: 1, event: "None" }, + { name: "M1", type: 0, value: 1, event: "Military 1" }, + { name: "S1", type: 1, value: 1, event: "Senate 1" }, + { name: "P1", type: 2, value: 1, event: "Populace 1" }, { name: "M2", type: 0, value: 2, event: "Castra" }, { name: "S2", type: 1, value: 2, event: "Tribute" }, { name: "P2", type: 2, value: 2, event: "Quaestor" }, @@ -502,8 +506,8 @@ function remove_militia(province) { game.militia &= ~(1 << province) } function has_mob(province) { return game.mobs[province] > 0 } function count_mobs(province) { return game.mobs[province] } -function add_one_mob(province) { game.mobs[province] ++ } -function remove_one_mob(province) { game.mobs[province] -- } +function add_mobs(province, n) { game.mobs[province] += n } +function remove_mobs(province, n) { game.mobs[province] -= n } function remove_all_mobs(province) { game.mobs[province] = 0 } function has_amphitheater(province) { return game.amphitheater & (1 << province) } @@ -1046,9 +1050,9 @@ function eliminate_militia(where) { remove_militia_castra(where) } -function flip_discard_to_available(p) { - game.draw[p] = game.discard[p] - game.discard[p] = [] +function flip_discard_to_available() { + game.draw[game.current] = game.discard[game.current] + game.discard[game.current] = [] } function assign_hit_to_legion(id) { @@ -1109,7 +1113,7 @@ function has_card_event(event) { states.setup_province = { prompt() { - view.prompt = "Select a starting Province." + view.prompt = "Setup: Choose a province to place your governor and general." view.selected_governor = game.current * 6 view.selected_general = game.current * 6 view.color = SENATE @@ -1120,6 +1124,8 @@ states.setup_province = { capital(where) { push_undo() + log(PLAYER_NAMES[game.current] + " started in S" + where + ".") + set_governor_location(game.current * 6 + 0, where) add_militia(where) @@ -1134,7 +1140,7 @@ states.setup_province = { states.setup_hand = { prompt() { - view.prompt = "Draw your initial hand." + view.prompt = "Setup: Draw cards." let hand = current_hand() if (hand.length < 5) { for (let c of current_draw()) @@ -1160,7 +1166,7 @@ states.setup_hand = { // === UPKEEP === function goto_start_turn() { - log_h2(PLAYER_NAMES[game.current]) + log_h1(PLAYER_NAMES[game.current]) game.killed = 0 game.battled = 0 @@ -1201,29 +1207,39 @@ function goto_crisis() { game.dice[2] = 0 game.dice[3] = 0 - log(`Crisis B${game.dice[0]} W${game.dice[1]}`) - let sum = game.dice[0] + game.dice[1] + let msg = "Crisis B" + game.dice[0] + " W" + game.dice[1] - if (sum === 2) + if (sum === 2) { + log(msg + " - Ira Deorum") return goto_ira_deorum() - if (sum === 12) + } + + if (sum === 12) { + log(msg + " - Pax Deorum") return goto_pax_deorum() - if (sum === 7) + } + + if (sum === 7) { + log(msg + " - Event") return goto_crisis_event() + } + let tribe = 0 if (game.legacy.length === 2) - return goto_barbarian_crisis(CRISIS_TABLE_2P[sum - 2]) - if (game.legacy.length === 3) - return goto_barbarian_crisis(CRISIS_TABLE_3P[sum - 2]) - return goto_barbarian_crisis(CRISIS_TABLE_4P[sum - 2]) + tribe = CRISIS_TABLE_2P[sum - 2] + else if (game.legacy.length === 3) + tribe = CRISIS_TABLE_3P[sum - 2] + else + tribe = CRISIS_TABLE_4P[sum - 2] + + log(msg + " - " + BARBARIAN_NAME[tribe]) + goto_barbarian_crisis(tribe) } // CRISIS: IRA DEORUM function goto_ira_deorum() { - logi("Ira Deorum") - game.count = 0 let tribe_count = get_tribe_count() for (let tribe = 0; tribe < tribe_count; ++tribe) @@ -1237,7 +1253,7 @@ function goto_ira_deorum() { states.ira_deorum = { prompt() { - prompt("Ira Deorum: Activate one Barbarian in each tribe's homeland.") + prompt("Ira Deorum: Activate one barbarian in each tribe's homeland.") let tribe_count = get_tribe_count() for (let tribe = 0; tribe < tribe_count; ++tribe) if (game.count & (1 << tribe)) @@ -1258,16 +1274,25 @@ states.ira_deorum = { // CRISIS: PAX DEORUM function goto_pax_deorum() { - logi("Pax Deorum") - game.count = game.current + game.current = prev_player() + resume_pax_deorum() +} - for (let p = 0; p < game.legacy.length; ++p) - if (game.draw[p].length === 0) - flip_discard_to_available(p) +function resume_pax_deorum() { + if (game.current === game.count) { + goto_take_actions() + return + } - game.current = prev_player() game.state = "pax_deorum" + game.current = prev_player() + if (game.draw[game.current].length === 0) + flip_discard_to_available() + + // Skip players if game end has triggered. + if (game.end && game.current < game.count) + resume_pax_deorum() } states.pax_deorum = { @@ -1279,20 +1304,14 @@ states.pax_deorum = { card(c, player) { set_add(game.hand[player], c) set_delete(game.draw[player], c) - if (game.current === game.count) - goto_take_actions() - else - game.current = prev_player() + resume_pax_deorum() }, } // CRISIS: BARBARIAN INVASION function goto_barbarian_crisis(tribe) { - logi(BARBARIAN_NAME[tribe]) - game.crisis = tribe - if (find_inactive_barbarian_at_home(tribe) >= 0) game.state = "barbarian_crisis" else @@ -1302,7 +1321,7 @@ function goto_barbarian_crisis(tribe) { states.barbarian_crisis = { prompt() { let tribe = game.crisis - prompt(BARBARIAN_NAME[tribe] + " Crisis!") + prompt(BARBARIAN_NAME[tribe] + ": Activate one barbarian.") gen_action_barbarian(find_inactive_barbarian_at_home(tribe)) }, barbarian(id) { @@ -1348,7 +1367,7 @@ function goto_barbarian_invasion(tribe, black, white) { states.barbarian_invasion = { prompt() { let tribe = game.crisis - prompt(BARBARIAN_NAME[tribe] + " Invasion!") + prompt(BARBARIAN_NAME[tribe] + " invade!") gen_action_barbarian(find_active_barbarian_at_home(tribe)) }, barbarian(id) { @@ -1392,7 +1411,7 @@ function invade_with_barbarian_counter(id, path, where) { function goto_crisis_event() { game.active_event = game.events.pop() - log_h3(EVENT_NAME[game.active_event]) + logi(EVENT_NAME[game.active_event]) switch (game.active_event) { case EVENT_ARDASHIR: return goto_crisis_barbarian_leader(ARDASHIR, SASSANIDS_HOMELAND) @@ -1441,7 +1460,7 @@ function goto_crisis_barbarian_leader(id, where) { states.crisis_barbarian_leader = { prompt() { - prompt("Crisis: " + EVENT_NAME[game.active_event] + ".") + prompt(EVENT_NAME[game.active_event] + "!") gen_action_region(game.where) }, region(where) { @@ -1460,7 +1479,7 @@ function goto_crisis_rival_emperor(id, where) { states.crisis_rival_emperor = { prompt() { - prompt("Crisis: " + EVENT_NAME[game.active_event] + ".") + prompt(EVENT_NAME[game.active_event] + "!") gen_action_region(game.where) }, region(where) { @@ -1530,14 +1549,13 @@ function goto_ludi_saeculares() { game.current = emperor game.state = "ludi_saeculares" } else { - log("There is no Emperor.") goto_take_actions() } } states.ludi_saeculares = { prompt() { - prompt("Ludi Saeculares: Discard one card from your hand.") + prompt("Ludi Saeculares: Discard a card to gain legacy equal to twice its value.") for (let c of current_hand()) gen_action_card(c) }, @@ -1552,7 +1570,7 @@ states.ludi_saeculares = { states.ludi_saeculares_done = { prompt() { - prompt("Ludi Saeculares: Discard one card from your hand.") + prompt("Ludi Saeculares: Done.") view.actions.done = 1 }, done() { @@ -1566,11 +1584,15 @@ states.ludi_saeculares_done = { // === TAKE ACTIONS === function goto_take_actions() { + log_br() game.state = "take_actions" game.ip = [ 0, 0, 0 ] game.played = [] game.used = [] - game.placed = 0 // only place governor once (and no place if recalled) + + game.placed = 0 + if (is_emperor_player()) + set_placed_governor(ITALIA) } states.take_actions = { @@ -1681,7 +1703,7 @@ states.take_actions = { gen_action_recall(where) // Increase Support Level - let support = game.support[where] + let support = get_support(where) if (where !== ITALIA && support < 4) { if (pip > support) gen_action_support(where, support + 1) @@ -1791,6 +1813,7 @@ states.take_actions = { push_undo() let hand = current_hand() if (set_has(hand, c)) { + log("Played " + card_event_name(c) + ".") set_delete(hand, c) set_add(game.played, c) add_card_ip(c) @@ -1851,7 +1874,7 @@ states.take_actions = { let where = get_governor_location(game.selected_governor) log("Held Games in S" + where + ".") spend_ip(POPULACE, 2) - remove_one_mob(where) + remove_mobs(where, 1) }, amphitheater() { @@ -1911,9 +1934,9 @@ states.take_actions = { n += 1 if (game.selected_general >= 0) n += count_units_in_army(game.selected_general) - n = Math.min(game.mobs[where], n) + n = Math.min(count_mobs(where), n) log("Disperse " + n + " Mobs in S" + where) - game.mobs[where] -= n + remove_mobs(where, n) reduce_support(where) }, @@ -1991,7 +2014,7 @@ function resume_occupy_seat_of_power() { states.occupy_seat_of_power_1 = { prompt() { - prompt("Occupy Pretender Provincial Capital: Remove Seat of Power and pretender.") + prompt("Occupy Pretender Provincial Capital: Remove seat of power marker and governor.") view.color = POPULACE gen_action_region(game.where) }, @@ -2006,7 +2029,7 @@ states.occupy_seat_of_power_1 = { states.occupy_seat_of_power_2 = { prompt() { - prompt("Occupy Pretender Provincial Capital: Remove Breakaway markers.") + prompt("Occupy Pretender Provincial Capital: Remove breakaway markers.") view.color = POPULACE for (let where = 1; where < 12; ++where) if (is_breakaway(where) && (get_province_governor(where) / 6 | 0) === game.count) @@ -2022,7 +2045,7 @@ states.occupy_seat_of_power_2 = { states.occupy_breakaway = { prompt() { - prompt("Occupy Pretender Provincial Capital: Remove Breakaway marker.") + prompt("Occupy Pretender Provincial Capital: Remove breakaway marker and governor.") view.color = POPULACE gen_action_region(game.where) }, @@ -2044,7 +2067,7 @@ function goto_replace_pretender() { states.replace_pretender_governor = { prompt() { - prompt("Occupy Pretender Provincial Capital: You may place an available Governor.") + prompt("Occupy Pretender Provincial Capital: You may place an available governor.") view.selected_region = game.where view.color = SENATE for (let i = 0; i < 6; ++i) { @@ -2070,10 +2093,10 @@ states.replace_pretender_governor = { function improve_support() { let where = get_governor_location(game.selected_governor) - let support = game.support[where] + let support = get_support(where) log("Built Support in S" + where + ".") spend_ip(POPULACE, support + 1) - game.support[where] = support + 1 + set_support(where, support + 1) } // ACTION: RECALL GOVERNOR @@ -2098,14 +2121,14 @@ function gen_place_governor() { } function reduce_support(where) { - if (game.support[where] === 1) + if (get_support(where) === 1) remove_governor(where) else - game.support[where] -= 1 + set_support(where, get_support(where) - 1) } function increase_support(where) { - game.support[where] += 1 + set_support(where, get_support(where) + 1) } function remove_governor(where) { @@ -2128,7 +2151,7 @@ function remove_governor(where) { } if (where !== ITALIA) - game.support[where] = 1 + set_support(where, 1) update_neutral_italia() } @@ -2147,9 +2170,9 @@ function place_governor(where, new_governor) { set_governor_location(new_governor, where) if (where === ITALIA) - game.support[where] = count_own_provinces() + set_support(where, count_own_provinces()) else - game.support[where] = Math.max(1, game.support[where] - 1) + set_support(where, Math.max(1, get_support(where) - 1)) if (where !== ITALIA && is_emperor_governor(new_governor)) increase_support(ITALIA) @@ -2253,6 +2276,7 @@ function roll_to_place_governor(pg) { if (have >= need) { logi("Success!") + if (game.where === ITALIA) { // Remember for Damnatio Memoriae let old_emperor = get_province_player(ITALIA) @@ -2261,22 +2285,24 @@ function roll_to_place_governor(pg) { else game.count = 0 } + place_governor(game.where, game.selected_governor) + + if (game.where === ITALIA && (has_card_event(CARD_S4) || has_card_event(CARD_S4B))) + game.state = "damnatio_memoriae" + else + game.state = "take_actions" } else { logi("Failed!") - } - - if (has_card_event(CARD_S4) || has_card_event(CARD_S4B)) - game.state = "damnatio_memoriae" - else game.state = "take_actions" + } } // ACTION: DAMNATIO MEMORIAE states.damnatio_memoriae = { prompt() { - prompt("Place Governor: You may play Damnatio Memoriae!") + prompt("Place Governor: You may play Damnatio Memoriae.") gen_card_event(CARD_S4) gen_card_event(CARD_S4B) }, @@ -2305,16 +2331,16 @@ function play_damnatio_memoriae_exp() { states.damnatio_memoriae_mobs = { prompt() { - prompt("Damnatio Memoriae: Place " + game.count + " Mobs provinces you govern.") + prompt("Damnatio Memoriae: Place " + game.count + " mobs in provinces you govern.") view.color = SENATE for (let where = 0; where < 12; ++where) - if (is_own_province(where) && game.mobs[where] < 6) + if (is_own_province(where) && count_mobs(where) < 6) gen_action_region(where) }, region(where) { push_undo() log("Added Mob to S" + where) - add_one_mob(where) + add_mobs(where, 1) if (--game.count === 0) game.state = "take_actions" }, @@ -2391,7 +2417,7 @@ function gen_move_army() { states.move_army_at_sea = { prompt() { let [ mip, sip, pip ] = game.ip - prompt("Move Army.") + prompt("Move Army: " + mip + " Military.") view.color = MILITARY view.selected_general = game.selected_general gen_move_army() @@ -2551,7 +2577,7 @@ function play_foederati() { states.foederati = { prompt() { - prompt("Foederati: Remove or recruit a Barbarian.") + prompt("Foederati: Remove or recruit a barbarian.") view.selected_general = game.selected_general let from = get_general_location(game.selected_general) gen_foederati(from) @@ -2585,7 +2611,7 @@ function play_mob() { states.mob = { prompt() { - prompt("Mob: Place a Mob in a province.") + prompt("Mob: Place a mob in a province with no mobs.") view.color = POPULACE for (let where = 0; where < 12; ++where) if (!has_mob(where) && is_enemy_province(where)) @@ -2629,7 +2655,7 @@ function play_pretender() { states.pretender_seat_of_power = { prompt() { - prompt("Pretender: Place a Seat of Power.") + prompt("Pretender: Place your seat of power marker.") view.color = POPULACE for (let where = 0; where < 12; ++where) for (let where = 1; where < 12; ++where) @@ -2658,7 +2684,7 @@ function goto_pretender_breakaway() { states.pretender_breakaway = { prompt() { - prompt("Pretender: Place Breakaway markers.") + prompt("Pretender: Place breakaway markers.") view.color = POPULACE let seat = find_seat_of_power() for (let where of PRETENDER_ADJACENT[seat]) @@ -2681,23 +2707,23 @@ function play_flanking_maneuver() { } function goto_battle_vs_general(where, attacker, target) { - log("Initiate Battle vs " + GENERAL_NAME[target] + " in S" + where) + log("Initiate Battle against " + GENERAL_NAME[target] + " in S" + where) goto_battle("general", where, attacker, target) } function goto_battle_vs_barbarian(where, attacker, target) { let tribe = get_barbarian_tribe(target) - log("Initiate Battle vs " + BARBARIAN_NAME[tribe] + " in S" + where) + log("Initiate Battle against " + BARBARIAN_NAME[tribe] + " in S" + where) goto_battle("barbarians", where, attacker, tribe) } function goto_battle_vs_rival_emperor(where, attacker, target) { - log("Initiate Battle vs Rival Emperor in S" + where) + log("Initiate Battle against " + RIVAL_EMPEROR_NAME[target] + " in S" + where) goto_battle("rival_emperor", where, attacker, target) } function goto_battle_vs_militia(where, attacker) { - log("Initiate Battle vs Militia in S" + where) + log("Initiated Battle against militia in S" + where) goto_battle("militia", where, attacker, -1) } @@ -2744,15 +2770,27 @@ function gen_initiate_battle(where) { } } +function format_battle_target() { + switch (game.battle.type) { + case "militia": return "militia" + case "barbarians": return BARBARIAN_NAME[game.battle.target] + case "general": return GENERAL_NAME[game.battle.target] + case "rival_emperor": return RIVAL_EMPEROR_NAME[game.battle.target] + } +} + states.battle = { prompt() { - prompt("Battle!") - if (!game.battle.flanking) + prompt("Initiate Battle against " + format_battle_target() + " in " + REGION_NAME[game.where] + ".") + if (!game.battle.flanking && has_card_event(CARD_M3)) { + view.prompt += " You may play Flanking Maneuver." gen_card_event(CARD_M3) + } view.actions.roll = 1 }, card(c) { - log(card_name(c)) + push_undo() + log(card_event_name(c)) set_add(game.used, c) play_card_event(c) }, @@ -3197,7 +3235,7 @@ function goto_combat_victory_attacker() { states.advance_after_combat = { prompt() { - prompt("Battle: You may advance into provincial capital.") + prompt("Combat: You may advance into provincial capital.") gen_action_capital(game.where) view.actions.pass = 1 }, @@ -3229,7 +3267,7 @@ function can_free_increase_support_level(where) { states.free_increase_support_level = { prompt() { - prompt("Combat: Increase Support Level or use Leader to buy cheaper card?") + prompt("Combat: Increase support level or save counter to reduce cost of card?") view.color = POPULACE gen_action_region(game.where) view.actions.save = 1 @@ -3282,7 +3320,7 @@ function resume_support_check() { states.support_check = { prompt() { - prompt("Support Check: Reduce support where active Barbarians, Rival Emperors or opponent armies in capital.") + prompt("Support Check: Reduce support where active barbarians, rival emperors or opponent armies in capital.") view.color = POPULACE for (let where = 0; where < 12; ++where) if ((game.count & (1 << where)) === 0) @@ -3293,10 +3331,7 @@ states.support_check = { region(where) { push_undo() game.count |= (1 << where) - if (game.support[where] > 1) - game.support[where] -= 1 - else - remove_governor(where) + reduce_support(where) resume_support_check() }, } @@ -3311,24 +3346,21 @@ function goto_support_check_emperor() { states.support_check_emperor = { prompt() { - prompt("Support Check: Reduce support in Italia for Rival Emperor and/or Pretender.") + prompt("Support Check: Reduce support in Italia for rival emperor and/or pretender on map.") view.color = POPULACE gen_action_region(ITALIA) }, region(where) { push_undo() game.count |= (1 << where) - if (game.support[where] > 1) - game.support[where] -= 1 - else - remove_governor(where) + reduce_support(where) goto_support_check_mobs() }, } function goto_support_check_mobs() { for (let where = 0; where < 12; ++where) { - if (is_own_province(where) && game.mobs[where] >= game.support[where]) { + if (is_own_province(where) && count_mobs(where) >= get_support(where)) { game.state = "support_check_mobs" return } @@ -3338,10 +3370,10 @@ function goto_support_check_mobs() { states.support_check_mobs = { prompt() { - prompt("Support Check: Remove Governors where number of Mobs exceed support.") + prompt("Support Check: Remove governors where number of mobs exceed support.") view.color = POPULACE for (let where = 0; where < 12; ++where) - if (is_own_province(where) && game.mobs[where] >= game.support[where]) + if (is_own_province(where) && count_mobs(where) >= get_support(where)) gen_action_region(where) }, region(where) { @@ -3365,7 +3397,7 @@ function goto_expand_pretender_empire() { states.expand_pretender_empire = { prompt() { - prompt("Expand Pretender Empire!") + prompt("Expand Pretender Empire: Add breakaway markers.") view.color = POPULACE for (let where = 1; where < 12; ++where) if (is_expand_pretender_province(where)) @@ -3402,7 +3434,7 @@ function goto_legitimize_claim() { states.legitimize_claim = { prompt() { - prompt("Gain Legacy: Remove Seat of Power and Breakaway markers in your provinces.") + prompt("Gain Legacy: Remove seat of power and breakaway markers in your provinces.") for (let where = 1; where < 12; ++where) if (is_own_province(where) && is_seat_of_power(where) || is_breakaway(where)) gen_action_region(where) @@ -3416,7 +3448,7 @@ states.legitimize_claim = { } function goto_gain_legacy_emperor() { - award_legacy(game.current, "Emperor", Math.max(0, game.support[ITALIA] - count_pretender_provinces())) + award_legacy(game.current, "Emperor", Math.max(0, get_support(ITALIA) - count_pretender_provinces())) if (!is_any_rival_emperor_or_pretender()) { log(PLAYER_NAMES[game.current] + " gained Emperor Turn") game.emperor_turns[game.current] += 1 @@ -3442,8 +3474,8 @@ function count_political_points() { let pp = 0 for (let where = 0; where < 12; ++where) { if (is_own_province(where)) { - pp += game.support[where] - pp -= game.mobs[where] + pp += get_support(where) + pp -= count_mobs(where) } } return pp @@ -3467,7 +3499,7 @@ function goto_buy_trash_cards() { states.buy_trash_discard = { prompt() { - prompt("You may discard any number of cards.") + prompt("Buy/Trash Cards: You may discard any number of cards.") for (let c of current_hand()) gen_action_card(c) view.actions.done = 1 @@ -3525,7 +3557,7 @@ states.buy_trash = { let military_bonus = has_military_card_bonus() let senate_bonus = has_senate_card_bonus() - prompt("Buy/Trash cards: " + game.pp + "PP left.") + prompt("Buy/Trash Cards: " + game.pp + " political points.") if (military_bonus) view.prompt += " First Military card is 2 cheaper." if (senate_bonus) @@ -3612,7 +3644,7 @@ function goto_grow_mobs() { states.grow_mobs = { prompt() { - prompt("Grow Mobs in each province you govern.") + prompt("End of Turn: Add a mob in each province you govern with mob and no amphitheater.") view.color = POPULACE for (let where = 0; where < 12; ++where) if ((game.count & (1 << where)) === 0) @@ -3639,7 +3671,7 @@ function goto_flip_inactive_barbarians() { states.flip_inactive_barbarians = { prompt() { - prompt("Flip all inactive barbarians in your provinces to their active side.") + prompt("End of Turn: Flip all inactive barbarians in your provinces to their active side.") view.color = POPULACE let tribe_count = get_tribe_count() for (let where = 0; where < 12; ++where) { @@ -3663,14 +3695,18 @@ states.flip_inactive_barbarians = { } function goto_refill_hand() { + if (game.end) { + end_refill_hand() + return + } if (current_draw().length === 0) - flip_discard_to_available(game.current) + flip_discard_to_available() game.state = "refill_hand" } states.refill_hand = { prompt() { - view.prompt = "Refill your hand." + prompt("End of Turn: Draw cards.") let hand = current_hand() let draw = current_draw() if (hand.length < 5 && draw.length > 0) { @@ -3687,7 +3723,7 @@ states.refill_hand = { set_delete(draw, c) set_add(hand, c) if (draw.length === 0) - flip_discard_to_available(game.current) + flip_discard_to_available() }, done() { clear_undo() @@ -3837,6 +3873,7 @@ exports.setup = function (seed, scenario, options) { killed: 0, placed: 0, battled: 0, + mbattled: 0, count: 0, where: 0, battle: null, @@ -3856,9 +3893,10 @@ exports.setup = function (seed, scenario, options) { governors: new Array(6 * player_count).fill(UNAVAILABLE), generals: new Array(6 * player_count).fill(UNAVAILABLE), legions: new Array(LEGION_COUNT).fill(AVAILABLE), - barbarians: new Array(BARBARIAN_COUNT).fill(AVAILABLE), + barbarians: new Array(BARBARIAN_COUNT[player_count - 2]).fill(AVAILABLE), rival_emperors: [ UNAVAILABLE, UNAVAILABLE, UNAVAILABLE ], + crisis: 0, dice: [ 0, 0, 0, 0 ], // first two are crisis table dice, second two are barbarian homeland dice market: null, @@ -3908,7 +3946,7 @@ exports.setup = function (seed, scenario, options) { update_neutral_italia() game.first = game.current = random(player_count) - log("First Player is " + PLAYER_NAMES[game.first] + "!") + log("First player " + PLAYER_NAMES[game.first] + ".") return save_game() } -- cgit v1.2.3