Skip to content

Releases: thinkelastic/DoomUltra64

DoomUltra64 v0.6

Choose a tag to compare

@thinkelastic thinkelastic released this 19 Aug 23:55

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 a forwardmove above 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

Choose a tag to compare

@thinkelastic thinkelastic released this 18 Aug 23:00

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

Choose a tag to compare

@thinkelastic thinkelastic released this 18 Aug 02:30

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

Choose a tag to compare

@thinkelastic thinkelastic released this 06 Aug 23:42

Music for DoomUltra64

Download the release separately add the DOOM.WAD and DOOM2.WAD