Rings as health
A health system in which collected rings stand between the character and death, a hit scattering them instead of killing.
On this page
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.
- Drop allSonic the Hedgehog (1991). A hit scatters his rings, and a hit with none kills him.1Sonic the Hedgehog 2 (1992). Without a shield, a hit scatters his rings, and a hit with none kills him.2Sonic 3 & Knuckles (1994). A hit scatters his rings, and a hit with none kills.3
Games
| Game | Year | How | Note |
|---|---|---|---|
| Sonic the Hedgehog | 1991 | Drop all | a hit scatters his rings, and a hit with none kills him |
| Sonic the Hedgehog 2 | 1992 | Drop all | without a shield, a hit scatters his rings, and a hit with none kills him |
| Sonic 3 & Knuckles | 1994 | Drop all | a hit scatters his rings, and a hit with none kills |
Every claim about this mechanic, by game (3)
References
- ^ 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.
- ^ 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).ws2.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.
- ^ 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).wsonic3k.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.
- ^Sonic 1's shield takes one hit in place of the rings;
HurtSonicskips the ring drop, clears the shield, and knocks Sonic back as usual.Codesonicretro/s1disasmHow 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.
Sources
Code
- Sonic Retro contributors. 2026. “s1disasm: Sonic the Hedgehog (16-bit) disassembly (sonicretro/s1disasm).” Commit 15dfa3a. sonicretro/s1disasm @ 15dfa3a · licence, all uses
- Sonic Retro contributors. 2026. “s2disasm: Sonic the Hedgehog 2 (16-bit) disassembly (sonicretro/s2disasm).” Commit 4ef457c. sonicretro/s2disasm @ 4ef457c · licence, all uses
- Sonic Retro contributors. 2026. “skdisasm: Sonic 3 & Knuckles disassembly (sonicretro/skdisasm).” Commit 73de97c. sonicretro/skdisasm @ 73de97c · licence, all uses