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

# Hulk: stock MVC1 mash follow-up investigation

Target: unmodified `roms/vanilla/mvsc.zip`, Euro 980123. Cached data/opcode
views and provenance are in `analysis/mvsc_mash_20260913/`.

## Result

Hulk's three Hyper Combos do **not** use attack-button mashing to buy extra
hits, extra projectiles, or extra active time in the examined stock paths.
Their state-machine traces, button/no-button comparisons, and instrumented
projectile counts agree. Gamma Crush does have a direction choice; Gamma
Charge has a separately entered kick follow-up. Neither is a press-count
bonus-hit system like Chun-Li's Kikosho or Senretsukyaku.

Fifteen paired MAME 0.287 trials restore the same save before each mode:
no post-command input, held six buttons, tapped LP, tapped six buttons,
and cycling directions. Character selection and moves use native inputs;
only pre-save meter, positions, and health are seeded. Both players are
human controlled, with P2 standing Spider-Man. The ROM is never patched.

| Move | Native command | +E6 selector | No input / hold all / tap LP / tap all peak hits |
|---|---|---|---|
| Gamma Wave | QCF+PP | 0C | 11 / 11 / 11 / 11 |
| Gamma Quake | QCF+KK | 14 | 7 / 7 / 7 / 7 |
| Gamma Crush | QCB+PP | 06 | 4 / 4 / 4 / 4 |

These hit totals describe this position/opponent fixture, not maximum move
hit counts. Gamma Wave's travelling children remain active after Hulk
recovers, so its 11-hit result includes that continuation. For the other
supers, later buffered normal attacks are excluded from the reported super
result. Button modes produce identical move-state timelines through the
first hyper's completion. Completion callbacks are respectively 100, 140,
and 217, not claimed as native frame data.

## Gamma Wave

The player routine starts at `$03238E`. Its animation event at `$03245E`
clears event bit 1 and `$032466` calls `$09F40E`, creating the wave controller.
The controller runs movement and a fixed cadence: `$09F576` initializes its
byte timer to 1; `$09F596` decrements it; `$09F59E` reloads 10; `$09F5A4`
creates the next child through `$09F43A`. Boundary handling can end the
travelling controller and create its final child.

Instrumenting the object-creation write at `$09F442` gives **8 wave children
in every one of the five modes**, including direction cycling. The child
attack-generation/rearming path at `$09F6CE..$09F700` is timer driven and
does not consume new-button events. Hit count also depends on the moving
waves reaching the opponent.

## Gamma Quake

The player routine starts at `$0324D6`. Animation event bit 0 triggers
`$0325A6 -> $0A95BC`, allocating a controller with object type E0.
The controller initializes its byte timer to `$30` (48) at `$0A96DA`, then
decrements at `$0A96F6`. If the timer has reached zero it exits; otherwise
it spawns a falling rock whenever `(timer & 3) == 0`, toggling the variant
bit at `$0A9708..$0A9712` and using `$0A9718 -> $0A95F2`.

That produces timer values 44, 40, ..., 4: **11 scheduled falling rocks**.
The type/subtype write at `$0A9600` confirms exactly **11 subtype-2 rocks
and 22 subtype-4 debris objects in every input mode**. There is no button
check or reload credit in this scheduler. Individual rocks choose random
positions at `$0A97C6..$0A97DC`, so object count is not the same as the
number of hits that connect.

## Gamma Crush

The player routine starts at `$031792`. It follows fixed animation and
movement states. After the ascent/wait, `$03191E` calls `$031C4C` to choose
the descent variant. For a human player `$031C56` reads **held**,
facing-relative direction byte `+$D7`, once. All five instrumented trials
contain exactly one such read. This is not the new-press field `+$D4`.

The selection at `+$380` is 0 for back, 2 for forward, and 4 for another
non-neutral direction. Neutral chooses a variant from the opponent's
position, with the close-distance case aligning Hulk's X position with
the opponent and selecting the vertical variant. These values select
horizontal velocities and effect offsets, not hit budgets. Data-view
velocities at `$031A08` are -4, +4, 0 in 16.16 units before facing reversal.

The meteor child is created at `$031990 -> $0976BC` and follows Hulk's
position/state. Its automatic attack rearming at `$0978B0..$0978DA` has no
button-event test. More/fewer connections from a changed trajectory would
be an aiming effect, not a reward for the number of presses.

## Other input-dependent Hulk actions

Gamma Charge uses new kick events (`+$DA & $0700`) at `$031244` and
`$032046`. It records direction/strength in `+$380/+$381` and enters the
follow-up charge state. This is a discrete second charge command, not an
unbounded loop that adds another charge for every mash.

There is also a bounded light-kick repeat path: `+$3A1` starts at 1 in the
normal's setup (`$0306D0`/`$030772`); `$030A94`/`$030B8E` accept a new or
buffered LK, spend that allowance and restart its animation. This is
normal repeat/cancel handling, rather than a mash-extension property of
the supers. These normal/special paths were statically traced, not
separately live-tested here.

## Evidence and limits

`summary.json` summarizes the 15 live trials. `gamma_*.csv` holds 400 rows
per input mode. `gamma_*-traced.log` includes controller/child allocation
events; `probe-traced.lua` generates those logs and suppresses reads made
by its own observation callback from the CPU input-read trace. Earlier
`gamma_*.log` input-read observations include diagnostic reads and should
not be used as evidence of CPU call sites; use the `-traced` logs instead.

Direction cycling changed some damage/placement outcomes, but produced no
extra scheduled rocks/wave children or larger peak combos in these tests.
Do not label those differences an extra-hit mash feature. Existing stock
RNG and movement/connection behavior were retained.

This result covers ordinary Hulk's three supers and the noted static
input paths. Orange Hulk shares Hulk's top-level code, but was not
separately live-tested; do not present it as a tested Orange Hulk result.
