diff --git a/docs/rh-log.txt b/docs/rh-log.txt index 676ff1bdc..b4f1a55b2 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -1,3 +1,14 @@ +August 9, 2008 (Changes by Graf Zahl) +- Removed AT_GAME_SET because it's no longer used anywhere. +- Converted the last remaining global classes to DECORATE. +- Fixed: Inventory.PickupFlash requires an class name as parameter not an + integer. Some Hexen definitions got it wrong. +- Converted Hexen's Pig to DECORATE. +- Replaced the ActorInfo definitions of all internal inventory classes with + DECORATE definitions. +- Added option to specify a powerup's duration in second by using a negative + number. + August 8, 2008 - Added Gez's Freedoom detection patch. - SBARINFO update: diff --git a/src/autosegs.h b/src/autosegs.h index d33c66947..0f5fd0c01 100644 --- a/src/autosegs.h +++ b/src/autosegs.h @@ -54,10 +54,6 @@ typedef void *REGINFO; extern REGINFO ARegHead; extern REGINFO ARegTail; -// List of AT_GAME_SET functions -extern REGINFO GRegHead; -extern REGINFO GRegTail; - // List of TypeInfos extern REGINFO CRegHead; extern REGINFO CRegTail; diff --git a/src/b_bot.cpp b/src/b_bot.cpp index 7f1bc57d4..90acee11c 100644 --- a/src/b_bot.cpp +++ b/src/b_bot.cpp @@ -104,54 +104,82 @@ FArchive &operator<< (FArchive &arc, botskill_t &skill) // set the bot specific weapon information // This is intentionally not in the weapon definition anymore. -AT_GAME_SET(BotStuff) +void InitBotStuff() { - AWeapon * w; - AActor * a; + static bool done = false; + + if (done) return; + done = true; - w = (AWeapon*)GetDefaultByName ("Pistol"); - if (w != NULL) + struct BotInit { - w->MoveCombatDist=25000000; + const char *type; + int movecombatdist; + int weaponflags; + const char *projectile; + } botinits[] = { + + { "Pistol", 25000000, 0, NULL }, + { "Shotgun", 24000000, 0, NULL }, + { "SuperShotgun", 15000000, 0, NULL }, + { "Chaingun", 27000000, 0, NULL }, + { "RocketLauncher", 18350080, WIF_BOT_REACTION_SKILL_THING|WIF_BOT_EXPLOSIVE, "Rocket" }, + { "PlasmaRifle", 27000000, 0, "PlasmaBall" }, + { "BFG9000", 10000000, WIF_BOT_REACTION_SKILL_THING|WIF_BOT_BFG, "BFGBall" }, + { "GoldWand", 25000000, 0, NULL }, + { "GoldWandPowered", 25000000, 0, NULL }, + { "Crossbow", 24000000, 0, "CrossbowFX1" }, + { "CrossbowPowered", 24000000, 0, "CrossbowFX2" }, + { "Blaster", 27000000, 0, NULL }, + { "BlasterPowered", 27000000, 0, "BlasterFX1" }, + { "SkullRod", 27000000, 0, "HornRodFX1" }, + { "SkullRodPowered", 27000000, 0, "HornRodFX2" }, + { "PhoenixRod", 18350080, WIF_BOT_REACTION_SKILL_THING|WIF_BOT_EXPLOSIVE, "PhoenixFX1" }, + { "PhoenixRodPowered", 0, WIF_BOT_MELEE, "PhoenixFX2" }, + { "Mace", 27000000, WIF_BOT_REACTION_SKILL_THING, "MaceFX2" }, + { "MacePowered", 27000000, WIF_BOT_REACTION_SKILL_THING|WIF_BOT_EXPLOSIVE, "MaceFX4" }, + { "FWeapHammer", 22000000, 0, "HammerMissile" }, + { "FWeapQuietus", 20000000, 0, "FSwordMissile" }, + { "CWeapStaff", 25000000, 0, "CStaffMissile" }, + { "CWeapFlane", 27000000, 0, "CFlameMissile" }, + { "MWeapWand", 25000000, 0, "MageWandMissile" }, + { "CWeapWraithverge", 22000000, 0, "HolyMissile" }, + { "MWeapFrost", 19000000, 0, "FrostMissile" }, + { "MWeapLightning", 23000000, 0, "LightningFloor" }, + { "MWeapBloodscourge", 20000000, 0, "MageStaffFX2" }, + { "StrifeCrossbow", 24000000, 0, "ElectricBolt" }, + { "StrifeCrossbow2", 24000000, 0, "PoisonBolt" }, + { "AssaultGun", 27000000, 0, NULL }, + { "MiniMissileLauncher", 18350080, WIF_BOT_REACTION_SKILL_THING|WIF_BOT_EXPLOSIVE, "MiniMissile" }, + { "FlameThrower", 24000000, 0, "FlameMissile" }, + { "Mauler", 15000000, 0, NULL }, + { "Mauler2", 10000000, 0, "MaulerTorpedo" }, + { "StrifeGrenadeLauncher", 18350080, WIF_BOT_REACTION_SKILL_THING|WIF_BOT_EXPLOSIVE, "HEGrenade" }, + { "StrifeGrenadeLauncher2", 18350080, WIF_BOT_REACTION_SKILL_THING|WIF_BOT_EXPLOSIVE, "PhosphorousGrenade" }, + }; + + for(int i=0;iIsDescendantOf(RUNTIME_CLASS(AWeapon))) + { + AWeapon *w = (AWeapon*)GetDefaultByType(cls); + if (w != NULL) + { + w->MoveCombatDist = botinits[i].movecombatdist; + w->WeaponFlags |= botinits[i].weaponflags; + w->ProjectileType = PClass::FindClass(botinits[i].projectile); + } + } } - w = (AWeapon*)GetDefaultByName ("Shotgun"); - if (w != NULL) + + static char *warnbotmissiles[] = { "PlasmaBall", "Ripper", "HornRodFX1" }; + for(int i=0;iMoveCombatDist=24000000; - } - w = (AWeapon*)GetDefaultByName ("SuperShotgun"); - if (w != NULL) - { - w->MoveCombatDist=15000000; - } - w = (AWeapon*)GetDefaultByName ("Chaingun"); - if (w != NULL) - { - w->MoveCombatDist=27000000; - } - w = (AWeapon*)GetDefaultByName ("RocketLauncher"); - if (w != NULL) - { - w->MoveCombatDist=18350080; - w->WeaponFlags|=WIF_BOT_REACTION_SKILL_THING|WIF_BOT_EXPLOSIVE; - w->ProjectileType=PClass::FindClass("Rocket"); - } - w = (AWeapon*)GetDefaultByName ("PlasmaRifle"); - if (w != NULL) - { - w->MoveCombatDist=27000000; - w->ProjectileType=PClass::FindClass("PlasmaBall"); - } - a = GetDefaultByName ("PlasmaBall"); - if (a != NULL) - { - a->flags3|=MF3_WARNBOT; - } - w = (AWeapon*)GetDefaultByName ("BFG9000"); - if (w != NULL) - { - w->MoveCombatDist=10000000; - w->WeaponFlags|=WIF_BOT_REACTION_SKILL_THING|WIF_BOT_BFG; - w->ProjectileType=PClass::FindClass("BFGBall"); + AActor *a = GetDefaultByName (warnbotmissiles[i]); + if (a != NULL) + { + a->flags3|=MF3_WARNBOT; + } } } diff --git a/src/b_game.cpp b/src/b_game.cpp index c6b6a0fef..8c7571b0b 100644 --- a/src/b_game.cpp +++ b/src/b_game.cpp @@ -60,6 +60,8 @@ Everything that is changed is marked (maybe commented) with "Added by MC" static FRandom pr_botspawn ("BotSpawn"); +void InitBotStuff(); + //Externs FCajunMaster bglobal; @@ -315,6 +317,7 @@ bool FCajunMaster::SpawnBot (const char *name, int color) waitingforspawn[playernumber] = true; + InitBotStuff(); Net_WriteByte (DEM_ADDBOT); Net_WriteByte (playernumber); { diff --git a/src/codepointers.h b/src/codepointers.h index 9a80ea9ec..1a886870e 100644 --- a/src/codepointers.h +++ b/src/codepointers.h @@ -302,6 +302,8 @@ ACTOR(ClericAttack) ACTOR(FighterAttack) ACTOR(MageAttack) ACTOR(IceSetTics) +ACTOR(PigPain) +ACTOR(SnoutAttack) ACTOR(TemplarAttack) ACTOR(SentinelAttack) diff --git a/src/d_dehacked.cpp b/src/d_dehacked.cpp index e4d9df5ba..3f1217fd3 100644 --- a/src/d_dehacked.cpp +++ b/src/d_dehacked.cpp @@ -148,9 +148,6 @@ IMPLEMENT_POINTY_CLASS (ADehackedPickup) DECLARE_POINTER (RealPickup) END_POINTERS -BEGIN_STATELESS_DEFAULTS (ADehackedPickup, Any, -1, 0) -END_DEFAULTS - TArray TouchedActors; char *UnchangedSpriteNames; diff --git a/src/d_dehacked.h b/src/d_dehacked.h index 2d7203655..0bec21c2e 100644 --- a/src/d_dehacked.h +++ b/src/d_dehacked.h @@ -38,7 +38,7 @@ class ADehackedPickup : public AInventory { - DECLARE_STATELESS_ACTOR (ADehackedPickup, AInventory) + DECLARE_CLASS (ADehackedPickup, AInventory) HAS_OBJECT_POINTERS public: void Destroy (); diff --git a/src/d_main.cpp b/src/d_main.cpp index 4eb092e0a..164c29990 100644 --- a/src/d_main.cpp +++ b/src/d_main.cpp @@ -2426,7 +2426,6 @@ void D_DoomMain (void) I_FatalError ("No player classes defined"); } - FActorInfo::StaticGameSet (); StartScreen->Progress (); Printf ("R_Init: Init %s refresh subsystem.\n", GameNames[gameinfo.gametype]); diff --git a/src/d_player.h b/src/d_player.h index cc1a7a892..41b266021 100644 --- a/src/d_player.h +++ b/src/d_player.h @@ -66,7 +66,7 @@ class player_t; class APlayerPawn : public AActor { - DECLARE_STATELESS_ACTOR (APlayerPawn, AActor) + DECLARE_CLASS (APlayerPawn, AActor) HAS_OBJECT_POINTERS public: virtual void Serialize (FArchive &arc); @@ -133,7 +133,7 @@ public: class APlayerChunk : public APlayerPawn { - DECLARE_STATELESS_ACTOR (APlayerChunk, APlayerPawn) + DECLARE_CLASS (APlayerChunk, APlayerPawn) }; // diff --git a/src/g_hexen/a_fighterplayer.cpp b/src/g_hexen/a_fighterplayer.cpp index 897c5fca6..78a9abbdb 100644 --- a/src/g_hexen/a_fighterplayer.cpp +++ b/src/g_hexen/a_fighterplayer.cpp @@ -12,9 +12,9 @@ // Fighter Weapon Base Class ------------------------------------------------ -IMPLEMENT_STATELESS_ACTOR (AFighterWeapon, Hexen, -1, 0) - PROP_Weapon_Kickback (150) -END_DEFAULTS +IMPLEMENT_CLASS (AFighterWeapon) +IMPLEMENT_CLASS (AClericWeapon) +IMPLEMENT_CLASS (AMageWeapon) bool AFighterWeapon::TryPickup (AActor *toucher) { @@ -41,10 +41,6 @@ bool AFighterWeapon::TryPickup (AActor *toucher) // Cleric Weapon Base Class ------------------------------------------------- -IMPLEMENT_STATELESS_ACTOR (AClericWeapon, Hexen, -1, 0) - PROP_Weapon_Kickback (150) -END_DEFAULTS - bool AClericWeapon::TryPickup (AActor *toucher) { // The Doom and Hexen players are not excluded from pickup in case @@ -70,10 +66,6 @@ bool AClericWeapon::TryPickup (AActor *toucher) // Mage Weapon Base Class --------------------------------------------------- -IMPLEMENT_STATELESS_ACTOR (AMageWeapon, Hexen, -1, 0) - PROP_Weapon_Kickback (150) -END_DEFAULTS - bool AMageWeapon::TryPickup (AActor *toucher) { // The Doom and Hexen players are not excluded from pickup in case diff --git a/src/g_hexen/a_hexenglobal.h b/src/g_hexen/a_hexenglobal.h index 87d1bf11d..bd8a1b025 100644 --- a/src/g_hexen/a_hexenglobal.h +++ b/src/g_hexen/a_hexenglobal.h @@ -24,21 +24,21 @@ public: class AFighterWeapon : public AWeapon { - DECLARE_STATELESS_ACTOR (AFighterWeapon, AWeapon); + DECLARE_CLASS (AFighterWeapon, AWeapon); public: bool TryPickup (AActor *toucher); }; class AClericWeapon : public AWeapon { - DECLARE_STATELESS_ACTOR (AClericWeapon, AWeapon); + DECLARE_CLASS (AClericWeapon, AWeapon); public: bool TryPickup (AActor *toucher); }; class AMageWeapon : public AWeapon { - DECLARE_STATELESS_ACTOR (AMageWeapon, AWeapon); + DECLARE_CLASS (AMageWeapon, AWeapon); public: bool TryPickup (AActor *toucher); }; diff --git a/src/g_hexen/a_pig.cpp b/src/g_hexen/a_pig.cpp index 2a010a57d..9b5e9921a 100644 --- a/src/g_hexen/a_pig.cpp +++ b/src/g_hexen/a_pig.cpp @@ -17,148 +17,16 @@ static FRandom pr_pigplayerthink ("PigPlayerThink"); extern void AdjustPlayerAngle (AActor *, AActor *); -void A_SnoutAttack (AActor *actor); - -void A_PigPain (AActor *); -void A_PigAttack (AActor *); - -// Snout puff --------------------------------------------------------------- - -class ASnoutPuff : public AActor -{ - DECLARE_ACTOR (ASnoutPuff, AActor) -}; - -FState ASnoutPuff::States[] = -{ - S_NORMAL (FHFX, 'S', 4, NULL , &States[1]), - S_NORMAL (FHFX, 'T', 4, NULL , &States[2]), - S_NORMAL (FHFX, 'U', 4, NULL , &States[3]), - S_NORMAL (FHFX, 'V', 4, NULL , &States[4]), - S_NORMAL (FHFX, 'W', 4, NULL , NULL) -}; - -IMPLEMENT_ACTOR (ASnoutPuff, Hexen, -1, 0) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY) - PROP_RenderStyle (STYLE_Translucent) - PROP_Alpha (HX_SHADOW) - PROP_SpawnState (0) -END_DEFAULTS - -// Snout -------------------------------------------------------------------- - -class ASnout : public AWeapon -{ - DECLARE_ACTOR (ASnout, AWeapon) -}; - -FState ASnout::States[] = -{ -#define S_SNOUTREADY 0 - S_NORMAL (WPIG, 'A', 1, A_WeaponReady , &States[S_SNOUTREADY]), - -#define S_SNOUTDOWN 1 - S_NORMAL (WPIG, 'A', 1, A_Lower , &States[S_SNOUTDOWN]), - -#define S_SNOUTUP 2 - S_NORMAL (WPIG, 'A', 1, A_Raise , &States[S_SNOUTUP]), - -#define S_SNOUTATK 3 - S_NORMAL (WPIG, 'A', 4, A_SnoutAttack , &States[S_SNOUTATK+1]), - S_NORMAL (WPIG, 'B', 8, A_SnoutAttack , &States[S_SNOUTREADY]) -}; - -IMPLEMENT_ACTOR (ASnout, Hexen, -1, 0) - PROP_Weapon_SelectionOrder (10000) - PROP_Weapon_Flags (WIF_DONTBOB|WIF_BOT_MELEE) - PROP_Weapon_UpState (S_SNOUTUP) - PROP_Weapon_DownState (S_SNOUTDOWN) - PROP_Weapon_ReadyState (S_SNOUTREADY) - PROP_Weapon_AtkState (S_SNOUTATK) - PROP_Weapon_FlashState (S_SNOUTATK+1) // Not really - but it will do until this gets exported from the EXE - PROP_Weapon_Kickback (150) - PROP_Weapon_YAdjust (10) -END_DEFAULTS - // Pig player --------------------------------------------------------------- class APigPlayer : public APlayerPawn { - DECLARE_ACTOR (APigPlayer, APlayerPawn) + DECLARE_CLASS (APigPlayer, APlayerPawn) public: void MorphPlayerThink (); }; -FState APigPlayer::States[] = -{ -#define S_PIGPLAY 0 - S_NORMAL (PIGY, 'A', -1, NULL , NULL), - -#define S_PIGPLAY_RUN1 (S_PIGPLAY+1) - S_NORMAL (PIGY, 'A', 3, NULL , &States[S_PIGPLAY_RUN1+1]), - S_NORMAL (PIGY, 'B', 3, NULL , &States[S_PIGPLAY_RUN1+2]), - S_NORMAL (PIGY, 'C', 3, NULL , &States[S_PIGPLAY_RUN1+3]), - S_NORMAL (PIGY, 'D', 3, NULL , &States[S_PIGPLAY_RUN1]), - -#define S_PIGPLAY_PAIN (S_PIGPLAY_RUN1+4) - S_NORMAL (PIGY, 'D', 4, A_PigPain , &States[S_PIGPLAY]), - -#define S_PIGPLAY_ATK1 (S_PIGPLAY_PAIN+1) - S_NORMAL (PIGY, 'A', 12, NULL , &States[S_PIGPLAY]), - -#define S_PIGPLAY_DIE1 (S_PIGPLAY_ATK1+1) - S_NORMAL (PIGY, 'E', 4, A_Scream , &States[S_PIGPLAY_DIE1+1]), - S_NORMAL (PIGY, 'F', 3, A_NoBlocking , &States[S_PIGPLAY_DIE1+2]), - S_NORMAL (PIGY, 'G', 4, NULL , &States[S_PIGPLAY_DIE1+3]), - S_NORMAL (PIGY, 'H', 3, NULL , &States[S_PIGPLAY_DIE1+4]), - S_NORMAL (PIGY, 'I', 4, NULL , &States[S_PIGPLAY_DIE1+5]), - S_NORMAL (PIGY, 'J', 4, NULL , &States[S_PIGPLAY_DIE1+6]), - S_NORMAL (PIGY, 'K', 4, NULL , &States[S_PIGPLAY_DIE1+7]), - S_NORMAL (PIGY, 'L', -1, NULL , NULL), - -#define S_PIGPLAY_ICE (S_PIGPLAY_DIE1+8) - S_NORMAL (PIGY, 'M', 5, A_FreezeDeath , &States[S_PIGPLAY_ICE+1]), - S_NORMAL (PIGY, 'M', 1, A_FreezeDeathChunks , &States[S_PIGPLAY_ICE+1]), - -}; - -IMPLEMENT_ACTOR (APigPlayer, Hexen, -1, 0) - PROP_SpawnHealth (30) - PROP_ReactionTime (0) - PROP_PainChance (255) - PROP_RadiusFixed (16) - PROP_HeightFixed (24) - PROP_SpeedFixed (1) - PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_DROPOFF|MF_NOTDMATCH|MF_FRIENDLY) - PROP_Flags2 (MF2_WINDTHRUST|MF2_FLOORCLIP|MF2_SLIDE|MF2_PASSMOBJ|MF2_TELESTOMP|MF2_PUSHWALL) - PROP_Flags3 (MF3_NOBLOCKMONST) - PROP_Flags4 (MF4_NOSKIN) - - PROP_SpawnState (S_PIGPLAY) - PROP_SeeState (S_PIGPLAY_RUN1) - PROP_PainState (S_PIGPLAY_PAIN) - PROP_MissileState (S_PIGPLAY_ATK1) - PROP_MeleeState (S_PIGPLAY_ATK1) - PROP_DeathState (S_PIGPLAY_DIE1) - PROP_IDeathState (S_PIGPLAY_ICE) - - // [GRB] - PROP_PlayerPawn_JumpZ (6*FRACUNIT) - PROP_PlayerPawn_ViewHeight (28*FRACUNIT) - PROP_PlayerPawn_ForwardMove1 (FRACUNIT * 0x18 / 0x19) // Yes, the pig is faster than a mage. - PROP_PlayerPawn_ForwardMove2 (FRACUNIT * 0x31 / 0x32) - PROP_PlayerPawn_SideMove1 (FRACUNIT * 0x17 / 0x18) - PROP_PlayerPawn_SideMove2 (FRACUNIT * 0x27 / 0x28) - PROP_PlayerPawn_MorphWeapon ("Snout") - - PROP_PainSound ("PigPain") - PROP_DeathSound ("PigDeath") -END_DEFAULTS - -AT_GAME_SET(PigPlayer) -{ - RUNTIME_CLASS(APigPlayer)->Meta.SetMetaString(APMETA_SoundClass, "pig"); -} +IMPLEMENT_CLASS (APigPlayer) void APigPlayer::MorphPlayerThink () { @@ -181,71 +49,6 @@ void APigPlayer::MorphPlayerThink () } } -// Pig (non-player) --------------------------------------------------------- - -class APig : public AMorphedMonster -{ - DECLARE_ACTOR (APig, AMorphedMonster) -}; - -FState APig::States[] = -{ -#define S_PIG_LOOK1 0 - S_NORMAL (PIGY, 'B', 10, A_Look , &States[S_PIG_LOOK1]), - -#define S_PIG_WALK1 (S_PIG_LOOK1+1) - S_NORMAL (PIGY, 'A', 3, A_Chase , &States[S_PIG_WALK1+1]), - S_NORMAL (PIGY, 'B', 3, A_Chase , &States[S_PIG_WALK1+2]), - S_NORMAL (PIGY, 'C', 3, A_Chase , &States[S_PIG_WALK1+3]), - S_NORMAL (PIGY, 'D', 3, A_Chase , &States[S_PIG_WALK1]), - -#define S_PIG_PAIN (S_PIG_WALK1+4) - S_NORMAL (PIGY, 'D', 4, A_PigPain , &States[S_PIG_WALK1]), - -#define S_PIG_ATK1 (S_PIG_PAIN+1) - S_NORMAL (PIGY, 'A', 5, A_FaceTarget , &States[S_PIG_ATK1+1]), - S_NORMAL (PIGY, 'A', 10, A_PigAttack , &States[S_PIG_WALK1]), - -#define S_PIG_DIE1 (S_PIG_ATK1+2) - S_NORMAL (PIGY, 'E', 4, A_Scream , &States[S_PIG_DIE1+1]), - S_NORMAL (PIGY, 'F', 3, A_NoBlocking , &States[S_PIG_DIE1+2]), - S_NORMAL (PIGY, 'G', 4, A_QueueCorpse , &States[S_PIG_DIE1+3]), - S_NORMAL (PIGY, 'H', 3, NULL , &States[S_PIG_DIE1+4]), - S_NORMAL (PIGY, 'I', 4, NULL , &States[S_PIG_DIE1+5]), - S_NORMAL (PIGY, 'J', 4, NULL , &States[S_PIG_DIE1+6]), - S_NORMAL (PIGY, 'K', 4, NULL , &States[S_PIG_DIE1+7]), - S_NORMAL (PIGY, 'L', -1, NULL , NULL), - -#define S_PIG_ICE (S_PIG_DIE1+8) - S_NORMAL (PIGY, 'M', 5, A_FreezeDeath , &States[S_PIG_ICE+1]), - S_NORMAL (PIGY, 'M', 1, A_FreezeDeathChunks , &States[S_PIG_ICE+1]), - -}; - -IMPLEMENT_ACTOR (APig, Hexen, -1, 0) - PROP_SpawnHealth (25) - PROP_PainChance (128) - PROP_SpeedFixed (10) - PROP_RadiusFixed (12) - PROP_HeightFixed (22) - PROP_Mass (60) - PROP_Flags (MF_SOLID|MF_SHOOTABLE) - PROP_Flags2 (MF2_WINDTHRUST|MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_TELESTOMP|MF2_PUSHWALL) - PROP_Flags3 (MF3_DONTMORPH|MF3_ISMONSTER) - - PROP_SpawnState (S_PIG_LOOK1) - PROP_SeeState (S_PIG_WALK1) - PROP_PainState (S_PIG_PAIN) - PROP_MeleeState (S_PIG_ATK1) - PROP_DeathState (S_PIG_DIE1) - PROP_IDeathState (S_PIG_ICE) - - PROP_SeeSound ("PigActive1") - PROP_PainSound ("PigPain") - PROP_DeathSound ("PigDeath") - PROP_ActiveSound ("PigActive1") -END_DEFAULTS - //============================================================================ // // A_SnoutAttack @@ -269,7 +72,7 @@ void A_SnoutAttack (AActor *actor) damage = 3+(pr_snoutattack()&3); angle = player->mo->angle; slope = P_AimLineAttack(player->mo, angle, MELEERANGE, &linetarget); - puff = P_LineAttack(player->mo, angle, MELEERANGE, slope, damage, NAME_Melee, RUNTIME_CLASS(ASnoutPuff), true); + puff = P_LineAttack(player->mo, angle, MELEERANGE, slope, damage, NAME_Melee, "SnoutPuff", true); S_Sound(player->mo, CHAN_VOICE, "PigActive", 1, ATTN_NORM); if(linetarget) { @@ -281,25 +84,6 @@ void A_SnoutAttack (AActor *actor) } } -//============================================================================ -// -// A_PigAttack -// -//============================================================================ - -void A_PigAttack (AActor *actor) -{ - if (!actor->target) - { - return; - } - if (actor->CheckMeleeRange ()) - { - P_DamageMobj(actor->target, actor, actor, 2+(pr_pigattack()&1), NAME_Melee); - S_Sound(actor, CHAN_WEAPON, "PigAttack", 1, ATTN_NORM); - } -} - //============================================================================ // // A_PigPain diff --git a/src/g_hexen/a_summon.cpp b/src/g_hexen/a_summon.cpp index c4e8ba030..bb289fefb 100644 --- a/src/g_hexen/a_summon.cpp +++ b/src/g_hexen/a_summon.cpp @@ -13,7 +13,7 @@ void A_Summon (AActor *); class AArtiDarkServant : public AInventory { - DECLARE_ACTOR (AArtiDarkServant, AInventory) + DECLARE_CLASS (AArtiDarkServant, AInventory) public: bool Use (bool pickup); }; diff --git a/src/g_shared/a_armor.cpp b/src/g_shared/a_armor.cpp index d3ce7ed19..dc76e1d9a 100644 --- a/src/g_shared/a_armor.cpp +++ b/src/g_shared/a_armor.cpp @@ -7,29 +7,11 @@ #include "templates.h" -IMPLEMENT_STATELESS_ACTOR (AArmor, Any, -1, 0) - PROP_Inventory_PickupSound ("misc/armor_pkup") -END_DEFAULTS - -IMPLEMENT_STATELESS_ACTOR (ABasicArmor, Any, -1, 0) - PROP_Inventory_FlagsSet (IF_KEEPDEPLETED) -END_DEFAULTS - -IMPLEMENT_STATELESS_ACTOR (ABasicArmorPickup, Any, -1, 0) - PROP_Inventory_MaxAmount (0) - PROP_Inventory_FlagsSet (IF_AUTOACTIVATE) -END_DEFAULTS - -IMPLEMENT_STATELESS_ACTOR (ABasicArmorBonus, Any, -1, 0) - PROP_Inventory_MaxAmount (0) - PROP_Inventory_FlagsSet (IF_AUTOACTIVATE|IF_ALWAYSPICKUP) - PROP_BasicArmorBonus_SavePercent (FRACUNIT/3) -END_DEFAULTS - -IMPLEMENT_STATELESS_ACTOR (AHexenArmor, Any, -1, 0) - PROP_Inventory_FlagsSet (IF_UNDROPPABLE | IF_KEEPDEPLETED) -END_DEFAULTS - +IMPLEMENT_CLASS (AArmor) +IMPLEMENT_CLASS (ABasicArmor) +IMPLEMENT_CLASS (ABasicArmorPickup) +IMPLEMENT_CLASS (ABasicArmorBonus) +IMPLEMENT_CLASS (AHexenArmor) //=========================================================================== // diff --git a/src/g_shared/a_artifacts.cpp b/src/g_shared/a_artifacts.cpp index 222573534..59f82b91f 100644 --- a/src/g_shared/a_artifacts.cpp +++ b/src/g_shared/a_artifacts.cpp @@ -32,7 +32,7 @@ static FRandom pr_torch ("Torch"); EXTERN_CVAR (Bool, r_drawfuzz); -IMPLEMENT_ABSTRACT_ACTOR (APowerup) +IMPLEMENT_CLASS (APowerup) // Powerup-Giver ------------------------------------------------------------- @@ -340,10 +340,7 @@ void APowerup::OwnerDied () // Invulnerability Powerup --------------------------------------------------- -IMPLEMENT_STATELESS_ACTOR (APowerInvulnerable, Any, -1, 0) - PROP_Powerup_EffectTics (INVULNTICS) - PROP_Inventory_Icon ("SPSHLD0") -END_DEFAULTS +IMPLEMENT_CLASS (APowerInvulnerable) //=========================================================================== // @@ -475,11 +472,7 @@ int APowerInvulnerable::AlterWeaponSprite (vissprite_t *vis) // Strength (aka Berserk) Powerup -------------------------------------------- -IMPLEMENT_STATELESS_ACTOR (APowerStrength, Any, -1, 0) - PROP_Powerup_EffectTics (1) - PROP_Powerup_Color (128, 255, 0, 0) - PROP_Inventory_FlagsSet (IF_HUBPOWER) -END_DEFAULTS +IMPLEMENT_CLASS (APowerStrength) //=========================================================================== // @@ -543,9 +536,7 @@ PalEntry APowerStrength::GetBlend () // Invisibility Powerup ------------------------------------------------------ -IMPLEMENT_STATELESS_ACTOR (APowerInvisibility, Any, -1, 0) - PROP_Powerup_EffectTics (INVISTICS) -END_DEFAULTS +IMPLEMENT_CLASS (APowerInvisibility) //=========================================================================== // @@ -625,9 +616,7 @@ int APowerInvisibility::AlterWeaponSprite (vissprite_t *vis) // Ghost Powerup (Heretic's version of invisibility) ------------------------- -IMPLEMENT_STATELESS_ACTOR (APowerGhost, Any, -1, 0) - PROP_Powerup_EffectTics (INVISTICS) -END_DEFAULTS +IMPLEMENT_CLASS (APowerGhost) //=========================================================================== // @@ -670,10 +659,7 @@ int APowerGhost::AlterWeaponSprite (vissprite_t *vis) // Shadow Powerup (Strife's version of invisibility) ------------------------- -IMPLEMENT_STATELESS_ACTOR (APowerShadow, Any, -1, 0) - PROP_Powerup_EffectTics (55*TICRATE) - PROP_Inventory_FlagsSet (IF_HUBPOWER) -END_DEFAULTS +IMPLEMENT_CLASS (APowerShadow) //=========================================================================== // @@ -754,10 +740,7 @@ int APowerShadow::AlterWeaponSprite (vissprite_t *vis) // Ironfeet Powerup ---------------------------------------------------------- -IMPLEMENT_STATELESS_ACTOR (APowerIronFeet, Any, -1, 0) - PROP_Powerup_EffectTics (IRONTICS) - PROP_Powerup_Color (32, 0, 255, 0) -END_DEFAULTS +IMPLEMENT_CLASS (APowerIronFeet) //=========================================================================== // @@ -783,12 +766,7 @@ void APowerIronFeet::AbsorbDamage (int damage, FName damageType, int &newdamage) // Strife Environment Suit Powerup ------------------------------------------- -IMPLEMENT_STATELESS_ACTOR (APowerMask, Any, -1, 0) - PROP_Powerup_EffectTics (80*TICRATE) - PROP_Powerup_Color (0, 0, 0, 0) - PROP_Inventory_FlagsSet (IF_HUBPOWER) - PROP_Inventory_Icon ("I_MASK") -END_DEFAULTS +IMPLEMENT_CLASS (APowerMask) //=========================================================================== // @@ -825,9 +803,7 @@ void APowerMask::DoEffect () // Light-Amp Powerup --------------------------------------------------------- -IMPLEMENT_STATELESS_ACTOR (APowerLightAmp, Any, -1, 0) - PROP_Powerup_EffectTics (INFRATICS) -END_DEFAULTS +IMPLEMENT_CLASS (APowerLightAmp) //=========================================================================== // @@ -868,9 +844,7 @@ void APowerLightAmp::EndEffect () // Torch Powerup ------------------------------------------------------------- -IMPLEMENT_STATELESS_ACTOR (APowerTorch, Any, -1, 0) - PROP_Powerup_EffectTics (INFRATICS) -END_DEFAULTS +IMPLEMENT_CLASS (APowerTorch) //=========================================================================== // @@ -932,10 +906,7 @@ void APowerTorch::DoEffect () // Flight (aka Wings of Wrath) powerup --------------------------------------- -IMPLEMENT_STATELESS_ACTOR (APowerFlight, Any, -1, 0) - PROP_Powerup_EffectTics (FLIGHTTICS) - PROP_Inventory_FlagsSet (IF_HUBPOWER) -END_DEFAULTS +IMPLEMENT_CLASS (APowerFlight) //=========================================================================== // @@ -1066,10 +1037,7 @@ bool APowerFlight::DrawPowerup (int x, int y) // Weapon Level 2 (aka Tome of Power) Powerup -------------------------------- -IMPLEMENT_STATELESS_ACTOR (APowerWeaponLevel2, Any, -1, 0) - PROP_Powerup_EffectTics (WPNLEV2TICS) - PROP_Inventory_Icon ("SPINBK0") -END_DEFAULTS +IMPLEMENT_CLASS (APowerWeaponLevel2) //=========================================================================== // @@ -1138,16 +1106,12 @@ void APowerWeaponLevel2::EndEffect () class APlayerSpeedTrail : public AActor { - DECLARE_STATELESS_ACTOR (APlayerSpeedTrail, AActor) + DECLARE_CLASS (APlayerSpeedTrail, AActor) public: void Tick (); }; -IMPLEMENT_STATELESS_ACTOR (APlayerSpeedTrail, Any, -1, 0) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY) - PROP_Alpha (FRACUNIT*6/10) - PROP_RenderStyle (STYLE_Translucent) -END_DEFAULTS +IMPLEMENT_CLASS (APlayerSpeedTrail) //=========================================================================== // @@ -1170,11 +1134,7 @@ void APlayerSpeedTrail::Tick () // Speed Powerup ------------------------------------------------------------- -IMPLEMENT_STATELESS_ACTOR (APowerSpeed, Any, -1, 0) - PROP_SpeedLong(3*FRACUNIT/2) - PROP_Powerup_EffectTics (SPEEDTICS) - PROP_Inventory_Icon ("SPBOOT0") -END_DEFAULTS +IMPLEMENT_CLASS (APowerSpeed) //=========================================================================== // @@ -1238,24 +1198,11 @@ void APowerSpeed::DoEffect () // Minotaur (aka Dark Servant) powerup --------------------------------------- -IMPLEMENT_STATELESS_ACTOR (APowerMinotaur, Any, -1, 0) - PROP_Powerup_EffectTics (MAULATORTICS) - PROP_Inventory_Icon ("SPMINO0") -END_DEFAULTS +IMPLEMENT_CLASS (APowerMinotaur) // Targeter powerup --------------------------------------------------------- -FState APowerTargeter::States[] = -{ - S_NORMAL (TRGT, 'A', -1, NULL, NULL), - S_NORMAL (TRGT, 'B', -1, NULL, NULL), - S_NORMAL (TRGT, 'C', -1, NULL, NULL) -}; - -IMPLEMENT_ACTOR (APowerTargeter, Any, -1, 0) - PROP_Powerup_EffectTics (160*TICRATE) - PROP_Inventory_FlagsSet (IF_HUBPOWER) -END_DEFAULTS +IMPLEMENT_CLASS (APowerTargeter) void APowerTargeter::Travelled () { @@ -1269,9 +1216,14 @@ void APowerTargeter::InitEffect () if ((player = Owner->player) == NULL) return; - P_SetPsprite (player, ps_targetcenter, &States[0]); - P_SetPsprite (player, ps_targetleft, &States[1]); - P_SetPsprite (player, ps_targetright, &States[2]); + FState *state = FindState("Targeter"); + + if (state != NULL) + { + P_SetPsprite (player, ps_targetcenter, state + 0); + P_SetPsprite (player, ps_targetleft, state + 1); + P_SetPsprite (player, ps_targetright, state + 2); + } player->psprites[ps_targetcenter].sx = (160-3)*FRACUNIT; player->psprites[ps_targetcenter].sy = @@ -1328,9 +1280,7 @@ void APowerTargeter::PositionAccuracy () // Frightener Powerup -------------------------------- -IMPLEMENT_STATELESS_ACTOR (APowerFrightener, Any, -1, 0) - PROP_Powerup_EffectTics (60*TICRATE) -END_DEFAULTS +IMPLEMENT_CLASS (APowerFrightener) //=========================================================================== // @@ -1362,17 +1312,11 @@ void APowerFrightener::EndEffect () // Scanner powerup ---------------------------------------------------------- -IMPLEMENT_STATELESS_ACTOR (APowerScanner, Any, -1, 0) - PROP_Powerup_EffectTics (80*TICRATE) - PROP_Inventory_FlagsSet (IF_HUBPOWER) -END_DEFAULTS - +IMPLEMENT_CLASS (APowerScanner) // Time freezer powerup ----------------------------------------------------- -IMPLEMENT_STATELESS_ACTOR( APowerTimeFreezer, Any, -1, 0 ) - PROP_Powerup_EffectTics( TIMEFREEZE_TICS ) -END_DEFAULTS +IMPLEMENT_CLASS( APowerTimeFreezer) //=========================================================================== // @@ -1487,9 +1431,7 @@ void APowerTimeFreezer::EndEffect( ) // Damage powerup ------------------------------------------------------ -IMPLEMENT_STATELESS_ACTOR( APowerDamage, Any, -1, 0 ) - PROP_Powerup_EffectTics( 25*TICRATE ) -END_DEFAULTS +IMPLEMENT_CLASS( APowerDamage) //=========================================================================== // @@ -1543,9 +1485,7 @@ void APowerDamage::ModifyDamage(int damage, FName damageType, int &newdamage, bo // Quarter damage powerup ------------------------------------------------------ -IMPLEMENT_STATELESS_ACTOR( APowerProtection, Any, -1, 0 ) - PROP_Powerup_EffectTics( 25*TICRATE ) -END_DEFAULTS +IMPLEMENT_CLASS( APowerProtection) //=========================================================================== // @@ -1598,9 +1538,7 @@ void APowerProtection::ModifyDamage(int damage, FName damageType, int &newdamage // Drain rune ------------------------------------------------------- -IMPLEMENT_STATELESS_ACTOR( APowerDrain, Any, -1, 0 ) - PROP_Powerup_EffectTics( 60*TICRATE ) -END_DEFAULTS +IMPLEMENT_CLASS( APowerDrain) //=========================================================================== // @@ -1636,9 +1574,7 @@ void APowerDrain::EndEffect( ) // Regeneration rune ------------------------------------------------------- -IMPLEMENT_STATELESS_ACTOR( APowerRegeneration, Any, -1, 0 ) - PROP_Powerup_EffectTics( 120*TICRATE ) -END_DEFAULTS +IMPLEMENT_CLASS( APowerRegeneration) //=========================================================================== // @@ -1673,8 +1609,7 @@ void APowerRegeneration::EndEffect( ) // High jump rune ------------------------------------------------------- -IMPLEMENT_STATELESS_ACTOR( APowerHighJump, Any, -1, 0 ) -END_DEFAULTS +IMPLEMENT_CLASS( APowerHighJump) //=========================================================================== // @@ -1709,9 +1644,7 @@ void APowerHighJump::EndEffect( ) // Morph powerup ------------------------------------------------------ -IMPLEMENT_STATELESS_ACTOR( APowerMorph, Any, -1, 0 ) - PROP_Powerup_EffectTics( MORPHTICS ) -END_DEFAULTS +IMPLEMENT_CLASS( APowerMorph) //=========================================================================== // diff --git a/src/g_shared/a_artifacts.h b/src/g_shared/a_artifacts.h index 82786c4c9..ea716949a 100644 --- a/src/g_shared/a_artifacts.h +++ b/src/g_shared/a_artifacts.h @@ -26,7 +26,7 @@ class player_t; // owner while it is present. class APowerup : public AInventory { - DECLARE_STATELESS_ACTOR (APowerup, AInventory) + DECLARE_CLASS (APowerup, AInventory) public: virtual void Tick (); virtual void Destroy (); @@ -51,7 +51,7 @@ protected: // An artifact is an item that gives the player a powerup when activated. class APowerupGiver : public AInventory { - DECLARE_STATELESS_ACTOR (APowerupGiver, AInventory) + DECLARE_CLASS (APowerupGiver, AInventory) public: virtual bool Use (bool pickup); virtual void Serialize (FArchive &arc); @@ -64,7 +64,7 @@ public: class APowerInvulnerable : public APowerup { - DECLARE_STATELESS_ACTOR (APowerInvulnerable, APowerup) + DECLARE_CLASS (APowerInvulnerable, APowerup) protected: void InitEffect (); void DoEffect (); @@ -74,7 +74,7 @@ protected: class APowerStrength : public APowerup { - DECLARE_STATELESS_ACTOR (APowerStrength, APowerup) + DECLARE_CLASS (APowerStrength, APowerup) public: PalEntry GetBlend (); protected: @@ -85,7 +85,7 @@ protected: class APowerInvisibility : public APowerup { - DECLARE_STATELESS_ACTOR (APowerInvisibility, APowerup) + DECLARE_CLASS (APowerInvisibility, APowerup) protected: void InitEffect (); void DoEffect (); @@ -95,7 +95,7 @@ protected: class APowerGhost : public APowerInvisibility { - DECLARE_STATELESS_ACTOR (APowerGhost, APowerInvisibility) + DECLARE_CLASS (APowerGhost, APowerInvisibility) protected: void InitEffect (); int AlterWeaponSprite (vissprite_t *vis); @@ -103,7 +103,7 @@ protected: class APowerShadow : public APowerInvisibility { - DECLARE_STATELESS_ACTOR (APowerShadow, APowerInvisibility) + DECLARE_CLASS (APowerShadow, APowerInvisibility) protected: bool HandlePickup (AInventory *item); void InitEffect (); @@ -112,14 +112,14 @@ protected: class APowerIronFeet : public APowerup { - DECLARE_STATELESS_ACTOR (APowerIronFeet, APowerup) + DECLARE_CLASS (APowerIronFeet, APowerup) public: void AbsorbDamage (int damage, FName damageType, int &newdamage); }; class APowerMask : public APowerIronFeet { - DECLARE_STATELESS_ACTOR (APowerMask, APowerIronFeet) + DECLARE_CLASS (APowerMask, APowerIronFeet) public: void AbsorbDamage (int damage, FName damageType, int &newdamage); void DoEffect (); @@ -127,7 +127,7 @@ public: class APowerLightAmp : public APowerup { - DECLARE_STATELESS_ACTOR (APowerLightAmp, APowerup) + DECLARE_CLASS (APowerLightAmp, APowerup) protected: void DoEffect (); void EndEffect (); @@ -135,7 +135,7 @@ protected: class APowerTorch : public APowerLightAmp { - DECLARE_STATELESS_ACTOR (APowerTorch, APowerLightAmp) + DECLARE_CLASS (APowerTorch, APowerLightAmp) public: void Serialize (FArchive &arc); protected: @@ -145,7 +145,7 @@ protected: class APowerFlight : public APowerup { - DECLARE_STATELESS_ACTOR (APowerFlight, APowerup) + DECLARE_CLASS (APowerFlight, APowerup) public: bool DrawPowerup (int x, int y); void Serialize (FArchive &arc); @@ -160,7 +160,7 @@ protected: class APowerWeaponLevel2 : public APowerup { - DECLARE_STATELESS_ACTOR (APowerWeaponLevel2, APowerup) + DECLARE_CLASS (APowerWeaponLevel2, APowerup) protected: void InitEffect (); void EndEffect (); @@ -168,7 +168,7 @@ protected: class APowerSpeed : public APowerup { - DECLARE_STATELESS_ACTOR (APowerSpeed, APowerup) + DECLARE_CLASS (APowerSpeed, APowerup) protected: void DoEffect (); fixed_t GetSpeedFactor(); @@ -176,17 +176,17 @@ protected: class APowerMinotaur : public APowerup { - DECLARE_STATELESS_ACTOR (APowerMinotaur, APowerup) + DECLARE_CLASS (APowerMinotaur, APowerup) }; class APowerScanner : public APowerup { - DECLARE_STATELESS_ACTOR (APowerScanner, APowerup) + DECLARE_CLASS (APowerScanner, APowerup) }; class APowerTargeter : public APowerup { - DECLARE_ACTOR (APowerTargeter, APowerup) + DECLARE_CLASS (APowerTargeter, APowerup) protected: void InitEffect (); void DoEffect (); @@ -197,7 +197,7 @@ protected: class APowerFrightener : public APowerup { - DECLARE_STATELESS_ACTOR (APowerFrightener, APowerup) + DECLARE_CLASS (APowerFrightener, APowerup) protected: void InitEffect (); void EndEffect (); @@ -205,7 +205,7 @@ protected: class APowerTimeFreezer : public APowerup { - DECLARE_STATELESS_ACTOR( APowerTimeFreezer, APowerup ) + DECLARE_CLASS( APowerTimeFreezer, APowerup ) protected: void InitEffect( ); void DoEffect( ); @@ -214,7 +214,7 @@ protected: class APowerDamage : public APowerup { - DECLARE_STATELESS_ACTOR( APowerDamage, APowerup ) + DECLARE_CLASS( APowerDamage, APowerup ) protected: void InitEffect (); void EndEffect (); @@ -223,7 +223,7 @@ protected: class APowerProtection : public APowerup { - DECLARE_STATELESS_ACTOR( APowerProtection, APowerup ) + DECLARE_CLASS( APowerProtection, APowerup ) protected: void InitEffect (); void EndEffect (); @@ -232,7 +232,7 @@ protected: class APowerDrain : public APowerup { - DECLARE_STATELESS_ACTOR( APowerDrain, APowerup ) + DECLARE_CLASS( APowerDrain, APowerup ) protected: void InitEffect( ); void EndEffect( ); @@ -240,7 +240,7 @@ protected: class APowerRegeneration : public APowerup { - DECLARE_STATELESS_ACTOR( APowerRegeneration, APowerup ) + DECLARE_CLASS( APowerRegeneration, APowerup ) protected: void InitEffect( ); void EndEffect( ); @@ -248,7 +248,7 @@ protected: class APowerHighJump : public APowerup { - DECLARE_STATELESS_ACTOR( APowerHighJump, APowerup ) + DECLARE_CLASS( APowerHighJump, APowerup ) protected: void InitEffect( ); void EndEffect( ); @@ -256,7 +256,7 @@ protected: class APowerMorph : public APowerup { - DECLARE_STATELESS_ACTOR( APowerMorph, APowerup ) + DECLARE_CLASS( APowerMorph, APowerup ) public: void Serialize (FArchive &arc); diff --git a/src/g_shared/a_keys.cpp b/src/g_shared/a_keys.cpp index dc295597c..9d8c00a26 100644 --- a/src/g_shared/a_keys.cpp +++ b/src/g_shared/a_keys.cpp @@ -429,10 +429,7 @@ bool P_CheckKeys (AActor *owner, int keynum, bool remote) // //========================================================================== -IMPLEMENT_STATELESS_ACTOR (AKey, Any, -1, 0) - PROP_Inventory_FlagsSet (IF_INTERHUBSTRIP) - PROP_Inventory_PickupSound ("misc/k_pkup") -END_DEFAULTS +IMPLEMENT_CLASS (AKey) bool AKey::HandlePickup (AInventory *item) { diff --git a/src/g_shared/a_keys.h b/src/g_shared/a_keys.h index 2004f6a1f..8661c81af 100644 --- a/src/g_shared/a_keys.h +++ b/src/g_shared/a_keys.h @@ -5,7 +5,7 @@ class AKey : public AInventory { - DECLARE_STATELESS_ACTOR (AKey, AInventory) + DECLARE_CLASS (AKey, AInventory) public: virtual bool HandlePickup (AInventory *item); diff --git a/src/g_shared/a_morph.cpp b/src/g_shared/a_morph.cpp index 8650034e3..d02ea2f41 100644 --- a/src/g_shared/a_morph.cpp +++ b/src/g_shared/a_morph.cpp @@ -530,11 +530,7 @@ bool P_MorphedDeath(AActor *actor, AActor **morphed, int *morphedstyle, int *mor // Base class for morphing projectiles -------------------------------------- -IMPLEMENT_STATELESS_ACTOR(AMorphProjectile, Any, -1, 0) - PROP_Damage (1) - PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY) - PROP_Flags2 (MF2_NOTELEPORT) -END_DEFAULTS +IMPLEMENT_CLASS(AMorphProjectile) int AMorphProjectile::DoSpecialDamage (AActor *target, int damage) { @@ -566,12 +562,6 @@ IMPLEMENT_POINTY_CLASS (AMorphedMonster) DECLARE_POINTER (UnmorphedMe) END_POINTERS -BEGIN_STATELESS_DEFAULTS (AMorphedMonster, Any, -1, 0) - PROP_Flags (MF_SOLID|MF_SHOOTABLE) - PROP_Flags2 (MF2_MCROSS|MF2_FLOORCLIP|MF2_PASSMOBJ|MF2_PUSHWALL) - PROP_Flags3 (MF3_DONTMORPH|MF3_ISMONSTER) -END_DEFAULTS - void AMorphedMonster::Serialize (FArchive &arc) { Super::Serialize (arc); diff --git a/src/g_shared/a_movingcamera.cpp b/src/g_shared/a_movingcamera.cpp index 3ef17c802..16171bd6e 100644 --- a/src/g_shared/a_movingcamera.cpp +++ b/src/g_shared/a_movingcamera.cpp @@ -134,7 +134,7 @@ public: void Tick () {} // Does absolutely nothing itself }; -IMPLEMENT_CLASS (AInterpolationSpecial, Any, 9075, 0) +IMPLEMENT_CLASS (AInterpolationSpecial) /* == PathFollower: something that follows a camera path diff --git a/src/g_shared/a_pickups.cpp b/src/g_shared/a_pickups.cpp index 6c07211ab..fe880cb84 100644 --- a/src/g_shared/a_pickups.cpp +++ b/src/g_shared/a_pickups.cpp @@ -17,10 +17,7 @@ static FRandom pr_restore ("RestorePos"); -IMPLEMENT_STATELESS_ACTOR (AAmmo, Any, -1, 0) - PROP_Inventory_FlagsSet (IF_KEEPDEPLETED) - PROP_Inventory_PickupSound ("misc/ammo_pkup") -END_DEFAULTS +IMPLEMENT_CLASS (AAmmo) //=========================================================================== // @@ -366,32 +363,6 @@ void A_RestoreSpecialPosition (AActor *self) } } -// Pickup flash ------------------------------------------------------------- - -class APickupFlash : public AActor -{ - DECLARE_ACTOR (APickupFlash, AActor) -}; - -FState APickupFlash::States[] = -{ - S_NORMAL (ACLO, 'D', 3, NULL , &States[1]), - S_NORMAL (ACLO, 'C', 3, NULL , &States[2]), - S_NORMAL (ACLO, 'D', 3, NULL , &States[3]), - S_NORMAL (ACLO, 'C', 3, NULL , &States[4]), - S_NORMAL (ACLO, 'B', 3, NULL , &States[5]), - S_NORMAL (ACLO, 'C', 3, NULL , &States[6]), - S_NORMAL (ACLO, 'B', 3, NULL , &States[7]), - S_NORMAL (ACLO, 'A', 3, NULL , &States[8]), - S_NORMAL (ACLO, 'B', 3, NULL , &States[9]), - S_NORMAL (ACLO, 'A', 3, NULL , NULL) -}; - -IMPLEMENT_ACTOR (APickupFlash, Raven, -1, 0) - PROP_SpawnState (0) - PROP_Flags (MF_NOGRAVITY) -END_DEFAULTS - /***************************************************************************/ /* AInventory implementation */ /***************************************************************************/ @@ -1154,11 +1125,7 @@ bool AInventory::DrawPowerup (int x, int y) /* AArtifact implementation */ /***************************************************************************/ -IMPLEMENT_STATELESS_ACTOR (APowerupGiver, Any, -1, 0) - PROP_Inventory_DefMaxAmount - PROP_Inventory_FlagsSet (IF_INVBAR|IF_FANCYPICKUPSOUND) - PROP_Inventory_PickupSound ("misc/p_pkup") -END_DEFAULTS +IMPLEMENT_CLASS (APowerupGiver) //=========================================================================== // @@ -1349,8 +1316,7 @@ void AInventory::DetachFromOwner () { } -IMPLEMENT_STATELESS_ACTOR (ACustomInventory, Any, -1, 0) -END_DEFAULTS +IMPLEMENT_CLASS (ACustomInventory) //=========================================================================== // @@ -1396,12 +1362,7 @@ bool ACustomInventory::TryPickup (AActor *toucher) return useok; } -IMPLEMENT_STATELESS_ACTOR (AHealth, Any, -1, 0) - PROP_Inventory_Amount (1) - PROP_Inventory_MaxAmount (0) - PROP_Inventory_PickupSound ("misc/health_pkup") -END_DEFAULTS - +IMPLEMENT_CLASS (AHealth) //=========================================================================== // @@ -1493,10 +1454,7 @@ bool AHealth::TryPickup (AActor *other) return true; } -IMPLEMENT_STATELESS_ACTOR (AHealthPickup, Any, -1, 0) - PROP_Inventory_DefMaxAmount - PROP_Inventory_FlagsSet (IF_INVBAR) -END_DEFAULTS +IMPLEMENT_CLASS (AHealthPickup) //=========================================================================== // @@ -1724,9 +1682,9 @@ void ABackpackItem::DetachFromOwner () // //=========================================================================== -IMPLEMENT_ABSTRACT_ACTOR(ABackpackItem) +IMPLEMENT_CLASS(ABackpackItem) -IMPLEMENT_ABSTRACT_ACTOR (AMapRevealer) +IMPLEMENT_CLASS (AMapRevealer) //=========================================================================== // diff --git a/src/g_shared/a_pickups.h b/src/g_shared/a_pickups.h index 71d14c43a..510d490a0 100644 --- a/src/g_shared/a_pickups.h +++ b/src/g_shared/a_pickups.h @@ -175,7 +175,7 @@ private: // CustomInventory: Supports the Use, Pickup, and Drop states from 96x class ACustomInventory : public AInventory { - DECLARE_STATELESS_ACTOR (ACustomInventory, AInventory) + DECLARE_CLASS (ACustomInventory, AInventory) public: // This is used when an inventory item's use state sequence is executed. @@ -189,7 +189,7 @@ public: // Ammo: Something a weapon needs to operate class AAmmo : public AInventory { - DECLARE_STATELESS_ACTOR (AAmmo, AInventory) + DECLARE_CLASS (AAmmo, AInventory) public: void Serialize (FArchive &arc); AInventory *CreateCopy (AActor *other); @@ -203,7 +203,7 @@ public: // A weapon is just that. class AWeapon : public AInventory { - DECLARE_ACTOR (AWeapon, AInventory) + DECLARE_CLASS (AWeapon, AInventory) HAS_OBJECT_POINTERS public: DWORD WeaponFlags; @@ -295,7 +295,7 @@ enum // Health is some item that gives the player health when picked up. class AHealth : public AInventory { - DECLARE_STATELESS_ACTOR (AHealth, AInventory) + DECLARE_CLASS (AHealth, AInventory) int PrevHealth; public: @@ -306,7 +306,7 @@ public: // HealthPickup is some item that gives the player health when used. class AHealthPickup : public AInventory { - DECLARE_STATELESS_ACTOR (AHealthPickup, AInventory) + DECLARE_CLASS (AHealthPickup, AInventory) public: virtual AInventory *CreateCopy (AActor *other); virtual AInventory *CreateTossable (); @@ -317,7 +317,7 @@ public: // Armor absorbs some damage for the player. class AArmor : public AInventory { - DECLARE_STATELESS_ACTOR (AArmor, AInventory) + DECLARE_CLASS (AArmor, AInventory) }; // Basic armor absorbs a specific percent of the damage. You should @@ -325,7 +325,7 @@ class AArmor : public AInventory // or BasicArmorBonus and those gives you BasicArmor when it activates. class ABasicArmor : public AArmor { - DECLARE_STATELESS_ACTOR (ABasicArmor, AArmor) + DECLARE_CLASS (ABasicArmor, AArmor) public: virtual void Serialize (FArchive &arc); virtual void Tick (); @@ -340,7 +340,7 @@ public: // BasicArmorPickup replaces the armor you have. class ABasicArmorPickup : public AArmor { - DECLARE_STATELESS_ACTOR (ABasicArmorPickup, AArmor) + DECLARE_CLASS (ABasicArmorPickup, AArmor) public: virtual void Serialize (FArchive &arc); virtual AInventory *CreateCopy (AActor *other); @@ -353,7 +353,7 @@ public: // BasicArmorBonus adds to the armor you have. class ABasicArmorBonus : public AArmor { - DECLARE_STATELESS_ACTOR (ABasicArmorBonus, AArmor) + DECLARE_CLASS (ABasicArmorBonus, AArmor) public: virtual void Serialize (FArchive &arc); virtual AInventory *CreateCopy (AActor *other); @@ -370,7 +370,7 @@ public: // type (the player himself) that work together as a single armor. class AHexenArmor : public AArmor { - DECLARE_STATELESS_ACTOR (AHexenArmor, AArmor) + DECLARE_CLASS (AHexenArmor, AArmor) public: virtual void Serialize (FArchive &arc); virtual AInventory *CreateCopy (AActor *other); @@ -388,7 +388,7 @@ protected: // PuzzleItems work in conjunction with the UsePuzzleItem special class APuzzleItem : public AInventory { - DECLARE_STATELESS_ACTOR (APuzzleItem, AInventory) + DECLARE_CLASS (APuzzleItem, AInventory) public: void Serialize (FArchive &arc); bool ShouldStay (); @@ -401,7 +401,7 @@ public: // A MapRevealer reveals the whole map for the player who picks it up. class AMapRevealer : public AInventory { - DECLARE_STATELESS_ACTOR (AMapRevealer, AInventory) + DECLARE_CLASS (AMapRevealer, AInventory) public: bool TryPickup (AActor *toucher); }; @@ -410,7 +410,7 @@ public: // normal maximum ammo amounts. class ABackpackItem : public AInventory { - DECLARE_ACTOR (ABackpackItem, AInventory) + DECLARE_CLASS (ABackpackItem, AInventory) public: void Serialize (FArchive &arc); bool HandlePickup (AInventory *item); diff --git a/src/g_shared/a_puzzleitems.cpp b/src/g_shared/a_puzzleitems.cpp index 69c2cb0e4..a0f4084a5 100644 --- a/src/g_shared/a_puzzleitems.cpp +++ b/src/g_shared/a_puzzleitems.cpp @@ -7,13 +7,7 @@ #include "s_sound.h" #include "c_console.h" -IMPLEMENT_STATELESS_ACTOR (APuzzleItem, Any, -1, 0) - PROP_Flags (MF_SPECIAL|MF_NOGRAVITY) - PROP_Inventory_FlagsSet (IF_INVBAR) - PROP_Inventory_DefMaxAmount - PROP_UseSound ("PuzzleSuccess") - PROP_Inventory_PickupSound ("misc/i_pkup") -END_DEFAULTS +IMPLEMENT_CLASS (APuzzleItem) void APuzzleItem::Serialize (FArchive &arc) { diff --git a/src/g_shared/a_randomspawner.cpp b/src/g_shared/a_randomspawner.cpp index 226a5f430..788e2d888 100644 --- a/src/g_shared/a_randomspawner.cpp +++ b/src/g_shared/a_randomspawner.cpp @@ -20,7 +20,7 @@ static FRandom pr_randomspawn("RandomSpawn"); class ARandomSpawner : public AActor { - DECLARE_STATELESS_ACTOR (ARandomSpawner, AActor) + DECLARE_CLASS (ARandomSpawner, AActor) void PostBeginPlay() { @@ -84,6 +84,5 @@ class ARandomSpawner : public AActor } }; -IMPLEMENT_STATELESS_ACTOR (ARandomSpawner, Any, -1, 0) -END_DEFAULTS +IMPLEMENT_CLASS (ARandomSpawner) diff --git a/src/g_shared/a_sharedglobal.h b/src/g_shared/a_sharedglobal.h index 363ed23ba..f88e50f78 100644 --- a/src/g_shared/a_sharedglobal.h +++ b/src/g_shared/a_sharedglobal.h @@ -146,7 +146,7 @@ private: class AMorphProjectile : public AActor { - DECLARE_ACTOR (AMorphProjectile, AActor) + DECLARE_CLASS (AMorphProjectile, AActor) public: int DoSpecialDamage (AActor *target, int damage); void Serialize (FArchive &arc); @@ -157,7 +157,7 @@ public: class AMorphedMonster : public AActor { - DECLARE_ACTOR (AMorphedMonster, AActor) + DECLARE_CLASS (AMorphedMonster, AActor) HAS_OBJECT_POINTERS public: void Tick (); diff --git a/src/g_shared/a_weaponpiece.cpp b/src/g_shared/a_weaponpiece.cpp index 7bde37bb1..a2934cfa0 100644 --- a/src/g_shared/a_weaponpiece.cpp +++ b/src/g_shared/a_weaponpiece.cpp @@ -2,17 +2,11 @@ #include "a_weaponpiece.h" #include "doomstat.h" -IMPLEMENT_STATELESS_ACTOR (AWeaponHolder, Any, -1, 0) - PROP_Flags (MF_NOBLOCKMAP|MF_NOSECTOR) - PROP_Inventory_FlagsSet (IF_UNDROPPABLE) -END_DEFAULTS - +IMPLEMENT_CLASS (AWeaponHolder) IMPLEMENT_POINTY_CLASS (AWeaponPiece) DECLARE_POINTER (FullWeapon) END_POINTERS -BEGIN_STATELESS_DEFAULTS (AWeaponPiece, Any, -1, 0) -END_DEFAULTS void AWeaponPiece::Serialize (FArchive &arc) diff --git a/src/g_shared/a_weaponpiece.h b/src/g_shared/a_weaponpiece.h index ccb18093b..09db79dac 100644 --- a/src/g_shared/a_weaponpiece.h +++ b/src/g_shared/a_weaponpiece.h @@ -21,7 +21,7 @@ public: // [BL] Needs to be available for SBarInfo to check weaponpieces class AWeaponHolder : public AInventory { - DECLARE_ACTOR(AWeaponHolder, AInventory) + DECLARE_CLASS(AWeaponHolder, AInventory) public: int PieceMask; diff --git a/src/g_shared/a_weapons.cpp b/src/g_shared/a_weapons.cpp index 0521aaeac..747ea273a 100644 --- a/src/g_shared/a_weapons.cpp +++ b/src/g_shared/a_weapons.cpp @@ -17,21 +17,12 @@ #define BONUSADD 6 -FState AWeapon::States[] = -{ - S_NORMAL (SHTG, 'E', 0, A_Light0 , NULL) -}; - IMPLEMENT_POINTY_CLASS (AWeapon) DECLARE_POINTER (Ammo1) DECLARE_POINTER (Ammo2) DECLARE_POINTER (SisterWeapon) END_POINTERS -BEGIN_DEFAULTS (AWeapon, Any, -1, 0) - PROP_Inventory_PickupSound ("misc/w_pkup") -END_DEFAULTS - //=========================================================================== // // AWeapon :: Serialize @@ -584,13 +575,13 @@ FState *AWeapon::GetAltAtkState (bool hold) class AWeaponGiver : public AWeapon { - DECLARE_STATELESS_ACTOR(AWeaponGiver, AWeapon) + DECLARE_CLASS(AWeaponGiver, AWeapon) public: bool TryPickup(AActor *toucher); }; -IMPLEMENT_ABSTRACT_ACTOR(AWeaponGiver) +IMPLEMENT_CLASS(AWeaponGiver) bool AWeaponGiver::TryPickup(AActor *toucher) { diff --git a/src/info.cpp b/src/info.cpp index 32d1f80c6..5f783130a 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -281,22 +281,6 @@ void FActorInfo::StaticInit () LoadDecorations (); } -//========================================================================== -// -// Called after the IWAD has been identified -// -//========================================================================== - -void FActorInfo::StaticGameSet () -{ - // Run every AT_GAME_SET function - TAutoSegIteratorNoArrow setters; - while (++setters != NULL) - { - ((void (*)())setters) (); - } -} - //========================================================================== // // Called after Dehacked patches are applied diff --git a/src/info.h b/src/info.h index 6b565765e..e745714e4 100644 --- a/src/info.h +++ b/src/info.h @@ -385,7 +385,6 @@ typedef TMap PainChanceList; struct FActorInfo { static void StaticInit (); - static void StaticGameSet (); static void StaticSetActorNums (); void BuildDefaults (); diff --git a/src/infomacros.h b/src/infomacros.h index ff7b7e15c..e35bd2251 100644 --- a/src/infomacros.h +++ b/src/infomacros.h @@ -68,7 +68,6 @@ typedef void (*voidfunc_)(); #pragma warning(disable: 4207) // nonstandard extension used : extended initializer form #pragma data_seg(".areg$u") // ActorInfo initializer list -#pragma data_seg(".greg$u") // AT_GAME_SET list #pragma data_seg() #define DOOMEDNUMOF(actor) actor##ActorInfo.DoomEdNum @@ -97,12 +96,6 @@ typedef void (*voidfunc_)(); #define ADD_STRING_PROP(prop1,prop2,val) prop2 "\0" val "\0" #endif -// Define a function that gets called when the game is started. -#define AT_GAME_SET(ns) \ - extern void ns##_gs(); \ - __declspec(allocate(".greg$u")) voidfunc_ ns##_gsr = ns##_gs; \ - void ns##_gs () - #else /*********************************************** @@ -137,21 +130,10 @@ extern void ApplyActorDefault (int defnum, int dataint); #define ADD_LONG_PROP(prop,val) ApplyActorDefault (prop, (val)); #define ADD_STRING_PROP(prop1,prop2,val) ApplyActorDefault (prop1, (val)); -#define AT_GAME_SET(ns) \ - extern void ns##_gs(); \ - voidfunc_ ns##_gsr __attribute__((section(GREG_SECTION))) = ns##_gs; \ - void ns##_gs () - -//typedef void (*speedfunc)(EGameSpeed); - #endif // Common macros -#define SimpleSpeedSetter(T,normalSpeed,fastSpeed,speed) \ - { GetDefault()->Speed = (speed == SPEED_Fast) ? fastSpeed : normalSpeed; } - -#define AT_GAME_SET_FRIEND(ns) friend void ns##_gs(); #define DECLARE_STATELESS_ACTOR(cls,parent) \ DECLARE_CLASS(cls,parent) \ diff --git a/src/p_user.cpp b/src/p_user.cpp index 5b70c8224..ad7b870a4 100644 --- a/src/p_user.cpp +++ b/src/p_user.cpp @@ -400,34 +400,7 @@ IMPLEMENT_POINTY_CLASS (APlayerPawn) DECLARE_POINTER(InvSel) END_POINTERS -BEGIN_STATELESS_DEFAULTS (APlayerPawn, Any, -1, 0) - PROP_SpawnHealth (100) - PROP_RadiusFixed (16) - PROP_HeightFixed (56) - PROP_Mass (100) - PROP_PainChance (255) - PROP_SpeedFixed (1) - PROP_Flags (MF_SOLID|MF_SHOOTABLE|MF_DROPOFF|MF_PICKUP|MF_NOTDMATCH|MF_FRIENDLY) - PROP_Flags2 (MF2_SLIDE|MF2_PASSMOBJ|MF2_PUSHWALL|MF2_FLOORCLIP|MF2_WINDTHRUST|MF2_TELESTOMP) - PROP_Flags3 (MF3_NOBLOCKMONST) - PROP_PlayerPawn_AttackZOffset (8) - // [GRB] - PROP_PlayerPawn_JumpZ (8*FRACUNIT) - PROP_PlayerPawn_ViewHeight (41*FRACUNIT) - PROP_PlayerPawn_ForwardMove1 (FRACUNIT) - PROP_PlayerPawn_ForwardMove2 (FRACUNIT) - PROP_PlayerPawn_SideMove1 (FRACUNIT) - PROP_PlayerPawn_SideMove2 (FRACUNIT) - PROP_PlayerPawn_ColorRange (0, 0) - PROP_PlayerPawn_SoundClass ("player") - PROP_PlayerPawn_Face ("None") - PROP_PlayerPawn_MorphWeapon ("None") -END_DEFAULTS - -IMPLEMENT_STATELESS_ACTOR (APlayerChunk, Any, -1, 0) - PROP_Flags (MF_DROPOFF) - PROP_Flags2 (MF2_PASSMOBJ) -END_DEFAULTS +IMPLEMENT_CLASS (APlayerChunk) void APlayerPawn::Serialize (FArchive &arc) { diff --git a/src/r_things.cpp b/src/r_things.cpp index 2719ff986..41a8304bc 100644 --- a/src/r_things.cpp +++ b/src/r_things.cpp @@ -890,7 +890,7 @@ void R_InitSprites () const char *pclassface = basetype->Meta.GetMetaString (APMETA_Face); strcpy (skins[i].name, "Base"); - if (strcmp(pclassface, "None") == 0) + if (pclassface == NULL || strcmp(pclassface, "None") == 0) { skins[i].face[0] = 'S'; skins[i].face[1] = 'T'; diff --git a/src/thingdef/olddecorations.cpp b/src/thingdef/olddecorations.cpp index 3a0f64c77..fac8cb39c 100644 --- a/src/thingdef/olddecorations.cpp +++ b/src/thingdef/olddecorations.cpp @@ -69,7 +69,7 @@ struct FExtraInfo class AFakeInventory : public AInventory { - DECLARE_STATELESS_ACTOR (AFakeInventory, AInventory); + DECLARE_CLASS (AFakeInventory, AInventory); public: bool Respawnable; @@ -96,9 +96,7 @@ public: // The special was already executed by TryPickup, so do nothing here } }; -IMPLEMENT_STATELESS_ACTOR (AFakeInventory, Any, -1, 0) - PROP_Flags (MF_SPECIAL) -END_DEFAULTS +IMPLEMENT_CLASS (AFakeInventory) // PUBLIC FUNCTION PROTOTYPES ---------------------------------------------- diff --git a/src/thingdef/thingdef.cpp b/src/thingdef/thingdef.cpp index d11913bb7..c88b4eef2 100644 --- a/src/thingdef/thingdef.cpp +++ b/src/thingdef/thingdef.cpp @@ -442,13 +442,6 @@ static FActorInfo *CreateNewActor(FScanner &sc, FActorInfo **parentc, Baggage *b } info->DoomEdNum = DoomEdNum; - - if (parent == RUNTIME_CLASS(AWeapon)) - { - // preinitialize kickback to the default for the game - ((AWeapon*)(info->Class->Defaults))->Kickback=gameinfo.defKickback; - } - return info; } @@ -551,15 +544,24 @@ void FinishThingdef() isRuntimeActor=true; } - // Friendlies never count as kills! - if (GetDefaultByType(ti)->flags & MF_FRIENDLY) + AActor *def = GetDefaultByType(ti); + + if (!def) { - GetDefaultByType(ti)->flags &=~MF_COUNTKILL; + Printf("No ActorInfo defined for class '%s'\n", ti->TypeName.GetChars()); + errorcount++; + continue; + } + + // Friendlies never count as kills! + if (def->flags & MF_FRIENDLY) + { + def->flags &=~MF_COUNTKILL; } if (ti->IsDescendantOf(RUNTIME_CLASS(AInventory))) { - AInventory * defaults=(AInventory *)ti->Defaults; + AInventory * defaults=(AInventory *)def; fuglyname v; v = defaults->PickupFlash; @@ -580,7 +582,7 @@ void FinishThingdef() if (ti->IsDescendantOf(RUNTIME_CLASS(APowerupGiver)) && ti != RUNTIME_CLASS(APowerupGiver)) { FString typestr; - APowerupGiver * defaults=(APowerupGiver *)ti->Defaults; + APowerupGiver * defaults=(APowerupGiver *)def; fuglyname v; v = defaults->PowerupType; @@ -615,7 +617,7 @@ void FinishThingdef() // the typeinfo properties of weapons have to be fixed here after all actors have been declared if (ti->IsDescendantOf(RUNTIME_CLASS(AWeapon))) { - AWeapon * defaults=(AWeapon *)ti->Defaults; + AWeapon * defaults=(AWeapon *)def; fuglyname v; v = defaults->AmmoType1; @@ -714,7 +716,7 @@ void FinishThingdef() // same for the weapon type of weapon pieces. else if (ti->IsDescendantOf(RUNTIME_CLASS(AWeaponPiece))) { - AWeaponPiece * defaults=(AWeaponPiece *)ti->Defaults; + AWeaponPiece * defaults=(AWeaponPiece *)def; fuglyname v; v = defaults->WeaponClass; diff --git a/src/thingdef/thingdef_properties.cpp b/src/thingdef/thingdef_properties.cpp index 3ad82d00e..3b4d9b656 100644 --- a/src/thingdef/thingdef_properties.cpp +++ b/src/thingdef/thingdef_properties.cpp @@ -2079,6 +2079,14 @@ static void WeaponKickback (FScanner &sc, AWeapon *defaults, Baggage &bag) defaults->Kickback=sc.Number; } +//========================================================================== +// +//========================================================================== +static void WeaponDefKickback (FScanner &sc, AWeapon *defaults, Baggage &bag) +{ + defaults->Kickback = gameinfo.defKickback; +} + //========================================================================== // //========================================================================== @@ -2151,6 +2159,20 @@ static void PowerupColor (FScanner &sc, APowerupGiver *defaults, Baggage &bag) int g; int b; int alpha; + PalEntry * pBlendColor; + + if (bag.Info->Class->IsDescendantOf(RUNTIME_CLASS(APowerup))) + { + pBlendColor = &((APowerup*)defaults)->BlendColor; + } + else if (bag.Info->Class->IsDescendantOf(RUNTIME_CLASS(APowerupGiver))) + { + pBlendColor = &((APowerupGiver*)defaults)->BlendColor; + } + else + { + sc.ScriptError("\"%s\" requires an actor of type \"Powerup\"\n", sc.String); + } if (sc.CheckNumber()) { @@ -2197,8 +2219,8 @@ static void PowerupColor (FScanner &sc, APowerupGiver *defaults, Baggage &bag) sc.MustGetFloat(); alpha=int(sc.Float*255); alpha=clamp(alpha, 0, 255); - if (alpha!=0) defaults->BlendColor = MAKEARGB(alpha, r, g, b); - else defaults->BlendColor = 0; + if (alpha!=0) *pBlendColor = MAKEARGB(alpha, r, g, b); + else *pBlendColor = 0; } //========================================================================== @@ -2206,8 +2228,23 @@ static void PowerupColor (FScanner &sc, APowerupGiver *defaults, Baggage &bag) //========================================================================== static void PowerupDuration (FScanner &sc, APowerupGiver *defaults, Baggage &bag) { + int *pEffectTics; + + if (bag.Info->Class->IsDescendantOf(RUNTIME_CLASS(APowerup))) + { + pEffectTics = &((APowerup*)defaults)->EffectTics; + } + else if (bag.Info->Class->IsDescendantOf(RUNTIME_CLASS(APowerupGiver))) + { + pEffectTics = &((APowerupGiver*)defaults)->EffectTics; + } + else + { + sc.ScriptError("\"%s\" requires an actor of type \"Powerup\"\n", sc.String); + } + sc.MustGetNumber(); - defaults->EffectTics = sc.Number; + *pEffectTics = sc.Number>=0? sc.Number : -sc.Number*TICRATE; } //========================================================================== @@ -2748,8 +2785,8 @@ static const ActorProps props[] = { "powermorph.morphstyle", (apf)PowerMorphMorphStyle, RUNTIME_CLASS(APowerMorph) }, { "powermorph.playerclass", (apf)PowerMorphPlayerClass, RUNTIME_CLASS(APowerMorph) }, { "powermorph.unmorphflash", (apf)PowerMorphUnMorphFlash, RUNTIME_CLASS(APowerMorph) }, - { "powerup.color", (apf)PowerupColor, RUNTIME_CLASS(APowerupGiver) }, - { "powerup.duration", (apf)PowerupDuration, RUNTIME_CLASS(APowerupGiver) }, + { "powerup.color", (apf)PowerupColor, RUNTIME_CLASS(AInventory) }, + { "powerup.duration", (apf)PowerupDuration, RUNTIME_CLASS(AInventory) }, { "powerup.mode", (apf)PowerupMode, RUNTIME_CLASS(APowerupGiver) }, { "powerup.type", (apf)PowerupType, RUNTIME_CLASS(APowerupGiver) }, { "projectile", ActorProjectile, RUNTIME_CLASS(AActor) }, @@ -2782,6 +2819,7 @@ static const ActorProps props[] = { "weapon.ammouse", (apf)WeaponAmmoUse1, RUNTIME_CLASS(AWeapon) }, { "weapon.ammouse1", (apf)WeaponAmmoUse1, RUNTIME_CLASS(AWeapon) }, { "weapon.ammouse2", (apf)WeaponAmmoUse2, RUNTIME_CLASS(AWeapon) }, + { "weapon.defaultkickback", (apf)WeaponDefKickback, RUNTIME_CLASS(AWeapon) }, { "weapon.kickback", (apf)WeaponKickback, RUNTIME_CLASS(AWeapon) }, { "weapon.readysound", (apf)WeaponReadySound, RUNTIME_CLASS(AWeapon) }, { "weapon.selectionorder", (apf)WeaponSelectionOrder, RUNTIME_CLASS(AWeapon) }, diff --git a/src/v_palette.cpp b/src/v_palette.cpp index b826e3a9f..ae3f92c5c 100644 --- a/src/v_palette.cpp +++ b/src/v_palette.cpp @@ -474,6 +474,7 @@ void DoBlending (const PalEntry *from, PalEntry *to, int count, int r, int g, in to[i] = t; } } + /* else if (CPU.bSSE2) { if (count >= 4) @@ -489,6 +490,7 @@ void DoBlending (const PalEntry *from, PalEntry *to, int count, int r, int g, in to += not3count; } } + */ #ifdef X86_ASM else if (CPU.bMMX) { diff --git a/src/win32/i_system.cpp b/src/win32/i_system.cpp index f391ac75f..02a8a6db0 100644 --- a/src/win32/i_system.cpp +++ b/src/win32/i_system.cpp @@ -345,7 +345,7 @@ void SetLanguageIDs () void I_Init (void) { - CheckCPUID(&CPU); + //CheckCPUID(&CPU); CalculateCPUSpeed (); // Why does Intel right-justify this string? diff --git a/wadsrc/static/actors/hexen/baseweapons.txt b/wadsrc/static/actors/hexen/baseweapons.txt new file mode 100644 index 000000000..08bd2881f --- /dev/null +++ b/wadsrc/static/actors/hexen/baseweapons.txt @@ -0,0 +1,14 @@ +ACTOR FighterWeapon : Weapon native +{ + Weapon.Kickback 150 +} + +ACTOR ClericWeapon : Weapon native +{ + Weapon.Kickback 150 +} + +ACTOR MageWeapon : Weapon native +{ + Weapon.Kickback 150 +} diff --git a/wadsrc/static/actors/hexen/blastradius.txt b/wadsrc/static/actors/hexen/blastradius.txt index 0a77d024d..5c5e05613 100644 --- a/wadsrc/static/actors/hexen/blastradius.txt +++ b/wadsrc/static/actors/hexen/blastradius.txt @@ -5,7 +5,7 @@ ACTOR ArtiBlastRadius : Inventory 10110 native SpawnID 74 +FLOATBOB Inventory.DefMaxAmount - Inventory.PickupFlash 1 + Inventory.PickupFlash "PickupFlash" +INVBAR +FANCYPICKUPSOUND Inventory.Icon "ARTIBLST" Inventory.PickupSound "misc/p_pkup" diff --git a/wadsrc/static/actors/hexen/boostarmor.txt b/wadsrc/static/actors/hexen/boostarmor.txt index 3bbe371d7..ca3b8384c 100644 --- a/wadsrc/static/actors/hexen/boostarmor.txt +++ b/wadsrc/static/actors/hexen/boostarmor.txt @@ -8,7 +8,7 @@ ACTOR ArtiBoostArmor : Inventory 8041 native +COUNTITEM +FLOATBOB Inventory.DefMaxAmount - Inventory.PickupFlash 1 + Inventory.PickupFlash "PickupFlash" +INVBAR +FANCYPICKUPSOUND Inventory.Icon "ARTIBRAC" Inventory.PickupSound "misc/p_pkup" diff --git a/wadsrc/static/actors/hexen/flechette.txt b/wadsrc/static/actors/hexen/flechette.txt index 70f717517..1b09eb0a3 100644 --- a/wadsrc/static/actors/hexen/flechette.txt +++ b/wadsrc/static/actors/hexen/flechette.txt @@ -100,7 +100,7 @@ ACTOR ArtiPoisonBag : Inventory 8000 native SpawnID 72 +FLOATBOB Inventory.DefMaxAmount - Inventory.PickupFlash 1 + Inventory.PickupFlash "PickupFlash" +INVBAR +FANCYPICKUPSOUND Inventory.Icon "ARTIPSBG" Inventory.PickupSound "misc/p_pkup" diff --git a/wadsrc/static/actors/hexen/pig.txt b/wadsrc/static/actors/hexen/pig.txt new file mode 100644 index 000000000..25ec7277b --- /dev/null +++ b/wadsrc/static/actors/hexen/pig.txt @@ -0,0 +1,154 @@ + + +// Snout puff --------------------------------------------------------------- + +ACTOR SnoutPuff +{ + +NOBLOCKMAP + +NOGRAVITY + Renderstyle Translucent + Alpha 0.6 + States + { + Spawn: + FHFX STUVW 4 + Stop + } +} + + +// Snout -------------------------------------------------------------------- + +ACTOR Snout : Weapon +{ + Weapon.SelectionOrder 10000 + +WEAPON.DONTBOB + +WEAPON.MELEEWEAPON + Weapon.Kickback 150 + Weapon.YAdjust 10 + + action native A_SnoutAttack (); + + States + { + Ready: + WPIG A 1 A_WeaponReady + Loop + Deselect: + WPIG A 1 A_Lower + Loop + Select: + WPIG A 1 A_Raise + Fire: + WPIG A 4 A_SnoutAttack + WPIG B 8 A_SnoutAttack + Goto Ready + Grunt: + WPIG B 8 + Goto Ready + } +} + + +// Pig player --------------------------------------------------------------- + +ACTOR PigPlayer : PlayerPawn native +{ + Health 30 + ReactionTime 0 + PainChance 255 + Radius 16 + Height 24 + Speed 1 + +NOSKIN + PainSound "PigPain" + DeathSound "PigDeath" + Player.JumpZ 6 + Player.Viewheight 28 + Player.ForwardMove 0.96, 0.98 + Player.SideMove 0.95833333, 0.975 + Player.SpawnClass "Pig" + Player.SoundClass "Pig" + Player.DisplayName "Pig" + Player.MorphWeapon "Snout" + -PICKUP + States + { + Spawn: + PIGY A -1 + Stop + See: + PIGY ABCD 3 + Loop + Pain: + PIGY D 4 A_PigPain + Goto Spawn + Melee: + Missile: + PIGY A 12 + Goto Spawn + Death: + PIGY E 4 A_Scream + PIGY F 3 A_NoBlocking + PIGY G 4 + PIGY H 3 + PIGY IJK 4 + PIGY L -1 + Stop + Ice: + PIGY M 5 A_FreezeDeath + PIGY M 1 A_FreezeDeathChunks + Wait + } +} + + + +// Pig (non-player) --------------------------------------------------------- + +ACTOR Pig : MorphedMonster +{ + Health 25 + Painchance 128 + Speed 10 + Radius 12 + Height 22 + Mass 60 + Monster + -COUNTKILL + +WINDTHRUST + +DONTMORPH + SeeSound "PigActive1" + PainSound "PigPain" + DeathSound "PigDeath" + ActiveSound "PigActive1" + States + { + Spawn: + PIGY B 10 A_Look + Loop + See: + PIGY ABCD 3 A_Chase + Loop + Pain: + PIGY D 4 A_PigPain + Goto See + Melee: + PIGY A 5 A_FaceTarget + PIGY A 10 A_CustomMeleeAttack(random[PigAttack](2,3), "PigAttack") + Goto See + Death: + PIGY E 4 A_Scream + PIGY F 3 A_NoBlocking + PIGY G 4 + PIGY H 3 + PIGY IJK 4 + PIGY L -1 + Stop + Ice: + PIGY M 5 A_FreezeDeath + PIGY M 1 A_FreezeDeathChunks + Wait + } +} + diff --git a/wadsrc/static/actors/hexen/summon.txt b/wadsrc/static/actors/hexen/summon.txt index 2250c9129..399c2dd89 100644 --- a/wadsrc/static/actors/hexen/summon.txt +++ b/wadsrc/static/actors/hexen/summon.txt @@ -9,7 +9,7 @@ ACTOR ArtiDarkServant : Inventory 86 native +FLOATBOB Inventory.RespawnTics 4230 Inventory.DefMaxAmount - Inventory.PickupFlash 1 + Inventory.PickupFlash "PickupFlash" +INVBAR +FANCYPICKUPSOUND Inventory.Icon "ARTISUMN" Inventory.PickupSound "misc/p_pkup" diff --git a/wadsrc/static/actors/nativeclasses.txt b/wadsrc/static/actors/nativeclasses.txt index 7343b7570..109903a13 100644 --- a/wadsrc/static/actors/nativeclasses.txt +++ b/wadsrc/static/actors/nativeclasses.txt @@ -187,8 +187,10 @@ class Actor extends Thinker action native A_GiveQuestItem(eval int itemno); action native A_RemoveForcefield(); action native A_DropWeaponPieces(class p1, class p2, class p3); + action native A_PigPain (); } + class Inventory extends Actor native { @@ -229,3 +231,348 @@ class Inventory extends Actor action native A_ResetReloadCounter(); } +/* +ACTOR Inventory native +{ + Inventory.Amount 1 + Inventory.MaxAmount 1 + Inventory.UseSound "misc/invuse" + Inventory.PickupSound "misc/i_pkup" + + action native A_JumpIfNoAmmo(state label); + action native A_CustomPunch(eval int damage, optional eval bool norandom, optional evalnot bool useammo, optional class pufftype, optional eval float range); + action native A_FireBullets(eval float spread_xy, eval float spread_z, eval int numbullets, eval int damageperbullet, optional class pufftype, optional evalnot bool useammo, optional eval float range); + action native A_FireCustomMissile(class missiletype, optional eval float angle, optional evalnot bool useammo, optional eval int spawnofs_xy, optional eval float spawnheight, optional eval bool aimatangle); + action native A_RailAttack(eval int damage, optional eval int spawnofs_xy, optional evalnot int useammo, optional color color1, optional color color2, optional eval bool silent, optional eval float maxdiff, optional class pufftype); + action native A_Light(eval int extralight); + action native A_Light0(); + action native A_Light1(); + action native A_Light2(); + action native A_LightInverse(); + action native A_WeaponReady(); + action native A_Lower(); + action native A_Raise(); + action native A_FirePistol(); + action native A_FireShotgun(); + action native A_FireShotgun2(); + action native A_OpenShotgun2(); + action native A_LoadShotgun2(); + action native A_CloseShotgun2(); + action native A_FireCGun(); + action native A_FireMissile(); + action native A_FirePlasma(); + action native A_FireRailgun(); + action native A_FireRailgunLeft(); + action native A_FireRailgunRight(); + action native A_RailWait(); + action native A_BFGsound(); + action native A_FireBFG(); + action native A_ReFire(); + action native A_ClearReFire(); + action native A_CheckReload(); + action native A_GunFlash(); + action native A_Saw(optional coerce sound fullsound, optional coerce sound hitsound, optional eval int damage, optional class pufftype); + action native A_CheckForReload(eval int counter, state label); + action native A_ResetReloadCounter(); + action native A_RestoreSpecialPosition(); + action native A_RestoreSpecialDoomThing(); + action native A_RestoreSpecialThing1(); + action native A_RestoreSpecialThing2(); + + States + { + HideDoomish: + TNT1 A 1050 + TNT1 A 0 A_RestoreSpecialPosition + TNT1 A 1 A_RestoreSpecialDoomThing + Stop + HideSpecial: + ACLO E 1400 + ACLO A 0 A_RestoreSpecialPosition + ACLO A 4 A_RestoreSpecialThing1 + ACLO BABCBCDC 4 + ACLO D 4 A_RestoreSpecialThing2 + Stop + Held: + TNT1 A -1 + Stop + HoldAndDestroy: + TNT1 A 1 + Stop + } +} +*/ + + +Actor Ammo : Inventory native +{ + +INVENTORY.KEEPDEPLETED + Inventory.PickupSound "misc/ammo_pkup" +} + +Actor BackpackItem : Inventory native +{ +} + +ACTOR Armor : Inventory native +{ + Inventory.PickupSound "misc/armor_pkup" +} + +ACTOR BasicArmor : Armor native +{ + +Inventory.KEEPDEPLETED +} + +ACTOR BasicArmorBonus : Armor native +{ + +Inventory.AUTOACTIVATE + +Inventory.ALWAYSPICKUP + Inventory.MaxAmount 0 + Armor.SavePercent 0.333333 + +} + +ACTOR BasicArmorPickup : Armor native +{ + +Inventory.AUTOACTIVATE + Inventory.MaxAmount 0 +} + +ACTOR HexenArmor : Armor native +{ + +Inventory.KEEPDEPLETED + +Inventory.UNDROPPABLE +} + +ACTOR DehackedPickup : Inventory native +{ +} + +ACTOR FakeInventory : Inventory native +{ +} + +ACTOR CustomInventory : Inventory native +{ +} + +Actor Health : Inventory native +{ + Inventory.Amount 1 + Inventory.MaxAmount 0 + Inventory.PickupSound "misc/health_pkup" +} + +Actor HealthPickup : Inventory native +{ + Inventory.DefMaxAmount + +INVENTORY.INVBAR +} + +Actor Key : Inventory native +{ + +INVENTORY.INTERHUBSTRIP + Inventory.PickupSound "misc/k_pkup" +} + +ACTOR PowerupGiver : Inventory native +{ + Inventory.DefMaxAmount + +INVENTORY.INVBAR + +INVENTORY.FANCYPICKUPSOUND + Inventory.PickupSound "misc/p_pkup" +} + +ACTOR Powerup : Inventory native +{ +} + +ACTOR PowerInvulnerable : Powerup native +{ + Powerup.Duration -30 + inventory.icon "SPSHLD0" +} + +ACTOR PowerStrength : Powerup native +{ + Powerup.Duration 1 + Powerup.Color 255,0,0,0.5 + +INVENTORY.HUBPOWER +} + +ACTOR PowerInvisibility : Powerup native +{ + Powerup.Duration -60 +} + +ACTOR PowerGhost : PowerInvisibility native +{ +} + +ACTOR PowerShadow : PowerInvisibility native +{ + Powerup.Duration -55 + +INVENTORY.HUBPOWER +} + +ACTOR PowerIronFeet : Powerup native +{ + Powerup.Duration -60 + Powerup.Color 0, 255, 0, 0.125 +} + +ACTOR PowerMask : PowerIronFeet native +{ + Powerup.Duration -80 + Powerup.Color 0,0,0,0 + +INVENTORY.HUBPOWER + Inventory.Icon "I_MASK" +} + +ACTOR PowerLightAmp : Powerup native +{ + Powerup.Duration -120 +} + +ACTOR PowerTorch : PowerLightAmp native +{ +} + +ACTOR PowerFlight : Powerup native +{ + Powerup.Duration -60 + +INVENTORY.HUBPOWER +} + +ACTOR PowerWeaponLevel2 : Powerup native +{ + Powerup.Duration -40 + Inventory.Icon "SPINBK0" +} + +ACTOR PowerSpeed: Powerup native +{ + Powerup.Duration -45 + Speed 1.5 + Inventory.Icon "SPBOOT0" +} + +// Player Speed Trail (used by the Speed Powerup) ---------------------------- + +ACTOR PlayerSpeedTrail native +{ + +NOBLOCKMAP + +NOGRAVITY + Alpha 0.6 + RenderStyle Translucent +} + +ACTOR PowerMinotaur : Powerup native +{ + Powerup.Duration -25 + Inventory.Icon "SPMINO0" +} + +ACTOR PowerTargeter : Powerup native +{ + Powerup.Duration -160 + +INVENTORY.HUBPOWER + States + { + Targeter: + TRGT A -1 + Stop + TRGT B -1 + Stop + TRGT C -1 + Stop + } +} + +ACTOR PowerFrightener : Powerup native +{ + Powerup.Duration -60 +} + +ACTOR PowerScanner : Powerup native +{ + Powerup.Duration -80 + +INVENTORY.HUBPOWER +} + +ACTOR PowerTimeFreezer : Powerup native +{ + Powerup.Duration -12 +} + +ACTOR PowerDamage : Powerup native +{ + Powerup.Duration -25 +} + +ACTOR PowerProtection : Powerup native +{ + Powerup.Duration -25 +} + +ACTOR PowerDrain : Powerup native +{ + Powerup.Duration -60 +} + +ACTOR PowerRegeneration : Powerup native +{ + Powerup.Duration -120 +} + +ACTOR PowerHighJump : Powerup native +{ +} + +ACTOR PowerMorph : Powerup native +{ + Powerup.Duration -40 +} + +ACTOR MapRevealer : Inventory native +{ +} + +ACTOR PuzzleItem : Inventory native +{ + +NOGRAVITY + +INVENTORY.INVBAR + Inventory.DefMaxAmount + Inventory.UseSound "PuzzleSuccess" + Inventory.PickupSound "misc/i_pkup" +} + +Actor Weapon : Inventory native +{ + + Inventory.PickupSound "misc/w_pkup" + Weapon.DefaultKickback + States + { + LightDone: + SHTG E 0 A_Light0 + Stop + } +} + +ACTOR WeaponGiver : Weapon native +{ +} + +Actor WeaponHolder : Inventory native +{ + +NOBLOCKMAP + +NOSECTOR + +INVENTORY.UNDROPPABLE +} + +Actor WeaponPiece : Inventory native +{ +} + diff --git a/wadsrc/static/actors/shared/morph.txt b/wadsrc/static/actors/shared/morph.txt new file mode 100644 index 000000000..17b416f5e --- /dev/null +++ b/wadsrc/static/actors/shared/morph.txt @@ -0,0 +1,15 @@ +ACTOR MorphProjectile native +{ + Damage 1 + Projectile + -ACTIVATEIMPACT + -ACTIVATEPCROSS +} + +ACTOR MorphedMonster native +{ + Monster + -COUNTKILL + +FLOORCLIP +} + diff --git a/wadsrc/static/actors/shared/pickups.txt b/wadsrc/static/actors/shared/pickups.txt index 43e2d228b..d3a5bdd03 100644 --- a/wadsrc/static/actors/shared/pickups.txt +++ b/wadsrc/static/actors/shared/pickups.txt @@ -16,3 +16,16 @@ ACTOR ItemFog } } +// Pickup flash ------------------------------------------------------------- + +ACTOR PickupFlash +{ + +NOGRAVITY + States + { + Spawn: + ACLO DCDCBCBABA 3 + Stop + } +} + diff --git a/wadsrc/static/actors/shared/player.txt b/wadsrc/static/actors/shared/player.txt new file mode 100644 index 000000000..334648167 --- /dev/null +++ b/wadsrc/static/actors/shared/player.txt @@ -0,0 +1,43 @@ +Actor PlayerPawn : Actor native +{ + Health 100 + Radius 16 + Height 56 + Mass 100 + Painchance 255 + Speed 1 + +SOLID + +SHOOTABLE + +DROPOFF + +PICKUP + +NOTDMATCH + +FRIENDLY + +SLIDESONWALLS + +CANPASS + +CANPUSHWALLS + +FLOORCLIP + +WINDTHRUST + +TELESTOMP + +NOBLOCKMONST + Player.AttackZOffset 8 + Player.JumpZ 8 + Player.ViewHeight 41 + Player.ForwardMove 1,1 + Player.SideMove 1,1 + Player.ColorRange 0,0 + Player.SoundClass "player" +} + +Actor PlayerChunk : PlayerPawn native +{ + -SOLID + -SHOOTABLE + -PICKUP + -NOTDMATCH + -FRIENDLY + -SLIDESONWALLS + -CANPUSHWALLS + -FLOORCLIP + -WINDTHRUST + -TELESTOMP +} diff --git a/wadsrc/static/actors/shared/sharedmisc.txt b/wadsrc/static/actors/shared/sharedmisc.txt index ef5b997d6..2b0f5bd08 100644 --- a/wadsrc/static/actors/shared/sharedmisc.txt +++ b/wadsrc/static/actors/shared/sharedmisc.txt @@ -130,3 +130,13 @@ ACTOR SwitchingDecoration : SwitchableDecoration native { } +// Random spawner ----------------------------------------------------------- + +ACTOR RandomSpawner native +{ + +NOBLOCKMAP + +NOSECTOR + +NOGRAVITY +} + + diff --git a/wadsrc/static/decorate.txt b/wadsrc/static/decorate.txt index 31b4e5eda..ab1630414 100644 --- a/wadsrc/static/decorate.txt +++ b/wadsrc/static/decorate.txt @@ -1,6 +1,8 @@ #include "actors/nativeclasses.txt" #include "actors/constants.txt" +#include "actors/shared/player.txt" +#include "actors/shared/morph.txt" #include "actors/shared/botstuff.txt" #include "actors/shared/sharedmisc.txt" #include "actors/shared/blood.txt" @@ -81,10 +83,12 @@ #include "actors/heretic/dsparil.txt" #include "actors/heretic/chicken.txt" +#include "actors/hexen/baseweapons.txt" #include "actors/hexen/korax.txt" #include "actors/hexen/fighterplayer.txt" #include "actors/hexen/clericplayer.txt" #include "actors/hexen/mageplayer.txt" +#include "actors/hexen/pig.txt" #include "actors/hexen/flame.txt" #include "actors/hexen/hexenarmor.txt" #include "actors/hexen/hexendecorations.txt"