diff options
-rw-r--r-- | data.js | 18 | ||||
-rw-r--r-- | play.html | 52 | ||||
-rw-r--r-- | rules.js | 450 | ||||
-rw-r--r-- | ui.js | 2 |
4 files changed, 271 insertions, 251 deletions
@@ -1,19 +1,19 @@ const SPACES = [ "United States Supply", "Tripolitan Supply", - "Alexandria Harbor", - "Algiers Harbor", + "Alexandria", + "Algiers", "Algiers Patrol Zone", - "Benghazi Harbor", - "Derne Harbor", - "Gibraltar Harbor", + "Benghazi", + "Derne", + "Gibraltar", "Gibraltar Patrol Zone", - "Malta Harbor", - "Tangier Harbor", + "Malta", + "Tangier", "Tangier Patrol Zone", - "Tripoli Harbor", + "Tripoli", "Tripoli Patrol Zone", - "Tunis Harbor", + "Tunis", "Tunis Patrol Zone", "1801", "1802", @@ -35,11 +35,21 @@ font-family: "Source Serif SmText"; } +/* XXX: Work around z-stacking drawing glitch in Firefox 90 on Linux */ +#status { min-height: 1px; } +#status:empty { background-color: slategray; } + .hand { min-height: 300px; justify-content: left; } +.hand_separator { + color: gainsboro; + border-bottom: 2px dotted gainsboro; + text-align: center; +} + .card { width: 250px; height: 350px; @@ -57,13 +67,6 @@ border-radius: 5px; } -.card_separator { - margin-top: 130px; - user-select: none; - font-size: 48px; - color: aliceblue; -} - .card_info .card:hover { transform: scale(2) translateY(-30px); } @@ -339,15 +342,15 @@ <path class="patrol_zone" d="M879 113.5a136 136 0 00-136 136 136 136 0 009.45 49.746c.019.017.033.036.05.054 2.1 2 3.6 2.5 7.6 2.5 6.3.1 10.3.8 15 2.8 3.2 1.4 4 1.4 6.5.1 1.6-.8 4.199-2.7 5.699-4.2 2.228-2.228 3.107-2.635 6.176-2.204A92.27 92.27 0 01883.5 225.73a92.27 92.27 0 0183.928 54.151c.461-.22.86-.38 1.073-.38 1 0 1.799-1.6 5.499-9.7 1.2-2.7 2.6-5.1 3.2-5.4 2.6-1.6 19.8-2.4 22-1 1.3.8 2.3.8 3.6-.1 1.1-.6 3.8-.9 6.4-.6 2.986.365 4.169.353 5.17-.606a136 136 0 00.63-12.594 136 136 0 00-136-136z" id="algiers_patrol_zone"/> <path class="patrol_zone" d="M1275.5 86a136 136 0 00-136 136 136 136 0 003.915 31.739 92.27 92.27 0 0188.835-67.76 92.27 92.27 0 0192.27 92.271 92.27 92.27 0 01-45.858 79.638A136 136 0 001411.5 222a136 136 0 00-136-136z" id="tunis_patrol_zone"/> <path class="patrol_zone" d="M1514.121 309.44a243 243 0 00-232.214 171.452c.44.816.461 1.972.293 4.108-.1 2.4.5 7.7 1.4 11.7 1.4 5.9 1.5 7.7.5 9.9-1.3 3-.7 4.4 1.1 2.6 1.9-1.9 2.5-1.5 6.3 4.3 2.1 3 4.1 5.5 4.7 5.5.5 0 2.2 1.4 3.8 3.2 2.3 2.5 3.2 2.9 4.3 2 1.1-1 2-.8 4 .8 1.4 1.1 3.3 2 4.2 2 .376 0 .983.2 1.68.517a127.92 127.92 0 01101.91-50.79 127.92 127.92 0 01119.673 83.173c.745-.355 1.238-.383 1.238 0 0 .6.599 1.1 1.299 1.1.6 0 2.3.9 3.7 2 1.5 1.2 4.1 2 6.4 2 4.2 0 7.6 2.2 7.6 5 0 1-1.1 3.4-2.5 5.5l-2.6 3.7 2.1 4.4c1.2 2.4 3.1 4.6 4.3 5 3.5 1 5.7 3.5 5.7 6.3.1 1.4.7 3.7 1.5 5.1 2 3.5 1.8 6.4-.5 8.5-1.1 1-2 2.9-2 4.2 0 2.8 3.2 9.4 5.5 11.3 3 2.5 4.5 6.8 5.1 15.4.5 5.8 1.2 9 2.2 9.8 1.3 1.1 1.4.8.7-3.2-.4-2.5-.8-7.4-1-11-.3-7.6-1.7-13.2-4.4-17.7-1.7-2.7-1.8-3.4-.6-5 1.3-1.7 1.4-1.7 3.9.6 1.4 1.3 3.1 4.5 3.9 6.9.9 3.3 2.1 5 4.2 6.2 2.8 1.6 3 2.1 3.1 8.1.1 8.5.1 8.7 2.4 9.9 1.5.8 4.9.7 12.7-.4 11.4-1.6 12.9-1.3 16.9 2.9 1.8 1.9 3.1 2.3 9 2.3 3.9 0 8.1-.6 9.6-1.4 2.3-1.2 2.9-1.2 4.2.2.9.8 1.6 2.3 1.6 3.3 0 2.4-1.7 11.1-2.6 13.5-.6 1.6-.4 1.8 2.2 1.3 7.5-1.5 9.2-2.1 12.7-4.9 4.2-3.3 6.7-3.1 6.7.6s2.9 6.3 10.5 9.2c7.3 2.7 8.9 3 14.2 1.9 3-.7 3.4-.4 6.3 4.1 1.6 2.6 3 5.4 3 6.1 0 .7.5 1.3 1 1.3.6 0 1-1 1-2.3 0-1.2 1.3-4.2 3-6.7 2.6-3.9 2.8-4.6 1.5-6-.8-.9-1.5-2.1-1.5-2.6 0-1.7 5.5-6.4 7.4-6.4.9 0 3-1.4 4.6-3.1 2.5-2.8 3.2-3.1 6.5-2.5 3 .6 3.9 1.4 5.7 5.1 1.2 2.4 2.8 4.7 3.6 5 .9.346 1.918.18 2.867-.31a243 243 0 006.885-14.25c-.886-1.077-1.551-2.136-1.551-2.54 0-.762 2.217-2.868 4.513-4.644a243 243 0 0017.607-90.317 243 243 0 00-243-243z" id="tripoli_patrol_zone"/> -<circle class="harbor" id="tangier_harbor" r="92" cy="426" cx="296.5"/> -<circle class="harbor" id="gibraltar_harbor" r="92" cy="216" cx="374.25"/> -<circle class="harbor" id="algiers_harbor" r="92" cy="318" cx="883.5"/> -<circle class="harbor" id="tunis_harbor" r="92" cy="278.25" cx="1232.25"/> -<circle class="harbor" id="malta_harbor" r="92" cy="189.5" cx="1592.5"/> -<circle class="harbor" id="derne_harbor" r="92" cy="437.25" cx="2030.5"/> -<circle class="harbor" id="benghazi_harbor" r="92" cy="583" cx="1877"/> -<circle class="harbor" id="alexandria_harbor" r="92" cy="454.5" cx="2335.5"/> -<circle class="harbor" id="tripoli_harbor" r="128" cy="604.5" cx="1416"/> +<circle class="harbor" id="tangier" r="92" cy="426" cx="296.5"/> +<circle class="harbor" id="gibraltar" r="92" cy="216" cx="374.25"/> +<circle class="harbor" id="algiers" r="92" cy="318" cx="883.5"/> +<circle class="harbor" id="tunis" r="92" cy="278.25" cx="1232.25"/> +<circle class="harbor" id="malta" r="92" cy="189.5" cx="1592.5"/> +<circle class="harbor" id="derne" r="92" cy="437.25" cx="2030.5"/> +<circle class="harbor" id="benghazi" r="92" cy="583" cx="1877"/> +<circle class="harbor" id="alexandria" r="92" cy="454.5" cx="2335.5"/> +<circle class="harbor" id="tripoli" r="128" cy="604.5" cx="1416"/> <g id="markers" fill="#444" stroke="black" stroke-width="2"> <circle id="year" r="26" cx="175" cy="728"/> <circle id="season" r="26" cx="893" cy="728"/> @@ -423,13 +426,7 @@ </g> </svg> -<div id="core" class="hand"> -<div id="tr_card_1" class="show card tr_card_1"></div> -<div id="tr_card_2" class="show card tr_card_2"></div> -<div id="tr_card_3" class="show card tr_card_3"></div> -<div id="us_card_1" class="show card us_card_1"></div> -<div id="us_card_2" class="show card us_card_2"></div> -<div id="us_card_3" class="show card us_card_3"></div> +<div id="hand_cards" class="hand"> <div id="tr_card_4" class="card tr_card_4"></div> <div id="tr_card_5" class="card tr_card_5"></div> <div id="tr_card_6" class="card tr_card_6"></div> @@ -479,6 +476,15 @@ <div id="us_card_26" class="card us_card_26"></div> <div id="us_card_27" class="card us_card_27"></div> </div> +<div class="hand_separator"></div> +<div id="core_cards" class="hand"> +<div id="tr_card_1" class="show card tr_card_1"></div> +<div id="tr_card_2" class="show card tr_card_2"></div> +<div id="tr_card_3" class="show card tr_card_3"></div> +<div id="us_card_1" class="show card us_card_1"></div> +<div id="us_card_2" class="show card us_card_2"></div> +<div id="us_card_3" class="show card us_card_3"></div> +</div> <div id="popup" onmouseleave="hide_popup_menu()"> <div id="menu_card_event" onclick="on_card_event()">Play Event</div> @@ -1,5 +1,11 @@ "use strict"; +// [x]: summarize naval movements +// [ ]: summarize pirate raids +// [ ]: summarize naval bombardments +// [ ]: summarize naval combat +// [ ]: summarize ground combat + const US = "United States"; const TR = "Tripolitania"; @@ -39,19 +45,19 @@ const SUMMER = 1; const FALL = 2; const WINTER = 3; -const ALEXANDRIA_HARBOR = get_space_id("Alexandria Harbor"); -const ALGIERS_HARBOR = get_space_id("Algiers Harbor"); +const ALEXANDRIA = get_space_id("Alexandria"); +const ALGIERS = get_space_id("Algiers"); const ALGIERS_PATROL_ZONE = get_space_id("Algiers Patrol Zone"); -const BENGHAZI_HARBOR = get_space_id("Benghazi Harbor"); -const DERNE_HARBOR = get_space_id("Derne Harbor"); -const GIBRALTAR_HARBOR = get_space_id("Gibraltar Harbor"); +const BENGHAZI = get_space_id("Benghazi"); +const DERNE = get_space_id("Derne"); +const GIBRALTAR = get_space_id("Gibraltar"); const GIBRALTAR_PATROL_ZONE = get_space_id("Gibraltar Patrol Zone"); -const MALTA_HARBOR = get_space_id("Malta Harbor"); -const TANGIER_HARBOR = get_space_id("Tangier Harbor"); +const MALTA = get_space_id("Malta"); +const TANGIER = get_space_id("Tangier"); const TANGIER_PATROL_ZONE = get_space_id("Tangier Patrol Zone"); -const TRIPOLI_HARBOR = get_space_id("Tripoli Harbor"); +const TRIPOLI = get_space_id("Tripoli"); const TRIPOLI_PATROL_ZONE = get_space_id("Tripoli Patrol Zone"); -const TUNIS_HARBOR = get_space_id("Tunis Harbor"); +const TUNIS = get_space_id("Tunis"); const TUNIS_PATROL_ZONE = get_space_id("Tunis Patrol Zone"); const UNITED_STATES_SUPPLY = get_space_id("United States Supply"); const TRIPOLITAN_SUPPLY = get_space_id("Tripolitan Supply"); @@ -72,30 +78,30 @@ const YEAR_TURN_TRACK = { }; const FRIGATE_SPACES = [ - ALEXANDRIA_HARBOR, - ALGIERS_HARBOR, + ALEXANDRIA, + ALGIERS, ALGIERS_PATROL_ZONE, - BENGHAZI_HARBOR, - DERNE_HARBOR, - GIBRALTAR_HARBOR, + BENGHAZI, + DERNE, + GIBRALTAR, GIBRALTAR_PATROL_ZONE, - MALTA_HARBOR, - TANGIER_HARBOR, + MALTA, + TANGIER, TANGIER_PATROL_ZONE, - TRIPOLI_HARBOR, + TRIPOLI, TRIPOLI_PATROL_ZONE, - TUNIS_HARBOR, + TUNIS, TUNIS_PATROL_ZONE, ]; const BATTLE_SPACES = [ - ALEXANDRIA_HARBOR, - ALGIERS_HARBOR, - BENGHAZI_HARBOR, - DERNE_HARBOR, - TANGIER_HARBOR, - TRIPOLI_HARBOR, - TUNIS_HARBOR, + ALEXANDRIA, + ALGIERS, + BENGHAZI, + DERNE, + TANGIER, + TRIPOLI, + TUNIS, ]; const PATROL_ZONES = [ @@ -107,11 +113,11 @@ const PATROL_ZONES = [ ]; const HARBOR = { - [ALGIERS_PATROL_ZONE]: ALGIERS_HARBOR, - [GIBRALTAR_PATROL_ZONE]: GIBRALTAR_HARBOR, - [TANGIER_PATROL_ZONE]: TANGIER_HARBOR, - [TRIPOLI_PATROL_ZONE]: TRIPOLI_HARBOR, - [TUNIS_PATROL_ZONE]: TUNIS_HARBOR, + [ALGIERS_PATROL_ZONE]: ALGIERS, + [GIBRALTAR_PATROL_ZONE]: GIBRALTAR, + [TANGIER_PATROL_ZONE]: TANGIER, + [TRIPOLI_PATROL_ZONE]: TRIPOLI, + [TUNIS_PATROL_ZONE]: TUNIS, } const THOMAS_JEFFERSON = 1; @@ -270,6 +276,26 @@ function logp(...args) { game.log.push(game.active + " " + s); } +function flush_summary(text, nothing="none") { + game.summary.sort(); + let last = game.summary[0]; + let n = 0; + for (let entry of game.summary) { + if (entry != last) { + text += "\n" + n + " " + last; + n = 0; + } + ++n; + last = entry; + } + if (n > 0) + text += "\n" + n + " " + last; + else + text += "\n" + nothing; + log(text); + delete game.summary; +} + function is_inactive_player(current) { return current == "Observer" || (game.active != current && game.active != "Both"); } @@ -370,7 +396,6 @@ function count_pieces(list, where) { function discard_card(player, card, reason = "") { log(""); - // log(game.active + " discards \"" + CARD_NAMES[card] + "\"" + reason + "."); log(game.active + " discards a card" + reason + "."); remove_from_array(player.hand, card); player.discard.push(card); @@ -537,9 +562,9 @@ function is_fall_of_1805_or_later() { } function hamets_army_location() { - if (count_american_troops(ALEXANDRIA_HARBOR) > 0) return ALEXANDRIA_HARBOR; - if (count_american_troops(DERNE_HARBOR) > 0) return DERNE_HARBOR; - if (count_american_troops(BENGHAZI_HARBOR) > 0) return BENGHAZI_HARBOR; + if (count_american_troops(ALEXANDRIA) > 0) return ALEXANDRIA; + if (count_american_troops(DERNE) > 0) return DERNE; + if (count_american_troops(BENGHAZI) > 0) return BENGHAZI; return null; } @@ -549,12 +574,12 @@ function is_hamets_army_created() { function is_derne_captured() { let space = hamets_army_location(); - return space == DERNE_HARBOR || space == BENGHAZI_HARBOR; + return space == DERNE || space == BENGHAZI; } function is_benghazi_captured() { let space = hamets_army_location(); - return space == BENGHAZI_HARBOR; + return space == BENGHAZI; } function is_naval_battle_location(space) { @@ -593,7 +618,7 @@ function can_build_corsair_in_tripoli() { } function can_pirate_raid_from_tripoli() { - return count_pieces(TR_CORSAIRS, TRIPOLI_HARBOR) > 0; + return count_pieces(TR_CORSAIRS, TRIPOLI) > 0; } function start_of_year() { @@ -602,8 +627,8 @@ function start_of_year() { game.season = SPRING; - move_all_pieces(US_FRIGATES, YEAR_TURN_TRACK[game.year], GIBRALTAR_HARBOR); - move_all_pieces(TR_FRIGATES, YEAR_TURN_TRACK[game.year], TRIPOLI_HARBOR); + move_all_pieces(US_FRIGATES, YEAR_TURN_TRACK[game.year], GIBRALTAR); + move_all_pieces(TR_FRIGATES, YEAR_TURN_TRACK[game.year], TRIPOLI); if (game.year <= 1804) { draw_cards(game.us.hand, game.us.draw, 6); @@ -750,7 +775,7 @@ states.american_play = { }, card_build_gunboat: function (c) { discard_card(game.us, c, " to build a gunboat in Malta"); - move_one_piece(US_GUNBOATS, UNITED_STATES_SUPPLY, MALTA_HARBOR); + move_one_piece(US_GUNBOATS, UNITED_STATES_SUPPLY, MALTA); end_american_play(); }, card_move_frigates: function (c) { @@ -789,12 +814,12 @@ states.tripolitan_play = { }, card_build_corsair: function (c) { discard_card(game.tr, c, " to build a Tripolitan corsair in Tripoli"); - move_one_piece(TR_CORSAIRS, TRIPOLITAN_SUPPLY, TRIPOLI_HARBOR); + move_one_piece(TR_CORSAIRS, TRIPOLITAN_SUPPLY, TRIPOLI); end_tripolitan_play(); }, card_pirate_raid: function (c) { discard_card(game.tr, c, " to Pirate Raid with the corsairs from Tripoli"); - goto_pirate_raid(TRIPOLI_HARBOR, TRIPOLI_PATROL_ZONE); + goto_pirate_raid(TRIPOLI, TRIPOLI_PATROL_ZONE); }, card_event: play_tripolitan_event, pass: function () { @@ -830,7 +855,7 @@ function goto_pirate_raid(harbor, patrol_zone) { states.raid_before_intercept = { prompt: function (view, current) { - view.prompt = "Pirate Raid in " + SPACES[game.where] + "."; + view.prompt = "Pirate Raid from " + SPACES[HARBOR[game.where]] + "."; if (is_inactive_player(current)) return view.prompt; view.prompt += " You may play \"Lieutenant Sterett in Pursuit\"."; @@ -862,7 +887,7 @@ function goto_pirate_raid_intercept(us_dice) { states.raid_before_hunt = { prompt: function (view, current) { - view.prompt = "Pirate Raid in " + SPACES[game.where] + "."; + view.prompt = "Pirate Raid from " + SPACES[HARBOR[game.where]] + "."; if (is_inactive_player(current)) return view.prompt; if (can_play_happy_hunting()) { @@ -915,7 +940,7 @@ function goto_pirate_raid_hunt() { states.raid_after_hunt = { prompt: function (view, current) { - view.prompt = "Pirate Raid in " + SPACES[game.where] + "."; + view.prompt = "Pirate Raid from " + SPACES[HARBOR[game.where]] + "."; if (is_inactive_player(current)) return view.prompt; view.prompt += " You may play \"Merchant Ship Converted\"."; @@ -925,7 +950,7 @@ states.raid_after_hunt = { }, card_event: function (card) { play_battle_card(game.tr, MERCHANT_SHIP_CONVERTED); - move_one_piece(TR_CORSAIRS, TRIPOLITAN_SUPPLY, TRIPOLI_HARBOR); + move_one_piece(TR_CORSAIRS, TRIPOLITAN_SUPPLY, TRIPOLI); end_pirate_raid(); }, next: function () { @@ -964,6 +989,7 @@ function interception_roll(harbor, patrol_zone, us_dice) { // AMERICAN NAVAL MOVEMENT function goto_move_up_to_n_american_frigates(n) { + game.summary = []; game.moves = n; game.active = US; game.state = 'move_us_frigate_from'; @@ -990,6 +1016,7 @@ states.move_us_frigate_from = { game.state = 'move_us_frigate_to' }, next: function () { + flush_summary("Frigates moved:"); if (count_naval_battle_or_bombardment_locations() > 0) goto_allocate_gunboats(); else @@ -1011,7 +1038,7 @@ states.move_us_frigate_to = { space: function (space) { push_undo(); if (space != game.where) { - log(game.active + " moves a frigate from " + SPACES[game.where] + " to " + SPACES[space] + "."); + game.summary.push(SPACES[game.where] + " to " + SPACES[space]); move_one_piece(US_FRIGATES, game.where, space); --game.moves; if (count_american_frigates(game.where) > 0 && game.moves > 0) @@ -1021,6 +1048,7 @@ states.move_us_frigate_to = { game.state = 'move_us_frigate_from' }, next: function () { + flush_summary("Frigates moved:"); if (count_naval_battle_or_bombardment_locations() > 0) goto_allocate_gunboats(); else @@ -1030,9 +1058,10 @@ states.move_us_frigate_to = { } function goto_allocate_gunboats() { - if (count_american_gunboats(MALTA_HARBOR) == 0) + if (count_american_gunboats(MALTA) == 0) return goto_select_battle(); - game.where = MALTA_HARBOR; + game.summary = []; + game.where = MALTA; game.state = 'allocate_gunboats'; } @@ -1041,7 +1070,7 @@ states.allocate_gunboats = { view.prompt = "United States: Allocate gunboats to battle locations."; if (is_inactive_player(current)) return view.prompt; - if (count_american_gunboats(MALTA_HARBOR) > 0) { + if (count_american_gunboats(MALTA) > 0) { for (let space of BATTLE_SPACES) if (is_naval_battle_or_bombardment_location(space)) gen_action(view, 'space', space); @@ -1051,10 +1080,11 @@ states.allocate_gunboats = { }, space: function (space) { push_undo(); - log(game.active + " moves a gunboat to " + SPACES[space] + "."); - move_one_piece(US_GUNBOATS, MALTA_HARBOR, space); + game.summary.push(SPACES[space]); + move_one_piece(US_GUNBOATS, MALTA, space); }, next: function () { + flush_summary("Gunboats allocated:"); game.where = null; goto_select_battle(); }, @@ -1114,8 +1144,8 @@ function naval_bombardment_round() { } function end_naval_bombardment() { - move_all_pieces(US_FRIGATES, game.where, MALTA_HARBOR); - move_all_pieces(US_GUNBOATS, game.where, MALTA_HARBOR); + move_all_pieces(US_FRIGATES, game.where, MALTA); + move_all_pieces(US_GUNBOATS, game.where, MALTA); goto_select_battle(); } @@ -1388,12 +1418,12 @@ function resume_naval_battle() { remove_damaged_frigates() - move_all_pieces(US_FRIGATES, game.where, MALTA_HARBOR); - move_all_pieces(US_GUNBOATS, game.where, MALTA_HARBOR); + move_all_pieces(US_FRIGATES, game.where, MALTA); + move_all_pieces(US_GUNBOATS, game.where, MALTA); if (game.where == TRIPOLI_PATROL_ZONE) { - move_all_pieces(TR_FRIGATES, game.where, TRIPOLI_HARBOR); - move_all_pieces(TR_CORSAIRS, game.where, TRIPOLI_HARBOR); + move_all_pieces(TR_FRIGATES, game.where, TRIPOLI); + move_all_pieces(TR_CORSAIRS, game.where, TRIPOLI); } switch (game.active_card) { @@ -1434,7 +1464,7 @@ states.land_battle_move_frigates = { next: function () { let n = count_american_frigates(game.where); log(n + " American frigates move to " + SPACES[game.where] + "."); - move_all_pieces(US_GUNBOATS, MALTA_HARBOR, game.where); + move_all_pieces(US_GUNBOATS, MALTA, game.where); goto_land_battle(); }, undo: pop_undo @@ -1443,8 +1473,8 @@ states.land_battle_move_frigates = { function goto_land_battle() { naval_bombardment_round(); - move_all_pieces(US_FRIGATES, TRIPOLI_HARBOR, MALTA_HARBOR); - move_all_pieces(US_GUNBOATS, TRIPOLI_HARBOR, MALTA_HARBOR); + move_all_pieces(US_FRIGATES, TRIPOLI, MALTA); + move_all_pieces(US_GUNBOATS, TRIPOLI, MALTA); log("Land Battle in " + SPACES[game.where] + "."); @@ -1490,9 +1520,9 @@ states.land_battle_american_card = { play_battle_card(game.us, card); switch (card) { case SEND_IN_THE_MARINES: - move_one_piece(US_MARINES, UNITED_STATES_SUPPLY, TRIPOLI_HARBOR); - move_one_piece(US_MARINES, UNITED_STATES_SUPPLY, TRIPOLI_HARBOR); - move_one_piece(US_MARINES, UNITED_STATES_SUPPLY, TRIPOLI_HARBOR); + move_one_piece(US_MARINES, UNITED_STATES_SUPPLY, TRIPOLI); + move_one_piece(US_MARINES, UNITED_STATES_SUPPLY, TRIPOLI); + move_one_piece(US_MARINES, UNITED_STATES_SUPPLY, TRIPOLI); break; case MARINE_SHARPSHOOTERS: game.marine_sharpshooters = true; @@ -1678,20 +1708,20 @@ function play_tripolitan_event(card) { } function can_play_yusuf_qaramanli() { - let n = count_allied_corsairs(ALGIERS_HARBOR) + - count_allied_corsairs(TANGIER_HARBOR) + - count_allied_corsairs(TUNIS_HARBOR) + - count_tripolitan_corsairs(TRIPOLI_HARBOR); + let n = count_allied_corsairs(ALGIERS) + + count_allied_corsairs(TANGIER) + + count_allied_corsairs(TUNIS) + + count_tripolitan_corsairs(TRIPOLI); return n > 0; } function play_yusuf_qaramanli() { game.state = 'yusuf_qaramanli'; game.raids = []; - if (count_allied_corsairs(ALGIERS_HARBOR) > 0) game.raids.push(ALGIERS_HARBOR); - if (count_allied_corsairs(TANGIER_HARBOR) > 0) game.raids.push(TANGIER_HARBOR); - if (count_allied_corsairs(TUNIS_HARBOR) > 0) game.raids.push(TUNIS_HARBOR); - if (count_tripolitan_corsairs(TRIPOLI_HARBOR) > 0) game.raids.push(TRIPOLI_HARBOR); + if (count_allied_corsairs(ALGIERS) > 0) game.raids.push(ALGIERS); + if (count_allied_corsairs(TANGIER) > 0) game.raids.push(TANGIER); + if (count_allied_corsairs(TUNIS) > 0) game.raids.push(TUNIS); + if (count_tripolitan_corsairs(TRIPOLI) > 0) game.raids.push(TRIPOLI); } function resume_yusuf_qaramanli() { @@ -1716,10 +1746,10 @@ states.yusuf_qaramanli = { log("Pirate Raid from " + SPACES[space] + "."); remove_from_array(game.raids, space); switch (space) { - case ALGIERS_HARBOR: return goto_pirate_raid(ALGIERS_HARBOR, ALGIERS_PATROL_ZONE); - case TANGIER_HARBOR: return goto_pirate_raid(TANGIER_HARBOR, TANGIER_PATROL_ZONE); - case TUNIS_HARBOR: return goto_pirate_raid(TUNIS_HARBOR, TUNIS_PATROL_ZONE); - case TRIPOLI_HARBOR: return goto_pirate_raid(TRIPOLI_HARBOR, TRIPOLI_PATROL_ZONE); + case ALGIERS: return goto_pirate_raid(ALGIERS, ALGIERS_PATROL_ZONE); + case TANGIER: return goto_pirate_raid(TANGIER, TANGIER_PATROL_ZONE); + case TUNIS: return goto_pirate_raid(TUNIS, TUNIS_PATROL_ZONE); + case TRIPOLI: return goto_pirate_raid(TRIPOLI, TRIPOLI_PATROL_ZONE); } }, next: function () { @@ -1733,14 +1763,13 @@ function can_play_murad_reis_breaks_out() { } function play_murad_reis_breaks_out() { - log("Two Tripolitan corsairs move from Gibraltar Harbor to Tripoli Harbor."); game.where = GIBRALTAR_PATROL_ZONE; if (can_play_lieutenant_sterett_in_pursuit()) { game.active = US; game.state = 'murad_reis_breaks_out'; } else { end_murad_reis_breaks_out(); - move_all_pieces(TR_CORSAIRS, GIBRALTAR_HARBOR, TRIPOLI_HARBOR); + move_all_pieces(TR_CORSAIRS, GIBRALTAR, TRIPOLI); end_tripolitan_play(); } } @@ -1767,8 +1796,8 @@ states.murad_reis_breaks_out = { } function end_murad_reis_breaks_out(us_dice) { - interception_roll(GIBRALTAR_HARBOR, GIBRALTAR_PATROL_ZONE, us_dice); - move_all_pieces(TR_CORSAIRS, GIBRALTAR_HARBOR, TRIPOLI_HARBOR); + interception_roll(GIBRALTAR, GIBRALTAR_PATROL_ZONE, us_dice); + move_all_pieces(TR_CORSAIRS, GIBRALTAR, TRIPOLI); end_tripolitan_play(); } @@ -1777,11 +1806,11 @@ function can_play_constantinople_sends_aid() { } function play_constantinople_sends_aid() { - move_one_piece(TR_FRIGATES, TRIPOLITAN_SUPPLY, TRIPOLI_HARBOR); - move_one_piece(TR_CORSAIRS, TRIPOLITAN_SUPPLY, TRIPOLI_HARBOR); - move_one_piece(TR_CORSAIRS, TRIPOLITAN_SUPPLY, TRIPOLI_HARBOR); - move_one_piece(TR_INFANTRY, TRIPOLITAN_SUPPLY, TRIPOLI_HARBOR); - move_one_piece(TR_INFANTRY, TRIPOLITAN_SUPPLY, TRIPOLI_HARBOR); + move_one_piece(TR_FRIGATES, TRIPOLITAN_SUPPLY, TRIPOLI); + move_one_piece(TR_CORSAIRS, TRIPOLITAN_SUPPLY, TRIPOLI); + move_one_piece(TR_CORSAIRS, TRIPOLITAN_SUPPLY, TRIPOLI); + move_one_piece(TR_INFANTRY, TRIPOLITAN_SUPPLY, TRIPOLI); + move_one_piece(TR_INFANTRY, TRIPOLITAN_SUPPLY, TRIPOLI); end_tripolitan_play(); } @@ -1794,7 +1823,7 @@ function can_play_us_supplies_run_low() { function play_us_supplies_run_low() { game.state = 'us_supplies_run_low'; - game.where = MALTA_HARBOR; + game.where = MALTA; } states.us_supplies_run_low = { @@ -1808,34 +1837,34 @@ states.us_supplies_run_low = { gen_action(view, 'space', space); }, space: function (space) { - log("American frigate from " + SPACES[space] + " moved to Malta Harbor."); - move_one_piece(US_FRIGATES, space, MALTA_HARBOR); + log("Frigate from " + SPACES[space] + " moved to Malta."); + move_one_piece(US_FRIGATES, space, MALTA); end_tripolitan_play(); }, } function can_play_algerine_corsairs_raid() { - return count_allied_corsairs(ALGIERS_HARBOR) > 0; + return count_allied_corsairs(ALGIERS) > 0; } function can_play_moroccan_corsairs_raid() { - return count_allied_corsairs(TANGIER_HARBOR) > 0; + return count_allied_corsairs(TANGIER) > 0; } function can_play_tunisian_corsairs_raid() { - return count_allied_corsairs(TUNIS_HARBOR) > 0; + return count_allied_corsairs(TUNIS) > 0; } function play_algerine_corsairs_raid() { - goto_pirate_raid(ALGIERS_HARBOR, ALGIERS_PATROL_ZONE); + goto_pirate_raid(ALGIERS, ALGIERS_PATROL_ZONE); } function play_moroccan_corsairs_raid() { - goto_pirate_raid(TANGIER_HARBOR, TANGIER_PATROL_ZONE); + goto_pirate_raid(TANGIER, TANGIER_PATROL_ZONE); } function play_tunisian_corsairs_raid() { - goto_pirate_raid(TUNIS_HARBOR, TUNIS_PATROL_ZONE); + goto_pirate_raid(TUNIS, TUNIS_PATROL_ZONE); } function can_play_troops_to_derne() { @@ -1851,23 +1880,20 @@ function can_play_troops_to_tripoli() { } function play_troops_to_derne() { - log("Two Tripolitan infantry placed in Derne."); - move_one_piece(TR_INFANTRY, TRIPOLITAN_SUPPLY, DERNE_HARBOR); - move_one_piece(TR_INFANTRY, TRIPOLITAN_SUPPLY, DERNE_HARBOR); + move_one_piece(TR_INFANTRY, TRIPOLITAN_SUPPLY, DERNE); + move_one_piece(TR_INFANTRY, TRIPOLITAN_SUPPLY, DERNE); end_tripolitan_play(); } function play_troops_to_benghazi() { - log("Two Tripolitan infantry placed in Benghazi."); - move_one_piece(TR_INFANTRY, TRIPOLITAN_SUPPLY, BENGHAZI_HARBOR); - move_one_piece(TR_INFANTRY, TRIPOLITAN_SUPPLY, BENGHAZI_HARBOR); + move_one_piece(TR_INFANTRY, TRIPOLITAN_SUPPLY, BENGHAZI); + move_one_piece(TR_INFANTRY, TRIPOLITAN_SUPPLY, BENGHAZI); end_tripolitan_play(); } function play_troops_to_tripoli() { - log("Two Tripolitan infantry placed in Tripoli."); - move_one_piece(TR_INFANTRY, TRIPOLITAN_SUPPLY, TRIPOLI_HARBOR); - move_one_piece(TR_INFANTRY, TRIPOLITAN_SUPPLY, TRIPOLI_HARBOR); + move_one_piece(TR_INFANTRY, TRIPOLITAN_SUPPLY, TRIPOLI); + move_one_piece(TR_INFANTRY, TRIPOLITAN_SUPPLY, TRIPOLI); end_tripolitan_play(); } @@ -1899,18 +1925,18 @@ states.storms = { let roll = roll_d6(); if (roll == 6) { if (!six) { - log("Storm " + roll + ": American frigate sinks."); + log("Storm roll " + roll + ": American frigate sinks."); move_one_piece(US_FRIGATES, space, TRIPOLITAN_SUPPLY); six = true; } else { - log("Storm " + roll + ": American frigate is damaged."); + log("Storm roll " + roll + ": American frigate is damaged."); if (game.year == 1806) move_one_piece(US_FRIGATES, space, UNITED_STATES_SUPPLY); else move_one_piece(US_FRIGATES, space, YEAR_TURN_TRACK[game.year+1]); } } else { - log("Storm " + roll + ": No effect."); + log("Storm roll " + roll + ": No effect."); } } if (check_frigate_victory()) @@ -1920,14 +1946,14 @@ states.storms = { } function can_play_tripoli_attacks() { - let n = count_tripolitan_frigates(TRIPOLI_HARBOR) + count_tripolitan_corsairs(TRIPOLI_HARBOR); + let n = count_tripolitan_frigates(TRIPOLI) + count_tripolitan_corsairs(TRIPOLI); let m = count_american_frigates(TRIPOLI_PATROL_ZONE); return n > 0 && m > 0; } function play_tripoli_attacks() { - move_all_pieces(TR_FRIGATES, TRIPOLI_HARBOR, TRIPOLI_PATROL_ZONE); - move_all_pieces(TR_CORSAIRS, TRIPOLI_HARBOR, TRIPOLI_PATROL_ZONE); + move_all_pieces(TR_FRIGATES, TRIPOLI, TRIPOLI_PATROL_ZONE); + move_all_pieces(TR_CORSAIRS, TRIPOLI, TRIPOLI_PATROL_ZONE); goto_naval_battle(TRIPOLI_PATROL_ZONE); } @@ -1936,9 +1962,7 @@ function can_play_sweden_pays_tribute() { } function play_sweden_pays_tribute() { - log("Swedish frigates removed."); move_all_pieces(SE_FRIGATES, TRIPOLI_PATROL_ZONE, UNITED_STATES_SUPPLY); - log("Tripolitania receives two gold coins."); give_gold(2); if (check_gold_victory()) return; @@ -1950,9 +1974,8 @@ function can_play_tripoli_acquires_corsairs() { } function play_tripoli_acquires_corsairs() { - log("Tripolitan corsairs placed in the harbor of Tripoli."); - move_one_piece(TR_CORSAIRS, TRIPOLITAN_SUPPLY, TRIPOLI_HARBOR); - move_one_piece(TR_CORSAIRS, TRIPOLITAN_SUPPLY, TRIPOLI_HARBOR); + move_one_piece(TR_CORSAIRS, TRIPOLITAN_SUPPLY, TRIPOLI); + move_one_piece(TR_CORSAIRS, TRIPOLITAN_SUPPLY, TRIPOLI); end_tripolitan_play(); } @@ -1999,7 +2022,7 @@ function end_the_philadelphia_runs_aground(two) { switch (roll) { case 1: case 2: log("Minor damage. One frigate moved to Malta."); - move_one_piece(US_FRIGATES, TRIPOLI_PATROL_ZONE, MALTA_HARBOR); + move_one_piece(US_FRIGATES, TRIPOLI_PATROL_ZONE, MALTA); break; case 3: case 4: log("Frigate sunk."); @@ -2008,7 +2031,7 @@ function end_the_philadelphia_runs_aground(two) { case 5: case 6: log("Frigate captured."); move_one_piece(US_FRIGATES, TRIPOLI_PATROL_ZONE, TRIPOLITAN_SUPPLY); - move_one_piece(TR_FRIGATES, TRIPOLITAN_SUPPLY, TRIPOLI_HARBOR); + move_one_piece(TR_FRIGATES, TRIPOLITAN_SUPPLY, TRIPOLI); break; } if (check_frigate_victory()) @@ -2029,15 +2052,15 @@ function can_play_tunis_declares_war() { } function play_algiers_declares_war() { - play_ally_declares_war(ALGIERS_HARBOR); + play_ally_declares_war(ALGIERS); } function play_morocco_declares_war() { - play_ally_declares_war(TANGIER_HARBOR); + play_ally_declares_war(TANGIER); } function play_tunis_declares_war() { - play_ally_declares_war(TUNIS_HARBOR); + play_ally_declares_war(TUNIS); } function play_ally_declares_war(harbor) { @@ -2125,26 +2148,26 @@ function play_swedish_frigates_arrive() { } function can_play_hamets_army_created() { - return (count_american_frigates(ALEXANDRIA_HARBOR) > 0) && (game.year >= 1804); + return (count_american_frigates(ALEXANDRIA) > 0) && (game.year >= 1804); } function play_hamets_army_created() { - move_one_piece(US_MARINES, UNITED_STATES_SUPPLY, ALEXANDRIA_HARBOR); - move_one_piece(AR_INFANTRY, UNITED_STATES_SUPPLY, ALEXANDRIA_HARBOR); - move_one_piece(AR_INFANTRY, UNITED_STATES_SUPPLY, ALEXANDRIA_HARBOR); - move_one_piece(AR_INFANTRY, UNITED_STATES_SUPPLY, ALEXANDRIA_HARBOR); - move_one_piece(AR_INFANTRY, UNITED_STATES_SUPPLY, ALEXANDRIA_HARBOR); - move_one_piece(AR_INFANTRY, UNITED_STATES_SUPPLY, ALEXANDRIA_HARBOR); + move_one_piece(US_MARINES, UNITED_STATES_SUPPLY, ALEXANDRIA); + move_one_piece(AR_INFANTRY, UNITED_STATES_SUPPLY, ALEXANDRIA); + move_one_piece(AR_INFANTRY, UNITED_STATES_SUPPLY, ALEXANDRIA); + move_one_piece(AR_INFANTRY, UNITED_STATES_SUPPLY, ALEXANDRIA); + move_one_piece(AR_INFANTRY, UNITED_STATES_SUPPLY, ALEXANDRIA); + move_one_piece(AR_INFANTRY, UNITED_STATES_SUPPLY, ALEXANDRIA); end_american_play(); } function can_play_treaty_of_peace_and_amity() { return is_fall_of_1805_or_later() && - (count_allied_corsairs(ALGIERS_HARBOR) == 0) && - (count_allied_corsairs(TANGIER_HARBOR) == 0) && - (count_allied_corsairs(TUNIS_HARBOR) == 0) && + (count_allied_corsairs(ALGIERS) == 0) && + (count_allied_corsairs(TANGIER) == 0) && + (count_allied_corsairs(TUNIS) == 0) && (is_derne_captured()) && - (count_tripolitan_frigates(TRIPOLI_HARBOR) == 0); + (count_tripolitan_frigates(TRIPOLI) == 0); } function play_treaty_of_peace_and_amity() { @@ -2153,21 +2176,21 @@ function play_treaty_of_peace_and_amity() { function can_play_assault_on_tripoli() { return is_fall_of_1805_or_later() - // && (hamets_army_location() == BENGHAZI_HARBOR || game.us.hand.includes(SEND_IN_THE_MARINES)); + // && (hamets_army_location() == BENGHAZI || game.us.hand.includes(SEND_IN_THE_MARINES)); } function play_assault_on_tripoli() { - if (hamets_army_location() == BENGHAZI_HARBOR) { - move_all_pieces(US_MARINES, BENGHAZI_HARBOR, TRIPOLI_HARBOR); - move_all_pieces(AR_INFANTRY, BENGHAZI_HARBOR, TRIPOLI_HARBOR); + if (hamets_army_location() == BENGHAZI) { + move_all_pieces(US_MARINES, BENGHAZI, TRIPOLI); + move_all_pieces(AR_INFANTRY, BENGHAZI, TRIPOLI); } else { // TODO: force play of SEND_IN_THE_MARINES? } - move_all_pieces(US_GUNBOATS, MALTA_HARBOR, TRIPOLI_HARBOR); + move_all_pieces(US_GUNBOATS, MALTA, TRIPOLI); for (let space of FRIGATE_SPACES) - if (space != TRIPOLI_HARBOR) - move_all_pieces(US_FRIGATES, space, TRIPOLI_HARBOR); - goto_naval_battle(TRIPOLI_HARBOR); + if (space != TRIPOLI) + move_all_pieces(US_FRIGATES, space, TRIPOLI); + goto_naval_battle(TRIPOLI); } function can_play_naval_movement() { @@ -2197,7 +2220,7 @@ states.early_deployment = { gen_action(view, 'space', space); }, space: function (space) { - log(game.active + " places frigate in " + SPACES[space] + "."); + log("Frigate placed in " + SPACES[space] + "."); move_one_piece(US_FRIGATES, YEAR_TURN_TRACK[game.year+1], space); end_american_play(); }, @@ -2206,14 +2229,15 @@ states.early_deployment = { function can_play_a_show_of_force() { if (count_available_american_frigates() < 3) return false; - if (count_allied_corsairs(ALGIERS_HARBOR) > 0) return true; - if (count_allied_corsairs(TANGIER_HARBOR) > 0) return true; - if (count_allied_corsairs(TUNIS_HARBOR) > 0) return true; + if (count_allied_corsairs(ALGIERS) > 0) return true; + if (count_allied_corsairs(TANGIER) > 0) return true; + if (count_allied_corsairs(TUNIS) > 0) return true; return false; } function play_a_show_of_force() { game.state = 'a_show_of_force_where'; + game.summary = []; } states.a_show_of_force_where = { @@ -2222,12 +2246,12 @@ states.a_show_of_force_where = { if (is_inactive_player(current)) return; view.prompt += " Select an active ally of Tripoli."; - if (count_allied_corsairs(ALGIERS_HARBOR) > 0) - gen_action(view, 'space', ALGIERS_HARBOR); - if (count_allied_corsairs(TANGIER_HARBOR) > 0) - gen_action(view, 'space', TANGIER_HARBOR); - if (count_allied_corsairs(TUNIS_HARBOR) > 0) - gen_action(view, 'space', TUNIS_HARBOR); + if (count_allied_corsairs(ALGIERS) > 0) + gen_action(view, 'space', ALGIERS); + if (count_allied_corsairs(TANGIER) > 0) + gen_action(view, 'space', TANGIER); + if (count_allied_corsairs(TUNIS) > 0) + gen_action(view, 'space', TUNIS); }, space: function (space) { push_undo(); @@ -2254,12 +2278,12 @@ states.a_show_of_force_who = { }, space: function (space) { push_undo(); - log(game.active + " moves a frigate from " + SPACES[space] + " to " + SPACES[game.where] + "."); + game.summary.push("from " + SPACES[space]); move_one_piece(US_FRIGATES, space, game.where); }, next: function () { + flush_summary("Frigates moved to " + SPACES[game.where] + ":"); clear_undo(); - log("All allied corsairs from " + SPACES[game.where] + " return to the supply."); move_all_pieces(AL_CORSAIRS, game.where, TRIPOLITAN_SUPPLY); end_american_play(); }, @@ -2268,9 +2292,9 @@ states.a_show_of_force_who = { function can_play_tribute_paid() { if (count_available_american_frigates() < 1) return false; - if (count_allied_corsairs(ALGIERS_HARBOR) > 0) return true; - if (count_allied_corsairs(TANGIER_HARBOR) > 0) return true; - if (count_allied_corsairs(TUNIS_HARBOR) > 0) return true; + if (count_allied_corsairs(ALGIERS) > 0) return true; + if (count_allied_corsairs(TANGIER) > 0) return true; + if (count_allied_corsairs(TUNIS) > 0) return true; return false; } @@ -2284,12 +2308,12 @@ states.tribute_paid_where = { if (is_inactive_player(current)) return; view.prompt += " Select an active ally of Tripoli."; - if (count_allied_corsairs(ALGIERS_HARBOR) > 0) - gen_action(view, 'space', ALGIERS_HARBOR); - if (count_allied_corsairs(TANGIER_HARBOR) > 0) - gen_action(view, 'space', TANGIER_HARBOR); - if (count_allied_corsairs(TUNIS_HARBOR) > 0) - gen_action(view, 'space', TUNIS_HARBOR); + if (count_allied_corsairs(ALGIERS) > 0) + gen_action(view, 'space', ALGIERS); + if (count_allied_corsairs(TANGIER) > 0) + gen_action(view, 'space', TANGIER); + if (count_allied_corsairs(TUNIS) > 0) + gen_action(view, 'space', TUNIS); }, space: function (space) { push_undo(); @@ -2316,14 +2340,12 @@ states.tribute_paid_who = { }, space: function (space) { push_undo(); - log(game.active + " moves a frigate from " + SPACES[space] + " to " + SPACES[game.where] + "."); + log("Frigate moved to " + SPACES[game.where] + " from " + SPACES[space] + "."); move_one_piece(US_FRIGATES, space, game.where); }, next: function () { clear_undo(); - log("All allied corsairs from " + SPACES[game.where] + " return to the supply."); move_all_pieces(AL_CORSAIRS, game.where, TRIPOLITAN_SUPPLY); - log("Tripolitania receives two gold coins."); give_gold(2); if (check_gold_victory()) return; @@ -2337,9 +2359,7 @@ function can_play_constantinople_demands_tribute() { } function play_constantinople_demands_tribute() { - let n = Math.min(game.tr.gold, 2); - log("Tripolitania returns " + n + " gold coins to the supply."); - take_gold(n); + take_gold(2); end_american_play(); } @@ -2349,7 +2369,6 @@ function can_play_hamet_recruits_bedouins() { function play_hamet_recruits_bedouins() { let space = hamets_army_location(); - log(game.active + " places two Arab infantry in " + SPACES[space] + "."); move_one_piece(AR_INFANTRY, UNITED_STATES_SUPPLY, space); move_one_piece(AR_INFANTRY, UNITED_STATES_SUPPLY, space); end_american_play(); @@ -2379,6 +2398,7 @@ states.bainbridge_supplies_intel = { }, card_event: play_american_event, card_take: function (card) { + log("Card placed in hard."); remove_from_array(game.us.discard, card); game.us.hand.push(card); end_american_play(); @@ -2390,27 +2410,24 @@ function can_play_congress_authorizes_action() { } function play_congress_authorizes_action() { - log("United States places two frigates on " + (game.year+1) + "."); move_one_piece(US_FRIGATES, UNITED_STATES_SUPPLY, YEAR_TURN_TRACK[game.year+1]); move_one_piece(US_FRIGATES, UNITED_STATES_SUPPLY, YEAR_TURN_TRACK[game.year+1]); end_american_play(); } function can_play_corsairs_confiscated() { - return count_tripolitan_corsairs(GIBRALTAR_HARBOR) > 0; + return count_tripolitan_corsairs(GIBRALTAR) > 0; } function play_corsairs_confiscated() { - log("Tripolitan corsairs in Gibraltar Harbor returned to supply."); - move_all_pieces(TR_CORSAIRS, GIBRALTAR_HARBOR, TRIPOLITAN_SUPPLY); - log("\"Murad Reis Breaks Out\" card removed."); + move_all_pieces(TR_CORSAIRS, GIBRALTAR, TRIPOLITAN_SUPPLY); remove_from_array(game.tr.core, MURAD_REIS_BREAKS_OUT); game.removed.push(MURAD_REIS_BREAKS_OUT); end_american_play(); } function can_play_burn_the_philadelphia() { - return count_tripolitan_frigates(TRIPOLI_HARBOR) > 0; + return count_tripolitan_frigates(TRIPOLI) > 0; } function play_burn_the_philadelphia() { @@ -2456,20 +2473,20 @@ function end_burn_the_philadelphia(two) { case 3: case 4: log("A Tripolitan frigate is damaged."); if (game.year == 1806) - move_one_piece(TR_FRIGATES, TRIPOLI_HARBOR, TRIPOLITAN_SUPPLY); + move_one_piece(TR_FRIGATES, TRIPOLI, TRIPOLITAN_SUPPLY); else - move_one_piece(TR_FRIGATES, TRIPOLI_HARBOR, YEAR_TURN_TRACK[game.year + 1]); + move_one_piece(TR_FRIGATES, TRIPOLI, YEAR_TURN_TRACK[game.year + 1]); break; case 5: case 6: log("A Tripolitan frigate is sunk."); - move_one_piece(TR_FRIGATES, TRIPOLI_HARBOR, TRIPOLITAN_SUPPLY); + move_one_piece(TR_FRIGATES, TRIPOLI, TRIPOLITAN_SUPPLY); break; } end_american_play(); } function can_play_launch_the_intrepid() { - let n = count_tripolitan_frigates(TRIPOLI_HARBOR) + count_tripolitan_corsairs(TRIPOLI_HARBOR); + let n = count_tripolitan_frigates(TRIPOLI) + count_tripolitan_corsairs(TRIPOLI); return n > 0; } @@ -2514,24 +2531,24 @@ function end_launch_the_intrepid(two) { log("The raid is a failure."); break; case 3: case 4: - if (count_tripolitan_corsairs(TRIPOLI_HARBOR) > 0) { + if (count_tripolitan_corsairs(TRIPOLI) > 0) { log("One Tripolitan corsair is sunk."); - move_one_piece(TR_CORSAIRS, TRIPOLI_HARBOR, TRIPOLITAN_SUPPLY); + move_one_piece(TR_CORSAIRS, TRIPOLI, TRIPOLITAN_SUPPLY); } else { log("No corsairs to sink."); } break; case 5: case 6: - if (count_tripolitan_frigates(TRIPOLI_HARBOR) > 0) { + if (count_tripolitan_frigates(TRIPOLI) > 0) { log("One Tripolitan frigate is sunk."); - move_one_piece(TR_FRIGATES, TRIPOLI_HARBOR, TRIPOLITAN_SUPPLY); - } else if (count_tripolitan_corsairs(TRIPOLI_HARBOR) >= 2) { + move_one_piece(TR_FRIGATES, TRIPOLI, TRIPOLITAN_SUPPLY); + } else if (count_tripolitan_corsairs(TRIPOLI) >= 2) { log("Two Tripolitan corsairs are sunk."); - move_one_piece(TR_CORSAIRS, TRIPOLI_HARBOR, TRIPOLITAN_SUPPLY); - move_one_piece(TR_CORSAIRS, TRIPOLI_HARBOR, TRIPOLITAN_SUPPLY); - } else if (count_tripolitan_corsairs(TRIPOLI_HARBOR) >= 1) { + move_one_piece(TR_CORSAIRS, TRIPOLI, TRIPOLITAN_SUPPLY); + move_one_piece(TR_CORSAIRS, TRIPOLI, TRIPOLITAN_SUPPLY); + } else if (count_tripolitan_corsairs(TRIPOLI) >= 1) { log("One Tripolitan corsair is sunk."); - move_one_piece(TR_CORSAIRS, TRIPOLI_HARBOR, TRIPOLITAN_SUPPLY); + move_one_piece(TR_CORSAIRS, TRIPOLI, TRIPOLITAN_SUPPLY); } else { log("No corsairs to sink."); } @@ -2541,27 +2558,25 @@ function end_launch_the_intrepid(two) { } function can_play_general_eaton_attacks_derne() { - return hamets_army_location() == ALEXANDRIA_HARBOR; + return hamets_army_location() == ALEXANDRIA; } function play_general_eaton_attacks_derne() { - log("Hamet's Army attacks Derne."); - move_all_pieces(US_MARINES, ALEXANDRIA_HARBOR, DERNE_HARBOR); - move_all_pieces(AR_INFANTRY, ALEXANDRIA_HARBOR, DERNE_HARBOR); - game.where = DERNE_HARBOR; + move_all_pieces(US_MARINES, ALEXANDRIA, DERNE); + move_all_pieces(AR_INFANTRY, ALEXANDRIA, DERNE); + game.where = DERNE; game.moves = 3; game.state = 'land_battle_move_frigates'; } function can_play_general_eaton_attacks_benghazi() { - return hamets_army_location() == DERNE_HARBOR; + return hamets_army_location() == DERNE; } function play_general_eaton_attacks_benghazi() { - log("Hamet's Army attacks Benghazi."); - move_all_pieces(US_MARINES, DERNE_HARBOR, BENGHAZI_HARBOR); - move_all_pieces(AR_INFANTRY, DERNE_HARBOR, BENGHAZI_HARBOR); - game.where = BENGHAZI_HARBOR; + move_all_pieces(US_MARINES, DERNE, BENGHAZI); + move_all_pieces(AR_INFANTRY, DERNE, BENGHAZI); + game.where = BENGHAZI; game.moves = 3; game.state = 'land_battle_move_frigates'; } @@ -2578,18 +2593,18 @@ function can_play_uncharted_waters() { } function can_play_merchant_ship_converted(merchants) { - return (merchants > 0) && + return (game.where == TRIPOLI_PATROL_ZONE) && + (merchants > 0) && (count_tripolitan_corsairs(TRIPOLITAN_SUPPLY) > 0) && is_not_removed(MERCHANT_SHIP_CONVERTED); } function can_play_happy_hunting() { - let harbor = HARBOR[game.where]; - return (count_tripolitan_corsairs(harbor) > 0) && is_not_removed(HAPPY_HUNTING); + return (game.where == TRIPOLI_PATROL_ZONE) && is_not_removed(HAPPY_HUNTING); } function can_play_the_guns_of_tripoli() { - return (game.where == TRIPOLI_HARBOR) && is_not_removed(THE_GUNS_OF_TRIPOLI); + return (game.where == TRIPOLI) && is_not_removed(THE_GUNS_OF_TRIPOLI); } function can_play_mercenaries_desert() { @@ -2710,9 +2725,9 @@ exports.setup = function (scenario, players) { game.tr.draw.push(i+27); } - deploy("us_frigate_1", GIBRALTAR_HARBOR); - deploy("us_frigate_2", GIBRALTAR_HARBOR); - deploy("us_frigate_3", GIBRALTAR_HARBOR); + deploy("us_frigate_1", GIBRALTAR); + deploy("us_frigate_2", GIBRALTAR); + deploy("us_frigate_3", GIBRALTAR); deploy("us_frigate_4", TRACK_1802); deploy("us_frigate_5", TRACK_1803); deploy("us_frigate_6", TRACK_1804); @@ -2737,12 +2752,12 @@ exports.setup = function (scenario, players) { deploy("tr_frigate_1", TRIPOLITAN_SUPPLY); deploy("tr_frigate_2", TRIPOLITAN_SUPPLY); - deploy("tr_corsair_1", GIBRALTAR_HARBOR); - deploy("tr_corsair_2", GIBRALTAR_HARBOR); - deploy("tr_corsair_3", TRIPOLI_HARBOR); - deploy("tr_corsair_4", TRIPOLI_HARBOR); - deploy("tr_corsair_5", TRIPOLI_HARBOR); - deploy("tr_corsair_6", TRIPOLI_HARBOR); + deploy("tr_corsair_1", GIBRALTAR); + deploy("tr_corsair_2", GIBRALTAR); + deploy("tr_corsair_3", TRIPOLI); + deploy("tr_corsair_4", TRIPOLI); + deploy("tr_corsair_5", TRIPOLI); + deploy("tr_corsair_6", TRIPOLI); deploy("tr_corsair_7", TRIPOLITAN_SUPPLY); deploy("tr_corsair_8", TRIPOLITAN_SUPPLY); deploy("tr_corsair_9", TRIPOLITAN_SUPPLY); @@ -2750,14 +2765,14 @@ exports.setup = function (scenario, players) { for (let i = 1; i <= 9; ++i) deploy("al_corsair_" + i, TRIPOLITAN_SUPPLY); - deploy("tr_infantry_1", TRIPOLI_HARBOR); - deploy("tr_infantry_2", TRIPOLI_HARBOR); - deploy("tr_infantry_3", TRIPOLI_HARBOR); - deploy("tr_infantry_4", TRIPOLI_HARBOR); - deploy("tr_infantry_5", BENGHAZI_HARBOR); - deploy("tr_infantry_6", BENGHAZI_HARBOR); - deploy("tr_infantry_7", DERNE_HARBOR); - deploy("tr_infantry_8", DERNE_HARBOR); + deploy("tr_infantry_1", TRIPOLI); + deploy("tr_infantry_2", TRIPOLI); + deploy("tr_infantry_3", TRIPOLI); + deploy("tr_infantry_4", TRIPOLI); + deploy("tr_infantry_5", BENGHAZI); + deploy("tr_infantry_6", BENGHAZI); + deploy("tr_infantry_7", DERNE); + deploy("tr_infantry_8", DERNE); for (let i = 9; i <= 20; ++i) deploy("tr_infantry_" + i, TRIPOLITAN_SUPPLY); @@ -2825,13 +2840,12 @@ exports.view = function(state, current) { view.hand = game.us.discard; } else if (current == US) { view.hand = game.us.hand; - view.core = game.us.core; } else if (current == TR) { view.hand = game.tr.hand; - view.core = game.tr.core; } else { view.hand = []; } + view.core = game.us.core.concat(game.tr.core); return view; } @@ -142,7 +142,7 @@ function update_card(c, show) { if (is_card_enabled(c)) ui.cards[c].classList.add('enabled'); else - ui.cards[c].classList.add('enabled'); + ui.cards[c].classList.remove('enabled'); if (show) ui.cards[c].classList.add('show'); else |