mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-22 12:11:25 +00:00
Add species parameter to A_RadiusThrust
This is the last parameter for A_RadiusThrust() DECORATE function. If it is omitted or none, then A_RadiusThrust will behave as usual. If it is set for some species name, it witt thrust only that species. Of course, these species should be +VULNERABLE to be thrustable.
This commit is contained in:
parent
df3dc91514
commit
5720a54da4
5 changed files with 14 additions and 8 deletions
|
@ -406,7 +406,7 @@ enum
|
||||||
};
|
};
|
||||||
int P_GetRadiusDamage(AActor *self, AActor *thing, int damage, int distance, int fulldmgdistance, bool oldradiusdmg);
|
int P_GetRadiusDamage(AActor *self, AActor *thing, int damage, int distance, int fulldmgdistance, bool oldradiusdmg);
|
||||||
int P_RadiusAttack (AActor *spot, AActor *source, int damage, int distance,
|
int P_RadiusAttack (AActor *spot, AActor *source, int damage, int distance,
|
||||||
FName damageType, int flags, int fulldamagedistance=0);
|
FName damageType, int flags, int fulldamagedistance=0, FName species = NAME_None);
|
||||||
|
|
||||||
void P_DelSeclist(msecnode_t *, msecnode_t *sector_t::*seclisthead);
|
void P_DelSeclist(msecnode_t *, msecnode_t *sector_t::*seclisthead);
|
||||||
void P_DelSeclist(portnode_t *, portnode_t *FLinePortal::*seclisthead);
|
void P_DelSeclist(portnode_t *, portnode_t *FLinePortal::*seclisthead);
|
||||||
|
|
|
@ -5879,7 +5879,7 @@ int P_GetRadiusDamage(AActor *self, AActor *thing, int damage, int distance, int
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
int P_RadiusAttack(AActor *bombspot, AActor *bombsource, int bombdamage, int bombdistance, FName bombmod,
|
int P_RadiusAttack(AActor *bombspot, AActor *bombsource, int bombdamage, int bombdistance, FName bombmod,
|
||||||
int flags, int fulldamagedistance)
|
int flags, int fulldamagedistance, FName species)
|
||||||
{
|
{
|
||||||
if (bombdistance <= 0)
|
if (bombdistance <= 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -5927,6 +5927,11 @@ int P_RadiusAttack(AActor *bombspot, AActor *bombsource, int bombdamage, int bom
|
||||||
)
|
)
|
||||||
) continue;
|
) continue;
|
||||||
|
|
||||||
|
if((species != NAME_None) && (thing->Species != species))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
targets.Push(thing);
|
targets.Push(thing);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1243,9 +1243,9 @@ DEFINE_ACTION_FUNCTION_NATIVE(AActor, GetRadiusDamage, P_GetRadiusDamage)
|
||||||
ACTION_RETURN_INT(P_GetRadiusDamage(self, thing, damage, distance, fulldmgdistance, oldradiusdmg));
|
ACTION_RETURN_INT(P_GetRadiusDamage(self, thing, damage, distance, fulldmgdistance, oldradiusdmg));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int RadiusAttack(AActor *self, AActor *bombsource, int bombdamage, int bombdistance, int damagetype, int flags, int fulldamagedistance)
|
static int RadiusAttack(AActor *self, AActor *bombsource, int bombdamage, int bombdistance, int damagetype, int flags, int fulldamagedistance, int species)
|
||||||
{
|
{
|
||||||
return P_RadiusAttack(self, bombsource, bombdamage, bombdistance, ENamedName(damagetype), flags, fulldamagedistance);
|
return P_RadiusAttack(self, bombsource, bombdamage, bombdistance, ENamedName(damagetype), flags, fulldamagedistance, ENamedName(species));
|
||||||
}
|
}
|
||||||
|
|
||||||
DEFINE_ACTION_FUNCTION_NATIVE(AActor, RadiusAttack, RadiusAttack)
|
DEFINE_ACTION_FUNCTION_NATIVE(AActor, RadiusAttack, RadiusAttack)
|
||||||
|
@ -1257,7 +1257,8 @@ DEFINE_ACTION_FUNCTION_NATIVE(AActor, RadiusAttack, RadiusAttack)
|
||||||
PARAM_INT(damagetype);
|
PARAM_INT(damagetype);
|
||||||
PARAM_INT(flags);
|
PARAM_INT(flags);
|
||||||
PARAM_INT(fulldamagedistance);
|
PARAM_INT(fulldamagedistance);
|
||||||
ACTION_RETURN_INT(RadiusAttack(self, bombsource, bombdamage, bombdistance, damagetype, flags, fulldamagedistance));
|
PARAM_INT(species);
|
||||||
|
ACTION_RETURN_INT(RadiusAttack(self, bombsource, bombdamage, bombdistance, damagetype, flags, fulldamagedistance, species));
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ZS_GetSpriteIndex(int sprt)
|
static int ZS_GetSpriteIndex(int sprt)
|
||||||
|
|
|
@ -1116,7 +1116,7 @@ class Actor : Thinker native
|
||||||
native void A_Burst(class<Actor> chunktype);
|
native void A_Burst(class<Actor> chunktype);
|
||||||
native void A_RadiusDamageSelf(int damage = 128, double distance = 128, int flags = 0, class<Actor> flashtype = null);
|
native void A_RadiusDamageSelf(int damage = 128, double distance = 128, int flags = 0, class<Actor> flashtype = null);
|
||||||
native int GetRadiusDamage(Actor thing, int damage, int distance, int fulldmgdistance = 0, bool oldradiusdmg = false);
|
native int GetRadiusDamage(Actor thing, int damage, int distance, int fulldmgdistance = 0, bool oldradiusdmg = false);
|
||||||
native int RadiusAttack(Actor bombsource, int bombdamage, int bombdistance, Name bombmod = 'none', int flags = RADF_HURTSOURCE, int fulldamagedistance = 0);
|
native int RadiusAttack(Actor bombsource, int bombdamage, int bombdistance, Name bombmod = 'none', int flags = RADF_HURTSOURCE, int fulldamagedistance = 0, name species = "None");
|
||||||
|
|
||||||
native void A_Respawn(int flags = 1);
|
native void A_Respawn(int flags = 1);
|
||||||
native void A_RestoreSpecialPosition();
|
native void A_RestoreSpecialPosition();
|
||||||
|
|
|
@ -613,7 +613,7 @@ extend class Actor
|
||||||
//
|
//
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
|
|
||||||
void A_RadiusThrust(int force = 128, int distance = -1, int flags = RTF_AFFECTSOURCE, int fullthrustdistance = 0)
|
void A_RadiusThrust(int force = 128, int distance = -1, int flags = RTF_AFFECTSOURCE, int fullthrustdistance = 0, name species = "None")
|
||||||
{
|
{
|
||||||
if (force == 0) force = 128;
|
if (force == 0) force = 128;
|
||||||
if (distance <= 0) distance = abs(force);
|
if (distance <= 0) distance = abs(force);
|
||||||
|
@ -628,7 +628,7 @@ extend class Actor
|
||||||
target.bNoDamageThrust = false;
|
target.bNoDamageThrust = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
RadiusAttack (target, force, distance, DamageType, flags | RADF_NODAMAGE, fullthrustdistance);
|
RadiusAttack (target, force, distance, DamageType, flags | RADF_NODAMAGE, fullthrustdistance, species);
|
||||||
CheckSplash(distance);
|
CheckSplash(distance);
|
||||||
if (target) target.bNoDamageThrust = nothrust;
|
if (target) target.bNoDamageThrust = nothrust;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue