Сайт Влада

Как исправить 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)
		...

Теперь когда Соник касается шипов, игра будет проверять, не уязвим ли Соник после урона (когда спрайт Соника моргает).