<!-- Research receipt: original investigation notes. File references below refer to paths inside the downloadable evidence archive. Later findings supersede explicitly earlier scope statements. -->

# Stock MvC1: War Machine and Gold War Machine mash follow-up

Target: the same unmodified Euro 980123 `roms/vanilla/mvsc.zip` documented in
`analysis/mvsc_mash_20260913/provenance.json`. Opcode disassembly uses that
directory's `mvsc_program_opcode.bin`; this directory changes no ROM bytes.

## Confirmed finding: Gold War Machine's Proton Cannon

**QCF + two punches** enters move selector `+$E6 = $02`. The missile cannon is
visible in `gold_none_150.png`. The character was selected using the game's
ordinary 37-direction secret code, not by overwriting a character ID. Both
fighters are human-controlled and the defender receives no fighting inputs.

The special-move dispatcher at `$02A41E` uses the PC-relative table `$02A42C`.
Selector `$02` dispatches to `$02A5A4`, where character ID `$28` takes a
Gold-specific branch to `$02A7E2`. Ordinary War Machine ID `$02` stays on the
other branch.

Gold's active state works as follows:

1. `$02A8E2` sets byte `+$4E` to `$60` (96). This is an internal timer,
   not a claim of 96 displayed video frames.
2. `$02A8F0` through `$02A90A` enter the firing state and call `$02A9CA`.
3. `$02A9CA` requires a human player and invokes `$01A3A8`, the common helper
   that tests **new direction presses** (`+$D4 & $000F`), not attack buttons.
4. On success, `$02A9D8` adds one to `+$4E`.
5. `$02A944` subtracts one from that timer normally. An accepted direction
   therefore cancels one countdown decrement.
6. A separate counter `+$50` increments at `$02A90E`. Every fourth update,
   `$02A918`–`$02A928` launches another subtype `$0E` missile via `$094D7A`.
   Extending the firing state creates more missile opportunities.

There is no separate finite mash-credit counter in this path. Do **not** turn
that observation into a claim of infinite duration: input sampling, game
updates, hitstop and other exit conditions still matter. Holding one direction
does not keep creating new direction edges. Simultaneous direction bits also
produce at most one helper success per call, not a count of pressed bits.

### Paired gameplay experiment

`probe.lua` restores the same saved neutral fixture before each trial, waits
the same four callbacks, performs QCF+PP, then applies the selected extra input
only while the first move is active. Normal fixture health is 144. Both humans
are 1; initial X positions are 187 and 257 in the Gold run, and both Y
positions are 456. The defender is Spider-Man. Results count only the first
move's native combo counter. The ordinary War Machine fixture has the same X
positions and health but Y=472; compare input variants within each character's
fixture, not raw Gold-versus-ordinary hit counts across these different stages.

| Extra input | Max native combo | First move exit observation |
| --- | ---: | ---: |
| None | 25 | 229 |
| Hold all attack buttons | 23 | 228 |
| Tap all attack buttons every other callback | 24 | 227 |
| Rotate directions every other callback, neutral between | 40 | 289 |

These are fixture-specific hit counts, not guaranteed move totals. Button
runs have contact/timing variation; there is no button-based timer-extension
instruction in this path. Missile placement itself uses RNG at `$09586E`.
This analysis has not established the precise cause of every paired-run
contact variation. The direction-extension conclusion rests on both the
explicit timer code and the observed longer firing state.

### Longer timer diagnostic

`sustained/probe.lua` seeds defender health to **1024 once**, to avoid a KO,
then changes direction on every emulator callback. This is a duration probe,
not an ordinary-health gameplay damage result. It runs 1,100 callbacks.

The first Hyper ended at observation 740. At observations 120, 200, 400 and
600 its firing timer was 92, 79, 45 and 12. It plainly lasts beyond the
ordinary test window, but this input schedule did not hold it open forever.
Do not report the capped 99-hit counter in this diagnostic as an exact total.

## Ordinary War Machine's Proton Cannon

The non-Gold branch initializes a timer to `$78` (120) at `$02A6D4` and
decrements it at `$02A756`. Its active loop `$02A734` contains no analogous
mash-helper call. The paired QCF+PP runs all produced 27 native hits and exited
at observation 248 for no input, held buttons, tapped buttons, and directions.
Defender HP was 89 for the first three and 90 for the direction run; that small
damage variation should not be described as a mash bonus or penalty.

## War Destroyer: do not equate extra contacts with a mash extension

QCF+two kicks entered selector `$0C`, which dispatches to `$02B156`. Its
launch timer is 48 at `$02B1E4`; `$02B264` decrements it, and `$02B2BA` emits a
missile every fourth timer count. That emitter and the scanned missile code
have no direction/button test that adds firing time or missiles.

The descending missiles have randomized placement: `$09543A` picks launch X
offset, and `$095512` picks a descending X offset relative to the captured
target X. In the test, no/held/tapped-button trials produced only 2 contacts,
whereas the direction trial produced 13 contacts, with strongly divergent
knockback and subsequent contact geometry. That alone does **not** demonstrate
a mash extension: there was no longer launch phase in the instruction trace,
and this pass has not traced why the contact sequences diverged. Treat this
as an unresolved contact comparison, not a clean negative equal-hit test and
not proof of a hidden War Destroyer extension.

The strongest supported direct answer is therefore: **Gold War Machine's
Proton Cannon definitely responds to new joystick directions for additional
firing time; the ordinary version does not use that extension path.**

## Artifacts

- `verified_disassembly.txt`: disassembled instruction ranges, skipping
  known inline tables instead of interpreting them as instructions.
- `summary.json`: first-move summaries and fixture state for all runs.
- `gold.csv`, `war_machine.csv`: per-callback gameplay observations.
- `war_destroyer/war_machine.csv`: the limited War Destroyer comparison.
- `sustained/gold.csv`: extended-duration high-health diagnostic.
- `*.log`, `*.png`: selection trace and screenshots.

For move nomenclature and QCF+PP/QCF+KK commands, a contemporary author's
War Machine guide agrees with the visible stock-game move:
https://gamefaqs.gamespot.com/arcade/562630-marvel-vs-capcom-clash-of-super-heroes/faqs/114
Technical timing and input findings above come from this ROM and experiment,
not from the guide.
