||This article or section is incomplete. It doesn't have all of the necessary core information on this topic. Please help the SRB2 Wiki by finishing this article.
A_SuperFireShot is an action that makes the actor fire an Object at the target. It is identical to
A_FireShot, except that players in their Super form are not immune to it (the fired object is given
MF2_SUPERFIRE). Var1 determines the Object type the actor fires. Var2 determines the height offset the chosen Object is fired from, relative to a default offset of 48 fracunits above the bottom of the actor (negative values can be used). When the actor fires the chosen Object, the
SeeSound of the fired Object is played.
After firing, the actor's reaction time is set to a new value determined by the actor's
ReactionTime. Normally, the reaction time is set to a value of
ReactionTime*TICRATE*2 (or 2×
ReactionTime seconds). In Ultimate mode, it is set to
ReactionTime seconds) instead. However, if the actor has
MF_BOSS, the actor's reaction time will not be changed.
SeeSound (of Object being shot)
|Played when fired
|New reaction time (|
ReactionTime*TICRATE in Ultimate mode)
Code – A_SuperFireShot
// Function: A_SuperFireShot
// Description: Shoot an object at your target that will even stall Super Sonic.
// var1 = object # to shoot
// var2 = height offset
void A_SuperFireShot(mobj_t *actor)
INT32 locvar1 = var1;
INT32 locvar2 = var2;
if (LUA_CallAction("A_SuperFireShot", actor))
if (actor->eflags & MFE_VERTICALFLIP)
z = actor->z + actor->height - FixedMul(48*FRACUNIT + locvar2*FRACUNIT, actor->scale);
z = actor->z + FixedMul(48*FRACUNIT + locvar2*FRACUNIT, actor->scale);
mo = P_SpawnXYZMissile(actor, actor->target, locvar1, actor->x, actor->y, z);
mo->flags2 |= MF2_SUPERFIRE;
if (!(actor->flags & MF_BOSS))
actor->reactiontime = actor->info->reactiontime*TICRATE;
actor->reactiontime = actor->info->reactiontime*TICRATE*2;