From 269a54a25811b26e7819e35e6d9c7d3dc98df4ee Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Thu, 7 Aug 2008 15:46:52 +0000 Subject: [PATCH] - Added more DECORATE conversions by Karate Chris. SVN r1124 (trunk) --- docs/rh-log.txt | 1 + src/codepointers.h | 15 ++ src/g_hexen/a_clericholy.cpp | 6 +- src/g_hexen/a_hexenglobal.h | 2 +- src/g_hexen/a_magecone.cpp | 107 +-------- src/g_hexen/a_magelightning.cpp | 230 +------------------ src/g_hexen/a_magestaff.cpp | 179 +-------------- src/g_hexen/a_magewand.cpp | 90 +------- wadsrc/static/actors/hexen/magecone.txt | 89 +++++++ wadsrc/static/actors/hexen/magelightning.txt | 148 ++++++++++++ wadsrc/static/actors/hexen/magestaff.txt | 139 +++++++++++ wadsrc/static/actors/hexen/magewand.txt | 69 ++++++ wadsrc/static/decorate.txt | 6 +- 13 files changed, 493 insertions(+), 588 deletions(-) create mode 100644 wadsrc/static/actors/hexen/magecone.txt create mode 100644 wadsrc/static/actors/hexen/magelightning.txt create mode 100644 wadsrc/static/actors/hexen/magestaff.txt create mode 100644 wadsrc/static/actors/hexen/magewand.txt diff --git a/docs/rh-log.txt b/docs/rh-log.txt index 5c4c79f1b..dbfd23048 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -1,6 +1,7 @@ August 7, 2008 (Changes by Graf Zahl) - Added Gez's dropammofactor submission with some necessary changes. Also merged redundant ammo multiplication code from P_DropItem and ADehackedPickup::TryPickup. +- Restricted native action function definitions to zdoom.pk3. - Fixed. The Firedemon was missing a game filter. August 7, 2008 (SBARINfO update) diff --git a/src/codepointers.h b/src/codepointers.h index 6ff49ba35..730e838f0 100644 --- a/src/codepointers.h +++ b/src/codepointers.h @@ -233,6 +233,21 @@ WEAPON(CStaffInitBlink) WEAPON(CStaffCheckBlink) WEAPON(CStaffCheck) WEAPON(CStaffAttack) +WEAPON(FireConePL1) +WEAPON(ShedShard) +WEAPON(LightningReady) +WEAPON(MLightningAttack) +ACTOR(LightningZap) +ACTOR(LightningClip) +ACTOR(LightningRemove) +ACTOR(FreeTargMobj) +ACTOR(LastZap) +ACTOR(ZapMimic) +ACTOR(DropBloodscourgePieces) +WEAPON(MStaffAttack) +WEAPON(MStaffPalette) +ACTOR(MStaffTrack) +ACTOR(BeAdditive) ACTOR(FiredRocks) ACTOR(FiredChase) ACTOR(FiredAttack) diff --git a/src/g_hexen/a_clericholy.cpp b/src/g_hexen/a_clericholy.cpp index 308c5ed28..d96cb77b1 100644 --- a/src/g_hexen/a_clericholy.cpp +++ b/src/g_hexen/a_clericholy.cpp @@ -68,7 +68,7 @@ void ACWeaponPiece1::BeginPlay () class ACWeaponPiece2 : public AClericWeaponPiece { - DECLARE_ACTOR (ACWeaponPiece2, AClericWeaponPiece) + DECLARE_CLASS (ACWeaponPiece2, AClericWeaponPiece) public: void BeginPlay (); }; @@ -85,7 +85,7 @@ void ACWeaponPiece2::BeginPlay () class ACWeaponPiece3 : public AClericWeaponPiece { - DECLARE_ACTOR (ACWeaponPiece3, AClericWeaponPiece) + DECLARE_CLASS (ACWeaponPiece3, AClericWeaponPiece) public: void BeginPlay (); }; @@ -102,7 +102,7 @@ void ACWeaponPiece3::BeginPlay () class ACWeapWraithverge : public AClericWeapon { - DECLARE_ACTOR (ACWeapWraithverge, AClericWeapon) + DECLARE_CLASS (ACWeapWraithverge, AClericWeapon) public: void Serialize (FArchive &arc) { diff --git a/src/g_hexen/a_hexenglobal.h b/src/g_hexen/a_hexenglobal.h index 20f791c70..b098f6840 100644 --- a/src/g_hexen/a_hexenglobal.h +++ b/src/g_hexen/a_hexenglobal.h @@ -5,7 +5,7 @@ class ALightning : public AActor { - DECLARE_STATELESS_ACTOR (ALightning, AActor) + DECLARE_CLASS (ALightning, AActor) public: int SpecialMissileHit (AActor *victim); }; diff --git a/src/g_hexen/a_magecone.cpp b/src/g_hexen/a_magecone.cpp index 5a59d5e12..76d128999 100644 --- a/src/g_hexen/a_magecone.cpp +++ b/src/g_hexen/a_magecone.cpp @@ -21,99 +21,16 @@ static FRandom pr_cone ("FireConePL1"); void A_FireConePL1 (AActor *actor); void A_ShedShard (AActor *); -// The Mage's Frost Cone ---------------------------------------------------- - -class AMWeapFrost : public AMageWeapon -{ - DECLARE_ACTOR (AMWeapFrost, AMageWeapon) -}; - -FState AMWeapFrost::States[] = -{ -#define S_COS1 0 - S_BRIGHT (WMCS, 'A', 8, NULL , &States[S_COS1+1]), - S_BRIGHT (WMCS, 'B', 8, NULL , &States[S_COS1+2]), - S_BRIGHT (WMCS, 'C', 8, NULL , &States[S_COS1]), - -#define S_CONEREADY (S_COS1+3) - S_NORMAL (CONE, 'A', 1, A_WeaponReady , &States[S_CONEREADY]), - -#define S_CONEDOWN (S_CONEREADY+1) - S_NORMAL (CONE, 'A', 1, A_Lower , &States[S_CONEDOWN]), - -#define S_CONEUP (S_CONEDOWN+1) - S_NORMAL (CONE, 'A', 1, A_Raise , &States[S_CONEUP]), - -#define S_CONEATK (S_CONEUP+1) - S_NORMAL (CONE, 'B', 3, NULL , &States[S_CONEATK+1]), - S_NORMAL (CONE, 'C', 4, NULL , &States[S_CONEATK+2]), - S_NORMAL (CONE, 'D', 3, NULL , &States[S_CONEATK+3]), - S_NORMAL (CONE, 'E', 5, NULL , &States[S_CONEATK+4]), - S_NORMAL (CONE, 'F', 3, A_FireConePL1 , &States[S_CONEATK+5]), - S_NORMAL (CONE, 'G', 3, NULL , &States[S_CONEATK+6]), - S_NORMAL (CONE, 'A', 9, NULL , &States[S_CONEATK+7]), - S_NORMAL (CONE, 'A', 10, A_ReFire , &States[S_CONEREADY]), -}; - -IMPLEMENT_ACTOR (AMWeapFrost, Hexen, 53, 36) - PROP_Flags (MF_SPECIAL) - PROP_Flags5 (MF5_BLOODSPLATTER) - PROP_SpawnState (S_COS1) - - PROP_Weapon_SelectionOrder (1700) - PROP_Weapon_AmmoUse1 (3) - PROP_Weapon_AmmoGive1 (25) - PROP_Weapon_UpState (S_CONEUP) - PROP_Weapon_DownState (S_CONEDOWN) - PROP_Weapon_ReadyState (S_CONEREADY) - PROP_Weapon_AtkState (S_CONEATK) - PROP_Weapon_HoldAtkState (S_CONEATK+2) - PROP_Weapon_Kickback (150) - PROP_Weapon_YAdjust (20) - PROP_Weapon_MoveCombatDist (19000000) - PROP_Weapon_AmmoType1 ("Mana1") - PROP_Weapon_ProjectileType ("FrostMissile") - PROP_Inventory_PickupMessage("$TXT_WEAPON_M2") -END_DEFAULTS - // Frost Missile ------------------------------------------------------------ class AFrostMissile : public AActor { - DECLARE_ACTOR (AFrostMissile, AActor) + DECLARE_CLASS (AFrostMissile, AActor) public: int DoSpecialDamage (AActor *victim, int damage); }; -FState AFrostMissile::States[] = -{ - S_BRIGHT (SHRD, 'A', 2, NULL , &States[1]), - S_BRIGHT (SHRD, 'A', 3, A_ShedShard , &States[2]), - S_BRIGHT (SHRD, 'B', 3, NULL , &States[3]), - S_BRIGHT (SHRD, 'C', 3, NULL , &States[0]), - -#define S_SHARDFXE1_1 (4) - S_BRIGHT (SHEX, 'A', 5, NULL , &States[S_SHARDFXE1_1+1]), - S_BRIGHT (SHEX, 'B', 5, NULL , &States[S_SHARDFXE1_1+2]), - S_BRIGHT (SHEX, 'C', 5, NULL , &States[S_SHARDFXE1_1+3]), - S_BRIGHT (SHEX, 'D', 5, NULL , &States[S_SHARDFXE1_1+4]), - S_BRIGHT (SHEX, 'E', 5, NULL , NULL), -}; - -IMPLEMENT_ACTOR (AFrostMissile, Hexen, -1, 0) - PROP_SpeedFixed (25) - PROP_RadiusFixed (13) - PROP_HeightFixed (8) - PROP_Damage (1) - PROP_DamageType (NAME_Ice) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE) - PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS) - - PROP_SpawnState (0) - PROP_DeathState (S_SHARDFXE1_1) - - PROP_DeathSound ("MageShardsExplode") -END_DEFAULTS +IMPLEMENT_CLASS (AFrostMissile) int AFrostMissile::DoSpecialDamage (AActor *victim, int damage) { @@ -124,26 +41,6 @@ int AFrostMissile::DoSpecialDamage (AActor *victim, int damage) return damage; } -// Ice Shard ---------------------------------------------------------------- - -class AIceShard : public AFrostMissile -{ - DECLARE_ACTOR (AIceShard, AFrostMissile) -}; - -FState AIceShard::States[] = -{ - S_BRIGHT (SHRD, 'A', 3, NULL , &States[1]), - S_BRIGHT (SHRD, 'B', 3, NULL , &States[2]), - S_BRIGHT (SHRD, 'C', 3, NULL , &States[0]), -}; - -IMPLEMENT_ACTOR (AIceShard, Hexen, -1, 65) - PROP_DamageType (NAME_Ice) - PROP_Flags2 (MF2_NOTELEPORT) - PROP_SpawnState (0) -END_DEFAULTS - //============================================================================ // // A_FireConePL1 diff --git a/src/g_hexen/a_magelightning.cpp b/src/g_hexen/a_magelightning.cpp index eda2081a5..07a921685 100644 --- a/src/g_hexen/a_magelightning.cpp +++ b/src/g_hexen/a_magelightning.cpp @@ -29,93 +29,9 @@ void A_LastZap (AActor *); void A_LightningRemove (AActor *); void A_FreeTargMobj (AActor *); -// The Mage's Lightning Arc of Death ---------------------------------------- - -class AMWeapLightning : public AMageWeapon -{ - DECLARE_ACTOR (AMWeapLightning, AMageWeapon) -}; - -FState AMWeapLightning::States[] = -{ -#define S_MW_LIGHTNING1 0 - S_BRIGHT (WMLG, 'A', 4, NULL , &States[S_MW_LIGHTNING1+1]), - S_BRIGHT (WMLG, 'B', 4, NULL , &States[S_MW_LIGHTNING1+2]), - S_BRIGHT (WMLG, 'C', 4, NULL , &States[S_MW_LIGHTNING1+3]), - S_BRIGHT (WMLG, 'D', 4, NULL , &States[S_MW_LIGHTNING1+4]), - S_BRIGHT (WMLG, 'E', 4, NULL , &States[S_MW_LIGHTNING1+5]), - S_BRIGHT (WMLG, 'F', 4, NULL , &States[S_MW_LIGHTNING1+6]), - S_BRIGHT (WMLG, 'G', 4, NULL , &States[S_MW_LIGHTNING1+7]), - S_BRIGHT (WMLG, 'H', 4, NULL , &States[S_MW_LIGHTNING1]), - -#define S_MLIGHTNINGREADY (S_MW_LIGHTNING1+8) - S_BRIGHT (MLNG, 'A', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+1]), - S_BRIGHT (MLNG, 'A', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+2]), - S_BRIGHT (MLNG, 'A', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+3]), - S_BRIGHT (MLNG, 'A', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+4]), - S_BRIGHT (MLNG, 'A', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+5]), - S_BRIGHT (MLNG, 'A', 1, A_LightningReady , &States[S_MLIGHTNINGREADY+6]), - S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+7]), - S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+8]), - S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+9]), - S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+10]), - S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+11]), - S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+12]), - S_BRIGHT (MLNG, 'C', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+13]), - S_BRIGHT (MLNG, 'C', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+14]), - S_BRIGHT (MLNG, 'C', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+15]), - S_BRIGHT (MLNG, 'C', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+16]), - S_BRIGHT (MLNG, 'C', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+17]), - S_BRIGHT (MLNG, 'C', 1, A_LightningReady , &States[S_MLIGHTNINGREADY+18]), - S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+19]), - S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+20]), - S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+21]), - S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+22]), - S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+23]), - S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY]), - -#define S_MLIGHTNINGDOWN (S_MLIGHTNINGREADY+24) - S_BRIGHT (MLNG, 'A', 1, A_Lower , &States[S_MLIGHTNINGDOWN]), - -#define S_MLIGHTNINGUP (S_MLIGHTNINGDOWN+1) - S_BRIGHT (MLNG, 'A', 1, A_Raise , &States[S_MLIGHTNINGUP]), - -#define S_MLIGHTNINGATK (S_MLIGHTNINGUP+1) - S_BRIGHT (MLNG, 'D', 3, NULL , &States[S_MLIGHTNINGATK+1]), - S_BRIGHT (MLNG, 'E', 3, NULL , &States[S_MLIGHTNINGATK+2]), - S_BRIGHT (MLNG, 'F', 4, A_MLightningAttack , &States[S_MLIGHTNINGATK+3]), - S_BRIGHT (MLNG, 'G', 4, NULL , &States[S_MLIGHTNINGATK+4]), - S_BRIGHT (MLNG, 'H', 3, NULL , &States[S_MLIGHTNINGATK+5]), - S_BRIGHT (MLNG, 'I', 3, NULL , &States[S_MLIGHTNINGATK+6]), - S_BRIGHT2 (MLNG, 'I', 6, NULL , &States[S_MLIGHTNINGATK+7], 0, 199), - S_BRIGHT2 (MLNG, 'C', 2, NULL , &States[S_MLIGHTNINGATK+8], 0, 55), - S_BRIGHT2 (MLNG, 'B', 2, NULL , &States[S_MLIGHTNINGATK+9], 0, 50), - S_BRIGHT2 (MLNG, 'B', 2, NULL , &States[S_MLIGHTNINGATK+10], 0, 45), - S_BRIGHT2 (MLNG, 'B', 2, NULL , &States[S_MLIGHTNINGREADY], 0, 40), -}; - -IMPLEMENT_ACTOR (AMWeapLightning, Hexen, 8040, 0) - PROP_Flags (MF_SPECIAL|MF_NOGRAVITY) - PROP_SpawnState (S_MW_LIGHTNING1) - - PROP_Weapon_SelectionOrder (1100) - PROP_Weapon_AmmoUse1 (5) - PROP_Weapon_AmmoGive1 (25) - PROP_Weapon_UpState (S_MLIGHTNINGUP) - PROP_Weapon_DownState (S_MLIGHTNINGDOWN) - PROP_Weapon_ReadyState (S_MLIGHTNINGREADY) - PROP_Weapon_AtkState (S_MLIGHTNINGATK) - PROP_Weapon_Kickback (0) - PROP_Weapon_YAdjust (20) - PROP_Weapon_MoveCombatDist (23000000) - PROP_Weapon_AmmoType1 ("Mana2") - PROP_Weapon_ProjectileType ("LightningFloor") - PROP_Inventory_PickupMessage("$TXT_WEAPON_M3") -END_DEFAULTS - // Lightning ---------------------------------------------------------------- -IMPLEMENT_ABSTRACT_ACTOR (ALightning) +IMPLEMENT_CLASS(ALightning) int ALightning::SpecialMissileHit (AActor *thing) { @@ -170,150 +86,16 @@ int ALightning::SpecialMissileHit (AActor *thing) return 1; // lightning zaps through all sprites } -// Ceiling Lightning -------------------------------------------------------- - -class ALightningCeiling : public ALightning -{ - DECLARE_ACTOR (ALightningCeiling, ALightning) -}; - -FState ALightningCeiling::States[] = -{ -#define S_LIGHTNING_CEILING1 0 - S_BRIGHT (MLFX, 'A', 2, A_LightningZap , &States[S_LIGHTNING_CEILING1+1]), - S_BRIGHT (MLFX, 'B', 2, A_LightningClip , &States[S_LIGHTNING_CEILING1+2]), - S_BRIGHT (MLFX, 'C', 2, A_LightningClip , &States[S_LIGHTNING_CEILING1+3]), - S_BRIGHT (MLFX, 'D', 2, A_LightningClip , &States[S_LIGHTNING_CEILING1]), - -#define S_LIGHTNING_C_X1 (S_LIGHTNING_CEILING1+4) - S_BRIGHT (MLF2, 'A', 2, A_LightningRemove , &States[S_LIGHTNING_C_X1+1]), - S_BRIGHT (MLF2, 'B', 3, NULL , &States[S_LIGHTNING_C_X1+2]), - S_BRIGHT (MLF2, 'C', 3, NULL , &States[S_LIGHTNING_C_X1+3]), - S_BRIGHT (MLF2, 'D', 3, NULL , &States[S_LIGHTNING_C_X1+4]), - S_BRIGHT (MLF2, 'E', 3, NULL , &States[S_LIGHTNING_C_X1+5]), - S_BRIGHT (MLF2, 'K', 3, NULL , &States[S_LIGHTNING_C_X1+6]), - S_BRIGHT (MLF2, 'L', 3, NULL , &States[S_LIGHTNING_C_X1+7]), - S_BRIGHT (MLF2, 'M', 3, NULL , &States[S_LIGHTNING_C_X1+8]), - S_NORMAL (ACLO, 'E', 35, NULL , &States[S_LIGHTNING_C_X1+9]), - S_BRIGHT (MLF2, 'N', 3, NULL , &States[S_LIGHTNING_C_X1+10]), - S_BRIGHT (MLF2, 'O', 3, NULL , &States[S_LIGHTNING_C_X1+11]), - S_BRIGHT (MLF2, 'P', 4, NULL , &States[S_LIGHTNING_C_X1+12]), - S_BRIGHT (MLF2, 'Q', 3, NULL , &States[S_LIGHTNING_C_X1+13]), - S_BRIGHT (MLF2, 'P', 3, NULL , &States[S_LIGHTNING_C_X1+14]), - S_BRIGHT (MLF2, 'Q', 4, NULL , &States[S_LIGHTNING_C_X1+15]), - S_BRIGHT (MLF2, 'P', 3, NULL , &States[S_LIGHTNING_C_X1+16]), - S_BRIGHT (MLF2, 'O', 3, NULL , &States[S_LIGHTNING_C_X1+17]), - S_BRIGHT (MLF2, 'P', 3, NULL , &States[S_LIGHTNING_C_X1+18]), - S_BRIGHT (MLF2, 'P', 1, A_HideThing , &States[S_LIGHTNING_C_X1+19]), - S_NORMAL (ACLO, 'E', 1050, A_FreeTargMobj , NULL), -}; - -IMPLEMENT_ACTOR (ALightningCeiling, Hexen, -1, 0) - PROP_SpawnHealth (144) - PROP_SpeedFixed (25) - PROP_RadiusFixed (16) - PROP_HeightFixed (40) - PROP_Damage (8) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE) - PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS) - PROP_Flags3 (MF3_CEILINGHUGGER) - PROP_RenderStyle (STYLE_Add) - - PROP_SpawnState (S_LIGHTNING_CEILING1) - PROP_DeathState (S_LIGHTNING_C_X1) -END_DEFAULTS - -// Floor Lightning ---------------------------------------------------------- - -class ALightningFloor : public ALightning -{ - DECLARE_ACTOR (ALightningFloor, ALightning) -}; - -FState ALightningFloor::States[] = -{ -#define S_LIGHTNING_FLOOR1 0 - S_BRIGHT (MLFX, 'E', 2, A_LightningZap , &States[S_LIGHTNING_FLOOR1+1]), - S_BRIGHT (MLFX, 'F', 2, A_LightningClip , &States[S_LIGHTNING_FLOOR1+2]), - S_BRIGHT (MLFX, 'G', 2, A_LightningClip , &States[S_LIGHTNING_FLOOR1+3]), - S_BRIGHT (MLFX, 'H', 2, A_LightningClip , &States[S_LIGHTNING_FLOOR1]), - -#define S_LIGHTNING_F_X1 (S_LIGHTNING_FLOOR1+4) - S_BRIGHT (MLF2, 'F', 2, A_LightningRemove , &States[S_LIGHTNING_F_X1+1]), - S_BRIGHT (MLF2, 'G', 3, NULL , &States[S_LIGHTNING_F_X1+2]), - S_BRIGHT (MLF2, 'H', 3, NULL , &States[S_LIGHTNING_F_X1+3]), - S_BRIGHT (MLF2, 'I', 3, NULL , &States[S_LIGHTNING_F_X1+4]), - S_BRIGHT (MLF2, 'J', 3, NULL , &States[S_LIGHTNING_F_X1+5]), - S_BRIGHT (MLF2, 'K', 3, NULL , &States[S_LIGHTNING_F_X1+6]), - S_BRIGHT (MLF2, 'L', 3, NULL , &States[S_LIGHTNING_F_X1+7]), - S_BRIGHT (MLF2, 'M', 3, NULL , &States[S_LIGHTNING_F_X1+8]), - S_NORMAL (ACLO, 'E', 20, NULL , &States[S_LIGHTNING_F_X1+9]), - S_BRIGHT (MLF2, 'N', 3, NULL , &States[S_LIGHTNING_F_X1+10]), - S_BRIGHT (MLF2, 'O', 3, NULL , &States[S_LIGHTNING_F_X1+11]), - S_BRIGHT (MLF2, 'P', 4, NULL , &States[S_LIGHTNING_F_X1+12]), - S_BRIGHT (MLF2, 'Q', 3, NULL , &States[S_LIGHTNING_F_X1+13]), - S_BRIGHT (MLF2, 'P', 3, NULL , &States[S_LIGHTNING_F_X1+14]), - S_BRIGHT (MLF2, 'Q', 4, A_LastZap , &States[S_LIGHTNING_F_X1+15]), - S_BRIGHT (MLF2, 'P', 3, NULL , &States[S_LIGHTNING_F_X1+16]), - S_BRIGHT (MLF2, 'O', 3, NULL , &States[S_LIGHTNING_F_X1+17]), - S_BRIGHT (MLF2, 'P', 3, NULL , &States[S_LIGHTNING_F_X1+18]), - S_BRIGHT (MLF2, 'P', 1, A_HideThing , &ALightningCeiling::States[S_LIGHTNING_C_X1+19]), -}; - -IMPLEMENT_ACTOR (ALightningFloor, Hexen, -1, 0) - PROP_SpawnHealth (144) - PROP_SpeedFixed (25) - PROP_RadiusFixed (16) - PROP_HeightFixed (40) - PROP_Damage (8) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE) - PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS) - PROP_Flags3 (MF3_FLOORHUGGER) - PROP_RenderStyle (STYLE_Add) - - PROP_SpawnState (S_LIGHTNING_FLOOR1) - PROP_DeathState (S_LIGHTNING_F_X1) -END_DEFAULTS - // Lightning Zap ------------------------------------------------------------ class ALightningZap : public AActor { - DECLARE_ACTOR (ALightningZap, AActor) + DECLARE_CLASS (ALightningZap, AActor) public: int SpecialMissileHit (AActor *thing); }; -FState ALightningZap::States[] = -{ -#define S_LIGHTNING_ZAP1 0 - S_BRIGHT (MLFX, 'I', 2, A_ZapMimic , &States[S_LIGHTNING_ZAP1+1]), - S_BRIGHT (MLFX, 'J', 2, A_ZapMimic , &States[S_LIGHTNING_ZAP1+2]), - S_BRIGHT (MLFX, 'K', 2, A_ZapMimic , &States[S_LIGHTNING_ZAP1+3]), - S_BRIGHT (MLFX, 'L', 2, A_ZapMimic , &States[S_LIGHTNING_ZAP1+4]), - S_BRIGHT (MLFX, 'M', 2, A_ZapMimic , &States[S_LIGHTNING_ZAP1]), - -#define S_LIGHTNING_ZAP_X1 (S_LIGHTNING_ZAP1+5) - S_BRIGHT (MLFX, 'N', 2, NULL , &States[S_LIGHTNING_ZAP_X1+1]), - S_BRIGHT (MLFX, 'O', 2, NULL , &States[S_LIGHTNING_ZAP_X1+2]), - S_BRIGHT (MLFX, 'P', 2, NULL , &States[S_LIGHTNING_ZAP_X1+3]), - S_BRIGHT (MLFX, 'Q', 2, NULL , &States[S_LIGHTNING_ZAP_X1+4]), - S_BRIGHT (MLFX, 'R', 2, NULL , &States[S_LIGHTNING_ZAP_X1+5]), - S_BRIGHT (MLFX, 'S', 2, NULL , &States[S_LIGHTNING_ZAP_X1+6]), - S_BRIGHT (MLFX, 'T', 2, NULL , &States[S_LIGHTNING_ZAP_X1+7]), - S_BRIGHT (MLFX, 'U', 2, NULL , NULL), -}; - -IMPLEMENT_ACTOR (ALightningZap, Hexen, -1, 0) - PROP_RadiusFixed (15) - PROP_HeightFixed (35) - PROP_Damage (2) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE) - PROP_RenderStyle (STYLE_Add) - - PROP_SpawnState (S_LIGHTNING_ZAP1) - PROP_DeathState (S_LIGHTNING_ZAP_X1+7) -END_DEFAULTS +IMPLEMENT_CLASS (ALightningZap) int ALightningZap::SpecialMissileHit (AActor *thing) { @@ -486,8 +268,8 @@ void A_MLightningAttack2 (AActor *actor) { AActor *fmo, *cmo; - fmo = P_SpawnPlayerMissile (actor, RUNTIME_CLASS(ALightningFloor)); - cmo = P_SpawnPlayerMissile (actor, RUNTIME_CLASS(ALightningCeiling)); + fmo = P_SpawnPlayerMissile (actor, PClass::FindClass ("LightningFloor")); + cmo = P_SpawnPlayerMissile (actor, PClass::FindClass ("LightningCeiling")); if (fmo) { fmo->special1 = 0; @@ -560,7 +342,7 @@ void A_LastZap (AActor *actor) mo = Spawn (actor->x, actor->y, actor->z, ALLOW_REPLACE); if (mo) { - mo->SetState (&ALightningZap::States[S_LIGHTNING_ZAP_X1]); + mo->SetState (mo->FindState ("Death")); mo->momz = 40*FRACUNIT; mo->Damage = 0; } diff --git a/src/g_hexen/a_magestaff.cpp b/src/g_hexen/a_magestaff.cpp index 7ba7a49a9..a59a92714 100644 --- a/src/g_hexen/a_magestaff.cpp +++ b/src/g_hexen/a_magestaff.cpp @@ -22,16 +22,14 @@ static divline_t BlockCheckLine; class AMageWeaponPiece : public AFourthWeaponPiece { - DECLARE_STATELESS_ACTOR (AMageWeaponPiece, AFourthWeaponPiece) + DECLARE_CLASS (AMageWeaponPiece, AFourthWeaponPiece) public: void BeginPlay (); protected: bool MatchPlayerClass (AActor *toucher); }; -IMPLEMENT_STATELESS_ACTOR (AMageWeaponPiece, Hexen, -1, 0) - PROP_Inventory_PickupMessage("$TXT_BLOODSCOURGE_PIECE") -END_DEFAULTS +IMPLEMENT_CLASS (AMageWeaponPiece) bool AMageWeaponPiece::MatchPlayerClass (AActor *toucher) { @@ -43,21 +41,12 @@ bool AMageWeaponPiece::MatchPlayerClass (AActor *toucher) class AMWeaponPiece1 : public AMageWeaponPiece { - DECLARE_ACTOR (AMWeaponPiece1, AMageWeaponPiece) + DECLARE_CLASS (AMWeaponPiece1, AMageWeaponPiece) public: void BeginPlay (); }; -FState AMWeaponPiece1::States[] = -{ - S_BRIGHT (WMS1, 'A', -1, NULL , NULL), -}; - -IMPLEMENT_ACTOR (AMWeaponPiece1, Hexen, 21, 37) - PROP_Flags (MF_SPECIAL) - PROP_Flags2 (MF2_FLOATBOB) - PROP_SpawnState (0) -END_DEFAULTS +IMPLEMENT_CLASS (AMWeaponPiece1) void AMWeaponPiece1::BeginPlay () { @@ -69,21 +58,12 @@ void AMWeaponPiece1::BeginPlay () class AMWeaponPiece2 : public AMageWeaponPiece { - DECLARE_ACTOR (AMWeaponPiece2, AMageWeaponPiece) + DECLARE_CLASS (AMWeaponPiece2, AMageWeaponPiece) public: void BeginPlay (); }; -FState AMWeaponPiece2::States[] = -{ - S_BRIGHT (WMS2, 'A', -1, NULL , NULL), -}; - -IMPLEMENT_ACTOR (AMWeaponPiece2, Hexen, 22, 38) - PROP_Flags (MF_SPECIAL) - PROP_Flags2 (MF2_FLOATBOB) - PROP_SpawnState (0) -END_DEFAULTS +IMPLEMENT_CLASS (AMWeaponPiece2) void AMWeaponPiece2::BeginPlay () { @@ -95,21 +75,12 @@ void AMWeaponPiece2::BeginPlay () class AMWeaponPiece3 : public AMageWeaponPiece { - DECLARE_ACTOR (AMWeaponPiece3, AMageWeaponPiece) + DECLARE_CLASS (AMWeaponPiece3, AMageWeaponPiece) public: void BeginPlay (); }; -FState AMWeaponPiece3::States[] = -{ - S_BRIGHT (WMS3, 'A', -1, NULL , NULL), -}; - -IMPLEMENT_ACTOR (AMWeaponPiece3, Hexen, 23, 39) - PROP_Flags (MF_SPECIAL) - PROP_Flags2 (MF2_FLOATBOB) - PROP_SpawnState (0) -END_DEFAULTS +IMPLEMENT_CLASS (AMWeaponPiece3) void AMWeaponPiece3::BeginPlay () { @@ -117,31 +88,11 @@ void AMWeaponPiece3::BeginPlay () PieceValue = WPIECE3<<6; } -// An actor that spawns the three pieces of the mage's fourth weapon -------- - -// This gets spawned if weapon drop is on so that other players can pick up -// this player's weapon. - -class ABloodscourgeDrop : public AActor -{ - DECLARE_ACTOR (ABloodscourgeDrop, AActor) -}; - -FState ABloodscourgeDrop::States[] = -{ - S_NORMAL (TNT1, 'A', 1, NULL, &States[1]), - S_NORMAL (TNT1, 'A', 1, A_DropBloodscourgePieces, NULL) -}; - -IMPLEMENT_ACTOR (ABloodscourgeDrop, Hexen, -1, 0) - PROP_SpawnState (0) -END_DEFAULTS - // The Mages's Staff (Bloodscourge) ----------------------------------------- class AMWeapBloodscourge : public AMageWeapon { - DECLARE_ACTOR (AMWeapBloodscourge, AMageWeapon) + DECLARE_CLASS (AMWeapBloodscourge, AMageWeapon) public: void Serialize (FArchive &arc) { @@ -155,84 +106,7 @@ public: BYTE MStaffCount; }; -FState AMWeapBloodscourge::States[] = -{ - // Dummy state, because the fourth weapon does not appear in a level directly. - S_NORMAL (TNT1, 'A', -1, NULL , NULL), - -#define S_MSTAFFREADY 1 - S_NORMAL (MSTF, 'A', 1, A_WeaponReady , &States[S_MSTAFFREADY+1]), - S_NORMAL (MSTF, 'A', 1, A_WeaponReady , &States[S_MSTAFFREADY+2]), - S_NORMAL (MSTF, 'A', 1, A_WeaponReady , &States[S_MSTAFFREADY+3]), - S_NORMAL (MSTF, 'A', 1, A_WeaponReady , &States[S_MSTAFFREADY+4]), - S_NORMAL (MSTF, 'A', 1, A_WeaponReady , &States[S_MSTAFFREADY+5]), - S_NORMAL (MSTF, 'A', 1, A_WeaponReady , &States[S_MSTAFFREADY+6]), - S_NORMAL (MSTF, 'B', 1, A_WeaponReady , &States[S_MSTAFFREADY+7]), - S_NORMAL (MSTF, 'B', 1, A_WeaponReady , &States[S_MSTAFFREADY+8]), - S_NORMAL (MSTF, 'B', 1, A_WeaponReady , &States[S_MSTAFFREADY+9]), - S_NORMAL (MSTF, 'B', 1, A_WeaponReady , &States[S_MSTAFFREADY+10]), - S_NORMAL (MSTF, 'B', 1, A_WeaponReady , &States[S_MSTAFFREADY+11]), - S_NORMAL (MSTF, 'B', 1, A_WeaponReady , &States[S_MSTAFFREADY+12]), - S_NORMAL (MSTF, 'C', 1, A_WeaponReady , &States[S_MSTAFFREADY+13]), - S_NORMAL (MSTF, 'C', 1, A_WeaponReady , &States[S_MSTAFFREADY+14]), - S_NORMAL (MSTF, 'C', 1, A_WeaponReady , &States[S_MSTAFFREADY+15]), - S_NORMAL (MSTF, 'C', 1, A_WeaponReady , &States[S_MSTAFFREADY+16]), - S_NORMAL (MSTF, 'C', 1, A_WeaponReady , &States[S_MSTAFFREADY+17]), - S_NORMAL (MSTF, 'C', 1, A_WeaponReady , &States[S_MSTAFFREADY+18]), - S_NORMAL (MSTF, 'D', 1, A_WeaponReady , &States[S_MSTAFFREADY+19]), - S_NORMAL (MSTF, 'D', 1, A_WeaponReady , &States[S_MSTAFFREADY+20]), - S_NORMAL (MSTF, 'D', 1, A_WeaponReady , &States[S_MSTAFFREADY+21]), - S_NORMAL (MSTF, 'D', 1, A_WeaponReady , &States[S_MSTAFFREADY+22]), - S_NORMAL (MSTF, 'D', 1, A_WeaponReady , &States[S_MSTAFFREADY+23]), - S_NORMAL (MSTF, 'D', 1, A_WeaponReady , &States[S_MSTAFFREADY+24]), - S_NORMAL (MSTF, 'E', 1, A_WeaponReady , &States[S_MSTAFFREADY+25]), - S_NORMAL (MSTF, 'E', 1, A_WeaponReady , &States[S_MSTAFFREADY+26]), - S_NORMAL (MSTF, 'E', 1, A_WeaponReady , &States[S_MSTAFFREADY+27]), - S_NORMAL (MSTF, 'E', 1, A_WeaponReady , &States[S_MSTAFFREADY+28]), - S_NORMAL (MSTF, 'E', 1, A_WeaponReady , &States[S_MSTAFFREADY+29]), - S_NORMAL (MSTF, 'E', 1, A_WeaponReady , &States[S_MSTAFFREADY+30]), - S_NORMAL (MSTF, 'F', 1, A_WeaponReady , &States[S_MSTAFFREADY+31]), - S_NORMAL (MSTF, 'F', 1, A_WeaponReady , &States[S_MSTAFFREADY+32]), - S_NORMAL (MSTF, 'F', 1, A_WeaponReady , &States[S_MSTAFFREADY+33]), - S_NORMAL (MSTF, 'F', 1, A_WeaponReady , &States[S_MSTAFFREADY+34]), - S_NORMAL (MSTF, 'F', 1, A_WeaponReady , &States[S_MSTAFFREADY]), - -#define S_MSTAFFDOWN (S_MSTAFFREADY+35) - S_NORMAL (MSTF, 'A', 1, A_Lower , &States[S_MSTAFFDOWN]), - -#define S_MSTAFFUP (S_MSTAFFDOWN+1) - S_NORMAL (MSTF, 'A', 1, A_Raise , &States[S_MSTAFFUP]), - -#define S_MSTAFFATK (S_MSTAFFUP+1) - S_NORMAL2 (MSTF, 'G', 4, NULL , &States[S_MSTAFFATK+1], 0, 40), - S_BRIGHT2 (MSTF, 'H', 4, A_MStaffAttack , &States[S_MSTAFFATK+2], 0, 48), - S_BRIGHT2 (MSTF, 'H', 2, A_MStaffPalette , &States[S_MSTAFFATK+3], 0, 48), - S_NORMAL2 (MSTF, 'I', 2, A_MStaffPalette , &States[S_MSTAFFATK+4], 0, 48), - S_NORMAL2 (MSTF, 'I', 2, A_MStaffPalette , &States[S_MSTAFFATK+5], 0, 48), - S_NORMAL2 (MSTF, 'I', 1, NULL , &States[S_MSTAFFATK+6], 0, 40), - S_NORMAL2 (MSTF, 'J', 5, NULL , &States[S_MSTAFFREADY], 0, 36) -}; - -IMPLEMENT_ACTOR (AMWeapBloodscourge, Hexen, -1, 0) - PROP_Flags (MF_SPECIAL) - PROP_SpawnState (0) - - PROP_Weapon_SelectionOrder (3100) - PROP_Weapon_Flags (WIF_PRIMARY_USES_BOTH) - PROP_Weapon_AmmoUse1 (15) - PROP_Weapon_AmmoUse2 (15) - PROP_Weapon_UpState (S_MSTAFFUP) - PROP_Weapon_DownState (S_MSTAFFDOWN) - PROP_Weapon_ReadyState (S_MSTAFFREADY) - PROP_Weapon_AtkState (S_MSTAFFATK) - PROP_Weapon_Kickback (150) - PROP_Weapon_YAdjust (20) - PROP_Weapon_MoveCombatDist (20000000) - PROP_Weapon_AmmoType1 ("Mana1") - PROP_Weapon_AmmoType2 ("Mana2") - PROP_Weapon_ProjectileType ("MageStaffFX2") - PROP_Inventory_PickupMessage("$TXT_WEAPON_M4") -END_DEFAULTS +IMPLEMENT_CLASS (AMWeapBloodscourge) // Mage Staff FX2 (Bloodscourge) -------------------------------------------- @@ -243,7 +117,7 @@ void A_BeAdditive (AActor *self) class AMageStaffFX2 : public AActor { - DECLARE_ACTOR (AMageStaffFX2, AActor) + DECLARE_CLASS(AMageStaffFX2, AActor) public: void GetExplodeParms (int &damage, int &dist, bool &hurtSource); int SpecialMissileHit (AActor *victim); @@ -251,36 +125,7 @@ public: bool SpecialBlastHandling (AActor *source, fixed_t strength); }; -FState AMageStaffFX2::States[] = -{ -#define S_MSTAFF_FX2_1 0 - S_BRIGHT (MSP2, 'A', 2, A_MStaffTrack , &States[S_MSTAFF_FX2_1+1]), - S_BRIGHT (MSP2, 'B', 2, A_MStaffTrack , &States[S_MSTAFF_FX2_1+2]), - S_BRIGHT (MSP2, 'C', 2, A_MStaffTrack , &States[S_MSTAFF_FX2_1+3]), - S_BRIGHT (MSP2, 'D', 2, A_MStaffTrack , &States[S_MSTAFF_FX2_1]), - -#define S_MSTAFF_FX2_X1 (S_MSTAFF_FX2_1+4) - S_BRIGHT (MSP2, 'E', 4, A_BeAdditive , &States[S_MSTAFF_FX2_X1+1]), - S_BRIGHT (MSP2, 'F', 5, A_Explode , &States[S_MSTAFF_FX2_X1+2]), - S_BRIGHT (MSP2, 'G', 5, NULL , &States[S_MSTAFF_FX2_X1+3]), - S_BRIGHT (MSP2, 'H', 5, NULL , &States[S_MSTAFF_FX2_X1+4]), - S_BRIGHT (MSP2, 'I', 4, NULL , NULL), -}; - -IMPLEMENT_ACTOR (AMageStaffFX2, Hexen, -1, 0) - PROP_SpeedFixed (17) - PROP_HeightFixed (8) - PROP_Damage (4) - PROP_DamageType (NAME_Fire) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE) - PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS|MF2_SEEKERMISSILE) - PROP_Flags4 (MF4_EXTREMEDEATH) - - PROP_SpawnState (S_MSTAFF_FX2_1) - PROP_DeathState (S_MSTAFF_FX2_X1) - - PROP_DeathSound ("MageStaffExplode") -END_DEFAULTS +IMPLEMENT_CLASS (AMageStaffFX2) void AMageStaffFX2::GetExplodeParms (int &damage, int &dist, bool &hurtSource) { diff --git a/src/g_hexen/a_magewand.cpp b/src/g_hexen/a_magewand.cpp index b9794ca46..468064a1c 100644 --- a/src/g_hexen/a_magewand.cpp +++ b/src/g_hexen/a_magewand.cpp @@ -15,100 +15,16 @@ static FRandom pr_smoke ("MWandSmoke"); void A_MWandAttack (AActor *actor); -// The Mage's Wand ---------------------------------------------------------- - -class AMWeapWand : public AMageWeapon -{ - DECLARE_ACTOR (AMWeapWand, AMageWeapon) -}; - -FState AMWeapWand::States[] = -{ -#define S_MWANDREADY 0 - S_NORMAL (MWND, 'A', 1, A_WeaponReady , &States[S_MWANDREADY]), - -#define S_MWANDDOWN (S_MWANDREADY+1) - S_NORMAL (MWND, 'A', 1, A_Lower , &States[S_MWANDDOWN]), - -#define S_MWANDUP (S_MWANDDOWN+1) - S_NORMAL (MWND, 'A', 1, A_Raise , &States[S_MWANDUP]), - -#define S_MWANDATK (S_MWANDUP+1) - S_NORMAL (MWND, 'A', 6, NULL , &States[S_MWANDATK+1]), - S_BRIGHT2 (MWND, 'B', 6, A_MWandAttack , &States[S_MWANDATK+2], 0, 48), - S_NORMAL2 (MWND, 'A', 3, NULL , &States[S_MWANDATK+3], 0, 40), - S_NORMAL2 (MWND, 'A', 3, A_ReFire , &States[S_MWANDREADY], 0, 36), -}; - -IMPLEMENT_ACTOR (AMWeapWand, Hexen, -1, 0) - PROP_Weapon_SelectionOrder (3600) - PROP_Weapon_UpState (S_MWANDUP) - PROP_Weapon_DownState (S_MWANDDOWN) - PROP_Weapon_ReadyState (S_MWANDREADY) - PROP_Weapon_AtkState (S_MWANDATK) - PROP_Weapon_Kickback (0) - PROP_Weapon_YAdjust (9) - PROP_Weapon_MoveCombatDist (25000000) - PROP_Weapon_ProjectileType ("MageWandMissile") -END_DEFAULTS - -// Wand Smoke --------------------------------------------------------------- - -class AMageWandSmoke : public AActor -{ - DECLARE_ACTOR (AMageWandSmoke, AActor) -}; - -FState AMageWandSmoke::States[] = -{ - S_NORMAL (MWND, 'C', 4, NULL , &States[1]), - S_NORMAL (MWND, 'D', 4, NULL , &States[2]), - S_NORMAL (MWND, 'C', 4, NULL , &States[3]), - S_NORMAL (MWND, 'D', 4, NULL , NULL), -}; - -IMPLEMENT_ACTOR (AMageWandSmoke, Hexen, -1, 0) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_SHADOW) - PROP_Flags2 (MF2_NOTELEPORT|MF2_CANNOTPUSH|MF2_NODMGTHRUST) - PROP_SpawnState (0) - PROP_RenderStyle (STYLE_Translucent) - PROP_Alpha (HX_SHADOW) -END_DEFAULTS - // Wand Missile ------------------------------------------------------------- class AMageWandMissile : public AActor { - DECLARE_ACTOR (AMageWandMissile, AActor) + DECLARE_CLASS(AMageWandMissile, AActor) public: void Tick (); }; -FState AMageWandMissile::States[] = -{ -#define S_MWAND_MISSILE 0 - S_BRIGHT (MWND, 'C', 4, NULL , &States[S_MWAND_MISSILE+1]), - S_BRIGHT (MWND, 'D', 4, NULL , &States[S_MWAND_MISSILE]), - -#define S_MWANDPUFF (S_MWAND_MISSILE+2) - S_BRIGHT (MWND, 'E', 4, NULL , &States[S_MWANDPUFF+1]), - S_BRIGHT (MWND, 'F', 3, NULL , &States[S_MWANDPUFF+2]), - S_BRIGHT (MWND, 'G', 4, NULL , &States[S_MWANDPUFF+3]), - S_BRIGHT (MWND, 'H', 3, NULL , &States[S_MWANDPUFF+4]), - S_BRIGHT (MWND, 'I', 4, NULL , NULL), -}; - -IMPLEMENT_ACTOR (AMageWandMissile, Hexen, -1, 0) - PROP_SpeedFixed (184) - PROP_RadiusFixed (12) - PROP_HeightFixed (8) - PROP_Damage (2) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE) - PROP_Flags2 (MF2_NOTELEPORT|MF2_RIP|MF2_CANNOTPUSH|MF2_NODMGTHRUST|MF2_IMPACT|MF2_PCROSS) - - PROP_SpawnState (S_MWAND_MISSILE) - PROP_DeathState (S_MWANDPUFF) -END_DEFAULTS +IMPLEMENT_CLASS (AMageWandMissile) void AMageWandMissile::Tick () { @@ -167,7 +83,7 @@ void AMageWandMissile::Tick () { hitz = floorz; } - Spawn (x, y, hitz, ALLOW_REPLACE); + Spawn ("MageWandSmoke", x, y, hitz, ALLOW_REPLACE); } } } diff --git a/wadsrc/static/actors/hexen/magecone.txt b/wadsrc/static/actors/hexen/magecone.txt new file mode 100644 index 000000000..81913a36a --- /dev/null +++ b/wadsrc/static/actors/hexen/magecone.txt @@ -0,0 +1,89 @@ + +// The Mage's Frost Cone ---------------------------------------------------- + +ACTOR MWeapFrost : MageWeapon 53 +{ + Game Hexen + SpawnID 36 + +BLOODSPLATTER + Weapon.SelectionOrder 1700 + Weapon.AmmoUse1 3 + Weapon.AmmoGive1 25 + Weapon.KickBack 150 + Weapon.YAdjust 20 + Weapon.AmmoType1 "Mana1" + Inventory.PickupMessage "$TXT_WEAPON_M2" + + action native A_FireConePL1(); + + States + { + Spawn: + WMCS ABC 8 Bright + Loop + Select: + CONE A 1 A_Raise + Loop + Deselect: + CONE A 1 A_Lower + Loop + Ready: + CONE A 1 A_WeaponReady + Loop + Fire: + CONE B 3 + CONE C 4 + Hold: + CONE D 3 + CONE E 5 + CONE F 3 A_FireConePL1 + CONE G 3 + CONE A 9 + CONE A 10 A_ReFire + Goto Ready + } +} + +// Frost Missile ------------------------------------------------------------ + +ACTOR FrostMissile native +{ + Speed 25 + Radius 13 + Height 8 + Damage 1 + DamageType "Ice" + Projectile + DeathSound "MageShardsExplode" + + action native A_ShedShard(); + + States + { + Spawn: + SHRD A 2 Bright + SHRD A 3 Bright A_ShedShard + SHRD B 3 Bright + SHRD C 3 Bright + Loop + Death: + SHEX ABCDE 5 Bright + Stop + } +} + +// Ice Shard ---------------------------------------------------------------- + +ACTOR IceShard : FrostMissile +{ + Game Hexen + SpawnID 65 + DamageType "Ice" + +NOTELEPORT + States + { + Spawn: + SHRD ABC 3 Bright + Loop + } +} diff --git a/wadsrc/static/actors/hexen/magelightning.txt b/wadsrc/static/actors/hexen/magelightning.txt new file mode 100644 index 000000000..45567e924 --- /dev/null +++ b/wadsrc/static/actors/hexen/magelightning.txt @@ -0,0 +1,148 @@ + +// The Mage's Lightning Arc of Death ---------------------------------------- + +ACTOR MWeapLightning : MageWeapon 8040 +{ + Game Hexen + +NOGRAVITY + Weapon.SelectionOrder 1100 + Weapon.AmmoUse1 5 + Weapon.AmmoGive1 25 + Weapon.KickBack 0 + Weapon.YAdjust 20 + Weapon.AmmoType1 "Mana2" + Inventory.PickupMessage "$TXT_WEAPON_M3" + + action native A_LightningReady(); + action native A_MLightningAttack(); + + States + { + Spawn: + WMLG ABCDEFGH 4 Bright + Loop + Select: + MLNG A 1 Bright A_Raise + Loop + Deselect: + MLNG A 1 Bright A_Lower + Loop + Ready: + MLNG AAAAA 1 Bright A_WeaponReady + MLNG A 1 Bright A_LightningReady + MLNG BBBBBB 1 Bright A_WeaponReady + MLNG CCCCC 1 Bright A_WeaponReady + MLNG C 1 Bright A_LightningReady + MLNG BBBBBB 1 Bright A_WeaponReady + Loop + Fire: + MLNG DE 3 Bright + MLNG F 4 Bright A_MLightningAttack + MLNG G 4 Bright + MLNG HI 3 Bright + MLNG I 6 Bright Offset (0, 199) + MLNG C 2 Bright Offset (0, 55) + MLNG B 2 Bright Offset (0, 50) + MLNG B 2 Bright Offset (0, 45) + MLNG B 2 Bright Offset (0, 40) + Goto Ready + } +} + +// Ceiling Lightning -------------------------------------------------------- + +ACTOR Lightning native +{ +} + +ACTOR LightningCeiling : Lightning +{ + Health 144 + Speed 25 + Radius 16 + Height 40 + Damage 8 + Projectile + +CEILINGHUGGER + RenderStyle Add + + action native A_LightningZap(); + action native A_LightningClip(); + action native A_LightningRemove(); + action native A_FreeTargMobj(); + + States + { + Spawn: + MLFX A 2 Bright A_LightningZap + MLFX BCD 2 Bright A_LightningClip + Loop + Death: + MLF2 A 2 Bright A_LightningRemove + MLF2 BCDEKLM 3 Bright + ACLO E 35 + MLF2 NO 3 Bright + MLF2 P 4 Bright + MLF2 QP 3 Bright + MLF2 Q 4 Bright + MLF2 P 3 Bright + MLF2 O 3 Bright + MLF2 P 3 Bright + MLF2 P 1 Bright A_HideThing + ACLO E 1050 A_FreeTargMobj + Stop + } +} + +// Floor Lightning ---------------------------------------------------------- + +ACTOR LightningFloor : LightningCeiling +{ + -CEILINGHUGGER + +FLOORHUGGER + RenderStyle Add + + action native A_LastZap(); + + States + { + Spawn: + MLFX E 2 Bright A_LightningZap + MLFX FGH 2 Bright A_LightningClip + Loop + Death: + MLF2 F 2 Bright A_LightningRemove + MLF2 GHIJKLM 3 Bright + ACLO E 20 + MLF2 NO 3 Bright + MLF2 P 4 Bright + MLF2 QP 3 Bright + MLF2 Q 4 Bright A_LastZap + MLF2 POP 3 Bright + MLF2 P 1 Bright A_HideThing + Goto Super::Death + 19 + } +} + +// Lightning Zap ------------------------------------------------------------ + +ACTOR LightningZap native +{ + Radius 15 + Height 35 + Damage 2 + +NOBLOCKMAP +NOGRAVITY +DROPOFF +MISSILE + RenderStyle Add + + action native A_ZapMimic(); + + States + { + Spawn: + MLFX IJKLM 2 Bright A_ZapMimic + Loop + Death: + MLFX NOPQRSTU 2 Bright + Stop + } +} diff --git a/wadsrc/static/actors/hexen/magestaff.txt b/wadsrc/static/actors/hexen/magestaff.txt new file mode 100644 index 000000000..9d8783217 --- /dev/null +++ b/wadsrc/static/actors/hexen/magestaff.txt @@ -0,0 +1,139 @@ + +// Mage Weapon Piece -------------------------------------------------------- + +ACTOR MageWeaponPiece : FourthWeaponPiece native +{ + Inventory.PickupMessage "$TXT_BLOODSCOURGE_PIECE" +} + +// Mage Weapon Piece 1 ------------------------------------------------------ + +ACTOR MWeaponPiece1 : MageWeaponPiece 21 native +{ + Game Hexen + SpawnID 37 + +FLOATBOB + States + { + Spawn: + WMS1 A -1 Bright + Stop + } +} + +// Mage Weapon Piece 2 ------------------------------------------------------ + +ACTOR MWeaponPiece2 : MageWeaponPiece 22 native +{ + Game Hexen + SpawnID 38 + +FLOATBOB + States + { + Spawn: + WMS2 A -1 Bright + Stop + } +} + +// Mage Weapon Piece 3 ------------------------------------------------------ + +ACTOR MWeaponPiece3 : MageWeaponPiece 23 native +{ + Game Hexen + SpawnID 39 + +FLOATBOB + States + { + Spawn: + WMS3 A -1 Bright + Stop + } +} + +// Bloodscourge Drop -------------------------------------------------------- + +ACTOR BloodscourgeDrop +{ + action native A_DropBloodscourgePieces(); + + States + { + Spawn: + TNT1 A 1 + TNT1 A 1 A_DropBloodscourgePieces + Stop + } +} + +// The Mages's Staff (Bloodscourge) ----------------------------------------- + +ACTOR MWeapBloodscourge : MageWeapon native +{ + Weapon.SelectionOrder 3100 + Weapon.AmmoUse1 15 + Weapon.AmmoUse2 15 + Weapon.KickBack 150 + Weapon.YAdjust 20 + Weapon.AmmoType1 "Mana1" + Weapon.AmmoType2 "Mana2" + +WEAPON.PRIMARY_USES_BOTH + Inventory.PickupMessage "$TXT_WEAPON_M4" + + action native A_MStaffAttack(); + action native A_MStaffPalette(); + + States + { + Spawn: + TNT1 A -1 + Stop + Select: + MSTF A 1 A_Raise + Loop + Deselect: + MSTF A 1 A_Lower + Loop + Ready: + MSTF AAAAAABBBBBBCCCCCCDDDDDDEEEEEEFFFFF 1 A_WeaponReady + Loop + Fire: + MSTF G 4 Offset (0, 40) + MSTF H 4 Bright Offset (0, 48) A_MStaffAttack + MSTF H 2 Bright Offset (0, 48) A_MStaffPalette + MSTF II 2 Offset (0, 48) A_MStaffPalette + MSTF I 1 Offset (0, 40) + MSTF J 5 Offset (0, 36) + Goto Ready + } +} + +// Mage Staff FX2 (Bloodscourge) -------------------------------------------- + +ACTOR MageStaffFX2 native +{ + Speed 18 + Height 8 + Damage 4 + DamageType "Fire" + Projectile + +SEEKERMISSILE + +EXTREMEDEATH + DeathSound "MageStaffExplode" + + action native A_MStaffTrack(); + action native A_BeAdditive(); + + States + { + Spawn: + MSP2 ABCD 2 Bright A_MStaffTrack + Loop + Death: + MSP2 E 4 Bright A_BeAdditive + MSP2 F 5 Bright A_Explode (80, 192, 0) + MSP2 GH 5 Bright + MSP2 I 4 Bright + Stop + } +} diff --git a/wadsrc/static/actors/hexen/magewand.txt b/wadsrc/static/actors/hexen/magewand.txt new file mode 100644 index 000000000..3e8c78bbd --- /dev/null +++ b/wadsrc/static/actors/hexen/magewand.txt @@ -0,0 +1,69 @@ + +// The Mage's Wand ---------------------------------------------------------- + +ACTOR MWeapWand : MageWeapon +{ + Weapon.SelectionOrder 3600 + Weapon.KickBack 0 + Weapon.YAdjust 9 + States + { + Select: + MWND A 1 A_Raise + Loop + Deselect: + MWND A 1 A_Lower + Loop + Ready: + MWND A 1 A_WeaponReady + Loop + Fire: + MWND A 6 + MWND B 6 Bright Offset (0, 48) A_FireCustomMissile ("MageWandMissile") + MWND A 3 Offset (0, 40) + MWND A 3 Offset (0, 36) A_ReFire + Goto Ready + } +} + +// Wand Smoke --------------------------------------------------------------- + +ACTOR MageWandSmoke +{ + +NOBLOCKMAP +NOGRAVITY +SHADOW + +NOTELEPORT +CANNOTPUSH +NODAMAGETHRUST + RenderStyle Translucent + Alpha 0.6 + States + { + Spawn: + MWND CDCD 4 + Stop + } +} + +// Wand Missile ------------------------------------------------------------- + +ACTOR MageWandMissile native +{ + Speed 184 + Radius 12 + Height 8 + Damage 2 + Projectile + +RIPPER +CANNOTPUSH +NODAMAGETHRUST + SeeSound "MageWandFire" + States + { + Spawn: + MWND CD 4 Bright + Loop + Death: + MWND E 4 Bright + MWND F 3 Bright + MWND G 4 Bright + MWND H 3 Bright + MWND I 4 Bright + Stop + } +} diff --git a/wadsrc/static/decorate.txt b/wadsrc/static/decorate.txt index 9890ec214..1955157dd 100644 --- a/wadsrc/static/decorate.txt +++ b/wadsrc/static/decorate.txt @@ -81,7 +81,6 @@ #include "actors/hexen/ettin.txt" #include "actors/hexen/centaur.txt" #include "actors/hexen/demons.txt" -#include "actors/hexen/clericmace.txt" #include "actors/hexen/firedemon.txt" #include "actors/hexen/fog.txt" #include "actors/hexen/summon.txt" @@ -93,9 +92,14 @@ #include "actors/hexen/bishop.txt" #include "actors/hexen/blastradius.txt" #include "actors/hexen/boostarmor.txt" +#include "actors/hexen/clericmace.txt" #include "actors/hexen/clericflame.txt" #include "actors/hexen/clericholy.txt" #include "actors/hexen/clericstaff.txt" +#include "actors/hexen/magewand.txt" +#include "actors/hexen/magecone.txt" +#include "actors/hexen/magelightning.txt" +#include "actors/hexen/magestaff.txt" #include "actors/strife/strifeplayer.txt" #include "actors/strife/spectral.txt"