summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--play.js190
1 files changed, 68 insertions, 122 deletions
diff --git a/play.js b/play.js
index 1e50ad1..1911b99 100644
--- a/play.js
+++ b/play.js
@@ -1,45 +1,11 @@
"use strict"
-// TODO: show strikers and targets highlighting on battle mat?
-
function toggle_pieces() {
document.getElementById("pieces").classList.toggle("hide")
}
// === COMMON LIBRARY ===
-function map_has(map, key) {
- let a = 0
- let b = (map.length >> 1) - 1
- while (a <= b) {
- let m = (a + b) >> 1
- let x = map[m<<1]
- if (key < x)
- b = m - 1
- else if (key > x)
- a = m + 1
- else
- return true
- }
- return false
-}
-
-function map_get(map, key, missing) {
- let a = 0
- let b = (map.length >> 1) - 1
- while (a <= b) {
- let m = (a + b) >> 1
- let x = map[m<<1]
- if (key < x)
- b = m - 1
- else if (key > x)
- a = m + 1
- else
- return map[(m<<1)+1]
- }
- return missing
-}
-
function set_has(set, item) {
let a = 0
let b = set.length - 1
@@ -56,6 +22,20 @@ function set_has(set, item) {
return false
}
+function pack1_get(word, n) {
+ return (word >>> n) & 1
+}
+
+function pack2_get(word, n) {
+ n = n << 1
+ return (word >>> n) & 3
+}
+
+function pack4_get(word, n) {
+ n = n << 2
+ return (word >>> n) & 15
+}
+
// === CONSTANTS (matching those in rules.js) ===
function find_lord(name) { return data.lords.findIndex((x) => x.name === name) }
@@ -96,15 +76,16 @@ const LORD_HENRY_TUDOR = find_lord("Henry Tudor")
const LORD_OXFORD = find_lord("Oxford")
const LORD_WARWICK_L = find_lord("Warwick L")
-const first_p1_lord = 0
-const last_p1_lord = 13
-const first_p2_lord = 14
-const last_p2_lord = 27
+const first_york_lord = 0
+const last_york_lord = 13
+const first_lancaster_lord = 14
+const last_lancaster_lord = 27
-const first_p1_card = 0
-const last_p1_card = 36
-const first_p2_card = 37
-const last_p2_card = 73
+const first_york_card = 0
+const last_york_card = 36
+const first_lancaster_card = 37
+const last_lancaster_card = 73
+const last_aow_card = last_lancaster_card
const Y1 = find_card("Y1")
const Y2 = find_card("Y2")
@@ -184,7 +165,6 @@ const L37 = find_card("L37")
const A1 = 0, A2 = 1, A3 = 2, D1 = 3, D2 = 4, D3 = 5
-
const RETINUE = 0
const VASSAL = 1
const MERCENARIES = 2
@@ -296,10 +276,6 @@ function get_locale_tip(id) {
return tip
}
-function is_event_in_play(c) {
- return set_has(view.events, c)
-}
-
function on_focus_cylinder(evt) {
let lord = evt.target.my_id
let info = data.lords[lord]
@@ -322,12 +298,12 @@ function max_plan_length() {
}
}
-function is_p1_lord(lord) {
- return lord >= first_p1_lord && lord <= last_p1_lord
+function is_york_lord(lord) {
+ return lord >= first_york_lord && lord <= last_york_lord
}
-function is_p2_lord(lord) {
- return lord >= first_p2_lord && lord <= last_p2_lord
+function is_lancaster_lord(lord) {
+ return lord >= first_lancaster_lord && lord <= last_lancaster_lord
}
function is_lord_on_left_or_right(lord) {
@@ -343,14 +319,14 @@ function is_lord_ambushed(lord) {
// ambush & 2 = attacker played ambush
// ambush & 1 = defender played ambush
if (view.battle.attacker === "York") {
- if ((view.battle.ambush & 1) && is_p1_lord(lord))
+ if ((view.battle.ambush & 1) && is_york_lord(lord))
return is_lord_on_left_or_right(lord)
- if ((view.battle.ambush & 2) && is_p2_lord(lord))
+ if ((view.battle.ambush & 2) && is_lancaster_lord(lord))
return is_lord_on_left_or_right(lord)
} else {
- if ((view.battle.ambush & 1) && is_p2_lord(lord))
+ if ((view.battle.ambush & 1) && is_lancaster_lord(lord))
return is_lord_on_left_or_right(lord)
- if ((view.battle.ambush & 2) && is_p1_lord(lord))
+ if ((view.battle.ambush & 2) && is_york_lord(lord))
return is_lord_on_left_or_right(lord)
}
}
@@ -375,12 +351,12 @@ function count_lord_all_forces(lord) {
)
}
-function is_p1_locale(loc) {
- return loc >= first_p1_locale && loc <= last_p1_locale
+function is_york_locale(loc) {
+ return loc >= first_york_locale && loc <= last_york_locale
}
-function is_p2_locale(loc) {
- return loc >= first_p2_locale && loc <= last_p2_locale
+function is_lancaster_locale(loc) {
+ return loc >= first_lancaster_locale && loc <= last_lancaster_locale
}
function get_lord_locale(lord) {
@@ -557,8 +533,8 @@ const ui = {
hand_panel: document.getElementById("hand_panel"),
hand: document.getElementById("hand"),
- held1: document.querySelector("#role_York .role_held"),
- held2: document.querySelector("#role_Lancaster .role_held"),
+ held_york: document.querySelector("#role_York .role_held"),
+ held_lancaster: document.querySelector("#role_Lancaster .role_held"),
command: document.getElementById("command"),
turn: document.getElementById("turn"),
@@ -637,12 +613,12 @@ function build_plan() {
ui.plan_actions.appendChild(elt)
}
- ui.plan_action_pass_p1 = elt = document.createElement("div")
+ ui.plan_action_pass_york = elt = document.createElement("div")
elt.className = `card cc york pass`
register_action(elt, "plan", -1)
ui.plan_actions.appendChild(elt)
- ui.plan_action_pass_p2 = elt = document.createElement("div")
+ ui.plan_action_pass_lancaster = elt = document.createElement("div")
elt.className = `card cc lancaster pass`
register_action(elt, "plan", -1)
ui.plan_actions.appendChild(elt)
@@ -736,9 +712,9 @@ function build_map() {
for (let i = 0; i < 6; ++i)
register_action(ui.battle_grid_array[i], "array", i)
- for (let c = first_p1_card; c <= last_p1_card; ++c)
+ for (let c = first_york_card; c <= last_york_card; ++c)
build_card("york", c)
- for (let c = first_p2_card; c <= last_p2_card; ++c)
+ for (let c = first_lancaster_card; c <= last_lancaster_card; ++c)
build_card("lancaster", c)
}
@@ -779,7 +755,7 @@ function restart_cache() {
function update_current_card_display() {
if (typeof view.what === "number" && view.what >= 0) {
- if (view.what <= first_p1_card)
+ if (view.what <= first_york_card)
ui.command.className = `card aow york c${view.what}`
else
ui.command.className = `card aow lancaster c${view.what}`
@@ -1059,7 +1035,7 @@ function update_locale(loc) {
if (set_has(view.pieces.exhausted, loc)) {
let cn
- if (is_p1_locale(loc))
+ if (is_york_locale(loc))
cn = "marker small exhausted lancaster"
else
cn = "marker small exhausted york"
@@ -1108,15 +1084,15 @@ function update_plan() {
}
}
if (is_action("plan", -1)) {
- ui.plan_action_pass_p1.classList.add("action")
- ui.plan_action_pass_p1.classList.remove("disabled")
- ui.plan_action_pass_p2.classList.add("action")
- ui.plan_action_pass_p2.classList.remove("disabled")
+ ui.plan_action_pass_york.classList.add("action")
+ ui.plan_action_pass_york.classList.remove("disabled")
+ ui.plan_action_pass_lancaster.classList.add("action")
+ ui.plan_action_pass_lancaster.classList.remove("disabled")
} else {
- ui.plan_action_pass_p1.classList.remove("action")
- ui.plan_action_pass_p1.classList.add("disabled")
- ui.plan_action_pass_p2.classList.remove("action")
- ui.plan_action_pass_p2.classList.add("disabled")
+ ui.plan_action_pass_york.classList.remove("action")
+ ui.plan_action_pass_york.classList.add("disabled")
+ ui.plan_action_pass_lancaster.classList.remove("action")
+ ui.plan_action_pass_lancaster.classList.add("disabled")
}
} else {
ui.plan_actions.classList.add("hide")
@@ -1127,7 +1103,7 @@ function update_plan() {
}
function update_cards() {
- for (let c = 0; c < 42; ++c) {
+ for (let c = 0; c < last_aow_card; ++c) {
let elt = ui.cards[c]
elt.classList.toggle("selected", c === view.what)
elt.classList.toggle("action", is_action("card", c))
@@ -1199,26 +1175,26 @@ function update_battle() {
}
function update_court() {
- let tcourt_hdr = (player === "Lancaster") ? ui.court2_header : ui.court1_header
- let rcourt_hdr = (player === "Lancaster") ? ui.court1_header : ui.court2_header
- tcourt_hdr.textContent = "York Lords"
- rcourt_hdr.textContent = "Lancaster Lords"
- let tcourt = (player === "Lancaster") ? ui.court2 : ui.court1
- let rcourt = (player === "Lancaster") ? ui.court1 : ui.court2
- tcourt.replaceChildren()
- rcourt.replaceChildren()
- for (let lord = 14; lord < 27; ++lord)
+ let ycourt_hdr = (player === "Lancaster") ? ui.court2_header : ui.court1_header
+ let lcourt_hdr = (player === "Lancaster") ? ui.court1_header : ui.court2_header
+ let ycourt = (player === "Lancaster") ? ui.court2 : ui.court1
+ let lcourt = (player === "Lancaster") ? ui.court1 : ui.court2
+ ycourt_hdr.textContent = "York Lords"
+ lcourt_hdr.textContent = "Lancaster Lords"
+ ycourt.replaceChildren()
+ lcourt.replaceChildren()
+ for (let lord = first_york_lord; lord <= last_york_lord; ++lord)
if (!is_lord_in_battle(lord) && is_lord_on_map(lord))
- tcourt.appendChild(ui.lord_mat[lord])
- for (let lord = 0; lord < 14; ++lord)
+ ycourt.appendChild(ui.lord_mat[lord])
+ for (let lord = first_lancaster_lord; lord <= last_lancaster_lord; ++lord)
if (!is_lord_in_battle(lord) && is_lord_on_map(lord))
- rcourt.appendChild(ui.lord_mat[lord])
+ lcourt.appendChild(ui.lord_mat[lord])
}
function on_update() {
restart_cache()
- for (let i = 0; i < 18; ++i) {
+ for (let i = 0; i <= 16; ++i) {
calendar_layout_cylinder[i] = []
calendar_layout_service[i] = []
}
@@ -1252,8 +1228,8 @@ function on_update() {
ui.end.style.left = (calendar_xy[view.end][0] - 52) + "px"
ui.end.style.top = (calendar_xy[view.end][1] + 100) + "px"
- ui.held1.textContent = `${view.held1} Held`
- ui.held2.textContent = `${view.held2} Held`
+ ui.held_york.textContent = `${view.held1} Held`
+ ui.held_lancaster.textContent = `${view.held2} Held`
update_plan()
update_cards()
@@ -1292,20 +1268,11 @@ function on_update() {
action_button("retreat", "Retreat")
action_button("remove", "Remove")
action_button("surrender", "Surrender")
- action_button("siegeworks", "Siegeworks")
- action_button("boats_x2", "Boats x2")
// Use all commands
- action_button("use_legate", "Legate")
- action_button("stonemasons", "Stonemasons")
- action_button("stone_kremlin", "Stone Kremlin")
action_button("tax", "Tax")
- action_button("siege", "Siege")
// Use one command
- action_button("smerdi", "Smerdi")
- action_button("storm", "Storm")
- action_button("sally", "Sally")
action_button("sail", "Sail")
action_button("ravage", "Ravage")
action_button("forage", "Forage")
@@ -1313,12 +1280,9 @@ function on_update() {
// Muster & Spoils
action_button("take_prov", "Provender")
- action_button("take_loot", "Loot")
action_button("take_coin", "Coin")
action_button("take_ship", "Ship")
- action_button("take_boat", "Boat")
action_button("take_cart", "Cart")
- action_button("take_sled", "Sled")
action_button("capability", "Capability")
// Events
@@ -1334,7 +1298,6 @@ function on_update() {
action_button("end_array", "End Array")
action_button("end_avoid_battle", "End Avoid Battle")
- action_button("end_call_to_arms", "End Call to Arms")
action_button("end_command", "End Command")
action_button("end_disband", "End Disband")
action_button("end_discard", "End Discard")
@@ -1345,11 +1308,8 @@ function on_update() {
action_button("end_pay", "End Pay")
action_button("end_plan", "End Plan")
action_button("end_plow_and_reap", "End Plow and Reap")
- action_button("end_ransom", "End Ransom")
action_button("end_remove", "End Remove")
- action_button("end_reposition", "End Reposition")
action_button("end_sack", "End Sack")
- action_button("end_sally", "End Sally")
action_button("end_setup", "End Setup")
action_button("end_spoils", "End Spoils")
action_button("end_supply", "End Supply")
@@ -1364,7 +1324,7 @@ function on_update() {
// === LOG ===
function on_focus_card_tip(c) {
- if (c <= first_p1_card)
+ if (c <= first_york_card)
ui.command.className = `card aow york york_${c}`
else
ui.command.className = `card aow lancaster lancaster_${c}`
@@ -1479,19 +1439,5 @@ function on_log(text) {
return p
}
-function pack1_get(word, n) {
- return (word >>> n) & 1
-}
-
-function pack2_get(word, n) {
- n = n << 1
- return (word >>> n) & 3
-}
-
-function pack4_get(word, n) {
- n = n << 2
- return (word >>> n) & 15
-}
-
build_map()
scroll_with_middle_mouse("main")