DEFINE_ACTION_FUNCTION(AActor, A_BurnArea) { PARAM_ACTION_PROLOGUE; P_RadiusAttack (self, self->target, 128, 128, self->DamageType, RADF_HURTSOURCE); return 0; }
void A_VolcBallImpact (AActor *ball) { int i; AActor *tiny; angle_t angle; if (ball->z <= ball->floorz) { ball->flags |= MF_NOGRAVITY; ball->gravity = FRACUNIT; ball->z += 28*FRACUNIT; //ball->momz = 3*FRACUNIT; } P_RadiusAttack (ball, ball->target, 25, 25, NAME_Fire, true); for (i = 0; i < 4; i++) { tiny = Spawn<AVolcanoTBlast> (ball->x, ball->y, ball->z, ALLOW_REPLACE); tiny->target = ball; angle = i*ANG90; tiny->angle = angle; angle >>= ANGLETOFINESHIFT; tiny->momx = FixedMul (FRACUNIT*7/10, finecosine[angle]); tiny->momy = FixedMul (FRACUNIT*7/10, finesine[angle]); tiny->momz = FRACUNIT + (pr_impact() << 9); P_CheckMissileSpawn (tiny); } }
DEFINE_ACTION_FUNCTION(AActor, A_VolcBallImpact) { unsigned int i; AActor *tiny; angle_t angle; if (self->z <= self->floorz) { self->flags |= MF_NOGRAVITY; self->gravity = FRACUNIT; self->z += 28*FRACUNIT; //self->velz = 3*FRACUNIT; } P_RadiusAttack (self, self->target, 25, 25, NAME_Fire, RADF_HURTSOURCE); for (i = 0; i < 4; i++) { tiny = Spawn("VolcanoTBlast", self->x, self->y, self->z, ALLOW_REPLACE); tiny->target = self; angle = i*ANG90; tiny->angle = angle; angle >>= ANGLETOFINESHIFT; tiny->velx = FixedMul (FRACUNIT*7/10, finecosine[angle]); tiny->vely = FixedMul (FRACUNIT*7/10, finesine[angle]); tiny->velz = FRACUNIT + (pr_volcimpact() << 9); P_CheckMissileSpawn (tiny, self->radius); } }
DEFINE_ACTION_FUNCTION(AActor, A_TimeBomb) { self->z += 32*FRACUNIT; self->RenderStyle = STYLE_Add; self->alpha = FRACUNIT; P_RadiusAttack (self, self->target, 128, 128, self->DamageType, RADF_HURTSOURCE); P_CheckSplash(self, 128<<FRACBITS); }
DEFINE_ACTION_FUNCTION(AActor, A_TimeBomb) { self->AddZ(32*FRACUNIT, false); self->PrevZ = self->Z(); // no interpolation! self->RenderStyle = STYLE_Add; self->alpha = FRACUNIT; P_RadiusAttack (self, self->target, 128, 128, self->DamageType, RADF_HURTSOURCE); P_CheckSplash(self, 128<<FRACBITS); }
DEFINE_ACTION_FUNCTION(AActor, A_TimeBomb) { PARAM_ACTION_PROLOGUE; self->AddZ(32, false); self->RenderStyle = STYLE_Add; self->Alpha = 1.; P_RadiusAttack (self, self->target, 128, 128, self->DamageType, RADF_HURTSOURCE); P_CheckSplash(self, 128); return 0; }
DEFINE_ACTION_FUNCTION(AActor, A_Explode512) { P_RadiusAttack (self, self->target, 512, 512, NAME_None, true); if (self->target != NULL && self->target->player != NULL) { self->target->player->extralight = 5; } P_CheckSplash(self, 512<<FRACBITS); // Strife didn't do this next part, but it looks good self->RenderStyle = STYLE_Add; }
DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_VileAttack) { ACTION_PARAM_START(7); ACTION_PARAM_SOUND(snd,0); ACTION_PARAM_INT(dmg,1); ACTION_PARAM_INT(blastdmg,2); ACTION_PARAM_INT(blastrad,3); ACTION_PARAM_FIXED(thrust,4); ACTION_PARAM_NAME(dmgtype,5); ACTION_PARAM_INT(flags,6); AActor *fire, *target; angle_t an; if (NULL == (target = self->target)) return; A_FaceTarget (self); if (!P_CheckSight (self, target, 0) ) return; S_Sound (self, CHAN_WEAPON, snd, 1, ATTN_NORM); int newdam; if (flags & VAF_DMGTYPEAPPLYTODIRECT) newdam = P_DamageMobj (target, self, self, dmg, dmgtype); else newdam = P_DamageMobj (target, self, self, dmg, NAME_None); P_TraceBleed (newdam > 0 ? newdam : dmg, target); an = self->angle >> ANGLETOFINESHIFT; fire = self->tracer; if (fire != NULL) { // move the fire between the vile and the player fire->SetOrigin (target->x - FixedMul (24*FRACUNIT, finecosine[an]), target->y - FixedMul (24*FRACUNIT, finesine[an]), target->z); P_RadiusAttack (fire, self, blastdmg, blastrad, dmgtype, 0); } if (!(target->flags7 & MF7_DONTTHRUST)) target->velz = Scale(thrust, 1000, target->Mass); }