Difference between revisions of "Sonic the Hedgehog CD/MMD Tweaking"
From Sonic Retro
(Converting byte_ and word_ to raw addresses) |
m (Text replacement - "{{SCHGuides}}" to "==References== <references /> {{SCHGuides}}") |
||
(6 intermediate revisions by 3 users not shown) | |||
Line 1: | Line 1: | ||
− | Here are some locations in | + | __NOTOC__ |
+ | {{SCHG SCD}} | ||
+ | Here are some locations in a European Sonic CD level MMD which contain tweakable code (in [[Motorola 68000]] assembly). | ||
==Maximum rings allowed== | ==Maximum rings allowed== | ||
− | <asm>$AEFA: | + | <syntaxhighlight lang="asm">$AEFA: |
move.w ($FF1512).l,d1 ; Move number of rings into d1 | move.w ($FF1512).l,d1 ; Move number of rings into d1 | ||
cmpi.w #$3E8,d1 ; Compare $3E8 (1000) with d1 (number of rings) | cmpi.w #$3E8,d1 ; Compare $3E8 (1000) with d1 (number of rings) | ||
bcs.s loc_20AF10 ; If the number of rings is < 1000, branch | bcs.s loc_20AF10 ; If the number of rings is < 1000, branch | ||
move.w #$3E7,d1 ; Move $3E7 (999) into d1 | move.w #$3E7,d1 ; Move $3E7 (999) into d1 | ||
− | move.w d1,($FF1512).l ; Move d1 back to the address where the number of rings is at</ | + | move.w d1,($FF1512).l ; Move d1 back to the address where the number of rings is at</syntaxhighlight> |
− | == | + | ==Minimum rings for Giant Ring== |
− | <asm>$D50C: | + | <syntaxhighlight lang="asm">$D50C: |
cmpi.w #$32,($FF1512).l ; Compare 50 with the number of rings | cmpi.w #$32,($FF1512).l ; Compare 50 with the number of rings | ||
bcc.s loc_20D51C ; If number of rings >= 50, allow entrance to the special stage. | bcc.s loc_20D51C ; If number of rings >= 50, allow entrance to the special stage. | ||
− | jmp sub_20788C ; Otherwise jump here</ | + | jmp sub_20788C ; Otherwise jump here</syntaxhighlight> |
− | == | + | ==Rings given by ring== |
− | <asm>$ | + | <syntaxhighlight lang="asm">$9F1A: |
− | + | addq.w #1,($FF1512).l ; Add 1 to number of rings</syntaxhighlight> | |
− | ==Invincibility duration | + | ==Rings given by Ring Monitor== |
− | <asm>$A8F8: | + | <syntaxhighlight lang="asm">$A88E: |
+ | addi.w #$A,($FF1512).l ; Add 10 to the current number of rings</syntaxhighlight> | ||
+ | |||
+ | ==Invincibility duration== | ||
+ | <syntaxhighlight lang="asm">$A8F8: | ||
move.b #1,($FF151F).l ; Enable invicibility | move.b #1,($FF151F).l ; Enable invicibility | ||
− | move.w #$ | + | move.w #$4B0,($FFFFD032).w ; Set the invincibility duration time to $4B0</syntaxhighlight> |
− | ==Super Sneakers duration | + | ==Super Sneakers duration== |
− | <asm>$A95A: | + | <syntaxhighlight lang="asm">$A95A: |
move.b #1,($FF1520).l ; Enable super sneakers | move.b #1,($FF1520).l ; Enable super sneakers | ||
− | move.w #$4B0,($FFFFD034).w ; Set the super sneakers duration time to $4B0</ | + | move.w #$4B0,($FFFFD034).w ; Set the super sneakers duration time to $4B0</syntaxhighlight> |
− | == | + | ==Regular speed stats== |
− | <asm>$4082: | + | <syntaxhighlight lang="asm">$4082: |
move.w #$600,($FFFFF760).w ; Maximum velocity | move.w #$600,($FFFFF760).w ; Maximum velocity | ||
− | move.w #$C,($FFFFF762).w ; Maximum | + | move.w #$C,($FFFFF762).w ; Maximum acceleration</syntaxhighlight> |
− | == | + | ==Super Sneakers speed stats== |
− | <asm>$A968: | + | <syntaxhighlight lang="asm">$A968: |
move.w #$C00,($FFFFF760).w ; Set maximum velocity to $C00 | move.w #$C00,($FFFFF760).w ; Set maximum velocity to $C00 | ||
− | move.w #$18,($FFFFF762).w ; Set maximum | + | move.w #$18,($FFFFF762).w ; Set maximum acceleration to $18</syntaxhighlight> |
− | |||
− | |||
− | |||
+ | ==References== | ||
+ | <references /> | ||
{{SCHGuides}} | {{SCHGuides}} | ||
− |
Latest revision as of 15:50, 24 March 2020
SCHG: Sonic the Hedgehog CD |
---|
Main Article |
File Locations |
File Locations |
Art Editing |
Editing Art |
MMD Tweaking |
Tweaking MMDs |
RAM Editing |
RAM Editing |
Here are some locations in a European Sonic CD level MMD which contain tweakable code (in Motorola 68000 assembly).
Maximum rings allowed
$AEFA:
move.w ($FF1512).l,d1 ; Move number of rings into d1
cmpi.w #$3E8,d1 ; Compare $3E8 (1000) with d1 (number of rings)
bcs.s loc_20AF10 ; If the number of rings is < 1000, branch
move.w #$3E7,d1 ; Move $3E7 (999) into d1
move.w d1,($FF1512).l ; Move d1 back to the address where the number of rings is at
Minimum rings for Giant Ring
$D50C:
cmpi.w #$32,($FF1512).l ; Compare 50 with the number of rings
bcc.s loc_20D51C ; If number of rings >= 50, allow entrance to the special stage.
jmp sub_20788C ; Otherwise jump here
Rings given by ring
$9F1A:
addq.w #1,($FF1512).l ; Add 1 to number of rings
Rings given by Ring Monitor
$A88E:
addi.w #$A,($FF1512).l ; Add 10 to the current number of rings
Invincibility duration
$A8F8:
move.b #1,($FF151F).l ; Enable invicibility
move.w #$4B0,($FFFFD032).w ; Set the invincibility duration time to $4B0
Super Sneakers duration
$A95A:
move.b #1,($FF1520).l ; Enable super sneakers
move.w #$4B0,($FFFFD034).w ; Set the super sneakers duration time to $4B0
Regular speed stats
$4082:
move.w #$600,($FFFFF760).w ; Maximum velocity
move.w #$C,($FFFFF762).w ; Maximum acceleration
Super Sneakers speed stats
$A968:
move.w #$C00,($FFFFF760).w ; Set maximum velocity to $C00
move.w #$18,($FFFFF762).w ; Set maximum acceleration to $18
References