Как исправить Spike Bug
Автор гида: FraGag, Перевод на русский язык: vladikcomperОригинальный гид: «SCHG How-to:Change Spike behavior in Sonic 1»
Spike Bug в первом Сонике заключается в том, что игра не проверяет соника на неуязвимость после повреждения (когда спрайт Соника моргает). Из-за этого после попадания на шипы, Вас ждет верная смерть (если вы застрянете между ними), тогда Соник потеряет защитную сферу (shield), кольца, а потом жизнь. В последующих играх серии этот баг был исправлен.
Убрать Spike Bug очень просто. Откройте исходный код игры и найдите в нем суброутину Obj36_Hurt. Вот начало ее первоначального кода:
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) ...
Чтобы исправить баг, нам нужно добавить всего две строчки:
Obj36_Hurt: ; XREF: Obj36_SideWays; Obj36_Upright tst.b ($FFFFFE2D).w ; is Sonic invincible? bne.s Obj36_Display ; if yes, branch tst.w ($FFFFD030).w ; +++ is Sonic invulnerable? bne.s Obj36_Display ; +++ if yes, branch move.l a0,-(sp) ...
Теперь когда Соник касается шипов, игра будет проверять, не уязвим ли Соник после урона (когда спрайт Соника моргает).