mirror of
https://github.com/ZDoom/Raze.git
synced 2025-02-27 05:40:46 +00:00
use properties for letting enemies burn
This commit is contained in:
parent
2a773e2028
commit
c4a0692c76
3 changed files with 56 additions and 55 deletions
|
@ -1137,61 +1137,28 @@ bool actHealDude(DBloodActor* actor, int add, int threshold)
|
||||||
|
|
||||||
static bool actKillDudeStage1(DBloodActor* actor, DAMAGE_TYPE damageType)
|
static bool actKillDudeStage1(DBloodActor* actor, DAMAGE_TYPE damageType)
|
||||||
{
|
{
|
||||||
switch (actor->GetType())
|
auto deathmorph = actor->PointerVar<PClassActor>("deathmorphtype");
|
||||||
|
if (deathmorph)
|
||||||
{
|
{
|
||||||
#ifdef NOONE_EXTENSIONS
|
auto morphSeq = actor->IntVar("morphSeqID");
|
||||||
case kDudeModernCustom:
|
if (morphSeq != 0)
|
||||||
if (actKillModernDude(actor, damageType)) return true;
|
{
|
||||||
break;
|
seqSpawn(actor->seqStartName(), actor->seqStartID() + morphSeq, actor, nullptr);
|
||||||
#endif
|
return true;
|
||||||
case kDudeCerberusTwoHead: // Cerberus
|
}
|
||||||
seqSpawn(actor->seqStartName(), actor->seqStartID() + 1, actor, nullptr);
|
}
|
||||||
|
if (actor->classflags() & CF_QUICKBURN)
|
||||||
|
{
|
||||||
|
auto burn = actor->PointerVar<PClassActor>("burntype");
|
||||||
|
if (burn && (cl_bloodvanillaenemies || VanillaMode()))
|
||||||
|
{
|
||||||
|
auto burn2 = actor->PointerVar<PClassActor>("vanillaburntype");
|
||||||
|
if (burn2) return false;
|
||||||
|
}
|
||||||
|
actor->ChangeType(burn);
|
||||||
|
aiNewState(actor, NAME_BurnGoto);
|
||||||
|
actHealDude(actor, actor->startHealth(), actor->startHealth());
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
case kDudeCultistTommy:
|
|
||||||
case kDudeCultistShotgun:
|
|
||||||
case kDudeCultistTesla:
|
|
||||||
case kDudeCultistTNT:
|
|
||||||
if (damageType == kDamageBurn && actor->xspr.medium == kMediumNormal)
|
|
||||||
{
|
|
||||||
actor->ChangeType(kDudeBurningCultist);
|
|
||||||
aiNewState(actor, NAME_BurnGoto);
|
|
||||||
actHealDude(actor, actor->startHealth(), actor->startHealth());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case kDudeBeast:
|
|
||||||
if (damageType == kDamageBurn && actor->xspr.medium == kMediumNormal)
|
|
||||||
{
|
|
||||||
actor->ChangeType(kDudeBurningBeast);
|
|
||||||
aiNewState(actor, NAME_BurnGoto);
|
|
||||||
actHealDude(actor, actor->startHealth(), actor->startHealth());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case kDudeInnocent:
|
|
||||||
if (damageType == kDamageBurn && actor->xspr.medium == kMediumNormal)
|
|
||||||
{
|
|
||||||
actor->ChangeType(kDudeBurningInnocent);
|
|
||||||
aiNewState(actor, NAME_BurnGoto);
|
|
||||||
actHealDude(actor, actor->startHealth(), actor->startHealth());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case kDudeTinyCaleb:
|
|
||||||
if (cl_bloodvanillaenemies || VanillaMode())
|
|
||||||
break;
|
|
||||||
if (damageType == kDamageBurn && actor->xspr.medium == kMediumNormal)
|
|
||||||
{
|
|
||||||
actor->ChangeType(kDudeBurningTinyCaleb);
|
|
||||||
aiNewState(actor, NAME_BurnGoto);
|
|
||||||
actHealDude(actor, actor->startHealth(), actor->startHealth());
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -1433,6 +1400,8 @@ void actKillDude(DBloodActor* killerActor, DBloodActor* actor, DAMAGE_TYPE damag
|
||||||
{
|
{
|
||||||
assert(actor->IsDudeActor()&& actor->hasX());
|
assert(actor->IsDudeActor()&& actor->hasX());
|
||||||
|
|
||||||
|
// if (onKill(killerActor, actor, damageType, damage)) return; // call an optional script handler.
|
||||||
|
|
||||||
if (actKillDudeStage1(actor, damageType)) return;
|
if (actKillDudeStage1(actor, damageType)) return;
|
||||||
|
|
||||||
for (int p = connecthead; p >= 0; p = connectpoint2[p])
|
for (int p = connecthead; p >= 0; p = connectpoint2[p])
|
||||||
|
@ -2267,7 +2236,7 @@ static void checkCeilHit(DBloodActor* actor)
|
||||||
bool IsBurningDude(DBloodActor* actor)
|
bool IsBurningDude(DBloodActor* actor)
|
||||||
{
|
{
|
||||||
if (actor == nullptr || !actor->IsDudeActor()) return false;
|
if (actor == nullptr || !actor->IsDudeActor()) return false;
|
||||||
return actor->classflags() & 1;
|
return actor->classflags() & CF_BURNING;
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------------------------------------
|
//---------------------------------------------------------------------------
|
||||||
|
@ -2404,7 +2373,7 @@ static void checkFloorHit(DBloodActor* actor)
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
if (actor2->IsDudeActor() && (actor2->classflags() & 2))
|
if (actor2->IsDudeActor() && (actor2->classflags() & CF_FLOORHITDAMAGE))
|
||||||
if (pPlayer && !isShrunk(actor))
|
if (pPlayer && !isShrunk(actor))
|
||||||
actDamageSprite(actor, actor2, kDamageBullet, 8);
|
actDamageSprite(actor, actor2, kDamageBullet, 8);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -34,6 +34,13 @@ struct SPRITEHIT
|
||||||
|
|
||||||
class DBloodActor;
|
class DBloodActor;
|
||||||
|
|
||||||
|
enum classflags
|
||||||
|
{
|
||||||
|
CF_BURNING = 1,
|
||||||
|
CF_FLOORHITDAMAGE = 2,
|
||||||
|
CF_QUICKBURN = 4,
|
||||||
|
};
|
||||||
|
|
||||||
class DBloodActor : public DCoreActor
|
class DBloodActor : public DCoreActor
|
||||||
{
|
{
|
||||||
DECLARE_CLASS(DBloodActor, DCoreActor)
|
DECLARE_CLASS(DBloodActor, DCoreActor)
|
||||||
|
@ -263,6 +270,7 @@ public:
|
||||||
return *(int*)(GetClass()->Meta + o_classflags);
|
return *(int*)(GetClass()->Meta + o_classflags);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
int hinderDamage; // recoil damage
|
int hinderDamage; // recoil damage
|
||||||
int changeTarget; // chance to change target when attacked someone else
|
int changeTarget; // chance to change target when attacked someone else
|
||||||
|
|
|
@ -23,7 +23,10 @@ class BloodDudeBase : Bloodactor
|
||||||
|
|
||||||
meta int classflags;
|
meta int classflags;
|
||||||
meta Sound explodeSound;
|
meta Sound explodeSound;
|
||||||
|
meta int morphSeqID; // always an index
|
||||||
meta class<BloodDudeBase> deathMorphType;
|
meta class<BloodDudeBase> deathMorphType;
|
||||||
|
meta class<BloodDudeBase> burnType;
|
||||||
|
meta class<BloodDudeBase> vanillaBurnType;
|
||||||
|
|
||||||
property prefix: none;
|
property prefix: none;
|
||||||
property seqStartName: seqStartName;
|
property seqStartName: seqStartName;
|
||||||
|
@ -46,11 +49,15 @@ class BloodDudeBase : Bloodactor
|
||||||
property sideSpeed: sideSpeed;
|
property sideSpeed: sideSpeed;
|
||||||
property backSpeed: backSpeed;
|
property backSpeed: backSpeed;
|
||||||
property turnRange: turnRange;
|
property turnRange: turnRange;
|
||||||
|
property burnType: burnType;
|
||||||
|
property vanillaBurnType: vanillaBurnType;
|
||||||
|
property morphSeqID: morphSeqID;
|
||||||
|
|
||||||
property explodeSound: explodeSound;
|
property explodeSound: explodeSound;
|
||||||
property deathMorphType: deathMorphType;
|
property deathMorphType: deathMorphType;
|
||||||
flagdef burning: classflags, 0;
|
flagdef burning: classflags, 0;
|
||||||
flagdef floorhitdamage: classflags, 1;
|
flagdef floorhitdamage: classflags, 1;
|
||||||
|
flagdef quickburn: classflags, 2;
|
||||||
|
|
||||||
|
|
||||||
default
|
default
|
||||||
|
@ -393,7 +400,9 @@ class BloodDudeCultistTommy : BloodDudeBase
|
||||||
|
|
||||||
explodesound 717;
|
explodesound 717;
|
||||||
+BloodDudeBase.floorhitdamage;
|
+BloodDudeBase.floorhitdamage;
|
||||||
|
+BloodDudeBase.quickBurn;
|
||||||
preloadseq 6, 7, 8, 9, 13, 14, 15;
|
preloadseq 6, 7, 8, 9, 13, 14, 15;
|
||||||
|
BurnType "BloodDudeBurningCultist";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -426,7 +435,9 @@ class BloodDudeCultistShotgun : BloodDudeBase
|
||||||
|
|
||||||
explodesound 717;
|
explodesound 717;
|
||||||
+BloodDudeBase.floorhitdamage;
|
+BloodDudeBase.floorhitdamage;
|
||||||
|
+BloodDudeBase.quickBurn;
|
||||||
preloadseq 6, 7, 8, 9, 13, 14, 15;
|
preloadseq 6, 7, 8, 9, 13, 14, 15;
|
||||||
|
BurnType "BloodDudeBurningCultist";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -458,6 +469,7 @@ class BloodDudeZombieAxeNormal : BloodDudeBase
|
||||||
dmgcontrol 256, 256, 112, 256, 256, 256, 160;
|
dmgcontrol 256, 256, 112, 256, 256, 256, 160;
|
||||||
+BloodDudeBase.floorhitdamage;
|
+BloodDudeBase.floorhitdamage;
|
||||||
preloadseq 6, 7, 8, 11, 13, 14;
|
preloadseq 6, 7, 8, 11, 13, 14;
|
||||||
|
BurnType "BloodDudeBurningZombieAxe";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -489,6 +501,7 @@ class BloodDudeZombieButcher : BloodDudeBase
|
||||||
dmgcontrol 256, 256, 32, 128, 256, 64, 128;
|
dmgcontrol 256, 256, 32, 128, 256, 64, 128;
|
||||||
+BloodDudeBase.floorhitdamage;
|
+BloodDudeBase.floorhitdamage;
|
||||||
preloadseq 6, 7, 8, 9, 10, 11;
|
preloadseq 6, 7, 8, 9, 10, 11;
|
||||||
|
BurnType "BloodDudeBurningZombieButcher";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -520,6 +533,7 @@ class BloodDudeZombieAxeBuried : BloodDudeBase
|
||||||
dmgcontrol 256, 256, 112, 256, 256, 256, 256;
|
dmgcontrol 256, 256, 112, 256, 256, 256, 256;
|
||||||
+BloodDudeBase.floorhitdamage;
|
+BloodDudeBase.floorhitdamage;
|
||||||
preloadseq 12, 9, 10;
|
preloadseq 12, 9, 10;
|
||||||
|
BurnType "BloodDudeBurningZombieAxe";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1162,6 +1176,7 @@ class BloodDudeCerberusTwoHead : BloodDudeBase
|
||||||
AISTATE "Burn2", "+6", 4, 60, cerberusBurnSeqCallback2, null, null, null, "Chase";
|
AISTATE "Burn2", "+6", 4, 60, cerberusBurnSeqCallback2, null, null, null, "Chase";
|
||||||
|
|
||||||
deathMorphType "BloodDudeCerberusOneHead";
|
deathMorphType "BloodDudeCerberusOneHead";
|
||||||
|
morphseqId 1;
|
||||||
+BloodDudeBase.floorhitdamage;
|
+BloodDudeBase.floorhitdamage;
|
||||||
preloadseq 6, 7;
|
preloadseq 6, 7;
|
||||||
}
|
}
|
||||||
|
@ -1469,6 +1484,8 @@ class BloodDudeInnocent : BloodDudeBase
|
||||||
dmgcontrol 288, 288, 288, 288, 288, 288, 288;
|
dmgcontrol 288, 288, 288, 288, 288, 288, 288;
|
||||||
|
|
||||||
explodesound 717;
|
explodesound 717;
|
||||||
|
+BloodDudeBase.quickBurn;
|
||||||
|
BurnType "BloodDudeBurningInnocent";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1530,6 +1547,8 @@ class BloodDudeCultistTesla : BloodDudeBase
|
||||||
|
|
||||||
explodesound 717;
|
explodesound 717;
|
||||||
preloadseq 6, 7, 8, 9, 13, 14, 15;
|
preloadseq 6, 7, 8, 9, 13, 14, 15;
|
||||||
|
+BloodDudeBase.quickBurn;
|
||||||
|
BurnType "BloodDudeBurningCultist";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1562,6 +1581,8 @@ class BloodDudeCultistTNT : BloodDudeBase
|
||||||
|
|
||||||
explodesound 717;
|
explodesound 717;
|
||||||
preloadseq 6, 7, 8, 9, 13, 14, 15;
|
preloadseq 6, 7, 8, 9, 13, 14, 15;
|
||||||
|
+BloodDudeBase.quickBurn;
|
||||||
|
BurnType "BloodDudeBurningCultist";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1621,6 +1642,9 @@ class BloodDudeTinyCaleb : BloodDudeBase
|
||||||
turnrange 67.5;
|
turnrange 67.5;
|
||||||
gibtype 7, -1, -1;
|
gibtype 7, -1, -1;
|
||||||
dmgcontrol 160, 160, 160, 160, 256, 128, 288;
|
dmgcontrol 160, 160, 160, 160, 256, 128, 288;
|
||||||
|
+BloodDudeBase.quickBurn;
|
||||||
|
VanillaBurnType "BloodDudeBurningInnocent";
|
||||||
|
BurnType "BloodDudeBurningTinyCaleb";
|
||||||
|
|
||||||
explodesound 717;
|
explodesound 717;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue