From 4a3b2a010da17959766a4c4c58a04c33c398c422 Mon Sep 17 00:00:00 2001 From: Tor Andersson Date: Sun, 23 Feb 2025 18:37:17 +0100 Subject: xxx --- data.js | 4 +- images/factions/communists.png | Bin 0 -> 33854 bytes images/factions/communitsts.png | Bin 33854 -> 0 bytes info/rules.html | 2 +- land-and-freedom.css | 230 ++++++++-------- land-and-freedom.scss | 16 +- play.html | 18 +- play.js | 6 +- play2.css | 577 ++++++++++++++++++++++++++++++++++++++++ play2.js | 242 +++++++++++++++++ rules.js | 8 +- 11 files changed, 962 insertions(+), 141 deletions(-) create mode 100644 images/factions/communists.png delete mode 100644 images/factions/communitsts.png create mode 100644 play2.css create mode 100644 play2.js diff --git a/data.js b/data.js index 8c86144..ece18ee 100644 --- a/data.js +++ b/data.js @@ -1,7 +1,6 @@ "use strict"; Object.defineProperty(exports, "__esModule", { value: true }); -exports.LIBERTY_OR_COLLECTIVIZATION = exports.COMMUNIST_EXTRA_HERO_POINT = exports.ANARCHIST_EXTRA_HERO_POINT = exports.NORTHERN = exports.SOUTHERN = exports.ARAGON = exports.MADRID = exports.ORGANIZATION_MEDALLION_ID = exports.ARCHIVES_MEDALLION_ID = exports.VOLUNTEERS_MEDALLION_ID = exports.INTELLIGENCE_MEDALLION_ID = exports.PROPAGANDA_MEDALLION_ID = exports.STRATEGY_MEDALLION_ID = exports.FRONTS = exports.DEFEAT = exports.VICTORY = exports.TRASH = exports.TOWARDS_CENTER = exports.AWAY_FROM_CENTER = exports.SELF = exports.PLAYER_WITH_MOST_HERO_POINTS = exports.OTHER_PLAYERS = exports.ON = exports.OFF = exports.TEAMWORK_BONUS = exports.MORALE_BONUS = exports.FOREIGN_AID = exports.SOVIET_SUPPORT = exports.INITIATIVE_PLAYER = exports.GOVERNMENT = exports.COLLECTIVIZATION = exports.CLOSEST_TO_VICTORY = exports.CLOSEST_TO_DEFEAT = exports.LIBERTY = exports.ANY = exports.MODERATES_ID = exports.FASCIST_ID = exports.COMMUNISTS_ID = exports.ANARCHISTS_ID = exports.MODERATE = exports.COMMUNIST = exports.ANARCHIST = exports.ALL_PLAYERS = void 0; -exports.create_effect = create_effect; +exports.LIBERTY_OR_COLLECTIVIZATION = exports.COMMUNIST_EXTRA_HERO_POINT = exports.ANARCHIST_EXTRA_HERO_POINT = exports.NORTHERN = exports.SOUTHERN = exports.ARAGON = exports.MADRID = exports.ORGANIZATION_MEDALLION_ID = exports.ARCHIVES_MEDALLION_ID = exports.VOLUNTEERS_MEDALLION_ID = exports.INTELLIGENCE_MEDALLION_ID = exports.PROPAGANDA_MEDALLION_ID = exports.STRATEGY_MEDALLION_ID = exports.FRONTS = exports.DEFEAT = exports.VICTORY = exports.TRASH = exports.TOWARDS_CENTER = exports.AWAY_FROM_CENTER = exports.SELF = exports.PLAYER_WITH_MOST_HERO_POINTS = exports.OTHER_PLAYERS = exports.ON = exports.OFF = exports.TEAMWORK_BONUS = exports.MORALE_BONUS = exports.FOREIGN_AID = exports.SOVIET_SUPPORT = exports.INITIATIVE_PLAYER = exports.GOVERNMENT = exports.COLLECTIVIZATION = exports.CLOSEST_TO_VICTORY = exports.CLOSEST_TO_DEFEAT = exports.LIBERTY = exports.ANY = exports.MODERATES_ID = exports.FASCIST_ID = exports.COMMUNISTS_ID = exports.ANARCHISTS_ID = exports.MODERATE = exports.COMMUNIST = exports.ANARCHIST = exports.ALL_PLAYERS = exports.create_effect = void 0; const LIBERTY = 0; exports.LIBERTY = LIBERTY; const COLLECTIVIZATION = 1; @@ -96,6 +95,7 @@ function create_effect(type, target, value, faction) { faction, }; } +exports.create_effect = create_effect; const data = { cards: [ {}, diff --git a/images/factions/communists.png b/images/factions/communists.png new file mode 100644 index 0000000..ff845b4 Binary files /dev/null and b/images/factions/communists.png differ diff --git a/images/factions/communitsts.png b/images/factions/communitsts.png deleted file mode 100644 index ff845b4..0000000 Binary files a/images/factions/communitsts.png and /dev/null differ diff --git a/info/rules.html b/info/rules.html index 29b34df..b2704c0 100644 --- a/info/rules.html +++ b/info/rules.html @@ -1,7 +1,7 @@ -rules +Land and Freedom Rulebook
@@ -103,15 +100,16 @@
Hand
-
Deck
-
Discard Pile
-
Trash
+
Deck
+
Discard Pile
+
Trash
-
-
-
+
+
+
+
Anarchist Tableau
diff --git a/play.js b/play.js index 5b002e8..971c8e3 100644 --- a/play.js +++ b/play.js @@ -347,11 +347,11 @@ function on_update() { } place_cards(ui.hand, view.hand); ui.player_area_tabs.hand_tab.replaceChildren(`Hand (${view.hand.length})`); - place_cards(ui.player_area_cards.deck, view.deck); + // place_cards(ui.player_area_cards.deck, view.deck); ui.player_area_tabs.deck_tab.replaceChildren(`Deck (${view.deck.length})`); - place_cards(ui.player_area_cards.discard, view.discard); + // place_cards(ui.player_area_cards.discard, view.discard); ui.player_area_tabs.discard_tab.replaceChildren(`Discard (${view.discard.length})`); - place_cards(ui.player_area_cards.trash, view.trash); + // place_cards(ui.player_area_cards.trash, view.trash); ui.player_area_tabs.trash_tab.replaceChildren(`Trash (${view.trash.length})`); place_cards(ui.selectable_cards, view.selectable_cards); for (let faction_id of FACTIONS) { diff --git a/play2.css b/play2.css new file mode 100644 index 0000000..bebfc07 --- /dev/null +++ b/play2.css @@ -0,0 +1,577 @@ +main { + background-color: dimgray; +} + +#mapwrap { + width: 1650px; + height: 1275px; +} + +#map { + width: 1650px; + height: 1275px; + background-size: 1650px 1275px; + box-shadow: 0px 1px 10px #0008; + background-image: url(images/map75.jpg); +} + +@media (min-resolution: 97dpi) { + #map { background-image: url(images/map150.jpg); } +} + +/* PANELS */ + +.panel { + background-color: #555; + max-width: 1650px; + margin: 24px auto; + position: relative; +} + +.panel_header { + background-color: #888; + padding: 6px; +} + +.panel_body { + display: flex; + flex-wrap: wrap; + gap: 12px; + padding: 12px; +} + +.card { + background-size: 100% 100%; + width: 206px; + height: 281px; + xborder-radius: 5px; + box-shadow: 0 0 0 1px #333; +} + +.card.event { + position: absolute; +} + +.faction_token[data-faction-id=a] { + background-image: url("images/factions/anarchists.png"); +} + +.faction_token[data-faction-id=c] { + background-image: url("images/factions/communists.png"); +} + +.faction_token[data-faction-id=m] { + background-image: url("images/factions/moderates.png"); +} + +.initiative_token { + background-image: url("images/initiative_clockwise.png"); +} + +.initiative_token[data-year="2"] { + background-image: url("images/initiative_counter_clockwise.png"); +} + +.standee[data-standee-id="0"] { + background-image: url("images/standees/standee_0.png"); +} + +.standee[data-standee-id="1"] { + background-image: url("images/standees/standee_1.png"); +} + +.standee[data-standee-id="2"] { + background-image: url("images/standees/standee_2.png"); +} + +.standee[data-standee-id="3"] { + background-image: url("images/standees/standee_3.png"); +} + +.standee[data-standee-id="4"] { + background-image: url("images/standees/standee_4.png"); +} + +.bonus[data-bonus-id="0"][data-bonus-on="0"] { + background-image: url("images/bonus/bonus_0_off.png"); +} + +.bonus[data-bonus-id="0"][data-bonus-on="1"] { + background-image: url("images/bonus/bonus_0_on.png"); +} + +.bonus[data-bonus-id="1"][data-bonus-on="0"] { + background-image: url("images/bonus/bonus_1_off.png"); +} + +.bonus[data-bonus-id="1"][data-bonus-on="1"] { + background-image: url("images/bonus/bonus_1_on.png"); +} + +.medallion[data-medallion-id="0"] { + background-image: url("images/medallions/medallion_0.png"); +} + +.medallion[data-medallion-id="1"] { + background-image: url("images/medallions/medallion_1.png"); +} + +.medallion[data-medallion-id="2"] { + background-image: url("images/medallions/medallion_2.png"); +} + +.medallion[data-medallion-id="3"] { + background-image: url("images/medallions/medallion_3.png"); +} + +.medallion[data-medallion-id="4"] { + background-image: url("images/medallions/medallion_4.png"); +} + +.medallion[data-medallion-id="5"] { + background-image: url("images/medallions/medallion_5.png"); +} + +.medallion[data-medallion-id="6"] { + background-image: url("images/medallions/medallion_6.png"); +} + +.medallion[data-medallion-id="7"] { + background-image: url("images/medallions/medallion_7.png"); +} + +.medallion[data-medallion-id="8"] { + background-image: url("images/medallions/medallion_8.png"); +} + +.card[data-card-id="1"] { + background-image: url("images/cards75/card_1.png"); +} + +.card[data-card-id="2"] { + background-image: url("images/cards75/card_2.png"); +} + +.card[data-card-id="3"] { + background-image: url("images/cards75/card_3.png"); +} + +.card[data-card-id="4"] { + background-image: url("images/cards75/card_4.png"); +} + +.card[data-card-id="5"] { + background-image: url("images/cards75/card_5.png"); +} + +.card[data-card-id="6"] { + background-image: url("images/cards75/card_6.png"); +} + +.card[data-card-id="7"] { + background-image: url("images/cards75/card_7.png"); +} + +.card[data-card-id="8"] { + background-image: url("images/cards75/card_8.png"); +} + +.card[data-card-id="9"] { + background-image: url("images/cards75/card_9.png"); +} + +.card[data-card-id="10"] { + background-image: url("images/cards75/card_10.png"); +} + +.card[data-card-id="11"] { + background-image: url("images/cards75/card_11.png"); +} + +.card[data-card-id="12"] { + background-image: url("images/cards75/card_12.png"); +} + +.card[data-card-id="13"] { + background-image: url("images/cards75/card_13.png"); +} + +.card[data-card-id="14"] { + background-image: url("images/cards75/card_14.png"); +} + +.card[data-card-id="15"] { + background-image: url("images/cards75/card_15.png"); +} + +.card[data-card-id="16"] { + background-image: url("images/cards75/card_16.png"); +} + +.card[data-card-id="17"] { + background-image: url("images/cards75/card_17.png"); +} + +.card[data-card-id="18"] { + background-image: url("images/cards75/card_18.png"); +} + +.card[data-card-id="19"] { + background-image: url("images/cards75/card_19.png"); +} + +.card[data-card-id="20"] { + background-image: url("images/cards75/card_20.png"); +} + +.card[data-card-id="21"] { + background-image: url("images/cards75/card_21.png"); +} + +.card[data-card-id="22"] { + background-image: url("images/cards75/card_22.png"); +} + +.card[data-card-id="23"] { + background-image: url("images/cards75/card_23.png"); +} + +.card[data-card-id="24"] { + background-image: url("images/cards75/card_24.png"); +} + +.card[data-card-id="25"] { + background-image: url("images/cards75/card_25.png"); +} + +.card[data-card-id="26"] { + background-image: url("images/cards75/card_26.png"); +} + +.card[data-card-id="27"] { + background-image: url("images/cards75/card_27.png"); +} + +.card[data-card-id="28"] { + background-image: url("images/cards75/card_28.png"); +} + +.card[data-card-id="29"] { + background-image: url("images/cards75/card_29.png"); +} + +.card[data-card-id="30"] { + background-image: url("images/cards75/card_30.png"); +} + +.card[data-card-id="31"] { + background-image: url("images/cards75/card_31.png"); +} + +.card[data-card-id="32"] { + background-image: url("images/cards75/card_32.png"); +} + +.card[data-card-id="33"] { + background-image: url("images/cards75/card_33.png"); +} + +.card[data-card-id="34"] { + background-image: url("images/cards75/card_34.png"); +} + +.card[data-card-id="35"] { + background-image: url("images/cards75/card_35.png"); +} + +.card[data-card-id="36"] { + background-image: url("images/cards75/card_36.png"); +} + +.card[data-card-id="37"] { + background-image: url("images/cards75/card_37.png"); +} + +.card[data-card-id="38"] { + background-image: url("images/cards75/card_38.png"); +} + +.card[data-card-id="39"] { + background-image: url("images/cards75/card_39.png"); +} + +.card[data-card-id="40"] { + background-image: url("images/cards75/card_40.png"); +} + +.card[data-card-id="41"] { + background-image: url("images/cards75/card_41.png"); +} + +.card[data-card-id="42"] { + background-image: url("images/cards75/card_42.png"); +} + +.card[data-card-id="43"] { + background-image: url("images/cards75/card_43.png"); +} + +.card[data-card-id="44"] { + background-image: url("images/cards75/card_44.png"); +} + +.card[data-card-id="45"] { + background-image: url("images/cards75/card_45.png"); +} + +.card[data-card-id="46"] { + background-image: url("images/cards75/card_46.png"); +} + +.card[data-card-id="47"] { + background-image: url("images/cards75/card_47.png"); +} + +.card[data-card-id="48"] { + background-image: url("images/cards75/card_48.png"); +} + +.card[data-card-id="49"] { + background-image: url("images/cards75/card_49.png"); +} + +.card[data-card-id="50"] { + background-image: url("images/cards75/card_50.png"); +} + +.card[data-card-id="51"] { + background-image: url("images/cards75/card_51.png"); +} + +.card[data-card-id="52"] { + background-image: url("images/cards75/card_52.png"); +} + +.card[data-card-id="53"] { + background-image: url("images/cards75/card_53.png"); +} + +.card[data-card-id="54"] { + background-image: url("images/cards75/card_54.png"); +} + +.card[data-card-id="55"] { + background-image: url("images/cards75/card_55.png"); +} + +.card[data-card-id="56"] { + background-image: url("images/cards75/card_56.png"); +} + +.card[data-card-id="57"] { + background-image: url("images/cards75/card_57.png"); +} + +.card[data-card-id="58"] { + background-image: url("images/cards75/card_58.png"); +} + +.card[data-card-id="59"] { + background-image: url("images/cards75/card_59.png"); +} + +.card[data-card-id="60"] { + background-image: url("images/cards75/card_60.png"); +} + +.card[data-card-id="61"] { + background-image: url("images/cards75/card_61.png"); +} + +.card[data-card-id="62"] { + background-image: url("images/cards75/card_62.png"); +} + +.card[data-card-id="63"] { + background-image: url("images/cards75/card_63.png"); +} + +.card[data-card-id="64"] { + background-image: url("images/cards75/card_64.png"); +} + +.card[data-card-id="65"] { + background-image: url("images/cards75/card_65.png"); +} + +.card[data-card-id="66"] { + background-image: url("images/cards75/card_66.png"); +} + +.card[data-card-id="67"] { + background-image: url("images/cards75/card_67.png"); +} + +.card[data-card-id="68"] { + background-image: url("images/cards75/card_68.png"); +} + +.card[data-card-id="69"] { + background-image: url("images/cards75/card_69.png"); +} + +.card[data-card-id="70"] { + background-image: url("images/cards75/card_70.png"); +} + +.card[data-card-id="71"] { + background-image: url("images/cards75/card_71.png"); +} + +.card[data-card-id="72"] { + background-image: url("images/cards75/card_72.png"); +} + +.card[data-card-id="73"] { + background-image: url("images/cards75/card_73.png"); +} + +.card[data-card-id="74"] { + background-image: url("images/cards75/card_74.png"); +} + +.card[data-card-id="75"] { + background-image: url("images/cards75/card_75.png"); +} + +.card[data-card-id="76"] { + background-image: url("images/cards75/card_76.png"); +} + +.card[data-card-id="77"] { + background-image: url("images/cards75/card_77.png"); +} + +.card[data-card-id="78"] { + background-image: url("images/cards75/card_78.png"); +} + +.card[data-card-id="79"] { + background-image: url("images/cards75/card_79.png"); +} + +.card[data-card-id="80"] { + background-image: url("images/cards75/card_80.png"); +} + +.card[data-card-id="81"] { + background-image: url("images/cards75/card_81.png"); +} + +.card[data-card-id="82"] { + background-image: url("images/cards75/card_82.png"); +} + +.card[data-card-id="83"] { + background-image: url("images/cards75/card_83.png"); +} + +.card[data-card-id="84"] { + background-image: url("images/cards75/card_84.png"); +} + +.card[data-card-id="85"] { + background-image: url("images/cards75/card_85.png"); +} + +.card[data-card-id="86"] { + background-image: url("images/cards75/card_86.png"); +} + +.card[data-card-id="87"] { + background-image: url("images/cards75/card_87.png"); +} + +.card[data-card-id="88"] { + background-image: url("images/cards75/card_88.png"); +} + +.card[data-card-id="89"] { + background-image: url("images/cards75/card_89.png"); +} + +.card[data-card-id="90"] { + background-image: url("images/cards75/card_90.png"); +} + +.card[data-card-id="91"] { + background-image: url("images/cards75/card_91.png"); +} + +.card[data-card-id="92"] { + background-image: url("images/cards75/card_92.png"); +} + +.card[data-card-id="93"] { + background-image: url("images/cards75/card_93.png"); +} + +.card[data-card-id="94"] { + background-image: url("images/cards75/card_94.png"); +} + +.card[data-card-id="95"] { + background-image: url("images/cards75/card_95.png"); +} + +.card[data-card-id="96"] { + background-image: url("images/cards75/card_96.png"); +} + +.card[data-card-id="97"] { + background-image: url("images/cards75/card_97.png"); +} + +.card[data-card-id="98"] { + background-image: url("images/cards75/card_98.png"); +} + +.card[data-card-id="99"] { + background-image: url("images/cards75/card_99.png"); +} + +.card[data-card-id="100"] { + background-image: url("images/cards75/card_100.png"); +} + +.card[data-card-id="101"] { + background-image: url("images/cards75/card_101.png"); +} + +.card[data-card-id="102"] { + background-image: url("images/cards75/card_102.png"); +} + +.card[data-card-id="103"] { + background-image: url("images/cards75/card_103.png"); +} + +.card[data-card-id="104"] { + background-image: url("images/cards75/card_104.png"); +} + +.card[data-card-id="105"] { + background-image: url("images/cards75/card_105.png"); +} + +.card[data-card-id="106"] { + background-image: url("images/cards75/card_106.png"); +} + +.card[data-card-id="107"] { + background-image: url("images/cards75/card_107.png"); +} + +.card[data-card-id="108"] { + background-image: url("images/cards75/card_108.png"); +} diff --git a/play2.js b/play2.js new file mode 100644 index 0000000..9a0e8f4 --- /dev/null +++ b/play2.js @@ -0,0 +1,242 @@ +"use strict" + +const ui = { + map: document.getElementById('map'), + glory_container: document.getElementById('glory'), + hand: document.getElementById('hand'), + player_areas: { + Anarchist: document.getElementById('player_area_Anarchist'), + Communist: document.getElementById('player_area_Communist'), + Moderate: document.getElementById('player_area_Moderate'), + }, + tableaus: { + a: document.getElementById('tableau_a'), + c: document.getElementById('tableau_c'), + m: document.getElementById('tableau_m'), + }, + standees: [], + fronts: [], + cards: [], +}; + +let action_register = [] + +function register_action(e, action, id) { + e.my_action = action + e.my_id = id + e.onmousedown = on_click_action + action_register.push(e) +} + +function on_click_action(evt) { + if (evt.button === 0) + if (send_action(evt.target.my_action, evt.target.my_id)) + evt.stopPropagation() +} + +function is_action(action, arg) { + if (arg === undefined) + return !!(view.actions && view.actions[action] === 1) + return !!(view.actions && view.actions[action] && view.actions[action].includes(arg)) +} + +let on_init_once = false; + +function on_init() { + if (on_init_once) + return; + on_init_once = true; + for (let t = 0; t < TRACK_COUNT; ++t) { + for (let s = 0; s < TRACK_LENGTH; ++s) { + const bm = t * 11 + s; + let e = (ui.blank_markers[bm] = document.createElement('div')); + e.className = 'blank_marker'; + register_action(e, 'blank_marker', bm); + } + } + for (let b = 0; b < BONUSES_COUNT; ++b) { + let e = (ui.bonuses[b] = document.createElement('div')); + e.className = 'bonus'; + e.setAttribute('data-bonus-id', '' + b); + e.style.left = LAYOUT_BONUSES[b][0] + 'px'; + e.style.top = LAYOUT_BONUSES[b][1] + 'px'; + LAYOUT_BONUSES; + register_action(e, 'bonus', b); + ui.map.appendChild(ui.bonuses[b]); + } + for (let g = 0; g < GLORY_COUNT; ++g) { + let e = (ui.glory[g] = document.createElement('div')); + e.className = 'faction_token'; + ui.glory_container.appendChild(ui.glory[g]); + e.style.left = LAYOUT_GLORY[g][0] + 'px'; + e.style.top = LAYOUT_GLORY[g][1] + 'px'; + } + for (let m = 0; m < medallionS_COUNT; ++m) { + let e = (ui.medallions[m] = document.createElement('div')); + e.className = 'medallion'; + e.setAttribute('data-medallion-id', '' + m); + register_action(e, 'medallion', m); + } + for (let s = 0; s < STANDEES_COUNT; ++s) { + let e = (ui.standees[s] = document.createElement('div')); + e.className = 'standee'; + e.setAttribute('data-standee-id', '' + s); + register_action(e, 'standee', s); + ui.tracks.appendChild(ui.standees[s]); + } + for (let c = 1; c < CARD_COUNT; ++c) { + let e = (ui.cards[c] = document.createElement('div')); + e.className = 'card'; + e.setAttribute('data-card-id', '' + data.cards[c].id); + register_action(e, 'card', c); + } + let e = (ui.initiative_token = document.createElement('div')); + e.className = 'initiative_token'; + data.fronts.forEach((front) => { + ui.tokens_on_front[front.id] = {}; + FACTIONS.forEach((faction_id) => { + let e = (ui.tokens_on_front[front.id][faction_id] = + document.createElement('div')); + e.className = 'faction_token'; + e.setAttribute('data-faction-id', faction_id); + }); + }); + Object.keys(ui.fronts).forEach((front_id) => { + register_action(ui.fronts[front_id].front, 'front', front_id); + }); +} + +function place_cards(e, cards) { + e.replaceChildren() + for (let c of cards) { + ui.cards[c].classList.remove("selected") + e.appendChild(ui.cards[c]) + if (view.selected_cards.includes(c)) { + ui.cards[c].classList.add("selected") + } + } +} + +function on_update() { + console.log('on_update', view); + on_init(); + for (let key of Object.keys(view.hero_points)) { + ui.roles[key].hero_points.replaceChildren(`Hero Points: ${view.hero_points[key]}`); + } + ui.bag_of_glory.replaceChildren(`Bag of Glory: ${view.bag_of_glory_count}`); + ui.current_events.replaceChildren(); + for (let i = 0; i < view.current_events.length; i++) { + const cardId = view.current_events[i]; + ui.current_events.appendChild(ui.cards[cardId]); + ui.cards[cardId].classList.add('event'); + ui.cards[cardId].style.left = LAYOUT_CURRENT_EVENTS[i][0] + 'px'; + ui.cards[cardId].style.top = LAYOUT_CURRENT_EVENTS[i][1] + 'px'; + } + ui.markers.replaceChildren(); + for (let bm of view.triggered_track_effects) { + const s = bm % 11; + const t = Math.floor(bm / 11); + ui.markers.appendChild(ui.blank_markers[bm]); + ui.blank_markers[bm].style.left = LAYOUT_TRACKS[t][s][0] + 'px'; + ui.blank_markers[bm].style.top = LAYOUT_TRACKS[t][s][1] + 'px'; + } + for (let bonus_id of Object.keys(view.bonuses)) { + ui.bonuses[bonus_id].setAttribute('data-bonus-on', view.bonuses[bonus_id] + 0); + } + place_cards(ui.hand, view.hand); + ui.player_area_tabs.hand_tab.replaceChildren(`Hand (${view.hand.length})`); + place_cards(ui.player_area_cards.deck, view.deck); + ui.player_area_tabs.deck_tab.replaceChildren(`Deck (${view.deck.length})`); + place_cards(ui.player_area_cards.discard, view.discard); + ui.player_area_tabs.discard_tab.replaceChildren(`Discard (${view.discard.length})`); + place_cards(ui.player_area_cards.trash, view.trash); + ui.player_area_tabs.trash_tab.replaceChildren(`Trash (${view.trash.length})`); + place_cards(ui.selectable_cards, view.selectable_cards); + for (let faction_id of FACTIONS) { + place_cards(ui.tableaus[faction_id], view.tableaus[faction_id]); + } + for (let i = 0; i < view.tracks.length; ++i) { + ui.standees[i].style.left = LAYOUT_TRACKS[i][view.tracks[i]][0] + 'px'; + ui.standees[i].style.top = LAYOUT_TRACKS[i][view.tracks[i]][1] + 'px'; + } + for (let front_id of Object.keys(view.fronts)) { + const front_data = view.fronts[front_id]; + ui.fronts[front_id].value.replaceChildren(front_data.status !== null ? front_data.status : front_data.value); + ui.fronts[front_id].contributions.replaceChildren(); + for (let faction_id of front_data.contributions) { + ui.fronts[front_id].contributions.appendChild(ui.tokens_on_front[front_id][faction_id]); + } + } + ui.medallions_container.replaceChildren(); + for (let i = 0; i < view.medallions.pool.length; ++i) { + if (view.medallions.pool[i] !== null) { + const id = view.medallions.pool[i]; + ui.medallions[id].style.left = LAYOUT_medallionS[i][0] + 'px'; + ui.medallions[id].style.top = LAYOUT_medallionS[i][1] + 'px'; + ui.medallions_container.appendChild(ui.medallions[id]); + } + } + for (let f of FACTIONS) { + ui.roles[f].medallions.replaceChildren(); + for (let m of view.medallions[f]) { + ui.roles[f].medallions.appendChild(ui.medallions[m]); + } + } + ui.roles[view.initiative].medallions.appendChild(ui.initiative_token); + ui.initiative_token.setAttribute('data-year', view.year); + if (view.played_card === null) { + ui.turn_info.style.display = 'none'; + } + else { + ui.turn_info.style.display = ''; + ui.turn_info_card.setAttribute('data-card-id', view.played_card + ''); + } + Object.values(ui.glory).forEach((elt) => elt.removeAttribute('data-faction-id')); + for (let g = 0; g < view.glory.length; ++g) { + ui.glory[g].setAttribute('data-faction-id', view.glory[g]); + } + for (let e of action_register) + e.classList.toggle('action', is_action(e.my_action, e.my_id)); + ui.year.replaceChildren(`Year ${view.year}`); + action_button('add_to_front', '+1 to a Front'); + action_button('d_liberty', 'Decrease Liberty'); + action_button('soviet_support', 'Soviet Support'); + action_button('collectivization', 'Collectivization'); + action_button('d_collectivization', 'Decrease Collectivization'); + action_button('d_foreign_aid', 'Decrease Foreign Aid'); + action_button('d_government', 'Decrease Government'); + action_button('d_soviet_support', 'Decrease Soviet Support'); + action_button('foreign_aid', 'Foreign Aid'); + action_button('government', 'Government'); + action_button('liberty', 'Liberty'); + action_button('government_to_center', 'Government towards center'); + action_button('teamwork_on', 'Teamwork Bonus On'); + action_button('Anarchist', 'Anarchist'); + action_button('Communist', 'Communist'); + action_button('Moderate', 'Moderate'); + action_button('gain_hp', 'Gain Hero Points'); + action_button('lose_hp', 'Lose Hero Points'); + action_button('draw_card', 'Draw a card'); + action_button('draw_cards', 'Draw cards'); + action_button('play_to_tableau', 'Play card to Tableau'); + action_button('play_for_event', 'Play card for Event'); + action_button('use_ap', 'Use Action Points'); + action_button('use_morale_bonus', 'Use Morale Bonus'); + action_button('move_track', 'Move a Track'); + action_button('turn_on_bonus', 'Turn on a Bonus'); + action_button('add_glory', 'Add to Bag of Glory'); + action_button('draw_glory', 'Draw from Bag of Glory'); + action_button('up', 'Up'); + action_button('down', 'Down'); + action_button('next', 'Next'); + action_button('remove_blank_marker', 'Remove Blank marker'); + action_button('confirm', 'Confirm'); + action_button('yes', 'Yes'); + action_button('no', 'No'); + action_button('skip', 'Skip'); + action_button('spend_hp', 'Spend Hero Points'); + action_button('use_momentum', 'Play second card (Momentum)'); + action_button('done', 'Done'); + action_button('end_turn', 'End turn'); + action_button('undo', 'Undo'); +} diff --git a/rules.js b/rules.js index ced9de7..4ede666 100644 --- a/rules.js +++ b/rules.js @@ -1,9 +1,6 @@ 'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); -exports.roles = exports.scenarios = void 0; -exports.action = action; -exports.view = game_view; -exports.setup = setup; +exports.setup = exports.view = exports.action = exports.roles = exports.scenarios = void 0; const data_1 = require("./data"); const OBSERVER = 'Observer'; const states = {}; @@ -92,6 +89,7 @@ function action(state, player, action, arg) { throw new Error('Invalid action: ' + action); return game; } +exports.action = action; const state_node = 'l'; const seq_node = 's'; const function_node = 'f'; @@ -397,6 +395,7 @@ function game_view(state, current) { } return view; } +exports.view = game_view; function setup(seed, _scenario, _options) { game = { seed: seed, @@ -491,6 +490,7 @@ function setup(seed, _scenario, _options) { start_year(); return game; } +exports.setup = setup; function draw_hand_cards(faction_id, count) { const deck = list_deck(faction_id); if (game.medallions[faction_id].includes(data_1.INTELLIGENCE_MEDALLION_ID)) { -- cgit v1.2.3