Projects
Three games, each playable right here — no install, nothing to run yourself.
Bounce — Browser Remake
Play Bounce — Browser RemakeA browser reimplementation of the Nokia J2ME game Bounce — all 11 levels, rebuilt from the original MIDlet's bytecode, level binaries, and spritesheet. With no decompiler available, I wrote a purpose-built class-file disassembler to read the game logic straight out of the compiled bytecode, then ported the tile format, physics, and collision tick-for-tick.
- Reverse-engineered from raw J2ME bytecode with a purpose-written class-file disassembler — no decompiler was available for the job.
- Physics, tile collision, and the level file format ported tick-for-tick from the original MIDlet's obfuscated classes.
- Installable, offline-capable PWA with a network-first service worker for the app shell and cache-first for static assets.
Neon Stack
Play Neon StackA competitive block-stacking game with modern scoring (T-spins, back-to-back, combos, perfect clears), a CPU opponent, and real-time multiplayer over a hand-rolled WebSocket relay — no libraries, just server.js talking raw frames. Territory mode replaces the usual attack-the-other-board loop with one shared board split by a moving wall, and every match is backed by a daily/weekly/monthly/all-time leaderboard.
- Hand-rolled WebSocket server (~120 lines, no libraries) — handshake, framing, fragmentation, and ping/pong liveness all written directly.
- Territory mode: one shared board split by a moving wall — clearing lines shrinks your opponent's share instead of burying them in garbage.
- Persistent leaderboard with daily/weekly/monthly/all-time boards, per-player run history, and live match spectating.
Solo Climb and Versus CPU run entirely client-side — nothing to set up. Multiplayer, Territory, and the leaderboard need the included server.js running somewhere reachable; point the client at its address from the connect screen.
Thistlewick
Play ThistlewickA small browser game in the spirit of Old School RuneScape's earliest quests: click around a village, talk to NPCs through branching dialogue, chop trees, gather items, and complete two chained quests for gold and XP. Everything — map, pathfinding, dialogue engine, and quest state machine — is hand-written vanilla JS rendered on a single canvas.
- 8-directional BFS pathfinding, including a walk-adjacent-to-target helper for NPCs and obstacles that block their own tile.
- A node-graph dialogue engine and a two-quest chained state machine, built to extend with more quests and NPCs.
- Runs from a single HTML file — no build step, no server, no dependencies.