From 8c2f651bdb1048e9be10f17c2afd3b5490c99240 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Sat, 4 Nov 2006 22:26:04 +0000 Subject: [PATCH] - 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. SVN r375 (trunk) --- docs/rh-log.txt | 9 + src/g_doom/a_fatso.cpp | 136 +----------- src/g_doom/a_painelemental.cpp | 68 ------ src/g_doom/a_revenant.cpp | 151 +------------- src/g_shared/a_pickups.cpp | 26 +-- src/sc_man_scanner.h | 232 +++++++++++---------- src/sc_man_scanner.re | 1 + src/thingdef.cpp | 65 +++--- src/thingdef_codeptr.cpp | 20 ++ wadsrc/decorate/decorate.txt | 4 + wadsrc/decorate/doom/arachnotron.txt | 2 +- wadsrc/decorate/doom/archvile.txt | 2 +- wadsrc/decorate/doom/bruiser.txt | 4 +- wadsrc/decorate/doom/cacodemon.txt | 2 +- wadsrc/decorate/doom/cyberdemon.txt | 2 +- wadsrc/decorate/doom/deadthings.txt | 12 +- wadsrc/decorate/doom/demon.txt | 2 +- wadsrc/decorate/doom/doomimp.txt | 4 +- wadsrc/decorate/doom/fatso.txt | 94 +++++++++ wadsrc/decorate/doom/keen.txt | 2 +- wadsrc/decorate/doom/lostsoul.txt | 2 +- wadsrc/decorate/doom/painelemental.txt | 52 +++++ wadsrc/decorate/doom/possessed.txt | 16 +- wadsrc/decorate/doom/revenant.txt | 117 +++++++++++ wadsrc/decorate/doom/spidermaster.txt | 10 +- wadsrc/decorate/hexen/hexenspecialdecs.txt | 8 +- wadsrc/zdoom.lst | 4 + 27 files changed, 498 insertions(+), 549 deletions(-) create mode 100644 wadsrc/decorate/doom/fatso.txt create mode 100644 wadsrc/decorate/doom/painelemental.txt create mode 100644 wadsrc/decorate/doom/revenant.txt 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