Four players, four fighters, one arcade board. The Dreamcast Marvel vs. Capcom had it. The CPS-2 board never did. Now it does, in X-Men vs. Street Fighter, Marvel Super Heroes vs. Street Fighter and arcade MVC1.
Five modes for your own ROM, with checked installers and platform setup packages. Three of them put four people on one board. The other two give XMvsSF and MSHvsSF the Duo they never had: QCB + HP + HK, your point strikes its pose, your partner flies in, and you fight with both. The timed modes run under MVC1's meteor sky with MVC1's TIME bar and ∞, and 1P to 4P markers show who is playing whom.
44playerson one CPS-2 board, each on their own controller
33gamesXMvsSF, MSHvsSF and arcade MVC1
55ways to playMVC1 adds matched cores for three platforms
00bytesof ROM expansion
All five are previews. The footage keeps its recorded MAME build identity. MVC1's matched-core packages have their own installation and build checks; their current tested scope is linked with the files. Four physical controllers, CPS-2 cabinet wiring and Fightcade/GGPO netplay are untested. The two XMvsSF builds have known issues from play, listed in the fine print and with their downloads. Keep your original ROM, and use one patch at a time on a clean set, never on top of DHC or another patch.
$NEW · start here
MSHvsSF 4P v5 · frame 6660
What's Cross Fever?
The Dreamcast Marvel vs. Capcom had it: two teams of two, every fighter on their own controller, all four on screen at once. The arcade boards never did. Now X-Men vs. Street Fighter, MSHvsSF and MVC1 do, from your own ROM.
XMvsSF 1v1 v3 · frame 8063
What's a Duo?
MVC1's Duo Team Attack. QCB + HP + HK: your point strikes its pose, your partner flies in, and you fight with both at once until the timer runs out, with the meter reading ∞. XMvsSF and MSHvsSF never had it, so they get it here, over MVC1's meteor sky.
MVC1 first prototype · four controllers live
How do four controllers reach the game?
The new MVC1 core translates the board lines internally: bind six ordinary attacks on each port; Start/Coin are unused as game inputs. XMvsSF and MSHvsSF previews still need their own four-controller profile. The 1v1 Duo patches keep ordinary two-player controls.
$01
Watch the trailer.
All five previews in about three minutes: XMvsSF first, then MSHvsSF and MVC1.
Cross Fever v2 trailer: XMvsSF, MSHvsSF and MVC1YouTube ↗
Every take is one of these preview builds running in MAME with ordinary inputs, at the CPS-2's own frame rate, never slowed or sped up. The panels at the sides are the players' sticks, drawn from each take's input log. The trailer is a cut, not evidence: the stills and packages on this page are.
$02
What it does.
Four pieces. Every clip says which build it shows: a preview build, or the first prototype where only it has the footage.
MVC1 · first prototype · four controllers live
01
01FOUR CONTROLLERS
Everybody gets a stick.
Each fighter answers to one controller, and a tag changes who is on point without transferring ownership. Current MVC1 V3 pairs P1/P2 against P3/P4; the XMvsSF/MSHvsSF packages retain P1/P3 against P2/P4. This clip is the first MVC1 prototype with its original controller order and four simulated inputs drawn below the game, not a V3 acceptance run.
XMvsSF · 1v1 Duo preview v3 · MAME run, real time
02
02THE DUO
Two fighters, one player.
In XMvsSF and MSHvsSF, QCB + HP + HK plays MVC1's start: your point strikes its pose, your partner flies in, and you steer both until the TIME bar runs out. One motion drives both: here QCF + LP + MP fires Wolverine's Hyper and Cyclops's at once. Behind them is MVC1's meteor sky, the background MVC1 gives its own Duo, and the level meter reads MVC1's ∞ while the mode runs. QCF + HP + HK is still the team Hyper.
XMvsSF · four-player preview v2 · MAME run, real time
03
03FOUR ON SCREEN
Two-on-two in XMvsSF.
Four players in X-Men vs. Street Fighter: P1 and P3 against P2 and P4, a TIME bar and an ∞ for each team, and 1P to 4P over the fighters so everybody can find their own. Every fighter still answers to its own controller: here P2's Charlie, P3's Storm and P4's M. Bison each fire a Hyper from their own stick.
MSHvsSF · 1v1 Duo preview v5 · MAME run, real time
04
04MVC1'S START
The pose, the cut-in, the fly-in.
MSHvsSF now starts the mode the way MVC1 does. Your point strikes its pose with its voice and can't be hit during it, MSHvsSF's own team-Hyper cut-in plays with both portraits, then your partner flies in from behind with its own attack. Nothing is taken at the start: the meter reads full while the mode runs and costs two bars when it ends. Here Chun-Li calls in Sakura against Wolverine.
$03
Five ways to play.
Pick the game, then the 1v1 Duo or four players. One installer each, on its own clean ROM.
▸ SELECT2 players · v3
XMvsSF 1v1
X-Men vs. Street Fighter
A normal two-player match with MVC1's Duo added: the pose, the fly-in, and both fighters on your stick.
QCB + HP + HK: your point strikes its pose, then your partner flies in
You steer both until the TIME bar runs out; one motion fires both Hypers
MVC1's meteor sky, TIME bar and ∞, with 1P and 2P over every fighter
Ordinary two-player controls · Euro xmvsf.zip (961004)
V3 pairs P1/P2 against P3/P4 with fixed six-button inputs and a new matched core. Simulated controls passed; physical controllers and four-machine internet play remain unverified.
HP + HK joins; P1/P3 select first fighters, P2/P4 select second fighters and helpers
Y/X/L = LP/MP/HP; B/A/R = LK/MK/HK on every port and input preset
QCB + HP + HK: independent Duo; QCF + HP + HK: Team Hyper; ownership stays with each fighter
Your full clean Euro mvsc.zip (980123) including genuine mvsc.key, 64-bit RetroArch and the matched platform package below
1v1 the Duo, two players ·4P four players, one fighter each
Controls, side by sideplayers · controllers · joining · the timed mode · markers, for all five
Setting
XMvsSF 1v1
XMvsSF 4P
MSHvsSF 1v1
MSHvsSF 4P
MVC1 4P
Players
2
4 · P1/P3 vs. P2/P4
2
4 · P1/P3 vs. P2/P4
4 · P1/P2 vs. P3/P4 (MVC1 V3)
Controllers
Ordinary two-player
Four-controller profile
Ordinary two-player
Four-controller profile
V3 matched core: Y/X/L punches, B/A/R kicks on all four ports
Join
Normal select
HP + HK outside combat; P1 and P2 pick first, P3 and P4 second
Normal select
HP + HK outside combat, then pick a fighter
HP + HK, then release. P1/P3 first fighter; P2/P4 second fighter and helper
Timed mode
QCB + HP + HK · you control both
QCB + HP + HK
QCB + HP + HK · you control both
QCB + HP + HK
QCB + HP + HK
How it starts
Pose, XMvsSF's team-Hyper freeze, partner flies in
Pose, XMvsSF's team-Hyper freeze, partner flies in
Pose and voice, MSHvsSF's team-Hyper cut-in, partner flies in
Pose and voice, MSHvsSF's team-Hyper cut-in, partner flies in
MVC1's own Variable Cross
Team Hyper
QCF + HP + HK (Variable Combination)
QCF + HP + HK (Variable Combination)
QCF + HP + HK
QCF + HP + HK
QCF + HP + HK
Background
MVC1's meteor sky
MVC1's meteor sky
MVC1's meteor sky
MVC1's meteor sky
MVC1's own Cross background
Mode timer
MVC1's TIME bar
MVC1's TIME bar, one per team
MVC1's TIME bar
MVC1's TIME bar, one per team
MVC1's own TIME bars
Level meter
MVC1's ∞ while the mode runs
MVC1's ∞ while the mode runs
MVC1's ∞ while the mode runs
MVC1's ∞ while the mode runs
∞ while the mode runs (MVC1's own)
Markers
1P and 2P over every fighter
1P to 4P over every fighter
1P and 2P over every fighter
1P to 4P over every head
1P to 4P over every head
As in MVC1's own Duo, the timed mode needs two levels of meter. Nothing is taken when it starts; the meter reads full while it runs, and when it ends it costs two full bars (a partly filled third is kept). A Level 3 start runs longer and empties the meter. The TIME bars count the mode down, separate from the round clock. MVC1 V3 uses P1/P2 versus P3/P4 and fixed RetroPad Y/X/L punches, B/A/R kicks; Start/Coin are unused as game inputs. The XMvsSF/MSHvsSF packages and historical MVC1 clips retain their labeled controller order.
$04
Install it.
XMvsSF and MSHvsSF: drop your clean ROM zip on the installer. MVC1 four players: the matched core package for your computer.
PREVIEW · FIVE MODES
Keep each game's files together.
Each installer takes one clean parent: the Euro xmvsf.zip (961004) for XMvsSF, the USA mshvsfu.zip (970827) or the Euro mshvsf.zip (970625, the set Fightcade runs) for MSHvsSF, with an installer for each, or the Euro mvsc.zip (980123) for MVC1. It checks every member before it writes anything, and refuses sets that are already patched.
01Put both files in one folder.Your clean ROM zip and the .cmd you downloaded. Any folder works.
02Drag the zip onto the installer.A window opens, checks the zip member by member, then writes the patched zip next to your original. Hit Enter when it finishes.
03Copy it into your roms folder under the original name.Rename the copy xmvsf.zip, mshvsfu.zip or mshvsf.zip, because these setups load that name. Keep your clean copy somewhere else.
04Set up the sticks and play.The XMvsSF and MSHvsSF four-player patches need the four-controller CPS-2 profile. The two 1v1 Duo patches play on ordinary two-player controls.
MVC1 · FOUR PLAYERS · v3-preview
MVC1 V3: one matched game, four fixed ports.
Build directly from your clean stock Euro parent with its original key. V3 uses adjacent-port teams and its own uniquely named core, FBNeo (MVC1 Cross Fever V3), version v1.0.0.03 261015 GITv3preview. Keep it separate from V2.2, DHC and other patches. The launcher preserves your preferences and retains diagnostics; it does not establish internet-play acceptance. The generated name is mvsc4p.zip; keep it.
Set up on Windows x64Windows 10/11 x64 and 64-bit RetroArch. No Python or compiler required. Native Windows execution remains unverified.
Extract into a fresh folder and supply full clean Euro mvsc.zip (980123), including its original mvsc.key. Drag it onto BUILD.cmd.
Keep output/mvsc4p.zip and its receipt. With RetroArch closed, run PLAY.cmd. Verify the V3 core name/version before configuring the four ports.
Assign each local port a distinct Device Index; check all six attacks. HP + HK joins, then release. For diagnosis run CHECK.cmd and retain the files under logs/.
Set up on macOS · Apple siliconmacOS 26+, arm64 RetroArch, Python 3 and a local filesystem supporting hard links (APFS/ext4/NTFS).
Extract into a fresh folder and supply full clean Euro mvsc.zip (980123), including its original mvsc.key. Run python3 install.py /path/to/mvsc.zip.
Keep output/mvsc4p.zip and its receipt. With RetroArch closed, run python3 play.py. Verify the V3 core name/version before configuring the four ports.
Assign each local port a distinct Device Index; check all six attacks. HP + HK joins, then release. For diagnosis run python3 diagnose.py and retain the files under logs/.
Set up on Linux x64Ubuntu 22.04-compatible x64 runtime, RetroArch, Python 3 and a local filesystem supporting hard links. Native desktop frontend acceptance remains open.
Extract into a fresh folder and supply full clean Euro mvsc.zip (980123), including its original mvsc.key. Run python3 install.py /path/to/mvsc.zip.
Keep output/mvsc4p.zip and its receipt. With RetroArch closed, run python3 play.py. Verify the V3 core name/version before configuring the four ports.
Assign each local port a distinct Device Index; check all six attacks. HP + HK joins, then release. For diagnosis run python3 diagnose.py and retain the files under logs/.
Validation scope and online limitscontrollers and ports · simulations · what is still unverified
Controllers: P1 + P2 versus P3 + P4. P1/P3 select the first fighter; P2/P4 select the second, helper and team order. RetroPad Y/X/L = LP/MP/HP and B/A/R = LK/MK/HK on every port and preset; L2/R2 are optional PPP/KKK. Give local ports distinct Device Index assignments. HP+HK joins, then release; HP+HK tags, QCF+HP+HK is Team Hyper and QCB+HP+HK is Duo with at least two bars. Each fighter keeps its independent owner.
Patch data and matched emulator core only; no game ROM, key or saved state. Required stock members and all 21 output members are checked by content. Simulated compiled-input tests passed 4,023 observations across three repetitions; bounded confirmation/helper/ownership and three 10,269-frame lifecycle runs passed. Actual RetroArch 1.10.3 arm64 on macOS 26.5.2 booted and rendered the V3 game. Linux-container and Windows-DLL-under-Wine smoke passed selection, combat and tags. Bounded game-RAM replay passed, but the first restored video frame and 749 serialized QSound bytes differed; an exact V2.2 Linux control reproduced this. Full audiovisual/state determinism, physical controllers, native Windows execution, full-roster/performance acceptance and four-machine internet match/rematch remain unverified. Stock Fightcade rooms do not provide four-player hosting.
MVC1 V3: check the game, then the four ports.
V3 puts teammates on adjacent ports: P1 + P2 against P3 + P4. Older V2.2 games use P1 + P3 against P2 + P4. The V3 ROM and core belong together; changing a filename does not upgrade either.
V3 candidate03 · both teams in Duo · simulated ordinary controller inputs, no gameplay memory writes. This is a current V3 capture; the older videos retain their original version labels.
Before playing
Required core
FBNeo (MVC1 Cross Fever V3)
Core version
v1.0.0.03 261015 GITv3preview
Generated game
mvsc4p.zip
After launching, open Main Menu → Information → Core Information and check the core name and version. Load the generated game from this package’s output folder. Keep the installer receipt with it; the filename alone cannot identify the game version.
These are RetroPad labels, not the letters printed on your controller. Modern, Classic and 6Panel keep this same mapping. L2 is optional PPP; R2 is optional KKK. In Settings → Input → RetroPad Binds, assign each local controller its own Device Index. Then check Quick Menu → Controls → Port 1–4 Controls. Verify all six attacks separately before trying macros; Start and Select/Coin are not game attacks.
From joining to the next match
Stage
Input and ownership
Join
Press HP + HK, then release both. Free play does not need Coin or Start.
First fighter
P1 chooses for Team 1; P3 chooses for Team 2. Move with directions; any of the six attack buttons confirms a fighter and its color. The other ports wait.
Second fighter / helper
P2 chooses for Team 1; P4 chooses for Team 2. Hold the desired six-button helper shortcut through second-fighter confirmation. Release for normal helper roulette; any fresh attack stops it. No Start button is needed.
Speed / team order
The eligible first-fighter owner, P1 or P3, controls the stock shared speed prompt under native admission rules; these are not separate team speed choices. P2 and P4 control their team’s order.
Fight / tag
Directions and six attacks control your fighter. HP + HK requests a tag; control stays with the incoming fighter’s owner.
Duo
QCB + HP + HK, with the required meter. Each teammate keeps independent directions, attacks and command history. QCF + HP + HK remains Team Hyper.
Expiry / KO / rematch
Ownership must remain with the same port. A surviving teammate does not inherit the other player’s controller.
If it will not launch, or the wrong fighter responds
Run CHECK.cmd on Windows or python3 diagnose.py on macOS/Linux. The report checks the package, ROM/core hashes and saved controller configuration; it does not prove which controllers are physically attached or which core is running. The launcher keeps a verbose RetroArch log and a redacted support report in logs/. Compare those with Core Information before sending a report.
Core or game mismatch: check the name and version above, the package filename, and the output receipt. A stock FBNeo core or an older Cross Fever core is a different setup. Keep the V3 pair in its own folder.
Missing ROM/CRC error: read the diagnostic report’s game-member checks. Renaming a stock or older patched ZIP to mvsc4p.zip does not make it V3; build a fresh copy with this package’s installer.
A missing button or duplicate controller: check each port’s Device Index and six individual attack bindings. Reset stale game/core remaps in a separate clean configuration before trying the same input again.
Selection appears stuck: use the port assigned to the current selection stage. Release the join chord before confirming a choice; holding HP + HK is not a fresh confirmation.
For a useful report, include your OS, RetroArch version, package filename, Core Information screen, output receipt, each port’s Device Index and button bindings, the stage where it fails, and the exact input. A report from an unspecified older package is not proof of a V3 regression.
What the checks prove
The pinned V3 checks passed 4,023 compiled input observations over 3 repetitions, 24 character confirmations, 44 helper commits and 16 wrong-owner/held-input cases. The input total checks delivery to the ports; it does not mean every button combination executes a legal move. The character checks are bounded, not full-roster acceptance.
Simulated four-player inputs can verify which port reaches each fighter and selection stage. They do not verify four physical controllers, USB devices, four separate machines, internet latency or an online rematch. A same-host netplay run is a separate, narrower check.
Save/load limitation: bounded game-RAM replay checks passed. Linux and the Windows DLL under Wine still differed on the first restored video frame and 749 serialized QSound bytes; the retained V2.2 Linux control reproduced both differences. Full audiovisual/state determinism, rollback and real internet play have not passed acceptance.
Control switching, three-human play and a classic shared-control option remain separate requests. V3 keeps independent Duo control. The Classic input preset does not enable classic shared control or transfer fighter ownership.
UpdatedOct 15, 2026StatusPreview · each package states its tested scopeParentsEuro xmvsf 961004 · USA mshvsfu 970827 · Euro mshvsf 970625 · Euro mvsc 980123
Every file and its SHA-256the five installers · evidence packages · MVC1 core packages and sources
The fine printwhat it needs · the four-controller profile · what it never does · what preview means · known issues · the terminal install
Before you startXMvsSF needs the Euro xmvsf 961004 set. MSHvsSF needs the USA mshvsfu 970827 set or the Euro mshvsf 970625 set, the one Fightcade runs, each with its own installer. MVC1 needs the Euro mvsc 980123 set. All must be unpatched. Don't run an installer on a set that already carries DHC, another Cross Fever patch, or a different region.
The four-controller profileThe native free-play layout uses Start and Coin lines for medium and heavy kick on all four ports. MVC1's matched core translates these board lines internally: bind the six attacks as ordinary buttons, and leave Start/Coin unused in that game. The XMvsSF and MSHvsSF four-player previews still need their own four-controller profile. Stock Fightcade2 inputs can't drive P3 and P4.
What it never doesIt doesn't write to your input file, doesn't download a ROM, and doesn't make the ROM bigger. No ROM, key or save state is included. MVC1's separate runtime packages include the matched emulator core, its license and source information. Other patched games may warn when loaded against stock checksum definitions. MVC1 V3's matched core checks its exact patched members: a missing-ROM or CRC mismatch is an error to diagnose, never a warning to bypass.
What preview meansEach download has its own build and test record. Installer checks, simulated game inputs, physical controllers and internet play are separate checks; earlier results stay attached to their original binaries. A same-host netplay test does not establish a match or rematch between four machines over the internet. Full roster, lifecycle and performance coverage depend on the exact build. Four physical controllers, cabinet wiring and four-machine internet play remain unverified. None of this is claimed until it has run.
Known issues in XMvsSFFound in play on the Duo v3 and four-player v2 builds, and being fixed for the next ones: the start skips XMvsSF's slide-in team-Hyper portraits and the characters' team-Hyper voices; during the mode a fighter can walk through an opponent; some Hypers (Rogue's, Cammy's, Sabretooth's) can drop their target after the first hit; and stage props and animated stage pieces can show over the meteor sky.
Terminal, or macOS / LinuxFor the XMvsSF and MSHvsSF CMD installers, PowerShell in the folder with both files: & ".\xmvsf-cross-two-human-v3-preview.cmd" ".\xmvsf.zip", substituting that game's installer and stock ZIP. Their evidence packages include Python patchers; use each README's command. MVC1 V3 uses its platform package instead: BUILD.cmd on Windows or python3 install.py /path/to/mvsc.zip on macOS/Linux, as shown above.
$05
Frame by frame.
Six stills from each preview build's own MAME run, in order: ordinary controller inputs, no memory writes, and the frame number on every shot. Pick a build.
The Duo comes to XMvsSF.
Build xmv-two-human-full-02 · SHA-256 4e8c1255ff34… 6 stills from a MAME run of the v3 build · ordinary inputs, no memory writes
FRAME 7700Before: Wolverine vs. Ryu, both at Level 3
FRAME 7775QCB + HP + HK: Wolverine strikes his pose
FRAME 7800Cyclops flies in: the sky, the TIME bar, the ∞
FRAME 7860Wolverine and Cyclops, both on P1's stick
FRAME 8063One motion, two Hypers: Wolverine's and Cyclops's
FRAME 8905Time is up: Cyclops leaves, the stage comes back, the meter reads 0
Four players in XMvsSF.
Build xmv-four-human-full-02 · SHA-256 00f4c4b7c493… 6 stills from a MAME run of the v2 build · four controllers wired at the input ports · no memory writes
FRAME 7040Before: Gambit (1P) vs. Akuma (2P), both at Level 3
FRAME 7130P2's team goes first: Cammy (4P) flies in over the sky
FRAME 7380P1's team answers: Rogue (3P) lands, two TIME bars, two ∞
FRAME 7480Gambit's Hyper, from P1's stick
FRAME 8230Rogue's Hyper, from P3's stick
FRAME 8530Both timers out: Rogue and Cammy leave, the mall comes back
MVC1's start, in MSHvsSF.
Build msh-two-human-v5-08 · SHA-256 0db769fb7fe0… 6 stills from a MAME run of the v5 build · ordinary inputs, no memory writes
FRAME 8300Before: Chun-Li vs. Wolverine, Level 3
FRAME 8355QCB + HP + HK: Chun-Li strikes her pose
FRAME 8380MSHvsSF's own team-Hyper cut-in
FRAME 8430Sakura flies in: the sky, the TIME bar, the ∞
FRAME 8620One motion, two Hypers: Chun-Li's and Sakura's
FRAME 9460Time is up: Sakura stays on point, the stage and the level digit come back
Two teams, two TIME bars, 1P to 4P.
Build msh-four-human-v5-08 · SHA-256 1eae68c98388… 6 stills from a MAME run of the v5 build · four controllers wired at the input ports · no memory writes
FRAME 6340Before: Akuma (1P) vs. Cyclops (2P), both at Level 3
FRAME 6480P2's team goes first: Hulk (4P) flies in
FRAME 6660P1's team answers: Dhalsim (3P) flies in, all four on screen
FRAME 6790Akuma's Hyper, from P1's stick
FRAME 7220Dhalsim's Hyper, from P3's stick
FRAME 7950Both timers out: Dhalsim and Hulk stay, the stage and both digits come back
MVC1 four players, now with markers.
Build mvc1-four-human-markers-01 · SHA-256 3e8adfab99f5… 6 stills from a MAME run of the v2 build · four controllers wired at the input ports · no memory writes
FRAME 4920Before: Mega Man (1P) vs. Venom (2P)
FRAME 4995QCB + HP + HK: MVC1's own Variable Cross cut-in, Gambit and Venom
FRAME 5040Gambit (4P) flies in under the meteors
FRAME 5230Jin (3P) joins: all four fighters, two TIME bars
FRAME 5475Venom's and Gambit's Hypers at once, each from its own stick
FRAME 5900Jin's Hyper, from P3's stick
$06
Share it.
One line and the link. Copy it, or post it straight to X.
ready to post
Cross Fever for arcade X-Men vs. Street Fighter, MSHvsSF and Marvel vs. Capcom: four players on one CPS-2 board, and MVC1's Duo with its pose, fly-in, meteor sky and ∞ meter. Free patches for your own ROM.
The first captures, from builds before the downloads. Kept with the build each one came from.
MSHvsSF · four players, first timed buildmsh-timed-03 · 771 frames · silent
Ryu and Ken against Spider-Man and Captain America. 771 consecutive frames, 5120–5890, at 59.63 fps, from an ordinary input replay with no interpolation. The four panels are the four controllers, and the timer numbers under the game are diagnostic notes. In the full recording all four stay active across 997 sampled callbacks. The older ownership-only build, given the same inputs, overlaps all four for just 17 and never starts the mode. This build predates the in-game HUD and the four-person select.
MVC1 · four players, first native buildnative-freeplay-01 · 620 frames · silent
Zangief and Ryu against Spider-Man and Captain America during simultaneous Variable Cross, meteors behind them. The original 294-byte build: 620 consecutive frames, 5100–5719, at 59.63 fps, with the same-frame controller overlay and no interpolation. It predates the translated timer and the later join fixes.
HOW IT WORKSWhy a team isn't a controller, how the board reads four players, and what got tested.+
The MVC1 V3 update puts P1 + P2 on Team 1 and P3 + P4 on Team 2.
P1 and P3 choose the first fighter; P2 and P4 choose the second fighter and
helper. The six attacks use the same RetroPad buttons on every port:
Y/X/L = LP/MP/HP, B/A/R = LK/MK/HK. Each fighter keeps its own human
owner during Duo. Switching owners, three-human play and classic shared control
remain separate design requests.
A fresh V2.2 check reproduced a concrete mapping error in its Modern preset:
RetroPad L delivered PPP and R delivered HP instead of the advertised HP/HK.
V3 uses the fixed six-button layout across Modern, Classic and 6Panel. This
finding does not identify the cause of a separate launch report that did not
name its package or core.
Use the current installation and control guide
to identify the package, loaded core, game receipt and four port assignments.
A launch report without those details cannot establish which version failed.
Feedback explicitly tied to the first version stays first-version evidence;
a later report that does not identify its package or core needs its own reproduction.
V3 requires its corresponding ROM and core. V2.2 uses the older P1/P3 versus
P2/P4 pairing. Its release record
and test results remain archived.
V2.2 fixed a core-name mismatch and exercised four RetroArch 1.22.2 instances
on one Linux machine through a local lobby and relay stand-in. That was not a
match between four machines over the internet. Simulated input checks, physical
controllers, and a real internet match plus rematch remain distinct claims.
How it works
The sections below preserve the earlier development record and its original
builds, controller numbers and footage. They explain why a team is not a
controller and how each engine got its timed mode; they are not V3 acceptance results.
One feature contract, two implementations
The shared command layout assigns QCB + HP + HK to the timed mode: quarter-circle back with heavy
punch and heavy kick. QCF + HP + HK, quarter-circle forward with those same
buttons, keeps the existing team Super. MVC1 already has Variable Cross as the
foundation; MSHvsSF needs a new sustained mode around its own partner logic.
The command and feature contract are shared, not the games' addresses or code.
Requirement
MVC1 evidence so far
MSHvsSF evidence so far
A human stays with their fighter through a tag
Native four-controller prototype; all 15 standard characters receive all six attack buttons in sampled runs
Both teammates remain freely controlled; both teams can create sustained 2v2
Simultaneous Variable Cross captured and sampled; short-input loss still blocks acceptance
New timed mode captured; current combined08 also passes 264/264 sampled inputs after partner entrance
QCB timed mode; QCF team Super retained
Uses the existing Variable Cross path; broader command/lifecycle cases remain open
QCB activates the new mode; QCF retains its prescribed team Hyper in the bounded comparison, with a measured timing difference
A mode countdown for each team, separate from the round clock
Alternating countdown measured; native TIME display traced
Original blue MVC1 frame/masks rendered in 11; 22,900 opaque pixel comparisons across 14 screenshots match exactly
MVC-style meteor presentation while the mode runs
Native activation, palette animation and final restoration traced in one ordinary-input run
Not ported; the first lossless packing proposal conflicts with existing stage graphics
Clean expiry, KO and return to ordinary tag play
Natural expiry, repeated cycles, joins and a rematch observed; full lifecycle matrix open
In 11, one natural point KO restores the living partner's P4 controls; the other timer continues and palettes restore after expiry. Full-round and broader KO cases remain open
This table records the early prototypes, before the later meteor and control
updates. It is not the current V3 release checklist. The detailed results below stay attached to the exact build
that produced them.
A team is not a controller
Both arcade engines already know that two fighters belong to one team. That team
identity affects much more than buttons: opponents, projectiles, meter, tags,
and who can hit whom.
Giving the partner another controller must not turn them into a third team.
The change needs a separate owner for each fighter's inputs while preserving
the game's two-team rules. A tag changes who is active, not which human owns
the character. Pressed and released buttons also need their own history; copying
only the held buttons can manufacture a command at the moment of a tag.
Situation
Intended four-player behavior
Ordinary play
The active fighter's owner controls that fighter.
A tag
The other fighter enters under their own owner's controls.
One team's timed mode
Both teammates can enter different directions and attacks.
Both teams' timed modes
All four owners can act independently in the same frame.
Mode expiry or a knockout
The game's team lifecycle restores a valid point and partner.
The last row matters as much as the spectacular one. Four moving characters
are only a start if the game loses control of a partner when the timer ends.
The board has four-player inputs, with a catch
The MAME CPS-2 driver
describes both four-player games and six-button fighting games. Those are not
the same wiring arrangement. The extra lines used for players three and four
also carry kick inputs in the usual two-player fighter setup.
Both input prototypes use four direction-and-four-button groups,
then repurpose start and coin lines for the remaining two buttons per person.
These are active-low hardware inputs: bits 0–3 in each controller byte are
Right, Left, Down and Up; bits 4–7 are LP, MP, HP and LK.
Human
Directions + LP / MP / HP / LK
MK
HK
MVC1 fighter object
P1
IN0 ($804000), low byte
IN2 bit 8
IN2 bit 12
$FF3000
P2
IN0, high byte
IN2 bit 9
IN2 bit 13
$FF3400
P3
IN1 ($804010), low byte
IN2 bit 10
IN2 bit 14
$FF3800
P4
IN1, high byte
IN2 bit 11
IN2 bit 15
$FF3C00
IN2 is at $804020. Its service and EEPROM bits retain their meaning. Teams
are P1/P3 versus P2/P4; the extra humans are partners, not extra teams.
These MVC1 actor addresses do not carry over to MSHvsSF; that engine uses
its own object layout. The controller wiring is the shared input profile.
Consuming the start and coin lines requires a separate joining policy. MVC1
implements free play: a fresh HP+HK chord joins the team, and both buttons must
be released before another join. Each human owns a character-selection cursor.
The MVC1 join-fix build
also permits joining during the attract demo and lets an unjoined team
challenge an existing game; joined players keep ordinary combat HP+HK.
The first build had a subtle bug: holding the chord across a natural timeout
could invent a Start press on the first victory frame. The new reader tracks
the combat boundary and keeps that controller's latch set until both buttons
release. All 14 bounded join checks pass, including partial release, fresh
repress, selection, tags and held-through-reset behavior. A chord newly pressed
on the exact exit boundary also needs release and repress; that conservative
policy is explicit, not an inferred Dreamcast rule. The stock Test menu opens.
MSHvsSF now has its own selection and join implementation, with 44 scoped
checks on the later combined build. Its combat footage above predates that
integration.
The arrangement still needs an explicit cabinet pin map and a simultaneous-input
check. An emulator exposing four controllers does not prove that a particular
cabinet harness can carry them, especially if a coin interface stretches switch
pulses instead of preserving attack-button timing.
Phoenix packaging is a different problem. Decrypted code can help a board boot
without its original encryption setup. It does not add controller inputs or
make Dreamcast instructions executable by a CPS-2 processor.
Bring over the behavior, then write for the target
Dreamcast and CPS-2 use different processors. A Dreamcast routine cannot simply
be dropped into the arcade program. The useful things to recover are the rules:
controller assignment, partner admission, command history, timer handling,
knockouts and the return to ordinary tag play.
MVC1 is a promising target because its native Variable Cross already puts both
teammates into the fight. The investigation follows that path, then audits the
places where the arcade engine assumes both teammates share one input stream.
The intended result is a ROM-side control path using the board's input ports,
not an emulator watching a tag and swapping two people's buttons.
What the Dreamcast binary actually shows
The stock USA Dreamcast executable examined here is the 4,930,596-byte 0.BIN,
with SHA-256
785c8691e7c2a0fcbeeef6c478db960fef7c354cd9eb9bb6d6fd7b5b92526db5.
The load base is $8C010000; these are little-endian SH-4 addresses.
Static finding
Address and meaning
Four physical controllers are polled
$8C0110A0 calls $8C0110C2 for all four indices. Records at $8CC91B30 + index × $20 keep separate current, previous and edge inputs.
The four-controller route preserves both teammates
In the distributor at $8C015644, the nonzero $8C4EC06C path at $8C01583A pairs ports 0/2 and 1/3. Selector bytes $8C4EC06D/E exchange primary and other-member routes.
Input is chosen for the actor being processed
$8C029E40–$8C029EB8 selects by actor side byte +3 and primary/other-member byte +$275, then passes current/previous words through the actor's command parser to +$CE/+$D0.
A menu path enables this distribution
Entry 4 at $8C05529C checks four-controller availability and writes 1 to $8C4EC06C at $8C0552B0.
This short semantic excerpt describes the recovered routing; it is not portable
source code or a replacement for the separate runtime observations:
poll controller[0..3], retaining each current / previous / edge recordwhen the four-controller flag is set: team A receives ports 0 and 2 team B receives ports 1 and 3for the actor being processed: choose that side's primary or other-member input stream run the actor's ordinary command parser
The candidate activation window at $8C02DD70–$8C02DD9E also gives a concrete
timer calculation: it indexes [0, 192, 384, 576] by actor level byte +$26C,
adds half the unsigned word at +$26A rounded down, and stores the result at
+$50. That proves arithmetic in this binary. It does not establish seconds,
hitstop behavior, the command that reaches it, or observed four-human gameplay.
The separate Dreamcast diagnostic trace has observed four input streams,
a tag, both-team activation and two visible TIME bars. Broader knockout and expiry variants still need
captures. The donor's Cross Fever countdown uses an alternating game-counter
bit, while ordinary mode decrements on each eligible call. The latest MVC1
build translates that rule and measures its executed timer path; the MVC1 video
above still shows the older stock-timer candidate. This does not establish
complete Dreamcast timing parity. Expiry can remove either the activator or the
partner depending on state; one observed exit is not a universal rule.
The countdown and background are separate work
The mode's countdown answers a different question from the round clock:
how long may this team keep both fighters active? Each team needs its own
visible remaining-time display, including when one team activates later than
the other. A change to countdown arithmetic alone does not establish that the
right bar appears, updates, pauses and clears in every mode transition.
In the Dreamcast binary, $8C02DE14–$8C02DE24 and
$8C02DEAA–$8C02DEBA mirror actor time into side words $8C4EBB3A/3C and enable
side bits at $8C4EBB3E. The recovered HUD consumers use those words, and the
diagnostic capture shows two TIME bars. A separate consumer at $8C05C438
appears to drive controller peripheral effects; it is not evidence of a meteor
background renderer.
The sustained backdrop must also be distinguished from the short Hyper
activation flash. The later CPS-2 MVC1 investigation identifies its tilemap,
palette animation and background-union cleanup. Those findings come from
native arcade execution and graphics analysis, separately from the Dreamcast
controller and timer findings.
MVC1: build the native control path
The measured baseline is stock MVC1 Euro 980123, archive SHA-256
fbb9c9a0fc44c6f26481cc018bdd13d9aac5376806e736c428c4b54b274c032c.
Its decoded opcode image is pinned separately as
7ede16dc56ffbefe899f98608c6b0a01f2304cd3e8c46da9f912ee0b9bcf7490.
The initial input spike uses 162 bytes at $3F1000 inside the existing
4 MiB program region, with no expansion ROM or additional work RAM. It replaces
the sampler at $000D12 and the human-input selector at $01368E, choosing
the controller by the fighter object's stable address. Team byte +02, human
flag +03, point/partner role +$281, and the existing input histories at
+$D0–+$DA remain part of the stock engine.
The filmed native-freeplay-01 candidate expands the native reader and menu
integration to 294 bytes, still within the stock 4 MiB program region with
no additional ROM or work RAM. It uses the existing free-play initialization
path and retains separate join-release latches.
The next timer-only build, native-cross-fever-01, occupies 330 bytes.
The pinned native-cross-fever-02 combines that timer with the join fixes in
418 bytes, still using the stock 4 MiB program and existing work RAM.
It retains the stock activation, meter and exit paths. At $015F58, the new
timer path preserves the debug-pause check and decrements on the odd phase of
$FF4488, a counter shared by the team/game update. Existing life/freeze gates
run before the hook.
The existing free-play byte $FF449B keeps bit 0 as true, uses bit 1 to remember
human combat, and bits 4–7 as each controller's release latch. The recorded
stock consumers test zero/nonzero. Separate configuration defines keep the
older 294- and 330-byte payloads reproducible without the new join behavior.
MVC1 results by build
The filmed 294-byte build has both teams' Variable Cross active together for 425 sampled
frames. Its test sequences send opposing directions and distinct attacks to
the four owners. All 81 command-signature samples match exactly, including
all 72 settled samples. Both timers expire naturally in the recorded run. This
closes that input-signature check for this lineup and candidate; the full
gameplay and release gates remain open.
Replaying the same input tape with the same game and emulator identities
reproduced the compared fields across all 5,720 sampled frames: inputs,
game state, phase, native port words, the free-play latch, both timers, Duo mask,
fighter records, and point/bench ownership.
That is repeatability of the recorded gameplay fields. It is not a comparison
of full CPU state, a save/load test or proof of rollback correctness.
The captured prototype ROM SHA-256 is
1693663b93afa408c248a336bf1bba7518e1132b95e33bab37194c5e858c6c73;
the diagnostic FBNeo binary is
2af29fb12f722bd4f6e558093f1d20dcfd369df7478aff37772536c06615b38f.
The input tape is pinned as
d603d3c5cf103afb486eed27a1f2cfb72467923d3fb6130ca5c949ddebb75337.
The trace, render and source-frame identities are retained with the local
evidence record. Capture callbacks do not independently establish physical
hardware-frame or timer cadence.
The 330-byte timer build has a separate executed-code comparison:
1,072 odd-update decrements and 1,071 even-update holds. Both timers expire
naturally, at captured frames 5949 and 6148. Both timed modes overlap for 817
callbacks, with 108/108 four-controller signature samples matching. The
stock-timer control fails the alternating-countdown test. This measures a
logical-update rule, not equal real-time duration through every freeze or pause.
The 418-byte current build has four further ordinary-input runs spanning
all 15 standard roster characters. Each character receives all six attack
buttons under ordinary point control and with both timed modes active. The
sampled owner words and input-history checks have no mismatches in those four
runs. These checks cover those buttons and ordinary forms. Complete buffered-
command and parser-timing coverage remains open, along with every move, hidden form,
throw or collision interaction.
This version also has an actual local save/load test. The emulator saves a
naturally reached Duo checkpoint at frame 5170, restores it, and replays the
next 300 frames. Actor state, inputs, ownership, timers and a checksum of
all 64 KiB of work RAM match on each compared frame. This is evidence for the
local serializer; it is not a full CPU-state comparison or GGPO integration.
A separate run completes two timed cycles, a natural match ending and a fresh
rematch with each person choosing their own fighter. Follow-up input probes
expose an acceptance blocker, however: a direction pressed and released
entirely between actor polls can be lost.
In the measured cases, P4 Up is present at the native ports only during callback
7219, or P3 Down only during callback 7231. That actor's reader does not run in
that callback. Release on the next callback leaves no held input or press edge
for the actor to receive. Holding the direction longer reaches the next poll;
that does not rescue the short press. These are local diagnostic-emulator
observations, and a native-specific regression versus stock has not been
established.
A separate comparison using the same lineup covers 280 callbacks with both
timed modes active. Stock receives 107 of 108 actor pulse cases: one partner
pulse is lost after the shared team cache changes before its poll. The native
build receives all 108 in that different workload. These are comparable runs,
not identical machine-state replays. A native-only cause and a blanket fix using
cached held inputs are both unproven.
Preserving those short transitions without replaying an edge across repeated
parser calls is an explicit release gate. The broader KO/double-KO,
expiry-during-Hyper, hidden-form, physical-wiring and network matrices also
remain open.
A rapid direction reversal was being filtered before the game saw it
The newer input investigation found a separate, reproducible defect in the local emulator profile. P3/P4 in MVC1—and all four owners in MSHvsSF—used a direction filter that could turn a quick Left → Right or Up → Down into a neutral input. The corrected profile applies the same rule to all four owners: simultaneous opposites become neutral, while a reversal on consecutive samples survives.
Ordered controller-to-port checks
Previous profile
Corrected profile
MVC1, all four owners
59/77
77/77
MSHvsSF, all four owners
43/77
77/77
During simultaneous MVC1 Duo, all 156 requested controller words now reach the physical port values, compared with 118 before. Additional read-only tracing verifies 2,461 complete sampler calls and 1,337 fighter input/history deliveries with no mismatches. These are exact-build local observations; the ROM was unchanged for this correction.
One limit remains visible: of those 156 requests, 154 were read and returned within the same video callback, one reader completed on the next callback, and one short P2 pulse had no physical actor read. The spanning read is not an input loss; the unpolled pulse still needs investigation. No unconditional input queue was added, and these results do not establish a fix for the reported Wolverine/Strider combo inputs, Fightcade rollback, or physical cabinet controls.
The latest pinned MVC1 ROM SHA-256 in this article is
9308e6d77ed9eaba7d1dc546c782ba7f5b2b7d1c7301fae7cc657229c0e12911.
Its observations are kept separate from the older clip and replay identities.
Gate
Current publication status
Original four-controller video
294-byte build; 81/81 input signatures for the filmed lineup
Translated timer
330-byte build; measured odd-decrement/even-hold rule and natural expiry
Stock-character input ownership
418-byte build; all 15 standard roster characters, all six attack buttons
Join and rematch behavior
Bounded join checks and repeated-cycle/rematch observations pass; broader lifecycle matrix open
Short-input preservation
Open blocker: two isolated direction presses are lost between actor polls; not established as a stock regression
Local save/load
418-byte build; 300 replayed frames match the compared state and RAM checksum
Physical CPS-2 wiring
Pending hardware validation
Four-player rollback integration
Separate work; not established by these local tests
Update, 24 September: MVC1 v2 adds 1P to 4P markers. The four-player
download is now v2, mvc1-four-human-markers-01, ROM SHA-256
3e8adfab99f52a08ba01c41b83e713041e868de50f591f08027eeb63e69c88fe. Its
four-controller inputs, joins and timer are the v1 download's code byte for
byte. What it adds is MVC1's own Variable Cross chevrons over every fighter's
head all through combat: 1P, 2P, 3P or 4P for the player who controls that
fighter, 3P in P1's team colours and 4P in P2's, COM over a CPU fighter. 3P and
4P are drawn over MVC1's single-edge 1P/2P marker glyphs, which only MVC1's own
marker object used, and the build no longer spawns that object. In MAME 0.264
the markers were checked at every sprite-list close over about 21,000 frames in
six line-ups covering the 15 standard characters. The gates in the table above
were measured on the earlier builds and are not claimed again for v2.
How MSHvsSF becomes sustained 2v2
The first MSHvsSF prototype established ownership: ordinary tags promoted P3/P4,
all 24 six-button owner samples matched, and benched owners' inputs stayed out
of their partners' controls. That was necessary, but did not create Cross Fever.
The new msh-timed-03 build adds a separate QCB recognizer, team timers and
mode-specific entry, command and departure paths. Stock MSHvsSF normally excludes
the partner role from ordinary input processing, forces a Hyper when the partner
lands, and sends a fighter out after the team attack. The new mode passes those
gates while preserving the fighter's team and partner identity. A QCF team Super
still follows the prescribed attack path.
Activation requires at least two bars and spends the available meter. The
translated rule produces 192 timer units per whole bar, plus half the fractional
meter. A recorded two bars plus 92 fractional units starts at 430. The team
clock runs once per eligible global update, on alternate updates; processing
four fighters must not make it count down four times.
The activation chord is consumed until release. Otherwise, the same HP+HK that
starts Cross can become an unintended action as the partner enters. Meter gain
is clamped while the mode runs, and each fighter can issue their own Hypers
without needing a new bar.
Ordinary-input check
Observed result in msh-timed-03
Independent control after partner entrance
264/264 sampled owner inputs match, including all six attack buttons for each of four owners
Sustained simultaneous mode
Four active fighters across 997 captured callbacks; the ownership-only control overlaps for 17
Countdown arithmetic
Both teams write 576, then every descending unit through zero; 1,151 eligible global calls from activation through expiry
Independent free Hypers
Six native Hypers alternate between Ryu and Ken; each cost call observes zero whole and fractional meter
Point knockout
Spider-Man's KO ends only his team's mode on the next callback; Captain America takes the point role while the other team continues
Repeatable KO case
A fixed ordinary-input tape reproduces all 7,500 compared callback records from the original recorded run
These observations come from the ROM's actual command and combat routines.
No observer forces a fighter into the mode or writes a timer. The video is
captured from the same pinned build:
bc6cb5dd907927b7a2f9dc993aa8f1f9b31309bc901df4431a769b40b9d7de73.
There are meaningful limitations. The03 mode-clear QCF comparison preserves the
requests, entrances, meter costs and final fighter fields, but has 73 field
differences across 70 sampled callbacks, including a one-callback departure shift. It is not an
exact timing match. That build also incorrectly uses the ordinary Hyper
startup-freeze path during the new mode.
Tracing both original implementations resolves the freeze rule. During a
fighter's own timed Cross, native MVC1 and Dreamcast bypass the ordinary Hyper
startup effects, freeze and cost. Combined08 now applies that distinction in
MSHvsSF: six alternating Ryu/Ken Hypers start at zero meter without invoking the
normal cost or startup-freeze helpers. The ordinary opponent path is retained;
this is not a blanket removal of super-freeze.
Two input-latch bugs also needed actual transition tests. Holding activation
HP+HK through expiry could leak those buttons when the activator tagged back
in. A first fix then swallowed a fresh attack if that person had released while
benched. Combined08 preserves the consumed chord until release and observes
release even for a benched owner. The exact counterexamples now pass; this
does not close every brief-input or command-history case.
The current MSHvsSF candidate is 1,822 bytes in the stock program space, with
ROM SHA-256
51ba258ebe415f0a4943f31ad00a3b9e39ee50cacf146c9fcb1156966d085dd5.
It repeats the 264/264 sampled ownership check and exact per-team countdown,
and a fixed input recording reproduces its 7,600 compared KO/next-game records.
The frozen-source rebuild and member-patch installer reproduce the same archive
hash. That is reproducibility of this diagnostic, not release acceptance.
Combined08 also passes a real local save/load check. Both modes are naturally
active at callback 5170, with timers at 553/553. Restoring that checkpoint and
replaying the next 300 callbacks reproduces the compared fighters, inputs,
timers, mode, release latches and a checksum of all 64 KiB of work RAM. It does
not establish complete CPU-state identity or four-player rollback.
The later combined build adds four-person selection and free-play joining.
Its 44 scoped menu checks cover assigned cursors, fresh join presses, partial
release, holding the chord through entry, ordinary combat tags, and the stock
Test menu. Those are separate recordings from the combat clip above. The
release gate still includes the full roster, charge motions, throws, cross-ups,
transformations, simultaneous KOs and expiry during every relevant Super state.
The countdown and meteor background are separate jobs
The new msh-exact-time-11 build draws MVC1's original blue TIME frame and depletion masks. The two bars use separate team timers; neither replaces the round clock. This is the original artwork and full donor color row, drawn by the game, with no video annotation or substituted MSHvsSF lettering.
Actual captured gameplay, callback 5500 of the staggered11-latched run. Both modes are active and the bars have different remaining lengths.
The patch allocates 27 original tiles: 11 frame tiles and 16 depletion-mask tiles. A comparison across the complete 32 MiB graphics image confirms that only those allocated blank tiles changed, and each matches the donor's encoded pixels. The display uses 20 object records and reserves 64 bytes for the palette backup within the existing HUD area. No graphics ROM expansion is involved.
A palette timing error in the first attempt produced the correct shape with MSHvsSF colors. The corrected lease holds the complete row across the native palette-copy window and restores the original rows after the observed expiry. If an existing sprite uses that row, or the hardware object list lacks capacity, the optional display is suppressed.
The right team remains active after the left expires. Both bars have cleared by callback 6400 in this same run.
The read-only observer followed the physical object banks and their VBlank latch, so the comparison uses the records actually displayed. Across 14 screenshots, 22,900 opaque pixel comparisons matched exactly, with zero errors in 5,472 drawing and 6,606 commit checks. The exact-build evidence includes the candidate and screenshot hashes, allocation scope and remaining limits.
The older fixed KO sequence still fails to reach a knockout in 11: its right-side fighters never fall below 12 and 80 life. That ko11 run remains failed coverage. Added drawing work changes callback/simulation alignment, so the older tape was not assumed to preserve its result. The earlier combined06/08 HUD used MSHvsSF lettering; the combat video above retains its older build label.
A new ordinary-input scenario now reaches one natural point KO in the unchanged build11. Spider-Man is knocked out while both teams' modes are active, with 131 units on each timer. Captain America becomes the right-side point on the next callback. P4 then moves him right and starts a fresh light punch: all eight requested movement samples and all four punch samples reach the survivor. Only Spider-Man's team leaves the timed mode; the left timer continues.
The build11 KO and recovery evidence records the original input-driven run and a fixed replay. All 7,600 callback records match, excluding only the label identifying which controller method produced them. The object commits drop from two TIME bars to one, then to none at final expiry; both palette rows return to their saved values. Each run passes 5,808 draw and 6,908 commit checks. These headless runs add no screenshots or pixel comparisons, and use the pinned historical observation profile rather than extending the newer direction-filter result.
This closes one point-KO and survivor-control case. Full rounds, rematches, simultaneous KOs, the broader character matrix, palette writers, computed graphics references and worst-case object/pixel budgets remain open. It does not establish cabinet or network behavior.
The meteor scene has a separate lifetime. In the measured MVC1 run, the first
activation creates one palette-animation object. The other team's activation
shares it. The engine combines the active Cross flags with other fighter
background effects, then restores the stage presentation when that combined
state clears. Porting only a timer-controlled background switch could restore
the stage in the middle of another effect.
Its art also needs room. The captured native tilemap references 866 distinct
32×32 tiles. The measured stock MSHvsSF graphics contain only 695 completely
blank aligned blocks of that size, with fewer in the directly addressed
scroll region. A complete direct copy does not fit that blank space. Blank
space must also be checked for references before it can be allocated.
A second route splits that same art into 16×16 tiles and reuses
identical or mirrored pieces. The lossless reconstruction needs 2,404 new
tiles in a region with 2,474 measured blank slots. Every donor tile
reconstructs exactly in the offline check. At first that looks like a narrow
fit. The reference audit changes the result: 774 of those blank slots are
parts of 32×32 tiles referenced by MSHvsSF's existing stage-map corpus. Adding
meteor pixels there would change those stage tiles. A blank-looking quadrant
is not necessarily unused space.
This is more than a conservative static concern. One ordinary stock workload
loads maps and objects referencing enough blank blocks that only 2,381
candidates remain, already
23 short of the 2,404 needed. Preserving the full recovered map corpus leaves
even less space. The proposed blank-only layout fails before all stages have
been tested.
The meteor background is not present in that earlier MSHvsSF footage.
Update, 22 September: the requirement was wrong twice over, and it now fits.
Two measurements moved it. First, the eight scroll phases turned out to be a
scripted 24-update cycle derived from the code rather than a sampled range, and
the ownership audit that excluded 774 slots was assigning every sprite list to
bank 0 — correcting each list to its real bank clears all 12,790 accounted-for
lists to zero hazard and leaves 2,235 genuinely free slots, not 2,381
doubtful ones. Second, the geometry was solved the wrong way round. The source
map is 2,048 px wide and the host layer's map is 1,024, so it can never be
copied by position. Packing the eight phase windows into a window atlas —
eight cells of 27×15 tiles, with the port's own scroll writer mapping phase to
cell — needs 2,012 new tiles and 3,240 of 4,096 map entries.
Against 2,223 free slots, after subtracting twelve that a sibling Strider build
already occupies, that is a 211-slot margin. Every one of the 3,240 atlas
slots was decoded back through the payload and compared to the native render:
zero pixel or palette mismatches. The slots are claimed in the shared allocation
ledger.
This is an allocation plan, not a shipped patch. Nothing is written to any ROM
yet, and one gate is still open: the background's live palette is not in any of
the five retained palette dumps, so it needs a targeted capture. A reduced
animation would still be a variant, not evidence that the full presentation was
transferred.
Update, 23 September: it shipped, as a four-frame variant. Both MSHvsSF
previews, v2, carry the sky. It keeps four of MVC1's eight phase
windows (0, 2, 4 and 6), each held for six updates, at the position MVC1 shows
most often; MVC1's stage parallax is not reproduced. The palette animation is
complete: all 36 records of MVC1's own table, one every four updates. Cutting
the four windows into 16×16 tiles and sharing mirrored pieces needs 1,019
tiles, placed only in blank Scroll 2 blocks the corrected seat census
protects, and every cell decodes back through its map with zero pen or palette
mismatches. The map, a palette buffer and the state live in 16 KB of video RAM
that was zero in every combat sample, and are cleared after the mode. A
VBlank hook shows the sky only while a team's timed mode is live in combat,
passes the game's own white Hyper flashes through, and hands the screen back to
MSHvsSF when the last timer ends. Ordinary Hypers keep MSHvsSF's background.
Both builds ran in MAME with ordinary inputs: an ordinary Hyper before the mode,
the activation, a Hyper and its flashes inside it, the other team's activation
while the first was live, both expiries and the clean-up. For the four-player
build, MAME's two-player driver was given the four-controller wiring at its
input ports, so all four humans joined and P1 and P3 each fired a Hyper from
their own stick inside the mode. Neither v2 build has had a local FBNeo
recording yet.
Update, later on 23 September: v3 adds MVC1's ∞. MVC1 swaps its level
digit for an infinity sign while its Duo runs, and the two MSHvsSF previews,
v3, now do the same for each side's timed mode. MSHvsSF's own HUD routine still
draws the digit: at the end of each side's level-digit writer, a hook checks that
side's mode bit and timer, and while both are live it writes MVC1's own two-tile
sign three pixels left of the digit instead. The sign uses MSHvsSF's fixed HUD
palette, the LEVEL label's golds, because the palette the digits use cycles;
the digit returns when the mode ends.
Both v3 builds ran their checks again in MAME, and every sampled frame's level
display was compared with that frame's mode state. In the 1v1 build, 334 of 336
side checks matched and the other 2 caught the HUD's own update right after a
change. In the four-player build, 223 of 228 matched and 1 caught the HUD
mid-update; the other 4 are two single frames in the heaviest scene tested (four
fighters, two Hypers at once, the sky live) where the whole bottom HUD was
missing for one frame. That is a lag-frame effect: the sprite list is latched
before the HUD records are copied, and v2 measures the same lag in that scene.
The MSHvsSF clips and stills on this page were re-run on the v3 ROMs with the
same inputs.
Update, 24 September: v5 starts the mode the MVC1 way. MVC1's Variable
Cross doesn't just switch a mode on. The point strikes its call pose and says
its line, the team-Hyper cut-in plays, and the partner flies in from behind
with an attack. The v5 previews, msh-two-human-v5-08 and
msh-four-human-v5-08, do that with MSHvsSF's own pieces: each character's
taunt as the call pose, with its voice, and the point can't be hit while it
plays; MSHvsSF's own team-Hyper cut-in with both teammates' portraits under the
super freeze; then the partner's own tag-in attack from behind the point.
Nothing is taken at that moment, and the timer starts after the entrance.
The meter now works the way MVC1's does: it reads full while the mode runs, and
when the mode ends it costs two full bars, keeping a partly filled third. A
Level 3 start empties it and runs longer, 576 timer units against 384. v5 also
puts MVC1's Variable Cross chevrons over the fighters, 1P and 2P in the 1v1
build and 1P to 4P over every head in the four-player build, hidden during the
cut-ins. Both builds ran in MAME 0.264 with ordinary inputs, and the markers were
checked at every sprite-list close over about 23,000 frames on five character
sets for the 1v1 build and 18,000 on four for four players. v4 was an internal
build; everything it added is in v5. The MSHvsSF clips and stills on this page
now come from MAME runs of the v5 ROMs.
X-Men vs. Street Fighter gets both modes
Update, 24 September. X-Men vs. Street Fighter is the third game, with two
previews: a 1v1 Duo, xmv-two-human-full-02 (v3), and four players,
xmv-four-human-full-02 (v2). The command contract is the same as in the other
two games: QCB + HP + HK for the timed mode, QCF + HP + HK for the team Hyper
(XMvsSF calls it the Variable Combination), and HP + HK to tag.
The start follows MVC1's Variable Cross. The point strikes its call pose, its
own taunt with its voice, and can't be hit while it plays; XMvsSF's own
Variable Combination freeze plays; then the partner comes in from behind the
point with its own tag-in attack. While a side's mode runs, MVC1's meteor sky
replaces the stage (the same four-frame variant MSHvsSF uses), MVC1's TIME bar
counts that side's mode down over its Hyper gauge, and MVC1's ∞ replaces the
level number. Hypers inside the mode have no freeze and cost nothing, so in the
Duo one motion fires both fighters' Hypers. When the timer ends, the partner
leaves and the point stays. While a side's Cross runs, its tag, Variable Counter
and Variable Combination are refused, so the two fighters in play can't be
swapped out from under the mode.
XMvsSF needed fixes of its own. The game lends the benched partner's palette
rows to effects, so a Hyper's afterimages recoloured the partner once it was in
play; the builds stop Hyper afterimages during a Cross and reload the partner's
colours when it enters. The partner also had no floor shadow, and now has one.
In the four-player build, P1 and P2 pick their side's first character and P3
and P4 the second, and each fighter keeps its owner's controller through tags
and knockouts.
Both builds ran in MAME 0.264 with ordinary inputs. Both teams' Cross was
checked update by update, and the markers, TIME bar, ∞, sky and shadows at every
sprite-list close: about 41,000 frames in nine line-ups for the Duo and 52,000
in ten for four players, covering all 17 selectable characters. Those census
runs set the meter to Level 3 with an analysis write at the start of combat. The
clips, stills and trailer on this page come from separate MAME runs with
ordinary inputs only and no memory writes. Neither build has a local FBNeo
recording yet.
Playing them turned up problems those checks didn't catch, and the next builds
fix them. The start skips XMvsSF's slide-in team-Hyper portraits and the
characters' team-Hyper voices. During the mode, a fighter can walk through an
opponent. Some Hypers (Rogue's, Cammy's, Sabretooth's) can drop their target
after the first hit. And stage props and animated stage pieces, like the mall's
posts and crowd, can show over the meteor sky.
One workspace, stronger evidence tools
Both implementations now live in MVC_4P, with one parameterized builder
and separate game configurations. MVC_HARNESS supplies the shared ROM,
disassembly, graphics, allocation and input-evidence tools. The builder freezes
assembly includes and evidence, checks exact hook bytes and source hashes,
records code/RAM/graphics claims, and produces member patches with a verifying
installer. It stays within the stock program address space.
The investigation also found two harness problems worth fixing: sprite-list
reads could stop at a physical ROM-member boundary, and selecting the wrong
regional profile could leave a partially loaded program looking usable. The
shared reader now handles cross-member lists, and a complete-program check
rejects missing or wrong-sized members before this builder analyzes or patches
them. Boundary fixtures and a deliberately mismatched regional profile exercise
those failure cases.
Input preflights bind their results to the exact game, input profile, ROM and
emulator. All 43 physical-switch cases must match, and execution observers need
positive and negative controls. These checks strengthen the measurements; they
do not convert an emulator run into cabinet or four-player rollback evidence.
One profile builder now exposes both games' native controls without manual
driver edits; its fresh two-game build passes all 43 switch cases for each game.
From preview to release
The five downloads are previews. A full release needs the complete playable
contract in all three games: four independent owners,
sustained 2v2, coherent short-input history, per-team countdown displays, mode
backgrounds and correct entry/exit behavior. The evidence must identify the
exact ROM and input profile used. A live four-person capture, physical cabinet
validation and rollback integration are separate results; the diagnostic
controller replays establish none of those by themselves.
Separate from Delayed Hyper Combo
The released DHC patch adds cancel routes
and partner handoffs. Cross Fever adds independent ownership and a sustained mode
in three games. A team handoff in DHC is not evidence of four-human control, and
nothing here changes what the DHC release claims. The two are separate patches:
each installer takes a clean parent, so don't stack them.
These local captures establish neither cabinet compatibility nor four-player
online play.
Work note
I set the goal for all three games — four independent humans, sustained two-on-two, a
separate countdown and the MVC meteor presentation — and decided what each preview
had to pass. AI agents helped inspect the game images, input handlers and emulator
definitions, and built the installers and their checks. A preview stays a preview:
each package names what ran on its exact build.
This is an unaffiliated fan modification. X-Men vs. Street Fighter, Marvel
Super Heroes vs. Street Fighter, Marvel vs. Capcom and their characters
belong to their owners. The
downloads are patch data; you bring your own legal game dump.
Community input · Next release
Help shape the next Cross Fever update
Choose up to 3 priorities. No account needed.
Community signals
Unavailable
Feedback guides the roadmap. Votes do not confirm bugs or commit a change to the next release.
Shared across MVC1, MSHvsSF and XMvsSF. These totals cannot be separated by game.
Some choices were added on Sep 27, 2026. Earlier responses may predate them.
Copies public poll choices and counts for your own workflow. Private notes are excluded. Copying sends nothing to another service.