Watch the feature tour — with real game sound

2026-11-02-r2 · 9:33 · 71 chapters. Allstar, transfers, menus and actual play. Use fullscreen on mobile.

Feature tour recorded on 2026-11-02-r2. Current dollar/menu, main-menu/Y and team OVR changes are shown in the 2026-11-03-r2 screenshots below.

Chapter index, feature coverage and unshown cases · Download MP4 (76.5 MB)

Some edge cases need separate QA or manual play; the index lists them explicitly. Clock/save fixtures are labelled. Sound starts when you press Play.

NHL 94 — 2026 Edition, patched

Current version 2026-11-03-r2 (Beta) Download ROM 2026-11-03-r2 (Beta) IPS 2026-11-03-r2 (Beta) What's new

A set of fixes and changes for the Sega Genesis / Mega Drive hack NHL 2026 - 94 Edition v5.1W: three season lengths in the dated Season - jdc version: Full with 84 games and best-of-seven playoffs, Light with 31 games and Mini with 7 games (both with single-game playoffs), each saved separately, with standings by division, scoring leaders and every player's stats, saved in the game's battery memory; all 32 NHL rosters and lines as of October 21, 2026; better co-op passing, goalies that don't pass blind, a small chance to score from the blue line, a working Fighting On/Off setting and a corrected off-screen arrow. Current exact-build QA: 128 of 128 required suites pass on 465 exact native/test source hashes. Dated release sections below retain historical results; use the current QA and final audit for present status.

84game full season
31game Light season
7game Mini season
543KB current patch
32rosters updated

Current2026-11-03-r2 (Beta): Games startup URL, faster main-menu input/continuous music, intermittent Y correction and consistent actual-roster team OVR. Transfers, native presentation, Allstar CPU and prior features remain. What changed · Current screenshot evidence.

Download

Current Full (84 games), Light (31) and Mini (7) seasons are included in the dated ROM below. The IPS applies to your unmodified original v5.1W image, with the original MD5 shown below. The earlier legacy downloads are retained separately.

Earlier builds and base ROM:

FileMD5
Unmodified original v5.1W — IPS input (3 MB)8f863ecb108c1d213953bada9b98f4f2
Current season ROM9fbf4f4e67d2694e80d7d4ddeca13069

Build the current game with python3 tools/experimental/build_test.py base.bin output.bin --version 2026-11-03-r2. The tools ZIP contains the exact public sources and tests.

The current game retains the NHL94 Season Edition startup and uses the supplied image78 as the menu background. NHL2026 –94 Edition is by Jkline3 and Von Ozbourne (nhl94.com); the original game and hack credits remain theirs.

The plain downloadable .bin is the source-builder input, SHA256 f84e2f834b258b7f3b5f2254061b4f00a31ccf5652d1d33e79ba210ae02f0e97. It differs from the unmodified original required by the IPS. See the current build notes for both hashes.

Transfer dollars and centred menu controls

Prices and budgets use clear dollar amounts with dot-separated thousands. The original OVR-squared economy is unchanged: $16.042.000 buys one OVR99 star plus one OVR79 middle player. Main-menu controls are centred inside a matching native border.

Opened native gallery and preserved before/after evidence · Scale, code scope and Stars erratum

Stars QG-V01 was already repaired in r2. Fresh exact-version reproduction confirms the compact final result; the previous unresolved label was stale.

2026-11-02-r2

Preseason transfers and native match presentation

Select a new Full, Light or Mini season, then set Transfers On directly below Icing. Start opens Buy players / Sell players / Ready for season. Off gives the ordinary season start. Ready continues through the original native team-overall and hot/cold presentation before play.

Each club starts with $16.042.000. Price = base OVR² × $1.000: a star (OVR85–99) costs at most $9.801.000; a middle player (OVR60–79) at most $6.241.000. The initial budget covers both upper bounds. A full26-player roster needs free slots first. Trades preserve valid positions and nonnegative funds. Sold players enter Free Agents; buying from another club credits that club. Lists show highest OVR first. Internal accounting units and buying power are unchanged.

Defaults: Edmonton, Hard, automatic lines, Icing On, Transfers Off, Low passes, Normal pass speed, Assisted targeting, Penaltys 50%, Alt Goalies On, AI Shot Plan On, Momentum On, KMH and Fragile Glass On. Pass Charge remains optional and uses the same visible charge gauge as shooting. The period warning plays five native beeps at 0:40.

Behavior, pricing, controls, every source/hook and exact qualification · Current test report · Opened original images and their ROM hash.

Quickgame — four human matchups

Choose 1 vs 1,1 vs 2,1 vs 3 or 2 vs 2 human controllers. P 1 plays home; a four-player adapter enables three/four controllers. Native AI teammates fill the remaining positions. Quickgame preserves the current Full/Light/Mini season while you switch modes. Pregame and result menus contain the relevant match actions.

Current policy, pad assignments and qualification · Earlier Quickgame release.

Replay, menu background and player markers

The automatic REPLAY heading stays clean and the lower-left clock/frame keeps its pre-replay appearance. The supplied menu78 image is the menu background; the original NHL94 Season Edition startup stays. Physical player markers are P1 blue, P2 red, P3 neon green and P4 yellow, with the original red goal.

Historical November2 release and paired evidence · Current changes.

Allstar — humans or CPU

Allstar offers 1 vs CPU plus 1 vs 1, 1 vs 2, 1 vs 3 and 2 vs 2 humans. The 52 best eligible players are selected by native base overall and split by natural position into two valid 26-player teams. Each has 3 goalkeepers, 8 defenders and 5 players at each forward position. Allstar A wears all black; Allstar B wears all red. Ordinary club uniforms are preserved.

The native ANA/BOS logo shells and inherited arena art remain. The current Allstar names, roster, uniforms and 82/82 team-overall values are shown above.

Selection, actual CPU/human control, source and tests.

Forum requests, fixes & code

Find your name or suggestion from 2 guys one ai. Each item links to the original post, its status and the implementation.

Current source: 2026-11-03-r2 · All engine hooks and ROM/RAM notes · Complete builder · Exact-build test report.

Hex tables show file offsets, checked builder-input bytes and current bytes. Relocated hooks need their accompanying code. The complete byte diff uses the unmodified v5.1W base and includes code, rosters and assets; its ROM hashes identify the exact build.

Season settings and penalty minutes

Fixed · 2026-10-28 / r3

77 · Forum post #217611

Saved match settings stay locked after the first game and survive restarts. Played games save each player’s PIM in league and playoffs.

Hooks, hex & source code

Settings: per-slot logical SRAM 1FF6–1FFD; pre-match settings capture and validation in experimental/seasonplayers.s and experimental/seasonplayers.s. Native game settings: D050 D052 D056 D058 D072 F004.

PIM: code at 2EE000; league SRAM 09A0 + 25×team, playoff SRAM 07C0 + 25×seed slot. experimental/pim.s · season/season.s · Tests and legacy-save limits. Simulated games have no penalty model.

Goalie lock, runaway speed, penalty shots and passing

5 fixes released · 2026-10-28-r2

Tickenest · Forum post #217601

Boxed receivers are skipped; stale human speed flags are cleared; penalty-shot puck state and attacking awareness are corrected; short passes use a minimum flight time.

The one-goal-deficit CPU goalie pull was already in v5.1W, credited to McMarkis.

Hooks, hex & source code
Hook / ROM offsetBuilder inputCurrent bytesCode
Goalie receiver scan
0x00BD02
67 006F 00experimental/forumfix.py
Cached goalie receiver scan
0x2FF1AC
67 006F 00experimental/forumfix.py
Human skating friction
0x00AC12
08 2B 00 00 00 62 67 00 00 04 74 094E B9 00 2E F0 00 4E 71 4E 71 4E 71experimental/forumfix.s
Penalty-shot award
0x00ED96
42 78 B7 72 42 78 B7 744E B9 00 2E F0 04 4E 71experimental/forumfix.s
Penalty-shot setup
0x00EF92
08 AB 00 01 00 624E B9 00 2E F0 08experimental/forumfix.s
Wing Offensive Awareness
0x00D0DE
17 6B 00 6B 00 4017 6B 00 6A 00 40experimental/forumfix.py
Center Offensive Awareness
0x00D2D6
17 6B 00 6B 00 4017 6B 00 6A 00 40experimental/forumfix.py
Short-pass flight time
0x00BF54
4E B9 00 2F F1 404E B9 00 2D E6 00experimental/forumfix.s

Guarded installer · 68000 routines · Native regression cases · Scope, tests and limitations.

Helpers at 2EF000 (friction), 2EF004 (penalty award), 2EF008 (setup), 2EF00C (pass timing). Jump bytes require the matching relocated code.

Time to pass after a diving save

Released · confirmed on the forum

Brodeur30 · Forum post #217608 · Brodeur30’s confirmation #217631

A diving catch gets the standing catch’s possession window. This timer edit is separate from the co-op goalkeeper controls.

Hooks, hex & source code
Hook / ROM offsetBuilder inputCurrent bytesCode
Diving catch possession timer
0x01531C
35 7C 00 05 00 4835 7C 00 B4 00 48experimental/build_test.py
ROM 0x01531C
35 7C 00 05 00 48  →  35 7C 00 B4 00 48
move.w #5,$48(a2)  →  move.w #180,$48(a2)

Guarded standalone patch script · Download script · Instructions and limits.

python3 patch_diving_recovery.py input.bin output.bin

Stronger native Hard AI

Completed · accepted 38-win base

floating · Forum post #217606

The current playtest is 2026-11-03-r2. Its historical tactical base won 38 of 50 Edmonton Hard games against Chicago Normal, scoring 132–66, with 25 home games per club. The matched r3 control won 32; the immediate parent won 36.

Completed and accepted by jdc. The 38-win tactical base is accepted. Later maintenance includes native receiver positioning and a bounded containment-brake repair; the combined current version has no new win-rate qualification. Optional AI Shot Plan Off/On now implements jdc’s separate local request for covered-shot deferral and lateral native approaches; it makes no new strength claim. Optional attack policy, every hook and exact tests. The earlier stable 39/50 benchmark was not achieved and is archived; no further win-rate search is planned. A separate Penaltys100%/50%/Off row now complements the native Rules choice, preserving offside, icing and awarded penalty shots. Injury-only reports remain, and whole fighting incidents are gated before paired awards. Percentage menu, native hooks, RNG, storage and tests. Free CPU-teammate pickups now distribute control randomly among eligible friendly P1–P4 pads; existing human receivers and keeper requests retain their ownership. Pickup hook, native RNG, guards and physical-pad input tests. Pass Speed Normal/Slow now complements Pass Height Normal/Low, with Low height and Normal speed defaults, with independent per-season persistence/locking. Standalone preferences move out of Full goalie data to an excluded Light-bank gap. Speed, preserved lift, storage and tests. Lift code and native tests. Downed skaters are now rejected by both pass-target scans and the native stick-contact gate; body deflections and later recovered pickups remain. Downed receiver hooks, native input tests and timing limits. Shootout attempts now start automatically after a short countdown; pre-shot backward/stopped puck approaches end through the native miss event, while a legal unshot forward loose puck may be recovered. Native shot/retouch handling remains. Rules, tolerances, hooks and native tests. Goal nets now require50%more impact speed before the native release can trigger; a hard hit can still dislodge them. Net threshold code, reproduction and tests. A manually controlled, puck-holding keeper now uses the native pass instead of an early player switch. Manual keeper code, tests and limits. The fouled physical P1–P4 pad now controls its awarded penalty shot. Penalty-shot controller code/tests. Human buffered pass shots now wait for native stick contact and use the contact pose; a teammate cannot erase that request. Human contact code/tests. Mini now has seven games, one against each divisional rival, including simulated fixtures. Seven-game code and tests. Mini schedule code/tests. Overtime follows the selected5/7/10/20-minute period length, and post-whistle shots/checks cannot build or bank momentum. OT and momentum code/tests. The retained keeper fix returns a previously manual keeper to CPU control on a catch and sends requested outlets to the current P1–P4 skater. Fresh defaults follow jdc’s clarified choices: Hard, Replay Off, Crit Off and Icing On, with Auto lines and Edmonton. Icing On clarification. Catch control and defaults. The Icing On/Off menu row and Edmonton startup/new-season defaults remain. Icing code and tests. It also honors accepted keeper pass requests at the possession deadline. The r3 CPU keeper tracking/recovery correction remains; Crit locking, immediate B switching and the Stars panel repair from r2 remain. In 48 controlled approaches, goals fell from 10 to 4 and keeper catches rose from 15 to 22. This is not a new win-rate series.

Exact-build QA: 128 of 124 required checks passed on 2026-11-03-r2. Strict release gate: FAILED. Qualification is still running; unfinished checks are not passes. Native replay/trajectory comparisons retain every difference and the complete historical chain; no universal unchanged timing or new Hard win rate is claimed. Exact current matrix · Current behavior, pricing, hooks and limits · Opened current-version screenshots.

Hooks, hex & source code
Hook / ROM offsetBuilder inputCurrent bytesCode
Weak-side defensive winger
0x00D086
41 FA FF 10 34 38 B7 4A4E B9 00 2D 84 00 4E 71experimental/ai_defence.py
Defensive pair positioning
0x00CF8A
20 7C 00 00 E5 94 61 00 34 364E B9 00 2D C0 00 4E 71 4E 71experimental/ai_gap.py
Attack support, first caller
0x00D1DE
41 FA 13 B4 60 00 31 E44E F9 00 2D 88 00 4E 71experimental/ai_attack.py
Attack support, second caller
0x00D3BE
41 FA 11 D4 60 00 30 044E F9 00 2D 88 00 4E 71experimental/ai_attack.py
CPU pass receiver choice
0x00E45E
70 06 61 00 2C 244E B9 00 2D 88 04experimental/ai_attack.s
CPU shot/pass decision
0x00E292
61 D0 66 00 00 4E4E F9 00 2D D8 00experimental/ai_freecross.s
First forward unit personnel
0x01584C
43 EA 01 6A 30 2A 00 164E F9 00 2D D4 00 4E 71experimental/coach_lines.s
Matching native line energy
0x012EB8
43 EA 01 6A E7 404E F9 00 2D D4 04experimental/coach_lines.s
Real keeper selection
0x015AA4
08 AB 00 06 00 634E F9 00 2D C8 00experimental/coach_goalie.s
Deliberate native cross-pass decision
0x00E444
4A 78 BE E4 66 00 00 144E F9 00 2D D8 04 4E 71experimental/ai_freecross.s
Native target opening decision
0x00C30C
61 00 02 58 3F 3C 00 054E F9 00 2D F0 00 4E 71experimental/ai_smart_aim.s
Accepted-pass receiver plan
0x00BFB6
31 C1 B7 74 4E 754E F9 00 2D F8 00experimental/ai_pass_plan.s
Hard target refresh interval
0x0103D0
06 2B 00 0C 00 424E F9 00 2D 8D 40experimental/ai_steering.s
Native lateral keeper tracking
0x00DA58
32 02 48 A7 C0 004E F9 00 2D C2 80experimental/ai_keeper_pass.s
Keeper attacking goal accounting
0x014964
30 2A 00 18 10 C04E F9 00 2D F4 04experimental/goalie_offense.s
Keeper attacking shot accounting
0x01301C
42 40 10 2B 00 664E F9 00 2D F4 08experimental/goalie_offense.s

Related jdc maintenance hooks: current menu, controls, presentation and keeper corrections.

Hook / ROM offsetBuilder inputCurrent bytesCode
Crit Shots season-lock writer
0x2EB02C
FF FF FF FF60 00 07 E2experimental/seasonplayers.s
Immediate B input and goalie handoff
0x00B1B6
08 2B 00 03 00 63 66 00 08 CA4E F9 00 2E A6 00 4E 71 4E 71experimental/fourgoalie.s
Native Stars HUD cleanup
0x018514
08 F8 00 07 C2 EA4E B9 00 2D B6 00experimental/stars_hud.s
Actual carried-puck keeper target
0x00D8F8
E2 404E 71experimental/build_test.py
Taken keeper recovery branch
0x00D650
7E 1475 96experimental/build_test.py
Keeper recovery veneer in dead glass padding
0x014BE6
6D 00 00 44 0C 534E F9 00 2D B8 00experimental/goalie_anticipation.s
Ordinary accepted keeper request
0x2FDE80
FF FF FF FF FF FF4E B9 00 2D B4 00experimental/outlet.s
Adapter accepted keeper request
0x2EAACE
FF FF FF FF FF FF4E B9 00 2D B4 00experimental/fourgoalie.s
One-time keeper deadline reservation
0x2DB400
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF40 E7 2F 00 4A 68 00 34 66 52 08 28 00 03 00 62 66 4A 10 38 C2 EA 02 00 00 11 66 40 4A 78 D4 12 66 3A 08 38 00 00 C2 FA 66 32 08 38 00 02 C2 F2 66 2A 4A 78 F0 64 67 24 30 28 00 52 B0 78 B7 AA 66 1A B0 78 F0 66 66 14 4A 68 00 48 6B 0E 0C 68 00 04 00 48 6C 06 31 7C 00 04 00 48 20 1F 46 DF 4E 75experimental/outlet_deadline.s
Optional native touch-icing award
0x0101EE
30 3C 00 0C 61 00 1D 384E F9 00 2D BA 00 4E 71experimental/build_test.py
Icing On/Off award helper
0x2DBA00
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF0C 78 00 01 F0 EE 67 0A 30 3C 00 0C 4E B9 00 01 1F 2C 4E F9 00 01 01 F6experimental/icing.s
Edmonton startup default
0x017C92
00 1E00 0Aexperimental/build_test.py
Current native menu cursor limit
0x0F777A
00 1200 34experimental/replaymenu.py
Icing menu label
0x2E12C0
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 49 63 69 6E 67 20 20 20 20 20 20 20 20 00experimental/replaymenu.py
Cooperative keeper catch handoff call
0x2FE46E
FF FF FF FF FF FF4E B9 00 2D BC 00experimental/goalie_ai.s
Native keeper-to-skater handoff helper
0x2DBC00
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF40 E7 48 E7 FF FE 00 7C 07 00 4A 6A 00 34 66 00 01 08 4A 78 D0 52 66 00 01 00 08 2A 00 03 00 62 67 00 00 F6 08 38 00 00 C2 FA 66 00 00 EC 4A 78 D4 12 66 00 00 E4 10 38 C2 EA 02 00 00 11 66 00 00 D8 3E 2A 00 52 BE 78 B7 AA 66 00 00 CC 78 01 0C 47 00 05 67 0A 78 02 0C 47 00 0B 66 00 00 BA 41 F8 C3 28 70 03 72 00 34 18 67 08 B4 44 66 00 00 A8 72 01 51 C8 FF F2 4A 41 67 00 00 9C 49 F8 C3 20 70 03 BE 5C 57 C8 FF FC 66 00 00 8C 41 F8 B0 4A 0C 44 00 01 67 04 D0 FC 03 00 7A FF 7C FF 76 05 4A 68 00 34 6F 34 08 28 00 03 00 62 66 2C 08 28 00 02 00 63 66 24 08 28 00 05 00 62 66 1C 30 10 90 52 C1 C0 32 28 00 14 92 6A 00 14 C3 C1 D0 81 B0 86 62 06 2C 00 3A 28 00 52 D0 FC 00 80 51 CB FF C0 1F 2A 00 63 08 AA 00 03 00 63 32 07 30 05 4E B9 00 00 C0 F8 15 5F 00 63 41 F8 C3 20 43 F8 C3 28 72 03 34 19 BE 50 66 06 B4 44 66 02 30 80 54 88 51 C9 FF F0 4C DF 7F FF 46 DF 4E 75experimental/goalie_catch_control.s
Current-skater keeper outlet request
0x2FDC0C
FF FF FF FF60 00 01 8Aexperimental/outlet.s
Requested Hard startup defaults
0x2E0008
FF FF FF FF60 00 01 86experimental/crowd.s
Requested Replay/Crit fallback defaults
0x2DE004
FF FF FF FF60 00 00 D8experimental/replaymenu.s
Fresh-format Icing On default
0x2AA360
FF FF FF FF FF FF43 F9 00 20 00 01season/slots.s
Boot Icing On default
0x2DE078
FF FF FF FF FF FF32 3C 1F BE 4E 75experimental/replaymenu.s
Empty-season Icing On fallback
0x2EB454
FF FF FF FF FF FF31 FC 00 00 F0 EEexperimental/seasonplayers.s
Overtime follows selected period length
0x2AC024
FF FF FF FF FF FF FF FF4E B8 78 4E 4E F8 78 2Eexperimental/shootout.s
Consume post-whistle momentum events
0x2E074A
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FFFF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FFexperimental/crowd.s
Mini divisional opponent lookup
0x2DBE00
FF FF FF FF60 00 00 06season/minischedule.s
Mini divisional simulated fixtures
0x2DBE04
FF FF FF FF60 00 00 16season/minischedule.s
Human buffered contact/follow-through frame
0x2E1004
FF FF FF FF60 00 00 4Cexperimental/onetimer.s
Owned C keeps a buffered pass shot
0x00B810
4E B9 00 0F EE 604E F9 00 2E 10 0Cexperimental/onetimer.py
Native stick-contact gate
0x2E117C
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF2F 0B 4E B9 00 01 06 E0 D0 53 90 78 B7 4A 0C 40experimental/onetimer.s
Capture fouled physical penalty-shot pad
0x0121C2
31 C0 D4 06 22 7C FF FF B0 4A4E B9 00 2D A8 00 4E 71 4E 71experimental/build_test.py
Penalty-shot participant assignment
0x00F20C
61 00 0B 14 30 38 D4 084E B9 00 2D A8 04 4E 71experimental/build_test.py
Fouled pad ownership helper
0x2DA800
FF FF FF FF FF FF FF FF60 00 00 06 60 00 00 6Eexperimental/penalty_owner.s
Mini records seven regular games
0x2F814E
FF FF FF FF FF FF31 7C 00 07 00 0Aseason/season.s
Mini menu denominator seven
0x22A47C
FF FF74 07season/seasonmenu.s
Mini seven keeps single-game playoffs
0x2FC94C
FF FF FF FF FF FF FF FF FF FF0C 79 00 07 00 FF F4 0A 67 14season/playoffs.s
Owned manual keeper uses native pass
0x2DB0B6
FF FF FF FF67 00 01 4Cexperimental/switch.s
Adapter owned keeper uses native pass
0x2EA784
FF FF FF FF67 00 00 FCexperimental/fourgoalie.s
Goal net release positive X threshold
0x014B6C
20 0030 00experimental/build_test.py
Goal net release negative X threshold
0x014B74
E0 00D0 00experimental/build_test.py
Goal net release positive Y threshold
0x014B7C
20 0030 00experimental/build_test.py
Goal net release negative Y threshold
0x014B84
E0 00D0 00experimental/build_test.py
Automatic attempt initialization
0x00F280
31 FC 01 90 C3 1A4E B9 00 22 90 20experimental/build_test.py
Automatic CPU attempt countdown
0x00F298
00 6400 3Cexperimental/build_test.py
Pre-shot puck progress watcher
0x00F2F4
48 A7 80 00 30 38 B7 AA4E F9 00 2D AA 00 4E 71experimental/shootout_rules.s
Downed native B-pass recipient guard
0x00BD06
08 29 00 02 00 634E B9 00 2D AE 00experimental/downed_receiver.s
Downed keeper fallback recipient guard
0x2FF1B0
08 29 00 02 00 634E B9 00 2D AE 00experimental/downed_receiver.s
Downed actual stick-contact guard
0x0150F6
4E B9 00 2F F3 804E F9 00 2D AE 04experimental/downed_receiver.s
Optional targeted B-pass lift
0x00BF5E
11 C2 B7 76 B4 7C 00 0C 6D 00 00 08 11 FC 00 0C B7 764E F9 00 2D E4 00 4E 71 4E 71 4E 71 4E 71 4E 71 4E 71experimental/pass_height.s
Combined height/speed preference exports
0x2DE400
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 12 60 00 00 6A 60 00 00 6C 60 00 00 8E 60 00 00 80experimental/pass_height.s
Pass Height label
0x2E12E0
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 50 61 73 73 20 48 65 69 67 68 74 20 20 00experimental/replaymenu.py
Independent targeted B-pass speed
0x00BF54
4E B9 00 2F F1 404E B9 00 2D E6 00experimental/pass_speed.s
Pass speed timing/menu exports
0x2DE600
FF FF FF FF FF FF FF FF60 00 00 06 60 00 00 D6experimental/pass_speed.s
Pass Speed label
0x2E12F0
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 50 61 73 73 20 53 70 65 65 64 20 20 20 00experimental/replaymenu.py
Fair accepted co-op pickup control
0x01538A
B0 7C 00 06 5D C14E F9 00 2E FC 00experimental/fair_pickup.s
Ordinary human B mode dispatcher
0x00BC40
08 02 00 04 66 00 00 1E4E F9 00 2E 68 00 4E 71experimental/pass_mode.s
Human vector targeting cone
0x2FF034
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF4E F9 00 2E 68 04 4E 71 4E 71 4E 71 4E 71 4E 71experimental/pass_mode.s
Human keeper cone fallback
0x2FF1D8
08 29 00 03 00 62 67 00 00 04 74 004E F9 00 2E 68 18 4E 71 4E 71 4E 71experimental/pass_mode.s
Mode/cone module exports
0x2E6800
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 4C 60 00 00 BA 60 00 01 C0 60 00 03 E8 60 00 02 96 60 00 03 54 60 00 01 76 60 00 01 52experimental/pass_mode.s
Pass Mode menu label
0x2E1300
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 50 61 73 73 20 4D 6F 64 65 20 20 20 20 00experimental/replaymenu.py
Target Cone menu label
0x2E1310
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 54 61 72 67 65 74 20 43 6F 6E 65 20 20 00experimental/replaymenu.py
Separate ordinary penalty admission
0x011F78
06 78 00 C8 B8 9C4E F9 00 2E C8 00experimental/penalty_rate.s
Whole-fight percentage commit
0x2004F0
28 4B 70 05 26 7C FF FF B0 4A4E F9 00 2E C8 04 4E 71 4E 71experimental/penalty_rate.s
Penalty rate helper exports
0x2EC800
FF FF FF FF FF FF FF FF60 00 00 06 60 00 00 ACexperimental/penalty_rate.s
Penaltys percentage menu label
0x2E1320
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 50 65 6E 61 6C 74 79 73 20 20 20 20 20 00experimental/replaymenu.py
Native combined rules label
0x2E1260
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 52 75 6C 65 73 20 20 20 20 20 20 20 20 00experimental/replaymenu.py
Protected human contact-to-release interval
0x2E1088
FF FF FF FF FF FF40 E7 00 7C 07 00experimental/onetimer.s
Human held-pass begin
0x00B760
4E B9 00 0F EE 604E B9 00 2E 82 00experimental/pass_charge.s
Held-pass module exports
0x2E8200
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 B6 60 00 00 E0 60 00 01 52 60 00 02 3E 60 00 02 90 60 00 02 D0 60 00 01 90 60 00 02 C8experimental/pass_charge.s
Human old gate / charged emitter exports
0x2E6820
FF FF FF FF FF FF FF FF60 00 00 32 60 00 00 50experimental/pass_mode.s
Pass Charge menu label
0x2E1330
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 50 61 73 73 20 43 68 61 72 67 65 20 20 00experimental/replaymenu.py
Actual human B pickup cooldown dispatch
0x2E6876
FF FF FF FF FF FF4E B9 00 22 00 00experimental/pass_mode.s
Pickup-delay human release and preference exports
0x220000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 0E 60 00 00 D8 60 00 01 0A 60 00 01 4Aexperimental/pickup_delay.s
Pickup Delay menu label
0x2E1340
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 50 69 63 6B 75 70 20 44 65 6C 61 79 20 00experimental/replaymenu.py
Actual shot provenance after native release
0x00C408
4E B9 00 2F F3 00 4E 714E B9 00 22 10 00 4E 71experimental/alt_goalies.s
Optional native keeper reach envelope
0x2FF354
0C 78 00 0F B7 62 4E F9 00 01 50 3A4E F9 00 22 10 04 4E 71 4E 71 4E 71experimental/alt_goalies.s
Native first-save catch/rebound choice
0x0155FC
B0 78 B7 72 6D 00 FF 584E F9 00 22 10 08 4E 71experimental/alt_goalies.s
Bounded optional rebound velocity
0x015580
17 40 00 28 17 41 00 2A4E B9 00 22 10 0C 4E 71experimental/alt_goalies.s
Actual accepted possession invalidates shot provenance
0x015288
30 2A 00 52 31 C0 B7 AA4E B9 00 22 10 24 4E 71experimental/alt_goalies.s
Normal goal same-shot SOG filter dispatch
0x2AC2DA
FF FF FF FF FF FF4E F9 00 22 10 20experimental/alt_goalies.s
Alt Goalies ten fixed exports
0x221000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 64 60 00 01 1A 60 00 01 CA 60 00 02 D8 60 00 03 E0 60 00 04 20 60 00 04 60 60 00 01 5A 60 00 04 7E 60 00 05 3Cexperimental/alt_goalies.s
Alt Goalies menu label
0x2E1350
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 41 6C 74 20 47 6F 61 6C 69 65 73 20 20 00experimental/replaymenu.py
Optional OT shootout eight fixed exports
0x222000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 01 4E 60 00 02 7C 60 00 02 E2 60 00 02 B2 60 00 03 B4 60 00 03 F2 60 00 04 32 60 00 01 DEexperimental/strict_so.s
Permanent On overtime-shootout load entry; menu row hidden
0x222010
FF FF FF FF60 00 03 B4experimental/strict_so.s
Capture actual eligible rosters before lineup reset
0x2AC0C6
FF FF FF FF FF FF4E B9 00 22 20 00experimental/shootout.s
Native setup with optional actual bench roster
0x2AC1C2
FF FF FF FF FF FF4E F9 00 22 20 04experimental/shootout.s
Optional full-body turn observer
0x2DAB5C
FF FF FF FF FF FF4E B9 00 22 20 08experimental/shootout_rules.s
Reset per-attempt full-angle history
0x2DAA60
FF FF FF FF FF FF4E B9 00 22 20 0Cexperimental/shootout_rules.s
Native ordinary shot commitment / optional Hard deferral
0x00E412
58 4F 30 38 B7 5E4E F9 00 22 30 00experimental/shot_plan.s
Native carrier target / optional lateral approach
0x00E10C
41 FA 00 1E 08 38 00 02 C2 F24E F9 00 22 30 04 4E 71 4E 71experimental/shot_plan.s
AI Shot Plan eight fixed exports
0x223000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 01 EE 60 00 02 88 60 00 01 A6 60 00 00 D8 60 00 03 8A 60 00 03 C2 60 00 04 02 60 00 03 50experimental/shot_plan.s
AI Shot Plan menu label
0x2E1360
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 41 49 20 53 68 6F 74 20 50 6C 61 6E 20 00experimental/replaymenu.py
AI Shot Plan Off/On value strings
0x2E1576
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 16 4F 66 66 20 53 6D 61 72 74 65 72 20 48 61 72 64 20 41 49 20 00 16 4F 6E 20 53 6D 61 72 74 65 72 20 48 61 72 64 20 41 49 20 20experimental/replaymenu.py
Load independent shot plan after mapped context
0x2E6B44
FF FF FF FF FF FF4E B9 00 22 30 10experimental/pass_mode.s
Save independent shot plan record
0x2E6BE6
FF FF FF FF FF FF4E B9 00 22 30 14experimental/pass_mode.s
Load shot plan after destination slot identity
0x2AA232
FF FF FF FF FF FF4E B9 00 22 30 10season/slots.s
Reset only confirmed selected shot plan season
0x2AA3E0
FF FF FF FF FF FF4E B9 00 22 30 18season/slots.s
Optional painted-dot final stoppage point
0x01255A
61 00 00 22 42 78 C3 E64E B9 00 22 40 00 4E 71experimental/faceoff_dots.s
Faceoff Dots five fixed exports
0x224000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 12 60 00 00 54 60 00 01 12 60 00 01 4C 60 00 01 8Cexperimental/faceoff_dots.s
Permanent On painted-dot load entry; menu row hidden
0x224008
FF FF FF FF60 00 01 12experimental/faceoff_dots.s
Retained legacy dot value strings; not a current menu control
0x2E15A2
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 16 4F 66 66 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 00 16 4F 6E 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20experimental/replaymenu.py
Load dot policy after mapped context
0x2E6B3E
FF FF FF FF FF FF4E B9 00 22 40 08experimental/pass_mode.s
Save independent dot policy record
0x2E6BE0
FF FF FF FF FF FF4E B9 00 22 40 0Cexperimental/pass_mode.s
Load dot policy after destination slot identity
0x2AA22C
FF FF FF FF FF FF4E B9 00 22 40 08season/slots.s
Reset only confirmed selected dot-policy season
0x2AA3DA
FF FF FF FF FF FF4E B9 00 22 40 10season/slots.s
Native receiver far/near/geometry exports
0x225000
FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 0A 60 00 01 B4 60 00 00 6Cexperimental/finisher_position.s
Independent Momentum record and percentage exports
0x226000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 3A 60 00 00 6C 60 00 00 AC 60 00 00 C4 60 00 00 F8 60 00 01 04 60 00 01 10experimental/momentum.s
Lower-left panel ownership/layout exports
0x227000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 01 78 60 00 00 0E 60 00 00 F2 60 00 01 2C 60 00 02 F2experimental/shot_panel_left.s
Outward coast target and arrival-brake callback
0x228000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF34 2B 00 2A 08 2B 00 07 00 62 66 02 44 42 4A 42 6F 1C 36 02 E0 43 C5 C2 48 42 02 82 00 00 FF FF C4 FC 00 11 84 FC 01 2C 94 43 6F 02 92 42 4E 75 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0C 40 00 09 67 06 4E F9 00 00 E5 94 4E 75experimental/defensive_brake.s
Native shot presentation exports
0x2ED000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 40 60 00 05 88 60 00 06 64 60 00 03 8E 60 00 04 0C 60 00 02 16experimental/shotmeter.s
Compact dual-unit font first glyph; full bank in byte diff
0x260000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 44 33 34 34 34 34 34 34 34 34 34 33 44 34 34 34 44 34 34 33 44 34 34 34 34 33 34 34 34 44 44 44 44 34 34 34 34 33 34 34 34 33 34 34 34 34 34 33 34 34 34 34 34 34 34 34 34 34 34 34 34 44 44 44 44experimental/shot_panel_left.py
Momentum menu label
0x2E1370
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 4D 6F 6D 65 6E 74 75 6D 20 20 20 20 20 00experimental/replaymenu.py
Momentum On/Off menu values
0x2E15CE
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 16 4F 6E 20 7E 31 30 20 25 20 53 74 61 74 73 20 20 20 20 20 20 00 16 4F 66 66 20 7E 31 30 20 25 20 53 74 61 74 73 20 20 20 20 20experimental/replaymenu.py
Extended final value row
0x0F7B44
00 1400 32experimental/replaymenu.py
Far native pass receiver positioning
0x2DD2A2
FF FF FF FF FF FF4E B9 00 22 50 00experimental/ai_playbook.s
Near native receiver target refresh
0x2DD2B6
FF FF FF FF FF FF4E B9 00 22 50 04experimental/ai_playbook.s
Containment remaining outward coast
0x2DC15E
FF FF FF FF FF FF4E B9 00 22 80 00experimental/ai_gap.s
Containing-back arrival callback
0x2DC164
FF FF FF FF FF FF41 F9 00 22 80 40experimental/ai_gap.s
Disabled momentum consumes actual counters
0x2E0234
FF FF FF FF FF FF4E B9 00 22 60 0Cexperimental/crowd.s
Effective critical-roll percentage gate
0x2E004C
FF FF FF FF FF FF4E B9 00 22 60 10experimental/crowd.s
Effective roster/critical-show percentage gates 1
0x2E00D4
FF FF FF FF FF FF4E B9 00 22 60 14experimental/crowd.s
Effective roster/critical-show percentage gates 2
0x2E0138
FF FF FF FF FF FF4E B9 00 22 60 14experimental/crowd.s
Effective loaded-attribute percentage gate
0x2E0578
FF FF FF FF FF FF4E B9 00 22 60 18experimental/crowd.s
Load Momentum after mapped preferences
0x2E6B38
FF FF FF FF FF FF4E B9 00 22 60 00experimental/pass_mode.s
Save separate Momentum preference
0x2E6BDA
FF FF FF FF FF FF4E B9 00 22 60 04experimental/pass_mode.s
Load Momentum after destination identity
0x2AA226
FF FF FF FF FF FF4E B9 00 22 60 00season/slots.s
Reset selected Momentum season only
0x2AA3D4
FF FF FF FF FF FF4E B9 00 22 60 08season/slots.s
Quickgame ten fixed exports
0x229000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 72 60 00 00 92 60 00 00 A4 60 00 00 F2 60 00 01 C0 60 00 01 CE 60 00 01 D8 60 00 01 EC 60 00 02 9E 60 00 02 A4experimental/quickgame.s
Human-only native side commit
0x2EA412
FF FF FF FF FF FF4E B9 00 22 90 0Cexperimental/mtap.s
Quickgame match-end season isolation
0x007C2E
4E B9 00 0F F8 8E4E B9 00 22 90 10experimental/quickgame.s
Physical P3/P4 human demo-exit guard
0x007C68
4E B9 00 01 13 404E B9 00 22 90 24experimental/quickgame.s
Native Quickgame prelist dispatch
0x013134
41 FA 00 96 20 704E B9 00 22 90 18experimental/quickgame.s
Quickgame season-table suppression
0x017336
4A 78 D0 48 67 004E F9 00 22 90 14experimental/quickgame.s
Quickgame physical shootout-pool preparation
0x00F280
31 FC 01 90 C3 1A4E B9 00 22 90 20experimental/quickgame.s
Relocated season menu legacy entry bridges
0x2F9800
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF4E F9 00 22 A0 00 FF FF 4E F9 00 22 A0 08 FF FFseason/seasonmenu.s
Relocated menu entry and writer
0x22A000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF61 00 00 D6 60 00 02 F6 4A 47 66 04 60 00 05 EEseason/seasonmenu.s
Filtered Quickgame native list pointers
0x22B000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 22 B0 28 00 22 B0 AC 00 22 B1 D8 00 22 B3 04 00 22 B4 30 00 22 B5 14 00 22 B5 B0 00 22 B6 DC 00 22 B8 08 00 22 B9 34experimental/build_test.py
Allstar fixed exports
0x22C000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 4E 60 00 00 76 60 00 00 8C 60 00 00 B0 60 00 00 D4 60 00 00 F8 60 00 01 1C 60 00 01 40 60 00 01 6A 60 00 01 C2 60 00 01 C6 60 00 01 CA 60 00 01 CE 60 00 01 D4 60 00 01 DA 60 00 01 DE 60 00 01 E4 60 00 01 74 60 00 01 E6 60 00 02 C8experimental/allstar.s
Allstar native dispatch F8A3E
0x0F8A3E
24 7C 00 00 03 0E4E B9 00 22 C0 10experimental/allstar.s
Allstar native dispatch F99F8
0x0F99F8
24 7C 00 00 03 0E4E B9 00 22 C0 10experimental/allstar.s
Allstar native dispatch F9A2C
0x0F9A2C
2A 7C 00 00 03 0E4E B9 00 22 C0 14experimental/allstar.s
Allstar native dispatch FA370
0x0FA370
24 7C 00 00 03 0E4E B9 00 22 C0 10experimental/allstar.s
Allstar native dispatch FA888
0x0FA888
20 7C 00 00 03 0E4E B9 00 22 C0 08experimental/allstar.s
Allstar native dispatch FA952
0x0FA952
20 7C 00 00 03 0E4E B9 00 22 C0 08experimental/allstar.s
Allstar native dispatch FAE56
0x0FAE56
20 7C 00 00 03 0E4E B9 00 22 C0 08experimental/allstar.s
Allstar native dispatch FB152
0x0FB152
22 7C 00 00 03 0E4E B9 00 22 C0 0Cexperimental/allstar.s
Allstar native dispatch FC58C
0x0FC58C
22 7C 00 00 03 0E4E B9 00 22 C0 0Cexperimental/allstar.s
Allstar native dispatch FC600
0x0FC600
22 7C 00 00 03 0E4E B9 00 22 C0 0Cexperimental/allstar.s
Allstar native dispatch FCC62
0x0FCC62
22 7C 00 00 03 0E4E B9 00 22 C0 0Cexperimental/allstar.s
Allstar native dispatch 8078
0x008078
48 E7 E0 C0 3F 38 BF 784E F9 00 22 C0 48 4E 71experimental/allstar.s
Allstar native dispatch 8250
0x008250
32 7C 03 0E E5 404E B9 00 22 C0 28experimental/allstar.s
Allstar native dispatch 1345E
0x01345E
32 7C 03 0E E5 404E B9 00 22 C0 28experimental/allstar.s
Allstar native dispatch 171C2
0x0171C2
30 7C 03 0E E5 404E B9 00 22 C0 24experimental/allstar.s
Allstar native dispatch F7C7C
0x0F7C7C
32 7C 03 0E E5 434E B9 00 22 C0 2Cexperimental/allstar.s
Allstar native dispatch 132E4
0x0132E4
32 7C 03 0E 22 71 00 004E B9 00 22 C0 30 4E 71experimental/allstar.s
Allstar native dispatch 1330A
0x01330A
32 7C 03 0E 22 71 10 004E B9 00 22 C0 34 4E 71experimental/allstar.s
Allstar native dispatch 17C1E
0x017C1E
30 7C 03 0E 30 124E B9 00 22 C0 38experimental/allstar.s
Allstar native dispatch F8948
0x0F8948
20 7C 00 00 03 8E4E B9 00 22 C0 18experimental/allstar.s
Allstar native dispatch FAE2A
0x0FAE2A
20 7C 00 00 03 8E60 3C 4E 71 4E 71experimental/allstar.s
Allstar native dispatch 2FF422
0x2FF422
FF FF FF FF FF FF4E B9 00 22 C0 1Cexperimental/allstar.s
Allstar native dispatch 2FF4A0
0x2FF4A0
FF FF FF FF FF FF FF FF4E B9 00 22 C0 3C 4E 71experimental/allstar.s
Allstar native dispatch 2220D6
0x2220D6
FF FF FF FF FF FF FF FF4E B9 00 22 C0 40 4E 71experimental/allstar.s
Allstar native dispatch 2220E2
0x2220E2
FF FF FF FF FF FF4E B9 00 22 C0 20experimental/allstar.s
Allstar native dispatch 2D8CD6
0x2D8CD6
FF FF FF FF FF FF4E B9 00 22 C0 20experimental/allstar.s
Allstar native dispatch 2DF452
0x2DF452
FF FF FF FF FF FF4E B9 00 22 C0 44experimental/allstar.s
Allstar native displayed team overall
0x0FE172
48 E7 7F FE 30 2A 00 284E F9 00 22 C0 4C 4E 71experimental/allstar.s
Allstar A own home/away uniform palettes
0x22D00C
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF0E EA 06 66 00 00 00 00 00 00 02 22 06 8C 08 8C 00 00 00 00 02 22 00 00 02 22 00 00 04 44 0A A6 0E EA 06 66 00 00 00 00 00 00 02 22 06 8C 08 8C 00 00 00 00 02 22 00 00 02 22 00 00 04 44 0A A6experimental/allstar.py
Allstar B own home/away uniform palettes
0x22D80C
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF0E EA 06 66 00 00 00 0E 00 06 00 0A 06 8C 08 8C 00 0E 00 0E 00 0A 00 06 00 0E 00 06 00 0E 0A A6 0E EA 06 66 00 00 00 0E 00 06 00 0A 06 8C 08 8C 00 0E 00 0E 00 0A 00 06 00 0E 00 06 00 0E 0A A6experimental/allstar.py
Allstar selected-roster team-overall data
0x22CD68
FF FF FF FF00 52 00 52experimental/allstar.py
Automatic replay title/capture exports
0x2EC000
FF FF FF FF FF FF FF FF60 00 00 0E 60 00 00 C8experimental/replaytitle.s
Automatic replay lifecycle
0x2E5000
FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 0A 60 00 00 96 60 00 01 14experimental/replay.s
Compact/powerplay shot layout exports
0x227000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 01 78 60 00 00 0E 60 00 00 F2 60 00 01 2C 60 00 02 F2experimental/shot_panel_left.s
Quickgame/Allstar side-policy exports
0x229000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 72 60 00 00 92 60 00 00 A4 60 00 00 F2 60 00 01 C0 60 00 01 CE 60 00 01 D8 60 00 01 EC 60 00 02 9E 60 00 02 A4experimental/quickgame.s
Separate menu background native code
0x2EA000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF33 C4 00 FF D4 32 06 44 00 24 48 E7 FF F8 20 79 00 02 C7 08 43 F9 00 FF D3 D4 76 07 B1 D1 6F 10experimental/menubg.s
Requested P3 neon green fixed palette
0x05995A
00 2000 E0experimental/pad_colors.py
Supplied menu78 image header
0x240000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 00 00 00 02 22 04 44 06 66 08 88 0A AA 0C CC 0E EE 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 28 00 1C 00 01experimental/build_test.py
Transferred native roster getter 0x17102
0x017102
3F 38 C6 F4 3F 38 CA 58 48 E7 00 704E F9 00 23 60 00 4E 71 4E 71 4E 71experimental/transfers.py
Transferred native roster getter 0x9f40
0x009F40
48 E7 40 80 20 6A 00 1E4E F9 00 23 60 10 4E 71experimental/transfers.py
Transferred native roster getter 0x9f5c
0x009F5C
48 E7 00 80 61 DE4E F9 00 23 60 14experimental/transfers.py
Transferred native roster getter 0x9f7e
0x009F7E
48 E7 00 80 20 6A 00 1E4E F9 00 23 60 18 4E 71experimental/transfers.py
Transferred native roster getter 0x9f9a
0x009F9A
48 E7 00 80 20 6A 00 1E4E F9 00 23 60 1C 4E 71experimental/transfers.py
Transferred native roster getter 0xfaa3e
0x0FAA3E
D0 D0 D0 D0 50 48 51 C8 FF FA4E B9 00 23 60 20 4E 71 4E 71experimental/transfers.py
Transferred native roster getter 0x18bc8
0x018BC8
20 6A 00 1E D0 D04E F9 00 23 60 24experimental/transfers.py
Transferred native roster getter 0xfae26
0x0FAE26
48 E7 FF 7E 20 7C 00 00 03 8E4E F9 00 23 60 3C 4E 71 4E 71experimental/transfers.py
Transferred native roster getter 0xf894e
0x0F894E
20 70 00 00 31 F0 30 04 D4 34 20 70 30 004E B9 00 23 60 40 4E 71 4E 71 4E 71 4E 71experimental/transfers.py
Transferred native roster getter 0xf8906
0x0F8906
0C 79 00 1A FF FF D4 3E4E B9 00 23 60 44 4E 71experimental/transfers.py
Transferred native roster getter 0xf8a46
0x0F8A46
24 72 00 00 D4 D2 30 38 D4 34 60 00 00 06 D4 D2 50 4A 51 C8 FF FA4E B9 00 23 60 48 4E 71 4E 71 4E 71 4E 71 4E 71 4E 71 4E 71 4E 71experimental/transfers.py
Transferred native roster getter 0x171ce
0x0171CE
4A 78 D0 58 67 00 00 204E F9 00 23 60 4C 4E 71experimental/transfers.py
Transferred native roster getter 0xf71fc
0x0F71FC
20 68 00 1E D0 E8 00 064E B9 00 23 60 50 4E 71experimental/transfers.py
Transferred native roster getter 0xfafe4
0x0FAFE4
20 68 00 1E D0 E8 00 064E B9 00 23 60 50 4E 71experimental/transfers.py
Transferred native roster getter 0xfd492
0x0FD492
20 68 00 1E D0 E8 00 064E B9 00 23 60 50 4E 71experimental/transfers.py
Transferred native roster getter 0x15b9a
0x015B9A
D0 D0 D0 D0 50 48 51 CB FF FA 51 484E B9 00 23 60 54 4E 71 4E 71 4E 71experimental/transfers.py
Transferred native roster getter 0x96da
0x0096DA
22 6A 00 1E D2 D1 32 00 51 49 50 49 D2 D1 51 C9 FF FA4E B9 00 23 60 58 4E 71 4E 71 4E 71 4E 71 4E 71 4E 71experimental/transfers.py
Transferred native roster getter 0x9ee8
0x009EE8
22 6A 00 1E D2 D1 34 00 53 42 60 00 00 06 D2 D1 50 49 51 CA FF FA4E B9 00 23 60 5C 4E 71 4E 71 4E 71 4E 71 4E 71 4E 71 4E 71 4E 71experimental/transfers.py
Transferred native roster getter 0x12e24
0x012E24
22 6A 00 1E D2 D1 E2 48 D2 D1 50 49 51 C8 FF FA4E B9 00 23 60 60 4E 71 4E 71 4E 71 4E 71 4E 71experimental/transfers.py
Transferred native roster getter 0x17986
0x017986
22 69 00 1E D2 D1 60 00 00 06 D2 D1 50 49 51 C9 FF FA4E B9 00 23 60 64 4E 71 4E 71 4E 71 4E 71 4E 71 4E 71experimental/transfers.py
Transferred native roster getter 0xfaca8
0x0FACA8
20 68 00 1E 32 10 48 C1 D1 C1 32 10 48 C1 D1 C1 50 88 51 C8 FF F6 51 884E B9 00 23 60 68 4E 71 4E 71 4E 71 4E 71 4E 71 4E 71 4E 71 4E 71 4E 71experimental/transfers.py
Transferred native roster getter 0xee82
0x00EE82
0C 52 00 02 67 00 00 C44E F9 00 23 60 6C 4E 71experimental/transfers.py
Transferred native roster getter 0xf9a04
0x0F9A04
D4 D2 30 01 60 00 00 06 D4 D2 50 4A 51 C8 FF FA4E B9 00 23 60 70 4E 71 4E 71 4E 71 4E 71 4E 71experimental/transfers.py
Transferred native roster getter 0xfa382
0x0FA382
60 00 00 06 D4 D2 50 4A 51 C8 FF FA4E B9 00 23 60 74 4E 71 4E 71 4E 71experimental/transfers.py
Transferred native roster getter 0xfa95e
0x0FA95E
20 50 34 28 00 06 48 C2 D1 C24E B9 00 23 60 88 4E 71 4E 71experimental/transfers.py
Transferred native roster getter 0xfab7c
0x0FAB7C
3F 00 4E B9 00 00 9F 5C B0 574E F9 00 23 60 8C 4E 71 4E 71experimental/transfers.py
Preseason price/CRC/validation/load/save/transaction exports
0x234000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 22 60 00 00 5C 60 00 00 64 60 00 00 EE 60 00 00 F4 60 00 03 B4 60 00 04 94 60 00 04 E6 60 00 05 A8experimental/transfers.s
Transferred native player/cache getter exports
0x236000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 EE 60 00 01 CE 60 00 02 5E 60 00 00 82 60 00 02 C8 60 00 03 06 60 00 03 48 60 00 03 90 60 00 03 CE 60 00 04 0A 60 00 00 DC 60 00 04 3E 60 00 04 6A 60 00 04 96 60 00 04 D6 60 00 05 14 60 00 05 76 60 00 05 E2 60 00 06 2A 60 00 06 7C 60 00 08 44 60 00 08 62 60 00 08 AA 60 00 08 FC 60 00 09 50 60 00 09 A4 60 00 09 E6 60 00 0A 40 60 00 0A 92 60 00 0A E0 60 00 0B E0 60 00 0B 28 60 00 0B 10 60 00 0B 54 60 00 0C 28 60 00 0C 58experimental/transfers_runtime.s
Actual OVR-sorted buy/sell/Ready modal
0x250000
FF FF FF FF60 00 00 0Aexperimental/transfers_ui.s
Transfers preference persistence and played-season locks
0x254000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 06 60 00 00 C6 40 E7 48 E7 FF FE 42 78 F8 5C 4A 78 F0 6C 67 00experimental/transfers_menu.s
Atomic selected-season reset journal
0x256000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 16 60 00 00 20 60 00 00 54 60 00 01 02experimental/transfers_reset.s
Uniform OVR display projection
0x23BA00
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 A5 01 BA 01 11 02 8B 02 96 00 87 03 0D 02 FB 02 4C 00 36 00 D0 00 CF 01 FE 02 3F 02 57 00 A7experimental/transfers.py
Current human/Allstar CPU policy exports
0x229000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 72 60 00 00 92 60 00 00 A4 60 00 00 F2 60 00 01 C0 60 00 01 CE 60 00 01 D8 60 00 01 EC 60 00 02 9E 60 00 02 A4experimental/quickgame.s
Units/glass/pass gauge/line-pool preferences
0x258000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 40 60 00 00 90 60 00 00 C4 60 00 4D F2 60 00 01 44 60 00 02 50 60 00 03 60experimental/refinements.s
Momentum bars below actual team names
0x259000
FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 0A 60 00 02 12 60 00 01 A6experimental/compact_momentum.s
Consistent menu controls and crisp native footer
0x25B000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 52 60 00 00 AE 60 00 00 C2 60 00 00 EE 60 00 00 F4 60 00 01 12 60 00 00 CA 60 00 01 14 60 00 01 38 60 00 01 48 60 00 03 34 60 00 03 A6 60 00 01 14 60 00 03 BC 60 00 04 5C 60 00 05 6C 60 00 05 7E 60 00 05 90 60 00 07 F8 60 00 05 9E 60 00 04 32experimental/menu_ui.s
Framed native powerplay draw/clear
0x2DCC00
FF FF FF FF FF FF FF FF60 00 00 06 60 00 00 5Aexperimental/pwrplay_clear.s
Genuine friendly native B24 receiver admission
0x225800
FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 0A 60 00 01 34 60 00 01 76experimental/friendly_reception.s
Five native warning beeps at40seconds
0x001960
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 C0 1D 00 00 C1 1D 00 00 90 51 7F 00 91 51 28 0A 80 51 00 00 81 51 00 08 90 51 7F 00 91 51 28 0A 80 51 00 00 81 51 00 08 90 51 7F 00 91 51 28 0A 80 51 00 00 81 51 00 08 90 51 7F 00 91 51 28 0A 80 51 00 00 81 51 00 08 90 51 7F 00 91 51 28 0A 80 51 00 00 81 51 00 00 00 FF FFexperimental/build_test.py
Unsigned32 transfer dollar formatter; internal units unchanged
0x250004
FF FF FF FF60 00 08 2Aexperimental/transfers_ui.s
Dense original-name position OVR dollar row
0x250008
FF FF FF FF60 00 07 26experimental/transfers_ui.s
Centred native framed main-menu footer
0x25B024
FF FF FF FF60 00 01 48experimental/menu_ui.s
Transfer-modal dollar font guard
0x258014
FF FF FF FF60 00 02 50experimental/refinements.s
Modal-owned native dollar glyph
0x25A020
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 01 10 00 00 11 11 10 01 11 14 44 00 11 11 00 00 01 11 10 01 11 11 44 00 41 14 40 00 00 44 00experimental/refinement_font.py
Transfers menu label directly below Icing
0x2E12D0
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 54 72 61 6E 73 66 65 72 73 20 20 20 20 00experimental/replaymenu.py
Shot Units current menu label
0x2E1380
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 53 68 6F 74 20 55 6E 69 74 73 20 20 20 00experimental/replaymenu.py
Fragile Glass current menu label
0x2E1390
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 46 72 61 67 69 6C 65 20 47 6C 61 73 73 00experimental/replaymenu.py
Main-menu guarded input/checksum/audio hook 0xf739e
0x0F739E
4E B9 00 0F E6 604E B9 00 25 C0 00experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0xf843e
0x0F843E
3F 38 D0 52 31 D74E F9 00 25 C0 04experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x2340aa
0x2340AA
FF FF FF FF FF FF4E F9 00 25 C0 08experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x256250
0x256250
FF FF FF FF FF FF4E F9 00 25 C0 0Cexperimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x17c62
0x017C62
52 78 B0 3E 4E B9 00 01 A5 0A4E F9 00 25 C0 18 4E 71 4E 71experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x2aa698
0x2AA698
FF FF FF FF FF FF FF FF4E B9 00 25 C0 1C 4E 71experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x2aa6f2
0x2AA6F2
FF FF FF FF FF FF FF FF4E B9 00 25 C0 1C 4E 71experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x22013e
0x22013E
FF FF FF FF FF FF FF FF4E B9 00 25 C0 1C 4E 71experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x221460
0x221460
FF FF FF FF FF FF FF FF4E B9 00 25 C0 1C 4E 71experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x222432
0x222432
FF FF FF FF FF FF FF FF4E B9 00 25 C0 1C 4E 71experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x223402
0x223402
FF FF FF FF FF FF FF FF4E B9 00 25 C0 1C 4E 71experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x224184
0x224184
FF FF FF FF FF FF FF FF4E B9 00 25 C0 1C 4E 71experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x22609c
0x22609C
FF FF FF FF FF FF FF FF4E B9 00 25 C0 1C 4E 71experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x2de1c0
0x2DE1C0
FF FF FF FF FF FF FF FF4E B9 00 25 C0 1C 4E 71experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x2de50a
0x2DE50A
FF FF FF FF FF FF FF FF4E B9 00 25 C0 1C 4E 71experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x2de74a
0x2DE74A
FF FF FF FF FF FF FF FF4E B9 00 25 C0 1C 4E 71experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x2e6d52
0x2E6D52
FF FF FF FF FF FF FF FF4E B9 00 25 C0 1C 4E 71experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x2e84cc
0x2E84CC
FF FF FF FF FF FF FF FF4E B9 00 25 C0 1C 4E 71experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x2eb252
0x2EB252
FF FF FF FF FF FF FF FF4E B9 00 25 C0 1C 4E 71experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x2eb7ca
0x2EB7CA
FF FF FF FF FF FF FF FF4E B9 00 25 C0 1C 4E 71experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x2aa562
0x2AA562
FF FF FF FF FF FF FF FF FF FF4E B9 00 25 C0 20 4E 71 4E 71experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x2aa57c
0x2AA57C
FF FF FF FF FF FF FF FF FF FF4E B9 00 25 C0 20 4E 71 4E 71experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x25604c
0x25604C
FF FF FF FF FF FF FF FF FF FF4E B9 00 25 C0 24 4E 71 4E 71experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x25609e
0x25609E
FF FF FF FF FF FF FF FF FF FF4E B9 00 25 C0 24 4E 71 4E 71experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0x2aa434
0x2AA434
FF FF FF FF FF FF FF FF4E B9 00 25 C0 28 4E 71experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0xf832c
0x0F832C
4E B9 00 01 13 184E B9 00 25 C0 14experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0xf835c
0x0F835C
4E B9 00 01 13 184E B9 00 25 C0 14experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0xf8384
0x0F8384
4E B9 00 01 13 184E B9 00 25 C0 14experimental/main_menu.py
Main-menu guarded input/checksum/audio hook 0xf83a4
0x0F83A4
4E B9 00 01 13 184E B9 00 25 C0 14experimental/main_menu.py
Main-menu checksum/input/music helpers and full CCITT tables
0x25C000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 2A 60 00 00 3E 60 00 00 4C 60 00 00 FE 4D 4D 30 31 60 00 01 8E 60 00 02 24 60 00 02 5E 60 00 02 FC 60 00 03 BE 60 00 04 80 4E B9 00 0F E6 60 40 E7 42 78 F9 34 21 FC 4D 4E B2 B1 F9 30 46 DF 4E 75 40 E7 42 78 F9 34 42 B8 F9 30 46 DF 4E F9 00 2E 60 00 0C B8 4D 4E B2 B1 F9 30 67 0C D0 C7 34 3C FF FF 4E F9 00 23 40 B0 D0 C7 34 3C 00 FF 3A 3C 00 FF 45 FA 07 88 43 FA 08 84 72 00 76 0E 12 10 D0 C7 38 02 B3 04 14 32 40 00 BB 02 1A 31 40 00 51 CB FF EC 36 07 E5 4B D0 C3 36 3C 01 FA 12 10 D0 C7 38 02 B3 04 14 32 40 00 BB 02 1A 31 40 00 12 10 D0 C7 38 02 B3 04 14 32 40 00 BB 02 1A 31 40 00 12 10 D0 C7 38 02 B3 04 14 32 40 00 BB 02 1A 31 40 00 12 10 D0 C7 38 02 B3 04 14 32 40 00 BB 02 1A 31 40 00 38 03 02 44 00 07 66 04 61 00 00 E6 51 CB FF AA 61 00 00 DE E1 4A 84 45 70 00 30 02 4E F9 00 23 40 E6 0C B8 4D 4E B2 B1 F9 30 67 0C 41 F9 00 20 A0 00 4E F9 00 25 62 56 48 E7 00 60 41 F9 00 20 A0 00 43 FA 06 D2 45 FA 07 CE 32 3C 00 FF 34 3C 00 FF 36 3C 07 FF 70 00 10 10 B3 00 12 31 00 00 B5 01 14 32 00 00 54 88 10 10 B3 00 12 31 00 00 B5 01 14 32 00 00 54 88 10 10 B3 00 12 31 00 00 B5 01 14 32 00 00 54 88 10 10 B3 00 12 31 00 00 B5 01 14 32 00 00 54 88 30 03 02 40 00 0F 66 04 61 00 00 4E 51 CB FF B2 61 00 00 46 E1 49 82 42 4C DF 06 00 4E F9 00 25 62 7A 4E B9 00 01 13 18 40 E7 2F 00 30 01 02 40 00 0F 67 1E 30 02 02 40 00 0F 67 10 30 03 02 40 00 0F 67 0E 31 FC 00 07 B0 42 60 06 31 FC 00 02 B0 42 20 1F 46 DF 4E 75 40 E7 00 7C 07 00 0C B8 4D 4E B2 B1 F9 30 66 50 0C B8 00 01 7C 42 B0 3A 66 46 2F 00 10 39 00 C0 00 08 0C 00 00 E0 65 32 4A 38 F9 34 67 06 4A 38 F9 35 66 2A 08 39 00 07 00 C0 00 05 67 20 50 F8 F9 34 50 F8 F9 35 52 78 B0 3E 48 E7 7F FE 4E B9 00 01 A5 0A 4C DF 7F FE 60 04 42 38 F9 34 20 1F 46 DF 4E 75 12 38 F9 34 42 38 F9 34 10 39 00 C0 00 08 0C 00 00 E0 65 04 50 F8 F9 34 4A 38 F9 35 67 10 42 38 F9 35 4A 38 F9 34 67 10 4A 01 67 02 60 0A 52 78 B0 3E 4E B9 00 01 A5 0A 4E F9 00 01 7C 6C 0C B8 4D 4E B2 B1 F9 30 67 0A D0 10 54 88 51 C9 FF FA 4E 75 48 E7 30 00 40 E7 74 00 34 01 52 82 26 02 E8 8A 02 43 00 0F 53 42 53 43 46 DF 4A 42 6B 00 00 4A D0 10 54 88 D0 10 54 88 D0 10 54 88 D0 10 54 88 D0 10 54 88 D0 10 54 88 D0 10 54 88 D0 10 54 88 D0 10 54 88 D0 10 54 88 D0 10 54 88 D0 10 54 88 D0 10 54 88 D0 10 54 88 D0 10 54 88 D0 10 54 88 61 00 FE E8 51 CA FF BA 40 E7 4A 43 6B 0C 54 8F D0 10 54 88 51 CB FF FA 60 02 46 DF 61 00 FE CC 40 E7 32 3C FF FF 46 DF 4C DF 00 0C 4E 75 0C B8 4D 4E B2 B1 F9 30 67 0C 12 90 54 88 54 89 51 C8 FF F8 4E 75 48 E7 60 00 40 E7 72 00 32 00 52 81 24 01 E8 89 02 42 00 0F 53 41 53 42 46 DF 4A 41 6B 00 00 6A 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 61 00 FE 24 51 C9 FF 9A 40 E7 4A 42 6B 0E 54 8F 12 90 54 88 54 89 51 CA FF F8 60 02 46 DF 61 00 FE 06 40 E7 30 3C FF FF 46 DF 4C DF 00 06 4E 75 0C B8 4D 4E B2 B1 F9 30 67 0C 12 90 54 88 54 89 51 CA FF F8 4E 75 48 E7 C0 00 40 E7 70 00 30 02 52 80 22 00 E8 88 02 41 00 0F 53 40 53 41 46 DF 4A 40 6B 00 00 6A 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 12 90 54 88 54 89 61 00 FD 5E 51 C8 FF 9A 40 E7 4A 41 6B 0E 54 8F 12 90 54 88 54 89 51 C9 FF F8 60 02 46 DF 61 00 FD 40 40 E7 34 3C FF FF 46 DF 4C DF 00 03 4E 75 0C B8 4D 4E B2 B1 F9 30 67 0A 42 10 54 88 51 C8 FF FA 4E 75 48 E7 60 00 40 E7 72 00 32 00 52 81 24 01 E8 89 02 42 00 0F 53 41 53 42 46 DF 4A 41 6B 00 00 4A 42 10 54 88 42 10 54 88 42 10 54 88 42 10 54 88 42 10 54 88 42 10 54 88 42 10 54 88 42 10 54 88 42 10 54 88 42 10 54 88 42 10 54 88 42 10 54 88 42 10 54 88 42 10 54 88 42 10 54 88 42 10 54 88 61 00 FC BA 51 C9 FF BA 40 E7 4A 42 6B 0C 54 8F 42 10 54 88 51 CA FF FA 60 02 46 DF 61 00 FC 9E 40 E7 30 3C FF FF 46 DF 4C DF 00 06 4E 75 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 10 20 30 40 50 60 70 81 91 A1 B1 C1 D1 E1 F1 12 02 32 22 52 42 72 62 93 83 B3 A3 D3 C3 F3 E3 24 34 04 14 64 74 44 54 A5 B5 85 95 E5 F5 C5 D5 36 26 16 06 76 66 56 46 B7 A7 97 87 F7 E7 D7 C7 48 58 68 78 08 18 28 38 C9 D9 E9 F9 89 99 A9 B9 5A 4A 7A 6A 1A 0A 3A 2A DB CB FB EB 9B 8B BB AB 6C 7C 4C 5C 2C 3C 0C 1C ED FD CD DD AD BD 8D 9D 7E 6E 5E 4E 3E 2E 1E 0E FF EF DF CF BF AF 9F 8F 91 81 B1 A1 D1 C1 F1 E1 10 00 30 20 50 40 70 60 83 93 A3 B3 C3 D3 E3 F3 02 12 22 32 42 52 62 72 B5 A5 95 85 F5 E5 D5 C5 34 24 14 04 74 64 54 44 A7 B7 87 97 E7 F7 C7 D7 26 36 06 16 66 76 46 56 D9 C9 F9 E9 99 89 B9 A9 58 48 78 68 18 08 38 28 CB DB EB FB 8B 9B AB BB 4A 5A 6A 7A 0A 1A 2A 3A FD ED DD CD BD AD 9D 8D 7C 6C 5C 4C 3C 2C 1C 0C EF FF CF DF AF BF 8F 9F 6E 7E 4E 5E 2E 3E 0E 1E 00 21 42 63 84 A5 C6 E7 08 29 4A 6B 8C AD CE EF 31 10 73 52 B5 94 F7 D6 39 18 7B 5A BD 9C FF DE 62 43 20 01 E6 C7 A4 85 6A 4B 28 09 EE CF AC 8D 53 72 11 30 D7 F6 95 B4 5B 7A 19 38 DF FE 9D BC C4 E5 86 A7 40 61 02 23 CC ED 8E AF 48 69 0A 2B F5 D4 B7 96 71 50 33 12 FD DC BF 9E 79 58 3B 1A A6 87 E4 C5 22 03 60 41 AE 8F EC CD 2A 0B 68 49 97 B6 D5 F4 13 32 51 70 9F BE DD FC 1B 3A 59 78 88 A9 CA EB 0C 2D 4E 6F 80 A1 C2 E3 04 25 46 67 B9 98 FB DA 3D 1C 7F 5E B1 90 F3 D2 35 14 77 56 EA CB A8 89 6E 4F 2C 0D E2 C3 A0 81 66 47 24 05 DB FA 99 B8 5F 7E 1D 3C D3 F2 91 B0 57 76 15 34 4C 6D 0E 2F C8 E9 8A AB 44 65 06 27 C0 E1 82 A3 7D 5C 3F 1E F9 D8 BB 9A 75 54 37 16 F1 D0 B3 92 2E 0F 6C 4D AA 8B E8 C9 26 07 64 45 A2 83 E0 C1 1F 3E 5D 7C 9B BA D9 F8 17 36 55 74 93 B2 D1 F0experimental/main_menu.s
Downed-skater explicit Y keeper request
0x00B244
08 2B 00 03 00 644E F9 00 25 CC 00experimental/downed_y.s
Downed-Y native guarded helper
0x25CC00
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF40 E7 48 E7 FF FE 00 7C 07 00 08 2B 00 05 00 62 67 00 01 12 08 2B 00 03 00 62 67 00 01 08 08 2B 00 03 00 63 66 00 00 FE 08 2B 00 00 00 63 66 00 00 F4 4A 78 D4 12 66 00 00 EC 08 38 00 00 C2 FA 66 00 00 E2 08 38 00 02 C2 F2 66 00 00 D8 0C 46 00 0B 62 00 00 D0 3A 04 0C 45 00 02 62 00 00 C6 7E 00 49 F8 F0 E0 4A 78 D0 46 67 1C 4A 78 F8 4C 66 08 4E B9 00 2E A6 10 66 0E 7E 01 49 F8 F0 B2 4A 78 C3 18 6B 02 58 45 4A 34 50 00 67 00 00 96 74 00 0C 46 00 05 6F 02 74 02 41 F8 D0 5A 4A 70 20 00 66 00 00 80 30 38 B7 AA 6B 22 4A 47 67 12 B0 46 67 00 00 70 0C 40 00 05 67 06 0C 40 00 0B 66 0C 5D 40 32 06 5D 41 B3 40 6A 00 00 58 70 05 4A 42 67 02 70 0B 4E B9 00 00 B8 6A 4A 40 6B 00 00 44 32 00 EF 49 41 F8 B0 4A 08 30 00 03 10 62 66 00 00 32 42 34 50 00 4A 47 67 0C 42 B8 F0 64 41 F8 F0 C2 42 70 50 00 4A 44 66 08 4E B9 00 00 C0 BC 60 06 4E B9 00 00 C0 DA 2E 80 4C DF 7F FF 46 DF 4E 75 4C DF 7F FF 46 DF 08 2B 00 03 00 64 4E F9 00 00 B2 4A 59 44 30 31experimental/downed_y.s
Consistent actual-roster OVR presentation branch
0x25800C
FF FF FF FF60 00 4D F2experimental/team_ovr.py
Actual-roster presentation-only OVR helper
0x25CE00
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF4E B9 00 25 80 EE 4A 40 6A 76 40 E7 48 E7 70 80 B4 FC C6 CE 67 06 B4 FC CA 32 66 5E 0C 78 00 01 F8 50 62 56 0C 78 00 01 F8 4C 62 4E 0C 78 00 01 F0 6C 62 46 0C 78 00 01 F8 50 66 0E 0C 78 00 01 F8 4C 66 06 4A 78 F0 6C 67 30 72 00 32 2A 00 28 0C 41 00 1F 62 24 C2 FC 00 1A 41 F9 00 23 9E C0 D0 C1 70 00 74 19 76 00 16 18 D0 43 51 CA FF FA 80 FC 00 1A 32 00 70 00 30 01 4C DF 01 0E 46 DF 4A 40 4E 75 4F 56 4D 31experimental/team_ovr.s

Weak-side coverage · Defensive pair · Attack/pass decisions · Pressure and catch/release · Keeper selection · First forward unit.

All rejected ROMs, source and test results are retained. A private receiver correction won 39/50 once but only 31/50 in its independent confirmation. The final private central-pass/close-finish variant passed all 74 exact-source checks and seven independent build/rollback/IPS comparisons, but won only 33/50 (94–62); its matched Native control won 32 and r3 won 29. All 150 games completed, with 25 home games per club. All 100 new/control saves passed the statistics audit; four old r3 scorer errors remain recorded. No further confirmation or win-rate experiment is planned. Private QA successes do not approve the different released 38-win ROM. Full investigation history · Progress data.

Hard AI development: Codex GPT-6.1 Sol on High. A little over 20 hours were spent on Hard experiments and testing, according to jdc’s estimate; configuration and time are user-reported. Released maintenance: Crit Shots locking, immediate B player switching and the reported Stars of the Game graphics correction. The lateral-carry keeper correction is released. Independent AI Shot Plan Off/On, default Off, now covers jdc’s separate shot-zone/native-pass/lateral-approach request while preserving that keeper repair; it makes no new win-rate claim. Human playtests of saved AI variants come after the other work, one at a time. TODO list.

These maintenance hooks implement jdc’s playtest reports. They require their matching relocated modules.

Pass-only lift and speed controls

Targeted lift/speed released · r5

Brodeur30 · Forum post #217609

Pass Height Normal/Low and Pass Speed Normal/Slow are released, with Low height and Normal speed defaults, for targeted B passes on both teams. Slow reruns the native moving-target calculation at lower nominal power while preserving the chosen lift. Seasons save and lock both choices; standalone preferences use a separate safe record. Assisted/CPU blind passes retain their original path. Human Directional and vector cone choices are released r7; Pickup Delay Off/On is released, default Off; it adds a minimum six native updates of skater contact cooldown after an ordinary human B release.

Hooks, hex & source code
Hook / ROM offsetBuilder inputCurrent bytesCode
Optional targeted B-pass lift
0x00BF5E
11 C2 B7 76 B4 7C 00 0C 6D 00 00 08 11 FC 00 0C B7 764E F9 00 2D E4 00 4E 71 4E 71 4E 71 4E 71 4E 71 4E 71experimental/pass_height.s
Combined height/speed preference exports
0x2DE400
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 12 60 00 00 6A 60 00 00 6C 60 00 00 8E 60 00 00 80experimental/pass_height.s
Pass Height label
0x2E12E0
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 50 61 73 73 20 48 65 69 67 68 74 20 20 00experimental/replaymenu.py
Independent targeted B-pass speed
0x00BF54
4E B9 00 2F F1 404E B9 00 2D E6 00experimental/pass_speed.s
Pass speed timing/menu exports
0x2DE600
FF FF FF FF FF FF FF FF60 00 00 06 60 00 00 D6experimental/pass_speed.s
Pass Speed label
0x2E12F0
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 50 61 73 73 20 53 70 65 65 64 20 20 20 00experimental/replaymenu.py

Existing targeted-pass path BEBC–BFBA; flight/lift fields BF5E/BF6A. Existing pass code · Released short-pass correction · Research and isolation requirements. Lift hook and historical r4 details · Exact evidence. Released speed hook, combined records and storage regression. Directional/cone controls are released r7. Hold/release power is released as Pass Charge Off/On, default Off. Pickup Delay Off/On is released, default Off. During its short active cooldown skaters cannot take stick possession or deflect the puck with their body; goalkeepers retain native saves. Behavior, hooks, persistence and tests.

Directional passing and adjustable targeting cone

Mode/cone/charge released

Brodeur30 · Forum post #217634 · Original proposal #217609

Optional start-menu Pass Mode: Assisted/Directional, default Assisted, and Target Cone: Default/15/30/45 degrees, default Default, are released. Directional uses the actual eight-way aim without choosing a receiver; explicit cones use real vector half-angles for Assisted. Height/Speed remain independent, with per-season saving and first-match locks. CPU keeper requests keep their requested teammate. Pass Charge Off/On, default Off, now waits for human B release and scales native power25–100%. The choice saves separately for native play and every season, with the same first-match lock.

Hooks, hex & source code
Hook / ROM offsetBuilder inputCurrent bytesCode
Ordinary human B mode dispatcher
0x00BC40
08 02 00 04 66 00 00 1E4E F9 00 2E 68 00 4E 71experimental/pass_mode.s
Human vector targeting cone
0x2FF034
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF4E F9 00 2E 68 04 4E 71 4E 71 4E 71 4E 71 4E 71experimental/pass_mode.s
Human keeper cone fallback
0x2FF1D8
08 29 00 03 00 62 67 00 00 04 74 004E F9 00 2E 68 18 4E 71 4E 71 4E 71experimental/pass_mode.s
Mode/cone module exports
0x2E6800
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 4C 60 00 00 BA 60 00 01 C0 60 00 03 E8 60 00 02 96 60 00 03 54 60 00 01 76 60 00 01 52experimental/pass_mode.s
Pass Mode menu label
0x2E1300
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 50 61 73 73 20 4D 6F 64 65 20 20 20 20 00experimental/replaymenu.py
Target Cone menu label
0x2E1310
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 54 61 72 67 65 74 20 43 6F 6E 65 20 20 00experimental/replaymenu.py
Hook / ROM offsetBuilder inputCurrent bytesCode
Human held-pass begin
0x00B760
4E B9 00 0F EE 604E B9 00 2E 82 00experimental/pass_charge.s
Held-pass module exports
0x2E8200
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 B6 60 00 00 E0 60 00 01 52 60 00 02 3E 60 00 02 90 60 00 02 D0 60 00 01 90 60 00 02 C8experimental/pass_charge.s
Human old gate / charged emitter exports
0x2E6820
FF FF FF FF FF FF FF FF60 00 00 32 60 00 00 50experimental/pass_mode.s
Pass Charge menu label
0x2E1330
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 50 61 73 73 20 43 68 61 72 67 65 20 20 00experimental/replaymenu.py
Hook / ROM offsetBuilder inputCurrent bytesCode
Actual human B pickup cooldown dispatch
0x2E6876
FF FF FF FF FF FF4E B9 00 22 00 00experimental/pass_mode.s
Pickup-delay human release and preference exports
0x220000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 0E 60 00 00 D8 60 00 01 0A 60 00 01 4Aexperimental/pickup_delay.s
Pickup Delay menu label
0x2E1340
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 50 69 63 6B 75 70 20 44 65 6C 61 79 20 00experimental/replaymenu.py

CPU pass and scan instruction paths remain exact r6. The shared-path prototype was rejected after a native AI regression; the r7 human-only design restored all40 ordinary trajectories in its r7 comparison. The current ordinary-scene comparison is recorded against fresh exact Nov1r4 controls; the earlier r11 and prior comparisons remain independent. See the current exact-build QA report for counts and every retained difference. Behavior, persistence, rejected attempts and tests · Original feature evidence. Hold/release B power and independent Pickup Delay Off/On are released. Pickup Delay defaults Off; when On, an ordinary human B release applies six native updates of skater contact cooldown. Goalkeepers, existing longer locks and requested CPU keeper outlets retain their paths. Pickup delay code and exact tests. Charged input, storage, native physics and qualification · Charged-passing r10 evidence · Original feature evidence.

Alternative goalie reach and rebound model

Model released · default On

floating · Forum post #217606

Alt Goalies: Off/On, default On, is released. On adds reach21 and experimental catches, cornerward and short/long rinkward rebounds, plus occasional slow/fast goalward returns. Shot origin and screening change explicit experimental odds. Only a proven real shot gets the new classification; native movement, saves, outlets and eventual goals remain responsible for the outcome. Both clubs/ends and P1–P4 are covered. Each season saves and locks the choice after match one.

Hooks, hex & source code
Hook / ROM offsetBuilder inputCurrent bytesCode
Actual shot provenance after native release
0x00C408
4E B9 00 2F F3 00 4E 714E B9 00 22 10 00 4E 71experimental/alt_goalies.s
Optional native keeper reach envelope
0x2FF354
0C 78 00 0F B7 62 4E F9 00 01 50 3A4E F9 00 22 10 04 4E 71 4E 71 4E 71experimental/alt_goalies.s
Native first-save catch/rebound choice
0x0155FC
B0 78 B7 72 6D 00 FF 584E F9 00 22 10 08 4E 71experimental/alt_goalies.s
Bounded optional rebound velocity
0x015580
17 40 00 28 17 41 00 2A4E B9 00 22 10 0C 4E 71experimental/alt_goalies.s
Actual accepted possession invalidates shot provenance
0x015288
30 2A 00 52 31 C0 B7 AA4E B9 00 22 10 24 4E 71experimental/alt_goalies.s
Normal goal same-shot SOG filter dispatch
0x2AC2DA
FF FF FF FF FF FF4E F9 00 22 10 20experimental/alt_goalies.s
Alt Goalies ten fixed exports
0x221000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 00 64 60 00 01 1A 60 00 01 CA 60 00 02 D8 60 00 03 E0 60 00 04 20 60 00 04 60 60 00 01 5A 60 00 04 7E 60 00 05 3Cexperimental/alt_goalies.s
Alt Goalies menu label
0x2E1350
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 41 6C 74 20 47 6F 61 6C 69 65 73 20 20 00experimental/replaymenu.py

Native save chains, conservative rebound speed caps, accepted-possession provenance, scorer/keeper/SOG accounting, real advancing physics, cold boots and input tests are recorded. No human-difficulty or real-world probability claim. Off retains the established model; all passing options stay independent. Behavior, hooks, fields, exact tests and limitations · Original feature evidence.

Status is maintained here. A source link is an implementation reference, not a claim that an open proposal is finished.

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

Credits and sources

NHL 94 was created by EA Sports. This is a modification of NHL 2026 - 94 Edition v5.1W, by Jkline3 and von Ozbourne. Their original release and credits are the source for the inherited community work below.

Roster/headshot data: NHL; line references: DailyFaceoff. The critical-shot digital effect was adapted from Twin Cobra (Toaplan). Full provenance, scope and the original authors' remaining acknowledgements: Credits notes.

Actual startup credits: Website https://games.jdc.se.
2026-11-03-r2 · Actual startup credits: Website https://games.jdc.se.
2026-11-02-r2

Momentum, shot gauge and powerplay HUD

Momentum defaults On and gives earned changes of up to±10% Stats. Its two bars sit beneath the team names in the lower-right score box. Off removes the bars and scaling. The shared shot/pass gauge replaces the lower-left NHL badge; choose KMH (default) or MPH. The powerplay caption/countdown has its own matching frame above the clock.

2026-11-02-r2

Painted faceoff dots — always On

Native stoppage formations use the painted-dot policy. As requested, this is always On and the redundant start-menu choice is hidden. Native formation, puck placement, line selection and rendering remain responsible.

Current players, puck, original red goal and distinct controller stars.
2026-11-03-r2 · Current players, puck, original red goal and distinct controller stars.

Original cause and implementation history · Current permanent-rule policy.

2026-11-01-r3

Optional Hard AI shot plan

AI Shot Plan Off/On, default On: Hard can defer a covered ordinary shot, pass through its existing logic or approach from the side. Actual keeper openings, close finishes and useful long shots stay native. Pressure and a bounded fallback keep native choices available. Separate saved season choices lock after match one.

shot-plan-hooks:start
Hook / ROM offsetBuilder inputCurrent bytesCode
Native ordinary shot commitment / optional Hard deferral
0x00E412
58 4F 30 38 B7 5E4E F9 00 22 30 00experimental/shot_plan.s
Native carrier target / optional lateral approach
0x00E10C
41 FA 00 1E 08 38 00 02 C2 F24E F9 00 22 30 04 4E 71 4E 71experimental/shot_plan.s
AI Shot Plan eight fixed exports
0x223000
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF60 00 01 EE 60 00 02 88 60 00 01 A6 60 00 00 D8 60 00 03 8A 60 00 03 C2 60 00 04 02 60 00 03 50experimental/shot_plan.s
AI Shot Plan menu label
0x2E1360
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 10 41 49 20 53 68 6F 74 20 50 6C 61 6E 20 00experimental/replaymenu.py
AI Shot Plan Off/On value strings
0x2E1576
FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF00 16 4F 66 66 20 53 6D 61 72 74 65 72 20 48 61 72 64 20 41 49 20 00 16 4F 6E 20 53 6D 61 72 74 65 72 20 48 61 72 64 20 41 49 20 20experimental/replaymenu.py
Load independent shot plan after mapped context
0x2E6B44
FF FF FF FF FF FF4E B9 00 22 30 10experimental/pass_mode.s
Save independent shot plan record
0x2E6BE6
FF FF FF FF FF FF4E B9 00 22 30 14experimental/pass_mode.s
Load shot plan after destination slot identity
0x2AA232
FF FF FF FF FF FF4E B9 00 22 30 10season/slots.s
Reset only confirmed selected shot plan season
0x2AA3E0
FF FF FF FF FF FF4E B9 00 22 30 18season/slots.s
shot-plan-hooks:end

Behavior, hooks, tests and limits · Exact evidence · Retained variants and human trial queue · Faceoff cause and optional correction.

2026-11-02-r2

Overtime shootout rules — always On

The selected period length also sets overtime. Tied overtime leads to native shootouts with automatic starts, eligible-skater rotation, full-spin checks and native single-shot/retouch handling. This rule set is always On and its start-menu row is hidden.

Native shootout starts without further input. This screenshot uses a declared clock-only OT expiry fixture.
2026-11-03-r2 · Native shootout starts without further input. This screenshot uses a declared clock-only OT expiry fixture.

Rule scope and native tolerances.

2026-11-01

Optional goalkeeper reach and rebounds

Alt Goalies Off/On, default On, adds reach21 and experimental catches, corner/rinkward returns and occasional goalward deflections. Native physics and goal statistics remain responsible for the outcome. Separate season preferences lock after match one.

Suggestion: floating #217606. Behavior, hooks and qualification · Exact evidence · Remaining work.

2026-10-31-r11

Optional pickup delay after a pass

Pickup Delay: Off/On is a separate start-menu choice, default Off. On briefly prevents skaters from taking or body-deflecting the puck after an ordinary human pass. Keepers retain their native saves. Height, Speed, Mode, Cone and Charge remain independent; seasons save and lock the choice after match one.

Historical release evidence: Hooks, native fields, behavior and tests · Exact evidence · Remaining work. 92/93 checks pass; the inherited AI geometry failure remains failed.

2026-10-31-r10

Hold the pass, release to play

Choose Pass Charge: Off/On in the start menu. Off is the default. On lets you build pass power while holding the button and launch when you release. Assisted/Directional, lift, speed and cone settings remain independent. The choice saves separately for each season and locks after its first match.

Current physical player stars: P1 blue, P2 red, P3 neon green and P4 yellow, with the original red goal. The brighter fixed green also appears in a few small crowd/background details. Ordinary club uniforms retain their original palette bytes.

Historical release evidence: Hooks, hex, native fields and tests · Exact-build evidence · Remaining work.91/92 shared checks pass; the retained AI geometry failure stays failed.

2026-10-31-r9

Easy assistance and clear player colors

Historical r9 colors were superseded in 2026-10-31-r10: P1 blue, P2 red, P3 green, P4 yellow, original red goal. The reported shared-palette regression is documented above.

On Easy, your whole team gets100-equivalent skills and full energy each game frame. CPU teammates, keepers and the bench are included; CPU-only opponents get20-equivalent skills. Normal and Hard keep their rating rules.

Player markers: P2 green, P3 red, P4 yellow. P1 keeps its original color. Static artwork changes preserve the native rendering instructions.

Historical release evidence: Hooks, hex, native field mapping and tests · Exact-build evidence.90/91 shared checks pass; the retained AI geometry failure remains failed. No new Hard win-rate claim.

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

2026-10-31-r8

Choose penalty frequency separately

Penaltys offers 100% / 50% / Off; the current default is 50%. The separate Rules setting retains Off / On / On, Except Off-sides. Icing has its own switch. Native penalty-shot eligibility and P1–P4 shooter ownership remain intact. Buffered pass shots retain real stick contact and native shot setup.

50% admits approximately half the eligible ordinary fouls. Off suppresses new ordinary penalties and new fights. Injury stoppages remain through the native injury-only report, and fighting penalties stay paired. All five percentage/pass choices save per season and lock after its first match.

Penaltys50% by default; centred help stays inside its native border.
2026-11-03-r2 · Penaltys50% by default; centred help stays inside its native border.

Historical release evidence: Why the original setting also controlled offside · Behavior, hooks, hex, storage and tests · Exact-build evidence. 88/89 shared checks pass; only the retained AI geometry failure remains and the strict gate stays failed.

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

2026-10-31-r7

Choose directional passing and receiver cone

Two new start-menu rows: Pass Mode: Assisted / Directional and Target Cone: Default / 15 / 30 / 45 degrees. Defaults remain Assisted and Default. Directional follows your eight-way aim without choosing a teammate; explicit cones narrow Assisted target selection by the actual vector half-angle.

Height and Speed stay independent. Seasons save all four choices and lock them after the first match. P1–P4, manual keepers and requested CPU-keeper outlets are tested. Hold/release charging remains separate research.

Directional mode selected; Low pass height remains independent. Help is centred in its native frame.
2026-11-03-r2 · Directional mode selected; Low pass height remains independent. Help is centred in its native frame.

Historical release evidence: Brodeur30’s proposal, menus, hooks, hex and tests · Exact-build evidence. 87/88 checks pass; the inherited AI geometry failure remains and the strict gate stays failed. All 40 ordinary scenes match fresh r6 controls.

2026-10-31-r6

Share automatic puck pickups

When a free CPU teammate takes the puck, control now goes randomly to an eligible active pad on your team. P1 no longer has the native first choice every time. Already controlled pass receivers and requested keeper outlets keep their pad; other players keep their skaters.

Both ordinary two-player and three/four-player co-op are covered. Manual keepers, pending Y and locked players retain priority. No extra menu choice is needed for this correction.

Historical release evidence: Behavior, hook, native RNG and P1–P4 input tests · Exact-build evidence. 86/87 shared checks pass; the inherited AI geometry failure remains and the strict gate stays failed.

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

2026-10-31-r5

Choose pass speed separately

The last main-menu row now offers Pass Speed: Normal / Slow, default Normal. Slow recalculates the pass to a moving receiver with lower nominal power. The separate Normal/Low height choice keeps its original lift calculation. Native short-pass limits and fast-receiver guards can leave a pass unchanged.

Both choices save per season and lock after the first completed game. This also corrects r4’s standalone height storage, which could overlap Full-season goalie data; separate native preferences now survive slot changes and reboot.

Historical release evidence: Brodeur30’s proposal, hooks, storage correction and tests · Exact-build evidence. 85/86 shared checks pass; the inherited AI geometry failure remains and the strict gate stays failed.

Slow pass speed remains independent of Low height and Assisted mode. Help is centred in its native frame.
2026-11-03-r2 · Slow pass speed remains independent of Low height and Assisted mode. Help is centred in its native frame.

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

2026-10-31-r4

Choose lower pass height

Pass Height offers Normal / Low; the current default is Low. Low reduces targeted pass lift for both teams, including keeper passes. Short passes retain their existing lift, and horizontal interception stays native. This option is independent of Pass Mode and Pass Speed.

Each season saves its own choice and locks it after the first completed game. Standalone play has a separate preference. Lower lift can change landing and interception; The separate speed control was added in r5 above.

Historical release evidence: Brodeur30’s proposal, hooks, records and tests · Exact-build evidence. 84/85 shared checks pass; the inherited AI geometry failure remains and the strict gate stays failed.

Low passes, Normal speed and Assisted targeting; centred framed help.
2026-11-03-r2 · Low passes, Normal speed and Assisted targeting; centred framed help.
2026-10-31-r3

Pass to a teammate who can receive

Downed skaters are skipped when choosing a pass recipient. If a teammate falls after the pass leaves the stick, he cannot take possession while still down. The puck can still hit his body and bounce; he can receive again after recovering.

Standing shot animations and keeper saves retain their eligibility. Cause, hooks, tests and timing limits · Exact-build evidence. Pass-height experiments are documented separately; the released height stays unchanged.

Historical release evidence: 83/84 shared checks pass; the inherited AI geometry failure remains and the strict gate stays failed.

2026-10-31-r2

Shootouts start automatically

No button shortcut is needed: the next attempt starts after a short countdown. Once you begin your approach, carrying the puck backward or stopping it ends the attempt. A temporarily loose, unshot puck can still be recovered while it moves toward goal.

The rule follows puck progress, so body direction alone does not cause a miss. The existing shot/rebound and native scoring paths remain. Official rules, game tolerances, source and tests · Exact-build evidence.

Historical release evidence: 82/83 shared checks pass; the inherited AI positioning failure remains and the strict gate stays failed.

2026-10-31

Goal nets tolerate light contact

The goal nets now need a harder impact to come loose. The release threshold is50% higher at both ends, for skaters and keepers. Heavy hits can still dislodge the net and trigger the normal stoppage.

The reported behavior was reproduced in native CPU play. The corrected scene keeps the net in place, while ordinary skating and a real speed burst retain their exact input and movement behavior. Four-byte change, boundary tests and limits · Exact-build QA.

Historical release evidence: 81/82 checks pass; the inherited AI positioning failure remains and the strict gate stays failed. Remaining requests.

2026-10-30-r13

Pass with your manually selected keeper

When you control the keeper and hold the puck, the pass button now executes the keeper's native pass. It no longer takes the immediate player-switch route first. Without the puck, the existing nearest-puck switch remains.

Historical release evidence: Both teams and P1–P4 are covered. Mini stays at seven games. Code, paired controller tests and limits · Exact-build QA.80/81 checks pass; the inherited AI geometry failure remains and the strict gate stays failed.

Next: downed pass receivers and the remaining requests.

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

2026-10-30-r12

Mini: seven rivals, seven games

Mini now plays seven regular-season games, one against every other club in your division. The menu starts at1/7, all 32teams finish with7games, and there is no eighth return fixture.

The season summary or qualification follows game7. Mini still uses one game per playoff pairing. Schedule, persistence, native tests and source · Exact-build QA.

Mini season: seven divisional games; framed centred help. Help is centred in its native frame.
2026-11-03-r2 · Mini season: seven divisional games; framed centred help. Help is centred in its native frame.

The inherited AI geometry failure remains documented; the strict gate remains failed. Other requests and the queued controller colors.

2026-10-30-r11

Your player, your penalty shot

When your controlled breakaway attacker earns a penalty shot, the same P1, P2, P3 or P4 takes control of the shooter. Other teammates cannot claim the attempt first. Normal team controls resume afterwards.

Penalty-shot ownership, seven-game Mini and manual-keeper passing are released. Downed receivers, random pickup ownership, the Penaltys setting and controller colors remain queued. Follow the priority list.

Historical release evidence: Code, controller tests and limits · Exact-build QA.78/79 shared checks pass; the inherited AI positioning failure remains documented and the strict gate remains failed.

2026-10-30-r10

Buffered one-timers meet the stick

Human buffered pass shots now wait until the puck reaches the stick, then show the native contact/follow-through pose. The old route could fire while the puck was still approaching.

Repeated shoot presses keep the pending shot; a teammate's shoot press cannot cancel the receiver's request. Ordinary shooting and AI code retain their paths. Mini stays inside your division.

Contact measurements, code and tests · Exact-build QA. The inherited receiver-positioning failure remains documented; the strict gate remains failed.

2026-10-30-r9

Mini stays in your division

All eight Mini regular-season games now stay inside your club's division: seven divisional rivals plus one return game. Edmonton can no longer draw Detroit in Mini. The simulated games follow the same divisional schedule.

Full and Light keep their league-wide schedules. Mini keeps existing playoff rules, season locks, single-player home/away alternation and co-op home games.

Schedule, code and tests · Exact-build QA. The inherited receiver-positioning failure remains documented; the strict gate remains failed.

2026-10-30-r8

Matching overtime length and fair momentum

Overtime follows the selected period length: 5, 7, 10 or 20 minutes. Sudden death and the shootout after tied overtime remain.

Shots and checks after the whistle no longer charge team momentum or boost ratings. Earned momentum stays; stopped-play actions cannot be banked for the restart. The same guard covers pauses, faceoffs and replays.

Code, hooks and tests · Exact-build QA. All76 shared checks ran:75 pass. The inherited receiver-positioning test failure remains documented; the strict gate remains failed.

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

2026-10-30-r7

Icing starts On

Icing now defaults On, as clarified by jdc. Fresh starts, new Full/Light/Mini formats and season restarts use On. The toggle and saved-season locks remain.

Edmonton, Auto line changes, Fighting Off, Hard, Auto Replays Off and Crit Shots Off keep their r6 defaults. The CPU keeper catch handoff and P1–P4 current-skater pass requests are unchanged.

Icing On and Transfers directly below it; centred framed help.
2026-11-03-r2 · Icing On and Transfers directly below it; centred framed help.

Only three default bytes change outside version/checksum. All 75 checks ran: 74 pass, with the inherited receiver-positioning failure still documented; the strict gate remains failed. Code and tests · Current QA.

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

2026-10-30-r6

The keeper returns to CPU control on a catch

A keeper selected before catching the puck now returns to the computer, with the native AI marker. Your control moves to a free skater. When P1, P2, P3 or P4 presses pass, the keeper sends the outlet to that controller's current skater.

Fresh defaults: Auto line changes, Fighting Off, Hard, Auto Replays Off, Crit Shots Off and Icing Off, following jdc's latest menu screenshot. Edmonton remains preselected. Valid saved choices and season locks are retained.

Edmonton and a new Full season by default; help centred inside its matching native frame.
2026-11-03-r2 · Edmonton and a new Full season by default; help centred inside its matching native frame.

Historical release evidence: The reported catch is reproduced from recorded inputs. All 75 shared checks ran: 74 pass, with the same inherited receiver-positioning failure; the strict gate remains failed. Code, tests and compatibility · Exact-build QA.

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

2026-10-30-r5

Icing On/Off and Edmonton by default

Icing is the last row in the start menu, with a visible On / Off switch. It starts On, is saved separately for Full, Light and Mini, and locks with the other match rules after the first completed game.

Edmonton is selected on fresh startup and in newly created or restarted seasons. You can choose another club before starting; ongoing saves keep their club.

Icing On and Transfers directly below it; centred framed help.
2026-11-03-r2 · Icing On and Transfers directly below it; centred framed help.

Historical release evidence: 34 native menu/persistence cases and 56 native rule fixtures pass. All 72 shared checks ran: 71 pass, with the same inherited receiver-positioning failure; the strict gate remains failed. Forty current default-On no-B scenes match fresh r4 controls exactly. Code, tests and compatibility · Current QA.

2026-10-30-r4

Keeper pass requests reach the outlet before timeout

A timely pass request could change the selected skater while the keeper's possession timer expired before he passed. The first accepted request now gets time to reach the native outlet. Requests after the native timeout or whistle retain the normal stoppage.

Historical release evidence: In paired timing tests, valid outlets rise from 1,776 to 1,792 out of 1,792; all 128 late/stopped requests stay blocked. These are replay branches, not independent matches. All 70 shared checks ran: 69 pass, with the same documented receiver-positioning failure; the strict gate remains failed. All 40 no-B AI scenes exactly match fresh r3 controls. Code, tests and limitations · Current QA.

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

2026-10-30-r3

Keepers recover from the lateral-carry fake

CPU keepers track the actual puck on the stick. When a carrier moves across an anticipating lateral save, the keeper can finish its stale hold sooner and reassess. Native movement, player ratings and shot physics remain. Manual keepers and ordinary loose-shot/catch saves keep their behavior.

In 48 paired native approaches, goals fell from 10 to 4 and keeper catches rose from 15 to 22. All 69 checks executed: 68 passed. The inherited receiver-hold positioning check still fails, so the strict release gate remains FAILED. This is the same documented AI limitation retained in the user-selected playtest. No new Hard-versus-Normal win-rate series is claimed. Code, tests and limits · Exact-build QA.

Actual native goalie, puck and original red goal frame in the fresh four-pad match.
2026-11-03-r2 · Actual native goalie, puck and original red goal frame in the fresh four-pad match.

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

2026-10-30-r2

Crit lock, immediate B switching and the complete Stars panel

The selected 38-win tactical base is retained. All 40 saved no-B AI situations match it frame-for-frame. All 67 checks ran: 66 passed; the inherited receiver-positioning limitation remains documented, so the strict gate is still failed. No new win-rate series is claimed. Changes, exact tests and rollback · Current QA.

Stars of the Game after the actual fresh final-ROM match: New York3, Edmonton2.
2026-11-03-r2 · Stars of the Game after the actual fresh final-ROM match: New York3, Edmonton2.
Completed · accepted by jdc on 2026-10-31

Hard cross-ice passing and smarter shot openings

Hard plans native cross-ice passes, supports its receiver and checks the keeper opening at the catch. It can choose a more open native post and carry or pass instead of forcing a covered direct shot. Native player ratings, skating, shot accuracy and power stay intact.

38 wins in 50 Edmonton Hard games against Chicago Normal, goals 132–66, with 25 home games each. The matched previous release won 32/50. jdc accepts this released Hard base as complete. The earlier stable 39/50 benchmark remains historical and was not achieved; it is no longer an open task.

The original 2026-10-30 image passed 62 of 63 checks, including native catches, scorer/keeper accounting and existing controls/settings/presentation. One receiver-hold positioning test failed: average slot positioning worsened relative to native tracking. That known limitation remained in the later r2 maintenance release, which passed 66 of 67 checks. The strict release gate remains failed. AI changes, source and limitations · Original comparison results · Current QA

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

2026-10-29-r3

Crit Shots now shows On / Off

The Crit Shots value now appears on first selection and after a restart. Left/Right switches between On and Off, aligned with Auto Replays. Off still applies on Easy.

All40 shared release checks pass, including a native rendering regression reproducing the missing initial value in r2. This update corrects the menu display; Hard AI work continues separately.

Crit Shots Off by default; independent option and centred framed controls.
2026-11-03-r2 · Crit Shots Off by default; independent option and centred framed controls.

Correction and tests · Exact-build QA

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

2026-10-29-r2

Crit Shots: On / Off

Crit Shots has a saved On/Off choice and starts Off in a fresh release. Played seasons retain their chosen value and lock it after the first completed match. Auto Replays remains an independent, editable choice; manual replay is available separately.

Historical release evidence: Off also applies on Easy: no critical power bonus, red puck, flames or special shot sound. Auto Replays keeps its own independent setting. All 39 shared release checks pass; the Hard strength investigation was still running then and is now archived.

Icing On and Transfers directly below it; centred framed help.
2026-11-03-r2 · Icing On and Transfers directly below it; centred framed help.

Changes and tests · Exact-build QA

2026-10-29

Hard CPU coaching and stability

Hard CPU teams choose a stronger available keeper and first forward unit from their real roster. Native ratings, physics and fatigue are retained; Normal/Easy AI decisions and human teams keep their behavior.

Also fixes native rewind/powerplay-display crashes and reserve-goalie season statistics. All38 exact-build checks pass. This playable test copy is released while the larger AI-strength investigation continues.

Changes and limits · Exact-build QA

2026-10-28-r9

Hard: press, pass and shoot

The nearest CPU skater presses an opposing puck carrier even when he stands still. Teammates keep covering their positions. CPU carriers consider more clear blue-line shots; point receivers can catch and relay to a better finishing position.

Free slot receivers can shoot immediately on the actual catch using the buffered native one-timer. Passes still travel through real defenders and can miss or be intercepted. Native ratings, skating speed, shot physics and human controls retain their rules.

Implementation, paired comparisons and limits · Exact-build QA receipt. Small staged tests establish the actions, not a win rate.

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

2026-10-28-r8

Hard defenders meet the puck carrier earlier

On Hard, the nearer available back closes the carrying lane from the goal side. His partner protects a dangerous slot receiver, or the weak post when no receiver is there. This builds on the existing Hard attack and weak-side winger work.

In 16 paired defensive situations, the goal-side pressure gap fell in 15, averaging 33 rink units closer. One case had a 4-unit larger gap with better slot coverage. Eight Normal/Easy controls retained native target decisions. In 24 scripted rush/shot situations, observed attacker releases fell from 11 to 7 and attacking-team goals from 7 to 6. These small controlled samples do not establish a win rate or guarantee fewer goals in every match.

Current players, puck, original red goal and distinct controller stars.
2026-11-03-r2 · Current players, puck, original red goal and distinct controller stars.
Actual final-ROM Hard gameplay, puck and physical controller indicators.
2026-11-03-r2 · Actual final-ROM Hard gameplay, puck and physical controller indicators.

Player controls, ratings, skating speed, shot physics and goalkeeper reach keep their established rules. Implementation and test limits · Exact-build test receipt.

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

2026-10-28-r7

Shot charge: white, orange, red

The charge meter starts white, turns orange as the slapshot builds, and stays solid red at full power. The fill remains visible at maximum charge. Release timing, shot power, critical chance and shot speed keep their established behavior.

The rendered full shot gauge is solid red; actual C input continues the authenticated charge state.
2026-11-03-r2 · The rendered full shot gauge is solid red; actual C input continues the authenticated charge state.

Source and test evidence · Exact-build test receipt.

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

2026-10-28-r6

Keep your team, choose automatic replays

Continue Season keeps your controller on your chosen club in away games. Reloading the locked settings could previously assign a solo player to the home opponent. Full, Light and Mini now preserve the correct side at match start.

Auto Replays: On / Off is the row above Crit Shots in the main start menu. The choice is saved across restarts and shared between leagues and native modes. It can be changed during a season; match settings remain locked. Manual Instant Replay remains available when automatic replays are Off.

Leaving Scoring Leaders before the third period now returns to a visible menu with one Start press. Automatic replay no longer leaves a stale redraw flag. Crowd meters also stop erasing the right edge of the EA Hockey Night score ticker during penalty scenes.

Icing On and Transfers directly below it; centred framed help.
2026-11-03-r2 · Icing On and Transfers directly below it; centred framed help.

Historical release evidence: All 28 shared release checks pass for this build. New coverage includes 32 native match starts across two cold boots per scenario, pre-third statistics exits, a pixel comparison of the ticker, saved replay preferences and a real goal with automatic replays Off followed by manual Instant Replay. Fresh progress on each new release; controller mappings retained. Causes, source addresses and test details · Exact-build test receipt.

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

2026-10-28-r5

Hard: attacking support and better pass choices

AI forwards move with the puck: a far-side option toward the slot, a near-side return outlet and inside support from the center. A marked preferred spot makes the forward drop into another lane. CPU pass decisions evaluate free teammates in better positions. A poor-angle shot can wait when a better receiver is available.

Hard now has the same dynamic crowd momentum and rating effect as Normal. The permanent human −10% / CPU +10% handicap is removed. Hard keeps the new attack decisions and r4 defensive coverage. Both teams' AI teammates benefit. Easy keeps its existing bonuses; Normal and Easy retain native attacking decisions.

Historical release evidence: In eight paired staged native pass situations, passes toward the free receiver rose from 3/8 to 8/8, and actual receptions from 2/8 to 4/8. Eight additional support comparisons show the forward escaping a designated marker more often. These are controlled small samples, not match win-rate or guaranteed scoring claims. Native pass checks, reception and shot physics remain in use.

Actual final-ROM Hard gameplay, puck and physical controller indicators.
2026-11-03-r2 · Actual final-ROM Hard gameplay, puck and physical controller indicators.
Blue P1, red P2, neon-green P3 and yellow P4 in the actual four-pad match.
2026-11-03-r2 · Blue P1, red P2, neon-green P3 and yellow P4 in the actual four-pad match.

Credits stay until Start. The automatic timeout is gone; A/B/C and directions do not dismiss the card.

Historical release evidence: All 24 shared release checks pass, including 76 native attack cases, 16 paired attack scenarios, 12 crowd profiles, Start-only credits and a complete Hard CPU match. Implementation, backup and test limits · Exact-build test receipt.

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

2026-10-28-r4

Hard AI covers the far-side threat

On Hard, when the opponent carries deep along the boards, the AI winger on the other side now drops into the low slot. He chooses a dangerous receiver, anticipates a short movement and covers from slightly inside and goal-side. Without a receiver he protects the weak post.

This applies to both teams and both ends, including your AI teammates. Easy and Normal keep native positioning. Human controls, player ratings, skating speed, shot chances and goalie reach keep their established behavior. Native steering and checking still run.

In 11 paired native Hard skating situations, the winger moved closer to the receiver in every comparison. Average coverage distance on Hard fell by 27 rink units over the measured frames. Eight Normal/Easy controls retain the baseline positioning. This measures positioning, not a guaranteed scoring or win-rate change. 44 target/guard cases and the full 20-check shared release gate also pass. Tests use scripted native input.

Actual native goalie, puck and original red goal frame in the fresh four-pad match.
2026-11-03-r2 · Actual native goalie, puck and original red goal frame in the fresh four-pad match.
Current players, puck, original red goal and distinct controller stars.
2026-11-03-r2 · Current players, puck, original red goal and distinct controller stars.

Implementation, exact comparison limits, rollback backup and research credits: AI coverage notes. Current test receipt: QA_STATUS.json.

2026-10-13

1Co-op passing to your teammate

In Players: Two – Teammates, player 1's passes rarely went to player 2. The pass routine picks the teammate with the lowest "cost" (distance² plus a penalty if he isn't in the stick direction, ±45°) and makes no difference between humans and the computer, so a closer CPU player almost always won. A CPU receiver also skates into the pass by itself, a human doesn't, so passes to player 2 looked worse too.

Bot test, 100 passesBeforeAfter
Pass target was player 255 %86 %
Player 2 actually got the puck30 %44 %

2026-10-22: reach 20 → 40

New bot test (player 2 standing still, ±35° aim error, about 80 passes per version). Faster passes between the humans were tried too and were worse: the puck was gone before it could be taken.

Reach of the human pass targetPlayer 2 got the puckThe other team got it
20 (before)48 %31 %
3255 %25 %
40 (now)59 %18 %
2026-10-19

2Goalie passes are never blind

How it works today (2026-10-26): when your goalie has the puck he waits until you ask for it. Press pass (Xbox A / Genesis B) and he passes to the player you control, in co-op to the player of the pad that pressed. A press you are still holding when he catches the puck counts too. While his pass is on its way, extra presses no longer switch your player, so you keep the receiver. Y takes control of the goalie himself (manual goalie) and gives you the normal controls. If nobody presses, the game's own hold timer and whistle apply as usual. The text below is the original fix from 19 October.

If no teammate was inside the stick cone, the goalie just fired the puck straight out, often onto an opponent's stick. Short passes could also fly up to twice as fast because the flight time is rounded down.

72 goalie passes (8 positions × 9 stick directions)BeforeAfter
Blind passes210
Picked up by an opponent2012

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

2026-10-20

3Shots from the blue line can score

A set goalie saves everything below height 15 within 12–15 pixels, and the crossbar is at height 13. So a goalie in position was practically unbeatable from distance: 0.3 % of blue-line shots went in.

  • The shot routine stores the distance to the net. From distance 160 or more (the green zone, starting about 20 pixels inside the blue line) the game's own random generator decides, once per shot, whether the goalie misses it: 15 % chance.
  • While that is active the goalie can't reach or pick up the puck. It still has to go under the bar and between the posts.
  • Long shots get 1/8 less lift so fewer of them sail over the bar.
  • Applies to both teams, CPU included. You don't have to stand exactly on the line, anywhere in the green works.
  • The zone started at distance 140 at first and was moved out to 160 to make it a bit harder.

Measured

288 bot shots from 12 blue-line spotsGoals
Original1 (0.3 %)
Only shrinking the goalie's reach2–5
25 % miss chance12 (4.2 %)
40 % miss chance21
Historical 15 % estimate (before crit/Easy)≈ 2.8 %

The table above records the original pre-crit experiment, not current Easy scoring odds. The r32 audit verifies the current 15% roll separately. In that older experiment, about 17 % of shots where the goalie misses actually go in, so 15 % × 17 % + 0.3 % ≈ 2.8 %, close to the real NHL's ~3 % from the point. With 25 %, ten CPU games with Edmonton gave 8.7 % from the green zone versus 7.8 % from closer in, which was too generous. Better shooters score more: with the same 288 shots and the 25 % chance, McDavid's ratings scored 7.3 %, Draisaitl's 5.9 %, an average player's 4.2 %.

The current critical puck during actual native flight.
2026-11-03-r2 · The current critical puck during actual native flight.
The actual current critical puck and separated flame trail.
2026-11-03-r2 · The actual current critical puck and separated flame trail.

Shootouts

Shootouts (Play Mode → Shootout) are decided close to the net, so the change does not touch them. 810 bot attempts per ROM: original 20 goals, patched 19, none from long range in either. Almost every goal came from the same move: skate straight, cut left briefly, shoot about 38 pixels from the goal line. CPU vs CPU barely ever scores (0 in 85 attempts on the original).

Native shootout starts without further input. This screenshot uses a declared clock-only OT expiry fixture.
2026-11-03-r2 · Native shootout starts without further input. This screenshot uses a declared clock-only OT expiry fixture.

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

2026-10-21

4Off-screen arrow points the right way

When the goalie is off screen an arrow at the top edge shows where he is. In shootouts with a manual goalie it said the goalie was to the left, but when the shooter got there he was in the middle of the net. The arrow code comes from the original NHL 94, whose screen was 256 pixels wide (centre 128). This hack runs at 320 pixels (centre 160), so every edge arrow was drawn 32 pixels too far left. One constant changed ($16590: +$100 → +$120). Measured: the arrow for a goalie at x = 0 now sits at screen x 159 instead of 127.

Actual final-ROM Hard gameplay, puck and physical controller indicators.
2026-11-03-r2 · Actual final-ROM Hard gameplay, puck and physical controller indicators.
Blue P1, red P2, neon-green P3 and yellow P4 in the actual four-pad match.
2026-11-03-r2 · Blue P1, red P2, neon-green P3 and yellow P4 in the actual four-pad match.

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

2026-10-21

5Fighting: just Off and On, and it sticks

How fights work in this hack

Fights are added by the hack (the original NHL 94 has none). A fight can only start from a body check, and then the game checks:

  1. Fighting is on and Penalties is not Off.
  2. Neither player is a goalie and play is live.
  3. Both players' fighting rating beats a threshold. The threshold drops as the game gets heated and when the players already have penalty minutes.
  4. Finally a 25 % random chance.

Most players have a fighting rating of 0–6 and rarely pass the threshold, enforcers around 14 do. So fights are rare by design.

The bug

The setting was stored in RAM $FFDF00, which lies inside an event log the hack writes during the game (14 bytes per entry from $FFDEF6). After the first entry the setting held player data such as $0D12, so the menu choice stopped meaning anything mid-game. Value 0, which disables fights in the code, was labelled "Also On" in the menu.

The fix

The setting moved to free RAM $FFF004 (6 code references and 3 menu references changed). The menu now has two choices, Off and On. When Penalties is Off, Fighting shows N/A (fights need penalties on anyway). Tested: Off stays 0 and On stays 1 for whole CPU games. With everyone's fighting rating forced to max, a real fight happened (Beauvillier vs Toews).

Hard and native match settings, with framed centred help.
2026-11-03-r2 · Hard and native match settings, with framed centred help.
Hard and native match settings, with framed centred help.
2026-11-03-r2 · Hard and native match settings, with framed centred help.

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

2026-10-21

6All 32 rosters, October 21, 2026

Every team was rebuilt from the NHL's official API (rosters and prospects) and the current DailyFaceoff line combinations. Each team keeps the hack's 26 slots and its number of goalies, forwards and defencemen. Players are chosen in this order: in tonight's lines, rest of the roster, injured, prospects with NHL games, other prospects. The lines keep DailyFaceoff's trios and pairs, turned so every player plays his official NHL position (centre in the middle, left and right wings on their sides). Click a team under Teams to see its lines and ratings.

Edmonton was done first, by hand: lineup from the 4–3 win over Minnesota on October 20, Max Jones (not playing) and Mattias Janmark (injured) left out.

LineLWCRW
Scoring 1HymanMcDavidPodkolzin
Scoring 2FormentonDraisaitlKapanen
CheckingHowardDachJoseph
PairsLDRD
Scoring 1EkholmBouchard
Scoring 2SheaMurphy
CheckingWalmanEmberson

Goalie: Levi (Jarry, Andersen). PP1 Hyman–McDavid–Draisaitl, Ekholm–Bouchard. PP2 Howard–Hallander–Kapanen, Walman–Murphy. PK1 Kapanen–McDavid, Shea–Bouchard. PK2 Formenton–Michaels, Ekholm–Murphy.

Draisaitl placed at Scoring Line1 RW, with McDavid retained at centre.
2026-11-03-r2 · Draisaitl placed at Scoring Line1 RW, with McDavid retained at centre.

Ratings for new players

EA's public NHL 27 ratings only list the top 300 players, and the 8 Oilers there are already in the ROM. So the new players got ratings from their NHL stats (points, goals, shots, ice time, hits, blocks, penalty minutes, weight): each one gets the average of the 12 ROM players with the most similar stats, which keeps them on the hack's own scale. Tested on the players already in the ROM, it usually lands within half a step of their real ratings. Players who were already somewhere in the ROM keep the hack's ratings. Players with fewer than 20 NHL games are pulled toward a depth-player template, players without NHL games get the template. New goalies get the average of the 8 ROM goalies with the closest save percentage. Example, Edmonton:

PlayerWgtAgiSpdOffDefPwrChkFightStkAccEndPasAggSimilar to
Formenton 266333333132332Dewar, Luostarinen, Evans
Michaels 435332322133332Östlund, Kerfoot, Yamamoto
Hallander 198232322122222Kotkaniemi, Eller, Pearson
Levi 27 (G)Same level as Demko, Tarasov, Ingram, Schmid (save % ≈ .893)

Scale 1–6, weight 1–14, fight 0–7. For comparison McDavid has 6 in speed, offence, stickhandling and passing. Tested: all 32 rosters read back exactly from the ROM, and full CPU games (WPG–EDM, BOS–CAR, CBJ–OTT, NSH–TOR, SEA–ANA) ran without errors.

Later fixes

Current game screenshots: 2026-11-03-r2. Earlier dated images and audit archives retain their historical versions.

Current behavior ·2026-11-02-r2

7A full season

Regular Season is now a season. In the dated Season - jdc version, pick your team, play an 84-game schedule, and follow the standings and the stats of every player. Everything is saved in the game's battery memory, so it works in any emulator (RetroArch saves it as a .srm file) and on real hardware with a flash cart.

The main menu

  • Play Mode shows Continue Season when a season is saved. Move right to New Full Season (84 games), then New Season Light (31) and New Season Mini (7). Left and Right cycle through the available modes and wrap around.
  • New Season Light: 31 games. Each of the 32 teams meets every other team once. After game 31, the 16 qualifying teams enter a single-elimination playoff: one game decides each pairing.
  • New Full Season: select your club before starting. Erasing an existing season uses the native confirmed restart; cancelling preserves the saved progress.
  • Players supports One or Two - Teammates, plus Three/Four - Teammates with a4-Way Play adapter. Controllers follow the selected club. Season settings remain locked after the first completed game.
  • Game shows your next game: 5/84 vs CAR (home) or at CGY (away). The schedule has every opponent 2–3 times, home and away alternating.
  • After the first game, match settings stay locked across restarts and slot changes. Players and Auto Replays retain their separate editable behavior. Full, Light and Mini progress are saved independently; Quickgame and Allstar preserve those seasons.
Edmonton and a new Full season by default; help centred inside its matching native frame.
2026-11-03-r2 · Edmonton and a new Full season by default; help centred inside its matching native frame.

The season menu

Press Start in the main menu to see the restored native Matchups presentation for the current teams and players, followed by the pre-game menu. There:

  • Start Game: play your next game.
  • Season Standings: one division per page (Atlantic, Metropolitan, Central, Pacific), sorted by points then goal difference; opens on your team's division. Left/Right = division, Up/Down = choose a team, C = that team's players.
  • Scoring Leaders: the league's top 32 by points (goals break ties), 16 per page.
  • Restart Season: asks first (A+C = yes, Start = back; on a pad with X/A/B the Genesis A is X and C is B), then deletes the season and takes you to the main menu.
  • Season Standings and Scoring Leaders are also in the pause menu and after each game (they replaced Other Scores and Record Holders).
Native division standings and player/statistics controls.
2026-11-03-r2 · Native division standings and player/statistics controls.

The division table after every game

When a season game is over you get the standings drawn with the team banners from the game's own playoff tree (no cup), one division per screen: its 8 teams by points, with games played, points and the gap to the division leader (the leader shows his lead over number 2). It opens on your division, your team is marked with an arrow and blinks. Left/Right = the other divisions, Start goes on to the main menu. The font's shadow colour is darkened on this screen (the game's light shadow made the digits look blurry on dark blue).

Native division standings and player/statistics controls.
2026-11-03-r2 · Native division standings and player/statistics controls.
Current player statistics and sorting controls.
2026-11-03-r2 · Current player statistics and sorting controls.
Current scoring leaders with native sorting controls.
2026-11-03-r2 · Current scoring leaders with native sorting controls.
Edmonton and a new Full season by default; help centred inside its matching native frame.
2026-11-03-r2 · Edmonton and a new Full season by default; help centred inside its matching native frame.

Season - jdc - 2026-10-31

Current version: 2026-11-03-r2 (Beta). Each new release replaces the preceding jdc download with a new version name; Full, Light and Mini are included in this one ROM. jdc and Bodin start each new version with fresh progress; controller mappings are retained.

Shared QA checklist: Claude and Codex now follow the same test and release plan, with results bound to the exact ROM version.

Settings remain locked (28 October, r3): Continue Full/Light/Mini keeps its match settings after reboot. The temporary legacy unlock is removed, and Auto line changes are saved correctly. Details and tests.

Forum fixes and boot credits (28 October, r2): five gameplay corrections, including penalty-shot collision recovery and boxed-player pass selection. Reports and results; credits and sources.

Season settings kept, penalty minutes saved (28 October, from the NHL94 forum): a season now remembers its own Period Length, Goalie Control, Penalties, Line Changes and Fighting. Before, after leaving the emulator these came back as the start-up defaults and were locked for the rest of the season. r3 correction: older started seasons also stay locked. Saved choices are validated and recovered; choices for a new season are captured before match setup so Auto line changes remain Auto. Penalty minutes per player are now saved for the league and the playoffs and shown as a PM column on the season's club statistics pages.

Restart a finished season from the main menu (27 October): for a finished Full/Light/Mini season the Play Mode row now has a second choice next to See Old Full Season: Restart Full Season (Right). Start on it asks for X + B, like the finished-season menu, and starts a fresh season in that slot only. Also: the shot-power bar has no see-through lines above and below any more, and the crowd-bar graphics moved out of the window-plane area a broken glass panel uses (garbled ice and boards in that corner).

Meters in front of the players, flames after menus (26 October, r37/r38): the crowd meters and the shot-power bar are now drawn into the scoreboard layer like the score box, so skaters pass behind them instead of over them. And crit flames no longer go missing: text from the season menus could leave the flame timer at a huge value, so the flame graphics were not loaded for minutes of play; it is now reset at every face-off of a new game.

Difficulty kept per season (26 October, r36): the Difficulty setting was only in memory, so after a restart a season played on Easy came back as Normal, and could not be changed because it locks after the first game. Each season now saves its own Difficulty when a game starts and gets it back on start-up or when you switch seasons.

Faster Scoring Leaders (26 October, r35): opening the list and every sort now ranks the 800 players in one quick pass instead of 32 slow ones (about 1.5 s with no input before, so a Start press got lost and you had to press twice). Same order as before.

Sortable Scoring Leaders between games (26 October, r34): the season's Scoring Leaders in the pre-game menu now sorts by points, goals or assists with C (Xbox B), the chosen column in red, like the browser after a finished season. Left/Right still pages, Start goes back.

Crit flames follow the puck (26 October, r33): a crit could have its red puck and bomb sound but almost no visible flame trail. When the camera followed the shot, the six circles overlapped. They now follow the puck's path across the ice while the camera scrolls. Reproduced and checked in Mini, Easy, 5-minute periods, Fighting Off, Edmonton–Chicago. Shot power and goal bonuses are unchanged. Source, tests and before/after pictures.

The current critical puck during actual native flight.
2026-11-03-r2 · The current critical puck during actual native flight.
The actual current critical puck and separated flame trail.
2026-11-03-r2 · The actual current critical puck and separated flame trail.

Strong crits fixed and measured (26 October, r32): the very hardest crits could become slower and swerve the wrong way because the original velocity calculation overflowed. That is fixed. Tested Edmonton, Colorado and Toronto on Easy, Normal and Hard with 5, 7, 10 and 20-minute periods: 14,400 matched shots before/after. Bouchard #2 scored 32/100 full crit shots from the long-shot zone on Easy against an active goalie. The goalie-miss bonus activated 15.03% beyond distance 160 and never below it; Easy produced 2,400/2,400 actual crits. These are isolated goalie tests with other skaters out of the lane, not normal match scoring odds. Method, source and results · Full comparison CSV.

Measured shot speed is displayed below the clock, using the selected unit.
2026-11-03-r2 · Measured shot speed is displayed below the clock, using the selected unit.
The current critical puck during actual native flight.
2026-11-03-r2 · The current critical puck during actual native flight.

Shot panel stays through the replay (26 October, r31): the speed box now sits directly above the team/score box and has the same width and height. The charge meter is inside. The recorded km/h and mph stay visible throughout the goal replay, then disappear when play returns (also when skipped). The full-charge display now follows the complete wind-up. Source and tests.

Measured shot speed is displayed below the clock, using the selected unit.
2026-11-03-r2 · Measured shot speed is displayed below the clock, using the selected unit.
Clean REPLAY heading and preserved lower-left clock/frame during a real automatic replay.
2026-11-03-r2 · Clean REPLAY heading and preserved lower-left clock/frame during a real automatic replay.

No replay after the final horn (26 October, r30): the automatic goal replay could start after the game was over even though nobody had scored; fixed.

Shot speed in a score box (26 October, r29): the km/h and mph readout under the shot meter is now a real score-box panel, drawn with the game's own HUD frame and font exactly like the "COL 0 / WAS 0" box; it disappears after four seconds, at the next wind-up or when a replay starts.

Shot meter lower and steady; score-box skip hint (26 October, r28): the meter sits lower (the GOAL banner covered its text), the speed uses a narrow font on black plates in graphics memory nothing else touches (a broken glass used to scramble it), and the replay's "X+B SKIP" now looks like the score box (black plate, grey frame, blocky letters).

Shot meter and Easy difficulty (26 October, r27): a small meter top right fills while you wind up a slapshot; full = red and blinking in that release. Since 2026-10-28-r7 it starts white, turns orange and stays solid red at full charge. After the shot its speed shows under it in km/h and mph, measured honestly from the rink (centre line to goal line = 89 ft): the hardest normal slapshot is about 148-153 km/h (92-95 mph), a crit up to about 176-184 km/h (109-114 mph), above Zdeno Chara's NHL record of 108.8 mph (2012 All-Star Skills). Difficulty now has Easy too: your meters are always full (CPU empty), and every forehand slapshot of yours is a crit (backhands and quick wrists never crit).

The rendered full shot gauge is solid red; actual C input continues the authenticated charge state.
2026-11-03-r2 · The rendered full shot gauge is solid red; actual C input continues the authenticated charge state.

More crits, better co-op passes (26 October, r26): every crit-eligible shot gets 3 percentage points more crit chance (rating 100: 13%, 50: 8%). A pass now finds your human teammate even when he stands up to 90° off the direction you aim (it was 45°, so a CPU skater straight ahead took the pass), and with three or four players the nearest human gets it.

Skip hint, no menu flash after the replay (26 October, r25): under REPLAY a smaller "X+B SKIP" shows how to skip it (Mega Drive A + C). When the replay ends or is skipped it now goes straight back to the game; the replay's Options / Reverse Angle box no longer flashes up.

Y takes the goalie with four players (26 October, r24): with 3-4 teammates Y now takes your goalie also while a teammate skater has the puck (it switched skaters instead). Y is still a pass when you carry the puck, and the outlet request while your own goalie holds it; B brings you back to a skater.

REPLAY title (26 October, r23): the automatic goal replay shows a big chrome "REPLAY" in the corner, in the style of the NHL'94 logo, instead of the grey A/B/C VCR box. The Instant Replay from the pause menu keeps its controls.

Clean REPLAY heading and preserved lower-left clock/frame during a real automatic replay.
2026-11-03-r2 · Clean REPLAY heading and preserved lower-left clock/frame during a real automatic replay.

Skater switching with four players; settings locked in a season (26 October, r22): with 3-4 teammates on 4-Way Play, B (pass) switches to the nearest free skater again, also from a goalie you took with Y. Fighting and Difficulty can be set before a season's first game and are then locked like every other row.

Three/Four in original playoffs (26 October, r21): original New Playoffs, New Playoffs /7 and Continue Playoffs now also offer Three/Four - Teammates. The player count is remembered separately from Full/Light/Mini, and Two - Head to Head remains available. Source and tests.

Choose and remember players in playoffs (26 October, r20): select Continue Full/Light/Mini PO, move down to Players and choose One, Two, Three or Four - Teammates. Each season now remembers its own player count when you switch series or close and reopen the game, in both league and playoffs. Your qualified team, results and playoff tree stay the same. Three/Four requires the 4-Way Play configuration below. Source and restart tests.

Goalie controls for all four teammates (26 October, r19): your goalie stays under AI control after catching the puck. Tap the pass button to request a pass to your own skater, including players 3 and 4; a tap during the catch or dive waits for his recovery. Y takes the goalie manually. Changing to a season showing One now starts one player, and players 3/4 are inactive during the two-player shootout rotation and restored after it.

Tested with three and four players: Full, Light and Mini matches, switching player counts, menus, pause/resume and repeated cold starts. Two complete Mini games produced 27 goalie passes and 17 receptions; automated checks also cover catches, diving recovery, short taps, all requesting controllers and all playoff formats. Source, tests and technical notes.

Menu no longer freezes with 4-Way Play (26 October, r18): switching Play Mode onto a season saved without the adapter made the game forget the adapter, and the menu stopped taking input. Fixed.

Three / Four - Teammates in a season (26 October, r17): the first season game with three or four players no longer breaks the season (it was saved without your team, and the main menu could hang afterwards).

Up to four players on one team (26 October, r16): with a 4-Way Play adapter the Players row offers One, Two - Teammates, Three - Teammates and Four - Teammates; three or four of you then control the same team, also in a season (every game at home, as co-op). In RetroArch: Quick Menu → Controls → Port 1 and Port 2 Controls → Device Type "MD Joypad 6 Button + 4-WayPlay" (Port 2 is the one the game detects), then Quick Menu → Restart. With the adapter on, ordinary skater switching uses the game’s native behavior; r19 adds the goalie hold/pass/Y controls for all teammates.

Grey menu picture for every team, menu music back (26 October, r15): the main menu picture no longer takes the away team's colours, and the menu music plays again (it had been silent since the Season Edition intro replaced the title screen).

Season Edition main menu (26 October, r14): the main menu now shows the same "NHL'94 Season Edition" picture as the start-up screen behind its panels, instead of the old sunset skyline.

Edmonton and a new Full season by default; help centred inside its matching native frame.
2026-11-03-r2 · Edmonton and a new Full season by default; help centred inside its matching native frame.

Goalie outlet during the catch (26 October, r13): a quick B tap while your goalie is still catching the puck no longer switches skaters; it is kept, and the goalie passes to you as soon as he has the puck.

Top 100 scoring leaders (26 October, r12): the Scoring Leaders list now goes to place 100; Up/Down pages through it 18 at a time. Changing tab or sort there rewrites the list in place.

Scoring Leaders in the Season Complete menu (26 October, r11): a finished season's menu now has See Results, Scoring Leaders (that season's top scorers), Start New Season and Back to Main Menu. Start on a statistics page goes straight back to this menu.

Cleaner statistics screens (26 October, r10): the dark boxes behind every letter on the Season Complete menu and the statistics pages are gone; the text now sits on a slightly darker SPORTS background.

Fast team browsing (26 October, r9): switching club (Left/Right) or tab (A) on the statistics page now also rewrites the page in place, as fast as changing the sort.

Quiet, quicker statistics (26 October, r8): changing the sort (G / A / PTS) on the statistics pages rewrites the list in place instead of redrawing and fading the whole screen, and the menu music stops while you look at the statistics.

No freeze before the faceoff (26 October, r7): a match could stop on the "Resume Game" menu right after Start Game. The game's own intro uses almost the whole sprite list; the crowd meters, drawn first, pushed it into the game's pause flag. The meters are now drawn last, only while there is room, and the crit flames only after a real crit.

Season Complete menu first (26 October, r6): choosing See Old Full/Light/Mini Season now opens the Season Complete menu straight away (See Results / Start New Season / Back to Main Menu); the statistics open from See Results.

Faster Season Complete menu (26 October, r5): moving up and down in the menu after a finished season (See Results Again / Start New Season / Back to Main Menu) now only moves the marker; it no longer redraws and fades the whole screen on every step.

Goal replays play again (26 October, r4): the automatic replay after a goal now actually plays the goal; it only showed a still picture. A finished season's menu no longer shows your club against itself (for example Edmonton vs Edmonton).

No hang after viewing old season results (26 October, r3): after looking at a finished season's results and starting a new season in the same session, the first match could freeze on its start menu. Fixed.

Longer crit flames, crits in shootouts (26 October, r2): the crit tail is now six flames that follow the puck through the whole shot and burn out slowly afterwards, and it no longer disappears when many players are on screen. In shootouts a crit now also turns the puck red with flames (before, it only got the extra power and the effect stopped after one frame).

The actual current critical puck and separated flame trail.
2026-11-03-r2 · The actual current critical puck and separated flame trail.

Finished seasons show their saved results (26 October): completed slots say See Old Full Season / See Old Light Season / See Old Mini Season. Start opens the saved statistics instead of an extra match. After Scoring Leaders, choose to view again, start a new season in that slot, or return. Xbox X + B confirms a new season; Start cancels. Other seasons are kept. Code and native tests.

Completed Mini review menu, from an explicitly declared completed-save fixture. Centred native-frame help.
2026-11-03-r2 · Completed Mini review menu, from an explicitly declared completed-save fixture. Centred native-frame help.
Native New Playoffs selected from the current fresh menu. Centred native-frame help.
2026-11-03-r2 · Native New Playoffs selected from the current fresh menu. Centred native-frame help.

Clear statistics selection (r29): the selected G, A or PTS column heading turns orange when you change sorting. Up on the first page and Down on the last page keep the display still. Column headings now align with their numbers, and a blank row separates the player list from the controls. Both pages show Sort: Xbox B / Mega Drive C so Xbox players can identify the button. Code and verification.

Goalie pass input across a catch (r26): a pass press still held when the keeper catches the puck now requests the outlet, even if that press had just switched skaters. It reaches the requesting player's controlled skater after recovery. With no pass input he still holds the puck.

Browse every club after the season (r26): Left/Right cycles all 32 teams. A switches Season + Playoffs / Regular Season / Playoffs, C sorts points/goals/assists, Up/Down shows page2 with goalies. Start opens league Scoring Leaders; B there returns to your selected club. Both controllers work. On the Xbox layout A/B/C mean X/A/B. Code and verification.

Current completed-season player browser, from a declared saved-season fixture.
2026-11-03-r2 · Current completed-season player browser, from a declared saved-season fixture.

Automatic goal replays (25 October, r25): about a second and a half after every goal, the game's own Instant Replay starts by itself and plays the goal, then the game continues to the faceoff. Hold X + B (Genesis A + C, the same as Abandon Season) to skip it. No replays in shootouts.

Flame trail on crits (25 October, r23, fixed in r24): a critical slapshot now leaves a red and orange flame tail behind the puck while it flashes. In r23 it was sometimes missing when many sprites were on screen; since r24 it always shows.

The actual current critical puck and separated flame trail.
2026-11-03-r2 · The actual current critical puck and separated flame trail.

Mashing pass for the goalie outlet (25 October, r22): when your goalie holds the puck, the first pass press already makes him pass to you. Extra presses while the puck was travelling used to switch your player back and forth, so the cursor jumped around. Now the pass button does not switch players until the pass has arrived.

Season statistics with tabs and scoring leaders (25 October, r21): after the Season Summary you can browse all 32 teams' players and then the league's top18 Scoring Leaders. Both have three tabs, switched with A (also Left/Right on Scoring Leaders): Season + Playoffs, Regular Season and Playoffs; C changes the sorting between points, goals and assists; Up/Down shows page2 of the selected team with the goalies. Playoff statistics are now stored separately from the league. All the other playoff series get games and statistics too, and if you are knocked out the rest of the playoffs is simulated to the end in the background, so the playoff leaders are complete.

Current completed-season browser sorted by goals, from a declared saved-season fixture.
2026-11-03-r2 · Current completed-season browser sorted by goals, from a declared saved-season fixture.
Current scoring leaders with native sorting controls.
2026-11-03-r2 · Current scoring leaders with native sorting controls.

Co-op game row (25 October, r20): with Players set to Two - Teammates every season game is played at home (the game's co-op mode controls the home team). The Game row now says so, e.g. 84/84 FLA (co-op), instead of switching from "at" to a misleading "vs".

End-of-season summary (25 October, r19): when your season ends, the game now wraps it up. If you win the Stanley Cup you first see the game's own Playoff Stats and Champions page with the cup; if you are knocked out, the playoff bracket; if you miss the playoffs, the league table after your last game. Press Start and a Season Summary follows (record, points, goals for and against, and how it ended), then Start again for every player's statistics for the whole run, regular season and playoffs together (goals, assists, points, shots; page 2 with the goalies: games, wins, goals against, shots against). Playoff games now count in the season's player and goalie statistics.

Completed-season actions and the native Back/Select controls, from a declared fixture.
2026-11-03-r2 · Completed-season actions and the native Back/Select controls, from a declared fixture.
Current Player Cards: Tristan Jarry, matching the actual bought-back goalkeeper.
2026-11-03-r2 · Current Player Cards: Tristan Jarry, matching the actual bought-back goalkeeper.

Season test run (25 October, r18): all three season lengths were run to the playoffs and through them (won to the end and lost in round one). One bug fixed: after a season in which your team missed the playoffs, extra games you started were still counted into that season. They no longer are.

One-timers without stopping (25 October, r17): when a teammate passes to you (for example P1 to P2 in co-op) and you press or hold shoot while the pass is on its way, you no longer stop and wind up early, which used to make the pass slide past. You keep skating, take the pass, and a full-power forehand one-timer goes off the moment the puck reaches you. It can crit like any full slapshot. The crowd meter now also raises or lowers Crit Chance, and Team Roster shows it.

Meter effect in Team Roster (25 October, r16): during a game, Team Roster (pause menu) shows Overall and the 0–99 ratings with the team's current meter bonus or penalty included. After every game the meter starts over from the middle, and Roster outside a game shows the normal values.

Current on-ice and bench roster status.
2026-11-03-r2 · Current on-ice and bench roster status.

Historical difficulty behavior (25 October, r15; superseded by r5): Current Hard uses Normal-style momentum and improved AI. In r15, a new last row in the main menu. Normal is the momentum meter described below. Hard locks it for the whole game: human-controlled teams are always at the bottom (−10% ratings) and computer teams always full (+10%). It can be changed even during a season (the other settings stay locked) and starts as Normal after power-on.

Hard and native match settings, with framed centred help.
2026-11-03-r2 · Hard and native match settings, with framed centred help.

Team stats screen (25 October, r14): the season team stats page no longer shows the CRT column and its footnote, and the small black gap in the title frame (seen above "CH" in CHICAGO and other odd-length names) is gone.

Meter rows fixed (25 October, r13): in r12 the two bars were drawn next to the wrong team names (the bonus itself always went to the right team). Each bar now sits on its own team's row.

Crowd momentum meters (25 October, r12): two live bars beside the score box, one per team. Shots on goal and body checks pull the momentum toward your team (and away from the other); it slowly fades back toward the middle with every second on the game clock, so it works the same for 5, 10 or 20 minute periods. The bar's position is a rating modifier for everyone on the ice: full bar +10%, middle 0%, empty −10% (red when your team is below the middle). Players coming on the ice get the current modifier straight away. Before this, the native crowd meter only drove the crowd noise and the "Current/Peak Level" stats; it never changed ratings.

Actual earned Momentum bars beneath each team name in the lower-right HUD.
2026-11-03-r2 · Actual earned Momentum bars beneath each team name in the lower-right HUD.

Bright red crit puck (25 October, r11): a critical slapshot now turns the puck fully bright red instead of the dull pinkish rink-line colour. A few spectators' dark-green shirts in the crowd use the same colour slot and are now red.

The current critical puck during actual native flight.
2026-11-03-r2 · The current critical puck during actual native flight.

New start-up (25 October, r10): the EA Sports logo is gone; the game opens directly with the new NHL'94 Season Edition picture, then the main menu (any button skips it).

The preserved NHL94 Season Edition startup.
2026-11-03-r2 · The preserved NHL94 Season Edition startup.

Standalone New Playoffs get their own save (25 October, r9): an original New Playoffs tournament is now saved separately from your Full, Light and Mini seasons. You can have a season in its playoffs and a standalone tournament at the same time; Continue Full/Light/Mini PO and Continue Playoffs each continue their own bracket, also after switching seasons or restarting. User profiles (User Records users) are now shared by all seasons instead of being copied into each one.

No duplicate Continue Playoffs (25 October, r8): while a Full, Light or Mini season is in its playoffs, the original Continue Playoffs entry no longer appears next to Continue Full/Light/Mini PO. It showed the same season playoff a second time, outside the season. A standalone New Playoffs tournament still shows Continue Playoffs after its first game.

Abandon Season during a game (25 October, r6): the in-game pause menu (also after a timeout and between periods) now ends with Abandon Season. A + C discards the current season and goes to the main menu to pick a new team; Start returns to the pause menu and the game can be resumed. Outside a season game (Shootout, standalone playoffs) the entry does nothing.

Xbox-style pads with RetroArch's six-button setting: pad A = Genesis B (pass / switch player), pad B = Genesis C (shoot), pad X = Genesis A (speed / check), pad Y = Genesis Y (goalie). "A + C" means pad X + B; the Abandon Season dialog now says A + C (Xbox X + B) (r7).

Abandon Season (25 October, r5): the pre-game entry formerly called Restart Season is renamed, so it is clear the current season is discarded. A + C confirms and returns to the main menu with a new season of the same format, where you pick a new team; Start cancels. Other seasons are kept.

Simulated games follow Per. Length (25 October, r4): the other clubs' games (and Simulate Match) now produce goals and shots matching the period length you play. Calibrated from 118 complete CPU-vs-CPU games in the emulator: per team, about 1.3 goals / 12 shots with 5-minute periods, 1.9 / 17 with 7, 2.8 / 25 with 10 and 5.7 / 50 with 20. Previously every simulated game scored like a 10-minute game (2.8 goals, ~30 shots). Team strength still decides who scores more.

Per. LengthPlayed CPU games: goals / shots per teamSimulated (8-round check): goals / shots
5 min1.32 / 11.71.50 / 11.5
7 min1.93 / 16.82.14 / 16.6
10 min2.82 / 24.82.80 / 24.1
20 min5.70 / 49.55.55 / 48.6

Played-game goals are regulation only; simulated totals include the one overtime goal of tied games.

Clean SOG column in team statistics (25 October, r3): after viewing the goalie page and returning, stray characters from the goalies' SV% (for example 141% or 1289) no longer appear after skaters' shots on goal. The saved statistics were always correct; only the display was affected.

Schedule locked after game 1 (25 October, r2): Left/Right on the Game row now only changes the opponent before the first game of a new Full, Light or Mini season. Once a game has been played or simulated, the next fixture follows the fixed schedule. Saves carry over unchanged.

Correct player-card portraits (25 October): faces now follow the player identity after roster changes, in both the main-menu slideshow and Player Cards. All 832 card associations are checked: 702 reuse existing portraits, 123 use newly converted official NHL photos and seven show a neutral silhouette where NHL has no usable headshot. Names, ratings, statistics and saved seasons carry over.

Current Player Cards: Tristan Jarry, matching the actual bought-back goalkeeper.
2026-11-03-r2 · Current Player Cards: Tristan Jarry, matching the actual bought-back goalkeeper.
Current Player Cards: Ryan Nugent-Hopkins and his actual in-game rating.
2026-11-03-r2 · Current Player Cards: Ryan Nugent-Hopkins and his actual in-game rating.
Current Player Cards team cover and starting line.
2026-11-03-r2 · Current Player Cards team cover and starting line.

Portrait sources, the seven neutral cards, build tools and verification.

Local test save: Dallas has completed the84-game Full season and won the Cup in16 playoff wins. The game is prepared at the all-team statistics browser; Mini's Edmonton championship is retained. This progress is local, separately from ROM downloads.

10-minute OT and shootouts (25 October): both league games and playoff games now use ten minutes of sudden-death overtime. Still tied? Play three shootout attempts per club, then one each until decided; an unreachable lead ends it early. In Two - Teammates, P1 and P2 take alternate attempts for your club, home or away.

The winner receives one deciding goal in the final score. Shootout attempts do not add player goals, assists, shots or goalie goals against. League points and playoff progress are saved normally; Full keeps best-of-seven series and Light/Mini keep single-game pairings. Existing saves carry over.

Native shootout starts without further input. This screenshot uses a declared clock-only OT expiry fixture.
2026-11-03-r2 · Native shootout starts without further input. This screenshot uses a declared clock-only OT expiry fixture.

Sharp menu text when switching modes: original menu values now keep the correct small font when cycling between seasons, playoffs and Shootout.

Native New Playoffs selected from the current fresh menu. Centred native-frame help.
2026-11-03-r2 · Native New Playoffs selected from the current fresh menu. Centred native-frame help.
Native New Playoffs selected from the current fresh menu. Centred native-frame help.
2026-11-03-r2 · Native New Playoffs selected from the current fresh menu. Centred native-frame help.

Startup menu freeze fixed: cycling past Mini now skips Continue Playoffs when no playoff is saved. The menu keeps responding and can return to your season; all three saves stay intact.

Three separate season saves (25 October): keep a Full, Light and Mini season at the same time. On Play Mode, use Left/Right to resume each one's team, next fixture, standings, player statistics and playoffs. A saved slot shows Continue Full Season, Continue Light or Continue Mini; an empty slot shows New. Existing seasons carry over automatically.

Abandon Season (formerly Restart Season) resets only the selected series, with confirmation, including from its playoff pre-game menu. The other two seasons stay saved. Full keeps best-of-seven playoffs; Light and Mini keep single-game playoffs.

Edmonton and a new Full season by default; help centred inside its matching native frame.
2026-11-03-r2 · Edmonton and a new Full season by default; help centred inside its matching native frame.
Light season:31 games and framed centred help. Help is centred in its native frame.
2026-11-03-r2 · Light season:31 games and framed centred help. Help is centred in its native frame.
Mini season: seven divisional games; framed centred help. Help is centred in its native frame.
2026-11-03-r2 · Mini season: seven divisional games; framed centred help. Help is centred in its native frame.

Critical slapshots + Twin Cobra sound (25 October): only fully wound-up forehand slapshots can crit, including forehand one-timers. Quick wrist shots and backhands keep their ordinary power and sound. A critical slapshot flashes the puck red and plays the selected Twin Cobra digital explosion once. The Crit Chance rating and 25% bonus still apply to qualifying shots.


Listen/download: the crit sound captured from NHL · Source, hooks and verification

Correct team-selection logos: Full, Light and Mini now immediately show your club and its scheduled opponent when you change Team. This fixes both logos sometimes showing Edmonton even though the actual fixture was Edmonton–Detroit. Switching between One and Teammates also refreshes both sides correctly.

Mini season: seven divisional games; framed centred help. Help is centred in its native frame.
2026-11-03-r2 · Mini season: seven divisional games; framed centred help. Help is centred in its native frame.

Critical shots: every skater now has a separate Crit Chance rating from 0 to 100. At 100, 13% of full forehand slapshots get 25% extra shot power; at 50, the chance is 8% (since r26: rating/10 + 3 percentage points; a rating of 0 never crits on Normal/Hard; with Crit Shots On, Easy human full forehand slapshots always crit). Better offensive players receive higher ratings. Find it with Left/Right in Team Roster, in the CRT column of season player statistics, and on this site's team pages.

Historical r16 crit experiment (25 October): This earlier setup produced about a quarter more goals; current Easy and strong-shot behavior is measured in the r32 audit above. 4,800 fully wound-up forehand slapshots were fired in a copy of the game where every such shot crits, and 4,800 in a copy where none do; everything else was identical. Shots came from 20 positions 60–180 pixels from the goal line, three aims, against the goalie alone.

No critCrit
Puck speed18,36422,912 (+25%)
Goal4.9%6.2%
Save76.4%67.6%
Over the bar1.0%1.7%
Wide or deflected away17.7%24.5%

+1.3 percentage points, about 27% more goals per shot (statistically clear, z = 2.8). The faster puck beats the goalie more often but also misses the net and goes over the bar more often. The biggest gain is at medium range (140 px: 2.0% → 7.1%); from the blue line the existing blue-line bonus dominates either way (13–14%). The test is simplified (empty ice, skater placed directly in position), so real games differ, but the direction should hold.

Red crit puck: a critical shot now makes the puck briefly blink red and normal. It returns to normal when someone takes possession, play is stopped or a new shot starts. The Crit Chance rating and 25% power bonus stay the same.

The actual current critical puck and separated flame trail.
2026-11-03-r2 · The actual current critical puck and separated flame trail.
Current on-ice and bench roster status.
2026-11-03-r2 · Current on-ice and bench roster status.

New Full Season: 84 league games, then best-of-seven playoffs. Existing saved 82-game seasons finish at 82. New full seasons use 84, matching the NHL's 2026/27 game count.

Fixed an empty old Mini save making New Full Season show 1/8: it now correctly shows 1/84 without resetting any saved season.

Edmonton and a new Full season by default; help centred inside its matching native frame.
2026-11-03-r2 · Edmonton and a new Full season by default; help centred inside its matching native frame.

New Season Mini: eight league games against different opponents, then the usual 16 qualifying teams enter the playoffs. One game decides each playoff pairing.

On the main menu's Game row, Left/Right selects a different first opponent before game 1 of a new season, for some variety. After the first game the schedule is locked. The choice survives power-off, and the rest of the league plays the matching round.

Mini season: seven divisional games; framed centred help. Help is centred in its native frame.
2026-11-03-r2 · Mini season: seven divisional games; framed centred help. Help is centred in its native frame.

The private test build adds Simulate Match directly below Start Game. Select it with C to get an instant result, including player and goalie statistics. Press Start on the result screen to continue to the next fixture.

Tested through complete 8-, 31- and 84-game league schedules, plus continued legacy 82-game saves, including the final-game transition to the correct playoff format. Use the dated test download below for these changes; the earlier release downloads above are preserved.

The private test also fixes an Address Error when opening a team's players from Season Standings. All 32 teams, both player pages and goalie statistics have been checked.

Additional single-player checks covered 192 statistics screen entries and pause/resume. An obsolete statistics exit path was removed; Bodin's exact one-off freeze has not been reproduced. The separate co-op input fix lets both pads browse custom statistics.

More breakable glass: hard, high puck impacts on the straight glass behind the far goal now have a 50% chance to shatter the hit pane. The original break sound, whistle and faceoff remain. Low or soft shots and the other boards keep their normal behavior.

Period warning only at 0:40: the three warning beeps no longer repeat when a penalty expires, including at 1:00. Penalty release and its normal final-five-second ticks still work.

Call for a goalie pass: your AI goalie holds the puck until you press B. In One, he passes to player 1; in Teammates, he passes to the skater controlled by whichever player pressed B. A tap during a diving save waits until he gets up. The first request wins; a prolonged hold still causes a faceoff. Y/manual controls remain as before.

Diving goalie recovery: a goalie who catches the puck while sprawling now gets the same possession window as a standing catch, allowing time to get up and play it. A prolonged hold still causes a faceoff.

Faster player switching: without the puck, B selects another available skater when pressed. It avoids taking your teammate's player. With the puck, B still passes; Y selects the goalie.

Download ROM 2026-11-03-r2 (Beta) IPS 2026-11-03-r2 (Beta)

The dated IPS requires the original unpatched v5.1W ROM listed above. This test version contains all features described in this section.

Complete change log, build instructions and test evidence · Experimental source code · everything in one zip (all tools, sources, tests and notes for the current version). These sources rebuild the exact tested ROM.

The same private copy also tests automatic goalie control with explicit Y selection, a three-beep warning at 0:40 each period, and 1-minute ordinary / 2-minute fighting or injury penalties with 5-minute periods.

The actual current match scoring summary.
2026-11-03-r2 · The actual current match scoring summary.

What is counted

ColumnMeaning
GP W LGames played, won and lost in regulation time
OTWGames won in overtime or a shootout
OTLOvertime or shootout losses; historical saved ties are retained
GF GAGoals for and against
PTS2 per win (regulation, overtime or shootout), 1 per overtime/shootout loss or historical tie
G A PTSA player's goals, assists (up to two per goal) and points
SOGA player's shots on goal
GP W (goalie)Games the goalie started and won (overtime wins included)
GAGoals against while he was in net
SV%Save percentage: (shots against − goals against) / shots against, shown as .912
The actual native16-team playoff tree after real Start input.
2026-11-03-r2 · The actual native16-team playoff tree after real Start input.
Current Player Cards: Tristan Jarry, matching the actual bought-back goalkeeper.
2026-11-03-r2 · Current Player Cards: Tristan Jarry, matching the actual bought-back goalkeeper.

Playoffs after the full season

After game 84 (82 for an older saved full season), Play Mode shows Continue to Playoffs. Press Start to open the playoff tree with your team and the season's qualified teams. The full season uses best-of-seven series, and the playoff tree is filled with the season's 16 best teams, NHL style: the top 3 of each division plus 2 wild cards per conference (the best of the rest). East (Atlantic + Metropolitan) is on the right, West (Central + Pacific) on the left. The better division winner meets the second wild card, the other winner the first, 2nd meets 3rd. From then on it is the game's own playoffs, including Continue Playoffs after a power-off. If your team didn't make it, the menu is just free after the season.

New Season Light: after game 31, select Continue to Playoffs and press Start to see the qualified teams in the playoff tree. Each pairing takes one game, including the final.

Native New Playoffs selected from the current fresh menu. Centred native-frame help.
2026-11-03-r2 · Native New Playoffs selected from the current fresh menu. Centred native-frame help.

The division table after each game shows who is in right now: green = top 3 of the division, dark teal = wild card. Season Standings marks the same teams with a light blue band.

2026-10-22

8Y takes your goalie

With a 6-button pad and Goalie Ctrl: Manual Control, press Y when your team doesn't have the puck (loose puck or the other team has it) and you take control of your own goalie straight away. When your team has the puck, Y works like B, as before (pass). Works for the home and the away team, for player 1 and player 2, in the season and in single games. With a 3-button pad nothing changes.

Teams

Click a team for its lines, roster and ratings as they are in the patched ROM.

Tools

Everything used to make and test the patch is in tools/ (or all of it at once: nhl94-tools.zip, rebuilt with every release), and further work is done from there. The current ROM is built with experimental/build_test.py to an explicit output. Canonical work and private test evidence stay in the project's HTTP-blocked .workspace/ directory. The older build.sh workflow below is for the plain historical patch.

ToolWhat it does
build.shBuilds the ROM from the base v5.1W with patch.py, backs up the previous one, installs it for RetroArch and rewrites the IPS
update_rosters.shFetches NHL rosters, prospects, stats and DailyFaceoff lines, regenerates rosters/*.json (hand-made teams are kept) and builds
patch.pyAll the changes, each with a flag to switch it off
gen.py, fetch.py, rosters/Roster and line generator, one JSON file per team
make_site_data.pyReads the installed ROM and writes teams.json for the team pages
run.sh, h.lua, lua/Historical headless MAME/Lua rig. Current qualification uses experimental/test_core.py and the shared release runner with Genesis Plus GX.
season/The season mode in 68000 assembly (season.s, standings.s, leaders.s, teamstats.s, seasonmenu.s, newseason.s), built onto the patched ROM by build_season.py; readsram.py prints and checks a save file; mknv.py makes test saves
experimental/All experimental glass, player-switching, goalie/Y, warning, penalty and match-simulation code, a complete explicit-output builder, headless two-pad test harness and example cases. Build and continuation guide.
gpgx.pyHeadless test runs in Genesis Plus GX (the core RetroArch uses) from Python: same command files as the MAME rig, battery RAM, savestates
intro.s, introimg.pyOwn intro picture (fix 12): converts a picture to Mega Drive tiles (8 greys, dithered) and shows it at start-up instead of the title screens
ygoalie.sY = take your goalie (fix 9), assembled by build.sh
m68kasm.shAssembles 68000 code at a fixed address with GNU as (SGDK Docker image)
model.py and friendsRating model (kNN on NHL stats), ROM reader, EA ratings reader, disassembler, IPS maker, rink image
cd tools
./build.sh                 # build the plain ROM + the season ROM, rewrite the IPS and the team pages
./update_rosters.sh        # refresh all rosters from the NHL, then build
python3 make_site_data.py  # refresh the team pages

The current release is qualified with the headless Genesis Plus GX core used by RetroArch: 128 required suites, 465 exact native/test source hashes, real native controller input and opened current screenshots. Current graphical proof is recorded separately from historical MAME measurements.

Tech

The following table summarizes the historical plain patch. The current season ROM uses experimental/build_test.py and its relocated modules; the current hook exports cover every named change and the complete byte diff. Plain changes are made by patch.py from the unmodified v5.1W ROM. It checks the original bytes at every address and refuses to patch a different version. New code lives in free ROM ($20963E–$2FFFBF is empty in the original) and uses free RAM from $FFF000.

ChangeWhereFlag to skip
Pass target prefers the other humanhook $BD44 → $2FF000nosel
Receive radius for human pass targethook $14E84 → $2FF080norecv, r=N
Goalie passeshooks $BD5E, $BF54nogk, gadd=N, gmin=N
Blue-line shotshooks $C408, $15032, $150F6, $C51A; RAM $FFF000–3nobl, blp=N (15), bld=N (160), blz=N, blt=N
Off-screen arrow$16590noarrow
Fighting settingRAM $FFF004, menu at $2095xxnofight
Fighting N/A when Penalties is Offhook $F7BAA → $2FE000nofightna
Y takes your goalie (6-button pad)hooks $1FFC02 (pad reader), $B258 (input handler) → $2FE040 (ygoalie.s); RAM $FFF0E0–7noygoalie
Start-up defaults: 5 minute periods, Manual goalie, Auto line changestable $17C8E, hook $17C86 → $2FE200 ($D072)nodefaults
User Records removed from the main menumenu tables $20915A/$2091FE/$2095AE reordered, accessors → $2FE220, 9 rowsnouserrec
Own intro picture, no title screenhooks $771E, $172F4 → $2FE280; picture at $2A0000nointro
Season mode$2F8000–$2FBFFF; hooks $7C2E (game over), $F7BAA/$F7ABA/$F7C72/$F80BC (menu), $1732C (skip Matchups); battery RAM $1000 (table), $1220 (players)build without season/
Rosters (all 32)rosters/*.json → $2F0000, team table $30Enoroster

Testing

Historical measurement workflow: Everything was tested headless in MAME with Lua scripts: bots that press buttons from saved positions, breakpoints that log every shot and goal, and full CPU games as a stability check. Same position + same input = same result, so before/after comparisons are exact.

env -u DISPLAY -u WAYLAND_DISPLAY SDL_VIDEODRIVER=dummy \
  mame genesis -video none -cart rom.bin -nothrottle -autoboot_script h.lua

Useful addresses

AddressWhat
$C2F2Shot routine (aim table $C542, spread from distance and accuracy)
$14F78–$150C2Goalie reach (12–15 px, nothing above height 15)
$14620The net: crossbar at height 13
$164D6Off-screen arrows
$2001DEFight start check (hack code)
$11086Random number 0..d0−1
$FFB04A + i·$80Objects: 0–4 + 5 (G) team 1, 6–10 + 11 (G) team 2, 12–13 nets, 14 puck
$30E32 team pointers. Player = name, BCD jersey, 14 rating nibbles

The full notes are under Claude notes.