use properties for letting enemies burn

This commit is contained in:
Christoph Oelckers 2023-10-12 17:37:59 +02:00
parent 2a773e2028
commit c4a0692c76
3 changed files with 56 additions and 55 deletions

View file

@ -1137,62 +1137,29 @@ bool actHealDude(DBloodActor* actor, int add, int threshold)
static bool actKillDudeStage1(DBloodActor* actor, DAMAGE_TYPE damageType)
{
switch (actor->GetType())
auto deathmorph = actor->PointerVar<PClassActor>("deathmorphtype");
if (deathmorph)
{
#ifdef NOONE_EXTENSIONS
case kDudeModernCustom:
if (actKillModernDude(actor, damageType)) return true;
break;
#endif
case kDudeCerberusTwoHead: // Cerberus
seqSpawn(actor->seqStartName(), actor->seqStartID() + 1, actor, nullptr);
auto morphSeq = actor->IntVar("morphSeqID");
if (morphSeq != 0)
{
seqSpawn(actor->seqStartName(), actor->seqStartID() + morphSeq, actor, nullptr);
return true;
case kDudeCultistTommy:
case kDudeCultistShotgun:
case kDudeCultistTesla:
case kDudeCultistTNT:
if (damageType == kDamageBurn && actor->xspr.medium == kMediumNormal)
}
}
if (actor->classflags() & CF_QUICKBURN)
{
actor->ChangeType(kDudeBurningCultist);
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;
}
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;
}
@ -1433,6 +1400,8 @@ void actKillDude(DBloodActor* killerActor, DBloodActor* actor, DAMAGE_TYPE damag
{
assert(actor->IsDudeActor()&& actor->hasX());
// if (onKill(killerActor, actor, damageType, damage)) return; // call an optional script handler.
if (actKillDudeStage1(actor, damageType)) return;
for (int p = connecthead; p >= 0; p = connectpoint2[p])
@ -2267,7 +2236,7 @@ static void checkCeilHit(DBloodActor* actor)
bool IsBurningDude(DBloodActor* actor)
{
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;
default:
if (actor2->IsDudeActor() && (actor2->classflags() & 2))
if (actor2->IsDudeActor() && (actor2->classflags() & CF_FLOORHITDAMAGE))
if (pPlayer && !isShrunk(actor))
actDamageSprite(actor, actor2, kDamageBullet, 8);
break;

View file

@ -34,6 +34,13 @@ struct SPRITEHIT
class DBloodActor;
enum classflags
{
CF_BURNING = 1,
CF_FLOORHITDAMAGE = 2,
CF_QUICKBURN = 4,
};
class DBloodActor : public DCoreActor
{
DECLARE_CLASS(DBloodActor, DCoreActor)
@ -263,6 +270,7 @@ public:
return *(int*)(GetClass()->Meta + o_classflags);
}
/*
int hinderDamage; // recoil damage
int changeTarget; // chance to change target when attacked someone else

View file

@ -23,7 +23,10 @@ class BloodDudeBase : Bloodactor
meta int classflags;
meta Sound explodeSound;
meta int morphSeqID; // always an index
meta class<BloodDudeBase> deathMorphType;
meta class<BloodDudeBase> burnType;
meta class<BloodDudeBase> vanillaBurnType;
property prefix: none;
property seqStartName: seqStartName;
@ -46,11 +49,15 @@ class BloodDudeBase : Bloodactor
property sideSpeed: sideSpeed;
property backSpeed: backSpeed;
property turnRange: turnRange;
property burnType: burnType;
property vanillaBurnType: vanillaBurnType;
property morphSeqID: morphSeqID;
property explodeSound: explodeSound;
property deathMorphType: deathMorphType;
flagdef burning: classflags, 0;
flagdef floorhitdamage: classflags, 1;
flagdef quickburn: classflags, 2;
default
@ -393,7 +400,9 @@ class BloodDudeCultistTommy : BloodDudeBase
explodesound 717;
+BloodDudeBase.floorhitdamage;
+BloodDudeBase.quickBurn;
preloadseq 6, 7, 8, 9, 13, 14, 15;
BurnType "BloodDudeBurningCultist";
}
}
@ -426,7 +435,9 @@ class BloodDudeCultistShotgun : BloodDudeBase
explodesound 717;
+BloodDudeBase.floorhitdamage;
+BloodDudeBase.quickBurn;
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;
+BloodDudeBase.floorhitdamage;
preloadseq 6, 7, 8, 11, 13, 14;
BurnType "BloodDudeBurningZombieAxe";
}
}
@ -489,6 +501,7 @@ class BloodDudeZombieButcher : BloodDudeBase
dmgcontrol 256, 256, 32, 128, 256, 64, 128;
+BloodDudeBase.floorhitdamage;
preloadseq 6, 7, 8, 9, 10, 11;
BurnType "BloodDudeBurningZombieButcher";
}
}
@ -520,6 +533,7 @@ class BloodDudeZombieAxeBuried : BloodDudeBase
dmgcontrol 256, 256, 112, 256, 256, 256, 256;
+BloodDudeBase.floorhitdamage;
preloadseq 12, 9, 10;
BurnType "BloodDudeBurningZombieAxe";
}
}
@ -1162,6 +1176,7 @@ class BloodDudeCerberusTwoHead : BloodDudeBase
AISTATE "Burn2", "+6", 4, 60, cerberusBurnSeqCallback2, null, null, null, "Chase";
deathMorphType "BloodDudeCerberusOneHead";
morphseqId 1;
+BloodDudeBase.floorhitdamage;
preloadseq 6, 7;
}
@ -1469,6 +1484,8 @@ class BloodDudeInnocent : BloodDudeBase
dmgcontrol 288, 288, 288, 288, 288, 288, 288;
explodesound 717;
+BloodDudeBase.quickBurn;
BurnType "BloodDudeBurningInnocent";
}
}
@ -1530,6 +1547,8 @@ class BloodDudeCultistTesla : BloodDudeBase
explodesound 717;
preloadseq 6, 7, 8, 9, 13, 14, 15;
+BloodDudeBase.quickBurn;
BurnType "BloodDudeBurningCultist";
}
}
@ -1562,6 +1581,8 @@ class BloodDudeCultistTNT : BloodDudeBase
explodesound 717;
preloadseq 6, 7, 8, 9, 13, 14, 15;
+BloodDudeBase.quickBurn;
BurnType "BloodDudeBurningCultist";
}
}
@ -1621,6 +1642,9 @@ class BloodDudeTinyCaleb : BloodDudeBase
turnrange 67.5;
gibtype 7, -1, -1;
dmgcontrol 160, 160, 160, 160, 256, 128, 288;
+BloodDudeBase.quickBurn;
VanillaBurnType "BloodDudeBurningInnocent";
BurnType "BloodDudeBurningTinyCaleb";
explodesound 717;
}