Hey everyone! So at this point we've actually got a buildable disassembly, which means we can start writing guides. Today I've got a few small guides that I've all bundled together here, they're mostly just fixes and minor touch ups. These guides will work for the MDDC disassembly Using the full demo order This is something I already mentioned here, but here's a fix for it! In the prototype if you were to sit on the title screen you'd cycle through 6 demos Code: GHZ1 > Special Stage > MZ1 > Special Stage > SZ1 > Special Stage However, the actual data for the demo order has 12 entries Code: GHZ1 > Special Stage > MZ1 > Special Stage > SZ1 > Special Stage > SLZ1 > Special Stage > MZ1 > Special Stage > SZ1 > Special Stage The fix for this is fairly simple of course, under loc_282C, you'll see Code: loc_282C: tst.w (GlobalTimer).w bne.w loc_27FE move.b #$E0,d0 bsr.w PlaySFX move.w (DemoNum).w,d0 andi.w #7,d0 add.w d0,d0 move.w DemoLevels(pc,d0.w),d0 move.w d0,(curzone).w addq.w #1,(DemoNum).w cmpi.w #6,(DemoNum).w bcs.s loc_2860 move.w #0,(DemoNum).w Now, you'll notice a check to see if the demo number is at 6. Obviously, you just need to change that to 12 (Or $C). Super easy fix! As a bonus, let's add the intended demo order. For some reason the list goes back to MZ and SZ even though they've already played. It was likely intended that it was actually supposed to play LZ and CWZ instead, but at this point in the prototype, those two stages were kind of being hidden by Sonic Team. To restore the intended demo order, let's look at DemoLevels Code: DemoLevels: dc.w 0, $600, $200, $600, $400, $600, $300, $600, $200 dc.w $600, $400, $600 Aside from $600, we can notice 2 other values being duplicated, $200 and $400. We'll want to change the second instance of them to $100 and $500. And like that, the demo order is corrected!~ Notice: For some reason, the demos refuse to go past SLZ, will investigate further Fixing the Marble Zone UFOs In the prototype, the UFOs in Marble Zone are actually broken, they fail to display a 6th frame. Here's how they do animate in the prototype And here's how they should actually animate To fix this issue, go to loc_11412 Code: loc_11412: subq.b #1,(unk_FFF7B5).w bpl.w locret_11480 move.b #7,(unk_FFF7B5).w lea (byte_6C398).l,a1 moveq #0,d0 move.b (unk_FFF7B4).w,d0 addq.b #1,d0 cmpi.b #5,d0 bne.s loc_11436 moveq #0,d0 And change the line Code: cmpi.b #5,d0 From a 5 to 6. This was likely just an oversight by Naka, he probably thought that he was counting from 0 instead of 1. Unlock Clock Work Zone Act 3 in Level Select Here's the final mini guide of this thread, this will just be a simple fix so you can access CWZ3 via level select. Under LevSelOrder we'll find Code: LevSelOrder: dc.w 0, 1, 2 dc.w $100, $101, $102 dc.w $200, $201, $202 dc.w $300, $301, $302 dc.w $400, $401, $402 dc.w $500, $501,$8500 dc.w $700, $700,$8000 $8500 is the entry for CWZ3. $8500 is obviously a null entry the player can't select. So there's 2 routes we can take here. You could choose to load Sonic into LZ4, like the final game. Or you can load the player into literal CWZ3, Final Zone in the final game. Depending on which you want to do, replace $8500 with either of these Code: $103 = Labyrinth Zone Act 4 $502 = Clock Work Zone Act 3 And there's a few small fixes for you to try out!~
Adding the TM symbol to the SEGA screen 1. In "screens/sega/", replace "Main.nem" with the attached file below (with .bin removed from the name). 2. In "main.asm", under these lines in "sSega": Code: lea ((Chunks)&$FFFFFF).l,a1 lea (MapSega).l,a0 move.w #0,d0 bsr.w EnigmaDec add these lines of code: Code: tst.b (ConsoleRegion).w bpl.s @cont ; Display TM move.w #$30,((Chunks+$14)&$FFFFFF).l move.w #$31,((Chunks+$16)&$FFFFFF).l @cont: As a result, the TM symbol will be shown in the SEGA screen for USA and EUR consoles, like in the final Rev 01 build of Sonic 1.
Hey you! Do you hate the limitations to the Sonic 1 prototype sound driver as it is based on an unmodified SMPS 68k/Type 1b (Golden Axe 2 sound driver). Well have no fear, I have the solution! Introducing the Sonic 1 sound driver port to the prototype! That's right, you have your random SMPSes shoved into the prototype. Also, if you want to stick with the prototype driver, you may notice a bug where the music cannot be paused when you pause the game, so the fix is below the driver installation. How to install the Sonic 1 final sound driver into the prototype Before modifying the code, we need to make a few changes to the disassembly. Firstly, download the .zip file, provided below, and insert the "s1.sounddriver.asm" in the root of the disassembly. Then, remove the sound folder, and its contents, in the disassembly and insert the new sound folder, from the .zip, in the root of the disassembly. Now, open up main.asm and go to mSoundPriorities and delete everything up to (and including): Code: sD2: incbin "sound/sfx/D2.ssf" even From where the code was removed, insert: Code: include "s1.sounddriver.asm" Then go to dacinit and replace this: Code: dacInit: nop move.w #$100,($A11100).l move.w #$100,($A11200).l lea (Z80Driver).l,a0 lea ($A00000).l,a1 move.w #$1C5B,d0 loc_1156: move.b (a0)+,(a1)+ dbf d0,loc_1156 moveq #0,d0 lea ($A01FF8).l,a1 move.b d0,(a1)+ move.b #$80,(a1)+ move.b #7,(a1)+ move.b #$80,(a1)+ move.b d0,(a1)+ move.b d0,(a1)+ move.b d0,(a1)+ move.b d0,(a1)+ move.w #0,($A11200).l nop nop nop nop move.w #$100,($A11200).l move.w #0,($A11100).l rts ; --------------------------------------------------------------------------- dc.b 3 dc.b 0 dc.b 0 dc.b $14 dc.b 0 dc.b 0 dc.b 0 dc.b 0 with this: Code: dacInit: nop move.w #$100,($A11100).l ; stop the Z80 move.w #$100,($A11200).l ; reset the Z80 lea (Kos_Z80).l,a0 ; load sound driver lea ($A00000).l,a1 bsr.w KosinskiDec ; decompress move.w #0,($A11200).l nop nop nop nop move.w #$100,($A11200).l ; reset the Z80 move.w #0,($A11100).l ; start the Z80 rts And it should work with any errors. However, however, when you pause, the music does not pause. So let's fix that. (works in the proto and final driver's) How to fix the pause bug Go to loc_11CC and add this below the label: Code: move.b #1,($FFFFF003).w ; pause music To unpause, go to loc_1206 and add this: Code: move.b #$80,($FFFFF003).w ; unpause music And there you have it, a stable Sonic 1 driver for the proto. Now add MegaPCM, Dual PCM or anything, I really don't care; it will most likely work!
Make Splats Play a Sound Effect This is just something small and really only for thematic purposes, but if you'd like Splats play the spring sound effect when jumping, simply place Code: move.w #$CC,d0 jsr (PlaySFX).l At the end of loc_D2A4.
C9 is a more appropriate sound to me even if it gets cut off by each time it plays, just sounds cute when paired with Splats to me. Anyway, here's my easy mini-guide... Adding Music to the Sega Screen Something to make the plain palette cycling Sega logo a bit more interesting is to play a song on it. To demonstrate, we're using the 1-Up jingle. Right before loc_2528, plop the following code: If this sounds familiar, it is basically the same as my jingle guide for DeltaWooloo's import of this screen to the final Sonic 1, but with slightly different coding. Either way, helps to know how to implement even the smallest additions.
Restoring Music Pointer 92 In the Sonic 1 prototype, pressing A/B/C on 92 in the level select's sound test will crash the game due to it being an invalid pointer. Suddenly this morning, a bit of self-made technical know-how somehow made this pointer fully functional. This was a very lucky thing to achieve, so here's how I managed to do it. 1. Go to dMusicList and you'll see the following code Add ", mDrowning" after the Credits entry. 2. Scroll down until you see the Z80Driver label. You'll see a list of the included songs. The drowning jingle is not there, therefore we get why the prototype crashes. Add the following code underneath the credits entry similar to the last step Don't build just yet! You will need to include a new SSF file that reads "Drowning.ssf" in the music subfolder of Sound. Two methods exist, one lazy and one with legit work. For the latter, use SMPSConv to convert the S1 SMPS file of the Drowning track to Golden Axe 2's format. For the former (the lazy method), copy the Game Over track and rename it as the Drowning file.
how to restore the ballhog's art hi this is my first tutorial so if there are any mistakes please reply. first we need the ballhog's art so below you can download the art. and extract it in levels/shared once you did that go to plcghz1 then replace: Code: dc.l ArtCrabmeat dc.w $8000 with Code: dc.l Artballhog dc.w $8000 now go to ArtSplats: And add under that add Code: Artballhog: incbin "levels/shared/ballhog/Art.nem" even once you did that you can place the object the id is 1E (btw the ball and the explotions arent yet aded but im finding a way to add that. and alsothe crabmeat gets replaced so it wont look normal)
I'm pretty sure Ball Hog's tiles are already in the game? Edit: They are definitely in game, at ROM location 0x2A386. However, the disasm doesn't label it.
Add Prototype Spike Behavior To Final I have no idea why anyone would want to use this but if you're a sadistic asshole, here you go. In the prototype, regardless if you have invincibility, Sonic will get hurt when you touch spikes, to add this to final do the following Under Obj36_Hurt you'll see Code: Obj36_Hurt: ; XREF: Obj36_SideWays; Obj36_Upright tst.b ($FFFFFE2D).w ; is Sonic invincible? bne.s Obj36_Display ; if yes, branch move.l a0,-(sp) movea.l a0,a2 lea ($FFFFD000).w,a0 cmpi.b #4,$24(a0) bcc.s loc_CF20 move.l $C(a0),d3 move.w $12(a0),d0 ext.l d0 asl.l #8,d0 sub.l d0,d3 move.l d3,$C(a0) jsr HurtSonic Simply remove the first 2 lines. Gross.