diff --git a/game.py b/game.py
index 41ec031..6f6e6ce 100644
--- a/game.py
+++ b/game.py
@@ -1883,10 +1883,10 @@ SEASON_DAYS = 7
# `speed` multiplies action time (below 1 is faster), `yield` multiplies output,
# `food` multiplies what the townsfolk eat, `firewood` is logs per person per hour.
WEATHER = {
- "clear": {"name": "Clear skies", "icon": "๐ค๏ธ", "text": "Nothing out of the ordinary"},
+ "clear": {"name": "Clear skies", "icon": "๐ค๏ธ", "text": "No effect on work or the city"},
"rain": {"name": "Rain", "icon": "๐ง๏ธ", "speed": {"farming": 0.9}, "text": "Farming 10% faster"},
"heat": {"name": "Heat wave", "icon": "๐ฅต", "speed": {"farming": 0.85}, "food": 1.15,
- "text": "Farming 15% faster, but food spoils faster"},
+ "text": "Farming 15% faster, but food spoils: the city eats 15% more"},
"storm": {"name": "Storm", "icon": "โ๏ธ", "speed": {"fishing": 1.25}, "text": "Fishing 25% slower"},
"fog": {"name": "Fog", "icon": "๐ซ๏ธ", "speed": {"reconnaissance": 1.3, "hunting": 1.1},
"text": "Scouting 30% and hunting 10% slower"},
@@ -2609,5 +2609,5 @@ def content() -> dict:
"city_uses": {item: city_uses(item) for item in ITEMS},
"prayers": [{**prayer, "text": describe_prayer(prayer)} for prayer in PRAYERS], "max_prayers": MAX_PRAYERS,
"potion_charges": POTION_CHARGES, "problems": PROBLEMS, "fittings": list(FITTING_BY_ID.values()),
- "equip_slots": EQUIP_SLOTS, "eat_below": EAT_BELOW, "regen_per_hour": REGEN_PER_HOUR,
+ "equip_slots": EQUIP_SLOTS, "eat_below": EAT_BELOW, "class_speed": CLASS_SPEED, "regen_per_hour": REGEN_PER_HOUR,
}
diff --git a/static/app.js b/static/app.js
index 8774762..59ee241 100644
--- a/static/app.js
+++ b/static/app.js
@@ -217,8 +217,8 @@ function setMenu(open) {
document.documentElement.classList.toggle("menu-open", open);
}
-function nav(id, icon, label, meta = "", extra = "") {
- return ``;
+function nav(id, icon, label, meta = "", extra = "", tip = "") {
+ return ``;
}
function sidebar() {
@@ -230,16 +230,16 @@ function sidebar() {
${esc(me.name)}
${cls.icon} ${cls.name} ยท ${HEART} ${fmt(me.hp)}/${me.max_hp}
-
${COIN} ${fmt(me.gold)}${FAVOUR} ${fmt(me.favour)}
+
${COIN} ${fmt(me.gold)}${FAVOUR} ${fmt(me.favour)}
City
- ${nav("town", "๐๏ธ", "Town square", `${S.city.population}`)}
- ${nav("council", "๐", "Council & threats", "", raid ? `` : "")}
+ ${nav("town", "๐๏ธ", "Town square", `${S.city.population}`, "", `Population ${S.city.population}`)}
+ ${nav("council", "๐", "Council & threats", "", raid ? `` : "", raid ? "A threat is coming" : "")}
${nav("board", "๐ฌ", "Town board")}
- ${nav("roster", "๐ฅ", "Guild roster", `${S.players.length}`)}
+ ${nav("roster", "๐ฅ", "Guild roster", `${S.players.length}`, "", `${S.players.length} ${S.players.length === 1 ? "adventurer" : "adventurers"}`)}
You
- ${nav("character", cls.icon, "Character", `${skillOf("combat").icon} ${me.levels.combat}`)}
- ${nav("bank", "๐ฆ", "Bank", `${me.slots_used}/${me.slots}`)}`;
+ ${nav("character", cls.icon, "Character", `${skillOf("combat").icon} ${me.levels.combat}`, "", `Combat level ${me.levels.combat}`)}
+ ${nav("bank", "๐ฆ", "Bank", `${me.slots_used}/${me.slots}`, "", `${me.slots_used} of ${me.slots} bank slots used`)}`;
let group = null;
for (const skill of C.skills) {
if (skill.class && skill.class !== me.cls) continue;
@@ -283,7 +283,7 @@ function topbar() {
chips += `Idle${S.me.stopped ? ` ยท ${esc(S.me.stopped)}` : ""}`;
}
const w = S.happenings?.weather;
- if (w) chips += ``;
+ if (w) chips += ``;
if (S.upcoming) chips += ``;
return `${esc(title)}
${chips}`;
}
@@ -317,7 +317,7 @@ function itemChip(id, qty, have) {
// Progress towards a building cost: "have / need".
function costChip(icon, name, need, have) {
- return `${icon} ${fmt(have)} / ${fmt(need)}`;
+ return `${icon} ${fmt(have)} / ${fmt(need)}`;
}
// --- skill pages ----------------------------------------------------------
@@ -532,7 +532,7 @@ function bank() {
return parts;
});
let slots = stacks.map(([id, q]) => `
-