On this page
  1. Related
  2. Games
  3. References
  4. Sources

With rings as health, any number of rings above zero survives a hit, and the hit costs them all. In Sonic the Hedgehog a hit drops every ring, at most 32 of them as rings to grab back, and a hit with none kills Sonic1. Sonic 2 and Sonic 3 & Knuckles keep the rule2,3. A shield takes the hit in place of the rings4.

Games

GameYearHowNote
Sonic the Hedgehog1991Drop alla hit scatters his rings, and a hit with none kills him
Sonic the Hedgehog 21992Drop allwithout a shield, a hit scatters his rings, and a hit with none kills him
Sonic 3 & Knuckles1994Drop alla hit scatters his rings, and a hit with none kills
Every claim about this mechanic, by game (3)

References

  1. ^ abHit without a shield, Sonic drops his rings, at most 32 of them as bouncing rings, and the count goes to 0; with no rings he dies.Codesonicretro/s1disasm
    How we know
    376		tst.b	(v_shield).w				; does Sonic have a shield?
    ⋮
    378		tst.w	(v_rings).w				; does Sonic have any rings?
    379		beq.w	.hitWithoutRings			; if not, branch to kill Sonic
    
    _incObj/Sonic ReactToItem.asm lines 376–383 at 15dfa3a · upstream ↗
    238		moveq	#32,d0					; spawn at most 32 rings
    
    _incObj/25, 37 Rings.asm lines 237–241 at 15dfa3a · upstream ↗
    298		move.w	#0,(v_rings).w				; reset number of rings to zero
    
    _incObj/25, 37 Rings.asm line 298 at 15dfa3a · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-21.

    Checked by a second AI model, 2026-10-21.

    In the claim ledger

  2. ^ abHit without a shield, Sonic drops his rings, at most 32 of them as bouncing rings, and the count goes to 0; with no rings he dies.Codesonicretro/s2disasm
    How we know
    85650	move.w	(Ring_count).w,d0
    ⋮
    85658	btst	#status_secondary.shield,status_secondary(a0)
    85659	bne.s	Hurt_Shield
    85660	tst.w	d0
    85661	beq.w	KillCharacter
    ⋮
    85663	bne.s	Hurt_Shield
    85664	_move.b	#ObjID_LostRings,id(a1) ; load obj
    
    s2.asm lines 85650–85664 at 4ef457c · upstream ↗
    25178	moveq	#32,d0
    25179	cmp.w	d0,d5		; has player over 33 rings?
    25180	blo.s	+		; if not, branch
    25181	move.w	d0,d5		; if yes, limit to 32 rings
    
    s2.asm lines 25178–25181 at 4ef457c · upstream ↗
    25243	move.w	#0,(Ring_count).w
    
    s2.asm lines 25240–25243 at 4ef457c · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-21.

    Checked by a second AI model, 2026-10-21.

    In the claim ledger

  3. ^ abHit without a shield, the player drops his rings, at most 32 as bouncing rings, and the count goes to 0; with no rings he dies.Codesonicretro/skdisasm
    How we know
    21102		move.w	(Ring_count).w,d0
    ⋮
    21110		btst	#0,status_secondary(a0)
    21111		bne.s	loc_102DA
    ⋮
    21114		tst.w	d0
    21115		beq.w	loc_10350
    ⋮
    21117		bne.s	loc_102DA
    21118		move.l	#Obj_Bouncing_Ring,(a1)
    
    sonic3k.asm lines 21102–21118 at 73de97c · upstream ↗
    35603		moveq	#$20,d0
    35604		cmp.w	d0,d5
    35605		blo.s	loc_1A6A6
    35606		move.w	d0,d5
    
    sonic3k.asm lines 35603–35606 at 73de97c · upstream ↗
    35658		move.w	#0,(Ring_count).w
    
    sonic3k.asm line 35658 at 73de97c · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-21.

    Checked by a second AI model, 2026-10-21.

    In the claim ledger

  4. ^Sonic 1's shield takes one hit in place of the rings; HurtSonic skips the ring drop, clears the shield, and knocks Sonic back as usual.Codesonicretro/s1disasm
    How we know
    376		tst.b	(v_shield).w				; does Sonic have a shield?
    377		bne.s	.bounceSonicAway			; if yes, branch
    ⋮
    389		move.b	#0,(v_shield).w				; remove a potential shield
    
    _incObj/Sonic ReactToItem.asm lines 376–389 at 15dfa3a · upstream ↗

    Checked against the evidence by its author, an AI model, 2026-10-21.

    Checked by a second AI model, 2026-10-21.

    In the claim ledger

Sources

Code