5.7 KiB
Guildhall
A co-op idle game for a handful of friends. Everyone is an adventurer in the same young frontier city: train skills Melvor-style (your character keeps working for up to a day while you're away), supply the city council, and get the city ready for bandit raids that arrive at times the game picks.
Alpha. One season, bandit raids plus two friendly events, six buildings.
What's in it
- Skills: mining, woodcutting, farming, hunting, fishing, smithing, masonry, cooking, leatherworking, combat, plus the scout's reconnaissance.
- Combat: fights cost HP (less when out-levelled or armoured); below half health you eat food from your bank, and out of food you retreat, losing nothing but the fight. HP recovers 25% an hour.
- Tiers: six RuneScape-style tiers (copper, iron, steel, mithril, adamant, rune at levels 1–75) of ore, trees (up to enchanted) and hides (deer, boar and bear from hunting; green, blue and red dragonhide from fighting dragons). Every metal tier has a sword, shield, helmet, greaves, cuirass and five tools; every leather tier a cap, trousers and jerkin. Higher bars need coal; each metal past copper needs a Smithy level (rune needs level 5, so a city). Gear needs a combat level to wear, tools a skill level to use.
- Classes: warrior, scout, artisan, pioneer. Every class can train every skill; a class makes some skills 20% faster and has one signature ability.
- Bank: 12 slots of 1,000 each to start; more than a stack of one item spills into another slot. When something doesn't fit it goes to the city stockpile (or the action stops, if you prefer). Raids never touch your bank. Players can give items to each other.
- City: each building collects its own fund, from players' banks or the city's stockpile and treasury. Funds are safe from raiders, and a funded building joins the construction queue by itself, then rises by labour: players working the site with Construction (more labour per action every 20 levels, faster with a hammer), plus a slow trickle from the townsfolk. Construction also saws planks, which higher building levels need, and builds fittings from them: one-off upgrades a building takes once it's high enough (shelving, a well pump, weapon racks, enchanted chests…). Population eats food, pays taxes, and fills the houses (empty homes draw settlers, half of them a day, so it slows as the houses fill, plus slow family growth); it promotes the settlement (hamlet, village at 40, town at 90, city at 150), which raises building level caps and gives everyone bank slots.
- Prayer: enemies drop bones; burying them gives prayer points and Prayer XP. Up to two prayers (eight unlock from level 1 to 60) boost each fight while their points last, and praying trains Prayer too. A Temple adds points per bone and lets players offer bones as devotion, which wards the city in the next raid.
- Herblore: farmers grow six herbs (guam to snapdragon); herblore brews them with a secondary into potions of 50 uses. One potion per skill at a time: faster gathering, a chance to keep materials or double ore, more prayer from bones, or combat power, armour and healing. An empty potion is replaced from the bank automatically.
- Events: raids are announced a day or two ahead. Reconnaissance from scouts, informants and the spymaster's guild narrows down when, how strong, and finally where their camp is, so fighters can sabotage it. Fighters can also drill the militia before any raid: a full drill takes as much work as full intel on that threat and adds one defence per townsperson. Favour never buys results directly: master builders, informants and drill sergeants double what players put in for a while, XP included. Each intel level takes more scouting than the last and more for a bigger band, and levels 2 and 3 only open about a day and eight hours before the raid arrives. Defeat kills or drives off people, loots the stockpile and treasury, and may damage a building. Damaged buildings stop working until repaired but keep their level. Every fight uses up arrows and breaks some of the swords and shields handed out (worst first), more in a close fight or a defeat. Now and then a dragon comes instead of bandits.
- Happenings: three more tracks run on their own cooldowns. Minor threats (wolves, a mine collapse, goblin thieves…) slow or block a skill until players deal with them; hardships (sickness, locusts, rot, storms, fire, harsh winters, drought) hit the stores and buildings, softened by a granary, lumber shed, well and water barrels; fortunes (visiting masters, harvests, festivals, nobles, mercenaries…) give windows of plenty. Weather changes every few hours, and a game season lasts a week.
Running
nix run . -- --dev --speed 60 # http://127.0.0.1:8098, time runs 60x
python3 -m unittest discover -s tests
Without --dev the server trusts the Remote-User header from the
authenticating proxy (Authelia). With --dev it reads a gh_user cookie
instead, so the dev bar can switch between players and fast-forward time.
The world is one JSON document in SQLite. --backup-to DIR writes a dated
snapshot and exits; the NixOS module runs it nightly when
services.guildhall.backup.directory is set.
Layout
game.py: content tables and the rules. Pure functions of(world, now).app.py: stdlib HTTP server, persistence and the background ticker.static/: the client (vanilla JS, no build step).
Credits
Icons are from game-icons.net by Lorc, Delapouite
and contributors, used under CC BY 3.0.
tools/build_icons.py fetches the glyphs the game uses into static/icons.svg.