Due to our recent technical difficulties, we only have 60 percent of our images and files working. The Sonic Retro staff is working as fast as they can to restore these documents. Please do not report broken links at this time.
SCHG:Sonic Jam 6/ROM Editing
From Sonic Retro
| SCHG: Sonic Jam 6 |
|---|
| Main Article |
| ROM Editing |
| Editing ROM |
| RAM Editing |
| Editing RAM |
| Art Editing |
| Editing Art |
| Value Reference |
| Value Reference |
Values
| Offset | Description | Note |
|---|---|---|
| 0x1430 | Array which contains music numbers for each map (WORD ARRAY). | |
| 0x0ad2 | Demo properties (structure array, 0xe bytes long). |
|
| 0x0dde | Level map world-level number (structure array, 0x4 bytes long). |
|
Functions
Title Screen Functions
Button check
Level Functions
Bonus Level
| Offset | Instruction | Comment |
|---|---|---|
| ROM:0000780A | move.w d3,d0 | |
| ROM:0000780C | mulu.w #$20,d0 | |
| ROM:00007810 | cmpi.w #0,4(a6,d0.w) | |
| ROM:00007816 | bne.w loc_792A | |
| ROM:0000781A | cmpi.w #2,(word_FF0042).l | Compare 2 with current level map number |
| ROM:00007822 | beq.w loc_7836 | If level map number is 2, branch |
| ROM:00007826 | cmpi.w #5,(word_FF0042).l | Compare 5 with current level map number |
| ROM:0000782E | beq.w loc_7836 | If level map number is 5, branch |
| ROM:00007832 | bra.w loc_7842 |
As you can clearly see, level map number 2 and 5 are respectively the Level 1-1 bonus, and the Level 1-2 bonus. This makes the level not restart after exiting out of this level and returning to the main one, making it appear as a single level. Adding another level to the list should be as simple as adding a cmp instruction and branching accordingly.
Sound Driver Functions
The first two routines described below are easy to use subroutines which can be used respectively to play a background music or a sound effect. They handle calling the sound driver for you.
The BGM one is used by loading a word containing a music number from 0x0000 to 0x00FF into the address $ff6c00, and by jumping to it with a jump or branch to subroutine.
The SFX one works the same as the BGM one, but a sfx number is loaded into address $ff6c02.
The first line of the functions is their starting address.
Play BGM
| Offset | Instruction | Comment |
|---|---|---|
| ROM:000EE76C | move.w d0,-(sp) | Save d0 onto stack |
| ROM:000EE76E | move.w #0,d0 | Move 0 into d0 |
| ROM:000EE772 | move.b (word_FF6C00+1).l,d0 | Move lower byte of word at ff6c00 into lower byte of d0 |
| ROM:000EE778 | move.w d0,(word_FF6D00).l | Move d0 into address $ff6d00 |
| ROM:000EE77E | jsr sound_driver_play | Go to sub_F004C subroutine |
| ROM:000EE784 | move.w (sp)+,d0 | Load d0 from stack |
| ROM:000EE786 | rts | Return (from this Subroutine) |
Play SFX
| Offset | Instruction | Comment |
|---|---|---|
| ROM:000EE788 | move.w d0,-(sp) | Save d0 onto stack |
| ROM:000EE78A | move.w #$8000,d0 | Move $8000 into d0 |
| ROM:000EE78E | move.b (word_FF6C02+1).l,d0 | Move lower byte of word at $ff6c02 into lower byte of d0 |
| ROM:000EE794 | move.w d0,(word_FF6D00).l | Move d0 into word at address $ff6d00 (sound driver related) |
| ROM:000EE79A | jsr sound_driver_play | Jump to (sound driver play?) subroutine |
| ROM:000EE7A0 | move.w (sp)+,d0 | Load d0 from stack |
| ROM:000EE7A2 | rts | Return (from this Subroutine) |


