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,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;

View file

@ -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

View file

@ -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;
} }