If you appreciate the work done within the wiki, please consider supporting The Cutting Room Floor on Patreon. Thanks for all your support!
This article has a talk page!

Dezaemon 3D

From The Cutting Room Floor
Jump to navigation Jump to search

Title Screen

Dezaemon 3D

Developer: Athena
Publisher: Athena
Platform: Nintendo 64
Released in JP: June 26, 1998


CodeIcon.png This game has unused code.
DevMessageIcon.png This game has a hidden developer message.
GraphicsIcon.png This game has unused graphics.


Dezaemon 3D is a shoot-'em-up game creator for the Nintendo 64. Unreleased 64DD expansion disks would've greatly increased the size, complexity, and number of games that could be created and saved.

64DD Unlocked Features

Unlike other 64DD expansions, Dezaemon disks contain only stage data and blank system files. When one of these system files is found on the disk drive the game switches into "disk" mode. This unlocks and expands several features:

  • The number of stages is expanded from 5 to 10.
  • All limits on user-edited images and models are removed.
  • The 8 user library models are saved to disk and can be copied between projects.
  • Limits on user-edited music is raised from 8 songs to 24.
  • Multiple games may be saved to disk.
  • User games saved to SRAM cannot be played directly; you must convert them to disk first.

Except for the disk bootstrap for when the disk is inserted without the cartridge, there is no executable data on the disk; it only contains resources in a proprietary file system format. Due to this formatting, it is not obvious if it would be compatible with RandNet. Other known RandNet titles use the MFS library, providing not only a standard file storage system but also encoding the game IDs each file is usable with.

Although new code would be difficult to add, you can overload the editor code blocks by placing same-name files on a disk. When searching for file names, the disk is always searched first. This would allow you to patch problem files or bugs in a disk release, like replacing the tutorials with ones set in DISK mode and using disk features. However, changing the editor runtime, opening, or static kernel files isn't practical. A file can only be replaced when it loads and all of these are first loaded before the disk is checked. Direct access files like audio banks and built-in libraries also can't be swapped this way.

Unused Disk Filelist Icons

While in "disk" mode, a file select screen appears when you open the editor. Disk entries will have an icon indicating if they are on the ROM or RAM portion of the disk. There are also two other possible icons left unused:

Dezaemon 3D RAM Icon.png

The cartridge RAM icon is never used or set. Due to space constraints, only one save file can be stored in SRAM, and this file is differently formatted than other stage data. There is a tool to convert these saves to disk format.

Dezaemon 3D ROM Icon.png

When initializing the five entries in the list, the icons are set to the cartridge ROM image, sizes to 500, and names to "AAAAAAAA". As the disk filelist is parsed, each of these is replaced with valid data. When setting the disk type, each entry that is not disk ROM is, by default, set to disk RAM instead. All invalid entries are then set to blanks using an ID of 5. There is no condition in which a cartridge ROM icon will remain set.

Filenames for the games on cartridge are not parsed during this menu's lookup, and most of the stage data remains packed in an archive. These files are loaded by direct access, so their filenames are not present in either file directory. Therefore, cartridge games would still never be listed due to missing filenames during lookup.

Dezaemon 3D EXE Icon.png

As an interesting point, the disk filelist menu has its own, unused copy of an icon for the EXE type, despite that it skips any of these detected files. There is an EXE filetype that will be listed in the Game file menu but it has its own local copy of the same icon.

Removed Cancel Disk Copy Prompt

The disk file select screen has an unused prompt to abort a copy operation.

Dezaemon 3D DDCODE Copy Cancel.png
"Are you sure you do not want to perform the copy?"

It is completely unlinked and no existing code reveals where it would interrupt during a copy operation. The most likely candidate is during a disk to disk copy as each file is copied independently with a disk swap between each.

Removed Unshared Player Data Prompt

An unlinked prompt exists that would allow each stage of a game to use different player data. These settings dictate not just player elements (their model, images for their weapons & on-screen interface, rumble settings, etc.) but also enemy gunfire, explosion animations, item settings, and so on. In the final game, these are split between two different blocks of common data.

Dezaemon 3D PLCODE Unused Prompt.png
"Are you sure you do not want to share this data between stages?"
"Display this WARNING message in the future? Y/N"

Within one of the tutorials it's pointed out that the stage-specific data is grouped in one box of buttons on the menu. Common data is grouped within another. However, the player data button is not grouped in either, floating between them.

Debugger Appreciation Message

A block of executable code not listed in the internal file lookup index is a warm thanks to the debugging staff brought in to help master the game.

Dezaemon 3D PUCODE.png
Thank you for your hard work during the debugging process.
Thanks to you, Dezaemon 3D was successfully mastered.
All of this was possible due to your company's cooperation.
I would like to take this opportunity to express my deepest gratitude to you all.
We all sincerely hope that the 64DD will be released as soon as possible.
(Source: whowasphone404)

This message returns to the game select menu when a button is pressed. The version code shown would be provided as an argument by whatever first loaded the file. If loaded like an EXE from the disk game select menu no version could be provided, so the most likely situation is that it was hardcoded in some way and removed before release.

Screenshot Feature

This feature was mentioned in the 205 randomly-selected pieces of secret advice.

なんと、画面キヤプチヤー機能があるらしいぞ。ほんとうなのか?!

By holding the L Button and pressing C-Up, you can capture part of the screen as an image. It's saved to the Paint Tool User Library. Yes! It is, in fact, useful for something! Controls:

Control Stick Move the capture region box.
Start Button Save the region to the User Library, closing the box.
B Button Cancel screenshot, closing the box.
C Buttons Resize the capture region box.

Screenshots can be taken of gameplay or most editor windows. Exceptions include the opening and Paint Tool. When first activated, the game pauses and a box the size of the User Library image (128x128) is drawn on-screen. Reposition this box with the Control Stick. The C Buttons will change the region's dimensions. If the selected region is smaller than 128 pixels it will be copied normally and the remaining space filled with alpha. If you stretch either side so it's larger than 128 pixels, that side of the image will be scaled-down to fit into this space. Press Start to copy the data or the B Button to cancel. No other buttons are read.

Once copied to the Paint Tool User Library, press the "Paste from Buffer" button (the up arrow) to copy the saved screenshot and paste it into the image band. Even in DISK mode, the Paint Tool User Library is not saved at power off.

Custom Editor Wallpaper

This feature was alluded to in the 205 randomly-selected pieces of secret advice.

なんと、力ベ紙エディット機能があるらしいぞ。ウソテクではないのか?!

A custom wallpaper can be selected from the images the user can edit. In ROM mode this is only the first 18 64x32 texture blocks in the Paint Tool. In DISK mode, all 80 wallpapers can be replaced without issue. The wallpaper is not applied to the opening, tutorial, game select, or 64DD file select screens. Also, this flag is used to change the base address (and therefore the hardware used!) for fileserver IO.

To use this, hold all of the C Buttons on controller 1 down when changing the wallpaper by clicking the left or right arrow. The selected 64x32 texture will be tiled on the screen. To revert the change, simply change the wallpaper number without holding the C Buttons.

Changes to image data directly affect the background. Editing the image or loading new data will both cause this. Images are counted top to bottom, left to right (1 & 2 in the first row, 3 & 4 in the second, etc.)

There are a few caveats to using this feature in ROM mode. When no disk is present, only the first 18 64x32 textures can be used for wallpapers. In other words, only the images with orange numbers you can draw yourself. Any image number past 18 will "cap" to 18.

The Hidden Sample Game RAMSIE

There is a tooltip that reveals the button code to unlock the hidden sample game, RAMSIE.

RAMSIE unlock code tooltip.png

RAMSIE is the real-world reward for decoding the silly afterward tutorial where Kenta was supposed to receive a secret raffle prize in a toilet. There are additional hints given for finding it in the secret appendix--if you're willing to read through all 205 randomly-selected bits of advice. The first two are less than useful.

当選通知の受け取り場所に書いてあるのは、どこかの地図らしいぞ!
当選通知の受け取り場所を読むには、仏と数字に注目するといいらしいぞ!

The last secret bit of advice is quite helpful:

当選通知の内容がわからないうちは、へルプをオフにするのはやめた方がいいぞ

It's best not to turn off the help tooltip function because that's how they reveal the button code. The map itself reads:

受け取り場所:走仏上下止
       1234回
       5678逃
        |  逃
      48|  蛇
        ↓  突
    トイレのココ

走仏上下止, the column Buddha is in, indicates the window you need to be on to read the message. It refers to the "basic movement" window of the "build tools/enemy editor/motion" menu. The icon for "fixed movement" looks like your typical sitting Buddha, sans blessing. It also acts as a guidepost; the numbers and message are all in this column.

トイレのココ, "in the toilet", is not the only tutorial to mention toilets. The clue is in the tutorial covering the main menu. In it Capt. Deza changes the background to #57 which Kenta calls "blue toilet tiles"--the first of these types of tiles in the background image list (aka toilet #1).

Once you know the correct page and wallpaper, the map is very easy to follow. The "48 snakes" (蛇) line refers to the number of pixels between the speed buttons and the hidden message, roughly translating to the same number of taps of the down arrow. Each line of text on the map denotes 16 pixels. Using "snakes" is a bit of a red herring though; they're mentioned several times in the Music Tool tutorials. Shown on the map is the number pad for the speed setting. The arrow is drawn down through the "2" and "6", leading 3 rows down (48 pixels) to the hidden message.

突 can mean poke or plunge, and in this case refers to pointing with the cursor.

In short, to show the tooltip you must set the editor's wallpaper to #57. Open the Build Tools, select the enemy editor, select "motion", then "basic motion". Under these exact conditions it replaces the pointers to the tooltips in the main enemy editor window behind it with a set that maps a tooltip to an 8x8 invisible square at (54, 208) to (62, 216).

To view it, line up the index finger of your cursor with the center of the numbers; the easiest line to follow is the point where the hands of the "fixed motion" icon meet (the sitting "Buddha"). Slowly move straight down to the bottom of the screen, easiest with the +pad. ~80% of the way down--48 pixels below the number pad--the hand will point, revealing the code. To unlock the game, go to the Game Select menu, move your cursor over the dark cartridge image, and enter the button code.

EXE Program Extensions

Dezaemon 3D EXE Icon.png

When a 64DD is used, one of the filetypes that will appear in the game select menu is a program extension, or plugin. These files have an EXE extension and are, in fact, executable code. They work like any of the editor windows and use the editor mode runtime, not game runtime. Like the editors they execute from 802400B0 and accept two arguments.

External Fileserver IO

The game has a PC fileserver function! When activated, the game will request or write files to a slaved PC. To turn on the debugger, enter the Build Menu and put the cursor in the upper-right corner. Enter this button sequence to toggle the debugger on & off:

C-Up, C-Down, C-Up, C-Down, C-Left, C-Right, C-Left, C-Right

A sound will chime and the game will halt until communication with the attached device is established.

Interface Details

There are two interfaces, one tied to hardware address 11000000 from its 64DD-only days, and a second tied to a "fourth" SRAM bank address at 080C0000 when the game was converted to cartridge. The debugger address is determined by 801FF43D, byte 0xD of SRAM block 11, set when a player applies a custom editor wallpaper. By default the value is 0, selecting 11000000. To set it to 1 and use 080C0000, hold all the C Buttons down when changing the editor's wallpaper. To revert it, change the wallpaper again without holding the buttons. The original hardware is unknown, but likely just a generic UART.

080C0000 / 11000000	value f/ PC -> N64
080C0004 / 11000004	value f/ N64 -> PC
080C0008 / 11000008	status, likely tied to the microcontroller's transmit/receive interrupts; 1 when PC posts a byte, cleared either on read or N64 transmit depending how they rigged it.

Communication

One byte is interchanged at a time using this algo:

while not @base+8 & 1:  pass
input = @base+0
base+4 = output << 16
return input & 0xFF

To initialize the fileserver, the console sends 0x20 until it receives 0x10, then sends 0x10 expecting 0x20. This will loop until it completes, so do not turn on the debugger without an attached device!

Read & write requests are sent using two packets. The console will send a request packet first, always 0x5C bytes:

0x0	4	type (1:[unused], 2:read f/ debugger, 3:write to debugger)
0x4	4	length
0x8	4	0
0xC	0x50	filename

This is followed by a read or write for the given length in the request packet.

Controls & Features

General Menu Changes:

  • Certain global hotkeys, notably Start, will no longer work.
  • In ROM mode, local saves are ignored. Data will be saved and loaded f/ a 0x18000 byte file named "sram" when a disk isn't present. The game will halt until a file is provided! DISK mode still uses local saves.
  • Pressing the L Button saves a screenshot named "DEZA%3.3d.BMP". Note this is different from the built-in screenshot feature. It creates a bitmap from the framebuffer.
  • When switching menus (or any other file load event), hold the R Button to read "tut.bin" (0x10000) f/ the debugger. This is a tutorial or game replay and will execute as soon as the file finishes loading.

In tutorials (TUCODE.SYS):

  • Replays (i.e.: tutorials) will use "key%3.3d.bin" instead of the file on cartridge.
  • Enables tutorial script command 19, used to record controller input. This is how the tutorials were recorded. Once recorded, replace them with playback command 8 and the correct record index from STR.SYS. Controls are as follows:
In standby:
+ Left STOP: Press to exit recording mode and continue the tutorial.
+ Right RECORD: Moves the cursor to the original start position and starts recording input.
+ Up PLAY: Read "key%3.3d.bin" f/ debugger (0x1000); replays input from the original start position.
Recording:
+ Down PAUSE: Stops recording and writes "key%3.3d.bin" to debugger. File is automatically flushed when size exceeded. Returns to standby but you will be able to move the cursor to i.e.: correct menu state before re-recording.

In the Model Editor (MDCODE.SYS):

In the root menu:
Hold R, press C-Up deletes all untextured faces
Hold Z, press Start write model as "test.de2" (0xC20)
Press Start read model "test.de2" (0xC20)
In the paint submenu:
Hold R, press C-Up read "bg.img" (0x8000), replacing eight image blocks
Hold Z, press Start write "test.img" (0x1000)
Press Start read "test.img" (0x1000), replacing one texture block (64x32)

In the opening (OPCODE.SYS):

This including the Athena logo, 64DD test, warning messages, and title screen.

R Button replace BG image (water effect) with "op.img"
C Buttons rotate BG image
+ Up/Down scale BG image

In the Build Menu (BMCODE.SYS):

The files written are the complete set of this game's common files, plus the ones specific to the current stage. They will have the extensions GAM, CGR, CMD, CBL, ULB, MUS, *GR, *MD, and *BL. On this menu, you can place your cursor in the upper-right corner of the screen and enter the fileserver enable code to toggle it on and off.

Hold Start, press C-Left write cur. game files to debugger
Hold Start, press C-Right read game files f/ debugger

In the Music Editor (MUCODE.SYS):

Hold Start, press + Up write current song as "BGM_**.BIN" (0x2C9A)
Hold Start, press + Down read and replace current song with "BGM_**.BIN" (0x2C9A)
Hold Start, press L In music track editor, rolls loudness of instruments up one level, wrapping around, and copies cur. audio (802BA1C0) to audio buffer.

In Game Select (GSCODE.SYS):

Hold Start, press C-Up read & execute filename.EXE f/ debugger

filename.EXE works the same as the EXE files on disk: it's a "program extension", aka "plugin" or "zero-day hijack". The hiccup here is that an entry for the file must already be added to the filetable. The file length is read from the entry and the N64 will only read up to that many bytes from PC after posting the request. "SAMPLE01.EXE" is the default name until a game is loaded but from the PC's perspective the filename isn't important. The user can just as easily rename a file and send it. You don't need a 64DD to run the debugger version either, it's available via button code.

Developer High Scores

The sample and user games use a separate high score file. Disk games, however, encode their scores in their GAM file. Each sample game has its own GAM file and the copies in the ROM still have the scores set during development.

Default Filenames

In the 64DD File Select menu, if you hold B + Z + L + R when clicking "New File" one of several default filenames will be used. These increment, but note some names are nothing but spaces. These only apply to a new file, not renames or file copies.

  1. "SAMPLE01"
  2. "SAMPLE02"
  3. "SAMPLE03"
  4. "SAMPLE04"
  5. "SAMPLE05"
  6. "ATHENA "
  7. "DEZAEMON"
  8. "KIWAME " (As in "Pro Mahjong Kiwame".)
  9. "PERON " (This is the name of their green rabbit mascot.)
  10. "OWARI "
  11. " "
  12. " "
  13. " "
  14. " "

After #14, if you hold B + Z + L when clicking "New File" (no R Button) these strings will be used. Otherwise, the list wraps back around to the top.

  1. " "
  2. "MOCHA "
  3. "HOTEHOTE"
  4. "KUMACHAN"
  5. "RIKACHAN"
  6. "GANCHAN "
  7. "3JIKAI "
  8. "MEMBER "
  9. "98▼2▼10 "
  10. "SHIGE "
  11. "TOKKO "
  12. "THANKYOU"

There are five copies of the block of data containing these strings. Although all of the data in the blocks are used, only one type of data is read from each block. For instance, only the motion data is read from block 3 and only these strings are read from block 4.