Mechanic · combat
Projectile
A shot or thrown object that travels through the world over frames and hits what it touches, unlike a hitscan.
A projectile is an object of its own: it appears at the shooter, moves each frame, and checks for a hit as it goes. Its speed and path decide how a player dodges it, unlike a hitscan attack, which hits at once.
- BallisticSuper Mario Bros. 3 (1988). Fire Mario's fireballs start downward and the Hammer Suit's hammers upward.1
Games
| Game | Year | How | Note |
|---|---|---|---|
| Super Mario Bros. 3 | 1988 | Ballistic | Fire Mario's fireballs start downward and the Hammer Suit's hammers upward |
References
- ^With the Fire Flower or the Hammer Suit, a press of B throws a weapon unless Mario is ducking, kicking, in a pipe, or the game is halted: Fire Mario's fireball starts downward, the Hammer Suit's hammer upward. Ducking in the Hammer Suit, the fireballs of Piranha Plants, Nippers, Fire Bros., and Fire Chomps collide with him as if he had a Starman's invincibility, which destroys the fireball instead of hurting him.CodeSouthbird's SMB3 disassembly
How we know
479 CMP #PLAYERSUIT_HAMMER 480 BEQ PRG007_A251 ; If Player is wearing a Hammer Suit, jump to PRG007_A251 ⋮ 482 CMP #PLAYERSUIT_FIRE 483 BNE PRG007_A268 ; If Player is not Fire, jump to PRG007_A268 ⋮ 485PRG007_A251: ⋮ 487 ; Player wearing a Hammer Suit or Fire ⋮ 489 LDA Player_HaltTick ; If Player is not halted ... 490 ORA Player_IsDucking ; ... Player is ducking ... 491 ORA Player_Kick ; ... Player is kicking ... 492 ORA Player_InPipe ; ... Player is in a pipe ... 493 ORA <Player_HaltGame ; ... gameplay is halted ... 494 BNE PRG007_A268 ; ... then jump to PRG007_A268 ⋮
PRG/prg007.asm lines 479–499 at 09b1bd8 · upstream ↗ 586 LDA #$01 ; A = 1 ⋮ 588 LDY <Player_Suit 589 CPY #PLAYERSUIT_HAMMER 590 SEC ; Set carry (if NOT wearing the hammer suit) 591 BNE PRG007_A2E3 ; If Player is NOT wearing the Hammer Suit, jump to PRG007_A2E3 592 ASL A ; Clears carry, also A = 2 593PRG007_A2E3: 594 STA PlayerProj_ID,X ; Set projectile as type 1 or 2 ⋮ 596 ; Set Player Projectile Y velocity 597 LDA #$03 ; A = $03 (Fireballs are thrown down) 598 BCS PRG007_A2EC ; If Player is NOT wearing Hammer Suit, jump to PRG007_A2EC 599 LDA #-$03 ; A = -$03 (Hammers are thrown up) ⋮
PRG/prg007.asm lines 586–601 at 09b1bd8 · upstream ↗ 3184 .word SObj_Fireball ; 04: Nipper fireball 3185 .word SObj_Fireball ; 05: Piranha fireball ⋮ 3192 .word SObj_Fireball ; 0C: Fire bro bouncing fireball ⋮ 3198 .word SObj_Fireball ; 12: Fire Chomp's fire
PRG/prg007.asm lines 3184–3198 at 09b1bd8 · upstream ↗ 5213PRG007_BA6E: ⋮ 5215 ; Set fireball attributes 5216 STA Sprite_RAM+$02,Y ⋮ 5218 LDX <SlotIndexBackup ; X = special object slot index ⋮ 5220 LDA <Player_Suit 5221 CMP #$06 5222 BNE PRG007_BA8F ; If Player is not wearing the Hammer Suit, jump to PRG007_BA8F ⋮ 5224 LDA Player_IsDucking 5225 BEQ PRG007_BA8F ; If Player is NOT ducking (immunity to fireballs), jump to PRG007_BA8F ⋮ 5227 LDA Player_StarInv 5228 PHA ; Save Player's Star Man invincibility status ⋮ 5230 ; Collide with it like Player were invincible! (Visually the shell protects him) ⋮
PRG/prg007.asm lines 5213–5242 at 09b1bd8 · upstream ↗ 4805PRG007_B836: 4806 LDA Player_StarInv 4807 BNE PRG007_B844 ; If Player is Star Man invincible, jump to PRG007_B844 ⋮ 4809 JMP Player_GetHurt ; Hurt Player and don't come back! ⋮ 4811SpecialObj_Remove: ⋮ 4813 ; Remove special object 4814 LDA #$00 4815 STA SpecialObj_ID,X ⋮ 4817PRG007_B843: 4818 RTS ; Return ⋮ 4820PRG007_B844: ⋮ 4822 ; Player is invincible; destroy the special object! ⋮
PRG/prg007.asm lines 4805–4824 at 09b1bd8 · upstream ↗ Checked against the evidence by its author, an AI model, 2026-10-26.
Checked by a second AI model, 2026-10-26.