diff --git a/game.py b/game.py index 895a424..a9edc37 100644 --- a/game.py +++ b/game.py @@ -6080,6 +6080,9 @@ ORDER_RECIPES, ORDER_RAW = _order_sources() # What changed, shown on the Patch notes page. Newest first; every shipped change adds a # line here (new / balance / fix), and a new release a new entry on top. PATCH_NOTES = [ + {"date": "2026-10-26", "title": "Fittings", "notes": [ + ("new", "Construction โ€บ Fittings: โœ“ Fitted on the ones the town already has (โœ“ Paused while the building is damaged)."), + ]}, {"date": "2026-10-25", "title": "Titles", "notes": [ ("new", "๐Ÿ† Achievements (under You): 127 to collect. Masterwork patterns per dungeon (7 each), the 7 uniques, titles, " "boss emblems, caravan looks, home. Tap an icon for what it is and how to get it. Nothing is awarded there, it only keeps track."), diff --git a/static/app.js b/static/app.js index 7679ca7..30495a3 100644 --- a/static/app.js +++ b/static/app.js @@ -882,6 +882,15 @@ function needTag(id) { return n ? `๐Ÿ˜๏ธ ${fmt(n.qty)}` : ""; } +// A fitting the town already has: working, or paused while its building is damaged. +function fittedTag(id) { + const f = C.fittings.find((x) => x.id === id), b = f && S.city.buildings[f.building]; + if (!b?.fittings.includes(id)) return ""; + const where = `${C.buildings[f.building].icon} ${C.buildings[f.building].name}`; + return b.damaged ? `โœ“ Paused` + : `โœ“ Fitted`; +} + // --- skill pages ---------------------------------------------------------- function skillPage(id) { @@ -1695,7 +1704,7 @@ function actionCard(a) { return `
${icon}
-
${esc(a.name)} ${Object.keys(a.outputs).map(needTag).join("")}
+
${esc(a.name)} ${Object.keys(a.outputs).map((id) => needTag(id) + fittedTag(id)).join("")}
Level ${a.level} ยท ${dur(time)} ยท ${a.xp} XP
${Object.keys(a.inputs).length ? `` : ""}
${io ? `
${io}
` : ""}