diff --git a/docs/rh-log.txt b/docs/rh-log.txt index d2f00910b..cb5ba50c2 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -1,4 +1,13 @@ November 4, 2006 (Changes by Graf Zahl) +- Replaced the static string buffer in ProcessStates with an FString. +- After doing some tests with state label scopes I had to conclude that + using '.' both for separating sub-state-labels and scope resolution + identifiers does not work reliably unless all actor class names were + prohibited from being used as state labels. Since that is undesirable + the only solution is to change the scope resolution operator. Fortunately + no WADs so far have used it so implementing such a breaking change isn't + a major issue. Now it uses '::', like C++ for this purpose. +- Converted Revenant, Mancubus and Pain Elemental to DECORATE. - Converted Arachnotron, Archvile, Cyberdemon, Spidermastermind and CommanderKeen to DECORATE. - Converted ExplosiveBarrel, BulletPuff and DoomUnusedStates to DECORATE. diff --git a/src/g_doom/a_fatso.cpp b/src/g_doom/a_fatso.cpp index 5e767cd72..5f796797b 100644 --- a/src/g_doom/a_fatso.cpp +++ b/src/g_doom/a_fatso.cpp @@ -8,134 +8,6 @@ #include "a_action.h" #include "thingdef.h" -void A_FatRaise (AActor *); -void A_FatAttack1 (AActor *); -void A_FatAttack2 (AActor *); -void A_FatAttack3 (AActor *); - -class AFatso : public AActor -{ - DECLARE_ACTOR (AFatso, AActor) -}; - -FState AFatso::States[] = -{ -#define S_FATT_STND 0 - S_NORMAL (FATT, 'A', 15, A_Look , &States[S_FATT_STND+1]), - S_NORMAL (FATT, 'B', 15, A_Look , &States[S_FATT_STND]), - -#define S_FATT_RUN (S_FATT_STND+2) - S_NORMAL (FATT, 'A', 4, A_Chase , &States[S_FATT_RUN+1]), - S_NORMAL (FATT, 'A', 4, A_Chase , &States[S_FATT_RUN+2]), - S_NORMAL (FATT, 'B', 4, A_Chase , &States[S_FATT_RUN+3]), - S_NORMAL (FATT, 'B', 4, A_Chase , &States[S_FATT_RUN+4]), - S_NORMAL (FATT, 'C', 4, A_Chase , &States[S_FATT_RUN+5]), - S_NORMAL (FATT, 'C', 4, A_Chase , &States[S_FATT_RUN+6]), - S_NORMAL (FATT, 'D', 4, A_Chase , &States[S_FATT_RUN+7]), - S_NORMAL (FATT, 'D', 4, A_Chase , &States[S_FATT_RUN+8]), - S_NORMAL (FATT, 'E', 4, A_Chase , &States[S_FATT_RUN+9]), - S_NORMAL (FATT, 'E', 4, A_Chase , &States[S_FATT_RUN+10]), - S_NORMAL (FATT, 'F', 4, A_Chase , &States[S_FATT_RUN+11]), - S_NORMAL (FATT, 'F', 4, A_Chase , &States[S_FATT_RUN+0]), - -#define S_FATT_ATK (S_FATT_RUN+12) - S_NORMAL (FATT, 'G', 20, A_FatRaise , &States[S_FATT_ATK+1]), - S_BRIGHT (FATT, 'H', 10, A_FatAttack1 , &States[S_FATT_ATK+2]), - S_NORMAL (FATT, 'I', 5, A_FaceTarget , &States[S_FATT_ATK+3]), - S_NORMAL (FATT, 'G', 5, A_FaceTarget , &States[S_FATT_ATK+4]), - S_BRIGHT (FATT, 'H', 10, A_FatAttack2 , &States[S_FATT_ATK+5]), - S_NORMAL (FATT, 'I', 5, A_FaceTarget , &States[S_FATT_ATK+6]), - S_NORMAL (FATT, 'G', 5, A_FaceTarget , &States[S_FATT_ATK+7]), - S_BRIGHT (FATT, 'H', 10, A_FatAttack3 , &States[S_FATT_ATK+8]), - S_NORMAL (FATT, 'I', 5, A_FaceTarget , &States[S_FATT_ATK+9]), - S_NORMAL (FATT, 'G', 5, A_FaceTarget , &States[S_FATT_RUN+0]), - -#define S_FATT_PAIN (S_FATT_ATK+10) - S_NORMAL (FATT, 'J', 3, NULL , &States[S_FATT_PAIN+1]), - S_NORMAL (FATT, 'J', 3, A_Pain , &States[S_FATT_RUN+0]), - -#define S_FATT_DIE (S_FATT_PAIN+2) - S_NORMAL (FATT, 'K', 6, NULL , &States[S_FATT_DIE+1]), - S_NORMAL (FATT, 'L', 6, A_Scream , &States[S_FATT_DIE+2]), - S_NORMAL (FATT, 'M', 6, A_NoBlocking , &States[S_FATT_DIE+3]), - S_NORMAL (FATT, 'N', 6, NULL , &States[S_FATT_DIE+4]), - S_NORMAL (FATT, 'O', 6, NULL , &States[S_FATT_DIE+5]), - S_NORMAL (FATT, 'P', 6, NULL , &States[S_FATT_DIE+6]), - S_NORMAL (FATT, 'Q', 6, NULL , &States[S_FATT_DIE+7]), - S_NORMAL (FATT, 'R', 6, NULL , &States[S_FATT_DIE+8]), - S_NORMAL (FATT, 'S', 6, NULL , &States[S_FATT_DIE+9]), - S_NORMAL (FATT, 'T', -1, A_BossDeath , NULL), - -#define S_FATT_RAISE (S_FATT_DIE+10) - S_NORMAL (FATT, 'R', 5, NULL , &States[S_FATT_RAISE+1]), - S_NORMAL (FATT, 'Q', 5, NULL , &States[S_FATT_RAISE+2]), - S_NORMAL (FATT, 'P', 5, NULL , &States[S_FATT_RAISE+3]), - S_NORMAL (FATT, 'O', 5, NULL , &States[S_FATT_RAISE+4]), - S_NORMAL (FATT, 'N', 5, NULL , &States[S_FATT_RAISE+5]), - S_NORMAL (FATT, 'M', 5, NULL , &States[S_FATT_RAISE+6]), - S_NORMAL (FATT, 'L', 5, NULL , &States[S_FATT_RAISE+7]), - S_NORMAL (FATT, 'K', 5, NULL , &States[S_FATT_RUN+0]) -}; - -IMPLEMENT_ACTOR (AFatso, Doom, 67, 112) - PROP_SpawnHealth (600) - PROP_RadiusFixed (48) - PROP_HeightFixed (64) - PROP_Mass (1000) - PROP_SpeedFixed (8) - PROP_PainChance (80) - PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL) - PROP_Flags2 (MF2_MCROSS|MF2_PASSMOBJ|MF2_PUSHWALL|MF2_FLOORCLIP) - PROP_Flags4 (MF4_BOSSDEATH) - - PROP_SpawnState (S_FATT_STND) - PROP_SeeState (S_FATT_RUN) - PROP_PainState (S_FATT_PAIN) - PROP_MissileState (S_FATT_ATK) - PROP_DeathState (S_FATT_DIE) - PROP_RaiseState (S_FATT_RAISE) - - PROP_SeeSound ("fatso/sight") - PROP_PainSound ("fatso/pain") - PROP_DeathSound ("fatso/death") - PROP_ActiveSound ("fatso/active") - PROP_Obituary("$OB_FATSO") -END_DEFAULTS - -class AFatShot : public AActor -{ - DECLARE_ACTOR (AFatShot, AActor) -}; - -FState AFatShot::States[] = -{ -#define S_FATSHOT 0 - S_BRIGHT (MANF, 'A', 4, NULL , &States[S_FATSHOT+1]), - S_BRIGHT (MANF, 'B', 4, NULL , &States[S_FATSHOT+0]), - -#define S_FATSHOTX (S_FATSHOT+2) - S_BRIGHT (MISL, 'B', 8, NULL , &States[S_FATSHOTX+1]), - S_BRIGHT (MISL, 'C', 6, NULL , &States[S_FATSHOTX+2]), - S_BRIGHT (MISL, 'D', 4, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AFatShot, Doom, -1, 153) - PROP_RadiusFixed (6) - PROP_HeightFixed (8) - PROP_SpeedFixed (20) - PROP_Damage (8) - PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY) - PROP_Flags2 (MF2_PCROSS|MF2_IMPACT|MF2_NOTELEPORT) - PROP_Flags4 (MF4_RANDOMIZE) - PROP_RenderStyle (STYLE_Add) - - PROP_SpawnState (S_FATSHOT) - PROP_DeathState (S_FATSHOTX) - - PROP_SeeSound ("fatso/attack") - PROP_DeathSound ("fatso/shotx") -END_DEFAULTS - // // Mancubus attack, // firing three missiles in three different directions? @@ -160,7 +32,7 @@ void A_FatAttack1 (AActor *self) const PClass *spawntype = NULL; int index = CheckIndex (1, NULL); if (index >= 0) spawntype = PClass::FindClass ((ENamedName)StateParameters[index]); - if (spawntype == NULL) spawntype = RUNTIME_CLASS(AFatShot); + if (spawntype == NULL) spawntype = PClass::FindClass("FatShot"); A_FaceTarget (self); // Change direction to ... @@ -188,7 +60,7 @@ void A_FatAttack2 (AActor *self) const PClass *spawntype = NULL; int index = CheckIndex (1, NULL); if (index >= 0) spawntype = PClass::FindClass ((ENamedName)StateParameters[index]); - if (spawntype == NULL) spawntype = RUNTIME_CLASS(AFatShot); + if (spawntype == NULL) spawntype = PClass::FindClass("FatShot"); A_FaceTarget (self); // Now here choose opposite deviation. @@ -216,7 +88,7 @@ void A_FatAttack3 (AActor *self) const PClass *spawntype = NULL; int index = CheckIndex (1, NULL); if (index >= 0) spawntype = PClass::FindClass ((ENamedName)StateParameters[index]); - if (spawntype == NULL) spawntype = RUNTIME_CLASS(AFatShot); + if (spawntype == NULL) spawntype = PClass::FindClass("FatShot"); A_FaceTarget (self); @@ -257,7 +129,7 @@ void A_Mushroom (AActor *actor) if (n == 0) n = actor->GetMissileDamage (0, 1); } - if (spawntype == NULL) spawntype = RUNTIME_CLASS(AFatShot); + if (spawntype == NULL) spawntype = PClass::FindClass("FatShot"); A_Explode (actor); // First make normal explosion diff --git a/src/g_doom/a_painelemental.cpp b/src/g_doom/a_painelemental.cpp index 705431d72..3537d8849 100644 --- a/src/g_doom/a_painelemental.cpp +++ b/src/g_doom/a_painelemental.cpp @@ -11,74 +11,6 @@ void A_PainDie (AActor *); void A_SkullAttack (AActor *self); -class APainElemental : public AActor -{ - DECLARE_ACTOR (APainElemental, AActor) -}; - -FState APainElemental::States[] = -{ -#define S_PAIN_STND 0 - S_NORMAL (PAIN, 'A', 10, A_Look , &States[S_PAIN_STND]), - -#define S_PAIN_RUN (S_PAIN_STND+1) - S_NORMAL (PAIN, 'A', 3, A_Chase , &States[S_PAIN_RUN+1]), - S_NORMAL (PAIN, 'A', 3, A_Chase , &States[S_PAIN_RUN+2]), - S_NORMAL (PAIN, 'B', 3, A_Chase , &States[S_PAIN_RUN+3]), - S_NORMAL (PAIN, 'B', 3, A_Chase , &States[S_PAIN_RUN+4]), - S_NORMAL (PAIN, 'C', 3, A_Chase , &States[S_PAIN_RUN+5]), - S_NORMAL (PAIN, 'C', 3, A_Chase , &States[S_PAIN_RUN+0]), - -#define S_PAIN_ATK (S_PAIN_RUN+6) - S_NORMAL (PAIN, 'D', 5, A_FaceTarget , &States[S_PAIN_ATK+1]), - S_NORMAL (PAIN, 'E', 5, A_FaceTarget , &States[S_PAIN_ATK+2]), - S_BRIGHT (PAIN, 'F', 5, A_FaceTarget , &States[S_PAIN_ATK+3]), - S_BRIGHT (PAIN, 'F', 0, A_PainAttack , &States[S_PAIN_RUN+0]), - -#define S_PAIN_PAIN (S_PAIN_ATK+4) - S_NORMAL (PAIN, 'G', 6, NULL , &States[S_PAIN_PAIN+1]), - S_NORMAL (PAIN, 'G', 6, A_Pain , &States[S_PAIN_RUN+0]), - -#define S_PAIN_DIE (S_PAIN_PAIN+2) - S_BRIGHT (PAIN, 'H', 8, NULL , &States[S_PAIN_DIE+1]), - S_BRIGHT (PAIN, 'I', 8, A_Scream , &States[S_PAIN_DIE+2]), - S_BRIGHT (PAIN, 'J', 8, NULL , &States[S_PAIN_DIE+3]), - S_BRIGHT (PAIN, 'K', 8, NULL , &States[S_PAIN_DIE+4]), - S_BRIGHT (PAIN, 'L', 8, A_PainDie , &States[S_PAIN_DIE+5]), - S_BRIGHT (PAIN, 'M', 8, NULL , NULL), - -#define S_PAIN_RAISE (S_PAIN_DIE+6) - S_NORMAL (PAIN, 'M', 8, NULL , &States[S_PAIN_RAISE+1]), - S_NORMAL (PAIN, 'L', 8, NULL , &States[S_PAIN_RAISE+2]), - S_NORMAL (PAIN, 'K', 8, NULL , &States[S_PAIN_RAISE+3]), - S_NORMAL (PAIN, 'J', 8, NULL , &States[S_PAIN_RAISE+4]), - S_NORMAL (PAIN, 'I', 8, NULL , &States[S_PAIN_RAISE+5]), - S_NORMAL (PAIN, 'H', 8, NULL , &States[S_PAIN_RUN+0]) -}; - -IMPLEMENT_ACTOR (APainElemental, Doom, 71, 115) - PROP_SpawnHealth (400) - PROP_RadiusFixed (31) - PROP_HeightFixed (56) - PROP_Mass (400) - PROP_SpeedFixed (8) - PROP_PainChance (128) - PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_FLOAT|MF_NOGRAVITY|MF_COUNTKILL) - PROP_Flags2 (MF2_MCROSS|MF2_PASSMOBJ|MF2_PUSHWALL) - - PROP_SpawnState (S_PAIN_STND) - PROP_SeeState (S_PAIN_RUN) - PROP_PainState (S_PAIN_PAIN) - PROP_MissileState (S_PAIN_ATK) - PROP_DeathState (S_PAIN_DIE) - PROP_RaiseState (S_PAIN_RAISE) - - PROP_SeeSound ("pain/sight") - PROP_PainSound ("pain/pain") - PROP_DeathSound ("pain/death") - PROP_ActiveSound ("pain/active") -END_DEFAULTS - // // A_PainShootSkull // Spawn a lost soul and launch it at the target diff --git a/src/g_doom/a_revenant.cpp b/src/g_doom/a_revenant.cpp index 16a93fcf0..cc71c27e4 100644 --- a/src/g_doom/a_revenant.cpp +++ b/src/g_doom/a_revenant.cpp @@ -12,153 +12,6 @@ static FRandom pr_tracer ("Tracer"); static FRandom pr_skelfist ("SkelFist"); -void A_SkelMissile (AActor *); -void A_Tracer (AActor *); -void A_SkelWhoosh (AActor *); -void A_SkelFist (AActor *); - -class ARevenant : public AActor -{ - DECLARE_ACTOR (ARevenant, AActor) -}; - -FState ARevenant::States[] = -{ -#define S_SKEL_STND 0 - S_NORMAL (SKEL, 'A', 10, A_Look , &States[S_SKEL_STND+1]), - S_NORMAL (SKEL, 'B', 10, A_Look , &States[S_SKEL_STND]), - -#define S_SKEL_RUN (S_SKEL_STND+2) - S_NORMAL (SKEL, 'A', 2, A_Chase , &States[S_SKEL_RUN+1]), - S_NORMAL (SKEL, 'A', 2, A_Chase , &States[S_SKEL_RUN+2]), - S_NORMAL (SKEL, 'B', 2, A_Chase , &States[S_SKEL_RUN+3]), - S_NORMAL (SKEL, 'B', 2, A_Chase , &States[S_SKEL_RUN+4]), - S_NORMAL (SKEL, 'C', 2, A_Chase , &States[S_SKEL_RUN+5]), - S_NORMAL (SKEL, 'C', 2, A_Chase , &States[S_SKEL_RUN+6]), - S_NORMAL (SKEL, 'D', 2, A_Chase , &States[S_SKEL_RUN+7]), - S_NORMAL (SKEL, 'D', 2, A_Chase , &States[S_SKEL_RUN+8]), - S_NORMAL (SKEL, 'E', 2, A_Chase , &States[S_SKEL_RUN+9]), - S_NORMAL (SKEL, 'E', 2, A_Chase , &States[S_SKEL_RUN+10]), - S_NORMAL (SKEL, 'F', 2, A_Chase , &States[S_SKEL_RUN+11]), - S_NORMAL (SKEL, 'F', 2, A_Chase , &States[S_SKEL_RUN+0]), - -#define S_SKEL_FIST (S_SKEL_RUN+12) - S_NORMAL (SKEL, 'G', 0, A_FaceTarget , &States[S_SKEL_FIST+1]), - S_NORMAL (SKEL, 'G', 6, A_SkelWhoosh , &States[S_SKEL_FIST+2]), - S_NORMAL (SKEL, 'H', 6, A_FaceTarget , &States[S_SKEL_FIST+3]), - S_NORMAL (SKEL, 'I', 6, A_SkelFist , &States[S_SKEL_RUN+0]), - -#define S_SKEL_MISS (S_SKEL_FIST+4) - S_BRIGHT (SKEL, 'J', 0, A_FaceTarget , &States[S_SKEL_MISS+1]), - S_BRIGHT (SKEL, 'J', 10, A_FaceTarget , &States[S_SKEL_MISS+2]), - S_NORMAL (SKEL, 'K', 10, A_SkelMissile , &States[S_SKEL_MISS+3]), - S_NORMAL (SKEL, 'K', 10, A_FaceTarget , &States[S_SKEL_RUN+0]), - -#define S_SKEL_PAIN (S_SKEL_MISS+4) - S_NORMAL (SKEL, 'L', 5, NULL , &States[S_SKEL_PAIN+1]), - S_NORMAL (SKEL, 'L', 5, A_Pain , &States[S_SKEL_RUN+0]), - -#define S_SKEL_DIE (S_SKEL_PAIN+2) - S_NORMAL (SKEL, 'L', 7, NULL , &States[S_SKEL_DIE+1]), - S_NORMAL (SKEL, 'M', 7, NULL , &States[S_SKEL_DIE+2]), - S_NORMAL (SKEL, 'N', 7, A_Scream , &States[S_SKEL_DIE+3]), - S_NORMAL (SKEL, 'O', 7, A_NoBlocking , &States[S_SKEL_DIE+4]), - S_NORMAL (SKEL, 'P', 7, NULL , &States[S_SKEL_DIE+5]), - S_NORMAL (SKEL, 'Q', -1, NULL , NULL), - -#define S_SKEL_RAISE (S_SKEL_DIE+6) - S_NORMAL (SKEL, 'Q', 5, NULL , &States[S_SKEL_RAISE+1]), - S_NORMAL (SKEL, 'P', 5, NULL , &States[S_SKEL_RAISE+2]), - S_NORMAL (SKEL, 'O', 5, NULL , &States[S_SKEL_RAISE+3]), - S_NORMAL (SKEL, 'N', 5, NULL , &States[S_SKEL_RAISE+4]), - S_NORMAL (SKEL, 'M', 5, NULL , &States[S_SKEL_RAISE+5]), - S_NORMAL (SKEL, 'L', 5, NULL , &States[S_SKEL_RUN+0]) -}; - -IMPLEMENT_ACTOR (ARevenant, Doom, 66, 20) - PROP_SpawnHealth (300) - PROP_RadiusFixed (20) - PROP_HeightFixed (56) - PROP_Mass (500) - PROP_SpeedFixed (10) - PROP_PainChance (100) - PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_COUNTKILL) - PROP_Flags2 (MF2_MCROSS|MF2_PASSMOBJ|MF2_PUSHWALL|MF2_FLOORCLIP) - PROP_Flags4 (MF4_LONGMELEERANGE|MF4_MISSILEMORE) - - PROP_SpawnState (S_SKEL_STND) - PROP_SeeState (S_SKEL_RUN) - PROP_PainState (S_SKEL_PAIN) - PROP_MeleeState (S_SKEL_FIST) - PROP_MissileState (S_SKEL_MISS) - PROP_DeathState (S_SKEL_DIE) - PROP_RaiseState (S_SKEL_RAISE) - - PROP_SeeSound ("skeleton/sight") - PROP_PainSound ("skeleton/pain") - PROP_DeathSound ("skeleton/death") - PROP_ActiveSound ("skeleton/active") - PROP_Obituary("$OB_UNDEAD") - PROP_HitObituary("$OB_UNDEADHIT") -END_DEFAULTS - - -class ARevenantTracer : public AActor -{ - DECLARE_ACTOR (ARevenantTracer, AActor) -}; - -FState ARevenantTracer::States[] = -{ -#define S_TRACER 0 - S_BRIGHT (FATB, 'A', 2, A_Tracer , &States[S_TRACER+1]), - S_BRIGHT (FATB, 'B', 2, A_Tracer , &States[S_TRACER]), - -#define S_TRACEEXP (S_TRACER+2) - S_BRIGHT (FBXP, 'A', 8, NULL , &States[S_TRACEEXP+1]), - S_BRIGHT (FBXP, 'B', 6, NULL , &States[S_TRACEEXP+2]), - S_BRIGHT (FBXP, 'C', 4, NULL , NULL) -}; - -IMPLEMENT_ACTOR (ARevenantTracer, Doom, -1, 53) - PROP_RadiusFixed (11) - PROP_HeightFixed (8) - PROP_SpeedFixed (10) - PROP_Damage (10) - PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY) - PROP_Flags2 (MF2_PCROSS|MF2_IMPACT|MF2_NOTELEPORT|MF2_SEEKERMISSILE) - PROP_Flags4 (MF4_RANDOMIZE) - PROP_RenderStyle (STYLE_Add) - - PROP_SpawnState (S_TRACER) - PROP_DeathState (S_TRACEEXP) - - PROP_SeeSound ("skeleton/attack") - PROP_DeathSound ("skeleton/tracex") -END_DEFAULTS - -class ARevenantTracerSmoke : public AActor -{ - DECLARE_ACTOR (ARevenantTracerSmoke, AActor) -}; - -FState ARevenantTracerSmoke::States[] = -{ - S_NORMAL (PUFF, 'B', 4, NULL , &States[1]), - S_NORMAL (PUFF, 'C', 4, NULL , &States[2]), - S_NORMAL (PUFF, 'B', 4, NULL , &States[3]), - S_NORMAL (PUFF, 'C', 4, NULL , &States[4]), - S_NORMAL (PUFF, 'D', 4, NULL , NULL) -}; - -IMPLEMENT_ACTOR (ARevenantTracerSmoke, Doom, -1, 0) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY) - PROP_RenderStyle (STYLE_Translucent) - PROP_Alpha (TRANSLUC50) - - PROP_SpawnState (0) -END_DEFAULTS - // // A_SkelMissile // @@ -171,7 +24,7 @@ void A_SkelMissile (AActor *self) A_FaceTarget (self); missile = P_SpawnMissileZ (self, self->z + 48*FRACUNIT, - self->target, RUNTIME_CLASS(ARevenantTracer)); + self->target, PClass::FindClass("RevenantTracer")); if (missile != NULL) { @@ -206,7 +59,7 @@ void A_Tracer (AActor *self) // spawn a puff of smoke behind the rocket P_SpawnPuff (PClass::FindClass(NAME_BulletPuff), self->x, self->y, self->z, 0, 3); - smoke = Spawn (self->x - self->momx, + smoke = Spawn ("RevenantTracerSmoke", self->x - self->momx, self->y - self->momy, self->z, ALLOW_REPLACE); smoke->momz = FRACUNIT; diff --git a/src/g_shared/a_pickups.cpp b/src/g_shared/a_pickups.cpp index d1df807e7..f7cee0d47 100644 --- a/src/g_shared/a_pickups.cpp +++ b/src/g_shared/a_pickups.cpp @@ -271,30 +271,6 @@ void A_RestoreSpecialThing2 (AActor *thing) thing->SetState (thing->SpawnState); } -/***************************************************************************/ -/* AItemFog, shown for respawning Doom and Strife items */ -/***************************************************************************/ - -class AItemFog : public AActor -{ - DECLARE_ACTOR (AItemFog, AActor) -}; - -FState AItemFog::States[] = -{ - S_BRIGHT (IFOG, 'A', 6, NULL , &States[1]), - S_BRIGHT (IFOG, 'B', 6, NULL , &States[2]), - S_BRIGHT (IFOG, 'A', 6, NULL , &States[3]), - S_BRIGHT (IFOG, 'B', 6, NULL , &States[4]), - S_BRIGHT (IFOG, 'C', 6, NULL , &States[5]), - S_BRIGHT (IFOG, 'D', 6, NULL , &States[6]), - S_BRIGHT (IFOG, 'E', 6, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AItemFog, Doom, -1, 0) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY) - PROP_SpawnState (0) -END_DEFAULTS //--------------------------------------------------------------------------- // @@ -314,7 +290,7 @@ void A_RestoreSpecialDoomThing (AActor *self) { self->SetState (self->SpawnState); S_Sound (self, CHAN_VOICE, "misc/spawn", 1, ATTN_IDLE); - Spawn (self->x, self->y, self->z, ALLOW_REPLACE); + Spawn ("ItemFog", self->x, self->y, self->z, ALLOW_REPLACE); } } diff --git a/src/sc_man_scanner.h b/src/sc_man_scanner.h index c7d35b43d..5eba1e683 100644 --- a/src/sc_man_scanner.h +++ b/src/sc_man_scanner.h @@ -227,238 +227,250 @@ yy27: YYCTYPE yych; if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; - if(yych <= '9') { - if(yych <= '%') { + if(yych <= ':') { + if(yych <= '&') { if(yych <= ' ') { if(yych == 0x0A) goto yy35; goto yy33; } else { if(yych == '"') goto yy37; - goto yy49; + if(yych <= '%') goto yy50; + goto yy45; } } else { - if(yych <= ',') { - if(yych <= '&') goto yy44; - if(yych <= '\'') goto yy50; - goto yy49; + if(yych <= '-') { + if(yych <= '\'') goto yy51; + if(yych <= ',') goto yy50; + goto yy39; } else { - if(yych <= '-') goto yy39; if(yych <= '.') goto yy43; - if(yych >= '0') goto yy41; + if(yych <= '/') goto yy31; + if(yych <= '9') goto yy41; + goto yy44; } } } else { if(yych <= '^') { if(yych <= '=') { - if(yych <= ';') goto yy49; - if(yych <= '<') goto yy47; - goto yy45; + if(yych <= ';') goto yy50; + if(yych <= '<') goto yy48; + goto yy46; } else { - if(yych <= '>') goto yy48; - if(yych <= '@') goto yy49; - if(yych <= 'Z') goto yy50; - goto yy49; + if(yych <= '>') goto yy49; + if(yych <= '@') goto yy50; + if(yych <= 'Z') goto yy51; + goto yy50; } } else { if(yych <= 'z') { - if(yych == '`') goto yy49; - goto yy50; + if(yych == '`') goto yy50; + goto yy51; } else { - if(yych == '|') goto yy46; - if(yych <= '~') goto yy49; - goto yy50; + if(yych == '|') goto yy47; + if(yych <= '~') goto yy50; + goto yy51; } } } +yy31: yych = *(YYMARKER = ++YYCURSOR); - if(yych == '*') goto yy74; - if(yych == '/') goto yy72; + if(yych == '*') goto yy77; + if(yych == '/') goto yy75; yy32: -#line 79 "src/sc_man_scanner.re" +#line 80 "src/sc_man_scanner.re" { goto normal_token; } -#line 280 "src/sc_man_scanner.h" +#line 283 "src/sc_man_scanner.h" yy33: ++YYCURSOR; yych = *YYCURSOR; - goto yy71; + goto yy74; yy34: #line 68 "src/sc_man_scanner.re" { goto std1; } -#line 288 "src/sc_man_scanner.h" +#line 291 "src/sc_man_scanner.h" yy35: ++YYCURSOR; #line 69 "src/sc_man_scanner.re" { goto newline; } -#line 293 "src/sc_man_scanner.h" +#line 296 "src/sc_man_scanner.h" yy37: ++YYCURSOR; #line 70 "src/sc_man_scanner.re" { goto string; } -#line 298 "src/sc_man_scanner.h" +#line 301 "src/sc_man_scanner.h" yy39: ++YYCURSOR; #line 72 "src/sc_man_scanner.re" { goto negative_check; } -#line 303 "src/sc_man_scanner.h" +#line 306 "src/sc_man_scanner.h" yy41: ++YYCURSOR; - if((yych = *YYCURSOR) == '.') goto yy68; - if(yych <= '/') goto yy52; - if(yych <= '9') goto yy66; - goto yy52; + if((yych = *YYCURSOR) == '.') goto yy71; + if(yych <= '/') goto yy53; + if(yych <= '9') goto yy69; + goto yy53; yy42: -#line 80 "src/sc_man_scanner.re" +#line 81 "src/sc_man_scanner.re" { goto normal_token; } -#line 313 "src/sc_man_scanner.h" +#line 316 "src/sc_man_scanner.h" yy43: yych = *++YYCURSOR; if(yych <= '/') goto yy32; - if(yych <= '9') goto yy63; + if(yych <= '9') goto yy66; goto yy32; yy44: yych = *++YYCURSOR; - if(yych == '&') goto yy61; + if(yych == ':') goto yy64; goto yy32; yy45: yych = *++YYCURSOR; - if(yych == '=') goto yy59; + if(yych == '&') goto yy62; goto yy32; yy46: yych = *++YYCURSOR; - if(yych == '|') goto yy57; + if(yych == '=') goto yy60; goto yy32; yy47: yych = *++YYCURSOR; - if(yych == '<') goto yy55; + if(yych == '|') goto yy58; goto yy32; yy48: yych = *++YYCURSOR; - if(yych == '>') goto yy53; + if(yych == '<') goto yy56; goto yy32; yy49: yych = *++YYCURSOR; + if(yych == '>') goto yy54; goto yy32; yy50: yych = *++YYCURSOR; - goto yy52; + goto yy32; yy51: + yych = *++YYCURSOR; + goto yy53; +yy52: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; -yy52: +yy53: if(yych <= 'Z') { if(yych <= '/') { - if(yych == '\'') goto yy51; + if(yych == '\'') goto yy52; goto yy42; } else { - if(yych <= '9') goto yy51; + if(yych <= '9') goto yy52; if(yych <= '@') goto yy42; - goto yy51; + goto yy52; } } else { if(yych <= '`') { - if(yych == '_') goto yy51; + if(yych == '_') goto yy52; goto yy42; } else { - if(yych <= 'z') goto yy51; + if(yych <= 'z') goto yy52; if(yych <= '~') goto yy42; - goto yy51; + goto yy52; } } -yy53: +yy54: + ++YYCURSOR; +#line 79 "src/sc_man_scanner.re" + { goto normal_token; } +#line 380 "src/sc_man_scanner.h" +yy56: ++YYCURSOR; #line 78 "src/sc_man_scanner.re" { goto normal_token; } -#line 373 "src/sc_man_scanner.h" -yy55: +#line 385 "src/sc_man_scanner.h" +yy58: ++YYCURSOR; #line 77 "src/sc_man_scanner.re" { goto normal_token; } -#line 378 "src/sc_man_scanner.h" -yy57: +#line 390 "src/sc_man_scanner.h" +yy60: ++YYCURSOR; #line 76 "src/sc_man_scanner.re" { goto normal_token; } -#line 383 "src/sc_man_scanner.h" -yy59: +#line 395 "src/sc_man_scanner.h" +yy62: ++YYCURSOR; #line 75 "src/sc_man_scanner.re" { goto normal_token; } -#line 388 "src/sc_man_scanner.h" -yy61: +#line 400 "src/sc_man_scanner.h" +yy64: ++YYCURSOR; #line 74 "src/sc_man_scanner.re" { goto normal_token; } -#line 393 "src/sc_man_scanner.h" -yy63: +#line 405 "src/sc_man_scanner.h" +yy66: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if(yych <= '/') goto yy65; - if(yych <= '9') goto yy63; -yy65: + if(yych <= '/') goto yy68; + if(yych <= '9') goto yy66; +yy68: #line 73 "src/sc_man_scanner.re" { goto normal_token; } -#line 403 "src/sc_man_scanner.h" -yy66: +#line 415 "src/sc_man_scanner.h" +yy69: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; if(yych <= '@') { if(yych <= '-') { - if(yych == '\'') goto yy51; + if(yych == '\'') goto yy52; goto yy42; } else { - if(yych <= '.') goto yy68; + if(yych <= '.') goto yy71; if(yych <= '/') goto yy42; - if(yych <= '9') goto yy66; + if(yych <= '9') goto yy69; goto yy42; } } else { if(yych <= '_') { - if(yych <= 'Z') goto yy51; + if(yych <= 'Z') goto yy52; if(yych <= '^') goto yy42; - goto yy51; + goto yy52; } else { if(yych <= '`') goto yy42; - if(yych <= 'z') goto yy51; + if(yych <= 'z') goto yy52; if(yych <= '~') goto yy42; - goto yy51; + goto yy52; } } -yy68: - ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; - if(yych <= '/') goto yy65; - if(yych <= '9') goto yy68; - goto yy65; -yy70: - ++YYCURSOR; - if(YYLIMIT == YYCURSOR) YYFILL(1); - yych = *YYCURSOR; yy71: - if(yych == 0x0A) goto yy34; - if(yych <= ' ') goto yy70; - goto yy34; -yy72: ++YYCURSOR; if(YYLIMIT == YYCURSOR) YYFILL(1); yych = *YYCURSOR; - if(yych == 0x0A) goto yy76; - goto yy72; + if(yych <= '/') goto yy68; + if(yych <= '9') goto yy71; + goto yy68; +yy73: + ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; yy74: + if(yych == 0x0A) goto yy34; + if(yych <= ' ') goto yy73; + goto yy34; +yy75: + ++YYCURSOR; + if(YYLIMIT == YYCURSOR) YYFILL(1); + yych = *YYCURSOR; + if(yych == 0x0A) goto yy79; + goto yy75; +yy77: ++YYCURSOR; #line 65 "src/sc_man_scanner.re" { goto comment; } -#line 455 "src/sc_man_scanner.h" -yy76: +#line 467 "src/sc_man_scanner.h" +yy79: ++YYCURSOR; #line 66 "src/sc_man_scanner.re" { goto newline; } -#line 460 "src/sc_man_scanner.h" +#line 472 "src/sc_man_scanner.h" } -#line 83 "src/sc_man_scanner.re" +#line 84 "src/sc_man_scanner.re" } @@ -485,22 +497,22 @@ negative_check: comment: -#line 489 "src/sc_man_scanner.h" +#line 501 "src/sc_man_scanner.h" { YYCTYPE yych; if((YYLIMIT - YYCURSOR) < 2) YYFILL(2); yych = *YYCURSOR; - if(yych == 0x0A) goto yy82; - if(yych != '*') goto yy84; + if(yych == 0x0A) goto yy85; + if(yych != '*') goto yy87; ++YYCURSOR; - if((yych = *YYCURSOR) == '/') goto yy85; -yy81: -#line 129 "src/sc_man_scanner.re" + if((yych = *YYCURSOR) == '/') goto yy88; +yy84: +#line 130 "src/sc_man_scanner.re" { goto comment; } -#line 501 "src/sc_man_scanner.h" -yy82: +#line 513 "src/sc_man_scanner.h" +yy85: ++YYCURSOR; -#line 119 "src/sc_man_scanner.re" +#line 120 "src/sc_man_scanner.re" { if (YYCURSOR >= YYLIMIT) { @@ -511,13 +523,13 @@ yy82: sc_Crossed = true; goto comment; } -#line 515 "src/sc_man_scanner.h" -yy84: +#line 527 "src/sc_man_scanner.h" +yy87: yych = *++YYCURSOR; - goto yy81; -yy85: + goto yy84; +yy88: ++YYCURSOR; -#line 110 "src/sc_man_scanner.re" +#line 111 "src/sc_man_scanner.re" { if (YYCURSOR >= YYLIMIT) { @@ -526,9 +538,9 @@ yy85: } goto std1; } -#line 530 "src/sc_man_scanner.h" +#line 542 "src/sc_man_scanner.h" } -#line 130 "src/sc_man_scanner.re" +#line 131 "src/sc_man_scanner.re" newline: diff --git a/src/sc_man_scanner.re b/src/sc_man_scanner.re index 3f1287a28..0bf994e5e 100644 --- a/src/sc_man_scanner.re +++ b/src/sc_man_scanner.re @@ -71,6 +71,7 @@ std2: [-] { goto negative_check; } ((D* [.] D+) | (D+ [.] D*)) { goto normal_token; } /* decimal number */ + "::" { goto normal_token; } "&&" { goto normal_token; } "==" { goto normal_token; } "||" { goto normal_token; } diff --git a/src/thingdef.cpp b/src/thingdef.cpp index 57c449b86..c8bfa77b1 100644 --- a/src/thingdef.cpp +++ b/src/thingdef.cpp @@ -514,6 +514,7 @@ ACTOR(Stop) ACTOR(SPosAttackUseAtkSound) ACTOR(Respawn) ACTOR(BarrelDestroy) +ACTOR(PlayerSkinCheck) #include "d_dehackedactions.h" @@ -710,6 +711,7 @@ AFuncDesc AFTable[]= FUNC(A_KillMaster, NULL) FUNC(A_KillChildren, NULL) FUNC(A_CheckFloor, "L") + FUNC(A_PlayerSkinCheck, "L") {"A_BasicAttack", A_ComboAttack, "ISMF" }, // Weapon only functions @@ -1679,16 +1681,25 @@ static void RetargetStates (intptr_t count, const char *target) // processes a state block // //========================================================================== -static void ParseStateString(char * statestring) +static FString ParseStateString() { + FString statestring; + SC_MustGetString(); - strncpy (statestring, sc_String, 255); + statestring = sc_String; + if (SC_CheckString("::")) + { + SC_MustGetString (); + statestring += "::"; + statestring += sc_String; + } while (SC_CheckString (".")) { SC_MustGetString (); - strcat (statestring, "."); - strcat (statestring, sc_String); + statestring += "."; + statestring += sc_String; } + return statestring; } //========================================================================== @@ -1699,30 +1710,28 @@ static void ParseStateString(char * statestring) //========================================================================== static int ProcessStates(FActorInfo * actor, AActor * defaults, Baggage &bag) { - char statestring[256]; + FString statestring; intptr_t count = 0; FState state; FState * laststate = NULL; intptr_t lastlabel = -1; int minrequiredstate = -1; - statestring[255] = 0; - ChkBraceOpn(); SC_SetEscape(false); // disable escape sequences in the state parser while (!TestBraceCls() && !sc_End) { memset(&state,0,sizeof(state)); - ParseStateString(statestring); - if (!stricmp(statestring, "GOTO")) + statestring = ParseStateString(); + if (!statestring.CompareNoCase("GOTO")) { do_goto: - ParseStateString(statestring); + statestring = ParseStateString(); if (SC_CheckString ("+")) { SC_MustGetNumber (); - strcat (statestring, "+"); - strcat (statestring, sc_String); + statestring += '+'; + statestring += sc_String; } // copy the text - this must be resolved later! if (laststate != NULL) @@ -1738,7 +1747,7 @@ do_goto: SC_ScriptError("GOTO before first state"); } } - else if (!stricmp(statestring, "STOP")) + else if (!statestring.CompareNoCase("STOP")) { do_stop: if (laststate!=NULL) @@ -1755,7 +1764,7 @@ do_stop: continue; } } - else if (!stricmp(statestring, "WAIT") || !stricmp(statestring, "FAIL")) + else if (!statestring.CompareNoCase("WAIT") || !statestring.CompareNoCase("FAIL")) { if (!laststate) { @@ -1764,7 +1773,7 @@ do_stop: } laststate->NextState=(FState*)-2; } - else if (!stricmp(statestring, "LOOP")) + else if (!statestring.CompareNoCase("LOOP")) { if (!laststate) { @@ -1775,7 +1784,7 @@ do_stop: } else { - char * statestrp; + const char * statestrp; SC_MustGetString(); if (SC_Compare (":")) @@ -1785,12 +1794,12 @@ do_stop: { lastlabel = count; AddState(statestring, (FState *) (count+1)); - ParseStateString(statestring); - if (!stricmp(statestring, "GOTO")) + statestring = ParseStateString(); + if (!statestring.CompareNoCase("GOTO")) { goto do_goto; } - else if (!stricmp(statestring, "STOP")) + else if (!statestring.CompareNoCase("STOP")) { goto do_stop; } @@ -1801,7 +1810,7 @@ do_stop: SC_UnGet (); - if (strlen (statestring) != 4) + if (statestring.Len() != 4) { SC_ScriptError ("Sprite names must be exactly 4 characters\n"); } @@ -1810,7 +1819,7 @@ do_stop: state.Misc1=state.Misc2=0; state.ParameterIndex=0; SC_MustGetString(); - strncpy(statestring, sc_String + 1, 255); + statestring = (sc_String+1); statestrp = statestring; state.Frame=(*sc_String&223)-'A'; if ((*sc_String&223)<'A' || (*sc_String&223)>']') @@ -1853,7 +1862,7 @@ do_stop: strlwr (sc_String); int minreq=count; - if (DoSpecialFunctions(state,strlen(statestring)>0, &minreq, bag)) + if (DoSpecialFunctions(state, !statestring.IsEmpty(), &minreq, bag)) { if (minreq>minrequiredstate) minrequiredstate=minreq; goto endofstate; @@ -2081,11 +2090,11 @@ static FState *ResolveGotoLabel (AActor *actor, const PClass *mytype, char *name int v; // Check for classname - if ((pt = strchr (name, '.')) != NULL) + if ((pt = strstr (name, "::")) != NULL) { const char *classname = name; *pt = '\0'; - name = pt + 1; + name = pt + 2; // The classname may either be "Super" to identify this class's immediate // superclass, or it may be the name of any class that this one derives from. @@ -2094,7 +2103,7 @@ static FState *ResolveGotoLabel (AActor *actor, const PClass *mytype, char *name type = type->ParentClass; actor = GetDefaultByType (type); } - else if (!FindState(actor, type, classname)) + else { // first check whether a state of the desired name exists const PClass *stype = PClass::FindClass (classname); @@ -2117,12 +2126,6 @@ static FState *ResolveGotoLabel (AActor *actor, const PClass *mytype, char *name actor = GetDefaultByType (type); } } - else - { - // Restore the period in the name - *pt='.'; - name = (char*)classname; - } } label = name; // Check for offset diff --git a/src/thingdef_codeptr.cpp b/src/thingdef_codeptr.cpp index 7c16329b2..f27a69fee 100644 --- a/src/thingdef_codeptr.cpp +++ b/src/thingdef_codeptr.cpp @@ -1824,3 +1824,23 @@ void A_Respawn (AActor *actor) } } + +//========================================================================== +// +// A_PlayerSkinCheck +// +//========================================================================== + +void A_PlayerSkinCheck (AActor *actor) +{ + if (actor->player != NULL && + skins[actor->player->userinfo.skin].othergame) + { + int index = CheckIndex(1, &CallingState); + + if (index >= 0) + { + DoJump(actor, CallingState, StateParameters[index]); + } + } +} diff --git a/wadsrc/decorate/decorate.txt b/wadsrc/decorate/decorate.txt index a656ef6fc..74bdbf3f0 100644 --- a/wadsrc/decorate/decorate.txt +++ b/wadsrc/decorate/decorate.txt @@ -1,6 +1,7 @@ #include "actors/shared/blood.txt" #include "actors/shared/debris.txt" #include "actors/shared/splashes.txt" +#include "actors/shared/pickups.txt" #include "actors/doom/possessed.txt" #include "actors/doom/doomimp.txt" @@ -8,7 +9,10 @@ #include "actors/doom/lostsoul.txt" #include "actors/doom/cacodemon.txt" #include "actors/doom/bruiser.txt" +#include "actors/doom/revenant.txt" #include "actors/doom/arachnotron.txt" +#include "actors/doom/fatso.txt" +#include "actors/doom/painelemental.txt" #include "actors/doom/archvile.txt" #include "actors/doom/cyberdemon.txt" #include "actors/doom/spidermaster.txt" diff --git a/wadsrc/decorate/doom/arachnotron.txt b/wadsrc/decorate/doom/arachnotron.txt index 090fd05d6..2f6b9f683 100644 --- a/wadsrc/decorate/doom/arachnotron.txt +++ b/wadsrc/decorate/doom/arachnotron.txt @@ -45,7 +45,7 @@ ACTOR Arachnotron 68 Goto See+1 Death: BSPI J 20 A_Scream - BSPI K 7 A_Fall + BSPI K 7 A_NoBlocking BSPI LMNO 7 BSPI P -1 A_BossDeath Stop diff --git a/wadsrc/decorate/doom/archvile.txt b/wadsrc/decorate/doom/archvile.txt index be5cd8d08..cff9f96f9 100644 --- a/wadsrc/decorate/doom/archvile.txt +++ b/wadsrc/decorate/doom/archvile.txt @@ -51,7 +51,7 @@ ACTOR Archvile 64 Death: VILE Q 7 VILE R 7 A_Scream - VILE S 7 A_Fall + VILE S 7 A_NoBlocking VILE TUVWXY 7 VILE Z -1 Stop diff --git a/wadsrc/decorate/doom/bruiser.txt b/wadsrc/decorate/doom/bruiser.txt index b7fc48497..f9406f150 100644 --- a/wadsrc/decorate/doom/bruiser.txt +++ b/wadsrc/decorate/doom/bruiser.txt @@ -42,7 +42,7 @@ ACTOR BaronOfHell 3003 BOSS I 8 BOSS J 8 A_Scream BOSS K 8 - BOSS L 8 A_Fall + BOSS L 8 A_NoBlocking BOSS MN 8 BOSS O -1 A_BossDeath Stop @@ -90,7 +90,7 @@ ACTOR HellKnight : BaronOfHell 69 BOS2 I 8 BOS2 J 8 A_Scream BOS2 K 8 - BOS2 L 8 A_Fall + BOS2 L 8 A_NoBlocking BOS2 MN 8 BOS2 O -1 Stop diff --git a/wadsrc/decorate/doom/cacodemon.txt b/wadsrc/decorate/doom/cacodemon.txt index 330ccee67..ff3cfe7c6 100644 --- a/wadsrc/decorate/doom/cacodemon.txt +++ b/wadsrc/decorate/doom/cacodemon.txt @@ -45,7 +45,7 @@ ACTOR Cacodemon 3005 HEAD H 8 A_Scream HEAD I 8 HEAD J 8 - HEAD K 8 A_Fall + HEAD K 8 A_NoBlocking HEAD L -1 A_SetFloorClip Stop Raise: diff --git a/wadsrc/decorate/doom/cyberdemon.txt b/wadsrc/decorate/doom/cyberdemon.txt index 13ac31b28..60bcbcc4b 100644 --- a/wadsrc/decorate/doom/cyberdemon.txt +++ b/wadsrc/decorate/doom/cyberdemon.txt @@ -53,7 +53,7 @@ ACTOR Cyberdemon 16 CYBR H 10 CYBR I 10 A_Scream CYBR JKL 10 - CYBR M 10 A_Fall + CYBR M 10 A_NoBlocking CYBR NO 10 CYBR P 30 CYBR P -1 A_BossDeath diff --git a/wadsrc/decorate/doom/deadthings.txt b/wadsrc/decorate/doom/deadthings.txt index db75f20da..a1446a2f3 100644 --- a/wadsrc/decorate/doom/deadthings.txt +++ b/wadsrc/decorate/doom/deadthings.txt @@ -46,7 +46,7 @@ actor DeadZombieMan : ZombieMan 18 States { Spawn: - Goto Super.Death+4 + Goto Super::Death+4 } } @@ -60,7 +60,7 @@ actor DeadShotgunGuy : ShotgunGuy 19 States { Spawn: - Goto Super.Death+4 + Goto Super::Death+4 } }; @@ -73,7 +73,7 @@ actor DeadDoomImp : DoomImp 20 States { Spawn: - Goto Super.Death+4 + Goto Super::Death+4 } } @@ -86,7 +86,7 @@ actor DeadDemon : Demon 21 States { Spawn: - Goto Super.Death+5 + Goto Super::Death+5 } } @@ -99,7 +99,7 @@ actor DeadCacodemon : Cacodemon 22 States { Spawn: - Goto Super.Death+5 + Goto Super::Death+5 } } @@ -118,6 +118,6 @@ actor DeadLostSoul : LostSoul 23 States { Spawn: - Goto Super.Death+5 + Goto Super::Death+5 } } diff --git a/wadsrc/decorate/doom/demon.txt b/wadsrc/decorate/doom/demon.txt index b752bca8c..9ace39e4a 100644 --- a/wadsrc/decorate/doom/demon.txt +++ b/wadsrc/decorate/doom/demon.txt @@ -41,7 +41,7 @@ ACTOR Demon 3002 SARG I 8 SARG J 8 A_Scream SARG K 4 - SARG L 4 A_Fall + SARG L 4 A_NoBlocking SARG M 4 SARG N -1 Stop diff --git a/wadsrc/decorate/doom/doomimp.txt b/wadsrc/decorate/doom/doomimp.txt index 8628729b0..468aa3574 100644 --- a/wadsrc/decorate/doom/doomimp.txt +++ b/wadsrc/decorate/doom/doomimp.txt @@ -42,14 +42,14 @@ ACTOR DoomImp 3001 TROO I 8 TROO J 8 A_Scream TROO K 6 - TROO L 6 A_Fall + TROO L 6 A_NoBlocking TROO M -1 Stop XDeath: TROO N 5 TROO O 5 A_XScream TROO P 5 - TROO Q 5 A_Fall + TROO Q 5 A_NoBlocking TROO RST 5 TROO U -1 Stop diff --git a/wadsrc/decorate/doom/fatso.txt b/wadsrc/decorate/doom/fatso.txt new file mode 100644 index 000000000..2f8662a0a --- /dev/null +++ b/wadsrc/decorate/doom/fatso.txt @@ -0,0 +1,94 @@ +//=========================================================================== +// +// Mancubus +// +//=========================================================================== +ACTOR Fatso 67 +{ + Game Doom + SpawnID 112 + Health 600 + Radius 48 + Height 64 + Mass 1000 + Speed 8 + PainChance 80 + Monster + +FLOORCLIP + +BOSSDEATH + SeeSound "fatso/sight" + PainSound "fatso/pain" + DeathSound "fatso/death" + ActiveSound "fatso/active" + AttackSound "fatso/raiseguns" + Obituary "$OB_FATSO" + States + { + Spawn: + FATT AB 15 A_Look + Loop + See: + FATT AABBCCDDEEFF 4 A_Chase + Loop + Missile: + FATT G 20 A_FatRaise + FATT H 10 BRIGHT A_FatAttack1 + FATT IG 5 + FATT H 10 BRIGHT A_FatAttack2 + FATT IG 5 + FATT H 10 BRIGHT A_FatAttack3 + FATT IG 5 + Goto See + Pain: + FATT J 3 + FATT J 3 A_Pain + Goto See + Death: + FATT K 6 + FATT L 6 A_Scream + FATT M 6 A_NoBlocking + FATT NOPQRS 6 + FATT T -1 A_BossDeath + Stop + Raise: + FATT R 5 + FATT QPONMLK 5 + Goto See + } +} + + + +//=========================================================================== +// +// Mancubus fireball +// +//=========================================================================== +ACTOR FatShot +{ + Game Doom + SpawnID 153 + Radius 6 + Height 8 + Speed 20 + Damage 8 + Projectile + +RANDOMIZE + RenderStyle Add + Alpha 1 + SeeSound "fatso/attack" + DeathSound "fatso/shotx" + States + { + Spawn: + MANF AB 4 BRIGHT + Loop + Death: + MISL B 8 BRIGHT + MISL C 6 BRIGHT + MISL D 4 BRIGHT + Stop + } +} + + diff --git a/wadsrc/decorate/doom/keen.txt b/wadsrc/decorate/doom/keen.txt index bcb5b0a62..9e776934b 100644 --- a/wadsrc/decorate/doom/keen.txt +++ b/wadsrc/decorate/doom/keen.txt @@ -29,7 +29,7 @@ ACTOR CommanderKeen 72 KEEN B 6 KEEN C 6 A_Scream KEEN DEFGH 6 - KEEN I 6 A_Fall + KEEN I 6 A_NoBlocking KEEN J 6 KEEN K 6 A_KeenDie KEEN L -1 diff --git a/wadsrc/decorate/doom/lostsoul.txt b/wadsrc/decorate/doom/lostsoul.txt index d0e913919..d6f8de0c0 100644 --- a/wadsrc/decorate/doom/lostsoul.txt +++ b/wadsrc/decorate/doom/lostsoul.txt @@ -43,7 +43,7 @@ ACTOR LostSoul 3006 SKUL F 6 BRIGHT SKUL G 6 BRIGHT A_Scream SKUL H 6 BRIGHT - SKUL I 6 BRIGHT A_Fall + SKUL I 6 BRIGHT A_NoBlocking SKUL J 6 SKUL K 6 Stop diff --git a/wadsrc/decorate/doom/painelemental.txt b/wadsrc/decorate/doom/painelemental.txt new file mode 100644 index 000000000..25aaa2a25 --- /dev/null +++ b/wadsrc/decorate/doom/painelemental.txt @@ -0,0 +1,52 @@ +//=========================================================================== +// +// Pain Elemental +// +//=========================================================================== +ACTOR PainElemental 71 +{ + Game Doom + SpawnID 115 + Health 400 + Radius 31 + Height 56 + Mass 400 + Speed 8 + PainChance 128 + Monster + +FLOAT + +NOGRAVITY + SeeSound "pain/sight" + PainSound "pain/pain" + DeathSound "pain/death" + ActiveSound "pain/active" + States + { + Spawn: + PAIN A 10 A_Look + Loop + See: + PAIN AABBCC 3 A_Chase + Loop + Missile: + PAIN D 5 A_FaceTarget + PAIN E 5 A_FaceTarget + PAIN F 4 BRIGHT A_FaceTarget + PAIN F 1 BRIGHT A_PainAttack + Goto See + Pain: + PAIN G 6 + PAIN G 6 A_Pain + Goto See + Death: + PAIN H 8 + PAIN I 8 A_Scream + PAIN JK 8 + PAIN L 8 A_PainDie + PAIN M 8 + Stop + Raise: + PAIN MLKJIH 8 + Goto See + } +} diff --git a/wadsrc/decorate/doom/possessed.txt b/wadsrc/decorate/doom/possessed.txt index 10a4c3e04..b255cedef 100644 --- a/wadsrc/decorate/doom/possessed.txt +++ b/wadsrc/decorate/doom/possessed.txt @@ -42,14 +42,14 @@ ACTOR ZombieMan 3004 Death: POSS H 5 POSS I 5 A_Scream - POSS J 5 A_Fall + POSS J 5 A_NoBlocking POSS K 5 POSS L -1 Stop XDeath: POSS M 5 POSS N 5 A_XScream - POSS O 5 A_Fall + POSS O 5 A_NoBlocking POSS PQRST 5 POSS U -1 Stop @@ -104,14 +104,14 @@ ACTOR ShotgunGuy 9 Death: SPOS H 5 SPOS I 5 A_Scream - SPOS J 5 A_Fall + SPOS J 5 A_NoBlocking SPOS K 5 SPOS L -1 Stop XDeath: SPOS M 5 SPOS N 5 A_XScream - SPOS O 5 A_Fall + SPOS O 5 A_NoBlocking SPOS PQRST 5 SPOS U -1 Stop @@ -166,14 +166,14 @@ ACTOR ChaingunGuy 65 Death: CPOS H 5 CPOS I 5 A_Scream - CPOS J 5 A_Fall + CPOS J 5 A_NoBlocking CPOS KLM 5 CPOS N -1 Stop XDeath: CPOS O 5 CPOS P 5 A_XScream - CPOS Q 5 A_Fall + CPOS Q 5 A_NoBlocking CPOS RS 5 CPOS T -1 Stop @@ -229,14 +229,14 @@ ACTOR WolfensteinSS 84 Death: SSWV I 5 SSWV J 5 A_Scream - SSWV K 5 A_Fall + SSWV K 5 A_NoBlocking SSWV L 5 SSWV M -1 Stop XDeath: SSWV N 5 SSWV O 5 A_XScream - SSWV P 5 A_Fall + SSWV P 5 A_NoBlocking SSWV QRSTU 5 SSWV V -1 Stop diff --git a/wadsrc/decorate/doom/revenant.txt b/wadsrc/decorate/doom/revenant.txt new file mode 100644 index 000000000..307d8e981 --- /dev/null +++ b/wadsrc/decorate/doom/revenant.txt @@ -0,0 +1,117 @@ +//=========================================================================== +// +// Revenant +// +//=========================================================================== +ACTOR Revenant 66 +{ + Game Doom + SpawnID 20 + Health 300 + Radius 20 + Height 56 + Mass 500 + Speed 10 + PainChance 100 + Monster + +LONGMELEERANGE + +MISSILEMORE + +FLOORCLIP + SeeSound "skeleton/sight" + PainSound "skeleton/pain" + DeathSound "skeleton/death" + ActiveSound "skeleton/active" + MeleeSound "skeleton/melee" + HitObituary "$OB_UNDEADHIT" + Obituary "$OB_UNDEAD" + States + { + Spawn: + SKEL AB 10 A_Look + Loop + See: + SKEL AABBCCDDEEFF 2 A_Chase + Loop + Melee: + SKEL G 1 A_FaceTarget + SKEL G 6 A_SkelWhoosh + SKEL H 6 A_FaceTarget + SKEL I 6 A_SkelFist + Goto See + Missile: + SKEL J 1 BRIGHT A_FaceTarget + SKEL J 9 BRIGHT A_FaceTarget + SKEL K 10 A_SkelMissile + SKEL K 10 A_FaceTarget + Goto See + Pain: + SKEL L 5 + SKEL L 5 A_Pain + Goto See + Death: + SKEL LM 7 + SKEL N 7 A_Scream + SKEL O 7 A_NoBlocking + SKEL P 7 + SKEL Q -1 + Stop + Raise: + SKEL Q 5 + SKEL PONML 5 + Goto See + } +} + + +//=========================================================================== +// +// Revenant Tracer +// +//=========================================================================== +ACTOR RevenantTracer +{ + Game Doom + SpawnID 53 + Radius 11 + Height 8 + Speed 10 + Damage 10 + Projectile + +SEEKERMISSILE + +RANDOMIZE + SeeSound "skeleton/attack" + DeathSound "skeleton/tracex" + RenderStyle Add + States + { + Spawn: + FATB AB 2 BRIGHT A_Tracer + Loop + Death: + FBXP A 8 BRIGHT + FBXP B 6 BRIGHT + FBXP C 4 BRIGHT + Stop + } +} + + +//=========================================================================== +// +// Revenant Tracer Smoke +// +//=========================================================================== +ACTOR RevenantTracerSmoke +{ + +NOBLOCKMAP + +NOGRAVITY + +NOTELEPORT + RenderStyle Translucent + Alpha 0.5 + States + { + Spawn: + PUFF ABABC 4 + Stop + } +} diff --git a/wadsrc/decorate/doom/spidermaster.txt b/wadsrc/decorate/doom/spidermaster.txt index 3394deaf4..d2939c8ea 100644 --- a/wadsrc/decorate/doom/spidermaster.txt +++ b/wadsrc/decorate/doom/spidermaster.txt @@ -41,10 +41,10 @@ ACTOR SpiderMastermind 7 SPID EFF 3 A_Chase Loop Missile: - SPID A BRIGHT 20 A_FaceTarget - SPID G BRIGHT 4 A_SPosAttack - SPID H BRIGHT 4 A_SposAttack - SPID H BRIGHT 1 A_SpidRefire + SPID A 20 BRIGHT A_FaceTarget + SPID G 4 BRIGHT A_SPosAttackUseAtkSound + SPID H 4 BRIGHT A_SposAttackUseAtkSound + SPID H 1 BRIGHT A_SpidRefire Goto Missile+1 Pain: SPID I 3 @@ -52,7 +52,7 @@ ACTOR SpiderMastermind 7 Goto See Death: SPID J 20 A_Scream - SPID K 10 A_Fall + SPID K 10 A_NoBlocking SPID LMNOPQR 10 SPID S 30 SPID S -1 A_BossDeath diff --git a/wadsrc/decorate/hexen/hexenspecialdecs.txt b/wadsrc/decorate/hexen/hexenspecialdecs.txt index c387cd72d..2072c3800 100644 --- a/wadsrc/decorate/hexen/hexenspecialdecs.txt +++ b/wadsrc/decorate/hexen/hexenspecialdecs.txt @@ -102,7 +102,7 @@ ACTOR ZTwinedTorchUnlit : ZTwinedTorch 117 States { Spawn: - Goto Super.Inactive + Goto Super::Inactive } } @@ -134,7 +134,7 @@ ACTOR ZWallTorchUnlit : ZWallTorch 55 States { Spawn: - Goto Super.Inactive + Goto Super::Inactive } } @@ -219,7 +219,7 @@ ACTOR ZFireBullUnlit : ZFireBull 8043 States { Spawn: - Goto Super.Inactive+2 + Goto Super::Inactive+2 } } @@ -282,7 +282,7 @@ ACTOR ZCauldronUnlit : ZCauldron 8070 States { Spawn: - Goto Super.Inactive + Goto Super::Inactive } } diff --git a/wadsrc/zdoom.lst b/wadsrc/zdoom.lst index 2b710fb22..9f6ffb91c 100644 --- a/wadsrc/zdoom.lst +++ b/wadsrc/zdoom.lst @@ -244,6 +244,7 @@ decorate.txt decorate/decorate.txt actors/shared/blood.txt decorate/shared/blood.txt actors/shared/debris.txt decorate/shared/debris.txt actors/shared/splashes.txt decorate/shared/splashes.txt +actors/shared/pickups.txt decorate/shared/pickups.txt actors/doom/possessed.txt decorate/doom/possessed.txt actors/doom/doomimp.txt decorate/doom/doomimp.txt @@ -252,6 +253,9 @@ actors/doom/lostsoul.txt decorate/doom/lostsoul.txt actors/doom/cacodemon.txt decorate/doom/cacodemon.txt actors/doom/bruiser.txt decorate/doom/bruiser.txt actors/doom/arachnotron.txt decorate/doom/arachnotron.txt +actors/doom/fatso.txt decorate/doom/fatso.txt +actors/doom/revenant.txt decorate/doom/revenant.txt +actors/doom/painelemental.txt decorate/doom/painelemental.txt actors/doom/archvile.txt decorate/doom/archvile.txt actors/doom/cyberdemon.txt decorate/doom/cyberdemon.txt actors/doom/spidermaster.txt decorate/doom/spidermaster.txt