User:Andlabs/Code Comparisons
Quad Challenge (MD/GEN) vs. other Now Production MD/GEN games
- Long overdue; I apologize (distractions + technical issues; now I don't have access to what I had previously written and the original disassemblies but I remember what I found and pieced them back together here). I could possibly try to spot any specific quirks if I do in-depth disassemblies (which probably won't help Rolling Thunder 3; see below).
Quad Challenge appears to be written (at least in part) by one of the programmers who worked on the other games.
JP ROMs (MegaTrax, Splatterhouse Part 2, Splatterhouse Part 3) were used for the analysis.
Main loop: most of what most other Genesis games do in the vertical interrupt is done in the main loop in all four games. The form is
- wait for vertical blank
- Game specific:
- Quad Challenge: prepare the horizontal interrupt's scroll table
- Splatterhouse 2: turn the display on or off depending on flags in RAM
- Splatterhouse 3:
- turn the display on or off depending on flags in RAM
- load some dynamic tiles (for instance, the tiles of doors opening when you clear a room) if requested
- all except Splatterhouse 3: update the palette
- Rolling Thunder 3: do something that involves loading the first two palette lines (not sure what)
- write the sprite table
- write the horizontal scroll table
- Rolling Thunder 3: prepare the horizontal interrupt's scroll table (see note below)
- update Plane A
- update Plane B
- update the window plane
- read controllers
- do one iteration of the current game mode code (Splatterhouse 3 does this conditionally depending on a flag in RAM)
- Game specific:
- Splatterhouse 3 does something here conditionally depending on a flag in RAM. I'm not entirely sure what, but it has to do with palettes...
- Rolling Thunder 3 does a bunch of stuff; not sure on everything but it does include sound effects(?)
- prepare the next sprite table (Splatterhouse 3 does this conditionally depending on a flag in RAM)
- Game specific:
- Splatterhouse 2 and Splatterhouse 3: turn the display on depending on a flag in RAM
- Rolling Thunder 3 does some more game-specific stuff
- all except Quad Challenge: reset the game depending on a flag in RAM
Quad Challenge is the most straightforward; the other games deviate in different ways.
Game modes and submodes are done by calling a function that takes the address of the next function from a list immediately after the function call. the submodes are the important part, as the follow a piece by piece system (one piece is run each main loop iteration) that is largely similar in form in the games except Rolling Thunder 3 (see below):
- call the fade out routine incrementally until we are fully faded out
- turn off the display and reset the VDP, silence audio, and clear some RAM
- load art assets, calculate what needs to be done to fade in, and turn the display on
- call the fade in routine incrementally until we are fully faded in
- (arbitrary number of steps) mode logic
(For Splatterhouse 2, the list of main game modes is a conventional list of jmp instruction; submodes are still done via the list of pointers.)
Debugging functions in Splatterhouse 2 hint at how these games handle art.
Game | load "Transfer" function | load "Palette Block" function | load plane mappings function | load plane tiles function |
---|---|---|---|---|
this loads tiles for some, if not most/all, sprites | this selects which palette lines to load; a block is a group of four indices into a master palette line database | Type A stores pointers to the mappings in RAM; Type B loads them directly | ||
MegaTrax | $146E0 | $132E | $A94 Type A (a Type B is present at $15BC, though it doesn't seem to be used by anything immediately noticeable...) | $14652 |
Splatterhouse Part 2 | $D90E | $2F59 | $12B0 Type B | $D880 |
Splatterhouse Part 3 | $7602 | $A9A0 (some screen modes use a function at $A9DC to load palette lines from a list) | $D6E Type A | $7554 |
Rolling Thunder 3 | (see below) | $1B70 (implementation differs from the others) (though it may not be the only way to regiser that a palette has been loaded?) | (see below) | (see below) |
Sprite mappings are stored in RAM and loaded in the main loop cycle.
Rolling Thunder 3 is the strangest of the four games. It looks like everything was redone... The function at $10BA does a lot of the data loading in many places of the game (for instance, the HUD and parts of the title screen) but not all... I'm not entirely sure where the other data functions are, if they are there (programming for screen modes is very different here). I might wind up looking further into this game later because of an unused region setting.
Horizontal interrupt routines are identical between these games (except Splatterhouse 3, which just returns) and unique among Genesis games, as far as a simple binary search shows. Rolling Thunder 3 doesn't use horizontal interrupts but does have the routine modified to fit the way that game accesses memory (indirectly through (a6) for RAM and (a5) for the VDP) (though accesses to the HV counter were "disabled" by changing 8(a5) to just 8). Splatterhouse Part 2 doesn't seem to load anything to its horizontal scroll table in an explicit function like Quad Challenge and Rolling Thunder 3 do...
Mystic Defender (MD/GEN) vs. Jewel Master (MD/GEN)
- I'm curious as to how much of Jewel Master is based on Mystic Defender given the similarities of the games; this will come eventually.
Others
- mostly from memory right now
Space Invaders 91 (MD/GEN) <-> Dahna Megami Tanjou (MD) (possibly <-> Darius II (MD/GEN))
unique as far as I know:
- After Burner II (MD/GEN) (should compare to X68000 version)
- Bahamut Senki (MD)
- Star Cruiser (MD - Arsys themselves?)
- Surging Aura (MD, though I think we know who was responsible?)
- Yuu Yuu Hakusho Gaiden (MD/GEN, not sure if this was made at Nextech or merely by one of the companies they bought)
- Ransei no Hasha (MD) (has credits in the attract opening; not sure if the MobyGames one [listed as Tenka Toitsu because it's a port of that PC-98 game... or is it really Tenka Toitsu II?] is a transcription?) ??
- Mega Bomberman (MD/GEN) ??
- Super Hydlide (MD/GEN)
the following Toaplan ports are probably built directly upon the arcade version source:
- Truxton
- Fire Shark
- Twin Hawk
- Hellfire
- Zero Wing
- Snow Bros.
not sure if that means Toaplan actually did the porting work or not
I still think James Buster Douglas Knockout Boxing was a Megasoft work but I would need to compare to Mahjong Cop Ryuu and Battle Golfer Yui to see to what extent
CareerSoft coding; should compare staff:
- Target Earth
- Langrisser/Warsong
- Gynoug/Wings of Wor (some graphics: Winds? forgot what the credits said)
- Vixen 357? coding is similar but I don't know if this was merely built on top of Langrisser or was one of their games
- Gleylancer
- Langrisser II
Wonder Boy III: Monster Lair (MD/GEN) indeed uses the SMPS/Z80 sound driver; not sure if Sansan does as well; not sure what Marble Madness JP uses
Some Pico games use a form of SMPS; I also have to check System C arcade games (Thunder Force AC seems to use a port of the Tecnosoft Z80 driver (or X68000 driver?))
Esco Boueki? (all arcade)
- Wrestle War (has a copyright string that says ESCO on it)
- Tetris/Flash Point/Bloxeed
- probably Crack Down? it may or may not hint as to what happened to them; will need to check again
Honoo no Toukyuuji Dodge Danpei (MD) <-> The Hybrid Front (MD) <-> Ristar (MD) - I'm sure the common programmer here is a Sega employee but definitely not a Sonic Team guy... also each game has different names (nickname [Hori Chan OR Otaku], different nickname [Bug-Bug OR [email protected] OR possibly others I haven't finished transcribing that part of the credits because the rest are all kanji], real name [Hiromasa Kaneko OR Shigeru Yoshida OR Naomi Hirai OR Takuya Matsumoto OR someone else the credits don't appear to list a Main Programmer or something like that... the planners?], respectively)