Case 03 Creator Nov 2026 – Present

Fisher of Fire

Since I was a kid, I've wanted to rebuild the fishing game from Breath of Fire III as a mobile app, and expand on an experience I was so attached to. The game came out on PlayStation in 1997. I decrypted the program on a disc I own, decompiled all of it, and rebuilt Fishing Mode in TypeScript and Phaser 4 rather than emulating it. The rebuild runs in a browser at the game's native 480×272, and once it matched the original I built on top of it: save files, four playable fishers, a shop, a jukebox and support for any screen and any controller.

  • Vite
  • Node.js
  • Phaser
  • Ghidra
  • FFmpeg
  • Java
  • WebGL
  • TypeScript
  • Vercel
Fisher of Fire in its CRT TV mode, with the on-screen PlayStation-style pad below
Functions decompiled
11,676 48 MB of C
Port source
About 6,900 lines of TypeScript and tools
TypeScript modules
57
Game-rule modules
11 no rendering: state machine, fish AI, saves
Phaser scenes
13 one per screen
Typed data tables
9 spots, fish, gear, music and more
Runtime dependencies
1 Phaser
Extractor dependencies
0 plain Node.js
Fishing spots
17
Music player
128 tracks
Native resolution
480×272
Empty folder to 0.1.0 Beta
About 14 hours, November 2–3, 2026
Input methods
4 keyboard, mouse, controllers and touch

01

Notes from the build

01 / 05

Rebuilt, not emulated

No emulator runs the original code. The port re-implements the fishing rules, casting, the lure rhythm and the fights in TypeScript, read from the decompiled program.

02 / 05

Measured against the original

Six screenshots from the real hardware set every layout, so sprite positions and window sizes were measured rather than guessed.

03 / 05

Past the original

Three save files, Young Ryu, Ryu, Young Nina and Nina as playable fishers, the Manillo shop, a gallery, a 128-track music player, cheats, a CRT TV mode and any screen at 1–4× or fill.

04 / 05

Any input

Keyboard, mouse, game controllers, touch and an on-screen pad, with a controls screen in PlayStation symbols.

05 / 05

Tooling for the next one

An animation viewer and sheet editor, URL flags for testing, and a porting playbook written up so the method carries to other games.

02

What it's written in

  1. TypeScript 100%

Estimated from the stack, not measured from the source. Measured figures replace this once the repository is counted.

03

The stack 14

Reverse engineering

  • pspdecrypt EBOOT.BIN to a relocatable MIPS (Allegrex) PRX
  • Ghidra 12.2 headless, with ghidra-allegrex
  • Java a custom Ghidra export script
  • llvm-objdump quick disassembly

Extraction

  • Node.js 20+ 7 zero-dependency scripts: textures, palettes, terrain, objects, sound, music
  • ffmpeg ATRAC3+ jingles and the jukebox

Game

  • TypeScript 5.9.3 strict, ES2022 target, bundler module resolution
  • Phaser 4.2.1
  • Vite 6.4.5

Browser

  • WebGL Phaser 4 renderer
  • Gamepad API controllers, with an on-screen pad for touch
  • Web Audio API sound banks and the 128-track jukebox

Toolchain

  • npm lockfile v3: 3 direct dependencies, 68 packages in the tree
  • Vercel CLI prebuilt production and preview deploys

04

How it ships Custom Pipeline Built

From an encrypted disc image to a playable, extended browser port. The repository holds no game data: the extractors read it from the owner's own disc.

  1. 01 Decrypt

    pspdecrypt turns the encrypted EBOOT.BIN into a relocatable MIPS (Allegrex) program.

  2. 02 Decompile

    Ghidra 12.2 headless with ghidra-allegrex and a custom export script writes every function out as C.

  3. 03 Trace

    The fish table, matched against a PS1 speedrun's star table, located the fishing logic. Fishing turned out to run on world-map areas.

  4. 04 Extract

    Node tools decode tiled textures, per-strip palettes, terrain meshes, sound banks and music: about 830 files.

  5. 05 Rebuild

    Phaser 4 and TypeScript, with a PSX-style affine triangle renderer for the terrain. Every layout measured against reference screenshots.

  6. 06 Extend

    Three save files, four fishers, a shop, a gallery, a jukebox, cheats, a CRT mode, 1–4× scaling and any input.

I'm listening if you're talking

A bug, a new build, a data question, a site that needs to be faster or a full rebuild. Tell me what's going on.

Let's see how to collaborate.