Actions

SCHG How-to

Fix the HUD blinking

From Sonic Retro

Revision as of 16:35, 11 July 2020 by Pmowery (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

(Original guide by Quickman)

There's a bug in the HUD in Sonic 1 - the timer is supposed to blink if there's less than a minute left to go, which it does if you have no rings, but as soon as you collect a ring it stops blinking. That's silly, so let's fix it.

Hivebrain's 2005 disassembly

(Addition by Vanya)

Go to "Obj21_Flash:" and replace this:

Obj21_Flash:				; XREF: Obj21_Main
		tst.w	($FFFFFE20).w	; do you have any rings?
		beq.s	Obj21_Flash2	; if not, branch
		clr.b	$1A(a0)		; make all counters yellow
		jmp	DisplaySprite
; ===========================================================================

Obj21_Flash2:
		moveq	#0,d0
		btst	#3,($FFFFFE05).w
		bne.s	Obj21_Display
		addq.w	#1,d0		; make ring counter flash red
		cmpi.b	#9,($FFFFFE23).w ; have	9 minutes elapsed?
		bne.s	Obj21_Display	; if not, branch
		addq.w	#2,d0		; make time counter flash red

Obj21_Display:
		move.b	d0,$1A(a0)
		jmp	DisplaySprite

with this:

Obj21_Flash:				; XREF: Obj21_Main
		moveq	#0,d0
		btst	#3,($FFFFFE05).w
		bne.s	Obj21_Display
		tst.w	($FFFFFE20).w	; do you have any rings?
		bne.s	Obj21_Flash2	; if not, branch
		addq.w	#1,d0		; make ring counter flash red
; ===========================================================================

Obj21_Flash2:
		cmpi.b	#9,($FFFFFE23).w ; have	9 minutes elapsed?
		bne.s	Obj21_Display	; if not, branch
		addq.w	#2,d0		; make time counter flash red

Obj21_Display:
		move.b	d0,$1A(a0)
		jmp	DisplaySprite

SVN/GitHub disassembly

Open _incObj/21 HUD.asm and replace this:

HUD_Flash:	; Routine 2
		tst.w	(v_rings).w	; do you have any rings?
		beq.s	@norings	; if not, branch
		clr.b	obFrame(a0)	; make all counters yellow
		jmp	DisplaySprite
; ===========================================================================

@norings:
		moveq	#0,d0
		btst	#3,(v_framebyte).w
		bne.s	@display
		addq.w	#1,d0		; make ring counter flash red
		cmpi.b	#9,(v_timemin).w ; have	9 minutes elapsed?
		bne.s	@display	; if not, branch
		addq.w	#2,d0		; make time counter flash red

	@display:
		move.b	d0,obFrame(a0)
		jmp	DisplaySprite

with this:

HUD_Flash:	; Routine 2
		moveq	#0,d0
		btst	#3,(v_framebyte).w
		bne.s	@display
		tst.w	(v_rings).w	; do you have any rings?
		bne.s	@norings	; if so, branch
		addq.w	#1,d0		; make ring counter flash red
; ===========================================================================

@norings:
		cmpi.b	#9,(v_timemin).w ; have	9 minutes elapsed?
		bne.s	@display	; if not, branch
		addq.w	#2,d0		; make time counter flash red

	@display:
		move.b	d0,obFrame(a0)
		jmp	DisplaySprite
SCHG How-To Guide: Sonic the Hedgehog (16-bit)
Fixing Bugs
Fix Demo Playback | Fix a Race Condition with Pattern Load Cues | Fix the SEGA Sound | Display the Press Start Button Text | Fix the Level Select Menu | Fix the Hidden Points Bug | Fix Accidental Deletion of Scattered Rings | Fix Ring Timers | Fix the Walk-Jump Bug | Correct Drowning Bugs | Fix the Death Boundary Bug | Fix the Camera Follow Bug | Fix Song Restoration Bugs | Fix the HUD Blinking | Fix the Level Select Graphics Bug | Fix a remember sprite related bug
Changing Design Choices
Change Spike Behavior | Collide with Water After Being Hurt | Fix Special Stage Jumping Physics | Improve the Fade In\Fade Out Progression Routines | Fix Scattered Rings' Underwater Physics | Remove the Speed Cap | Port the REV01 Background Effects | Port Sonic 2's Level Art Loader | Retain Rings Between Acts | Add Sonic 2 (Simon Wai Prototype) Level Select | Improve ObjectMove Subroutines | Port Sonic 2 Level Select
Adding Features
Add Spin Dash ( Part 1 / Part 2 / Part 3 / Part 4 ) | Add Eggman Monitor | Add Super Sonic | Add the Air Roll
Sound Features
Expand the Sound Index | Play Different Songs Per Act | Port Sonic 2 Final Sound Driver | Port Sonic 3's Sound Driver | Port Flamewing's Sonic 3 & Knuckles Sound Driver | Change The SEGA Sound
Extending the Game
Load Chunks From ROM | Add Extra Characters | Make an Alternative Title Screen | Use Dynamic Tilesets | Make GHZ Load Alternate Art | Make Ending Load Alternate Art | Add a New Zone | Set Up the Goggle Monitor | Add New Moves | Add a Dynamic Collision System | Dynamic Special Stage Walls System | Extend Sprite Mappings and Art Limit | Enigma Credits | Use Dynamic Palettes
Miscellaneous
Convert the Hivebrain 2005 Disassembly to ASM68K
Split Disassembly Guides
Set Up a Split Disassembly | Basic Level Editing | Basic Art Editing | Basic ASM Editing (Spin Dash)

|Fix the HUD Blinking]]