DevLog thread: I'm building a pixel-art homage to the 2004 Flash game *Elektra: Ninja Assassin* by Big Spaceship. I pulled it off the Wayback Machine, dissected it, and I'm rebuilding it in Phaser 3 + TS. Solo dev + AI tooling, full #vibecoding. 10 sprints. 🧵 #gamedev #pixelart #indiedev #phaserjs #typescript #vibecoding
The original game's FMS multiplayer backend died years ago. Only the SWF survives via Wayback. I decompiled it with JPEXS, recovered the AS2 classes, and reconstructed the mechanics by reading `main.flr` (~5300 lines) with frame labels stripped.
The `gamedata.xml` with the 21 attacks was never archived at Wayback Machine. All lost. The only survivor was the in-game "ATTACK MOVES" help panel inside the SWF. From there I recovered the 21 names and 42 damage/energy values. Zero guessing. So I built a basic fighter/attacks editor to generate my own "gamedata.xml" for the brand new from-scratch 2026 remake.
Sprint 1 (1 week): scaffolded Phaser 3.90 + TypeScript + Vite, 5/6/5/6/5 hex board, deterministic round resolution (BLOCK→MOVE→ATTACK), 3 slots per round, an ActionChooser UI, hot-seat 2P. Plus the attack-pattern editor as a second Vite entrypoint.
The original game has a surprisingly good AI in `ComputerPlayer.as`. I ported it *verbatim* to TypeScript with its own ADR (ADR-0004) that documents the single allowed source of randomness: a seedable PRNG used only by the CPU player.
Pivot: I need online. I designed a custom wire protocol + `WebSocketTransport` + `NetMatchSession`, both client and server with E2E tests. Deterministic lockstep: the server only routes actions; both clients independently resolve the same round.
https://youtu.be/SB8KhkBAPeI
Ninja Hunter Demo 03

YouTube
Sprints 3-4: when someone closes the tab, the other player needs to know what happened. I added a match-aborted overlay, explicit LEAVE MATCH, a 30-s grace window, and F5-resume — a sessionStorage token rehydrates the match from the server.

Sprint 5: added 3-player mode (more complex matchmaker, three-way round pacing) and a 30-s round timer with auto-NONE on uncommitted slots. Timeouts are no longer silent — a "PLAYER N TIMED OUT" banner surfaces every auto-NONE'd round.

https://youtu.be/cWuganAukwQ

Ninja Hunter Demo 04

YouTube
Sprint 6: lockstep is great until one client desyncs. Now each client sends a state hash after every round; the server compares and triggers a desync overlay if they diverge. Plus: zombie-match detection + ping/pong RTT measurement.

Sprint 7: make the online look like the original before going public. Room browser, guest usernames, bot-fill for incomplete 3P matches, 6 in-match emotes (no chat — explicit decision). The demo stops feeling like "instant Steam matchmaking".

https://youtu.be/cdIr_TPVLVU

Ninja Hunter Demo 05

YouTube

Sprint 8: server to Fly.io with Dockerfile + healthcheck + per-IP rate-limiting (10 conn/min, 50 concurrent, 5 rooms/h). Client to Cloudflare Workers Static Assets via wrangler. Live latency badge in the top-right HUD during net-* matches.

#vibecoding #gamedev #pixelart #indiedev #phaserjs #typescript #html5games #webdev #flashgame #preservation #multiplayer #hexgrid #solodev #aitools

Sprint 9: the demo stops looking like a placeholder. Pixel-art backgrounds (8 scenarios), fighter sprites generated via PixelLab, per-character animations (idle / move / 3 attacks / hit / death), per-attack VFX matrix, audio (SFX + music).

#vibecoding #gamedev #pixelart #indiedev #phaserjs #typescript #html5games #webdev #flashgame #preservation #multiplayer #hexgrid #solodev #aitools

Sprint 10: layered BGs (deep / gameplay / overlay), horizontal parallax on skies, per-scenario ambient FX — rain + thunder in the cave, falling leaves in the forest, birds at sunset, torches in the castle, water sparkles on the lake.
Also in Sprint 10: cinematic char-select → match transition, scenario-name banner at match start ("STRONGHOLD OF SHADOWS"…), global bitmap fonts, new HUD with 64×64 portrait + animated HP/EN bars per fighter.
#vibecoding #pixelart #indiedev #phaserjs #solodev

Next up: reskin the roster (the canon names are Marvel IP and I want to ship clean). I'm prepping a brief for an independent AI session to propose alternatives. If you want the repo or want to play, reply and I'll DM the link.

Public beta available here: https://www.artemisninjahunter.online/

Send your comments, please :)

https://youtu.be/gNbMPhlzQ-o

#vibecoding #gamedev #pixelart #indiedev #phaserjs #typescript #html5games #webdev #flashgame #preservation #multiplayer #hexgrid #solodev #aitools

ARTEMIS: NINJA HUNTER — pixel-art tactical multiplayer

Pick 3 actions per round, watch them resolve in deterministic order on a hex board. 1v1 or 1v2, vs AI or live online. Free public beta in browser.

ARTEMIS: NINJA HUNTER