Skip to content

Releases: 1nputs/ninety-four

ninety-four v0.3.6

Choose a tag to compare

@1nputs 1nputs released this 22 Oct 16:58

ninety-four v0.3.6: rosters changed online, and your own colors on every screen

NHL '94 rebuilt in C, online with rollback for two to four machines. This release lets the host change the rosters (or the rules) in the middle of a session, everyone's game starting again with them. Pictures you draw for a roster set now bring their own colors: a new title screen or background no longer comes back in the old screen's colors. With the Classic rules and the cartridge's rosters it is still the original game, frame for frame.

Rosters changed online

  • The host's Rosters and Game rules pages stay its own during a session. Choose other rosters (or other rules) there, then the menu's Reset (chosen twice): the new ones go to every machine, and every game starts again with them at the same frame, from a new cartridge. The NHL 2026 edition's rosters take about a second to reach everyone.
  • The others' pages show the host's new choices, grayed, and its new rosters are listed on their Rosters page as the host's.
  • A Reset with nothing changed resets the game for everyone, as before.
  • Every machine takes the new rosters only once it has every button before that frame, so no rollback reaches back into the old ones.
  • From the command line, for tests: --net-rosters FRAME:DIR (the host), and --rosters-at FRAME:DIR (alone, to compare).

Your own colors on every screen

A modder found that a redrawn title screen or background came back in the screen's old colors. Two things caused it, both fixed:

  • Pictures saved by an editor with a palette of its own are read by their colors. Paint.NET, GIMP's "optimum palette" and others write their own palette. The game used to read those by palette position and silently drew the old colors. Now a pixel keeps its palette position only where its color is the one the export wrote there; every other pixel is found by its color. This goes for every picture: logos, banners, center ice, photos, sprites and the shared screens.

  • The screens that have colors of their own take yours. These are:

    • the title screen and its title;
    • the EA screen;
    • the setup, scouting and player card backgrounds;
    • Ron Barr;
    • the photos' shades;
    • the cards' corner logo;
    • the rink.

    Three ways to use it:

    • Recolor a picture (an editor's "replace color", or a palette edit), and it takes the new colors.
    • Draw in new colors, and each one takes a free place in its line of 16.
    • Draw a screen anew (the title, EA, setup, scouting and card backgrounds), and it gets tiles of its own.

    When a line is out of room, --check-rosters names the color that is one too many and where it is. The places a screen shares with its text, the pictures over it and the sprites are kept, so recoloring the title doesn't touch the NHL shield. ROSTERS.md has the table of which screen brings which colors.

  • Exports show the colors the game does. The EA screen's white and black were swapped, and the shield, the NHLPA logo and the setup screen's top bar and menu box were off in a few places.

  • Fixed: a banner or center ice in full color for any team but Anaheim was refused (it was checked against Anaheim's colors).

American spelling

  • The game, its messages, menus and guides now use American spelling: colors, center ice, gray.
  • colours.csv is colors.csv in new exports. Roster sets made before keep working: a colours.csv (its column colours) is read the same.
  • pulseman's Video page says Colors; a settings file's old video.colours is carried over.

Downloads

  • ninety-four-0.3.6-linux-x86_64.tar.gz: nhl94 for x86-64 Linux (glibc 2.34 or newer, SDL2 installed: sudo apt install libsdl2-2.0-0 on Debian and Ubuntu), with a README, the rosters guide (ROSTERS.md) and the licenses.
  • ninety-four-0.3.6-windows-x86_64.zip: nhl94.exe for 64-bit Windows 10 or newer, with SDL2.dll beside it, the README, the rosters guide and the licenses.
  • ninety-four-0.3.6-macos-universal.zip: ninety-four.app for macOS 11 or newer, Apple Silicon or Intel, with the README, the rosters guide and the licenses.
  • SHA256SUMS: the three files' checksums.

Unpack anywhere and run it. Coming from v0.3.5: your settings, saves, states and rosters carry over. Online, every machine needs v0.3.6 (it won't play v0.3.5).

Known limits

  • A screen's colors come in lines of 16, shared with whatever else is on that screen. The title's line 1 (the NHL shield, the NHLPA logo and the credits) has 3 places free; in a game every place of the rink's two lines is also the players', the refs' or the scoreboard's, so a rink can be recolored but not given new colors.
  • The other limits are v0.3.5's: NHL 94 2025's wider ratings play as the cartridge's 6 at most, a hack's own code isn't taken, a player who leaves ends the game for everyone, and the Mac app isn't signed by a registered Apple developer.

Under the hood

  • Runs on pulseman at 270c095: mdrt_net_change (protocol 8), the host's new settings, sent like a state for everyone and taken by every machine at the same frame once it has every button before it; and the window's net_change, the host's pages its own in a session.
  • Checked:
    • The rosters test passes: 2,301 checks, every hack extracted, built and played. It now also checks pictures saved with an editor's own palette against the same in RGB, a recolored setup screen, a redrawn title, the old colours.csv, and three new refusals.
    • The netplay check has a new scenario: the host changes the rosters in the game, and every machine plays it frame for frame as a solo run that changes there.
    • pulseman's netplay test: the host's new settings taken at the same frame on both machines, every frame as a lone console's.
    • pulseman's window test: the host changes an option, then Resets, and the joiner starts again by its settings.

Bring your own NHL '94 cartridge dump (the 1 MB US/Europe retail ROM).

ninety-four v0.3.5

Choose a tag to compare

@1nputs 1nputs released this 21 Oct 12:30

ninety-four v0.3.5: online play, and a Mac app

NHL '94 rebuilt in C, now online: two to four machines over the internet or a LAN, with rollback netplay, up to four players. Everything is online: the host's rosters (your own, or a ROM hack's, extracted whole), its game rules and save states go to every machine. There is a macOS app now too, for Apple Silicon and Intel, and Linux, Windows and Mac all play each other. With the Classic rules and the cartridge's rosters it is still the original game, frame for frame.

Online play

  • Two to four machines, over the internet, a LAN or a VPN, with rollback. Each game plays its own players' buttons at once and guesses the others'. When theirs arrive different, it plays the last few frames again before drawing the next one, so no one waits.
  • The menu's Online play page:
    • Name and Role: host, join a host, or (two machines) both connect at once, which most home routers let through without a forwarded port.
    • The address and the port, and this machine's LAN address.
    • The input delay (2 frames by default: more means fewer rollbacks over a long way).
    • Players here, and for the host, Total players.
    • Joining says whether you have reached the host, are connected, and how many of the players are in.
  • Any players at each machine: four with one player each, two with two, two and one and one, one and three. The host's players get pads 1 onward, then each machine's as it joined. With pads 3 or 4 played, EA's 4 Way Play is in the ports on every machine (choose Players: Three or Four on the setup screen).
  • The game is the host's. Its Rosters and Game rules choices go to every machine before the game powers on, so no one else needs a copy. Rosters go as their package: the NHL 2026 edition's, every photo included, is about 1.7 MB. While the session lasts, every machine's pages show the host's choices, greyed.
  • Save states online: anyone's Save state saves one that every machine played. The host's Load state loads one for everyone, at the same frame on every machine. That is how a season, its lines and its records go online: save a state playing alone, host, and load it. A state of other rosters than the session's is refused, saying so.
  • The host's Reset (in the menu, chosen twice) starts the game again for everyone, and the session goes on.
  • Every game online starts from a new cartridge (default lines, no records). No one's save file is read for it or written by it.
  • If anyone leaves, the game is over for everyone, and each machine is told who left. Pause, slow motion, fast-forward and rewind are off while you play together.
  • Every machine needs the same build and the US/Europe cartridge, or it is refused. This release's Linux, Windows and macOS downloads are one build, so they play each other.
  • From the command line too: --host [PORT], --join ADDR[:PORT], --peer ADDR[:PORT] (with --port your own), --delay N, --name NAME, --here N, --players N.

Rosters (they were leagues)

  • Leagues are Rosters now, everywhere, because what the game has is who plays: teams, players, ratings, lines and their art. That means:

    • the menu's Rosters page;
    • the rosters/ folder beside the game, with a rosters.ini in each set;
    • --rosters, --export-rosters, --check-rosters and --pack-rosters (--extract-rom as before);
    • the guide, ROSTERS.md.
  • ROM hacks, extracted whole: nhl94 --extract-rom HACK.bin rosters/2026 takes the teams, players, ratings, lines, playoff draws, colours, jerseys and all the art of a hack made on the 32-team template (NHL 2026 94 Edition, NHL 94 2025, the 30th Anniversary Championship Teams and the like). The result is CSV files and PNGs to edit and play. The hack is only read, never run.

  • The Rosters page in sixteen pages, stepped through with left and right, and kept as you choose another set to compare:

    • the best skaters, goalies and teams;
    • the fastest skaters, hardest shots, sharpest shooters, best passers, stickhandlers and hitters;
    • the heaviest and lightest players;
    • the teams' power play, penalty killing, and home and road bonuses;
    • the rosters in numbers.

    Ratings are ordered by the rating and shown as the roster screen shows them. A set rated past the cartridge's scale shows its own numbers, under a line that says so.

  • Fixed: a roster set picked with the Files line from the game's own folder, rather than from rosters/, plays now. Before, the game said there was no such package and played the cartridge's teams.

macOS

  • A Mac download: ninety-four.app, one universal app for Apple Silicon and Intel, for macOS 11 or newer, with SDL2 inside. Opened from the Finder, it keeps its settings, saves, states, captures and rosters in ~/Library/Application Support/ninety-four.
  • It is signed ad hoc, not by a registered Apple developer. The first time, Control-click it and choose Open, then Open again. On macOS 15 and newer, try to open it once, then choose Open Anyway in System Settings, Privacy & Security.
  • Online on your own network: the first time you join, macOS asks whether ninety-four may connect to devices on your local network; allow it. A new version counts as a new app and is asked again. If the question was missed, joining says "Cannot send: No route to host". The README in the download says how to turn it on.

And

  • The Autosave: quitting saves where you were in play, first on the Load page. The game always starts fresh and loads it only when you choose it (it replaces quick resume).
  • The window no longer pauses when it loses focus (Esc pauses).
  • Frames a second at the picture's top right (Options, FPS counter, off by default).
  • The menu says things more briefly: shorter labels and choices.
  • The downloads carry their version in their names.

Known limits

  • NHL 94 2025 rates its players on a wider scale than the cartridge's 0 to 6, for its own code, which is not taken. Past 6, a rating plays as a 6, so its players come out more alike than its authors meant (ROSTERS.md says more). The other hacks rate on the cartridge's scale.
  • A hack's code is not taken, so neither is what it changed there: its own gameplay, its extra menu lines, its menu and announcer texts.
  • Online, a player who leaves ends the game for everyone; there is no rejoining yet.
  • The Mac app is not signed by a registered Apple developer, so macOS asks before opening it the first time, and asks again for the local network with each new version.

Under the hood

  • Runs on pulseman at 528358d:
    • rollback netplay (mdrt/netplay.h, game-agnostic and never blocking: a host and up to three guests) and its UDP link;
    • states and the host's power on in a session;
    • the window's online sessions, and its macOS build.
  • The game's state is native: its work RAM as C structs in the host's byte order, with the 68000's view of it made only for the checks. The rosters are native tables, and their art is read by number through an art map that every golden run checks.
  • The game built by Clang plays bit for bit as GCC's, which online play between the downloads needs: the Mac's is built with Zig's Clang, and the Linux and Windows ones with GCC. The golden runs are clean under UBSan.
  • Checked:
    • 10,276 recorded routine calls replay exactly.
    • 18 whole sessions run in lockstep with the reference emulator.
    • 20 golden runs play bit for bit.
    • The rules test (71 checks) and the rosters test pass.
    • A netplay check plays nine sessions over a simulated network, each one frame for frame as a solo run of the same buttons: two machines three ways, two with two players each, four with one, three with two and one and one, two with one and three, the host's reset, and a state with records loaded for everyone.

Bring your own NHL '94 cartridge dump (the 1 MB US/Europe retail ROM).

ninety-four v0.3.0

Choose a tag to compare

@1nputs 1nputs released this 18 Oct 20:13

ninety-four v0.3.0: leagues, game rules, and a lot more to look at

NHL '94 rebuilt in C, now with leagues of your own (or a community hack's, extracted whole), game rules the cartridge never had, four-player games, save slots, pixel-art upscalers, CRT looks, GIF captures and vsync. Play by the Classic rules with the cartridge's league and it is still the original, frame for frame.

Leagues

  • Your own league, up to 32 teams: teams, players, ratings, lines, colours and jerseys, logos, banners, centre ice, player photos, even the title screens, rinks, sprites and fonts every team shares. A league is a folder of CSV files a spreadsheet opens and PNGs any paint program edits, in leagues/ beside the game.
  • Start from the cartridge's: nhl94 --export-league leagues/my-league writes it out to change as you like; nhl94 --check-league leagues/my-league says what holds, or what is wrong and on which line.
  • Leagues from community hacks made on the 32-team template (NHL 94 2025, NHL 2026 94 Edition, the 30th Anniversary Championship Teams and the like): nhl94 --extract-rom HACK.bin leagues/2026 takes its teams, players, ratings, lines, playoff draws, colours, jerseys and all its art. The hack is only read, never run. Its code is not taken, so what a hack changed in code (its own gameplay, extra menu lines, its texts) is not part of the league.
  • Packages: nhl94 --pack-league leagues/2026 2026.zip makes a league one file to keep or send; a package in leagues/ plays as it is. The NHL 2026 edition's whole league, every photo included, is about 1.7 MB.
  • The League page in the menu: choose who plays, and see what the league holds: its files, how many teams play for the cup, and its best five skaters, five goalies and eleven teams by the ratings the game's own cards show.
  • Leagues from anywhere: what is in leagues/ is listed, and the League page's Files line opens a file browser to find a league's folder or package anywhere else; the game remembers it.
  • New teams get name banners drawn in the cartridge's own lettering. Each league keeps its own records.
  • Everything about the format, file by file and column by column: docs/LEAGUES.md.

Game rules

On the menu's Game rules page, for every player and the whole game. Classic, the default, is the original exactly.

  • Fixes: the weight bug (a heavy skater checked by a lighter player no longer falls as easily), and the second assist kept on a give-and-go.
  • Stats: plus/minus and body checks in Player Stats.
  • Time: more period lengths (2, 3, 7 and 15 minutes besides 5, 10 and 20), and the regular season's overtime length.
  • How it plays: skating speed, the speed burst, shot power, how far the puck slides, tiring, bench rest, rest in the penalty box, how many penalties are called, hot and cold streaks.
  • Presets: Classic, Simulation and Arcade.
  • A wide rink view: the ice 320 wide instead of 256, the camera moving less.
  • Any number you like: the amounts are numbers underneath, so settings.ini takes any value in a rule's range (rules.skating = 115), and so does --rule skating=115.

Video, capture and play

  • Vsync, so nothing tears (Video page, on by default).
  • Pixel-art upscalers: Scale2x, Scale3x, MMPX 2x and 4x, xBR 2x, 3x and 4x.
  • Looks: the colours' levels (standard, full range or the console's own), dithering blended as a television blended it, scanlines, and an aperture grille, slot mask or shadow mask.
  • Captures as GIFs: F10 saves the last 20 seconds, F11 records until you press it again.
  • Save slots: eight, each with a picture of the moment, from the menu; quick resume puts you back where you quit.
  • Four players with EA's 4 Way Play, as on the cartridge.
  • The keys are in groups now: F1-F3 sound, F4-F8 time (rewind, pause, fast-forward, slow motion, frame step), F10-F12 captures (replay, recording, screenshot).

Downloads

  • ninety-four-linux-x86_64.tar.gz: nhl94 for x86-64 Linux (glibc 2.34 or newer, SDL2 installed: sudo apt install libsdl2-2.0-0 on Debian and Ubuntu), with a README, the leagues guide (LEAGUES.md) and the licences.
  • ninety-four-windows-x86_64.zip: nhl94.exe for 64-bit Windows 10 or newer, with SDL2.dll beside it, the README, the leagues guide and the licences. Cross-built with MinGW-w64 GCC and not yet run on Windows: please report what you find.
  • SHA256SUMS: the two files' checksums.

Unpack anywhere and run it from its folder; the first time it asks for your ROM. Settings, saves, states, screenshots, videos and leagues/ all live beside it. Coming from v0.2.0's download, copy your settings.ini and out folder across.

Upgrading from source

git pull && git submodule update --init && make nhl94
  • Your settings carry over; the new ones are added with their defaults (vsync on).
  • The battery save (user records, edited lines) carries over.
  • Save states and quick resume from v0.2.0 do not load: states now carry the game's rules and its league. Finish or note any game you have saved before you update.

Known limits

  • The hacks' menu and announcer texts are not taken (they are worded to match each hack's own code); a hack's own gameplay changes are not taken either.
  • Online play is not here yet: the rules and the league are already part of a game's session, so every player can play the host's.
  • Built and tested on Linux. The Windows build is cross-compiled without a warning but not yet run on Windows; macOS has not been tried.

Under the hood

  • Runs on pulseman at ea1406e (vsync, PNG and zip, menu pages for a game's own options, and its file browser for them).
  • Checked as before: 10,276 recorded routine calls replay exactly, 18 whole sessions in lockstep with the reference emulator, 20 golden runs bit for bit. New: a rules test (every rule on the game's own routines, and the League page's ratings against the cards' for all 684 players) and a league test (the cartridge's league exported and built back byte for byte, a 32-team league, 22 broken ones refused with the reason, and each hack extracted, built to its teams, colours and art as the hack has them, played and packed, and leagues found outside leagues/: 2,916 checks).

Bring your own NHL '94 cartridge dump (the 1 MB US/Europe retail ROM).

ninety-four v0.2.0

Choose a tag to compare

@1nputs 1nputs released this 16 Oct 19:23

The first playable release of ninety-four: EA's NHL '94 for the Sega Genesis, with every routine rewritten by hand in C and checked against the original frame by frame. It runs natively on pulseman, our Mega Drive runtime. No emulator and no cartridge slowdown.

Bring your own ROM (the 1 MB US/Europe retail dump)

  • Linux (ninety-four-linux-x86_64.tar.gz): x86-64, glibc 2.34+, needs SDL2 (sudo apt install libsdl2-2.0-0). Tested on Debian 13.

  • Windows (ninety-four-windows-x86_64.zip): x86-64, Windows 10+, SDL2.dll included. Built with MinGW-w64 but not yet tried on Windows, so please report how it goes.

  • macOS: build from source (see the README).