compw00ter — Game Style & Engine Direction
Date: 2026-06-21 Status: Style locked; engine not yet built. Map layout + exact sprites deferred.
Locks the look and the shape of the game client + engine (separate from the PHP Hero Builder, which keeps its current functional admin UI).
Locked decisions
- Perspective: top-down, walk-around (Among Us-style). Heroes are pixel avatars moved with WASD around a house; travel time and positioning matter.
- Art era: 16-bit pixel art.
- Spatial rules: rooms are the incident types. Incidents spawn in the matching room; you walk there to use an ability. Vice stations (fridge/cupboard) are a deliberate detour — buff up, but leave the fires and risk your trait. Bosses (The Wife, The Martin) enter via the front door and drag players toward it.
- Art production: free/cheap 16-bit asset pack for the house + custom hero
avatars made with a character generator.
- Primary: LimeZu Modern Interiors (16×16, includes a character generator with top-down walk animations) + Modern Exteriors for garden/porch. Name-your-price, usable in any project, credits required.
- Fallbacks: Cainos Pixel Art Top Down – Basic (free); Kenney (CC0).
- Heroes: generate a distinct avatar per friend (outfit/hair/accessory keyed to their lore — Tim chef-ish, Eradicus with tech vibe, etc.).
Proposed tech (to confirm)
- Server (authoritative): Node.js on port 6767, fixed-tick world loop owning positions, collisions, incidents, and game state. WebSocket transport.
- Client (view + input): browser renders the map + sprites, sends movement/ability intent, interpolates other players. Recommended renderer: Phaser 3 — native support for Tiled tilemaps (LimeZu exports to Tiled), sprite-sheet animation, arcade movement, and a follow camera. (Alternative: vanilla HTML5 Canvas — lighter deps, more hand-rolled work. Recommendation: Phaser 3.)
- Map authoring: build the house in Tiled (
.tmj/JSON), load on both sides — client renders it, server reads collision + room polygons for incident placement. - Engine lives in
engine/(already holds the pre-builtbetter-sqlite3); it reads the hero roster from the shared SQLite DB the Hero Builder writes.
Deferred (their own steps)
- Floorplan / map layout — exact rooms, sizes, adjacencies, collision. (User wants this as a separate focused step.)
- Final sprite set & palette — generate the 10 hero avatars; pick the cohesive 16-bit palette/vibe (cozy SNES vs clean modern pixel).
- Renderer confirmation — Phaser 3 vs vanilla Canvas.
- Netcode detail — tick rate, snapshot/interpolation, client prediction (LAN makes this forgiving).
How this sits on the existing design
Earlier specs defined the co-op loop (incident queue, vices/traits, bosses) and the
roster. This spec re-expresses that loop spatially: the incident queue still exists,
but incidents now live in rooms and abilities are used by being present. The
docs/.../heroes-and-lore.md counter-web (Jim's astronomy vs The Martin, Eradicus spotting
b0n1, etc.) becomes physical — e.g. The Martin pulls toward the door; Jim's Universal
Wonder in the garden pulls the other way.