MENU
Главная » Статьи » Гайды по хакингу Sonic 1

Сохранение колец между актами

 

 

В истории соника было достаточно немало решений разработчиков, которые не нравились большому количеству игроков. Достаточного ярким примером этого можно считать обнуление счетчика колец между актами. В предложенном гайде мы сделаем так, что бы кольца сохранялись. Итак, приступим!



Для начала найдём локрет "Level_LoadObj" и увидим там приблизительно такое содержание:

 

Level_LoadObj: 

jsr ObjPosLoad 

jsr ObjectsLoad 

jsr BuildSprites 

moveq #0,d0 

tst.b ($FFFFFE30).w ; are you starting from a lamppost? 

bne.s loc_39E8 ; if yes, branch 

move.w d0,($FFFFFE20).w ; clear rings 

move.l d0,($FFFFFE22).w ; clear time 

move.b d0,($FFFFFE1B).w ; clear lives counter


Найдите, а затем удалите или просто закомментируйте следующую строку:
 

move.w d0,($FFFFFE20).w ; clear rings

Итак, пол дела сделано. Теперь наш герой будет сохранять кольца между уровнями, однако если он умрёт, не потеряв кольца (методом утопления, падения в пропасть или просто придавливания чем-либо), то кольца сохранятся у нас даже после смерти. 


Для того, чтобы исправить данную проблему, перейдите к локрету "KillSonic".  В нём вы должны будете увидеть представленный ниже текст:

KillSonic: 

tst.w ($FFFFFE08).w ; is debug mode active? 

bne.s Kill_NoDeath ; if yes, branch 

move.b #0,($FFFFFE2D).w ; remove invincibility 

move.b #6,$24(a0) 

bsr.w Sonic_ResetOnFloor 

bset #1,$22(a0) 

move.w #-$700,$12(a0) 

move.w #0,$10(a0) 

move.w #0,$14(a0) 

move.w $C(a0),$38(a0) 

move.b #$18,$1C(a0) 

bset #7,2(a0) 

move.w #$A3,d0 ; play normal death sound 

cmpi.b #$36,(a2) ; check if you were killed by spikes 

bne.s Kill_Sound 

move.w #$A6,d0 ; play spikes death sound

Для того, чтобы отбирать у соника кольца при смерти, просто добавьте строчку...

 move.w #0,($FFFFFE20).w ; clear rings

 

...перед строкой:
 

move.b #0,($FFFFFE2D).w ; remove invincibility

Итог

В итоге должно получится:
 

Level_LoadObj: 

jsr ObjPosLoad 

jsr ObjectsLoad 

jsr BuildSprites 

moveq #0,d0 

tst.b ($FFFFFE30).w ; are you starting from a lamppost? 

bne.s loc_39E8 ; if yes, branch 

move.l d0,($FFFFFE22).w ; clear time 

move.b d0,($FFFFFE1B).w ; clear lives counter

 

KillSonic: 

tst.w ($FFFFFE08).w ; is debug mode active? 

bne.s Kill_NoDeath ; if yes, branch 

move.w #0,($FFFFFE20).w ; clear rings 

move.b #0,($FFFFFE2D).w ; remove invincibility 

move.b #6,$24(a0) 

bsr.w Sonic_ResetOnFloor 

bset #1,$22(a0) 

move.w #-$700,$12(a0) 

move.w #0,$10(a0) 

move.w #0,$14(a0) 

move.w $C(a0),$38(a0) 

move.b #$18,$1C(a0) 

bset #7,2(a0) 

move.w #$A3,d0 ; play normal death sound 

cmpi.b #$36,(a2) ; check if you were killed by spikes 

bne.s Kill_Sound 

move.w #$A6,d0 ; play spikes death sound


Источник: https://vk.com/page-70484545_52165695
Категория: Гайды по хакингу Sonic 1 | Добавил: surdno (19.08.2016)
Просмотров: 425 | Рейтинг: 0.0/0
Всего комментариев: 0
avatar