Bubsy II

From vgmrips
Bubsy II
File:BubsyIIGenesis.png
Do you believe in miracles?!
Developer Accolade
Publisher Accolade, Sega
Composer Chip Harris
System Sega Mega Drive / Genesis
Sound Chips YM2612
Release date 1994-10-15 (U)
VGM pack page
Discuss this at forum


Bubsy II is a platformer created by Accolade and released on the Sega Genesis and SNES in 1994. (It also had a dreadful Game Boy port that nobody liked.) It's the sequel of Bubsy in Claws Encounters of the Furred Kind.

This game uses a custom music engine by former Accolade employee Russell Shiffer. The music speeds up and slows to normal based on Bubsy's velocity. In non-mini game levels, tracks change at semi-random: some tend to or only play in certain spots, while worlds without flying portions shift to "enemies onscreen" music the second that event occurs, or sometimes when the End of Level Marker is onscreen but untouched. No looping songs have intros.

Aside from enemies being or not being present, the music playing at the start of a level is also randomized (based on situation as described above; in Egypt, starting in front of a door plays only the last Egypt bank's one song). Starting from an Exclamation Point after death may play more variants than the level start gives, but I can't remember if this is the case.

All tracks work with vgm_sptd (given a large-enough silence buffer), and loopers uniformly give !s in vgmlpfnd with long-enough recordings. However, some tracks may give "excessive" ! loops.

The music pointer list was found by fever500, and all further research based thereof + this article compiled by (Jazz) Jackalope.

Song Pointers

The best way to record is a multi-step process:

  1. Replace the Amazatorium Hub's Bank Address with the one holding the subsong you want.
  2. Change the numbers in its last slot (FF FF, when you first start) to match the slot of said subsong.
  3. (Optional) When you start the game to reach the hub, create a savestate before the "Next Up..." text leaves. This way, when you reload the ROM to record other tracks, you can jump there instantly.
  4. Start recording at least a second before the music starts.

Recording from the Hub should avoid issues that come with the sound engine's use in levels.

Pointer table (leading 00s omitted from Pointer ID and Bank Address; subsongs given as "Nibbles")
Pointer ID Bank's ROM Address (Probably) Slot #0 Slot #1 Slot #2 Slot #3 Slot #4 Slot #5 (Default?) Usage
310E 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 Silence
311E 0D 24 1A FF FF FF FF FF FF FF FF FF FF FF FF Title Screen, End of Game (Mini)
312E 0D 5A 46 00 00 FF FF FF FF FF FF FF FF FF FF Amazatorium Hub
313E 0C 14 12 00 00 FF FF FF FF FF FF FF FF FF FF Egypt World (Hub)
314E 0C 81 90 00 00 FF FF FF FF FF FF FF FF FF FF Music World (Hub)
315E 0B AC 6C 00 00 FF FF FF FF FF FF FF FF FF FF Aerial World (Hub)
316E 0D 1B 1C 00 00 FF FF FF FF FF FF FF FF FF FF Space World (Hub)
317E 0C 88 06 00 00 FF FF FF FF FF FF FF FF FF FF Medieval World (Hub)
318E 0C 19 98 00 00 FF FD FF FD FF FF FF FF FF FF Egypt World (1)
319E 0C 26 D0 00 00 FF F9 FF F9 FF FF FF FF FF FF Egypt World (2)
31AE 0C 41 7C 00 00 FF E7 FF E7 FF FF FF FF FF FF Egypt World (3)
31BE 0C 4E A8 00 00 FF FF FF FF FF FF FF FF FF FF Egypt World (4)
31CE 0C 1F 7C 00 00 FF FF FF FF FF FF FF FF FF FF Enemies in Egypt World (1)
31DE 0C 47 CC 00 00 FF FF FF FF FF FF FF FF FF FF Enemies in Egypt World (2)
31EE 0C 2E 1A 00 00 FF FF FF FF FF FF FF FF FF FF Enemies in Egypt World (3), Waterslides
31FE 0C 55 44 00 00 FF FF FF FF FF FF FF FF FF FF Egypt World (5)
320E 0C 95 62 00 00 00 0F 00 0F 00 33 0C 23 F0 03 Music World (1)
321E 0C AC B0 00 00 FF FF 00 3F 04 3F 0C 3F 1C 3F Music World (2)
322E 0C CF 5C 00 00 FF FF 04 3C 04 3D 0C 3F 7C 3F Music World (3)
323E 0C B3 AE 00 00 FF FF 04 30 04 33 78 33 60 1F Music World (4)
324E 0C A2 E0 00 00 FF FF 00 07 48 3A 0C 3A 68 33 Enemies in Music World (1)
325E 0C BA 88 00 00 FF FF 04 3F 0C 1F 30 1D 74 3F Enemies in Music World (2)
326E 0B B2 54 00 00 FF DF FF DF FF DF FF F7 FF F7 Aerial World (1)
327E 0B BD 56 00 00 FF EF FF EF FF EF FF FF FF FF Aerial World (2)
328E 0D 50 1E 00 00 7F FF 7F FF 7F FF 7F FF 7F FF Aerial World (3)
329E 0B C3 9E 00 00 FF FF FF FF FF FF FF FF FF FF Aerial World (4)
32AE 0C 34 CC 00 32 FF FF FF FF FF FF FF FF FF FF Frogapult
32BE 0D 44 4E FF FF FF FF FF FF FF FF FF FF FF FF Frog Launch, Caught in Whirlpool
32CE 0B C2 16 FF FF FF FF FF FF FF FF FF FF FF FF Frog Fall
32DE 0C FC 98 FF FF FF FF FF FF FF FF FF FF FF FF Frog Struck Target
32EE 0B CA EA 00 50 FF FF FF FF FF FF FF FF FF FF Armadillo Drop
32FE 0C 8C 68 00 00 BF FF BF FF BF FF FF FF FF FF Space World (1)
330E 0C D5 E8 00 00 FF EF FF EF FF EF FF FF FF FF Space World (2)
331E 0C F2 74 00 00 FF FC FF FC FF FC FF FF FF FF Space World (3)
332E 0C E0 18 00 00 FF FD FF FD FF FD FF FF FF FF Space World (4)
333E 0C 74 E2 00 00 FF F3 FF F3 FF F3 FF AF FF AF Medieval World (1)
334E 0C 58 A8 00 00 FF FD FF FD FF FD FB EF FB EF Medieval World (2)
335E 0C 08 E2 00 00 FF FF FF FF FF FF FF DF FF DF Medieval World (3)
336E 0C 7A 2C 00 00 FF FF FF FF FF FF FF FE FF FE Medieval World (4)
337E 0C 5E 9A 00 00 FF FF FF FF FF FF FF FF FF FF Enemies in Medieval World (1)
338E 0C 66 36 00 00 FF FF FF FF FF FF FF FF FF FF Enemies in Medieval World (2)
339E 0B E5 06 FF FF FF FF FF FF FF FF FF FF FF FF Boss (1st Floor of Grand Tour)
33AE 0B F8 3A FF FF FF FF FF FF FF FF FF FF FF FF Boss (2nd Floor of Grand Tour)
33BE 0C BF B8 FF FF FF FF FF FF FF FF FF FF FF FF Boss (Oinker P. Hamm)
33CE 0D 45 D6 FF FF FF FF FF FF FF FF FF FF FF FF Level Complete, End of Game (Points)
33DE 0C 12 DC FF FF FF FF FF FF FF FF FF FF FF FF Death
33EE 0C FC C4 00 32 FF FF FF FF FF FF FF FF FF FF Liquid Lunacy
33FE 0D 4A FA FF FF FF FF FF FF FF FF FF FF FF FF EOL Score Tally, Time Trophy Tally, End of Game (Time)

While "available subsongs" may not be the only thing indicated by the slots, all known subsongs played in the game were found using these numbers. I assume based on the Amazatorium Hub that the final slot controls which one is played or indicates a default.

You can use other values than those listed, but the results aren't assumed to be intended by the programmers. There'll also be some overlap among values. Consider the experiment below:

Subject: Space (3)
last FF to:
 00: most instruments vanish
 F8: Variant "-b" (melody instruments only)
 F9: Ticking instrument gone, but drums remain
 FA: Ticking instrument remains, but drums gone
 FB: Same as FF ("-a", all instruments)
 FC: Same as F8
 FD: Same as F9
 FE: Same as FA

List of Possible Pointer References

Though not seemingly useful for VGM recording (impossible to select subsongs?), some of the pointers above have possible references throughout the ROM. Only the two uses of Title Screen and the Oinker boss are confirmed. Many song banks are unreferenced (including the Hub), and thus not included below.

Bank Pointer References in ROM
Pointer Referenced at (0x)
00310E A629, 1FD1B2
00311E 7E37 (Title Screen), 1E229 (End of Game (Mini))
00313E 19D1BD
00314E 4D5C, 1DC9A, 1DDC2
00318E 14B8ED
00320E 1E8C38, 1E8C44, 1E9AD8, 1EB0DA, 1EB0FE, 1F419A, 1F41B2, 1F41CA, 1FA0D4, 1FA128, 1FAC74, 1FB934, 1FD182
00321E 1E90AC
00322E B303
00324E 1D67A, 1D6C0
0032BE 53B1
0032CE C68D, 15123F, 152137
0032DE C31F
00333E 7B83C, 93605
00334E 5969B, 61F95, 62739, 7C418, 7E850
0033BE A5E1 (Oinker Boss)
0033CE A7C5, 1BD2F, 1CA19, 1DE49, 1E053
0033DE 4BFF
0033EE 8CFAB, 8D0B3
0033FE 1BE41, 1C265, 1D8B7, 1DAEF

Using the Title Screen pointer, trying to change subsongs by changing the numbers after the reference only makes the game reset continually after the Accolade logo. This can be bypassed with savestates.

Attempting the same with End of Game (Mini), changing 48 right after it to 91, made a helicopter noise play. 67 and FC reset to the SEGA logo without displaying End of Game.

Play Music While Paused code

Also useless for recording for reasons explained below; included for completeness. I discovered this trick when first trying the rip over a decade ago.

The PAR code is FFFD32:0000; to use with BlastEm's debugger, do set [$FFFD32] 0. Keep in mind that:

  • The PAR code interferes with music changes, so the beginnings of songs will be cut off sometimes.
  • Some sounds may be cut off when you pause, but they'll come back.
  • Aerial's awful since you have to smack into obstacles and time your pausing to record its 6 variants at a neutral tempo.
  • If a new song has already been queued, it'll switch even after you pause.
  • Most of the time, vgm_spts or vgm_trim result in cut notes or even full silence for a recording not from silence. Yes, even if you trim/split inside a bunch of Key Off commands. The fixes are to
    • Use -state with the tools
    • Time the start of recordings at the moment the song loops (usually inside those Key Off commands), as none of the looping tracks start with intros.
    • Don't even try it, and use the more SAN-friendly hex-edit-the-ROM method instead.

Issues with Certain Songs Played In-Game?

  • Some of the Music and Egypt tracks, before the timer begins moving, have skips in them shortly after the loop
  • Some of the area Hub music such as Aerial have dropped notes at the beginning when you return to the hub from the level.

These aren't present when recording the tracks by changing the Amazatorium Hub bank, so are probably either quirks of said funky music engine or issues with BlastEm's emulation of this wacky music engine.

Article license

The contents of this article are given to you under the terms of the Open Works License. It's similar to the MIT/X11 and 2-Clause BSD licenses, except that it applies to non-fiction and creative works too. This means you may freely expand on and/or repost the work on this page, even re-license it - but must credit me as the original source when you do. (I'd also like it if you credited fever500 too.)

(The license site recommends reposting the license along with the credit for full compliance. I understand if you just want to link to it instead. If that makes you worry, OWL has a "detachable" version which explicitly says you can do that.//

(If all this is still daunting/confusing, then just remember this license is mostly a formal way of asking for credit, for those who prefer that legal clarity first. If you've given credit for the work I did (and which fever500 helped with), you're in the clear with me.)