HOUSE OF FARTS!
Session Minutes

HOUSE OF FARTS!Patch notes

HOUSE OF FARTS! is a small game with a real build history behind it. This page is that history, written for players rather than for a commit log: what changed, when, and why, in the order it actually landed. Nothing below is aspirational: every entry is work that is finished, merged and tested, and where something is finished but not yet switched on at houseoffarts.rip, the entry says so rather than quietly implying otherwise.

2026-09-10 — Stances, the signature melee, and four new rooms

The biggest single update to the game so far. Movement got three stances: stand, crouch, and prone, one keypress apart. It also got a hundred-point sprint tank that drains while you run and refills a second after you stop, and a two-charge dash on Left Ctrl. The dash does not spend the tank, but a spent charge only comes back while the tank is above a quarter full, at five seconds per charge, so sprinting everywhere still costs you the escape. Every remote player's stance now travels over the wire, so a player lying prone across the room actually renders prone for everyone else, not just for them.

Alongside the guns, every costume got a signature melee weapon: press V (or the SWING button on touch) to swing whatever your character happens to carry. That's one absurd prop each, a gold-plated 9-iron and a giant ice cream cone among them, every one with its own verb in the kill feed. It hits for 55 to the body or 110 to the head inside a 2.2-metre, 70-degree cone, on a 0.9-second cooldown. It is also available from the first second of a match, with no unlock and no cooldown timer to sit through. The server, not the client, checks the reach, the cooldown and the damage numbers on every claim, the same rule that already governs the guns.

Four new rooms opened at the same time, taking the arena count from two to six: THE FOAM CHAMBER, THE WINTER DACHA, THE SITUATION ROOM, and THE SUMMIT TERRACE, each with its own layout, cover and spawn ring. THE FOOTBALL's cooldown also dropped from twelve seconds to four, with a countdown ring on the HUD so the wait actually reads as a wait instead of a dead gun. This was a wire-protocol revision (v1.5), which is why it shipped as one coordinated update rather than in pieces. A v1.5 client talking to an old room server would get no stance information back, and every melee hit would be thrown out as a dart claiming more damage than any dart is allowed to do.

Status: live at houseoffarts.rip since 2026-09-11, covered by three new test suites. The client and the room server were swapped over together, as this revision required.

2026-09-10 — Menu screens became swappable modules

Under the hood, the title screen's menu stopped being one fixed piece of markup and became a pluggable module: a single owner (js/main.js) holds the game's state and hands every menu view the same snapshot and the same set of actions, and a view is free to build its screen however it wants from there. Three alternate title screens now exist alongside the default. Two of them are restyles, one built for density and one for bigger tap targets; the third rebuilds the screen outright as an arcade attract cabinet with a single-column mode picker. Which one a visitor sees is decided by a feature flag, resolved before the very first frame paints so nobody watches one menu repaint into another mid-visit. A visitor's running match is never re-skinned out from under them, and if the flag service is slow, offline, or returns something this build doesn't recognise, the game falls straight back to the default menu: never a blank screen, never a retry loop. The flag currently sends everybody to that default; turning an alternate on for a share of players is a dashboard change now, not a new release. Nothing about any of it touched how a match actually plays.

2026-09-08 — The whole front door got rebuilt, then stress-tested

The path from opening the game to actually playing a round was rebuilt end to end. Landing on the page now offers exactly two doors. PLAY drops you straight into whatever mode you played last, and JOIN A ROOM asks for nothing but a code. If the room server doesn't answer within six seconds, the game falls back to an instant offline match against bots instead of leaving you on a spinner. The old lobby and arena screens merged into one Room screen: your room code sits at the top with a one-tap COPY, all eight seats fill in live as people join, and the room's creator gets host controls for room size, bot-fill, and which arena to play, while everyone else sees the same information read-only. Every player also got a persistent guest handle, generated and stored in your own browser, with no account to make and no username to type. It sits next to your parody-politician costume everywhere a name appears: the scoreboard, the kill feed, the end-of-round standings.

Shared room links (/r/<code>) went out the same week, and a follow-up fix was needed almost immediately: the very first version served those links through a catch-all rewrite that broke every relative file reference on the page, so a link someone shared actually loaded as an unstyled, non-functional document. That's now fixed at the URL structure itself, and it's covered by a test that serves the site through a stand-in for the production web server and asserts that a shared room link loads with zero missing files. That is the exact assertion whose absence let the original bug through.

The redesign then went through an adversarial review that deliberately tried to break it, after every automated test was already passing. It found three real problems: a private room mode that wasn't actually generating a private code, so a stranger clicking PLAY could land in someone else's party; a "humans only" mode that could still seat a bot because it inherited its bot-fill setting from whoever happened to create the room; and a lone player against an empty server who could get stuck on a "starting soon" screen with no time limit. All three were fixed at the root. The server itself now mints and enforces private room codes, humans-only rooms can no longer inherit a bot-fill flag they didn't ask for, and a solo player is offered bots after eight seconds and dropped into an offline match by twelve if nobody else shows up. Nine smaller bugs came out of the same pass, including two places where text sent by another player could have reached the page unescaped. The lesson that stuck: the test suite covering this flow had only ever exercised a two-player private room, never the eight-player public matchmaking pool where the bugs actually lived, so two new test suites were written to fail first, on purpose, before the fixes went in.

2026-09-07 — The roster was rewritten, and advertising shipped in name only

Four of the eight parody-politician costumes were rewritten because their jokes leaned on where a person is from rather than on that specific person's own well-documented public persona. The game runs one rule for every character on the roster: if a line would work just as well on a different politician of the same nationality, it's a nationality joke wearing a costume, and it gets rewritten. That rule isn't a one-time cleanup; it's the standing bar every character on the roster is held to, then and now.

The same week, the advertising system shipped for the first time, ad-shaped but with no actual ad network behind it yet. Five framed surfaces went in, all of them on menu screens or built into the scenery: a "Telly" on the title screen, a briefing-room monitor on the pause screen, a press-conference frame on the end-of-round screen, a ticker along the bottom of the menus, and the news boards hung on the arena walls. Every one of them shows placeholder "house" cards, because there was nothing real to show yet. That distinction still holds today: the frames exist and are tested, but they carry house cards, not paid creative, and none of them is ever pasted over live play or onto the path to joining a room.

2026-09-06 to 2026-09-07 — Accounts, credits, and watching the server work

The game launched with no accounts and nothing persisted anywhere, on purpose: no signup, no database in the way of a match, nothing to remember you by. Player accounts and a credits ledger were then deliberately designed on top of that, with the original constraint carried forward rather than dropped. Account creation and credits are optional and never sit on the path to joining a match, and the server still keeps no database on the hot path. A guest can play a full round, right now, without ever seeing a signup screen, and that is not going to change. So far this is groundwork. The schema for it (players, linked identities, match history and a credits ledger) exists as database migrations in the repo, and the account screens that would let a player actually use any of it are still ahead.

The room server also started reporting live metrics the same week: player counts, match outcomes, room churn. They are collected by the same monitoring stack the rest of the infrastructure uses, and they have their own dashboard. It's not player-facing, but it's the reason "is the server actually healthy right now" has an honest answer instead of a guess.

Earlier

Before any of the above: the first playable version of the game, the Rust room server that still runs every online match today, team-based FOAM WARS 4v4 alongside free-for-all, dual-stick touch controls for phones, and the Docker and CI setup that every later update has shipped through.

THE FOAMMANDER
Signed and entered into the record
HOF
◀ Back to the foam
A silly little foam game ★ No politics, only darts ★ The Audacity