← Back to project summary

Melee Mod Studio

A closer look at what it is, what is in it, and what I built.

What the app does

  • Opens a game disc image directly from your own machine and patches it in place, with no upload step and no server copy of the game.
  • Gives each kind of mod its own workbench: character gameplay, cosmetics, portraits, stages, music, 3D models, and a checkout flow for assembling a pack.
  • Edits character move scripts frame by frame, with hitbox groups, knockback, trajectory, and directional influence shown alongside the numbers.
  • Hosts a searchable marketplace of community cosmetic mods with per-fighter filtering and shareable detail pages.

The file formats, all written from scratch

  • Reads the GameCube disc image, walks its file system table, and rebuilds that table when a replacement file changes size.
  • Parses the game's HSD archive and model format - joints, display objects, materials, textures, and polygon data - and animates fighters from their own animation data.
  • Decodes the GameCube GX texture formats, including the compressed CMPR format, for portraits and costume previews.
  • Decodes and encodes the game's HPS music container and its DSP-ADPCM audio so tracks can be swapped.
  • Draws models with a WebGL2 renderer written for this project rather than a 3D library, sharing one context across every thumbnail on a page.

How the project is run

  • Byte patches refuse to guess at a mirrored offset rather than silently writing the wrong one, which is what fixed the stage mods that used to apply and change nothing.
  • A Python harness drives the Dolphin emulator through libmelee to check that an edited move actually behaves differently in the running game.
  • The repo keeps a delivery audit that checks every completion claim against the source, and tracks work as built, verified, or confirmed rather than just "done".
  • GitHub Actions deploy to separate staging and production Workers environments that share one D1 database.
Live project Open Melee Mod Studio Open the site in a new tab