Experimenting with Sega 32X Doom in 2024.


I have recently downloaded a ROM of Sega 32X Doom and I managed to extract the assets and dump them into a WAD file readable by Slade3 on Windows. There is a utility dating from 2009 that can perform this task admirably.

Dumping 32X Doom assets to a PC format wad file using the utility.

PS G:\Code\wad32x_100> .\wad32x.exe
------------------------------
 DOOM 32X WAD CONVERTER v1.00
 Written by Damian Grove
 Jan  7 2010
------------------------------
 
USAGE: wad32x.exe [command] [in file] [out file]
  example 1:  wad32x.exe -export doom32x.bin doompc.wad
  example 2:  wad32x.exe -import doompc.wad doom32x.bin
 
Press any key to continue . . .
PS G:\Code\wad32x_100> .\wad32x.exe -export '.\Doom 32X (E) [!].bin' doompc.wad
------------------------------
 DOOM 32X WAD CONVERTER v1.00
 Written by Damian Grove
 Jan  7 2010
------------------------------
 
0x0001  PUNGA0
0x0003  PUNGB0
0x0005  PUNGC0
0x0007  PUNGD0
0x0009  PISGA0
0x000B  PISGB0
0x000D  PISGC0
0x000F  PISGD0
0x0011  PISGE0
0x0013  PISFA0
0x0015  SHTGA0
0x0017  SHTGB0
0x0019  SHTGC0
0x001B  SHTGD0
0x001D  SHTFA0
0x001F  SHTFB0
0x0021  MISGA0
0x0023  MISGB0
0x0025  MISFA0
0x0027  MISFB0
0x0029  MISFC0
0x002B  MISFD0
0x002D  PLSGA0
0x002F  PLSGB0
0x0031  PLSFA0
0x0033  PLSFB0
0x0035  SAWGA0
0x0037  SAWGB0
0x0039  SAWGC0
0x003B  SAWGD0
0x003D  CHGGA0
0x003F  CHGGB0
0x0041  CHGFA0
0x0043  CHGFB0
0x0045  BFGGA0
0x0047  BFGGB0
0x0049  BFGGC0
0x004B  BFGFA0
0x004D  BFGFB0
0x004F  PLSSA0
0x0051  PLSSB0

Then I could open the wad in Slade3 and view the Sega 32X Doom assets easily. This is very easy.

Here is a list of all offsets found in the Sega 32X ROM.

0x000D76 -- Code for main menu (after exiting "Options")
0x000E3C -- Code for transitioning from "Skill Level" to game
0x000EA0 -- Code for "Skill Level" selection
0x000E66 -- Code for "Level" selection
0x000EF8 -- Code for "Run", "Fire", and "Use" selections
0x000FB0 -- Code for "Controls" selection
0x001010 -- Code for "Options" selection
0x001110 -- Code for "Music" selection
0x001158 -- Code for "Sfx" selection
 
Skull menu X/Y offsets -- 0x000C7E
 
 
 
 
0x0367EC -- Pointer to WAD file (WAD file at 0x0BB000)
 
 
 
 
0x037EC8 -- Pointer to "SKY1" string (string at 0x037DCC)
0x037ECC -- Pointer to "SKY2" string (string at 0x037DD4)
0x037ED0 -- Pointer to "SKY3" string (string at 0x037DDC)
 
These need debugging to fully understand:
0x037E4C -- Changing this to 1 makes episode 1 display SKY3 (why?)
0x037E56 -- Changing this to 1 makes episode 2 display SKY3 (why?)
 
 
 
 
Big digit intervals on status bar -- 0x002102
 
 
 
 
DEMO1 starts at 0x04EA04
 
 
 
 
Maximum level number selection (15) is at 0x000E74
Minimum level number selection (1) is at 0x000E8E
 
0x00212A -- something with intermission screen... more research later
 
 
 
 
IDKFA cheat is the word at 0x00193A and 0x001940
IDDQD cheat is the word at 0x001958 and 0x00195E
 
 
 
 
0x002488 -- Code to play a song
 
"3EBC 00## 4EB9 00882488" -- instructions used to play music ##
 
 
 
 
0x0043C8 -- Z80 sound driver
 
0x005C16 -- List of voice pointers (each voice is 0x27 bytes)
	0x005E96 -- E1M1 bass
 
0x006EA2 -- Song pointers (starting at song #0; E1M1 is #1)
	data: xx (yyyy) -- xx tells how many yyyy's there are
	yyyy is a pointer to an FM track
 
	0x00776F -- E1M1 main melody
	0x007C9F -- E1M1 bass
	0x01083D -- E1M1 beat
 
	data: 00-5F -- Note
	data: 60-7F -- Controllers
		controller: 6B xx -- Play track xx
	data: 80-BF -- Note sustain time (lower = quicker)
	data: C0-FF -- Note interval (lower = quicker)
 
 
 
 
Music playlist -- 0x000C52
Intermission song -- 0x00124C
Title song -- 0x0013BA
Credits song -- 0x00144E
 
 
 
 
0X04E900 -- rndtable[] from "d_main.c"
 
 
 
 
Sound pointer table starts at 0x0B11D8 (all in big-endian)
 
Sound header for explosion starts at 0x069520
 
long --- length of sound in bytes
long --- ???
long --- ???
 
 
 
 
Music pointers, or something??? -- somewhere in 0x11040
 
 
 
 
Another set of sounds -- starts at 0x01142C (all in little-endian)
 
long --- location of sound file
short -- start of sound at location (useful to skip header maybe??)
short -- size of the sound in bytes
long --- 0x00000000 (doesn't seem to be used for anything)
 
first sound is menu open
second sound is menu close
 
 
 
 
Sound file names pointers -- 0x068E30
 
These point to the filenames of each sound. This table doesn't appear
to be used by the game. Pointers are big-endian, and the format goes
like this:
 
[ptr] [???] [???] [???] [???] [???] [???]
 
That's 7 long words. This table is in "sounds.c" in the Jag source

Download this utility here: https://securitronlinux.com/arma3/wad32x_100.zip.

This works very well to extract all Doom 32X assets.

This may also be used to repack a 32X Doom ROM with modified files. It could be possible to remake all the maps and make a 32X Doom game with different maps. But making maps that work reliably in 32X Doom would be challenging. A map like Okupluk would not work. But someone has ported Doom2 MAP01 to 32X Doom and it works.