summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--play.css13
-rw-r--r--play.js8
-rw-r--r--rules.ts83
3 files changed, 66 insertions, 38 deletions
diff --git a/play.css b/play.css
index 11eaa2a..992589b 100644
--- a/play.css
+++ b/play.css
@@ -23,13 +23,22 @@ body.Lancaster #event_header, body.Lancaster #hand_header, body.Lancaster #plan_
#log .h4 { text-decoration: underline; }
#log .h1 { background-color: #e5ce98 }
-#log .h2 { background-color: #d1cfa1 }
+#log .h2 { background-color: #e6e5be }
#log .h2.lancaster { background-color: #fad2d3 }
#log .h2.york { background-color: #d1ddf1 }
+#log .h1 { background-color: tan }
+#log .h2 { background-color: gainsboro }
+
+#log .ip { float: right; padding: 0 4px 0 0; text-indent: 0; color: dimgray }
+/*
+#log .ip::after { content: "IP" }
+*/
+
#log div { padding-left: 20px; text-indent: -12px; }
#log div.i { padding-left: 32px; text-indent: -12px; }
+#log div.ii { padding-left: 44px; text-indent: -12px; }
#log .card_tip { font-style: italic; }
#log .card_tip:hover { text-decoration: underline; }
@@ -283,7 +292,7 @@ body.Lancaster #plan_actions .york { display: none }
border-radius: 50% 50% 0 0;
}
-.locale.fortress { border-radius: 0% 0% 0 0 }
+.locale.fortress { border-radius: 25% 25% 0 0 }
.locale.sea { border-radius: 50% }
.locale.exile_box { border-radius: 0 0 50% 50% }
diff --git a/play.js b/play.js
index b605db3..d1a029e 100644
--- a/play.js
+++ b/play.js
@@ -525,6 +525,11 @@ function build_map() {
ay = y + 6
aw = w - 13
ah = h - 21
+ } else if (locale.type === "fortress") {
+ ax = x - 12
+ aw = w + 24
+ ay = y - 28
+ ah = h + 28
} else {
ax = x - 6
ay = y - 6
@@ -1668,6 +1673,9 @@ function on_log(text) {
} else if (text.match(/^\.h4/)) {
text = text.substring(4)
p.className = "h4"
+ } else if (text.match(/^\.ip/)) {
+ text = text.substring(4)
+ p.className = "ip"
}
p.innerHTML = text
diff --git a/rules.ts b/rules.ts
index 167fbe4..4b784f4 100644
--- a/rules.ts
+++ b/rules.ts
@@ -1951,6 +1951,13 @@ function is_lancaster_dominating_wales() {
// === 1.4 INFLUENCE ===
+function log_ip(n) {
+ if (n < 0)
+ log(".ip " + n)
+ else if (n > 0)
+ log(".ip +" + n)
+}
+
function reduce_influence(amt: number) {
if (game.active === YORK)
reduce_york_influence(amt)
@@ -1959,18 +1966,22 @@ function reduce_influence(amt: number) {
}
function reduce_york_influence(amt: number) {
+ log_ip(-amt)
game.influence = Math.max(-45, Math.min(45, game.influence + amt))
}
function increase_york_influence(amt: number) {
+ log_ip(amt)
game.influence = Math.max(-45, Math.min(45, game.influence - amt))
}
function reduce_lancaster_influence(amt: number) {
+ log_ip(-amt)
game.influence = Math.max(-45, Math.min(45, game.influence - amt))
}
function increase_lancaster_influence(amt: number) {
+ log_ip(amt)
game.influence = Math.max(-45, Math.min(45, game.influence + amt))
}
@@ -2181,9 +2192,9 @@ function discard_card_event(c: Card) {
function goto_levy_arts_of_war_first() {
if (game.active === YORK)
- log_h2("Arts of War - York")
+ log_h2_active("Arts of War - York")
else
- log_h2("Arts of War - Lancaster")
+ log_h2_active("Arts of War - Lancaster")
game.state = "levy_arts_of_war_first"
game.arts_of_war = draw_two_cards()
}
@@ -2242,9 +2253,9 @@ function end_levy_arts_of_war_first() {
function goto_levy_arts_of_war() {
if (game.active === YORK)
- log_h2("Arts of War - York")
+ log_h2_active("Arts of War - York")
else
- log_h2("Arts of War - Lancaster")
+ log_h2_active("Arts of War - Lancaster")
game.arts_of_war = draw_two_cards()
resume_levy_arts_of_war()
}
@@ -2499,14 +2510,14 @@ function can_pillage(loc: Locale) {
function do_pillage(lord: Lord) {
let here = get_lord_locale(lord)
- log(`Pillage at S${here}.`)
-
// Same values as Taxing.
let n = get_tax_amount(here, lord)
add_lord_assets(lord, COIN, n)
add_lord_assets(lord, PROV, n)
reduce_influence(4 * n)
+ log(`Pillage at S${here}.`)
+
add_exhausted_marker(here)
set_favour_enemy(here)
@@ -2601,6 +2612,7 @@ states.pay_lords = {
},
pay() {
reduce_influence(is_exile_box(get_lord_locale(game.who)) ? 2 : 1)
+ log("Pay L" + game.who)
set_lord_moved(game.who, 0)
game.who = NOBODY
},
@@ -2609,6 +2621,7 @@ states.pay_lords = {
for (let lord of all_friendly_lords()) {
if (is_lord_on_map(lord) && is_lord_unfed(lord)) {
reduce_influence(is_exile_box(get_lord_locale(lord)) ? 2 : 1)
+ log("Pay L" + lord)
set_lord_moved(lord, 0)
}
}
@@ -2643,7 +2656,6 @@ function end_pay_vassals() {
set_active_enemy()
if (game.active === P1) {
- log_h3("Muster Exiles")
goto_muster_exiles()
} else {
goto_pay_vassals()
@@ -2778,6 +2790,8 @@ function can_muster_exile(lord) {
function goto_muster_exiles() {
for (let lord of all_friendly_lords()) {
if (can_muster_exile(lord)) {
+ if (game.active === P1)
+ log_h2_common("Muster Exiles")
game.state = "muster_exiles"
return
}
@@ -2841,7 +2855,7 @@ states.muster_exiles = {
game.who = lord
},
locale(loc) {
- log(`Muster L${game.who} at S${loc}.`)
+ log(`L${game.who} to S${loc}.`)
muster_lord_in_exile(game.who, loc)
@@ -2932,9 +2946,9 @@ function goto_muster() {
game.levy_flags.loyalty_and_trust = 1
if (game.active === YORK)
- log_h2("Muster - York")
+ log_h2_active("Muster - York")
else
- log_h2("Muster - Lancaster")
+ log_h2_active("Muster - Lancaster")
game.state = "muster"
}
@@ -3677,13 +3691,13 @@ function goto_command_activation() {
}
if (game.command === NOBODY) {
- log_h2("Pass")
+ log_h2_active("Pass")
goto_command_activation()
} else if (!is_lord_on_map(game.command)) {
- log_h2(`L${game.command} - Pass`)
+ log_h2_active(`L${game.command} - Pass`)
goto_command_activation()
} else {
- log_h2(`L${game.command} at S${get_lord_locale(game.command)}`)
+ log_h2_active(`L${game.command} at S${get_lord_locale(game.command)}`)
goto_command()
}
}
@@ -5085,12 +5099,8 @@ states.march_confirm_intercept = {
// === 4.3.4 INTERCEPT ===
-function format_group() {
- let list = []
- for (let lord of game.group)
- if (lord !== game.command)
- list.push("L" + lord)
- return list.join(" and ")
+function format_intercept() {
+ return game.intercept.map(x => "L" + x).join(" and ")
}
function has_unmoving_friendly_lord(here) {
@@ -5214,9 +5224,9 @@ states.intercept = {
let roll = roll_die()
success = roll <= valour
if (success)
- log(`Intercept with ${format_group()} ${range(valour)}: B${roll}`)
+ log(`Intercept with ${format_intercept()} ${range(valour)}: B${roll}`)
else
- log(`Intercept with ${format_group()} ${range(valour)}: W${roll}`)
+ log(`Intercept with ${format_intercept()} ${range(valour)}: W${roll}`)
}
if (success) {
goto_intercept_march()
@@ -7469,8 +7479,7 @@ function action_spend_valour(lord: Lord, force: Force, vassal: Vassal = NOVASSAL
let protection = get_modified_protection(lord, force)
spend_valour(lord)
- logi(`Reroll:`)
- if (!assign_hit_roll(get_force_name(lord, force, vassal), protection, ""))
+ if (!assign_hit_roll("Reroll", protection, ">>"))
unrout_unit(lord, force, vassal)
game.vassal = NOVASSAL
}
@@ -7493,13 +7502,13 @@ function unrout_unit(lord: Lord, type: Force, v: Vassal = NOVASSAL) {
}
}
-function assign_hit_roll(what, prot, extra) {
+function assign_hit_roll(what, prot, indent) {
let die = roll_die()
if (die <= prot) {
- logi(`${what} ${range(prot)}: W${die}${extra}`)
+ log(`${indent}${what} ${range(prot)}: W${die}`)
return false
} else {
- logi(`${what} ${range(prot)}: B${die}${extra}`)
+ log(`${indent}${what} ${range(prot)}: B${die}`)
return true
}
}
@@ -7584,12 +7593,11 @@ function action_assign_hits(lord: Lord, type: Force, v=NOVASSAL) {
log(`L${lord}`)
}
let protection = get_modified_protection(lord, type)
- let extra = ""
game.battle.reroll = 0
game.vassal = NOVASSAL
- if (assign_hit_roll(get_force_name(lord, type, v), protection, extra)) {
+ if (assign_hit_roll(get_force_name(lord, type, v), protection, ">")) {
if (get_lord_remaining_valour(lord) > 0 || is_yeomen_of_the_crown_triggered(lord, type)) {
game.battle.reroll = 1
game.battle.force = type
@@ -8116,8 +8124,6 @@ function action_held_event_at_death_check(c: Card) {
states.death_check = {
inactive: "Death Check",
prompt() {
- // TODO: extra "roll" step or not?
-
if (game.who === NOBODY) {
view.prompt = `Death Check: Routed lords now die or disband.`
@@ -8840,7 +8846,7 @@ function tow(n: number, what: string): number {
function goto_tides_of_war() {
set_active(BOTH)
- log_h2("Tides of War")
+ log_h2_common("Tides of War")
let cities = count_favour(all_city_locales)
let towns = count_favour(all_town_locales)
@@ -8898,6 +8904,7 @@ function goto_tides_of_war() {
if (set_has(INFLUENCE_TURNS, current_turn()))
lanc += tow_influence(all_lancaster_lords)
+ increase_lancaster_influence(lanc)
log("Total: " + lanc)
log_h3("York")
@@ -8930,10 +8937,8 @@ function goto_tides_of_war() {
if (set_has(INFLUENCE_TURNS, current_turn()))
york += tow_influence(all_york_lords)
- log("Total: " + york)
-
- increase_lancaster_influence(lanc)
increase_york_influence(york)
+ log("Total: " + york)
if (eligible_charity())
goto_we_done_deeds_of_charity()
@@ -12464,7 +12469,7 @@ states.surprise_landing = {
function range(x) {
switch (x) {
case 0: return "0"
- case 1: return "1"
+ case 1: return "1-1"
case 2: return "1-2"
case 3: return "1-3"
case 4: return "1-4"
@@ -12505,7 +12510,7 @@ function log_h1(msg: string) {
log_br()
}
-function log_h2(msg: string) {
+function log_h2_active(msg: string) {
log_br()
if (game.active === YORK)
log(".h2y " + msg)
@@ -12516,6 +12521,12 @@ function log_h2(msg: string) {
log_br()
}
+function log_h2_common(msg: string) {
+ log_br()
+ log(".h2 " + msg)
+ log_br()
+}
+
function log_h3(msg: string) {
log_br()
log(".h3 " + msg)