Ahaha, I was right! I disassembled the driver (SMPS 68k Type 2. Code starts at 0x26F98), and it does use FM drums! It probably uses the ADPCM chip for SFX, since the original DAC SFX code is replaced with something new. There are even two unused drums that aren't listed in the table! Edit: Here's the disasm, if you're interested.
Kind of funny the special stage in Sonic 3 has you turn blue spheres red in a box to get rid of them. Wonder if that idea came from this game while they were picking music?
As reported on Twitter: Track 83 was reused in Chou Kyuukai Miracle Nine as the "Final Results" music. Naofumi Hataya was the composer for that game.
Track 85 and 86 were used in Sega Channel (Japan) as well. https://www.youtube.com/watch?v=T6BFz8WUqas https://www.youtube.com/watch?v=lWEU6lujzOk
Just a heads up that these ROMs are not the actual dumps from the original PCB. They were modified so that they could work in a multi-game board, then re-extracted to make them standalone again, so there's a chance that there's a few differences from the original code in here.
Wow, SEGA really hates trashing music, doesn't it? Also... if the red hedgehog is called Ketchup, and the yellow one is Mustard.... whay about calling the new, white one Mayo? :v: There are advances on porting the game to Mega Drive, Dustin M.O'Dell has been posting his research and advances on porting it into Megadrive/genesis on twitter. It also seems like this game started its life as a Mega Drive game, then ported to C2? It does not only have a Megadrive styled header, but also has the TMSS code, and seems like it it was written over megadrive code https://twitter.com/DustinOfcYT/status/1070468227333902336 https://twitter.com/DustinOfcYT/status/1070476222713319424 This is great. The game is full of surprises!
Once again, massive things happen when I disappear for a couple of days. This time something positive, which is nice Great to see this has seen the light of day, drama regarding the fallout can be dealt with later. 8B was quite the surprise too!
yoooo the special stage theme!! There are some differences. 8b's backing percussion has a different structure (intense emphasis on beats 2 and 4, which makes it feel plodding...), its snare is very loud, and its hi-hats are much quieter. The bridge before the track loops feels much sloppier than the Sonic 3 version in a way I can't place, though it might be the percussion's fault there. The waveforms are really, really different despite sounding similar enough that you can (mostly) layer the two versions together without it being an unholy mess, though how much of that is due to the Sonic 3 rip I don't know. All in all, I don't think the Sonic 3 version is a simple "copy-paste", it got polished up a bit before being reused.
The percussion's the exact same (bar everything being FM). The only differences in the song are some smpsModSet commands being shuffled around in the FM melody tracks. Anyway, the reason the song doesn't work properly in Sonic 1 is because S1's driver moved the smpsReturn command from $F2 to something else, while this game's driver kept it in the normal slot. Here's the song in SMPS2ASM format: Spoiler Code (ASM): SSBros_S3SpecialS_Header: smpsHeaderStartSong 1, 1 smpsHeaderVoice SSBros_S3SpecialS_Voices smpsHeaderChan $06, $03 smpsHeaderTempo $01, $06 smpsHeaderDAC SSBros_S3SpecialS_DAC, $00, $06 smpsHeaderFM SSBros_S3SpecialS_FM1, $00, $1A smpsHeaderFM SSBros_S3SpecialS_FM2, $00, $12 smpsHeaderFM SSBros_S3SpecialS_FM3, $00, $1A smpsHeaderFM SSBros_S3SpecialS_FM4, $00, $1A smpsHeaderFM SSBros_S3SpecialS_FM5, $00, $22 smpsHeaderPSG SSBros_S3SpecialS_PSG1, $00, $06, $00, fTone_03 smpsHeaderPSG SSBros_S3SpecialS_PSG2, $00, $06, $00, fTone_03 smpsHeaderPSG SSBros_S3SpecialS_PSG3, $00, $05, $00, fTone_02 ; FM1 Data SSBros_S3SpecialS_FM1: smpsSetvoice $01 dc.b nE5, $06, nRst, $0C, nE4, $06, nB3, nRst, nE4, nRst, nFs4, nRst dc.b nAb4, nRst, nB4, nRst, nD5, nRst, nE5, nE5, nRst, nE5, nE5, nRst dc.b nE5, nE5, nRst, nD5, nRst, nD5, nD5, $0C, nE5, nRst, $60 SSBros_S3SpecialS_Jump03: smpsSetvoice $03 smpsCall SSBros_S3SpecialS_Call00 smpsCall SSBros_S3SpecialS_Call01 smpsCall SSBros_S3SpecialS_Call02 dc.b nE6 smpsAlterVol $06 smpsSetvoice $04 smpsModSet $01, $01, $01, $04 dc.b nA6, $66, nA5, $06, nA6, nA5, nA6, $0C smpsCall SSBros_S3SpecialS_Call03 dc.b nEb4 smpsAlterVol $FA smpsModSet $00, $00, $00, $00 smpsSetTempoMod $04 ; In SegaSonic Bros.' driver, this command *adds* to the current tempo, speeding the song up smpsJump SSBros_S3SpecialS_Jump03 SSBros_S3SpecialS_Call00: dc.b nA5, $0C, nE5, $06, nA5, nRst, nB5, nRst, nC6, $02, smpsNoAttack, nCs6 dc.b smpsNoAttack, nD6, $08, nCs6, $06, nB5, nRst, nA5, $0C, nB5, nA5, $0C dc.b nE5, $06, nA5, nRst, nB5, nRst, nC6, $02, smpsNoAttack, nCs6, smpsNoAttack, nD6 dc.b $08, nCs6, $06, nB5, nRst, nA5, $18 smpsLoop $00, $02, SSBros_S3SpecialS_Call00 dc.b nFs5, $12, nAb5, nA5, $0C, nBb5, $03, smpsNoAttack, nB5, $09, nA5, $06 dc.b nAb5, nRst, nFs5, $12, nE5, $12, nB5, nA5, $24, nE5, $18, nFs5 dc.b $12, nAb5, nA5, $0C, nAb5, $12, nA5, nB5, $0C, nCs6, $18, nB5 dc.b nCs6, nE6 smpsReturn SSBros_S3SpecialS_Call01: dc.b nFs6, $12, nFs6, nE6, $0C, nFs6, $12, nFs6, nE6, $06, nFs6, nA6 dc.b $12, nAb6, nE6, $0C, nCs6, $24, nD6, $06, nE6, nFs6, $12, nFs6 dc.b nE6, $0C, nFs6, $12, nFs6, nE6, $06, nFs6, nA6, $12, nAb6, nCs7 dc.b $3C, nFs6, $12, nFs6, nE6, $0C, nFs6, $12, nFs6, nE6, $06, nFs6 dc.b nA6, $12, nAb6, nE6, $0C, nCs6, $24, nD6, $06, nE6, nFs6, $12 dc.b nFs6, nE6, $0C, nFs6, $12, nFs6, nE6, $06, nFs6, nA6, $12, nAb6 dc.b nCs7, $24, nAb6, $18, nFs6, $24, $06, nAb6, nA6, $12, nAb6, nE6 dc.b $0C, nA6, $60 smpsReturn SSBros_S3SpecialS_Call02: dc.b nFs6, $24, $06, $06, $12, nE6, nD6, $0C, nE6, $60, nD6, $24 dc.b $06, $06, $12, nCs6, nB5, $0C, nCs6, $48, nB5, $18, nA5, $24 dc.b $06, $06, $12, nB5, nCs6, $0C SSBros_S3SpecialS_Loop22: dc.b nA5, $30, $12, nB5, nCs6, $0C smpsLoop $00, $02, SSBros_S3SpecialS_Loop22 dc.b nCs6, $18, nB5, nCs6 smpsReturn SSBros_S3SpecialS_Call03: dc.b nG6, $06, nE6, nD6, $0C, nD6, $02, nE6, $04, nD6, $0C, nE6 dc.b nD6, nD5, $06, nB4, nA4, nG4, nE4, nD4, nE4, nG4, nE4, nG4 dc.b nA4, nB4, nA4, nB4, nD5, nD5, $03, nE5, $09, nD5, $0C, nB4 dc.b $06, nA4, nB4, nD5, nE5, nD5, nE5, nFs5, nG5, nA5, nB5, nCs6 dc.b nD6, nCs6, nB5, nG6, nFs6, nE6, nFs6, nE6, nD6, nFs6, nE6, nD6 dc.b nCs6, $04, nD6, nCs6, nB5, $06, nA5, nFs5, nE5, nD5, nCs5, $04 dc.b nD5, $06, nCs5, $08, nB4, $06, nA4, nG4, $0C, nA4, $06, nG4 dc.b $0C, nFs4, nE4, nFs4, $06, nD4, nE4, nFs4, nG4, nA4, nB4, nG4 dc.b nA4, nCs5, nD5, nE5, nFs5, nG5, nFs5, nG5, $03, nA5, $09, nG5 dc.b $06, nE5, $0C, nD5, $06, nRst, nE5, nRst, nD5, nA4, nG4, smpsNoAttack dc.b $0C, nFs4, $03, nF4, nE4 smpsReturn ; FM2 Data SSBros_S3SpecialS_FM2: smpsSetvoice $00 dc.b nRst, $12, nA2, $06, nE2, nRst, nA2, nRst, nB2, nRst, nCs3, nRst dc.b nE2, nRst, nFs2, nRst, nA2, nA2, nE3, nA3, nA3, nRst, nA3, nA3 dc.b nRst, nG3, nRst, nG3, nG2, nD3, nG3, $0C, nRst, $60 SSBros_S3SpecialS_Loop0D: dc.b nA2, $12, nE3, nA2, $0C, nG2, $12, nD3, nG2, $0C smpsLoop $00, $04, SSBros_S3SpecialS_Loop0D SSBros_S3SpecialS_Loop0E: dc.b nFs2, $12, nCs3, nFs2, $0C, nB2, $12, nFs2, nB2, $0C, nE2, $12 dc.b nB2, nE2, $0C, nA2, $12, nE3, nA2, $0C smpsLoop $00, $02, SSBros_S3SpecialS_Loop0E SSBros_S3SpecialS_Loop0F: dc.b nD2, $12, nA2, nD3, $0C, nD2, $12, nA2, nD2, $0C, nA2, $12 dc.b nA2, $06, nRst, $0C, nE2, nA2, $18, nE2 smpsLoop $00, $04, SSBros_S3SpecialS_Loop0F dc.b nD2, $12, nA2, nD2, $0C, nE2, $12, nAb2, nB2, $0C, nA2, $06 dc.b nA2, nE3, nA3, nA3, nRst, nA3, nA3, nRst, nG3, nRst, nG3, nG2 dc.b nD3, nG3, $0C SSBros_S3SpecialS_Loop10: dc.b nD2, $12, nA2, $06, nRst, $0C, nD3, $3C, nA2, $12, nA2, $06 dc.b nRst, $0C, nA2, $3C smpsLoop $00, $02, SSBros_S3SpecialS_Loop10 dc.b nFs2, $12, nA2, $06, nRst, $0C, nCs3, $3C, nF2, $12, nA2, $06 dc.b nRst, $0C, nCs3, $3C, nE2, $12, nA2, $06, nRst, $0C, nCs3, $3C dc.b nA2, $18, nAb2, nFs2, nE2 SSBros_S3SpecialS_Loop11: dc.b nA2, $12, nE3, nA2, $0C, nG2, $12, nD3, nG2, $0C smpsLoop $00, $07, SSBros_S3SpecialS_Loop11 dc.b nA2, $12, nE3, nA2, $0C, nG2, $06, $0C, nG3, $12, nA3, $0C smpsJump SSBros_S3SpecialS_Loop0D ; FM3 Data SSBros_S3SpecialS_FM3: smpsSetvoice $01 smpsPan panRight, $00 dc.b nA4, $06, nRst, $0C, nA3, $06, nE3, nRst, nA3, nRst, nB3, nRst dc.b nCs4, nRst, nE4, nRst, nG4, nRst, nA4, nA4, nRst, nA4, nA4, nRst dc.b nA4, nA4, nRst, nG4, nRst, nG4, nG4, $0C, nA4, nRst, $60 SSBros_S3SpecialS_Jump02: smpsSetvoice $02 SSBros_S3SpecialS_Loop09: dc.b nCs4, $0C, nA3, $06, nE3, nRst, nA3, nRst, nB3, $0C, nG3, $06 dc.b nG3, nG3, $0C, nD3, $06, nB3, nB3 smpsLoop $00, $04, SSBros_S3SpecialS_Loop09 SSBros_S3SpecialS_Loop0A: dc.b nA3, $0C, nFs3, $06, nA3, nRst, nFs3, nRst, nB3, $0C, nD3, $06 dc.b nD3, nFs3, $0C, nD3, $06, nFs3, nB3, nE3, $0C, nB2, $06, nB2 dc.b nRst, nE3, nRst, nA3, $0C, nE3, $06, nE3, nA3, $0C, nA2, $06 dc.b nE3, nCs3 smpsLoop $00, $02, SSBros_S3SpecialS_Loop0A SSBros_S3SpecialS_Loop0B: dc.b nA3, $12, $06, nRst, $18 smpsLoop $00, $02, SSBros_S3SpecialS_Loop0B dc.b nCs4, $12, $06, nRst, $0C, nA3, $3C smpsLoop $01, $04, SSBros_S3SpecialS_Loop0B dc.b nA3, $30, nB3, $12, nB3, nB3, $0C smpsSetvoice $01 dc.b nA4, $06, nA4, nRst, nA4, nA4, nRst, nA4, nA4, nRst, nG4, nRst dc.b nG4, nG4, $0C, nA4 smpsSetvoice $02 dc.b nA3, $60, nA3, nA3, nA3, nFs3, nF3, nE3, nA3, $18, nAb3, nFs3 dc.b nE3 SSBros_S3SpecialS_Loop0C: dc.b nCs4, $0C, nA3, $06, nE3, nRst, nA3, nRst, nB3, $0C, nG3, $06 dc.b nG3, nG3, $0C, nD3, $06, nB3, nB3 smpsLoop $00, $07, SSBros_S3SpecialS_Loop0C smpsSetvoice $01 smpsAlterVol $08 dc.b nE4, $12 smpsAlterVol $FC dc.b nA4 smpsAlterVol $FC dc.b nA4 smpsAlterVol $FB dc.b nG4, $0C, $12, nA4, $0C smpsAlterVol $05 smpsJump SSBros_S3SpecialS_Jump02 ; FM4 Data SSBros_S3SpecialS_FM4: smpsSetvoice $01 smpsPan panLeft, $00 dc.b nA5, $06, nRst, $0C, nA4, $06, nE4, nRst, nA4, nRst, nB4, nRst dc.b nCs5, nRst, nE5, nRst, nG5, nRst, nA5, nA5, nRst, nA5, nA5, nRst dc.b nA5, nA5, nRst, nG5, nRst, nG5, nG5, $0C, nA5, nRst, $60 SSBros_S3SpecialS_Jump01: smpsSetvoice $02 SSBros_S3SpecialS_Loop05: dc.b nE4, $0C, nA4, $06, nCs4, nRst, nE4, nRst, nD4, $12, nB3, $06 dc.b nD4, $0C, nG3, $06, nG4, nD4 smpsLoop $00, $04, SSBros_S3SpecialS_Loop05 SSBros_S3SpecialS_Loop06: dc.b nCs4, $0C, nFs4, $06, nCs4, nRst, nCs4, nRst, nD4, $0C, nFs3, $06 dc.b nB3, nD4, $0C, nFs3, $06, nB3, nD4, nB3, $0C, nE3, $06, nAb3 dc.b nRst, nB3, nRst, nCs4, $0C, nA3, $06, nB3, nCs4, $0C, nE3, $06 dc.b nA3, nCs4 smpsLoop $00, $02, SSBros_S3SpecialS_Loop06 SSBros_S3SpecialS_Loop07: dc.b nFs4, $12, nFs4, $06, nRst, $18 smpsLoop $00, $02, SSBros_S3SpecialS_Loop07 dc.b nA4, $12, nA4, $06, nRst, $0C, nE4, $3C smpsLoop $01, $04, SSBros_S3SpecialS_Loop07 dc.b nFs4, $30, nAb4, $12, nAb4, nAb4, $0C smpsSetvoice $01 dc.b nA5, $06, nA5, nRst, nA5, nA5, nRst, nA5, nA5, nRst, nG5, nRst dc.b nG5, nG5, $0C, nA5 smpsSetvoice $02 dc.b nFs4, $60, nE4, nD4, nCs4, nCs4, nCs4, nCs4, nCs4, $18, nB3, nA3 dc.b nAb3 SSBros_S3SpecialS_Loop08: dc.b nE4, $0C, nA4, $06, nCs4, nRst, nE4, nRst, nD4, $12, nB3, $06 dc.b nD4, $0C, nG3, $06, nG4, nD4 smpsLoop $00, $07, SSBros_S3SpecialS_Loop08 smpsSetvoice $01 smpsAlterVol $08 dc.b nA4, $12 smpsAlterVol $FC dc.b nCs5 smpsAlterVol $FC dc.b nE5 smpsAlterVol $FB dc.b nG5, $0C, $12, nA5, $0C smpsAlterVol $05 smpsJump SSBros_S3SpecialS_Jump01 ; FM5 Data SSBros_S3SpecialS_FM5: smpsSetvoice $02 dc.b nA5, $06, nRst, $0C, nA4, $06, nE4, nRst, nA4, nRst, nB4, nRst dc.b nCs5, nRst, nE5, nRst, nG5, nRst, nA5, nA5, nRst, nA5, nA5, nRst dc.b nA5, nA5, nRst, nG5, nRst, nG5, nG5, $0C, nA5, nRst, $60 smpsDetune $F8 SSBros_S3SpecialS_Jump00: smpsSetvoice $03 dc.b nRst, $12 smpsCall SSBros_S3SpecialS_Call00 smpsCall SSBros_S3SpecialS_Call01 smpsCall SSBros_S3SpecialS_Call02 dc.b nE6, $06 smpsSetvoice $04 smpsModSet $01, $01, $01, $04 smpsAlterVol $FB dc.b nE6, $66, nRst, $06, nE6, nRst, nE6, $0C smpsAlterVol $0A dc.b nRst, $03 smpsCall SSBros_S3SpecialS_Call03 smpsAlterVol $FB smpsModSet $00, $00, $00, $00 smpsJump SSBros_S3SpecialS_Jump00 ; PSG1 Data SSBros_S3SpecialS_PSG1: dc.b nRst, $12, nA2, $06, nE2, nRst, nA2, nRst, nB2, nRst, nCs3, nRst dc.b nE3, nRst, nG3, nRst, nA3, nA3, nRst, nA3, nA3, nRst, nA3, nA3 dc.b nRst, nG3, nRst, nG3, nG3, $0C, nA3, nRst, $60 SSBros_S3SpecialS_Loop1E: dc.b nE2, $0C, nA2, $06, nCs2, nRst, nE2, nRst, nD2, $12, nB1, $06 dc.b nD2, $0C, nG1, $06, nG2, nD2 smpsLoop $00, $04, SSBros_S3SpecialS_Loop1E SSBros_S3SpecialS_Loop1F: dc.b nCs2, $0C, nFs2, $06, nCs2, nRst, nCs2, nRst, nD2, $0C, nFs1, $06 dc.b nB1, nD2, $0C, nFs1, $06, nB1, nD2, nB1, $0C, nE1, $06, nAb1 dc.b nRst, nB1, nRst, nCs2, $0C, nA1, $06, nB1, nCs2, $0C, nE1, $06 dc.b nA1, nCs2 smpsLoop $00, $02, SSBros_S3SpecialS_Loop1F smpsPSGvoice fTone_09 SSBros_S3SpecialS_Loop20: dc.b nFs2, $60, nE2, nFs2, nA2 smpsLoop $00, $02, SSBros_S3SpecialS_Loop20 dc.b nFs2, $30, nAb2, $12, nAb2, nAb2, $0C smpsPSGvoice fTone_03 dc.b nA3, $06, nA3, nRst, nA3, nA3, nRst, nA3, nA3, nRst, nG3, nRst dc.b nG3, nG3, $0C, nA3 smpsPSGvoice fTone_09 smpsCall SSBros_S3SpecialS_Call04 dc.b nG1, nAb1, nA1, nBb1, nB1, nC2 smpsPSGAlterVol $02 smpsPSGvoice fTone_03 SSBros_S3SpecialS_Loop21: dc.b nE2, $0C, nA2, $06, nCs2, nRst, nE2, nRst, nD2, $12, nB1, $06 dc.b nD2, $0C, nG1, $06, nG2, nD2 smpsLoop $00, $07, SSBros_S3SpecialS_Loop21 dc.b nE2, $0C, nA2, $06, nCs2, nRst, nE2, nRst, nD2, $0C, nG2, $0C dc.b $12, nA2, $0C smpsJump SSBros_S3SpecialS_Loop1E ; PSG2 Data SSBros_S3SpecialS_PSG2: dc.b nRst, $12, nA1, $06, nE1, nRst, nA1, nRst, nB1, nRst, nCs2, nRst dc.b nE2, nRst, nG2, nRst, nE2, nE2, nRst, nE2, nE2, nRst, nE2, nE2 dc.b nRst, nD2, nRst, nD2, nD2, $0C, nE2, nRst, $60 SSBros_S3SpecialS_Loop1A: dc.b nCs2, $0C, nA1, $06, nE1, nRst, nA1, nRst, nB1, $0C, nG1, $06 dc.b nG1, nG1, $0C, nD1, $06, nB1, nB1 smpsLoop $00, $04, SSBros_S3SpecialS_Loop1A SSBros_S3SpecialS_Loop1B: dc.b nA1, $0C, nFs1, $06, nA1, nRst, nFs1, nRst, nB1, $0C, nD1, $06 dc.b nD1, nFs1, $0C, nD1, $06, nFs1, nB1, nE1, $0C, nB0, $06, nB0 dc.b nRst, nE1, nRst, nA1, $0C, nE1, $06, nE1, nA1, $0C, nA0, $06 dc.b nE1, nCs1 smpsLoop $00, $02, SSBros_S3SpecialS_Loop1B smpsPSGvoice fTone_09 SSBros_S3SpecialS_Loop1C: dc.b nD2, $60, nCs2, nD2, nE2 smpsLoop $00, $02, SSBros_S3SpecialS_Loop1C dc.b nD2, $30, nE2, $12, nE2, nE2, $0C smpsPSGvoice fTone_03 dc.b nE2, $06, nE2, nRst, nE2, nE2, nRst, nE2, nE2, nRst, nD2, nRst dc.b nD2, nD2, $0C, nE2 smpsPSGvoice fTone_09 smpsDetune $FE smpsPSGAlterVol $02 dc.b nRst, $12 smpsCall SSBros_S3SpecialS_Call04 smpsPSGvoice fTone_03 SSBros_S3SpecialS_Loop1D: dc.b nCs2, $0C, nA1, $06, nE1, nRst, nA1, nRst, nB1, $0C, nG1, $06 dc.b nG1, nG1, $0C, nD1, $06, nB1, nB1 smpsLoop $00, $07, SSBros_S3SpecialS_Loop1D dc.b nCs2, $0C, nA1, $06, nE1, nRst, nA1, nRst, nB1, $0C, nD2, $0C dc.b $12, nCs2, $0C smpsJump SSBros_S3SpecialS_Loop1A SSBros_S3SpecialS_Call04: dc.b nD2, $24, $06, $06, $12, nCs2, nB1, $0C, nCs2, $60, nA1, $24 dc.b $06, $06, $12, $12, nE1, $0C, nA1, $48, nAb1, $18, nFs1, $24 dc.b $06, $06, $12, nAb1, nA1, $0C, nF1, $30, $12, nAb1, nA1, $0C dc.b nE1, $30, $12, nAb1, nA1, $0C, nA1, $18, nAb1 smpsPSGAlterVol $FE dc.b nA0, $03, nBb0, nB0, nC1, nCs1, nD1, nEb1, nE1, nF1, nFs1 smpsReturn ; PSG3 Data SSBros_S3SpecialS_PSG3: smpsPSGform $E7 smpsPSGvoice fTone_02 dc.b nMaxPSG, $06, nMaxPSG smpsPSGvoice fTone_01 dc.b nMaxPSG, $0C SSBros_S3SpecialS_Loop12: smpsPSGvoice fTone_02 dc.b nMaxPSG, $06 smpsPSGvoice fTone_01 dc.b nMaxPSG smpsPSGvoice fTone_02 dc.b nMaxPSG smpsPSGvoice fTone_01 dc.b nMaxPSG smpsLoop $00, $03, SSBros_S3SpecialS_Loop12 SSBros_S3SpecialS_Loop13: smpsPSGvoice fTone_02 dc.b nMaxPSG, nMaxPSG smpsPSGAlterVol $FC dc.b nMaxPSG smpsPSGAlterVol $04 dc.b nMaxPSG smpsLoop $00, $07, SSBros_S3SpecialS_Loop13 dc.b nMaxPSG, nMaxPSG, nMaxPSG smpsPSGvoice fTone_01 dc.b nMaxPSG SSBros_S3SpecialS_Loop14: smpsPSGvoice fTone_02 dc.b nMaxPSG, nMaxPSG smpsPSGAlterVol $FC dc.b nMaxPSG smpsPSGAlterVol $04 dc.b nMaxPSG smpsLoop $00, $03, SSBros_S3SpecialS_Loop14 dc.b nMaxPSG, nMaxPSG, nMaxPSG smpsPSGvoice fTone_01 dc.b nMaxPSG smpsLoop $01, $04, SSBros_S3SpecialS_Loop14 SSBros_S3SpecialS_Loop15: smpsPSGvoice fTone_02 dc.b nMaxPSG, nMaxPSG smpsPSGAlterVol $FC dc.b nMaxPSG smpsPSGAlterVol $04 dc.b nMaxPSG smpsLoop $00, $0F, SSBros_S3SpecialS_Loop15 dc.b nMaxPSG, nMaxPSG, nMaxPSG smpsPSGvoice fTone_01 dc.b nMaxPSG SSBros_S3SpecialS_Loop16: smpsPSGvoice fTone_02 dc.b nMaxPSG, $06, nMaxPSG smpsPSGvoice fTone_01 dc.b nMaxPSG, $0C smpsPSGvoice fTone_02 dc.b nMaxPSG, $06, nMaxPSG smpsPSGAlterVol $FC dc.b nMaxPSG smpsPSGAlterVol $04 dc.b nMaxPSG smpsLoop $00, $10, SSBros_S3SpecialS_Loop16 SSBros_S3SpecialS_Loop17: dc.b nMaxPSG, $06, nMaxPSG smpsPSGAlterVol $FC dc.b nMaxPSG smpsPSGAlterVol $04 dc.b nMaxPSG smpsLoop $00, $03, SSBros_S3SpecialS_Loop17 dc.b nMaxPSG, $06, nMaxPSG, nMaxPSG smpsPSGvoice fTone_01 dc.b nMaxPSG smpsPSGvoice fTone_02 smpsLoop $01, $02, SSBros_S3SpecialS_Loop17 SSBros_S3SpecialS_Loop18: dc.b nMaxPSG, $06, nMaxPSG smpsPSGAlterVol $FC dc.b nMaxPSG smpsPSGAlterVol $04 dc.b nMaxPSG smpsLoop $00, $20, SSBros_S3SpecialS_Loop18 SSBros_S3SpecialS_Loop19: smpsPSGvoice fTone_02 dc.b nMaxPSG, nMaxPSG smpsPSGAlterVol $FC dc.b nMaxPSG smpsPSGAlterVol $04 dc.b nMaxPSG smpsLoop $00, $03, SSBros_S3SpecialS_Loop19 dc.b nMaxPSG, nMaxPSG, nMaxPSG smpsPSGvoice fTone_01 dc.b nMaxPSG smpsLoop $01, $08, SSBros_S3SpecialS_Loop19 smpsJump SSBros_S3SpecialS_Loop14 ; DAC Data SSBros_S3SpecialS_DAC: dc.b dQuickLooseSnare, $06, dKickS3, $0C, dQuickLooseSnare, $06, dKickS3, $0C, dKickS3, dKickS3, dKickS3, dQuickLooseSnare dc.b dKickS3, dQuickLooseSnare, $06, dQuickLooseSnare, $0C, dQuickLooseSnare, $06, dKickS3, $0C, dQuickLooseSnare, $06, dQuickLooseSnare dc.b $0C, dKickS3, dKickS3, $06, dQuickLooseSnare, $0C, dQuickLooseSnare, $06, dQuickLooseSnare, dKickS3, $06, dElectricHighTom dc.b $03, dElectricHighTom, dElectricHighTom, $06, dElectricHighTom, dElectricMidTom, dElectricMidTom, dElectricMidTom, dElectricLowTom, dElectricLowTom, dElectricLowTom, dKickS3 dc.b dKickS3, dQuickLooseSnare, dKickS3, $12 SSBros_S3SpecialS_Loop00: dc.b dKickS3, $12, dKickS3, $06, dQuickLooseSnare, dKickS3, $0C, dKickS3, dKickS3, $12, dQuickLooseSnare, $06 dc.b dKickS3, $12 smpsLoop $00, $03, SSBros_S3SpecialS_Loop00 dc.b dKickS3, $12, dKickS3, $06, dQuickLooseSnare, dKickS3, $0C, dKickS3, dKickS3, $12, dQuickLooseSnare, $0C dc.b dQuickLooseSnare, $06, dQuickLooseSnare SSBros_S3SpecialS_Loop01: dc.b dKickS3, $12, dKickS3, $06, dQuickLooseSnare, $0C, dKickS3, $06, dQuickLooseSnare, $12, dKickS3, $0C dc.b dQuickLooseSnare, dKickS3, $06, dKickS3 smpsLoop $00, $03, SSBros_S3SpecialS_Loop01 dc.b dKickS3, $12, dKickS3, $06, dQuickLooseSnare, $0C, dKickS3, dQuickLooseSnare, dKickS3, dQuickLooseSnare, dKickS3 SSBros_S3SpecialS_Loop02: dc.b dKickS3, $12, dKickS3, $06, dQuickLooseSnare, $0C, dKickS3 smpsLoop $00, $10, SSBros_S3SpecialS_Loop02 dc.b dKickS3, $12, dKickS3, $06, dQuickLooseSnare, $0C, dKickS3, $12, dKickS3, dQuickLooseSnare, $06, dKickS3 dc.b $12, dQuickLooseSnare, $06, dQuickLooseSnare, $0C, dQuickLooseSnare, $06, dKickS3, $0C, dQuickLooseSnare, $06, dQuickLooseSnare dc.b $0C, dKickS3, dKickS3, $06, dQuickLooseSnare, $0C, dQuickLooseSnare, $06, dQuickLooseSnare, $06 SSBros_S3SpecialS_Loop03: dc.b dKickS3, $12, dKickS3, dKickS3, $24, dQuickLooseSnare, $18 smpsLoop $00, $07, SSBros_S3SpecialS_Loop03 dc.b dKickS3, $12, dKickS3, $06, dQuickLooseSnare, $0C, dKickS3, $1E, dKickS3, $06, dQuickLooseSnare, dQuickLooseSnare dc.b dQuickLooseSnare, dQuickLooseSnare SSBros_S3SpecialS_Loop04: dc.b dKickS3, $12, dKickS3, $06, dQuickLooseSnare, dKickS3, $0C, dKickS3, dKickS3, $12, dQuickLooseSnare, $06 dc.b dKickS3, $12 smpsLoop $00, $07, SSBros_S3SpecialS_Loop04 dc.b dKickS3, $06, dKickS3, dQuickLooseSnare, dKickS3, dKickS3, dQuickLooseSnare, $0C, dQuickLooseSnare, $06, dKickS3, dElectricHighTom dc.b $03, dElectricHighTom, dElectricHighTom, $06, dElectricHighTom, dElectricMidTom, dElectricMidTom, dElectricLowTom, dElectricLowTom smpsJump SSBros_S3SpecialS_Loop00 SSBros_S3SpecialS_Voices: ; Voice $00 ; $3C ; $01, $00, $00, $00, $1F, $1F, $15, $1F, $11, $0D, $12, $05 ; $07, $04, $09, $02, $55, $3A, $25, $1A, $1A, $80, $07, $80 smpsVcAlgorithm $04 smpsVcFeedback $07 smpsVcUnusedBits $00 smpsVcDetune $00, $00, $00, $00 smpsVcCoarseFreq $00, $00, $00, $01 smpsVcRateScale $00, $00, $00, $00 smpsVcAttackRate $1F, $15, $1F, $1F smpsVcAmpMod $00, $00, $00, $00 smpsVcDecayRate1 $05, $12, $0D, $11 smpsVcDecayRate2 $02, $09, $04, $07 smpsVcDecayLevel $01, $02, $03, $05 smpsVcReleaseRate $0A, $05, $0A, $05 smpsVcTotalLevel $80, $07, $80, $1A ; Voice $01 ; $3D ; $01, $01, $01, $01, $94, $19, $19, $19, $0F, $0D, $0D, $0D ; $07, $04, $04, $04, $25, $1A, $1A, $1A, $15, $80, $80, $80 smpsVcAlgorithm $05 smpsVcFeedback $07 smpsVcUnusedBits $00 smpsVcDetune $00, $00, $00, $00 smpsVcCoarseFreq $01, $01, $01, $01 smpsVcRateScale $00, $00, $00, $02 smpsVcAttackRate $19, $19, $19, $14 smpsVcAmpMod $00, $00, $00, $00 smpsVcDecayRate1 $0D, $0D, $0D, $0F smpsVcDecayRate2 $04, $04, $04, $07 smpsVcDecayLevel $01, $01, $01, $02 smpsVcReleaseRate $0A, $0A, $0A, $05 smpsVcTotalLevel $80, $80, $80, $15 ; Voice $02 ; $03 ; $00, $D7, $33, $02, $5F, $9F, $5F, $1F, $13, $0F, $0A, $0A ; $10, $0F, $02, $09, $35, $15, $25, $1A, $13, $16, $15, $80 smpsVcAlgorithm $03 smpsVcFeedback $00 smpsVcUnusedBits $00 smpsVcDetune $00, $03, $0D, $00 smpsVcCoarseFreq $02, $03, $07, $00 smpsVcRateScale $00, $01, $02, $01 smpsVcAttackRate $1F, $1F, $1F, $1F smpsVcAmpMod $00, $00, $00, $00 smpsVcDecayRate1 $0A, $0A, $0F, $13 smpsVcDecayRate2 $09, $02, $0F, $10 smpsVcDecayLevel $01, $02, $01, $03 smpsVcReleaseRate $0A, $05, $05, $05 smpsVcTotalLevel $80, $15, $16, $13 ; Voice $03 ; $34 ; $00, $02, $01, $01, $1F, $1F, $1F, $1F, $10, $06, $06, $06 ; $01, $06, $06, $06, $35, $1A, $15, $1A, $10, $80, $18, $80 smpsVcAlgorithm $04 smpsVcFeedback $06 smpsVcUnusedBits $00 smpsVcDetune $00, $00, $00, $00 smpsVcCoarseFreq $01, $01, $02, $00 smpsVcRateScale $00, $00, $00, $00 smpsVcAttackRate $1F, $1F, $1F, $1F smpsVcAmpMod $00, $00, $00, $00 smpsVcDecayRate1 $06, $06, $06, $10 smpsVcDecayRate2 $06, $06, $06, $01 smpsVcDecayLevel $01, $01, $01, $03 smpsVcReleaseRate $0A, $05, $0A, $05 smpsVcTotalLevel $80, $18, $80, $10 ; Voice $04 ; $3E ; $07, $01, $02, $01, $1F, $1F, $1F, $1F, $0D, $06, $00, $00 ; $08, $06, $00, $00, $15, $0A, $0A, $0A, $1B, $80, $80, $80 smpsVcAlgorithm $06 smpsVcFeedback $07 smpsVcUnusedBits $00 smpsVcDetune $00, $00, $00, $00 smpsVcCoarseFreq $01, $02, $01, $07 smpsVcRateScale $00, $00, $00, $00 smpsVcAttackRate $1F, $1F, $1F, $1F smpsVcAmpMod $00, $00, $00, $00 smpsVcDecayRate1 $00, $00, $06, $0D smpsVcDecayRate2 $00, $00, $06, $08 smpsVcDecayLevel $00, $00, $00, $01 smpsVcReleaseRate $0A, $0A, $0A, $05 smpsVcTotalLevel $80, $80, $80, $1B ...Who is this Dustin guy anyway? I've never heard of him before.
Dustin O'Dell uploads high quality Genesis music to his Youtube channel. I've been subscribed to him for a while now, it's interesting to see that he's taking the time to port the game to the Genesis! I've mentioned Retro to him in the past, he's done quite a bit to rip Jurassic Park: Rampage Edtion's music.
Everything surrounding the discovery of this game and unearthing its contents has been amazing. Hats off to all involved! To think that all this time, the Special Stage music for Sonic 3 & Knuckles actually originated somewhere else prior! It reminds me a bit of the Hard Times song discovery for IceCap Zone's music. As I was listening through the soundtrack you provided, track 85 caught my attention almost immediately, in that (to me, at least) it has more than a passing resemblance to an unused music track from Sonic Jam. I've put together a quick-ish audio comparison video, starting off with a rough mashup, followed by comparing segments of each track side by side. I also slowed down the SegaSonic Bros. track to match the speed of the Sonic Jam track. To be fair, there are some points where they don't match up well (The mashup portion clashes pitch-wise.), and both tracks have significant differences to be sure, yet at the same time, they feel quite similar to me. Is it just me? Am I the only one hearing a big similarity with this? ^o^
Game mode 01, which is loc_755C loads this up if you change the game mode while in the main game. It freezes everywhere else. It's supposed to be used at the title screen. Interestingly, the code for going to the options menu is still there in the title screen routine. It checks to see if the currently pressed button if $70, which doesn't correlate to anything for the System C afaik. But it could correlate to A,B,C on the original Megadrive controller. It's also set to branch away from the game mode change always, which kinda makes it pointless anyways: Code (ASM): ROM:0000736A loc_736A: ; CODE XREF: ROM:00007342j ROM:0000736A ; ROM:00007352j ROM:0000736A cmpi.b #$70,(word_FFE10C).w ; 'p' ; Compare Immediate ROM:00007370 bra.s loc_737A ; Branch Always ROM:00007372 ; --------------------------------------------------------------------------- ROM:00007372 move.w #1,(RAM_CurrentGameModeID).w ; Move Data from Source to Destination ROM:00007378 rts ; Return from Subroutine Some really interesting things there. Evidence of localization and a menu screen. Selecting English doesn't change anything. 1P mode (which doesn't work). VS mode (which loads the VS mode in the current game), and a 2P mode which still works. />/>/>/>/>/> Selecting options gives you another version of the test menu, which is more of a debugging menu at this point. Also sometimes I can get stars to appear on the title screen at random. Not sure what triggers it: Here are all the game modes accessible by the main loop: Code (Text): ROM:0000052C ; --------------------------------------------------------------------------- ROM:0000052E Array_GameModes:dc.l GM_SegaLogoLoop ; 00 - 00 ROM:00000532 dc.l GM_OptionsLoop ; 04 - 01 ROM:00000536 dc.l loc_3A26 ; 08 - 02 ROM:0000053A dc.l GM_MainGameInit ; 0c - 03 ROM:0000053E dc.l GM_MainGameLoop ; 10 - 04 ROM:00000542 dc.l GM_TitleScreenInit ; 14 - 05 ROM:00000546 dc.l GM_HowToPlayLoop ; 18 - 06 ROM:0000054A dc.l GM_TopScoreLoop ; 1c - 07 ROM:0000054E dc.l GM_TitleScreenLoop ; 20 - 08 ROM:00000552 dc.l GM_PlayTypeSelectLoop ; 24 - 09 ROM:00000556 dc.l GM_WarningLoop ; 28 - 0a The only one I can't identify is loc_3A26. This gets called when you select 1P Mode, but changing to it crashes the game.
Curses, you beat me to the good stuff. Nice finds though! I'll see if I can 'fix' some if it when I get back. This is also not the first time a C2 game has used nonstandard, unemulated inputs for debug controls
Ok so we probably all noticed backgrounds from or similar to Sonic 1 being used in the game, Makes one wonder if perhaps some of the graphics in this game were early prototype graphics from sonic 1. maybe some we had never seen before.
Oh, cool! Earlier in the thread, I noted how track 85 had similarities to the Sonic Jam credits song. I'd completely forgotten about the unused song, and now I'm even more convinced. The unused Jam song is sort of a connective tissue between the two. Sonic Jam's composers were Masaru Setsumaru and Kenichi Tokoi. According to the wiki, it was Setsumaru who composed the staff roll song (not sure where the info of who composed each song came from). The wiki also says that he was the composer for Sonic Eraser. So that's certainly something. Yeah, that seems too specific to be a coincidence. We know that 8-bit Sonic 1 had some scrapped elements from the 16-bit version, like Sonic singing, and the basic idea of the final boss (and unused turrets).