case studyUpdated Aug 8, 202617 min read$22

The Crossover Capcom and SNK Never Built: SVC Zero on CPS‑2

Zero's face and name are in Marvel vs. Capcom. Underneath, Mega Man still owns most of the machinery. The crossover prototype exposes what a sprite swap cannot fix.

svc-chaoszeroneo-geocps2marvel-vs-capcom
CPS-2 Reverse EngineeringPart 24 of 45
Browse all writing
On this page

Capcom and SNK taught us to expect impossible matchups. Marvel vs. Capcom crossed universes. Capcom vs. SNK crossed companies. SNK reversed the billing with SVC Chaos and built its own beautiful Zero for Neo Geo—then that branch stopped after one game.

This is the hardware crossover those releases never attempted: move SVC Zero from Neo Geo into CPS‑2 Marvel vs. Capcom, replacing Mega Man. Highlight Mega Man and the fight now draws Zero, the lifebar says ZERO, and the portrait is his. The more important discovery is what remains after the reveal: a character is not a sprite sheet. It is a coupled system of animation, commands, state, physics, collision, damage, helpers, meter, effects, sound, and identity.

Corrective audit: the screenshots exposed a prototype, not a finished Zero port

The August 6 state-tree census counts 110 imported Zero chains out of 302 distinct Mega Man chains: 36.42%. A 13-pixel source baseline error caused the visible hover and is now corrected. Super-jump, reached guard, hit, and knockdown routes now draw imported Zero poses, but 192 donor chains remain. Helpers, projectiles, several state aliases, throws, weapon branches, and QSound are still Mega Man-owned. “Complete,” “native,” and “all moves functional” would be false labels.

August 8 Character Lab: Zero now has a repair contract, not a completion claim

The reusable secret-menu harness now has a pinned Zero profile and a 37-lane occupancy inspection. It separates identity, movement, every normal family, SVC specials and supers, defense, throws, victim holds, helper lifecycle, damage, stun, cancels, reactions, audio, AI, story and stock-roster regression. The current ledger closes 1/37 required lanes—and that one closure is only a written waiver because SVC Zero has no persistent flight mode. Existing idle, super-jump and hit-route artifacts remain OBSERVED, never promoted into full behavior passes.

This port needs a hybrid source oracle. SVC Chaos is Neo Geo software and does not contain Capcom's CPS-2 developer menu, so source truth still comes from the stock SVC runtime tracer. On the destination side, the MvC HIT and CATCH tools both open and census the replaced slot, but they still call it 10 ROCK MAN. That is useful evidence: Zero's art is in the ROM, while the editor-visible destination contract remains Mega Man's.

Marvel vs Capcom HIT EDITER on the current Zero build, with the replaced destination row still labeled 10 ROCK MAN
DESTINATION ORACLE // the editor reaches the replaced slot but still names its stock Mega Man contract. Zero source semantics must be proven through the Neo Geo trace plus live destination gates.

The prepared repair order is deliberately load-bearing: command and parent-state handoff first; then the missing Zero animation families and assembly; collision and throw geometry; Zero's own helpers and projectile lifecycles; damage, stun, cancels and victim reactions; finally QSound, story/ending edges and full-roster regression. That ordering prevents a successful saber pose from being mistaken for an imported special or super.

SVC Chaos Zero inside Marvel vs Capcom: the v2 ROM milestoneYouTube ↗

This video records the v2 milestone in the order the port actually happened: Zero became visible, selectable and identifiable inside MvC before the later route census exposed how much Mega Man behavior remained underneath. It belongs in the progression record precisely because it is not a finished-moveset claim; the corrective audit and acceptance matrix below show what the footage proves and what it cannot prove.

August 6 inspection: what the new screenshots actually proved

The reported hover was real, not an aspect-ratio illusion. Each extracted source cell contained 13 transparent rows below Zero's feet. Bottom-centering that cell inside a CPS‑2 sprite canvas preserved the empty rows and lifted the character by 13 target pixels. The builder now applies a measured +13 source-baseline correction before it authors each sprite list. Horizontal display correction remains 6:5; the vertical scale remains 1:1.

The same inspection found a second false signal in the capture harness: it rewrote the fighter's Y coordinate to the floor every frame, canceling the native jump physics while the animation pointer continued to advance. The repaired harness resets the fixture once, then leaves the game in charge. The airborne still below is therefore evidence of both the Zero sprite route and native MvC super-jump movement.

Corrective audit

The repair added 66 Zero chains—and still leaves most of Mega Man's tree intact

Distinct animation chains reached from all 340 slots in Mega Man's tree; denominator = 302 de-duplicated chains.

  1. imported Zero chains+66 / +150.0%
    14.57% before4436.42% now110
  2. stock Mega Man chains remaining-66 / -25.6%
    before258now192
  3. mapped donor addresses+71 / +134.0%
    first full-route pass53state audit124
A chain is counted as imported only when its first live sprite-list pointer resolves into Zero's authored list park. The release gate remains complete=false.
Fresh emulator capture of Zero standing on the ground in Marvel vs Capcom after the baseline correction
Grounding proof // measured +13 source baseline; feet now meet the floor
Fresh emulator capture of Zero airborne during Marvel vs Capcom's native super jump
Super-jump proof // expansion route + native target physics; no Mega Man body
Zero displaying an imported guard pose while Captain America attacks in Marvel vs Capcom
Guard-route proof // native block input reached $157614
Zero displaying an imported hit reaction while Captain America attacks in Marvel vs Capcom
Hit-route proof // native contact reached $158844

These are route proofs, not a completeness montage. They answer the specific fallback report: the reached super-jump, block, and hit paths now show Zero rather than Mega Man. They do not prove every guard, dizzy, throw, KO, or recovery alias in the 302-chain tree.

Blueprint: define the rooms before moving the first byte

The project is structured like a house because the metaphor forces an honest build order:

  1. Blueprint: define the character ontology and proof gates.
  2. Foundation: inventory source ROMs and measure both hardware systems.
  3. Framing: correct aspect, palette, anchors, and animation capacity.
  4. Wiring: translate state timelines, commands, boxes, damage, and meter.
  5. Plumbing: route helpers, effects, and audio.
  6. Inspection: automate inputs, contact tests, stills, and recordings.
  7. Finish: identity art, regression, packaging, and a truthful release verdict.

Exhibit 1

Zero owns the visible house; Mega Man still controls several load-bearing systems

Latest input-driven ROM test, separated by system rather than by screenshot.

nativeverifiedbridgeddonorpending
routeart + animationcommands + physicsboxes + damageeffects + sound
idle / walk / crouch / jumpverifiedZero frames + 13 px baseline fixdonorMega Man state dispatcherbridgedsource hurt rows authoreddonor
super jumpverifiedfresh airborne route proofdonornative MvC jump physicsbridgeddonor
forward + back dashverifieddonortarget velocity contractbridgeddonor
light + medium normalsbridgedpendingdispatcher exits before active rowspending0 active-box frames in latest rundonor
heavy normalsbridgeddonorverifiedstanding and crouching HP connectdonor
aerial normalsbridgeddonorpendinggrounded fixture cannot prove full familydonor
SVC specialsbridgedpendingstill entered through donor grammarpendingchild projectile not source-nativedonor
SVC super timelinesverifiedsplit across all traced hyper subchainsdonorverifiedtwo multi-hit routes connectpendingeffect helpers + audio remain donor
guard + reached hit reactionsverifiedsource poses on tested rootsdonortarget blockstun + launch logicbridgedsource body boxes; donor state timingdonor
throw / stun / KO / winpendingtree still contains fallback chainsdonordonordonor
lifebar identityverifiedZERO + portrait readbackpendingpendingpending
Verified applies only to the named route and fresh native-input capture. Bridged means source data exists but depends on target plumbing. Donor means Mega Man still owns the behavior.

That matrix answers the gameplay question precisely. No, all normals and supers are not yet functionally equivalent to SVC Zero. Two heavy routes and two multi-hit super presentations make contact; the lights and mediums do not. The distinction matters because an attractive animation can play while its attack rectangle never becomes active.

Foundation: two arcade systems, one data ontology

The supplied SVC set contains 88.5 MiB of uncompressed addressable cartridge payload; stock MvC contains 44.25 MiB. Similar 68000 CPUs do not make their data interchangeable. Neo Geo and CPS‑2 disagree on sprite maps, palette selection, animation records, box encoding, sound hardware, banking, and screen coordinates.

I normalized both games into a shared frame vocabulary:

fieldsource meaningtarget question
root X / Yworld position per framewhere should the imported pose and boxes live?
facingsource forward axismust X and command directions be inverted?
pose / durationvisual state and hold timecan the donor chain represent every phase?
hurt / attack boxdefense and contact geometrywhich CPS‑2 box-set and shape rows are required?
damage / life maxraw combat unitswhat percentage of a full bar is preserved?
meter deltagain or spenddoes the route obey the target gauge contract?
child objectprojectile, helper, effectis the move still borrowing Mega Man plumbing?

Exhibit 2

Expansion closes 41 MiB of the capacity gap—but storage is the easy part

Uncompressed addressable payload by role, MiB.

graphicsprogram + datasamplessound CPU
  1. SVC Chaos / Neo Geo88.50 MiB
  2. MvC / stock CPS-244.25 MiB
  3. MvC / expanded target85.25 MiB+41.0 vs stock
ROM inventories and the local expanded address map. Capacity says the material fits; it says nothing about state-machine compatibility.

Exhibit 3

The expanded target reaches SVC's art scale while retaining a smaller data ceiling

X = graphics MiB; Y = 68000 program/data MiB; bubble = sample MiB.

907185362540728stock MvC16expanded MvC16SVCgraphics capacity (MiB)68000 program + data (MiB)bubble = sample MiB
Direct labels and a conclusion-first title keep the exhibit readable; the measurements and visual system are original.

Framing: correct Zero's shape, colors, and identity

Both cabinets are 4:3, but SVC authors against a 320×224 raster while MvC uses 384×224. A direct pixel copy makes Zero five-sixths too narrow. The importer therefore scales X by 6:5, leaves Y unchanged, and uses nearest-neighbor sampling. This is display correction, not an artistic stretch.

Zero's source palette is genuinely dark: brown hair, black limbs, and deep crimson armor. The body row is fitted from neutral frames so green saber light cannot evict red body shades. Effects now use a second 15-color row for green/cyan saber energy, white highlights, and the blue Cyber-Elf glow. That split fixed the original mud-black body pass, though some compound effect frames still need art-by-art inspection.

SVC Chaos Zero standing with his feet aligned to the Marvel vs Capcom floor
Body inspection // source-dark Zero, 6:5 X correction, repaired baseline
Zero holding a crouch inside Marvel vs Capcom
Crouch inspection // settled source pose, no Mega Man body
Marvel vs Capcom HUD showing the name ZERO and Zero's portrait over Player One's lifebar
Identity inspection // Z from Zangief, E/R from Captain America, O from Morrigan; four portrait tiles read back through Mega Man's slot.

The lifebar banner reuses the game's alphabet exactly: Z from Zangief, E and R from Captain America, O from Morrigan. The face is a nearest-neighbor 32×32 crop from SVC. Name tiles, both fight-side records, portrait tiles, and the decrypted portrait lookup are verified after the final ZIP is written. The large character-select illustration is still Mega Man; the fight HUD is fixed, but that additional identity surface remains on the punch list.

Wiring: expand the ROM, then discover the donor-state ceiling

The imported sprite lists live at $500000; expanded chains begin at $560000; translated box sets, shapes, and move properties occupy the top of the new 1 MiB data window. Expanded graphics use bank 4. The game and custom core must agree on both pieces: a larger file is useless if the CPU cannot fetch the data or the sprite bank cannot address it.

Expanded MvC 68000 map
1 · stock program ROMA$00000000$01000000
  • 1
    stock program ROM
    $00000000$003FFFFF · 4.00 MB
    4 MiB
  • 2
    imported sprite lists
    $00500000$0055FFFF · 384.0 KB
    48,640 bytes used
  • 3
    expanded animation chains
    $00560000$005EFFFF · 576.0 KB
    38,288 bytes used
  • 4
    box sets
    $005F0000$005F3FFF · 16.0 KB
    160 rows
  • 5
    box shapes
    $005F4000$005FBFFF · 32.0 KB
    342 rows
  • 6
    move properties
    $005FC000$005FFFFF · 16.0 KB
    damage indexed by attack-shape id
  • A
    new flat read/fetch window
    $00500000 · marker
Local expanded FBNeo target. The user-facing article omits execution commands; the research tree retains reproducible launch scripts.

Exhibit 4

The state audit added 138 imported poses and more than doubled mapped donor routes

Before/after measurements from the same builder and target.

  1. imported build frames+138 / +172.5%
    first bridge80current pass218
  2. unique CPS-2 tiles+3,386 / +161.8%
    first bridge2,093body + effect rows5,479
  3. mapped donor addresses+71 / +134.0%
    first full-route pass53current map124
  4. box-set rows+65 / +68.4%
    stock clone95source-authored160
The expansion solves storage and presentation. It does not automatically lengthen the 68000 state that owns a short normal.

That last sentence is the most useful result in the project. Mega Man's light dispatcher leaves the attack state before the longer Zero chain reaches its active source record. The ROM holds the right data; the state no longer asks for it. Heavy states live long enough to reach the expanded chain and connect. Animation expansion and state-duration expansion are separate jobs.

There is also a harder conflict than duration. Stock trace data shows animation chain $158B34 serving both Mega Man's Beat Plane continuation and a throw-out path. Redirecting that one chain to Zero's Cyber-Elf super makes the throw display the same Zero sequence. One donor address cannot be two source actions. The fix requires a new dispatcher branch and relocated target chains—not another sprite redirect. Five additional interior aliases overlap their redirected parent chains for the same 20-byte in-place reason.

Plumbing: compare the source fighters before balancing the target

The source traces reset life, hold spacing, and measure damage against each game's native full-life maximum. Raw bytes are misleading across systems, so the chart uses percent of full life.

Zero's strongest measured normal is slightly heavier; Mega Man's Rush Drill is the outlier
  • SVC Zero standing A1.33% of native full life

    3 / 225

  • MvC Mega Man standing LP1.33% of native full life

    4 / 300

  • SVC Zero standing D6.67% of native full life

    15 / 225

  • MvC Mega Man standing HK5.67% of native full life

    17 / 300

  • SVC Zero QCF×2+C16.89% of native full life

    38 / 225 in fixture

  • MvC Mega Man Rush Drill29% of native full life

    87 / 300

Native-source contact traces, not current target parity. Multi-hit supers depend on the capture window and spacing; they are shown as measured fixtures, not universal combo totals.

Exhibit 5

The latest CPS‑2 test proves 80 damage units across two heavy and two super routes

Connected target damage by route in the automated contact fixture.

connected
  1. standing HP11 damage

    1 hit

  2. crouching HP11 damage

    1 hit

  3. Ultimate route34 damage

    9 hits

  4. Cyber-Elf route47 damage

    9 hits

Latest ROM run. Light/medium routes are excluded from the total because their active-box gate is zero, not because the test forgot them.

The source-to-target translation normalizes damage by life: SVC's 225-unit bar becomes MvC's 300-unit bar. Boxes invert the forward X axis and scale horizontal geometry by 6:5. That is enough to author the tables, but not enough to import a projectile helper or a move dispatcher. Zero's voice and move sounds also require a separate ADPCM/YM2610-to-QSound asset and Z80 command map.

Inspection: show what passed—and what still looks wrong

clip · loops
Current research reel // 1,033 captured frames · 34.43 seconds · input-driven movement, normal, special, and super routes · synchronized target QSound. The visible donor effects and failed short attacks are part of the evidence, not edited out.
Zero performing a standing heavy attack inside Marvel vs Capcom
Passing contact family // source body + authored box row
Zero performing a large crouching saber attack inside Marvel vs Capcom
Effect-row inspection // source saber light separated from body palette
Zero presenting a special-move frame inside Marvel vs Capcom
Special inspection // body translated; child helper still donor-owned
Zero presenting an extended green saber effect inside Marvel vs Capcom
Super inspection // expanded source timeline in a donor hyper route

The current stills are real emulator pixels, not composited concept art. They also are not selected to hide the remaining problems: some light attacks return to idle before their active frame, the large select portrait still belongs to Mega Man, and compound saber effects need further palette and object separation. The buster shot remains parent-body evidence only; its child projectile, impact behavior, and sound are not SVC Zero's native helper system.

The chart design uses numbered exhibits, finding-first titles, direct labels, one highlighted comparison, and a method note beneath every chart. The distinction that matters is between a declared artifact and an observed result: authored ROM data is the declaration; a connected, input-driven test is the realized proof.

Final inspection punch list

  • Extend or replace Mega Man's short-action dispatcher so all Zero light and medium active phases execute.
  • Split shared donor dispatchers—especially the $158B34 throw/Beat Plane collision—so one target chain can no longer impersonate two Zero actions.
  • Relocate the five overlapping interior aliases that cannot accept independent 20-byte redirects in place.
  • Replace donor command grammar, velocity, cancels, remaining guard/stun/throw/incoming/KO aliases, wakeup, and win states.
  • Import source projectile/helper objects and prove their collision independently from the body.
  • Finish effect palette/object separation for every saber and Cyber-Elf frame.
  • Port Zero's voice and move cues into the QSound sample and command path.
  • Replace the large select portrait and remaining Mega Man identity surfaces.
  • Run every normal, dash, special, and super on both sides of the screen against stand, crouch, air, block, and counter-hit fixtures; publish only the footage that passes.

The hover and the reported Mega Man fallbacks were defects, and the measured routes above are now repaired. The broader verdict remains deliberately strict: 36.42% chain ownership is not a full port, and source-looking supers are not source-native supers while helpers and audio are still borrowed. The inspection found a load-bearing donor wall, which is precisely why the experiment is more interesting than a sprite swap: it shows where one arcade game's idea of a character stops and the other game's begins.

Written by Daniel Plas Rivera · 3,839 words · $22

ShareXLinkedIn