XMvsSF · MSHvsSF · Marvel vs. Capcom · CPS-2

Cross Fever.

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.

4playerson one CPS-2 board, each on their own controller
3gamesXMvsSF, MSHvsSF and arcade MVC1
5ways to playMVC1 adds matched cores for three platforms
0bytesof 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 four-player preview v5, frame 6660: Akuma (1P) and Dhalsim (3P) against Cyclops (2P) and Hulk (4P). Dhalsim flies in and knocks Hulk into the air, all four on screen under MVC1's meteor sky with two TIME bars and two ∞ meters.
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 Duo v3, frame 8063: one QCF + LP + MP fires Wolverine's Hyper and Cyclops's together over the meteor sky, FIRST ATTACK on screen and P1's level meter at ∞.
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.

The first MVC1 prototype with the four controllers drawn under the game, all four marked active.
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.

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.

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

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

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

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

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.

Five ways to play.

Pick the game, then the 1v1 Duo or four players. One installer each, on its own clean ROM.

2 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)

Download XMvsSF 1v1 xmvsf-cross-two-human-v3-preview.cmd · 3.1 MB · SHA-256 4b20caf3284f…Evidence package: README, patch spec, Python patcher
4 players · v2

XMvsSF 4P

X-Men vs. Street Fighter

Four humans in XMvsSF, P1/P3 against P2/P4, each fighter on its own controller.

  • HP + HK outside combat joins P3 and P4; P1 and P2 pick first, P3 and P4 second
  • QCB + HP + HK: the pose, then your teammate flies in and you both fight
  • MVC1's meteor sky, a TIME bar per team, ∞, and 1P to 4P over every fighter

Four-controller input profile · Euro xmvsf.zip (961004)

Download XMvsSF 4P xmvsf-cross-four-human-v2-preview.cmd · 3.1 MB · SHA-256 4413b19dbac9…Evidence package: README, patch spec, Python patcher
Controls, side by sideplayers · controllers · joining · the timed mode · markers, for all five
SettingXMvsSF 1v1XMvsSF 4PMSHvsSF 1v1MSHvsSF 4PMVC1 4P
Players24 · P1/P3 vs. P2/P424 · P1/P3 vs. P2/P44 · P1/P2 vs. P3/P4 (MVC1 V3)
ControllersOrdinary two-playerFour-controller profileOrdinary two-playerFour-controller profileV3 matched core: Y/X/L punches, B/A/R kicks on all four ports
JoinNormal selectHP + HK outside combat; P1 and P2 pick first, P3 and P4 secondNormal selectHP + HK outside combat, then pick a fighterHP + HK, then release. P1/P3 first fighter; P2/P4 second fighter and helper
Timed modeQCB + HP + HK · you control bothQCB + HP + HKQCB + HP + HK · you control bothQCB + HP + HKQCB + HP + HK
How it startsPose, XMvsSF's team-Hyper freeze, partner flies inPose, XMvsSF's team-Hyper freeze, partner flies inPose and voice, MSHvsSF's team-Hyper cut-in, partner flies inPose and voice, MSHvsSF's team-Hyper cut-in, partner flies inMVC1's own Variable Cross
Team HyperQCF + HP + HK (Variable Combination)QCF + HP + HK (Variable Combination)QCF + HP + HKQCF + HP + HKQCF + HP + HK
BackgroundMVC1's meteor skyMVC1's meteor skyMVC1's meteor skyMVC1's meteor skyMVC1's own Cross background
Mode timerMVC1's TIME barMVC1's TIME bar, one per teamMVC1's TIME barMVC1's TIME bar, one per teamMVC1's own TIME bars
Level meterMVC1's ∞ while the mode runsMVC1's ∞ while the mode runsMVC1's ∞ while the mode runsMVC1's ∞ while the mode runs∞ while the mode runs (MVC1's own)
Markers1P and 2P over every fighter1P to 4P over every fighter1P and 2P over every fighter1P to 4P over every head1P 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.

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.

Pick your patch five modes · MVC1 platform packages
  1. 01Put both files in one folder.Your clean ROM zip and the .cmd you downloaded. Any folder works.
  2. 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.
  3. 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.
  4. 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.
  1. Extract into a fresh folder and supply full clean Euro mvsc.zip (980123), including its original mvsc.key. Drag it onto BUILD.cmd.
  2. Keep output/mvsc4p.zip and its receipt. With RetroArch closed, run PLAY.cmd. Verify the V3 core name/version before configuring the four ports.
  3. 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).
  1. 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.
  2. 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.
  3. 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.
  1. 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.
  2. 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.
  3. 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 gameplay with four fighters, 1P and 2P on the left team and 3P and 4P on the right, with two TIME bars.
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.

Package downloads and complete SHA-256 checksums

Four ports, two teams

PortTeamSelection responsibility
P1Team 1First fighter
P2Team 1Second fighter and helper
P3Team 2First fighter
P4Team 2Second fighter and helper

The same six attacks on every port

LP ← Y

Attack ← RetroPad button

MP ← X

Attack ← RetroPad button

HP ← L

Attack ← RetroPad button

LK ← B

Attack ← RetroPad button

MK ← A

Attack ← RetroPad button

HK ← R

Attack ← RetroPad button

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

StageInput and ownership
JoinPress HP + HK, then release both. Free play does not need Coin or Start.
First fighterP1 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 / helperP2 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 orderThe 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 / tagDirections and six attacks control your fighter. HP + HK requests a tag; control stays with the incoming fighter’s owner.
DuoQCB + HP + HK, with the required meter. Each teammate keeps independent directions, attacks and command history. QCF + HP + HK remains Team Hyper.
Expiry / KO / rematchOwnership 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.

Build-specific records: V3 package hashes · V3 tests and limitations · Scoped reproducible evidence · Final package qualification · Installed macOS frontend check · Package instructions

Separate design requests

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.

Packages and installation instructions · Full Cross Fever article

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

XMvsSF 1v1 · v3 · X-Men vs. Street Fighter

Download XMvsSF 1v1 Duo v3 (preview)

xmvsf-cross-two-human-v3-preview.cmd · 3.1 MB
SHA-256 4b20caf3284f13692c3d5f1009240cf45f09109df152861bebe5ce67793179ad

Evidence package: README, patch spec, verification, Python patcher

xmvsf-cross-two-human-v3-preview-patch.zip · 597 KB
SHA-256 fc2ef7a70b19b442c493cae413ef4d0a2adccf4f16c107dcfd59dc604be9e6ee

XMvsSF 4P · v2 · X-Men vs. Street Fighter

Download XMvsSF four-player v2 (preview)

xmvsf-cross-four-human-v2-preview.cmd · 3.1 MB
SHA-256 4413b19dbac91415bd1469aba448e5cfe373cf4977d15940e3448aaee8f69c70

Evidence package: README, patch spec, verification, Python patcher

xmvsf-cross-four-human-v2-preview-patch.zip · 604 KB
SHA-256 22e7d0e2ca56c7fbb3bec828929f6b1907fbe915236d2edea01a217adf510746

MSHvsSF 1v1 · v5 · MSHvsSF

Download MSHvsSF 1v1 Duo v5 (preview): USA 970827 installer, for mshvsfu.zip

mshvsf-cross-two-human-v5-preview.cmd · 3.1 MB
SHA-256 ce4b8cbd7d41bd441057b249ce236f265a2c3e40e9e909b743b81e443a46bb13

Evidence package: README, patch spec, verification, Python patcher

mshvsf-cross-two-human-v5-preview-patch.zip · 551 KB
SHA-256 4ffb753e3fb7d4eaf14dae3f91565a7a956c24a4960e134e72922081b017dd8c

Euro 970625 installer: for mshvsf.zip, the set Fightcade runs

mshvsf-cross-two-human-v5-euro-preview.cmd · 3.1 MB
SHA-256 6344b7800a03279a147f666f4465cad87dac305c8e1ee8ee18d4a773ac9047bc

Euro evidence package: README, patch spec, verification, Python patcher

mshvsf-cross-two-human-v5-euro-preview-patch.zip · 551 KB
SHA-256 4d816eb46f397d7612f303196cba0591dd9e345c2d9fe61998883593199d53ae

MSHvsSF 4P · v5 · MSHvsSF

Download MSHvsSF four-player v5 (preview): USA 970827 installer, for mshvsfu.zip

mshvsf-cross-four-human-v5-preview.cmd · 3.1 MB
SHA-256 18858b191291e1cf292ba41cad85e857a974042acd9939106ce038bfe3b5f6be

Evidence package: README, patch spec, verification, Python patcher

mshvsf-cross-four-human-v5-preview-patch.zip · 552 KB
SHA-256 8eb1874eff21b4b500da60929d26b4488eae2352832bd9b85a75bf4fe5e6e90d

Euro 970625 installer: for mshvsf.zip

mshvsf-cross-four-human-v5-euro-preview.cmd · 3.1 MB
SHA-256 a111427640dea5ebfb83f82abd674276c4d740033ae4f18711b500d36f594d13

Euro evidence package: README, patch spec, verification, Python patcher

mshvsf-cross-four-human-v5-euro-preview-patch.zip · 552 KB
SHA-256 9cd3885b6d306b3067e8af407ff1fe3a1d5492b37c39e6a37d46106633407a82

MVC1 4P · v3-preview · Arcade Marvel vs. Capcom

Download MVC1 Cross Fever V3 · Windows x64 preview

mvc1-cross-fever-v3-windows-x64.zip · 4.0 MB
SHA-256 919a0c4e6db4fe9899237603f69ed90b1e5b89d1f0ce93c81da9dbfb4dac6f55

Release checks and file hashes

MVC1 Cross Fever V3 · macOS Apple silicon preview

mvc1-cross-fever-v3-macos-arm64.zip · 3.5 MB
SHA-256 704bc26aa7b7d81a2d7ed00b8805f3f4bcb56d7cac548e905eafbc5d8d3e277a

MVC1 Cross Fever V3 · Linux x64 preview

mvc1-cross-fever-v3-linux-x64.zip · 4.0 MB
SHA-256 0659292a8c448691cb5e239e109fe276afa01b00fdd3b003acc9601e528c38e3

Corresponding FBNeo core source and license

mvc1-cross-fever-v3-core-sources.zip · 21 MB
SHA-256 59dc90323701db8f377039ceb2d83f4fbbf31326c93e349584e052003e49e54f

Reproducible V3 game patch source and build instructions

mvc1-cross-fever-v3-game-sources.zip · 431 KB
SHA-256 f4922e4c92e2cc717738ea6a11ff655198f55e815e989f5dadf1bf06817cecd8

Scoped V3 evidence: sanitized receipts, input plans and replay limitations

mvc1-cross-fever-v3-preview-evidence.zip · 858 KB
SHA-256 6b3331cf8404a00140bfaaae4cf8fe7a196e00c0d79e2faaeb055c9a4624c115

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.

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

  1. Frame 7700: Before: Wolverine vs. Ryu, both at Level 3
    FRAME 7700Before: Wolverine vs. Ryu, both at Level 3
  2. Frame 7775: QCB + HP + HK: Wolverine strikes his pose
    FRAME 7775QCB + HP + HK: Wolverine strikes his pose
  3. Frame 7800: Cyclops flies in: the sky, the TIME bar, the ∞
    FRAME 7800Cyclops flies in: the sky, the TIME bar, the ∞
  4. Frame 7860: Wolverine and Cyclops, both on P1's stick
    FRAME 7860Wolverine and Cyclops, both on P1's stick
  5. Frame 8063: One motion, two Hypers: Wolverine's and Cyclops's
    FRAME 8063One motion, two Hypers: Wolverine's and Cyclops's
  6. Frame 8905: Time is up: Cyclops leaves, the stage comes back, the meter reads 0
    FRAME 8905Time is up: Cyclops leaves, the stage comes back, the meter reads 0

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.
Post on X ↗

Earlier footage.

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.

Related: Delayed Hyper Combo, Hyper into Hyper cancels and partner handoffs for arcade MVC1. It's a separate patch. Don't stack it with Cross Fever.

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.

RequirementMVC1 evidence so farMSHvsSF evidence so far
A human stays with their fighter through a tagNative four-controller prototype; all 15 standard characters receive all six attack buttons in sampled runsInitial ownership prototype; ordinary tags promote P3/P4 with independent six-button inputs
Both teammates remain freely controlled; both teams can create sustained 2v2Simultaneous Variable Cross captured and sampled; short-input loss still blocks acceptanceNew timed mode captured; current combined08 also passes 264/264 sampled inputs after partner entrance
QCB timed mode; QCF team Super retainedUses the existing Variable Cross path; broader command/lifecycle cases remain openQCB 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 clockAlternating countdown measured; native TIME display tracedOriginal blue MVC1 frame/masks rendered in 11; 22,900 opaque pixel comparisons across 14 screenshots match exactly
MVC-style meteor presentation while the mode runsNative activation, palette animation and final restoration traced in one ordinary-input runNot ported; the first lossless packing proposal conflicts with existing stage graphics
Clean expiry, KO and return to ordinary tag playNatural expiry, repeated cycles, joins and a rematch observed; full lifecycle matrix openIn 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.

SituationIntended four-player behavior
Ordinary playThe active fighter's owner controls that fighter.
A tagThe other fighter enters under their own owner's controls.
One team's timed modeBoth teammates can enter different directions and attacks.
Both teams' timed modesAll four owners can act independently in the same frame.
Mode expiry or a knockoutThe 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.

HumanDirections + LP / MP / HP / LKMKHKMVC1 fighter object
P1IN0 ($804000), low byteIN2 bit 8IN2 bit 12$FF3000
P2IN0, high byteIN2 bit 9IN2 bit 13$FF3400
P3IN1 ($804010), low byteIN2 bit 10IN2 bit 14$FF3800
P4IN1, high byteIN2 bit 11IN2 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.

Native control routing: P1 and P3 form team A in green; P2 and P4 form team B in cyan. Each controller passes through the native CPS-2 input sampler into its own fighter's command history. Tags change active roles while controller ownership stays with the fighter.

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 findingAddress 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 teammatesIn 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 distributionEntry 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 record
when the four-controller flag is set:
    team A receives ports 0 and 2
    team B receives ports 1 and 3
for 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 checksPrevious profileCorrected profile
MVC1, all four owners59/7777/77
MSHvsSF, all four owners43/7777/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.

GateCurrent publication status
Original four-controller video294-byte build; 81/81 input signatures for the filmed lineup
Translated timer330-byte build; measured odd-decrement/even-hold rule and natural expiry
Stock-character input ownership418-byte build; all 15 standard roster characters, all six attack buttons
Join and rematch behaviorBounded join checks and repeated-cycle/rematch observations pass; broader lifecycle matrix open
Short-input preservationOpen blocker: two isolated direction presses are lost between actor polls; not established as a stock regression
Local save/load418-byte build; 300 replayed frames match the compared state and RAM checksum
Physical CPS-2 wiringPending hardware validation
Four-player rollback integrationSeparate 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 checkObserved result in msh-timed-03
Independent control after partner entrance264/264 sampled owner inputs match, including all six attack buttons for each of four owners
Sustained simultaneous modeFour active fighters across 997 captured callbacks; the ownership-only control overlaps for 17
Countdown arithmeticBoth teams write 576, then every descending unit through zero; 1,151 eligible global calls from activation through expiry
Independent free HypersSix native Hypers alternate between Ryu and Ken; each cost call observes zero whole and fractional meter
Point knockoutSpider-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 caseA 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.

msh-exact-time-11 gameplay: the original blue MVC1 TIME frame appears for both teams, with unequal remaining time.

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.

msh-exact-time-11 at callback 6200: the left timer has expired and only the right blue TIME bar remains.

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.