one of the most obvious issues in Sonic 1 is mappings limit; I am not sure what would happen if this has gone over, but I am fairly certain reading illegal data would occur. Here is a fix for that. Other thing to note would to double check you exported everything in Sonic 1 format correctly.
I suspected that that might be the issue and reduced the frames down to 7F by removing ones I wouldn't need, but it's still the same issue. I thought there might be a pattern to the ones that work and the ones that don't, and it seems that for the most part frames above $28 are garbled and earlier ones aren't. Curiously, exceptions are $31 (which works fine), and 7, 8, and $B which have numbers scrambled into them, which aren't even from Sonic's art.
Sonic 1 DPLCs only transfer $2E0 bytes (23 tiles), and many S3&K sprites (especially the diagonal ones) use more than that. The game just uses whatever tiles are already present in VRAM past these. Edit: Also note that the RAM buffer used by S1 for storing Sonic's art is 24 tiles long ($300 bytes); so you would need to change its size too, or change the DPLC method to be more like the one from S2/S3&K.
So... I have to port the DPLC method from Sonic 2 or 3 and extend the RAM buffer for Sonic's art? I don't even know where to begin there, so would it be simpler to simply map the sprites in S1 format manually? I started out doing that and quickly realized it was very tedious, but it seems it may actually be the simpler way to go here.
You would have to either port the S2/S3&K method or extend the art buffer; in either case you also need to free up some VRAM for the frames that need more art. The S2/S3&K method don't need an art buffer (and it could be used for the RAM requirements of it). I think there was a tutorial about it on the wiki. Remapping it to use less tiles is also a possibility.
yes the spindash tutorial has the whole DMA thing in hand, so porting the spindash will result in porting the DMA queue.
This, and another tip that means more work but that it will worth it. If you 'break' the sprites, you can create additional blank tiles so you can decrease the amount of tiles loaded even futher. I will post the same example since this is one case that really show the benefit of it. Of course that this means editing the art file, but in frames like this one you can load up to 4 tiles less than without breaking it. It also means a more complex mapping, but if you're using SonMapEd, you have no excuse to not do it. I do have to say that I don't know how optimized the S3 sprites are, but at least in S1 you can save a lot of space with this. I will also stop being an asshole and accept that I need help with some issue with porting the bloody DMA Queue. You'll see, Im using the GitHub disassembly since Im a newbie and I need all things labeled and tagged and split into a lot of individual files (2005 one's 3MB sonic.asm file lags like hell in my netbook) and I wanted (still want) to port Green Snake's multi-character guide from the old disam format to the GH one, and after some help I have all done... except the DMA Queue. So, I started porting that, and I can not make Sonic appear at all. Im sure that the problem is here, but I don't know what to do. Here's the thing: Once you've finished, go to "loc_CD4", "loc_DAE", "loc_EEE", and loc_FAE" Once you've finished, go to "loc_CD4", "loc_DAE", "loc_EEE", and loc_FAE". Replace this piece of code. [68k] tst.b ($FFFFF767).w beq.s loc_D50 lea ($C00004).l,a5 move.l #$94019370,(a5) move.l #$96E49500,(a5) move.w #$977F,(a5) move.w #$7000,(a5) move.w #$83,($FFFFF640).w move.w ($FFFFF640).w,(a5) move.b #0,($FFFFF767).w[/68k] With this. [68k] jsr (ProcessDMAQueue).l [/68k]My disam doesn't have this, but after comparing them side by side, I figured out that it would be this part: Once you've finished, go to "VBla_08/@waterbelow", "VBla_0A", "VBla_0C/@waterbelow", and "VBla_16" Replace this piece of code. [68k] tst.b (f_sonframechg).w ; has Sonic's sprite changed? beq.s @nochg ; if not, branch writeVRAM v_sgfx_buffer,$2E0,vram_sonic ; load new Sonic gfx move.b #0,(f_sonframechg).w[/68k] The WriteVRAM macro is this: [68k] writeVRAM: macro lea (vdp_control_port).l,a5 move.l #$94000000+(((\2>>1)&$FF00)<<8)+$9300+((\2>>1)&$FF),(a5) move.l #$96000000+(((\1>>1)&$FF00)<<8)+$9500+((\1>>1)&$FF),(a5) move.w #$9700+((((\1>>1)&$FF0000)>>16)&$7F),(a5) move.w #$4000+(\3&$3FFF),(a5) move.w #$80+((\3&$C000)>>14),(v_vdp_buffer2).w move.w (v_vdp_buffer2).w,(a5) endm[/68k] The guide says that if you build and you see Sonic, you deserve a cookie. well, Sonic does NOT appear therefore I have NO COOKIE! Also, while I see that the macro HAS TO BE the thing that I have to replace because it's too bloody similar, I have no idea what those >((())$%$· things are. Can someone explain to me what am I doing wrong, please? I have this thing pending since I joined the comunity (yes, I am THAT dumb).
In S3K, Tails has a couple of frames in his sprite set where his feet are up in the air, but the head and hands are in the tired animation... it looks like it should be his sprite for falling from flight... but I've NEVER seen it used... that said, it's not on the cutting room floor... is this sprite EVER used?
Yeah, it's used. Get Tails to carry Sonic while underwater, he instantly gets tired and uses that animation.
So I decided to start a S2 hack but I'm having one problem. How do you actually use the S2 Sound Driver? I'm trying to replace the music but I don't know how to extend the banks to fit my new music. I been searching Retro but haven't really found any useful information.
Replacing music (as opposed to adding it) shouldn't be that hard at all. It should be said that S2's driver is pretty heavily optimised at a cost of flexibility, one example of this being that there are only two music banks. The first bank is only used by the continue music, so there's plenty of room in that one. Really, if your song's too big for that bank, you've got bigger problems to tend to. Jokes aside, the bank you're looking for is MusicPoint1, but just putting your music there isn't all you need to do: you also need to modify the entry of your music in zMasterPlaylist. Basically, change it from 'id(MusPtr_name)' to '(MusPtr_name-MusicPoint1)/ptrsize'. What this is really doing is subtracting $80 from the value, since the highest bit determines which bank to use. I should really change the Git disasm to be less stupid with that. zMasterPlaylist is useful for some other things as well: if your music is uncompressed, put '+20h' at the end of the entry to make the driver handle it properly. Also, if you want your music to slow down on PAL consoles (like the drowning theme), put '+40h' at the end as well.
Thanks but after talking with some people I got convinced to use flamewing's S3K driver. I got it to work perfectly (I edited it to use default S2 slots as well) Now my new question is: How do I add more music? I made it so each act has it's own music but now I can't seem to add any more music. I now how to add more music to the banks themselves but I can't seem to actually get them into a slot.
There should just be some tables in the driver you need to add to. Just copy the label of one of the driver's already-working songs, and search for it in the driver's file. That should find all of them. I'm not at a computer right now, so I can't check, sorry. EDIT: Yeah, there's z80_MusicBanks and z80_MusicPointers, those I found immediately just by searching 'Snd_GameOver'. Really, try doing that once in a while, it'll save you a few questions. Anyway, you may also need to adjust MusID__End, since, in S&K and flamewing's driver, it's hardcoded. My details might not be exact, unless you felt like porting the current version of flamewing's driver yourself, since the already-ported copy of the driver supplied with a certain guide is outdated and pretty broken last I checked.
Oh thanks I I didn't know I had to adjust MusID_End. As for porting over the current version. I litterally had to change 1 line of code to get it to compile and run. I now have to go through and fix all the IDs though now. But neat how it wasn't too hard to get it running.
Okay this is a more diverse one. I've been looking at this hex tutorial for PAL PS2 Gems Collection and have been trying to convert it into an ARMAX code: http://forums.sonicretro.org/index.php?showtopic=17172 All my attempts have caused the game to freeze at the first loading screen. The two lines I tried converting I typed as such: 1353439c 412e504a 1353439d 412e504a Am I doing something wrong (I know the data is compiled from different files which may complicate it a little).
I have a small question: Does anyone have a PSG table of S3D? I tried to port Spring Stadium to S1, but the psg is all wrong, and it doesn't seem to use the same psg as S3K. I looked around can couldn't find any info on it's PSG
I was going to suggest Valley Bell's SMPS Research Pack, but it doesn't seem to contain any direct PSG rips. So I just ripped the thing from the driver itself: S3 Spoiler Code (ASM): VolEnvPtrs: dw PSG_1, PSG_2, PSG_3, PSG_4 dw PSG_5, PSG_6, PSG_7, PSG_8 dw PSG_9, PSG_A, PSG_B, PSG_C dw PSG_D, PSG_E, PSG_F, PSG_10 dw PSG_11, PSG_12, PSG_13, PSG_14 dw PSG_15, PSG_16, PSG_17, PSG_18 dw PSG_19, PSG_1A, PSG_1B, PSG_1C dw PSG_1D, PSG_1E, PSG_1F, PSG_20 dw PSG_21, PSG_22, PSG_23, PSG_24 dw PSG_25, PSG_26, PSG_27 PSG_1: db 2, 83h PSG_2: db 0, 2, 4, 6, 8, 10h, 83h PSG_3: db 2, 1, 0, 0, 1, 2, 2, 2, 2, 2 db 2, 2, 2, 2, 2, 2, 2, 3, 3, 3 db 4, 4, 4, 5, 81h PSG_4: db 0, 0, 2, 3, 4, 4, 5, 5, 5, 6 db 6, 81h PSG_5: db 3, 0, 1, 1, 1, 2, 3, 4, 4, 5 db 81h PSG_6: db 0, 0, 1, 1, 2, 3, 4, 5, 5, 6 db 8, 7, 7, 6, 81h PSG_7: db 1, 0Ch, 3, 0Fh, 2, 7, 3, 0Fh, 80h PSG_8: db 0, 0, 0, 2, 3, 3, 4, 5, 6, 7 db 8, 9, 0Ah, 0Bh, 0Eh, 0Fh, 83h PSG_9: db 3, 2, 1, 1, 0, 0, 1, 2, 3, 4 db 81h PSG_A: db 1, 0, 0, 0, 0, 1, 1, 1, 2, 2 db 2, 3, 3, 3, 3, 4, 4, 4, 5, 5 db 81h PSG_B: db 10h, 20h, 30h, 40h, 30h, 20h, 10h, 0, 0F0h, 80h PSG_C: db 0, 0, 1, 1, 3, 3, 4, 5, 83h PSG_D: db 0, 81h PSG_E: db 2, 83h PSG_F: db 0, 2, 4, 6, 8, 10h, 83h PSG_10: db 9, 9, 9, 8, 8, 8, 7, 7, 7, 6 db 6, 6, 5, 5, 5, 4, 4, 4, 3, 3 db 3, 2, 2, 2, 1, 1, 1, 0, 0, 0 db 81h PSG_11: db 1, 1, 1, 0, 0, 0, 81h PSG_12: db 3, 0, 1, 1, 1, 2, 3, 4, 4, 5 db 81h PSG_13: db 0, 0, 1, 1, 2, 3, 4, 5, 5, 6 db 8, 7, 7, 6, 81h PSG_14: db 0Ah, 5, 0, 4, 8, 83h PSG_15: db 0, 0, 0, 2, 3, 3, 4, 5, 6, 7 db 8, 9, 0Ah, 0Bh, 0Eh, 0Fh, 83h PSG_16: db 3, 2, 1, 1, 0, 0, 1, 2, 3, 4 db 81h PSG_17: db 1, 0, 0, 0, 0, 1, 1, 1, 2, 2 db 2, 3, 3, 3, 3, 4, 4, 4, 5, 5 db 81h PSG_18: db 10h, 20h, 30h, 40h, 30h, 20h, 10h, 0, 10h, 20h db 30h, 40h, 30h, 20h, 10h, 0, 10h, 20h, 30h, 40h db 30h, 20h, 10h, 0, 80h PSG_19: db 0, 0, 1, 1, 3, 3, 4, 5, 83h PSG_1A: db 0, 2, 4, 6, 8, 16h, 83h PSG_1B: db 0, 0, 1, 1, 3, 3, 4, 5, 83h PSG_1C: db 4, 4, 4, 4, 3, 3, 3, 3, 2, 2 db 2, 2, 1, 1, 1, 1, 83h PSG_1D: db 0, 0, 0, 0, 1, 1, 1, 1, 2, 2 db 2, 2, 3, 3, 3, 3, 4, 4, 4, 4 db 5, 5, 5, 5, 6, 6, 6, 6, 7, 7 db 7, 7, 8, 8, 8, 8, 9, 9, 9, 9 db 0Ah, 0Ah, 0Ah, 0Ah, 81h PSG_1E: db 0, 0Ah, 83h PSG_1F: db 0, 2, 4, 81h PSG_20: db 30h, 20h, 10h, 0, 0, 0, 0, 0, 8, 10h db 20h, 30h, 81h PSG_21: db 0, 4, 4, 4, 4, 4, 4, 4, 4, 4 db 4, 6, 6, 6, 8, 8, 0Ah, 83h PSG_22: db 0, 2, 3, 4, 6, 7, 81h PSG_23: db 2, 1, 0, 0, 0, 2, 4, 7, 81h PSG_24: db 0Fh, 1, 5, 83h PSG_25: db 8, 6, 2, 3, 4, 5, 6, 7, 8, 9 db 0Ah, 0Bh, 0Ch, 0Dh, 0Eh, 0Fh, 10h, 83h PSG_26: db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 db 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 db 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 db 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 db 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 db 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 db 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 db 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 db 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 db 83h PSG_27: db 0, 2, 2, 2, 3, 3, 3, 4, 4, 4 db 5, 5, 83h S&K Spoiler Code (ASM): VolEnvPtrs: dw PSG_1, PSG_2, PSG_3, PSG_4 dw PSG_5, PSG_6, PSG_7, PSG_8 dw PSG_9, PSG_A, PSG_B, PSG_C dw PSG_D, PSG_E, PSG_F, PSG_10 dw PSG_11, PSG_12, PSG_13, PSG_14 dw PSG_15, PSG_16, PSG_17, PSG_18 dw PSG_19, PSG_1A, PSG_1B, PSG_1C dw PSG_1D, PSG_1E, PSG_1F, PSG_20 dw PSG_21, PSG_22, PSG_23, PSG_24 dw PSG_25, PSG_26, PSG_27 PSG_1: db 2, 83h PSG_2: db 0, 2, 4, 6, 8, 10h, 83h PSG_3: db 2, 1, 0, 0, 1, 2, 2, 2, 2, 2 db 2, 2, 2, 2, 2, 2, 2, 3, 3, 3 db 4, 4, 4, 5, 81h PSG_4: db 0, 0, 2, 3, 4, 4, 5, 5, 5, 6 db 6, 81h PSG_5: db 3, 0, 1, 1, 1, 2, 3, 4, 4, 5 db 81h PSG_6: db 0, 0, 1, 1, 2, 3, 4, 5, 5, 6 db 8, 7, 7, 6, 81h PSG_7: db 1, 0Ch, 3, 0Fh, 2, 7, 3, 0Fh, 80h PSG_8: db 0, 0, 0, 2, 3, 3, 4, 5, 6, 7 db 8, 9, 0Ah, 0Bh, 0Eh, 0Fh, 83h PSG_9: db 3, 2, 1, 1, 0, 0, 1, 2, 3, 4 db 81h PSG_A: db 1, 0, 0, 0, 0, 1, 1, 1, 2, 2 db 2, 3, 3, 3, 3, 4, 4, 4, 5, 5 db 81h PSG_B: db 10h, 20h, 30h, 40h, 30h, 20h, 10h, 0, 0F0h, 80h PSG_C: db 0, 0, 1, 1, 3, 3, 4, 5, 83h PSG_D: db 0, 81h PSG_E: db 2, 83h PSG_F: db 0, 2, 4, 6, 8, 10h, 83h PSG_10: db 9, 9, 9, 8, 8, 8, 7, 7, 7, 6 db 6, 6, 5, 5, 5, 4, 4, 4, 3, 3 db 3, 2, 2, 2, 1, 1, 1, 0, 0, 0 db 81h PSG_11: db 1, 1, 1, 0, 0, 0, 81h PSG_12: db 3, 0, 1, 1, 1, 2, 3, 4, 4, 5 db 81h PSG_13: db 0, 0, 1, 1, 2, 3, 4, 5, 5, 6 db 8, 7, 7, 6, 81h PSG_14: db 0Ah, 5, 0, 4, 8, 83h PSG_15: db 0, 0, 0, 2, 3, 3, 4, 5, 6, 7 db 8, 9, 0Ah, 0Bh, 0Eh, 0Fh, 83h PSG_16: db 3, 2, 1, 1, 0, 0, 1, 2, 3, 4 db 81h PSG_17: db 1, 0, 0, 0, 0, 1, 1, 1, 2, 2 db 2, 3, 3, 3, 3, 4, 4, 4, 5, 5 db 81h PSG_18: db 10h, 20h, 30h, 40h, 30h, 20h, 10h, 0, 10h, 20h db 30h, 40h, 30h, 20h, 10h, 0, 10h, 20h, 30h, 40h db 30h, 20h, 10h, 0, 80h PSG_19: db 0, 0, 1, 1, 3, 3, 4, 5, 83h PSG_1A: db 0, 2, 4, 6, 8, 16h, 83h PSG_1B: db 0, 0, 1, 1, 3, 3, 4, 5, 83h PSG_1C: db 4, 4, 4, 4, 3, 3, 3, 3, 2, 2 db 2, 2, 1, 1, 1, 1, 83h PSG_1D: db 0, 0, 0, 0, 1, 1, 1, 1, 2, 2 db 2, 2, 3, 3, 3, 3, 4, 4, 4, 4 db 5, 5, 5, 5, 6, 6, 6, 6, 7, 7 db 7, 7, 8, 8, 8, 8, 9, 9, 9, 9 db 0Ah, 0Ah, 0Ah, 0Ah, 81h PSG_1E: db 0, 0Ah, 83h PSG_1F: db 0, 2, 4, 81h PSG_20: db 30h, 20h, 10h, 0, 0, 0, 0, 0, 8, 10h db 20h, 30h, 81h PSG_21: db 0, 4, 4, 4, 4, 4, 4, 4, 4, 4 db 4, 6, 6, 6, 8, 8, 0Ah, 83h PSG_22: db 0, 2, 3, 4, 6, 7, 81h PSG_23: db 2, 1, 0, 0, 0, 2, 4, 7, 81h PSG_24: db 0Fh, 1, 5, 83h PSG_25: db 8, 6, 2, 3, 4, 5, 6, 7, 8, 9 db 0Ah, 0Bh, 0Ch, 0Dh, 0Eh, 0Fh, 10h, 83h PSG_26: db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 db 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 db 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 db 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 db 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 db 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 db 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 db 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 db 9, 9, 9, 9, 9, 9, 9, 9, 83h PSG_27: db 0, 2, 2, 2, 3, 3, 3, 4, 4, 4 db 5, 5, 83h S3D Spoiler Code (ASM): off_1387: dw PSG_1, PSG_2, PSG_3, PSG_4 dw PSG_5, PSG_6, PSG_7, PSG_8 dw PSG_9, PSG_A, PSG_B, PSG_C dw PSG_D, PSG_E, PSG_F, PSG_10 dw PSG_11, PSG_12, PSG_13, PSG_14 dw PSG_15, PSG_16, PSG_17, PSG_18 dw PSG_19, PSG_1A, PSG_1B, PSG_1C dw PSG_1D, PSG_1E, PSG_1F, PSG_20 dw PSG_21, PSG_22, PSG_23, PSG_24 dw PSG_25, PSG_26, PSG_27, PSG_28 PSG_1: db 2, 83h PSG_2: db 0, 2, 4, 6, 8, 10h, 83h PSG_3: db 2, 1, 0, 0, 1, 2, 2, 2, 2, 2 db 2, 2, 2, 2, 2, 2, 2, 3, 3, 3 db 4, 4, 4, 5, 81h PSG_4: db 0, 0, 2, 3, 4, 4, 5, 5, 5, 6 db 6, 6, 6, 6, 6, 6, 6, 6, 7, 7 db 7, 7, 7, 7, 7, 7, 7, 8, 8, 8 db 8, 8, 8, 8, 8, 81h PSG_5: db 3, 0, 1, 1, 1, 2, 3, 4, 4, 5 db 81h PSG_6: db 0, 0, 1, 1, 2, 3, 4, 5, 5, 6 db 8, 7, 7, 6, 81h PSG_7: db 1, 0Ch, 3, 0Fh, 2, 7, 3, 0Fh, 80h PSG_8: db 0, 0, 0, 2, 3, 3, 4, 5, 6, 7 db 8, 9, 0Ah, 0Bh, 0Eh, 0Fh, 83h PSG_9: db 3, 2, 1, 1, 0, 0, 1, 2, 3, 4 db 81h PSG_A: db 1, 0, 0, 0, 0, 1, 1, 1, 2, 2 db 2, 3, 3, 3, 3, 4, 4, 4, 5, 5 db 81h PSG_B: db 10h, 20h, 30h, 40h, 30h, 20h, 10h, 0, 0F0h, 80h PSG_C: db 0, 0, 1, 1, 3, 3, 4, 5, 83h PSG_D: db 0, 81h PSG_E: db 2, 83h PSG_F: db 0, 2, 4, 6, 8, 10h, 83h PSG_10: db 9, 9, 9, 8, 8, 8, 7, 7, 7, 6 db 6, 6, 5, 5, 5, 4, 4, 4, 3, 3 db 3, 2, 2, 2, 1, 1, 1, 0, 0, 0 db 81h PSG_11: db 1, 1, 1, 0, 0, 0, 81h PSG_12: db 3, 0, 1, 1, 1, 2, 3, 4, 4, 5 db 81h PSG_13: db 0, 0, 1, 1, 2, 3, 4, 5, 5, 6 db 8, 7, 7, 6, 81h PSG_14: db 0Ah, 5, 0, 4, 8, 83h PSG_15: db 0, 0, 0, 2, 3, 3, 4, 5, 6, 7 db 8, 9, 0Ah, 0Bh, 0Eh, 0Fh, 83h PSG_16: db 3, 2, 1, 1, 0, 0, 1, 2, 3, 4 db 81h PSG_17: db 1, 0, 0, 0, 0, 1, 1, 1, 2, 2 db 2, 3, 3, 3, 3, 4, 4, 4, 5, 5 db 81h PSG_18: db 10h, 20h, 30h, 40h, 30h, 20h, 10h, 0, 10h, 20h db 30h, 40h, 30h, 20h, 10h, 0, 10h, 20h, 30h, 40h db 30h, 20h, 10h, 0, 80h PSG_19: db 0, 0, 1, 1, 3, 3, 4, 5, 83h PSG_1A: db 0, 2, 4, 6, 8, 16h, 83h PSG_1B: db 0, 0, 1, 1, 3, 3, 4, 5, 83h PSG_1C: db 4, 4, 4, 4, 3, 3, 3, 3, 2, 2 db 2, 2, 1, 1, 1, 1, 83h PSG_1D: db 0, 0, 0, 0, 1, 1, 1, 1, 2, 2 db 2, 2, 3, 3, 3, 3, 4, 4, 4, 4 db 5, 5, 5, 5, 6, 6, 6, 6, 7, 7 db 7, 7, 8, 8, 8, 8, 9, 9, 9, 9 db 0Ah, 0Ah, 0Ah, 0Ah, 81h PSG_1E: db 0, 0Ah, 83h PSG_1F: db 0, 2, 4, 81h PSG_20: db 30h, 20h, 10h, 0, 0, 0, 0, 0, 8, 10h db 20h, 30h, 81h PSG_21: db 0, 4, 4, 4, 4, 4, 4, 4, 4, 4 db 4, 6, 6, 6, 8, 8, 0Ah, 83h PSG_22: db 0, 2, 3, 4, 6, 7, 81h PSG_23: db 2, 1, 0, 0, 0, 2, 4, 7, 81h PSG_24: db 0Fh, 1, 5, 83h PSG_25: db 8, 6, 2, 3, 4, 5, 6, 7, 8, 9 db 0Ah, 0Bh, 0Ch, 0Dh, 0Eh, 0Fh, 10h, 83h PSG_26: db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 db 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 db 2, 2, 2, 2, 2, 2, 2, 2, 2, 2 db 3, 3, 3, 3, 3, 3, 3, 3, 3, 3 db 4, 4, 4, 4, 4, 4, 4, 4, 4, 4 db 5, 5, 5, 5, 5, 5, 5, 5, 5, 5 db 6, 6, 6, 6, 6, 6, 6, 6, 6, 6 db 7, 7, 7, 7, 7, 7, 7, 7, 7, 7 db 8, 8, 8, 8, 8, 8, 8, 8, 8, 8 db 9, 9, 9, 9, 9, 9, 9, 9, 83h PSG_27: db 0, 2, 2, 2, 3, 3, 3, 4, 4, 4 db 5, 5, 83h PSG_28: db 7, 1, 5, 6, 6, 3, 3, 2, 2, 1 db 1, 0, 0, 1, 2, 3, 4, 5, 6, 7 db 8, 9, 9, 9, 8, 7, 7, 6, 6, 6 db 6, 7, 8, 9, 0Ah, 0Bh, 0Ch, 0Dh, 0Eh, 0Fh db 0Fh, 83h As you can see, the differences include... S3->S&K PSG_26 is a bit shorter S&K->S3D PSG_4 is much longer PSG_28 has been added
Right, been a while since I've asked something but I'm not quite sure how to work this. How would I go about loading the HUD into the Special Stages in Sonic 1? I imagine the background art interferes with space so that would have to be removed I guess, but how would I load a HUD just for time and have it count down rather than forwards? I imagine loading the HUD would be similar to loading it normally, but the main thing I'm unsure about what bits would be unnecessary and the art space, as well as countdown reversal.
At VRAM F200 to F2DF (Tile 790 to 796) there is space for 7 tiles. Directly after it at VRAM F2E0 to F63F (tile 797 to 7B1) is unused "ZONE" icon art which occupies 1B tiles. This gives you a nice stretch of 480 bytes (24 tiles) altogether in one go. You also have at VRAM FA80 to FBFF (Tile 7D4 to 7DF) space where the lives HUD would be stored which isn't used in the special stage, this occupies C tiles. The in-level HUD takes up 35 tiles (including the spaces for numbers, but not including the lives HUD), you have 30 tiles in total to make do with. However, you say you only need the time counter? You'll have plenty of space, though at this stage you'd probably see it better through with new HUD code, rather than editing the original.