diff --git a/CLAUDE.md b/CLAUDE.md index 33dd38b..eae1d13 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -13,5 +13,6 @@ push, flake bump). Show the patch note lines with the summary of the change. - Every shipped change adds a line to `PATCH_NOTES` in `game.py` (`new` / `balance` / `fix`), in the same commit. Players read these: say what changed - for them, with numbers, not how the code changed. Same-day changes go under + for them, tersely, with numbers (e.g. "Strongbox: rent bank slots, 1,000 gold, + +35% each."), not how the code changed. No prose, no how-to. Same-day changes go under the top entry; a new day or release starts a new entry. diff --git a/game.py b/game.py index 86cd565..67ad401 100644 --- a/game.py +++ b/game.py @@ -6085,147 +6085,106 @@ ORDER_RECIPES, ORDER_RAW = _order_sources() PATCH_NOTES = [ {"date": "2026-10-26", "title": "Fittings", "notes": [ ("new", "Guild Roster shows player activity."), - ("new", "Make X: \"Make one\" now takes a count (1 by default, up to 1,000), then you go back to what you were doing."), - ("new", "Construction › Fittings: ✓ Fitted on the ones the town already has (✓ Paused while the building is damaged)."), + ("new", "Make X: \"Make one\" takes a count (1–1,000), then back to what you were doing."), + ("new", "Fittings: ✓ Fitted on ones the town has (✓ Paused while 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."), - ("new", "Fishing 50 also earns a second title: Master baiter."), - ("balance", "Boiling hide glue now uses the kitchen fire: while it's lit, glue costs no logs."), - ("fix", "Dungeons wait for the leader to press Start, so groups of 3 and 4 can form. No one can join once it starts."), - ("fix", "Combat page shows your health potion: drunk on its own, no need to equip. The other card now reads \"No combat potion\"."), - ("fix", "Combat page no longer jumps around: cast bars hold their space and the fight log stays 7 lines tall."), - ("new", "Enemy casts that can't be interrupted show a 🔒 and a grey bar. Stuns still stop them, except on bosses."), - ("fix", "Resting in a group: everyone heals at their own pace, so good food tops you up first. The pull still " - "waits for the slowest, and Pull now sends each in as healed as they really are."), - ("new", "DPS meter under the combat log: damage per second and total for each fighter, live. Shows the last fight while resting."), + ("new", "🏆 Achievements (under You): 127. Patterns, uniques, titles, emblems, looks, home. Tracks only, awards nothing."), + ("new", "Fishing 50: second title, Master baiter."), + ("balance", "Hide glue: no logs while the kitchen fire is lit."), + ("fix", "Dungeons wait for the leader's Start, so 3–4 can form. No joining after."), + ("fix", "Combat page shows your health potion (no equip needed). Other card: \"No combat potion\"."), + ("fix", "Combat page no longer jumps: cast bars keep their space, log stays 7 lines."), + ("new", "🔒 + grey bar: enemy cast can't be interrupted. Stuns still stop it, except on bosses."), + ("fix", "Group rest: everyone heals at their own pace. Pull waits for the slowest, sends each in at real HP."), + ("new", "DPS meter under the combat log: live DPS + total per fighter, last fight while resting."), ("new", "Improved raid UI"), - ("fix", "Bugfix: Combats started using \"Fight once\" can now be joined."), - ("fix", "Your buttons work until you're knocked out. A fight heading for a loss no longer locks you out early with \"You're out of this fight\" while you're still standing."), + ("fix", "Combats started using \"Fight once\" can now be joined."), + ("fix", "Buttons work until you're knocked out, even in a losing fight."), ]}, {"date": "2026-10-24", "title": "Dungeon loot", "notes": [ - ("new", "Masterwork patterns: every dungeon boss can drop one of 7 (15% from a mini-boss, 35% from the last boss, " - "everyone rolls their own). A crafter learns it once, then reforges the tier's piece plus 3 relics into a " - "masterwork: about 30% more power or armour, wearable at the dungeon's level. Sword, warhammer, staff, bow, " - "plate, jerkin and robe in every dungeon."), - ("new", "Relics: 50% from a mini-boss, 2 from every last boss."), - ("new", "One unique per dungeon from its last boss (8% each), worn as a ring, amulet or trinket, that changes an " - "ability: One-Eye's fang, Ogre's knuckle, Barrow king's pendant, Warlord's whistle, Forgeheart, Rimeglass " - "lens, Wyrmscale quiver. Abilities it changes get a ✦."), - ("new", "Choose when you eat between fights: below 25 / 50 / 75% of your HP, always, or never (the food slot, " - "under \"Eat below\"). Default 50%: above it you just rest, so a scratch doesn't cost food."), - ("new", "Tapping an enemy or ally switches at once, and your next press goes to them: tap, then interrupt, " - "without waiting."), - ("new", "HP bars show what was just lost, with each fighter's last hit or heal by their HP."), - ("new", "An interrupted cast stays on the enemy's bar for a moment, struck through: ✋ interrupted."), - ("balance", "Volley no longer takes arrows: abilities never cost anything. Wyrmscale quiver: Volley 40% harder " - "and Aimed Shot 25% faster."), - ("fix", "Work orders on phones: the item picker and reagent slots show names, and picking an item scrolls to " - "the amount, price and Post."), - ("fix", "Work orders show what a lit fire pays: its log is struck through instead of asked for, and the forge " - "pays a coal. Orders never needed that log from the crafter, they just asked for it."), + ("new", "Masterwork patterns: 7 per dungeon (sword, warhammer, staff, bow, plate, jerkin, robe). Mini-boss 15%, " + "last boss 35%, own roll each. Learn once; tier piece + 3 relics → masterwork: ~+30% power/armour."), + ("new", "Relics: mini-boss 50%, last boss 2."), + ("new", "Uniques: 1 per dungeon, last boss 8%. Ring, amulet or trinket that changes an ability (✦)."), + ("new", "Eat below 25 / 50 / 75%, always or never (food slot). Default 50%."), + ("new", "Tap a target: switches at once, next press goes to them."), + ("new", "HP bars show recent loss + each fighter's last hit or heal."), + ("new", "Interrupted casts linger struck through: ✋ interrupted."), + ("balance", "Volley uses no arrows; abilities are free. Wyrmscale quiver: Volley +40%, Aimed Shot 25% faster."), + ("fix", "Work orders on phones: names in picker and reagent slots; picking scrolls to Post."), + ("fix", "Work orders: logs a lit fire covers are struck through (forge: a coal), not asked for."), ]}, {"date": "2026-10-24", "title": "A dungeon in every area", "notes": [ - ("new", "Six more dungeons for 2–4, seven pulls each with two mini-bosses and a final boss: Goblin Warren " - "(Greenwood, combat 8, best with 3–4), Barrow Crypts (Sunken Barrows, 35), Bandit Stronghold (Frontier, 40), " - "The Deep Forge (Iron Hills, 50), Frozen Hold (Frostpeak, 65) and Dragon's Lair (Dragon's Spine, 80)."), - ("new", "Every boss has its own: curses to interrupt, shrieks, slams to brace for, adds at half health and an " - "enrage timer. As in the Watchtower, trash falls on auto and the bosses need your own hands."), - ("new", "Clearing pays 30–750 gold by area, plus a trophy and 2 reagents (Goblin Warren: gold only)."), + ("new", "6 dungeons (2–4 players, 7 pulls, 2 mini-bosses + boss): Goblin Warren (combat 8, best 3–4), " + "Barrow Crypts 35, Bandit Stronghold 40, The Deep Forge 50, Frozen Hold 65, Dragon's Lair 80."), + ("new", "Boss mechanics: curses to interrupt, shrieks, slams to brace, adds at 50%, enrage. Trash on auto, bosses by hand."), + ("new", "Clear: 30–750 gold by area + trophy + 2 reagents (Goblin Warren: gold only)."), ]}, {"date": "2026-10-24", "title": "Gold", "notes": [ - ("balance", "Raids hit about twice as hard and grow with the guild: they add half the combat power of everyone " - "active in the last 2 days. Pay the guards, drill, stand guard and sabotage the camp, or expect losses. " - "Dragons are 0.8× a raid but can't be sabotaged."), - ("balance", "Band size (small → huge) now compares the raid to what the city holds without preparing."), - ("new", "Guard wages: 60 gold a guard per threat, paid ahead into the barracks' wage chest, from your gold (earns " - "favour) or the treasury. Only paid guards stand, and only they hold the armoury's swords and shields. " - "Posts: 10 + 20 per barracks level, up to half the townsfolk. The council paid for the coming threat."), - ("balance", "Raid rewards: plunder 1× attack (was 2×); garrison XP 2× attack (was 5×), dragons 2.5× (was 6×)."), - ("new", "Strongbox: rent bank slots for gold, 1,000 for the first and +35% each after."), - ("new", "Caravan: comes once per threat, on the prep day, for 12h, with 4 of 10 wares and one look. Wares boost " - "your own work (trophy odds ×2 for 100 kills, +50% XP for 200 actions, …). One of each per visit; prices " - "rise with your level."), - ("new", "Banner, title and home: pick colours and an emblem on your character sheet. Titles are earned by reaching " - "50 or 99 in a skill, defending the city 5 times, slaying a dragon or beating 10 bosses, or bought at the " - "caravan. Homes go from Cottage (2,000) to Manor (75,000). All of these show on the roster and the board."), - ("new", "Monuments: gate banner 10,000, fountain 25,000, statues 50,000 (the biggest donor picks who). No favour; " - "donors' names are carved in."), + ("balance", "Raids ~2× harder, + ½ the combat power of everyone active in 2 days. Dragons 0.8×, no sabotage."), + ("balance", "Band size (small → huge): raid vs. unprepared city."), + ("new", "Guard wages: 60 gold/guard/threat into the barracks chest, from you (earns favour) or the treasury. " + "Only paid guards stand and hold armoury kit. Posts: 10 + 20/barracks level, max ½ townsfolk."), + ("balance", "Raid rewards: plunder 2× → 1× attack; garrison XP 5× → 2× (dragons 6× → 2.5×)."), + ("new", "Strongbox: rent bank slots, 1,000 gold, +35% each."), + ("new", "Caravan: once per threat, prep day, 12h. 4 of 10 wares + 1 look. Wares boost your own work; one of each per visit."), + ("new", "Banner, title, home (character sheet). Titles: skill 50/99, 5 defences, a dragon, 10 bosses, or caravan. " + "Homes: Cottage 2,000 → Manor 75,000."), + ("new", "Monuments: gate banner 10,000, fountain 25,000, statues 50,000 (top donor picks). No favour; donors carved in."), ]}, {"date": "2026-10-24", "title": "Active play and dungeons", "notes": [ - ("new", "Active play: tap AUTO on an ability to take it yourself (YOU), then press it (tap, or keys 1–9) on its " - "real cooldown instead of auto's 1.5×. Look away for 12s and it's back on auto."), - ("new", "Tap an enemy to fight it, or a friend to aim your heals at them."), - ("new", "Dungeon: Watchtower Depths (combat 20, 2–4 players), 8 pulls in order. Trash falls on auto; the Clay " - "colossus, Harpy matriarch and Watchtower ogre need your own hands: interrupt Stone Curse and Shriek, " - "brace for Ground Pound, beat the enrage timer. Start it and wait for others to join before the first pull."), - ("new", "A wipe repeats the pull, 3 on one pull ends the run. The run waits while anyone looks away for 90s. " - "The leader can pull early."), - ("new", "Dungeon rewards: every boss gives everyone their own loot (mini-bosses 5× their race's odds). " - "Clearing pays 100 gold, a trophy and 2 reagents each."), + ("new", "Active play: tap AUTO → YOU, press it (tap or 1–9) on its real cooldown, not auto's 1.5×. Idle 12s → auto."), + ("new", "Tap an enemy to target it, a friend to heal them."), + ("new", "Watchtower Depths (combat 20, 2–4 players): 8 pulls. Trash on auto, 3 bosses by hand: " + "interrupt Stone Curse and Shriek, brace for Ground Pound, beat the enrage."), + ("new", "Wipe repeats the pull; 3 on one pull ends the run. Pauses if anyone is away 90s. Leader can pull early."), + ("new", "Dungeon loot: own roll from every boss (mini-bosses 5× race odds). Clear: 100 gold, trophy, 2 reagents."), ]}, {"date": "2026-10-24", "title": "Livelier frontier", "notes": [ - ("balance", "A threat lands every 2 days (±2h), and the next one is rumoured as soon as the last lands. " - "Day 1: scout, drill, build. Day 2: the camp is found (intel III opens 24h out), with the exact hour."), - ("balance", "Sabotage: -1% raid strength per win (was -3%), still max 30%."), - ("balance", "Happenings ~3× as often: fortunes every 10–20h (was 36–72h), hardships 20–40h (was 48–96h), " - "minor threats 16–32h (was 48–96h)."), - ("balance", "Shorter happenings: 12h boosts → 6h; festival, sellswords, drought 24h → 12h; cold snap 48h → 24h; " - "sickness 72h → 36h; flood 36h → 18h."), - ("new", "Fortunes: storm-felled timber (woodcutting yield +50%), deer migration (hunting yield ×2), masons' guild " - "(construction 25% faster), artisans' fair (crafts 15% faster), a trapper's leads (next 15 recon doubled)."), - ("new", "Hardships: blight (farming yield ½), tremors (mining 30% slower), the tax collector (-15% treasury)."), - ("new", "Minor threats: spiders in the mine and smugglers skimming 1% treasury/h (fighters), a washed-out " - "bridge that blocks hunting (25 planks), hornets slowing woodcutting (herbalists smoke them out)."), + ("balance", "Threats every 2 days (±2h), next rumoured as one lands. Day 1: prepare. Day 2: camp found, intel III, exact hour."), + ("balance", "Sabotage: -3% → -1% per win, max 30%."), + ("balance", "Happenings ~3× as often: fortunes 36–72h → 10–20h, hardships 48–96h → 20–40h, minor threats 48–96h → 16–32h."), + ("balance", "Happenings ½ as long: boosts 12h → 6h, festival/sellswords/drought 24h → 12h, cold snap 48h → 24h, " + "sickness 72h → 36h, flood 36h → 18h."), + ("new", "Fortunes: timber (woodcutting +50%), deer migration (hunting ×2), masons (construction 25% faster), " + "artisans' fair (crafts 15% faster), trapper's leads (15 recon ×2)."), + ("new", "Hardships: blight (farming ½), tremors (mining 30% slower), tax collector (-15% treasury)."), + ("new", "Minor threats: mine spiders, smugglers (-1% treasury/h), washed-out bridge (25 planks), hornets (herbalists)."), ]}, {"date": "2026-10-24", "title": "Combat rework", "notes": [ - ("new", "Fights are against packs: as many enemies as there are of you, often one more (each 35% weaker). " - "A rare elite still comes alone."), - ("new", "Abilities: your weapon gives four (combat 1 / 15 / 30 / 45) and your trade one more. Sword and shield " - "tanks, warhammer hits hard and stuns, staff heals and holds, bow shoots from afar. All on auto for now: " - "hover them on the Combat page."), - ("new", "Enemies fight back: brutes wind up Heavy Slams, skirmishers lunge at whoever isn't tanking, casters " - "cast Hex Bolts (which can be interrupted), elites and bosses enrage, dragons breathe fire. Enemies attack " - "whoever has the most threat, so a sword and shield draws them away from the rest."), - ("new", "Food is only eaten resting between fights: you rest back to full before each one, and better food " - "rests you faster. No food just means longer rests."), - ("new", "Health potions I–VI (Herblore 1–75, the tier's herb and cooked fish): the one heal you take into a " - "fight, drunk once a fight under 35% HP."), - ("new", "Knocked out at 0 HP: you lose that fight and come round at 30% HP. Three in a row and you stop. " - "Retreating is gone."), - ("new", "Bosses and dragons are group fights (2+). Start one alone and you wait there for someone to join. " - "They grow with the group: +75% HP for each fighter."), - ("fix", "Abilities, enemy casts and fight statuses have proper icons instead of emoji."), - ("balance", "Enemies have 20% more HP for the same XP, since everyone has abilities now."), - ("balance", "Boss hits: area bosses 1.35 → 1.2× and dragons 1.5 → 1.9× their level's max hit, then ×1.3 " - "against a pair."), + ("new", "Packs: one enemy per player, often +1 (each 35% weaker). Elites come alone."), + ("new", "Abilities: 4 from your weapon (combat 1 / 15 / 30 / 45) + 1 from your trade. Hover on the Combat page."), + ("new", "Enemies fight back: slams, lunges, interruptible Hex Bolts, enrage, dragon fire. They hit whoever has most threat."), + ("new", "Food: eaten only resting between fights. Better food, faster rest."), + ("new", "Health potions I–VI (Herblore 1–75): drunk once a fight under 35% HP."), + ("new", "0 HP: knocked out, fight lost, back at 30%. 3 in a row and you stop. No more retreat."), + ("new", "Bosses and dragons: 2+ players, +75% HP per fighter."), + ("fix", "Proper icons for abilities, enemy casts and statuses."), + ("balance", "Enemies +20% HP, same XP."), + ("balance", "Boss hits: area bosses 1.35 → 1.2×, dragons 1.5 → 1.9× level max hit; ×1.3 vs a pair."), ]}, {"date": "2026-10-23", "title": "City needs", "notes": [ - ("new", "City needs are now indicated in profession menus."), + ("new", "City needs shown in profession menus."), ]}, {"date": "2026-10-22", "title": "Bosses", "notes": [ - ("new", "Bosses and dragons: everyone in the fight gets their own loot."), - ("balance", "Level requirements for area boss reduced to be area level +5."), + ("new", "Bosses and dragons: own loot for everyone."), + ("balance", "Area boss level requirement: area level +5."), ]}, {"date": "2026-10-21", "title": "Beta", "notes": [ - ("new", "Beta: completely meaningless milestone reached; every class now makes a decent amount of valuable contributions to the guild."), + ("new", "Beta: completely meaningless milestone reached; every class now contributes."), ("new", "Patch notes menu."), - ("new", "Firekeeping: tend the fire for your guild members' crafting stations. Builders get a bonus. Use tiers of wood to light " - "and maintain a fire, which saves resources on guild members' crafts of the same tier. For every craft completed while " - "the fire is lit, the Firekeeper gains 10% of the XP the craft gave the crafter, shared between all players keeping a " - "fire of that tier. Each player keeps their own \"pile\", which contributes an equal amount to the fire."), - ("new", "Work orders: anyone can provide reagents towards an incomplete work order and gets paid based on the value of the items provided."), - ("new", "Multiplayer Combat: tag into anyone's fight from the encounter card or the guild roster."), - ("balance", "Gear: combat requirement adjusted to match the tier of crafting required to make it."), - ("balance", "Combat XP reduced to keep it in line with professions. Eating now delays your next swing; eat higher tier food to reduce the impact."), - ("balance", "Construction workbench now also affects labour on building sites."), - ("balance", "Weapon trophies drop more often, since the town needs weapons too: 3% → 10% from races, 6% → 20% per weapon type from bosses."), - ("balance", "Hunting and Leatherworking tiers now unlock at 1 / 15 / 30 / 45 / 60 / 75, like every other trade. " - "Hunting: deer 8 → 1, boar 25 → 15, bears 40 → 30, elk 50 → 45, sabrecats 65 → 60, mammoths 80 → 75. " - "Leatherworking: tanning, armour and bows 5 levels lower from hard leather up."), - ("balance", "Hunting time and XP now match Fishing: deer 40s · 13 XP → 25s · 6 XP (same as birds), boar 50s · 30 → 35s · 15, " - "bears 60s · 48 → 45s · 28, elk 70s · 64 → 55s · 45, sabrecats 80s · 84 → 65s · 62, mammoths 90s · 108 → 80s · 85."), + ("new", "Firekeeping: a lit fire per wood tier saves resources on same-tier crafts. Keepers share 10% of their XP. Builders get a bonus."), + ("new", "Work orders: anyone can add reagents, paid by item value."), + ("new", "Multiplayer combat: tag into any fight from the encounter card or roster."), + ("balance", "Gear combat requirement matches its crafting tier."), + ("balance", "Combat XP lowered to match professions. Eating delays your next swing; better food, shorter delay."), + ("balance", "Construction workbench also speeds building-site labour."), + ("balance", "Weapon trophies: races 3% → 10%, bosses 6% → 20% per weapon type."), + ("balance", "Hunting and Leatherworking tiers: 1 / 15 / 30 / 45 / 60 / 75. Deer 8 → 1, boar 25 → 15, bears 40 → 30, " + "elk 50 → 45, sabrecats 65 → 60, mammoths 80 → 75. Leatherworking 5 lower from hard leather."), + ("balance", "Hunting time/XP match Fishing: deer 40s · 13 → 25s · 6, boar 50s · 30 → 35s · 15, bears 60s · 48 → 45s · 28, " + "elk 70s · 64 → 55s · 45, sabrecats 80s · 84 → 65s · 62, mammoths 90s · 108 → 80s · 85."), ]}, ]