From fcfed0cab586ecf3e2e6803e27f7cb0b38cb0898 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Thu, 22 Jun 2023 22:50:57 +0200 Subject: Pretender (part 1). Create, display, and gain legacy. Also renumber cards. --- play.js | 137 +++++++++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 118 insertions(+), 19 deletions(-) (limited to 'play.js') diff --git a/play.js b/play.js index 7db4efb..1aefd9b 100644 --- a/play.js +++ b/play.js @@ -5,6 +5,63 @@ // === SYNC with rules.js === +const CARD_M1 = [ 0, 11 ] +const CARD_S1 = [ 12, 23 ] +const CARD_P1 = [ 24, 35 ] +const CARD_M2 = [ 36, 44 ] +const CARD_S2 = [ 45, 53 ] +const CARD_P2 = [ 54, 62 ] +const CARD_M2X = [ 63, 71 ] +const CARD_S2X = [ 72, 80 ] +const CARD_P2X = [ 81, 89 ] +const CARD_M3 = [ 90, 97 ] +const CARD_S3 = [ 98, 105 ] +const CARD_P3 = [ 106, 113 ] +const CARD_M3X = [ 114, 121 ] +const CARD_S3X = [ 122, 129 ] +const CARD_P3X = [ 130, 137 ] +const CARD_M4 = [ 138, 143 ] +const CARD_S4 = [ 144, 149 ] +const CARD_S4B = [ 150, 155 ] +const CARD_P4 = [ 156, 161 ] +const CARD_M4X = [ 162, 167 ] +const CARD_S4X = [ 168, 173 ] +const CARD_P4X = [ 174, 179 ] + +const CARD_INDEX = [ + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, + 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 8, 8, 8, 8, 8, 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, + 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, + 15, 15, 15, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, 19, 19, 20, 20, + 20, 20, 20, 20, 21, 21, 21, 21, 21, 21, +] + +const CARD_INFO = [ + { name: "M1", type: 0, cost: 1, event: "None" }, + { name: "S1", type: 1, cost: 1, event: "None" }, + { name: "P1", type: 2, cost: 1, event: "None" }, + { name: "M2", type: 0, cost: 2, event: "Castra" }, + { name: "S2", type: 1, cost: 2, event: "Tribute" }, + { name: "P2", type: 2, cost: 2, event: "Quaestor" }, + { name: "M2X", type: 0, cost: 2, event: "Cavalry" }, + { name: "S2X", type: 1, cost: 2, event: "Princeps Senatus" }, + { name: "P2X", type: 2, cost: 2, event: "Ambitus" }, + { name: "M3", type: 0, cost: 3, event: "Flanking Maneuver" }, + { name: "S3", type: 1, cost: 3, event: "Foederati" }, + { name: "P3", type: 2, cost: 3, event: "Mob" }, + { name: "M3X", type: 0, cost: 3, event: "Force March" }, + { name: "S3X", type: 1, cost: 3, event: "Frumentarii" }, + { name: "P3X", type: 2, cost: 3, event: "Mobile Vulgus" }, + { name: "M4", type: 0, cost: 4, event: "Praetorian Guard" }, + { name: "S4", type: 1, cost: 4, event: "Damnatio Memoriae" }, + { name: "S4B", type: 1, cost: 4, event: "Damnatio Memoriae (exp)" }, + { name: "P4", type: 2, cost: 4, event: "Pretender" }, + { name: "M4X", type: 0, cost: 4, event: "Spiculum" }, + { name: "S4X", type: 1, cost: 4, event: "Triumph" }, + { name: "P4X", type: 2, cost: 4, event: "Demagogue" }, +] + const ITALIA = 0 const ASIA = 1 const GALLIA = 2 @@ -129,6 +186,16 @@ function is_breakaway(province) { function is_seat_of_power(province) { return view.seat_of_power & (1 << province) } +function find_governor(f) { + let n = view.legacy.length * 6 + for (let id = 0; id < n; ++id) + if (f(id, get_governor_location(id))) + return id + return -1 +} +function get_province_governor(where) { + return find_governor((id, loc) => loc === where) +} // === END SYNC === @@ -227,6 +294,21 @@ const LAYOUT_SUPPORT = [ BOXES["Syria Support"], ] +const LAYOUT_QUAESTOR = [ + [ 971, 829 ], + [ 1622, 994 ], + [ 403, 501 ], + [ 1327, 930 ], + [ 1097, 620 ], + [ 1445, 714 ], + [ 1643, 1462 ], + [ 590, 1284 ], + [ 97, 974 ], + [ 174, 254 ], + [ 1897, 925 ], + [ 1977, 1274 ], +] + const LAYOUT_SEA = [ [ 0, 0 ] ] const LAYOUT_HOMELAND = [ @@ -529,6 +611,8 @@ let ui = { neutral_governors: [], barbarian_leaders: [], rival_emperors: [], + seat_of_power: [], + breakaway: [], legions: [], barbarians: [ [], [], [], [], [] ], generals: [ [], [], [], [] ], @@ -629,29 +713,25 @@ function is_action(action, arg) { } function on_init() { - let c = 1 - function init_cards(n, className) { - for (let i = 0; i < n; ++i) - ui.cards[c + i] = create("div", { className, my_action: "card", my_id: c + i }) - c += n + for (let c = 0; c < CARD_INDEX.length; ++c) { + let name = CARD_INFO[CARD_INDEX[c]].name + ui.cards[c] = create("div", { className: "card influence_" + name.toLowerCase(), my_action: "card", my_id: c }) } - init_cards(12, "card influence_m1") - init_cards(12, "card influence_s1") - init_cards(12, "card influence_p1") - init_cards(9, "card influence_m2") - init_cards(9, "card influence_s2") - init_cards(9, "card influence_p2") - init_cards(8, "card influence_m3") - init_cards(8, "card influence_s3") - init_cards(8, "card influence_p3") - init_cards(6, "card influence_m4") - init_cards(6, "card influence_s4") - init_cards(6, "card influence_p4") - for (let i = 0; i < 33; ++i) ui.legions[i] = create_piece(i, "legion", "legion", "legion_" + i) + for (let p = 0; p < 4; ++p) { + for (let i = 0; i < 12; ++i) { + ui.seat_of_power[p * 12 + i] = create_thing({ className: PLAYER_CLASS[p] + " seat_of_power hide" }) + ui.seat_of_power[p * 12 + i].style.left = LAYOUT_QUAESTOR[i][0] + "px" + ui.seat_of_power[p * 12 + i].style.top = LAYOUT_QUAESTOR[i][1] + "px" + ui.breakaway[p * 12 + i] = create_thing({ className: PLAYER_CLASS[p] + " breakaway hide" }) + ui.breakaway[p * 12 + i].style.left = LAYOUT_QUAESTOR[i][0] + "px" + ui.breakaway[p * 12 + i].style.top = LAYOUT_QUAESTOR[i][1] + "px" + } + } + ui.barbarian_leaders[0] = create_piece(0, "barbarian_leader", "goths", "cniva") ui.barbarian_leaders[1] = create_piece(1, "barbarian_leader", "sassanids", "ardashir") ui.barbarian_leaders[2] = create_piece(2, "barbarian_leader", "sassanids", "shapur") @@ -676,7 +756,9 @@ function on_init() { ui.mcastra[region] = create_thing({ className: "castra hide" }) ui.militia[region] = create_thing({ className: "militia hide", my_action: "militia", my_id: region }) ui.capital[region] = document.getElementById(REGION_NAME[region] + "_Capital") - ui.quaestor[region] = document.getElementById(REGION_NAME[region] + "_Quaestor") + ui.quaestor[region] = create_thing({ className: "quaestor hide" }) + ui.quaestor[region].style.left = LAYOUT_QUAESTOR[region][0] + "px" + ui.quaestor[region].style.top = LAYOUT_QUAESTOR[region][1] + "px" // at most 3 mobs per province ui.mobs[region * 3 + 0] = create_piece(region, "mob", "mob") @@ -851,6 +933,23 @@ function on_update() { } for (let region = 0; region < 12; ++region) { + for (let p = 0; p < 4; ++p) { + let gov = get_province_governor(region) + if (gov > 0 && (gov/6|0) === p) { + if (is_seat_of_power(region)) + show(ui.seat_of_power[region + p * 12]) + else + hide(ui.seat_of_power[region + p * 12]) + if (is_breakaway(region)) + show(ui.breakaway[region + p * 12]) + else + hide(ui.breakaway[region + p * 12]) + } else { + hide(ui.seat_of_power[region + p * 12]) + hide(ui.breakaway[region + p * 12]) + } + } + if (has_quaestor(region)) show(ui.quaestor[region]) else -- cgit v1.2.3