- extended parameter list of A_BFGSpray.

This commit is contained in:
Christoph Oelckers 2014-09-27 09:36:38 +02:00
parent e025f40902
commit 68c481945a
2 changed files with 23 additions and 8 deletions

View file

@ -546,6 +546,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_FireBFG)
P_SpawnPlayerMissile (self, 0, 0, 0, PClass::FindClass("BFGBall"), self->angle, NULL, NULL, !!(dmflags2 & DF2_NO_FREEAIMBFG)); P_SpawnPlayerMissile (self, 0, 0, 0, PClass::FindClass("BFGBall"), self->angle, NULL, NULL, !!(dmflags2 & DF2_NO_FREEAIMBFG));
} }
// //
// A_BFGSpray // A_BFGSpray
// Spawn a BFG explosion on every monster in view // Spawn a BFG explosion on every monster in view
@ -559,14 +560,21 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_BFGSpray)
AActor *thingToHit; AActor *thingToHit;
AActor *linetarget; AActor *linetarget;
ACTION_PARAM_START(3); ACTION_PARAM_START(7);
ACTION_PARAM_CLASS(spraytype, 0); ACTION_PARAM_CLASS(spraytype, 0);
ACTION_PARAM_INT(numrays, 1); ACTION_PARAM_INT(numrays, 1);
ACTION_PARAM_INT(damagecnt, 2); ACTION_PARAM_INT(damagecnt, 2);
ACTION_PARAM_ANGLE(angle, 3);
ACTION_PARAM_FIXED(distance, 4);
ACTION_PARAM_ANGLE(vrange, 5);
ACTION_PARAM_INT(defdamage, 6);
if (spraytype == NULL) spraytype = PClass::FindClass("BFGExtra"); if (spraytype == NULL) spraytype = PClass::FindClass("BFGExtra");
if (numrays <= 0) numrays = 40; if (numrays <= 0) numrays = 40;
if (damagecnt <= 0) damagecnt = 15; if (damagecnt <= 0) damagecnt = 15;
if (angle == 0) angle = ANG90;
if (distance <= 0) distance = 16 * 64 * FRACUNIT;
if (vrange == 0) vrange = ANGLE_1 * 32;
// [RH] Don't crash if no target // [RH] Don't crash if no target
if (!self->target) if (!self->target)
@ -575,10 +583,10 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_BFGSpray)
// offset angles from its attack angle // offset angles from its attack angle
for (i = 0; i < numrays; i++) for (i = 0; i < numrays; i++)
{ {
an = self->angle - ANG90/2 + ANG90/numrays*i; an = self->angle - angle/2 + angle/numrays*i;
// self->target is the originator (player) of the missile // self->target is the originator (player) of the missile
P_AimLineAttack (self->target, an, 16*64*FRACUNIT, &linetarget, ANGLE_1*32); P_AimLineAttack (self->target, an, distance, &linetarget, vrange);
if (!linetarget) if (!linetarget)
continue; continue;
@ -589,10 +597,17 @@ DEFINE_ACTION_FUNCTION_PARAMS(AActor, A_BFGSpray)
if (spray && (spray->flags5 & MF5_PUFFGETSOWNER)) if (spray && (spray->flags5 & MF5_PUFFGETSOWNER))
spray->target = self->target; spray->target = self->target;
if (defdamage == 0)
damage = 0; {
for (j = 0; j < damagecnt; ++j) damage = 0;
damage += (pr_bfgspray() & 7) + 1; for (j = 0; j < damagecnt; ++j)
damage += (pr_bfgspray() & 7) + 1;
}
else
{
// if this is used, damagecnt will be ignored
damage = defdamage;
}
thingToHit = linetarget; thingToHit = linetarget;
int newdam = P_DamageMobj (thingToHit, self->target, self->target, damage, spray != NULL? FName(spray->DamageType) : FName(NAME_BFGSplash), int newdam = P_DamageMobj (thingToHit, self->target, self->target, damage, spray != NULL? FName(spray->DamageType) : FName(NAME_BFGSplash),

View file

@ -70,7 +70,7 @@ ACTOR Actor native //: Thinker
// End of MBF redundant functions. // End of MBF redundant functions.
action native A_MonsterRail(); action native A_MonsterRail();
action native A_BFGSpray(class<Actor> spraytype = "BFGExtra", int numrays = 40, int damagecount = 15); action native A_BFGSpray(class<Actor> spraytype = "BFGExtra", int numrays = 40, int damagecount = 15, float angle = 90, float distance = 16*64, float vrange = 32, int damage = 0);
action native A_Pain(); action native A_Pain();
action native A_NoBlocking(); action native A_NoBlocking();
action native A_XScream(); action native A_XScream();