Как исправить Spike Bug
Spike Bug в первом Сонике заключается в том, что игра не проверяет соника на неуязвимость после повреждения (когда спрайт Соника моргает). Из-за этого после попадания на спики, Вас ждет верная смерть (если соника, конечно, не отбросит с их поля), тогда соник потеряет защитную сферу (shield), кольца, а потом жизнь. В последующих играх серии этот баг был исправлен.
Убрать Spike Bug очень просто. Откройте исходный код игры и найдите в нем суброутину Obj36_Hurt. Вот начало ее первоначального кода:
<asm>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) ...</asm>
Чтобы исправить баг, нам нужно добавить всего две строчки:
<asm>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) ...</asm>
Теперь когда Соник касается спик, игра будет проверять, не уязвим ли Соник после повреждения (когда спрайт Соника моргает).