summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTor Andersson <tor@ccxvii.net>2022-12-18 16:56:07 +0100
committerTor Andersson <tor@ccxvii.net>2023-02-18 13:02:38 +0100
commita3782cd051b4a5c10c3a41062c7b4d6063bc6a60 (patch)
treeee90d4412b4f4a12df00347aa5b02fee86fd9a06
parent38831a6bc8ba83bd09fa09ba3a16da5cdfcac5c0 (diff)
downloadnevsky-a3782cd051b4a5c10c3a41062c7b4d6063bc6a60.tar.gz
Black and Baltic Sea Trade.
-rw-r--r--play.js12
-rw-r--r--rules.js89
2 files changed, 93 insertions, 8 deletions
diff --git a/play.js b/play.js
index 3d959a7..b616156 100644
--- a/play.js
+++ b/play.js
@@ -74,6 +74,11 @@ function on_click_veche_coin(evt) {
send_action('veche_coin')
}
+function on_click_veche(evt) {
+ if (evt.button === 0)
+ send_action('veche')
+}
+
const SUMMER = 0
const EARLY_WINTER = 1
const LATE_WINTER = 2
@@ -156,6 +161,10 @@ function pack4_get(word, n) {
return (word >>> n) & 15
}
+function is_veche_action() {
+ return !!(view.actions && view.actions.veche === 1)
+}
+
function is_lord_action(lord) {
return !!(view.actions && view.actions.lord && set_has(view.actions.lord, lord))
}
@@ -1259,6 +1268,8 @@ function on_update() {
update_plan()
update_cards()
+ ui.veche.classList.toggle("action", is_veche_action())
+
action_button("use_legate", "Legate")
action_button("stonemasons", "Stonemasons")
@@ -1487,6 +1498,7 @@ function build_map() {
})
document.getElementById("legate").addEventListener("mousedown", on_click_legate)
+ ui.veche.addEventListener("mousedown", on_click_veche)
for (let name in original_boxes) {
let x = round(original_boxes[name][0] * MAP_DPI / 300)
diff --git a/rules.js b/rules.js
index d6693c4..4f50b86 100644
--- a/rules.js
+++ b/rules.js
@@ -13,9 +13,6 @@
// CAPABILITIES
// TODO: Ransom (T)
// TODO: Ransom (R)
-// TODO: Crusade - free summer muster
-// TODO: Black Sea Trade
-// TODO: Baltic Sea Trade
// TODO: Hillforts
// TODO: BATTLE + STORM + SALLY
@@ -2223,9 +2220,9 @@ states.muster_capability_discard = {
function goto_levy_call_to_arms() {
if (game.active === TEUTONS)
- goto_papal_legate()
+ goto_teutonic_call_to_arms()
else
- goto_novgorod_veche()
+ goto_russian_call_to_arms()
}
function end_levy_call_to_arms() {
@@ -2248,14 +2245,15 @@ function goto_levy_discard_events() {
// === LEVY: CALL TO ARMS - PAPAL LEGATE ===
-function goto_papal_legate() {
+function goto_teutonic_call_to_arms() {
+ log_h2("Call to Arms - Papal Legate")
if (has_global_capability(AOW_TEUTONIC_WILLIAM_OF_MODENA)) {
- log_h2("Call to Arms - Papal Legate")
if (game.nevsky.legate === LEGATE_ARRIVED)
game.state = "papal_legate_arrives"
else
game.state = "papal_legate_active"
} else {
+ log("Skipped.")
end_levy_call_to_arms()
}
}
@@ -2366,9 +2364,84 @@ states.papal_legate_done = {
// === LEVY: CALL TO ARMS - NOVGOROD VECHE ===
+function count_all_teutonic_ships() {
+ let n = 0
+ for (let lord = first_p1_lord; lord <= last_p1_lord; ++lord)
+ if (is_lord_on_map())
+ n += count_lord_ships(lord)
+ return n
+}
+
+function count_all_russian_ships() {
+ let n = 0
+ for (let lord = first_p2_lord; lord <= last_p2_lord; ++lord)
+ if (is_lord_on_map())
+ n += count_lord_ships(lord)
+ return n
+}
+
+function goto_russian_call_to_arms() {
+ log_h2("Call to Arms - Novgorod Veche")
+ goto_black_sea_trade()
+}
+
+function goto_black_sea_trade() {
+ if (has_global_capability(AOW_RUSSIAN_BLACK_SEA_TRADE)) {
+ if (!has_conquered_marker(LOC_NOVGOROD) && !has_conquered_marker(LOC_LOVAT)) {
+ if (game.nevsky.veche_coin < 8) {
+ game.state = "black_sea_trade"
+ return
+ }
+ }
+ }
+ goto_baltic_sea_trade()
+}
+
+states.black_sea_trade = {
+ prompt() {
+ view.prompt = "Call to Arms: Black Sea Trade"
+ view.actions.veche = 1
+ },
+ veche() {
+ log("Black Sea Trade added 1 coin to Veche.")
+ game.nevsky.veche_coin += 1
+ goto_baltic_sea_trade()
+ },
+}
+
+function goto_baltic_sea_trade() {
+ if (has_global_capability(AOW_RUSSIAN_BALTIC_SEA_TRADE)) {
+ if (!has_conquered_marker(LOC_NOVGOROD) && !has_conquered_marker(LOC_NEVA)) {
+ if (count_all_teutonic_ships() <= count_all_russian_ships()) {
+ if (game.nevsky.veche_coin < 8) {
+ game.state = "baltic_sea_trade"
+ return
+ }
+ }
+ }
+ }
+ goto_novgorod_veche()
+}
+
+states.baltic_sea_trade = {
+ prompt() {
+ view.prompt = "Call to Arms: Baltic Sea Trade"
+ view.actions.veche = 1
+ },
+ veche() {
+ if (game.nevsky.veche_coin === 7) {
+ log("Baltic Sea Trade added 1 coin to Veche.")
+ game.nevsky.veche_coin += 1
+ } else {
+ log("Baltic Sea Trade added 2 coins to Veche.")
+ game.nevsky.veche_coin += 2
+ }
+ goto_novgorod_veche()
+ },
+}
+
function goto_novgorod_veche() {
if (game.nevsky.veche_vp > 0 || is_lord_ready(LORD_ALEKSANDR) || is_lord_ready(LORD_ANDREY)) {
- log_h2("Call to Arms - Novgorod Veche")
game.state = "novgorod_veche"
} else {
end_levy_call_to_arms()