Skip to content
Index / $14

Shuma-Gorath, Whole: Relocating a Character's Real Code into Marvel vs Capcom

Shuma-Gorath was never in Marvel vs Capcom 1. He is now -- not as a reskin, but as his own MSHvSF code block relocated into the ROM. This is the native port: the 'compressed sprites' that were our own tool's garbage, an entire code block copied to arena space and re-entered through trampolines, and the flagship payoff -- a Mystic Stare that fires a visible, moving eyeball, its object allocator found by tracing a live Ryu Hadouken. Honest about the bounds: one eyeball, no hitbox yet.

Date
Jul 23, 2026 · upd Jul 23, 2026
Runtime
7 min · 1,576 words
Tags
cps2, reverse-engineering, marvel-vs-capcom
Slot
$14
Contents
tip // Evidence Strip

Goal: Put Shuma-Gorath -- a character Capcom never shipped in Marvel vs Capcom 1 -- into the game as a native fighter: his own MSHvSF code and animations running inside MvC1, not a sprite swap over someone else's moveset.

Constraints: No source, encrypted program code, a secret character-id ($30) that falls off the end of every per-character table, and a custom 64MB graphics core that has to hold his tiles without breaking any stock character.

Approach: Relocate an entire block of his real MSHvSF logic into unencrypted arena space and re-enter it through trampolines; extract his tiles with the same pipeline built for Dark Sakura; then fix, one live-gated increment at a time, every crash the past-end table reads cause.

Result: He commits from the select screen with no cheat code, loads, and fights on his own animation tree. His name reads SHUMA-GORATH. His flagship special, the Mystic Stare, fires a visible, moving eyeball. Deployed in mvsc_eyefly.zip.

Proof: A live 23-second gameplay capture (below), an independent six-dimension adversarial pass on the names, and an independent skeptic who re-derived every byte of the eyeball build and re-gated it with fresh screenshots.

Artifacts: The companion Dark Sakura native port (the recipe he generalized) and the deployed ROM lineage.

Native Shuma-Gorath — live gameplay in Marvel vs Capcom 1YouTube ↗

The Blocker That Wasn't

Dark Sakura proved the native recipe: import a character from Marvel Super Heroes vs Street Fighter into MvC1 by running her own relocated code, not by force-fitting her onto a stock fighter. Shuma-Gorath ($30) was the test of whether it generalized -- and he arrived with a scary flag.

His sprite data looked compressed. Entropy measured 7.95 across his animation region, and CPS-2 has no known decompressor for that. Believing it would have meant 30-50 hours of codec archaeology before a single tile rendered.

It was a mirage, and the reason is the most important lesson in the whole project. The analysis artifact everyone had been reading was built by running the CPS-2 decryption over the entire first megabyte of the ROM -- which correctly recovers opcodes but scrambles the plaintext data that lives in the same address range. The "compressed" bytes were our own tool's garbage. In the original encrypted set, his animation tree is an ordinary table (entropy 4.43), his 11,587 tiles walk out with the exact pipeline built for Dark Sakura, and his idle stance -- authentic green body, palette solved -- rendered on the first try.

note // One ROM, two truths

The same byte is an instruction and a datum depending on which decryption view you read it through. A tool that applies one view everywhere will describe the other half of the ROM as noise -- with complete confidence. Every "impossible" blocker in this project has been worth re-checking against the other view first.

Relocating the Whole Block

Where Dark Sakura's port leans on shared engine paths, Shuma's relocates an entire block of his real MSHvSF code. The block $0301DE..$032A3E is copied verbatim into unencrypted arena space at $3FA060 and re-entered through trampolines, so his logic runs as his own code rather than being fitted onto anyone else's spine. The instructions his relocation displaces are replayed cleanly on the way in.

Loading diagram...

He commits from the character select with no cheat code -- one cell to the right of Wolverine. His name reads SHUMA on the select grid and SHUMA-GORATH on the lifebar, and the old Iron Spider branding is gone from both screens, verified by an independent six-dimension adversarial pass that included a GFX poison test.

Shuma's select cell: a blank wordmark before, SHUMA after -- the same fix family that put SHUMA-GORATH on his lifebar

In-match lifebar, before and after the name-routing fix: Shuma reads SHUMA-GORATH

The Defect Behind His Crashes

Shuma kept tripping crashes that felt unrelated -- a knockdown crash, ×5.94 damage, corrupted stun, a pinned camera, garbage sounds. They share one root cause, and it is the single most useful thing to name.

Fighter field $52 is char_index * 2. Every per-character table in the engine has exactly 23 entries, ids $00 through $2C. The secret id $30 is past the end of every one of those tables -- so each lookup reads whatever bytes happen to follow into memory:

Loading diagram...

Every crash with a numeric fingerprint traces to a specific past-end read:

  • Knockdown / throw crashed on a relocation thunk that indexed its jump table by d1 instead of d0. The fix is one byte -- 0x3D359, d1 -> d0.
  • Defense read a past-end damage-scale entry, so he took ×5.94 damage (55 per hit); clamped back to ×1.0 (9 per hit).
  • Camera pinned on a past-end super-jump bound; five sound sites leaked garbage, including an Onslaught-theme fragment.

A 203-site census of those past-end reads now exists. It also explains why a "seat his real physics numbers" port is structurally walled: the 23-row tables are packed with zero slack, so id $30 physically aliases the next table's first rows. Overwriting to "fix" it corrupts the whole roster. Every fix has to be a reader-side clamp or redirect, never a table rewrite.

Mystic Stare: An Eyeball That Actually Flies

This is the payoff of the native era. Marvel vs Capcom 1 never had Shuma's Mystic Stare; teaching the 27-year-old engine to recognize the input (charge Back, then Forward + Punch) was the easy half. Making it fire was the hard half -- and it now does: a visible, moving eyeball crosses the screen.

The cast: Shuma's Mystic Stare pose -- 8 frames of his real MSHvSF animation

Frame +10: the eyeball (cream body, pink iris) just launched, Shuma's tentacles at frame left, Venom mid-screen

Frame +22 of the same cast: the eyeball has crossed the screen toward Venom

Loading diagram...

Two details make this honest engineering rather than a lucky poke. First, the object allocator $3FAE was found by tracing a live Ryu Hadouken, because static matching failed to locate it -- and Ryu's own Hadouken still fires afterward, which is the proof the reroute is stock-safe. Second, the type-$78 dispatch is rerouted with only 3 encrypted bytes into a trampoline ($23CF70) that jumps to a relocated EYE_HANDLER at $3FC8C0. The result was independently verified: the object is real, owned by Shuma, and it moves.

warning // Bounded, on the record

It is one eyeball, not his authentic six-eye fan (a 3-eyeball barrage is designed and in build). It has no hitbox yet, and it freezes during hitfreeze. The spawn-and-move pipeline is proven; the weaponization is not done.

Honest Caveats

Shuma is a hybrid: his own code and animations, but Ryu-clamped physics rows at roughly 22 dispatch sites -- which is why a mini "RYU" tag still shows under his lifebar portrait. Specifically:

A known open defect, caught on camera: the blue boxshape-mirror columns rising from the ground during a super-jump -- root known (VRAM mirror at $922000), fix not yet shipped

  • Air normals and combos are incomplete at some sites. The old donor build, riding Ryu's complete move-flow, had more moves wired than the native currently does; the native trades that completeness for authenticity and is still filling in. The path forward is to drive Ryu's working move skeleton (air normals, combo cancels, ready-fight walk) with Shuma's own animations and hitboxes.
  • Correct MSHvSF SFX are not ported -- the wrong sounds were silenced, not replaced.
  • Supers and most other specials are not wired.
  • Pre-fight walk-back is missing, and a stun/KO animation stall exists.
  • The blue vertical glitches rising from the ground are the boxshape VRAM-mirror columns at $922000 -- known root, poke-proven, unfixed.
  • The 64MB core breaks Fightcade netplay. He is an offline character until that changes.

Status

SurfaceState
Secret commit, loads, fights native (block $0301DE..$032A3E -> $3FA060)Working; 0 wild jumps, 0 non-boot resets
Name both screens (SHUMA select, SHUMA-GORATH lifebar)Working; Iron Spider gone; 6-dim adversarial pass
Master defect (past-end 23-entry reads)203-site census; fixes are reader-side clamps
18-fix chain, each gated liveDeployed (mvsc_eyefly.zip)
Mystic Stare eyeballFires and moves -- one eyeball, no hitbox, freezes in hitfreeze
Air combos / supers / correct SFX / pre-fight walkOpen

He shares the native recipe with Dark Sakura, and the honest theme of both ports is the same: the parts you can prove, you prove; the parts you cannot, you say so on the record.

EOF · $14 · 1,576 words · Daniel Plas Rivera
Share[X][LinkedIn]