# FLOORBREAKERS: AFTERHOURS — master development document Version **0.6.7 is being verified**: shared Arcade sponsor cards at setup/results and active gameplay reporting. Local previews, admin draft previews and connection tests are excluded. See `RELEASE-0.6.7.md`. The accepted 0.6.6 evidence below is preserved. Updated: 2026-09-06. Owner: David / Festly. Goal: work through the planned game sprints and record what is actually finished. ## Current build **Version 0.6.6 is published and verified.** Mr. WildFire has a six-panel storyboard and an illustrated four-move reference linked from the portal. Nosay's 64 revised drawings give him a slimmer build and longer limbs at his unchanged 6′9″ height. Art registration and the full 384-drawing integrity audit pass. The viewer keeps HUD labels above the correct fighters in both facings. All 236 source tests, the strict 52-file build and preparation of 53 release files pass; public verification passed 51 static SHA-256 comparisons and two PHP health checks. Local portal/mobile-layout and animation checks pass, and the public viewer confirms the corrected Facing Left HUD with both atlases ready. Physical-device, separate-network and owner-workflow acceptance remain open. The Arcade SDK request is separate future work. **The accepted 0.6.5 baseline is preserved.** It adds fighter thumbnails for local and online selection, defaults Player 2 to the computer and lets a desktop friend join through a button, F2 or controller Start. Joining during a solo match pauses it and preserves health and score; Use computer returns the seat to the CPU. Phone setup offers Solo, Training and Online, with no local Player 2 join. Online adds Create/Join sections and copyable invite links or codes. Essential combat subframes remain visible under Reduced motion while idle, victory and camera movement stay quiet. Portal copy is shorter, with collapsible Moves and Story sections. All 235 tests and the strict 51-file game build passed; preparation contains 52 public files. Public verification passed 50 static SHA-256 comparisons and two PHP health checks. Browser checks confirmed selection, desktop joining, phone-width layouts, landscape game mode and the invite flow. Physical-phone, controller hardware, separate-network and owner-activation acceptance remain open. **The accepted 0.6.4 baseline is preserved.** It adds Single player with Easy, Medium and Hard computer opponents using the existing fighters and moves. Difficulty changes reaction speed, defensive choices and attack pressure without stat boosts. It also keeps essential walking animated under Reduced motion and reverses the steps when backing away; decorative movement and camera effects stay reduced. All 219 tests pass, with zero failures or skips; strict TypeScript and the 49-file game build pass. Local browser checks confirm a complete Hard match, clean rematch, pause, mode switching and phone layouts. Public verification passed 48 static SHA-256 comparisons and two PHP health checks. An actual public Easy match at 844 × 390 confirmed CPU attacks, an 80-damage touch special and Pause, with no browser warnings or errors. **The prior 0.6.3 release is preserved**, with local mobile pause, reliable touch cleanup during display changes and larger pause/result controls. It retains the animated selection face-off, stage lighting and arcade callouts from 0.6.2. Corrected Tinkfu artwork and confirmed human height scales are included. It includes Game settings, mobile game mode, the animation viewer, an animated group title scene and sixth fighter Mr. WildFire. Its full suite passed 204 tests, and strict TypeScript plus the 48-file static build passed. Local mobile browser checks and public upload/startup checks passed. Owner activation and authenticated live settings publication remain pending. Browser and Hostinger access have been restored. The previous accepted graphics release is recorded in `AUDIT-0.5.1.md`. - Game settings has owner sign-in, draft saving, playable draft previews, publishing and restoration of up to 20 previous settings versions. It changes title, tagline, announcement, round length, available fighters and default selections. - Online rooms compare a snapshot of published settings together with game version and roster. A page keeps its settings until reload; ongoing matches do not adopt later edits. - On phones, starting a match gives the arena the full viewport. Seven attacks and an eight-direction pad provide touch input. Native fullscreen and landscape lock are attempted where supported; CSS game mode and a rotation prompt cover unsupported browsers. Exit returns to the page. - The in-arena Pause button is local-only. Portrait orientation pauses a local match, and returning to landscape requires Resume. Online matches keep running and show that explanation in the rotation prompt. Viewport, orientation and fullscreen changes clear held, captured and queued touch input; pause/result actions wrap with at least 44-pixel touch targets. - Local touch controls P1. Phones offer Solo and stationary-opponent Training; a second player uses Online on their own screen. Desktop local joining is explicit and pauses an active solo match. Easy, Medium and Hard continue to use ordinary fighter inputs without stat boosts. - The animation viewer preserves the existing action/facing/timing controls and adds a device sprite library. Imports support original 16-frame and expanded 64-frame RGBA PNG formats, frame cycling, light/dark backgrounds, rename and PNG export. Imports are saved in this browser only; public sprite replacement and new fighter authoring remain separate development work. - Mr. WildFire brings the Flashpoint projectile, Backdraft shoulder rush, Ember Rise anti-air palm and WildFire four-hit advancing super. The special/super poses use his mask; other poses show his ginger beard, backward cap and round shades. His confirmed height is 5′8″ (68 inches); his music remains to be confirmed, and story captions are proposed fiction. His six-panel storyboard and illustrated move reference are published in 0.6.6, with local browser review and public file verification complete. - The 4x animation pass expands each fighter from 16 to 64 drawings. Four distinct phases per pose, contact bursts, brief heavy-hit shake and eased camera movement stay outside the combat simulation. Compact eight-frame title strips keep the six-fighter hero from decoding all six full atlases. - The home page places all six fighters around the title using their registered art. Player and owner pages use shorter labels; concept notes and detailed counters are collapsed. - Current likeness correction: all 64 Tinkfu drawings and her procedural fallback now show her as a 5′8″ woman with a rounder, full build and she/her pronouns. Preserve that silhouette in all new art. Her original storyboard is earlier concept art. Mr. WildFire is also confirmed at 5′8″. Damage, timing and authored collision dimensions are unchanged. - Existing five-fighter settings remain valid and keep their selections. To add Mr. WildFire to a saved lineup, enable him in Game settings and publish. **The broader goal remains incomplete.** Full move-specific animation, physical-phone acceptance, separate-network playtests, server-backed sprite publishing, new fighter/stage authoring and the repeatable Rush content release remain open. This is a first owner-settings system, not a general game engine editor. Current validation is recorded in `AUDIT-CURRENT.md`. The actual PHP host service passes ten isolated integration groups, including the five-to-six-fighter upgrade and restore. Content/settings and advanced combat checks pass; all six kits produce the authored damage in 50 cases and guard correctly in 50 cases across both facings. Local browser checks confirm a playable 30-second draft, return to unsaved edits, an 80-damage touch special, fullscreen/fallback, exit cleanup and a device sprite import. Browser access is restored; the 0.6.2 selection screen also passed actual desktop and 390-pixel portrait checks with no overflow. The 0.6.3 public upload also passed 47 static SHA-256 comparisons, two PHP health checks and browser startup/390-pixel portrait checks. These are desktop browser and viewport checks; owner activation, authenticated live publication, physical-phone and WAN acceptance remain pending. [Play](https://fight.festly.shop/play/) · [Online](https://fight.festly.shop/play/online.html) · [Game settings](https://fight.festly.shop/play/admin.html) · [Animation viewer](https://fight.festly.shop/play/animations.html) Existing Roadie Rush and Roadie Rally projects are unchanged. Their later owner panels can reuse these workflows through their own configuration and authentication adapters. ## Sprint board Five-hour allocations are estimates, not time already spent. Completion is based on the evidence in each gate. | Sprint / phase | Status | Deliverable | Completion evidence | | --- | --- | --- | --- | | 0 — Concept and hosting | Complete | Five profiles, storyboards, choreography, dedicated Hostinger site | Prior release: `../outputs/dropclash-hostinger-v1/HOSTINGER-RELEASE-v1.md` | | 1 — First contact | Complete | Fixed-step combat, movement, attacks, guarding, damage, KO | 1,200-tick deterministic replay; frozen-input/state immutability; hit, miss, guard and KO checks; browser movement/signature input | | 2 — The DJs arrive | Complete | Nosay and Disko, reservoir arena, signatures and dance poses | Actual starter-content tests verify both signature facings and 80 damage; rendered desktop check confirms relative stature, duck hat, white shades, locs and tie-dye | | 3 — Complete the match | Complete | Selection, rounds, timer, rematch, fighter template, audio/settings | Three natural-health automated matches and exact clean rematches pass; template validates; browser 2–0 match, clean rematch, pause and muted cues verified | | 4 — Make it shareable | Released; broader compatibility QA open | Browser QA, defect fixes, Hostinger playable, release recovery | Static build passes; actual public 2–0 match and clean rematch pass; no browser errors; recovery files and manifest saved. Other browser engines and physical controllers still need checks | | 5 — Combat / starter art refinement | Complete for prototype; released 0.2.0 | Expanded starter kits, reaction animation and dance transitions | Full kits, meter, modes, counters, throws, motion inputs and bounded combos pass mechanical gates; prototype art render checks and public super smoke check pass | | 6 — Roster expansion | Complete for prototype; released 0.2.0 | Tinkfu, Stikman and Froggy content packages | Five full content packages validate against independent canon; 42 damage cases and 42 guard cases pass across both facings; all five selectable publicly | | 6B — Arcade identity and choreography | Complete for prototype; released 0.3.0 | New title, sharper text, richer movement for the whole cast | 62 checks pass, including 3,852 finite/immutable pose samples; frame-by-frame cast review and public combat/UI smoke check pass | | 7 — Network feasibility | Complete for prototype | Versioned input transport, checkpoint API and latency experiment | 71 combined checks pass. Two actual local WebRTC matches agree on final outcomes/hashes: manual keyboard 2–0 at tick 7,500 and explicit +120 ms outgoing input delay on each peer 2–0 at tick 2,278. These are local feasibility experiments, not separate-network acceptance | | 8 — Private online preview | Released preview 0.5.1; separate-network gate open | Private room codes, delay lockstep, disconnect handling and remote playtests | Public and local matches and PHP checks pass. Lifecycle/input audit fixes shipped in 8A; different-network acceptance remains open | | 8A — Online stabilization | Complete for prototype; released 0.4.1 | Connection deadlines, settings focus, ordered taps, interruption handling, complete setup and grounded results | 125 checks and strict build pass; full manual local match agrees beyond the old timeout; both additional local-control defects fixed; live PHP passes all six groups; public delayed match reaches verified 2–0; public local Reduced motion + super smoke passes | | 8B — Cel graphics refresh | First illustrated pass released 0.5.1; full animation open | Fuller fighter silhouettes, registered key poses, painted stage and closer framing | 80 transparent cels packaged with source/runtime hashes; safe asynchronous loading and calibrated normals; 133 checks and strict build pass. Representative browser contact/floor checks pass. Unique per-move clips and broad visual/balance review remain open | | 9 — Owner settings and content tools | Client released 0.6.3; owner activation pending | Owner settings, draft preview, publish/restore, mobile controls and device sprite imports | Ten PHP integration groups and local browser checks pass; physical-phone acceptance, server art publishing and new fighter/stage round-trip remain open | | 9A — Mr. WildFire | Released 0.6.3; broader art review pending | Sixth playable kit, special mask poses, fire effects and six-fighter title scene | Content/settings and combat gates pass, including 50 damage and 50 guard cases across the full roster; music and illustrated storyboard remain pending; height is confirmed at 5′8″ | | 9B — Animation expansion | Released 0.6.3; local checks pass | 384 fighter cels, contact effects, camera movement and 64-frame viewer support | All 384 unique RGBA cels pass integrity checks; 204 regressions and the strict 48-file build pass; uploaded art hashes and public startup verified | | 9C — Mobile match controls | Released 0.6.3; browser viewport checks pass | Local in-arena pause, portrait pause, display-change input cleanup and reachable overlay actions | Four new mobile regressions and actual 844 × 390 / 390 × 844 / 568 × 320 browser checks pass; public portrait menu also passes; physical-phone acceptance remains pending | | 9D — Single player and footwork | Released 0.6.4; local and public client checks pass | Easy/Medium/Hard computer opponents, retained local/online modes, walking under Reduced motion and reversed backpedal steps | 219 tests and strict 49-file build pass; local Hard match and mode/mobile checks pass; 48 public static hashes, two PHP health checks and public Easy/touch/Pause checks pass | | 9E — Fighter picks and player joining | Released 0.6.5; client checks pass | Local/online thumbnails, CPU-default second seat, desktop joining, mobile online entry, shareable room links and essential combat subframes | 235 tests and strict 51-file build pass; desktop and mobile-emulation checks pass; 50 public static hashes and two PHP health checks pass | | 9F — Nosay proportions and WildFire story | Released 0.6.6; client checks pass | Slimmer Nosay across 64 drawings at 81 inches; WildFire story and moves; viewer HUD follows facing | Art audit, 236 tests and strict 52-file build pass; 53 release files; 51 public static hashes and two PHP health checks; local/public viewer checks pass | | 10 — Repeatable Rush release | Planned | One arena and new fighters through the content process | Content validation, regression checks and recovery package | | Future — Arcade SDK | Requested by arcade coordination; separate from 0.6.6 | Scope and integration plan for the shared arcade SDK | Not implemented or included in this art release | ## Active implementation decisions - Independent TypeScript project with a static browser client and a small PHP room-introduction endpoint; no dependency on the other games' hosting services. - Combat uses 60 integer simulation ticks per second; rendering and audio do not decide combat outcomes. - First playable: desktop local versus, Nosay (6′9″, house) and Disko Klown / Cisco (5′4″, house and drum & bass), one stage, punch/kick and one signature each. - Version 0.2 expands the starter prototype to all five planned full kits. Art remains a procedural prototype; the original full-kit canon is retained in a portable project fixture. - Version 0.4 implements reliable ordered WebRTC input transport, build/roster compatibility checks, periodic state hashes and a validated source checkpoint API. The browser preview does not expose checkpoint restoration, automatic resync or rollback. - Room introductions use short-lived private PHP files outside the web document root. Match inputs and combat state travel directly over the data channel. This release has no persistent inbound WebSocket server or TURN relay. - Normal online rooms are manual. The automated connection test runs only when both peers explicitly check the test option; it supplies ordinary inputs without changing health or damage. Extra outgoing-delay choices are diagnostics, not measured real-world network conditions. - A later engine port will reuse the versioned definitions and replay/transport contracts. The port itself remains unimplemented; see the migration path below. - No upgrade, VPS purchase or background automation is being created by this work. ## Work log and evidence ### Version 0.6.6 — Nosay proportions and WildFire story, published and verified - Added a six-panel Mr. WildFire storyboard, an illustrated reference for Flashpoint, Backdraft, Ember Rise and WildFire, and portal links. His playable kit and confirmed 5′8″ height are preserved. - Redrew all 64 Nosay cells with a slimmer build and longer arms and legs. His confirmed 81-inch stature and 300-pixel neutral art reference remain unchanged. Local visual review covered every cell, its root and contact proof; 16 enclosed white gaps were cleaned and eight fist/toe landmarks were recalibrated. - The integrity audit passes all 384 drawings across six fighters, including 64 unique cells per fighter, alpha, gutters, source hashes and unchanged original v1 atlases. Nosay's final atlas is 4,205,081 bytes, SHA-256 `27eaf9a30c48f2e4e98dcdbf2021b07792416d138c74d6adfd48fb7c260f2fbd`. - Keep the accepted 0.6.5 selection, computer opponent, desktop joining and mobile online flow. The Arcade SDK request is future work outside this release. - Final verification passed all 236 source tests, strict TypeScript and the 52-file game build, with 53 release files prepared. The complete public verifier passed 51 static SHA-256 comparisons and two PHP health checks, including the viewer correction. Earlier staging verified 44 static assets, two PHP responses and seven unchanged 0.6.5 entry pages before publication. - Local browser checks confirm the WildFire illustration at 1,536 × 1,024 and both Story/Moves links. At 390 pixels, there is no portal overflow; the image fits within 322 pixels and the illustrated-moves link is 48.4 pixels high. The animation viewer shows Nosay's walk advancing from frame 9 to 13; mirrored punch contact is frame 29 at tick 7, with the atlas ready and no alert. The rendered art was visually reviewed. - The viewer correction aligns HUD labels with the fighters in both facings while keeping health, meter and score controls attached to the selected fighter. Its actual-inline-viewer regression passes all six fighters in both facings. Local browser flip checks pass; the public Facing Left screenshot shows Disko and his HUD left, Nosay and his HUD right, frame 1 of 64, both RGBA atlases ready and no alert. - Accepted 0.6.5 evidence remains unchanged: 235 tests, strict 51-file game build, 52 release files, 50 public static hashes and two PHP health checks passed. Version 0.6.6 client acceptance is complete; physical-device, separate-network and owner-workflow acceptance remain open. ### Version 0.6.5 — fighter picks and player joining, published and verified - Shared thumbnail controls use the compact intro strips and expose each selected fighter. Host roster changes and room locks update the available cards; full gameplay atlases are not required for these thumbnails. - The second seat defaults to the computer. On desktop, Join, F2 or controller Start claims it; joining during a solo match pauses without resetting health or score. Use computer returns that seat to the CPU. - Phone setup offers Solo, Training and Online, with no local Player 2 join. Online uses one player per device and retains its full-viewport touch arena. - Create and Join room sections use larger controls. Players can copy a room link or code, with visible-code fallback if clipboard access fails. Invite links fill a validated code without starting a connection automatically. - Reduced motion preserves essential authored combat subframes while holding idle, victory and camera motion quiet. Portal copy is shorter, with collapsible Moves and Story sections. This update does not add new damage rules, matchmaking, TURN or rollback. - All 235 tests and the strict 51-file game build passed; release preparation contains 52 public files. Before replacing entry pages, staging verified 43 static assets, two PHP health responses and the seven old entry pages. Complete public verification passed 50 static SHA-256 comparisons and two PHP health checks. - Actual desktop browser checks confirmed Tinkfu/Mr. WildFire selection and their 5′8″ labels, the default CPU and live Player 2 joining. Joining paused with 1,000 health and the zero-round score preserved. Mobile emulation at 390 × 844 and 320 × 568 had no overflow and all 12 local thumbnail targets measured at least 52 × 107 pixels. Local Player 2 joining was hidden. Tinkfu solo game mode filled the 844 × 390 landscape viewport exactly. - Online mobile emulation at 390 pixels showed six 106 × 104 cards, Create/Join controls at least 44 pixels high, a 16-pixel code input and no overflow. Invite ABCD1234EF filled the code without automatically joining, and Mr. WildFire selection worked. The public portal passed desktop visual review and a 320-pixel layout check; 45-pixel navigation links, collapsible sections, Tinkfu's corrected height and a 1,536-pixel concept image were verified. - Accepted 0.6.4 evidence and recovery artifacts are preserved. These checks cover the released client and device emulation; physical-phone, controller hardware, separate-network and owner-activation acceptance remain open. Further art requests are separate work for 0.6.6. ### Version 0.6.4 — single player and footwork, published and verified - `src/cpu.ts` uses delayed match observations and returns normal movement and attack buttons. The computer uses the selected fighter's existing kit; difficulty tunes decisions rather than combat stats. - Fighter selection adds Single player, Two players and Training modes plus Easy, Medium and Hard difficulty. The separate Training shortcut stays available, and Online remains a separate room-based mode. - Walking animation remains visible under Reduced motion, with backward steps played in reverse. Ambient effects and camera movement retain their reduced setting. - Full suite: 219 passed, zero failed or skipped. Strict TypeScript and the 49-file game build pass; preparation adds the portal for 50 public files. Walking regressions check all eight walk cells across the roster, including Reduced motion and backward steps. - Actual browser checks found no horizontal overflow at 390 × 844 or 320 × 568; all six setup controls (four selects, Start and Training) were at least 44 pixels high. Hard solo play filled a 667 × 375 viewport exactly. The computer attacked Nosay down to 246 health after 15 seconds, switched Disko to DNB and completed a normal 0–2 COMPUTER WINS match. Rematch reset health to 1,000 and rounds to 0–0 while retaining Hard. Pause, Exit and switching back to Two players worked; the P2 label returned and difficulty hid. Reduced motion was enabled during the CPU match. - Public verification passed 48 static SHA-256 comparisons and two PHP health checks. The public build opened in Single player with Medium selected and Reduced motion enabled. Selecting Easy and starting a match filled an 844 × 390 viewport exactly. The CPU attacked Nosay; the player's touch Special 1 reduced Disko from 1,000 to 920 health, and Pause worked. The browser reported zero warnings or errors. - Earlier versioned files and recovery artifacts remain preserved. Physical-phone acceptance, competitive balance, separate-network play, owner activation and authenticated live settings publication remain open. ### Version 0.6.3 — mobile match controls - Added an in-arena Pause button for local matches. Turning to portrait pauses local play; returning to landscape waits for explicit Resume. Online has no pause control and tells players the match keeps running while the phone is upright. - Viewport resize, visual viewport resize, orientation and fullscreen changes release captured pointers and clear held and queued touch input. Pause/result actions wrap and retain at least 44-pixel touch targets; toolbar placement keeps those actions reachable. - Full suite: 204 tests pass, including four new mobile regressions. Strict TypeScript and the 48-file build pass. Local 0.6.3 mobile browser checks and public upload/startup verification pass. - Actual local 0.6.3 browser checks: CSS game mode filled an 844 × 390 viewport exactly, with the rendered scene visually checked in a browser screenshot. Pause and Resume worked. Rotating to 390 × 844 showed the rotation prompt and paused the local match; turning back to 568 × 320 left it paused until Resume. All 15 touch controls were at least 44 pixels and wholly inside the 568 × 320 viewport; document scrollWidth was 568, with no horizontal overflow. Pressing Nosay’s on-screen Special 1 in Training reduced Disko from 1,000 to 920 health. These are desktop browser viewport checks, not physical-device acceptance. - The earlier browser account-usage interruption is resolved. Actual browser desktop and 390-pixel portrait checks of the 0.6.2 selection screen found no overflow, and Hostinger file-manager access is restored. Public upload and startup are now verified; prior release evidence below retains its original counts and status. - Public 0.6.3 verification, 2026-09-06: `node scripts/verify-release.mjs https://fight.festly.shop/` passed 47 static SHA-256 comparisons and two PHP health checks. The public `/play/` page started without browser errors or warnings and loaded built-in settings without an error notice. At 390 × 844, viewport and document scroll widths were both 390 pixels; the enabled Play/Training buttons were 48 pixels high, and the large selected-fighter portraits were visually verified. At 667 × 375, public game mode filled the viewport at (0, 0); Nosay’s real on-screen Special 1 reduced Disko from 1,000 to 920 health. Public Pause and Exit worked, with no browser warnings or errors. This confirms the uploaded client, public startup and the tested mobile match controls; owner activation, authenticated live settings publication, physical-phone acceptance and separate-network play remain unverified. ### Version 0.6.2 — arcade presentation - Opened the selection overlay into a large animated face-off: two full fighters, a bold VS, colored light rings and clearer start controls. Portraits use eight-frame intro strips with confirmed height ratios. The stage-only background avoids duplicate game art and HUD. - Added moving light beams, flecks, floor reflections and foreground accents. Stronger health/super bars and combo badges support large ROUND, FIGHT!, K.O., time-up and winner callouts. Unknown profile placeholders are omitted from the HUD. - Full suite: 200 tests pass, with seven new tests for the selection and arena presentation. Native Canvas previews execute actual drawing source; final browser/CSS acceptance remains pending. Damage, timing, collisions and camera limits are unchanged. - Portrait phone menus have room for the art and controls; short native-fullscreen menus can scroll. Starting a mobile match keeps the existing full-viewport experience. Reduced motion disables selection transitions and decorative movement. ### Version 0.6.1 — likeness and height correction - Replaced Tinkfu’s 64 cels with a consistent rounder woman’s silhouette, preserving her glasses, bun, tattoos and black clothing. Re-registered roots, jump floor and all contact tips, and cleaned enclosed background gaps. - Confirmed Mr. WildFire at 68 inches. Neutral art references are now exactly 300 pixels before applying each human’s confirmed height. The poster shares height ratios within its depth planes, and a common-floor art preview makes the stature differences visible. - Full suite: 193 tests pass. The 384-cel integrity gate passes and preserves every original 16-frame sheet. Five title-scene regressions cover desktop/mobile proportions and intro/reduced-motion behavior. Damage, timings and collision dimensions are unchanged. - Build and recovery packages remain local candidates; final browser/public verification is pending. Existing 0.6.0 archives and release notes are retained. ### Version 0.6.0 — release candidate - Added one-owner settings with draft save, same-tab game preview, reviewed publication and restoration. Match settings are fixed until reload; online peers must agree on build, settings and roster. Preview never publishes, and publishing requires a saved draft. - Kept the renderer animation fixture and exposed it at `play/animations.html`. Its separate device library imports, cycles, renames and exports registered PNG sheets. It accepts up to ten sheets, 8 MiB each and 64 MiB total. Saving here does not publish artwork or create a playable fighter. - Added mobile arena mode, touch controls and exit cleanup. Local touch is P1; mobile versus uses the first controller for P2. Training has a stationary opponent. Physical devices and controllers still need testing. - Added Mr. WildFire without changing old published lineups. Gameplay uses existing projectile, rush and multi-hit contracts; visual fire has no damage-over-time effect. Confirmed appearance and unknown profile fields are kept separate from proposed story fiction. - Recovery tooling checks each candidate manifest hash and includes all six original portal images in a complete playable ZIP. A separate source ZIP uses explicit code/generated-art allowlists. Owner secrets, sessions/history, raw user photos, dependency folders, QA output and earlier archives are excluded. Run `node scripts/archive-release.mjs --check` without writes; use `--write` after local candidate checks. Archives do not establish public acceptance. Archive files are never overwritten. - Final public 0.6.0 checks remain pending after automatic approval review blocked the browser test on an account usage limit. Local source/playable packaging follows the passing build. Earlier release evidence below is historical and retains the counts and scope of those releases. ### Sprint 8B — illustrated pass and image delivery - Built-in image generation produced five source pose sheets and the reservoir painting; original prompts and drawings remain in `content/art/`. - With the user's explicit approval, `scripts/package-cel-art.py` removed baked checkerboards and packaged all 80 silhouettes. Every cel has transparent padding and a fixed (224,416) pivot in a 512×448 cell. Each atlas is 2048×1792. All source hashes remain unchanged. - Added the stage/atlas loader, semantic cel timing, fixed view for Reduced motion, closer normal camera, crouched guard art and render-only normal-contact calibration. Neither image loading nor camera/art geometry changes combat state. - Added a local `review/cel-review.html` fixture for action phase, facing, mode, low guard, hitbox, lift and root inspection. It is excluded from public files. - Tested late/failed/corrupt image fallback, exact layout, mirrored strips, all ten normal contact landmarks in both facing/camera modes, world/HUD separation and state immutability. Full suite: 133 checks. - Fixed actual Hostinger CDN resizing and used fresh 0.5.1 filenames to avoid existing browser caches. Keep image rewriting disabled for this game's exact-layout atlas assets. - Public 0.5.1 Stikman/Tinkfu automated set with both peers choosing +50ms outgoing input delay completed 2–0 at tick 2,114. Both verified final hash `8965979cb955fa5a` and periodic tick 2,040; both error logs were empty. Final health/meter: Stikman 825/100, Tinkfu 0/92. Waits 0/0. Same-computer evidence only; no WAN/real-loss claim. ### 2026-09-06 — implementation started - Re-read the audited sprint plan and current roster design from disk. - Confirmed the existing root game has unrelated working changes; created a separate `dropclash/` project. - Created portable fighter, move, input, projectile and match state contracts in `src/model.ts`. - Started combat, rendering and content work in parallel with separate file ownership. ### Sprint 1 — combat core verified - `src/combat.ts` is a pure simulation with no browser, audio or clock dependencies. A new state is returned each tick. - Implemented move startup, active and recovery timing; per-attack contact; mirrored hitboxes; hold-away guard; crouch guard for lows; zero chip damage; hit/block stun; pushback; jumping; stage bounds and airborne side swaps. - Implemented one projectile per owner, finite lifetime, swept collision, and startup interruption. Both players' contacts are resolved together for trades and double KOs. - First to two wins, time-up health comparison, tied round replay, fresh rounds and full reset are implemented. - `tests/combat.test.ts`: 21 checks pass, including 1,200 recorded ticks, a 900-tick shipped-content replay under different render groupings, both facings and round cleanup. ### Sprint 2 — first DJs and arena verified - `src/renderer.ts` draws the reservoir stage, decks, lighting truss, speakers, mountain/water backdrop and dancing crowd. - Procedural articulated poses cover idle groove, walk, crouch, jump, punch, kick, special, guard, hurt, KO and victory. These are prototype animation, not finished sprite art. - Nosay and Disko use the confirmed 81:64 stature ratio. Nosay has the duck cap, white shades, beard, chain and black clothing; Disko has locs, facial hair and a tie-dye shirt. - Starter signatures are Nosay's Four on the Floor and Disko's HOUSE Pulse Check: one mid projectile and 80 damage each. Disko's DNB switch and both full kits remain later work. - Browser screenshot inspection confirmed the stage, fighters, HUD and projectile rings. Fixed a 16× projectile drawing-scale mismatch and a persistent DROP banner before this check. ### Sprint 3 — match and content integration - `src/main.ts` provides fighter selection, same-screen versus, stationary-partner warm-up, pause/resume, results/rematch, fullscreen and optional original synthesized sound. - Keyboard taps are retained until the next simulation tick; blur/hidden-tab pause clears held input. Controller assignments now retain their slots across disconnects instead of switching players. - `src/content.ts` validates bounded fighter/move definitions. `content/fighter-template.json` registers a fictional third fighter without engine changes; it intentionally reuses prototype art. - `FIGHTER-WORKFLOW.md` records intake, art states, move authoring, validation, matchup review and Rush release steps. - `tests/content.test.ts`: seven checks pass. `tests/match-flow.test.ts`: two checks pass, covering three consecutive natural-health matches (1,802 ticks each), reversed selection and a mirror match. All rematches equal a pristine new match. - Combined command: `node --experimental-strip-types --test dropclash/tests/*.test.ts` — 30 passed, zero failed. Tests drive normal inputs, with no health edits in the full-match gate. - Local browser showed a keyboard-triggered 80-damage projectile with sound off, preserved time/health while paused, then awarded the round and reset health for round two. - The browser match completed 2–0 through normal inputs and time-up. Run It Back restored both fighters to 1,000 HP, zero round wins and 60 seconds. Sound toggled on/off with no browser errors; muted gameplay retained health, time, hit, round and result cues. - A 390px viewport check found a setup overflow caused by aspect-ratio minimum sizing. After explicitly constraining the arena width, the document fits and both start buttons remain inside the screen. This is a layout check, not a claim that touch fighting is supported. ## Known limits / remaining checks - Six fighter kits, motion commands and supers are published in 0.6.3. The current art uses shared key poses across moves. Full move-specific sprite animation, competitive balance and story mode remain open. - Keyboard, local gamepad mappings and local/online touch controls are implemented. Physical controllers, multitouch comfort and phone fullscreen/orientation behavior still need testing. - Local browser verification is on Chromium through the Codex browser. Independent Firefox/Safari and physical-device testing are still outstanding; do not infer compatibility from the TypeScript build. - Online room/client code, live PHP operation, a complete public HTTPS match and two earlier local WebRTC matches are verified in 0.4.0. Real network jitter/loss experiments and separate-network acceptance remain open. Same-computer browser clients do not establish different-network readiness. - Online input supports keyboard and the player's own touch controls; shared combat code interprets classic motion inputs and shortcuts. Online gamepad routing is not implemented. Matches cannot pause; leave the room to stop and create a fresh room to reconnect or play another set. A hidden or slow tab can stall both simulations. There is no TURN relay or rollback. - Checkpoint export/restore is a source API with strict validation and explicit coordination requirements; no browser resume button or automatic resync is implemented. The owner panel edits fixed settings and the viewer saves device-only review art. New fighter/stage authoring, public sprite publishing, a repeatable Rush release and later engine migration remain open. ### Sprint 4 — first public playable released - Uploaded ten static client/log files to the new Hostinger `public_html/play/` folder. The original concept images were preserved. - Added Play and Development Log links to the concept guide's header after the playable loaded successfully. - Verified a fresh public HTTPS load, visible fighter selection, a complete normal-input match ending 2–0 and Run It Back restoring both fighters to 1,000 HP, zero wins and 60 seconds. - Public browser error-log check returned no entries. Local and public builds use the same compiled combat/client assets. - `RELEASE-0.1.0.md` records release evidence. `releases/0.1.0/` stores the uploaded files and SHA-256 recovery manifest; the earlier concept-only package is preserved separately. - The first playable is shareable now. Cross-engine browser coverage and physical gamepad checks remain explicitly open, along with the later development phases. Publishing this release does not complete the overall goal. ## How to follow along This file is the master record. `Complete` means a deliverable was implemented and its relevant checks passed. `In progress` means work exists but its gate is not yet proven. Tests, release URLs and remaining defects will be added as they become available. The public concept page remains available during development. ### 2026-09-06 — next combat and roster sprints started - Re-read the current source and master board; confirmed the preceding release remains 0.1.0 and later phases are unfinished. - Extended the portable move/state contracts for mode variants, super meter, multi-hit attacks, fixed move trajectories, projected strikes, counters, throws and bounded combo state. - Added pure motion recognition with mirrored quarter circles, dragon punches and double-quarter-circle super inputs. Seven checks pass, including stale/consumed motion rejection, neutral gaps, long initial holds and bounded immutable history. - Began the full five-fighter content definitions, validation and distinct procedural choreography in parallel with shared combat integration. - Added the in-game move-list interface and shortcut bindings. Warm-up starts with full super meter; versus still earns it through combat. Browser verification of this new interface is pending. - Prepared versioned module/stylesheet filenames for the next release, so uploading a new client will not overwrite the modules used by the current public version. Previous recovery archives remain untouched. ### Sprint 5 / 6 — expanded combat and full roster verified locally - All five fighters now have punch, low kick, primary, secondary, anti-air/counter, super and grounded throw slots. Canon names, commands, total damage and per-hit sequences match the independent `content/roster-canon.json` fixture. - Disko's Crossfade completes after 24 ticks and can be interrupted. HOUSE/DNB variants latch when a move starts and stay fixed on in-flight projectiles. HOUSE Groove Break catches one eligible frontal strike in its six-tick window; lows, throws, projectiles and rear attacks beat it. - Supers require and spend 100 meter. Multi-hit attacks deal discrete authored contacts; meter awards once per attack instance. Hit-confirm cancels, per-instance damage scaling, repeated-special rejection, a 12-hit limit and an air-juggle limit bound combos. - `node --experimental-strip-types --test tests/*.test.ts`: 57 passed, zero failed. The advanced matrix includes 42 full-kit/variant/facing damage cases and 42 corresponding full-guard cases. Existing replay, immutable state, lifecycle and natural-health full-match gates remain intact. - Strict TypeScript build passes. Renderer validation exercised 1,462 combinations across all five fighters, modes, actions and reduced motion with finite geometry and unchanged simulation state. - Local Chromium: Nosay's keyboard super spent 100 meter and reduced Disko from 1,000 to 760 HP. Disko's keyboard Crossfade changed HOUSE to DNB. The move list opens over a paused match and exposes the selected fighters' full kits. - Added distinct Tinkfu hair/glasses/tattoo sleeves, Stikman gray streak/shades/beard, and Froggy toad/cap/bandana art. Fighter art and choreography are procedural prototypes, not finished arcade-quality sprites. - Move list labels keyboard shortcuts separately from punch/kick motion symbols, and displays attack level so players can identify low guards. Warm-up starts each round with full P1 meter. - Deployment and final public browser evidence remain the next release gate. Network play and the editor are still later sprints. ### Sprint 5 / 6 — version 0.2.0 released on Hostinger - Uploaded eight versioned JavaScript/stylesheet assets, verified all were present, then replaced the backed-up playable entry page. The old 0.1.0 assets and recovery release remain intact. - Public HTTPS load displays version 0.2.0 and all five fighter choices. A normal keyboard super spent Nosay's 100 meter and reduced Disko from 1,000 to 760 HP with sound off. The public error log returned no entries. - The public Move list pauses the match, labels literal keys and motion inputs clearly, and shows attack levels, meter costs and counterplay. Local Tinkfu Chop Shot reduced Stikman from 1,000 to 925 HP; all five designs were visually inspected across local matchups. - This release's automated full-match regression passes; the earlier 0.1.0 release also has a complete public 2–0 match/rematch recording. The 0.2.0 public check is a combat/UI smoke check, not a separate claim of broad browser or physical-controller coverage. - `RELEASE-0.2.0.md` records the release scope, evidence and recovery steps. `releases/0.2.0/` contains the eleven public play/log files, portal entry and local SHA-256 manifest. The portal keeps its six existing concept images; the manifest names their preserved source package for a fresh restore. - Next active milestone: Sprint 7, network feasibility. It requires two clients, version/content checks, input transport, state restoration and latency evidence before online play can be claimed. ### User-directed refinement — FLOORBREAKERS and arcade movement - Added a new checkpoint before networking in response to the request for better naming, better text and much more elaborate Street Fighter-style movement. - The new title and UI copy are in development. Fighter identities, canon move names and existing hosting addresses stay consistent. - Reworking anticipation, contact, recovery, footwork, body rotation, reactions and victory motion for all five fighters. The simulation remains independent of visual animation. - Found a facing-order defect when a move recovers immediately after crossing an opponent; a targeted fix and regression check are in progress. ### Version 0.3.0 — FLOORBREAKERS and expanded choreography released - Renamed the playable to FLOORBREAKERS: AFTERHOURS and rewrote selection, training, match, move-list and result copy. Public title, canvas HUD and decks use the same identity. Confirmed fighter names, stature, genres and canon move names are preserved. - Added `src/choreography.ts`: distinct stances, preparation, contact, follow-through and recovery; heel pivots, weight shifts, head/torso turns and articulated hands. All seven move slots, movement states, reactions, throws and victory routines use the expanded pose system. Decorative trails follow real attacks; gameplay timing and damage remain separate. - The final victory display advances its presentation clock without changing the completed simulation. Round-end falls and victory poses can play through their visual sequence. - Fixed immediate attacks and motion inputs facing away from a rival after a crossing on the first frame out of recovery or stun. Three targeted regressions pass; movement paths, damage and physics remain the approved values. - Combined tests: 62 passed, zero failed. Two choreography checks cover 3,852 property samples across fighters, actions, mode variants, facings, reduced motion and launch/recovery cases. Pose geometry is finite, deterministic and leaves frozen inputs unchanged. Strict TypeScript build passes. - Added a local-only animation review page with genuine simulation pre-roll, selected normal input, play/pause and reconstructive timeline scrubbing. It is included in the source archive but excluded from the public release manifest. - Browser frame review confirmed Tinkfu's standing strike and floor-braced kick; Disko's two-hit rising DNB arc; Stikman's angular Frame Trap with its 80-damage contact; Froggy's four-contact road-case finish totaling 240; and Nosay's open-palm silhouette and readable new branding. Review browser error log was empty. - Uploaded nine versioned JS/CSS assets before replacing the entry page. Public HTTPS shows version 0.3.0, all five fighters and the new text. A normal keyboard super spent 100 meter and reduced Disko to 760 HP; the Fighter moves dialog rendered the new descriptions and guard cues. Public browser error log was empty. - Desktop Chromium is the verified browser surface. This release does not add touch controls or establish new mobile, Firefox/Safari or physical-controller coverage. Art remains procedural and can be refined further. - `RELEASE-0.3.0.md` and `releases/0.3.0/` record scope and recovery. Existing 0.1.0 and 0.2.0 releases are preserved. The roadmap next proceeds to network feasibility, then private online play, the content editor and repeatable Rush releases. ### Sprint 7 / 8 — version 0.4.0 online preview released - `src/netcode.ts` wraps the existing pure combat simulation in a bounded delay-lockstep session. Both global player inputs are required before advancing a tick. The browser uses a six-frame input delay at 60 Hz, approximately 100 ms of scheduled input delay before any additional network waiting. Missing input stalls instead of predicting a result. - Network packets, queues and retained history are bounded and validated. Duplicate equal inputs are harmless; conflicting, stale or malformed data stops the session. Periodic state hashes and the final result exchange detect disagreement; these checks do not establish that an opponent is honest. - `NetSession.exportCheckpoint()` and `restoreCheckpoint()` provide explicit source-level state recovery. Restoring requires an agreed checkpoint, both delay windows, paused peers and discarded old transport queues. It validates before committing. The preview UI does not call this API or promise mid-match reconnection. - `src/peer.ts` and `src/online.ts` provide the room flow, reliable ordered WebRTC data channel, selected-fighter handshake, connection timeout handling, status/RTT/tick/hash display and first-to-two match result verification. Both peers compare protocol, build and SHA-256 of `JSON.stringify(ROSTER)` before play. Normal rooms accept real keyboard inputs; an automated sparring diagnostic requires both peers to opt in. - The online keyboard layout is the same on either seat: WASD; F punch, G low kick, H primary, R secondary, T anti-air, Y super, V throw. Hold away to guard and down + away for lows. The preview has no pause; a new room starts the next set. Optional sound, reduced motion and fullscreen remain presentation settings. - `server/rooms.php` implements ten-minute room introductions with one atomic guest claim, separate random role tokens, token hashes, bounded payloads, a 100-room cap and a hashed-IP create limit. Files remain in a private directory outside `DOCUMENT_ROOT`. GET health is read-only; an actual POST must prove hosting storage permissions. See [the room-service guide](docs/ROOM-SERVICE.md) for the API, private storage rules and operational limits. - The production design uses the existing PHP host for HTTPS signaling and STUN-assisted direct browser connections. No TURN relay is configured. Some network combinations may fail to connect. `server/dev-rooms.mjs` and `scripts/serve-network.mjs` are local QA helpers and are excluded from the public client manifest. - Local signaling smoke passed six groups against the Node development adapter: health/cache headers, strict request validation, creation/expiry shape, competing guest claims, role authorization/answer retries and authenticated close. This proves adapter/API behavior, not PHP execution or real network reachability. No PHP executable was available locally during service implementation. - Actual local browser proof: host Nosay and guest Disko connected over WebRTC. A normal P1 H key press dealt 80 damage on both clients. Both showed Nosay at 1,000 HP / 8 meter and Disko at 920 HP / 4 meter. Matching state hashes were verified through approximately 6,000 simulation ticks. Normal play remained manual throughout this check. - The manual keyboard match then completed 2–0 at tick 7,500 using two H attacks and natural time-up. Both clients verified the final result with hash `525c351bdba33112`; the last periodic verified tick was 7,440. Displayed RTT ranged from 3 to 327 ms on the same computer, including tab scheduling effects; this is not a real-network benchmark. - A second actual WebRTC match used the explicit automated-fighter option on both peers and +120 ms outgoing input delay on each. Nosay beat Disko 2–0 by natural KO at tick 2,278. Both agreed on hash `c1bc2370ba0731e9`, with Nosay 880 HP / 100 meter and Disko 0 HP / 88 meter; the last periodic verified tick was 2,160. UI input-wait counts were 1,232 host / 1,276 guest. Displayed ping RTT was 2 / 7 ms and excludes the artificial input delay; it must not be reported as 240 ms measured RTT or a real-world loss/jitter test. - The release owner's combined automated run reports 71 passed, zero failed. Source checkpoint and transport tests remain separate evidence from the actual browser matches. - Actual Hostinger PHP verification passed all six smoke groups at the live endpoint: health/cache headers, strict validation, room creation/expiry shape, racing guest claims/content mismatch, token authorization/answer idempotency, and authenticated close/cleanup. This supplies actual PHP execution and POST storage evidence beyond the earlier local adapter check. - Public HTTPS `online.html` loaded version 0.4.0 in both browser clients. Both explicitly selected automated connection-test fighters with no artificial outgoing input delay. Nosay beat Disko 2–0 by natural KO at tick 2,278. Both verified final hash `c1bc2370ba0731e9`, Nosay 880 HP / 100 meter and Disko 0 HP / 88 meter; last periodic verified tick was 2,160. Input-wait counts were 194 host / 181 guest, displayed ping RTT 5 / 72 ms, and both browser error logs were empty. This is public-client proof from one computer, not a separate-network benchmark. - The public Back to Rooms action returned to setup after the diagnostic match. Both players unchecked automated mode; the host created a fresh room and the guest joined normally. A manual H attack dealt 80 damage in both clients, showing Nosay 1,000 HP / 8 meter and Disko 920 HP / 4 meter. Host Leave displayed “You left the room. Ready for another rival.” The guest returned safely to the lobby with “The direct connection encountered an error.” This verifies connection shutdown and lobby recovery, not a polished rival-left message. Both browser error logs were empty; reloading the host restored fresh ready controls. - Strict TypeScript build passes. The final recovery layout is `releases/0.4.0/`: 19 public files including the portal entry, a SHA-256 manifest and six preserved external concept-image dependencies. Packaging writes `releases/floorbreakers-0.4.0-playable.zip` and `releases/floorbreakers-0.4.0-source.zip`. Local development helpers belong only in source; private room state and tokens are excluded from both archives. | 0.4.0 release gate | Evidence / remaining entry | | --- | --- | | Automated suite / strict build | Strict TypeScript build passes. Combined suite: 71 passed, zero failed | | Full manual and diagnostic matches | Manual Nosay/Disko 2–0 at tick 7,500, shared hash `525c351bdba33112`; explicit diagnostic 2–0 at tick 2,278, shared hash `c1bc2370ba0731e9`. Both final-result exchanges verified | | Added-delay experiment | +120 ms outgoing input delay per peer; natural KO and matching final state. Waits 1,232 / 1,276. Displayed 2 / 7 ms ping RTT excludes injected delay; real jitter/loss acceptance remains open | | Hostinger PHP operation | Complete: all six live smoke groups pass, including actual POST create/join/answer/poll/close and racing claims | | Public 0.4.0 client proof | Complete: fresh HTTPS 0.4.0 load, explicit diagnostic with no artificial delay, 2–0 natural KO at tick 2,278 / hash `c1bc2370ba0731e9`, matching final state, both browser error logs empty | | Public manual input / new room / leave | Complete: Back to Rooms, fresh manual room, matching 80-damage H attack, host Leave, guest lobby recovery and clean host reload. Both browser error logs empty; guest used the generic connection-error message | | Recovery package | `releases/0.4.0/` layout: 19 public files including portal, SHA-256 manifest and six external image dependencies; `releases/floorbreakers-0.4.0-playable.zip` and `releases/floorbreakers-0.4.0-source.zip`. Private room data excluded; local helpers only in source | | Separate-network play | **OPEN — two players on different networks, matching outcomes and disconnect/rejoin behavior required; no such claim yet** | Sprint 7 is complete for prototype feasibility with recorded transport, checkpoint and local delay-experiment evidence. Sprint 8 has a released online preview with public PHP and completed-match proof; its separate-network and real impairment acceptance gates remain open. [RELEASE-0.4.0.md](RELEASE-0.4.0.md) contains the release-specific checklist. ## Migration path after the network preview Keep the pure TypeScript simulation independent of Canvas, browser input, audio and the room service. Preserve stable fighter/move IDs, integer units, content schema/versioning, source art/audio, animation pivots, replay scenarios and transport/checkpoint contracts. An upgraded browser renderer or desktop wrapper can keep this core. A Godot/Unity conversion requires a new client/combat/presentation integration and a two-fighter parity trial against the same replay scenarios; it is not an automatic export, and cross-engine network compatibility must be proven separately. The current PHP endpoint introduces peers over ordinary HTTPS. A later persistent authoritative or WebSocket room server is a different backend implementation and deployment decision. Hostinger documents outgoing-only WebSocket connections on Web/Cloud plans and points inbound-connection workloads toward VPS; recheck the selected service before committing to that architecture. No VPS or hosting upgrade is required by this preview's implemented design. [Hostinger connectivity documentation](https://www.hostinger.com/support/which-web-standards-and-connectivity-features-are-supported-at-hostinger/) was checked again on 2026-09-06. The earlier [plan audit](../outputs/dropclash-hostinger-v1/PLAN-AUDIT-AND-SPRINTS-v3.md) retains the original platform path and estimates.