Releases: thinkelastic/DoomUltra64
Release list
DoomUltra64 v0.6
Doom and Doom II on the Nintendo 64, rendered by the RDP.
What's new since v0.5
One cartridge now plays any WAD. Every texture, flat, sprite and piece of
menu art used to be pre-composed by the build, which is what tied a ROM to the
single IWAD it was compiled against. It is now built from the WAD as each level
loads, so the same cartridge runs Doom, Doom II, Freedoom or a total conversion
— and a mod's own art simply appears, with nothing to convert and nothing to
rebuild.
This is affordable because Doom's art is already 8-bit palettised: none of the
work is colour, only layout. Vanilla Doom composes its wall textures at runtime
for the same reason.
It was proven rather than eyeballed. With the old baked files still present, the
console composed each one a second time and compared the bytes: 2,148 pieces
across eight Doom levels and 2,660 across eleven Doom II maps, every byte
identical, zero mismatches. The animation tables match too, now derived from
the WAD's own TEXTURE1 order.
The cartridge shrinks accordingly, because nine megabytes of it was art:
| v0.5 | v0.6 | |
|---|---|---|
| DoomUltra64.z64 | 12 MB | 2.1 MB |
| Doom2Ultra64.z64 | 15 MB | 1.2 MB |
Levels take a little longer to load than they used to — that is the art being
built as it is needed.
Mods. Drop add-on .wad files into sd:/Doom/mods/ and pick one from
Options → MODS. The list shows what is actually on the card, your choice
survives a power cycle, and NO MOD goes back to the plain game. Switching is
offered at the title screen only — the game will not swap a mod out from under a
level you are playing. New levels and custom art both work; custom sounds still
fall back to the stock ones.
Two fixes worth naming:
- Pressing A no longer announces a pickup you did not make. A doubles as
Doom's message-refresh key, so every press of the run button re-displayed your
most recent message — usually "Picked up a stimpack." - "Green is turbo!" is gone. The N64 stick reads past its nominal 80, so a
full deflection while running produced aforwardmoveabove Doom's cheat
threshold and the game said so, once every 128 tics. Clamping the stick also
fixes the part nobody would have reported: running was a few percent faster
than vanilla, and turning faster than the Controller slider claimed.
Rumble can now be switched off in Options.
Everything in v0.5 is included — sixteen coloured dynamic lights, Doom's real
light curve, reflections in nukage and on polished floors, light shafts, moving
liquids, self-naming saves and the controller sensitivity slider.
Installing
Extract to the root of your SD card. It creates one Doom folder:
sd:/Doom/
DoomUltra64.z64 the Doom ROM
Doom2Ultra64.z64 the Doom II ROM
saves/ savegames, six slots per game
mods/ drop add-on .wad files here
Add your own IWADs — they are not included and are not redistributable:
sd:/Doom/DOOM.WAD for DoomUltra64.z64
sd:/Doom/DOOM2.WAD for Doom2Ultra64.z64
Boot a ROM from the flashcart menu, then set Options → Graphic Detail to
High — the metal sheen, the pool reflections and the 320x480 mode are all
gated on it.
Music is optional and ships separately. tools/mkmusfromiwad.py builds it from
the game files you already own, in one command; see the README.
Requires the Expansion Pak. Developed and tested on a SummerCart64.
DoomUltra64 v0.5
Doom and Doom II on the Nintendo 64, rendered by the RDP.
What's new since v0.4
Vertical seams between wall segments are largely gone. Thin one-pixel slits, worst on distant walls, where a column of the frame was never painted by anything. Three causes, each measured before and after:
- The BSP claimed columns a wall provably cannot paint. With antialias off the RDP writes a pixel only if the sample at its integer coordinate is inside the span, so a span starting at 187.5 cannot write column 187 — but it claimed it, the solid list marked it covered, and nothing behind was allowed to fill it.
- A wall span's end edges went through a float round trip — parameter to texture coordinate and back — that is not an identity. At distance a few ULPs of parameter is a quarter-pixel of screen x, so two segments meeting at a shared map vertex projected it to slightly different places.
- Two segments need not share a vertex at all. Their outer edges are now grown to the enclosing pixel boundary, so neighbours overlap by under a pixel instead of leaving a void. Walls are opaque and depth-tested, so overlap costs nothing.
Measured over the same demo route: mid-view hole pixels 3747 → 1226, seam columns ten rows or taller 127 → 35.
Also: the polished-metal sheen now reports when it runs out of per-frame slots, so a densely plated corridor says so rather than quietly sheening only some of its walls.
Everything in v0.4 is included — sixteen dynamic lights, Doom's real light curve, polished metal, glowing powerup spheres, seated barrels, cartridge-resident music, self-naming saves, and the controller sensitivity slider.
Installing
Extract to the root of your SD card. It creates one Doom folder:
sd:/Doom/
DoomUltra64.z64 the Doom ROM
Doom2Ultra64.z64 the Doom II ROM
saves/ savegames, six slots per game
Add your own IWADs — they are not included and are not redistributable:
sd:/Doom/DOOM.WAD for DoomUltra64.z64
sd:/Doom/DOOM2.WAD for Doom2Ultra64.z64
Boot a ROM from the flashcart menu, then set Options → Graphic Detail to High — the metal sheen, the pool reflections and the 320x480 mode are all gated on it.
Music is optional and ships separately; see the README for tools/mkmuswad.py.
Requires the Expansion Pak. Developed and tested on a SummerCart64.
DoomUltra64 v0.4
Doom and Doom II on the Nintendo 64, rendered by the RDP.
What's new
- Sixteen dynamic lights instead of eight, and they cost what they actually illuminate rather than what happens to be in the frame.
- Doom's real light curve. Dim sectors floor at black instead of tapering, so darkness reads as darkness; contrast and overall brightness are separate knobs on top.
- Polished metal on doors and wall plates — twenty-five textures now, where it used to be a handful of doors.
- Glowing powerup spheres, each haloed in the measured average colour of its own sprite.
- Barrels sit on the floor. Doom's art hangs a few rows below a thing's origin, and a billboard drawn at one depth lost exactly those rows to the floor. The quad now follows the floor plane in z.
- Music streams from cartridge RAM. A whole track is preloaded into SDRAM at level load, so playback stops costing an SD read every frame.
- Saves name themselves after the level you are in, on overwrite as well as on a fresh slot.
- A controller sensitivity slider in Options, and a slower default — half to 1.4x, defaulting to four fifths of the old rate.
Installing
Extract to the root of your SD card. It creates one Doom folder:
sd:/Doom/
DoomUltra64.z64 the Doom ROM
Doom2Ultra64.z64 the Doom II ROM
saves/ savegames, six slots per game
Add your own IWADs — they are not included and are not redistributable:
sd:/Doom/DOOM.WAD for DoomUltra64.z64
sd:/Doom/DOOM2.WAD for Doom2Ultra64.z64
Boot a ROM from the flashcart menu, then set Options → Graphic Detail to High — the metal sheen, the pool reflections and the 320x480 mode are all gated on it.
Music is optional and ships separately; see the README for tools/mkmuswad.py.
Requires the Expansion Pak. Developed and tested on a SummerCart64.
Doom Music for SummerCart64
Music for DoomUltra64
Download the release separately add the DOOM.WAD and DOOM2.WAD