diff --git a/docs/rh-log.txt b/docs/rh-log.txt index bc7fb6a28..1b23d5d22 100644 --- a/docs/rh-log.txt +++ b/docs/rh-log.txt @@ -1,4 +1,7 @@ August 3, 2008 (Changes by Graf Zahl) +- Converted the Minotaur's projectiles to DECORATE so that I can get + rid of the AT_SPEED_SET code. +- Converted Heretic's Blaster and SkullRod to DECORATE. - Converted the mace and all related actors to DECORATE and generalized the spawn function that only spawns one mace per level. - Moved Mace respawning code into AInventory so that it works properly diff --git a/src/autosegs.h b/src/autosegs.h index 6ac990820..d33c66947 100644 --- a/src/autosegs.h +++ b/src/autosegs.h @@ -40,12 +40,10 @@ #define AREG_SECTION "__DATA,areg" #define CREG_SECTION "__DATA,creg" #define GREG_SECTION "__DATA,greg" -#define SREG_SECTION "__DATA,sreg" #else #define AREG_SECTION "areg" #define CREG_SECTION "creg" #define GREG_SECTION "greg" -#define SREG_SECTION "sreg" #endif #endif @@ -60,10 +58,6 @@ extern REGINFO ARegTail; extern REGINFO GRegHead; extern REGINFO GRegTail; -// List of AT_SPEED_SET functions -extern REGINFO SRegHead; -extern REGINFO SRegTail; - // List of TypeInfos extern REGINFO CRegHead; extern REGINFO CRegTail; diff --git a/src/autostart.cpp b/src/autostart.cpp index bff645929..0e845b918 100644 --- a/src/autostart.cpp +++ b/src/autostart.cpp @@ -46,7 +46,7 @@ #if defined(_MSC_VER) -#pragma comment(linker, "/merge:.areg=.data /merge:.creg=.data /merge:.greg=.data /merge:.sreg=.data /merge:.wreg=.data") +#pragma comment(linker, "/merge:.areg=.data /merge:.creg=.data /merge:.greg=.data /merge:.wreg=.data") #pragma data_seg(".areg$a") void *ARegHead = 0; @@ -57,9 +57,6 @@ void *CRegHead = 0; #pragma data_seg(".greg$a") void *GRegHead = 0; -#pragma data_seg(".sreg$a") -void *SRegHead = 0; - #pragma data_seg() // We want visual styles support under XP @@ -86,7 +83,6 @@ void *SRegHead = 0; void *ARegHead __attribute__((section(AREG_SECTION))) = 0; void *CRegHead __attribute__((section(CREG_SECTION))) = 0; void *GRegHead __attribute__((section(GREG_SECTION))) = 0; -void *SRegHead __attribute__((section(SREG_SECTION))) = 0; #elif diff --git a/src/autozend.cpp b/src/autozend.cpp index 1b8b134fc..560ef5e88 100644 --- a/src/autozend.cpp +++ b/src/autozend.cpp @@ -46,9 +46,6 @@ void *CRegTail = 0; #pragma data_seg(".greg$z") void *GRegTail = 0; -#pragma data_seg(".sreg$z") -void *SRegTail = 0; - #pragma data_seg() @@ -58,7 +55,6 @@ void *SRegTail = 0; void *ARegTail __attribute__((section(AREG_SECTION))) = 0; void *CRegTail __attribute__((section(CREG_SECTION))) = 0; void *GRegTail __attribute__((section(GREG_SECTION))) = 0; -void *SRegTail __attribute__((section(SREG_SECTION))) = 0; #elif diff --git a/src/codepointers.h b/src/codepointers.h index 2f54ce6f4..fa1dfe5b7 100644 --- a/src/codepointers.h +++ b/src/codepointers.h @@ -158,6 +158,14 @@ ACTOR(MacePL1Check) ACTOR(MaceBallImpact) ACTOR(MaceBallImpact2) ACTOR(DeathBallImpact) +ACTOR(FireBlasterPL1) +ACTOR(SpawnRippers) +ACTOR(FireSkullRodPL1) +ACTOR(AddPlayerRain) +ACTOR(HideInCeiling) +ACTOR(SkullRodStorm) +ACTOR(RainImpact) +ACTOR(MntrFloorFire) ACTOR(BatSpawnInit) diff --git a/src/g_heretic/a_hereticweaps.cpp b/src/g_heretic/a_hereticweaps.cpp index 444c8728a..529c63544 100644 --- a/src/g_heretic/a_hereticweaps.cpp +++ b/src/g_heretic/a_hereticweaps.cpp @@ -704,123 +704,17 @@ boom: } } -// --- Blaster (aka Claw) --------------------------------------------------- - -void A_FireBlasterPL1 (AActor *); -void A_FireBlasterPL2 (AActor *); -void A_SpawnRippers (AActor *); - -// Blaster ------------------------------------------------------------------ - -class ABlaster : public AHereticWeapon -{ - DECLARE_ACTOR (ABlaster, AHereticWeapon) -}; - -class ABlasterPowered : public ABlaster -{ - DECLARE_STATELESS_ACTOR (ABlasterPowered, ABlaster) -}; - -FState ABlaster::States[] = -{ -#define S_BLSR 0 - S_NORMAL (WBLS, 'A', -1, NULL , NULL), - -#define S_BLASTERREADY (S_BLSR+1) - S_NORMAL (BLSR, 'A', 1, A_WeaponReady , &States[S_BLASTERREADY]), - -#define S_BLASTERDOWN (S_BLASTERREADY+1) - S_NORMAL (BLSR, 'A', 1, A_Lower , &States[S_BLASTERDOWN]), - -#define S_BLASTERUP (S_BLASTERDOWN+1) - S_NORMAL (BLSR, 'A', 1, A_Raise , &States[S_BLASTERUP]), - -#define S_BLASTERATK1 (S_BLASTERUP+1) - S_NORMAL (BLSR, 'B', 3, NULL , &States[S_BLASTERATK1+1]), - S_NORMAL (BLSR, 'C', 3, NULL , &States[S_BLASTERATK1+2]), - S_NORMAL (BLSR, 'D', 2, A_FireBlasterPL1 , &States[S_BLASTERATK1+3]), - S_NORMAL (BLSR, 'C', 2, NULL , &States[S_BLASTERATK1+4]), - S_NORMAL (BLSR, 'B', 2, NULL , &States[S_BLASTERATK1+5]), - S_NORMAL (BLSR, 'A', 0, A_ReFire , &States[S_BLASTERREADY]), - -#define S_BLASTERATK2 (S_BLASTERATK1+6) - S_NORMAL (BLSR, 'B', 0, NULL , &States[S_BLASTERATK2+1]), - S_NORMAL (BLSR, 'C', 0, NULL , &States[S_BLASTERATK2+2]), - S_NORMAL (BLSR, 'D', 3, A_FireBlasterPL2 , &States[S_BLASTERATK2+3]), - S_NORMAL (BLSR, 'C', 4, NULL , &States[S_BLASTERATK2+4]), - S_NORMAL (BLSR, 'B', 4, NULL , &States[S_BLASTERATK2+5]), - S_NORMAL (BLSR, 'A', 0, A_ReFire , &States[S_BLASTERREADY]) -}; - -IMPLEMENT_ACTOR (ABlaster, Heretic, 53, 28) - PROP_Flags (MF_SPECIAL) - PROP_Flags5 (MF5_BLOODSPLATTER) - PROP_SpawnState (S_BLSR) - - PROP_Weapon_SelectionOrder (500) - PROP_Weapon_AmmoUse1 (USE_BLSR_AMMO_1) - PROP_Weapon_AmmoGive1 (30) - PROP_Weapon_UpState (S_BLASTERUP) - PROP_Weapon_DownState (S_BLASTERDOWN) - PROP_Weapon_ReadyState (S_BLASTERREADY) - PROP_Weapon_AtkState (S_BLASTERATK1) - PROP_Weapon_HoldAtkState (S_BLASTERATK1+2) - PROP_Weapon_YAdjust (15) - PROP_Weapon_MoveCombatDist (27000000) - PROP_Weapon_AmmoType1 ("BlasterAmmo") - PROP_Weapon_SisterType ("BlasterPowered") - PROP_Inventory_PickupMessage("$TXT_WPNBLASTER") -END_DEFAULTS - -IMPLEMENT_STATELESS_ACTOR (ABlasterPowered, Heretic, -1, 0) - PROP_Weapon_Flags (WIF_POWERED_UP) - PROP_Weapon_AmmoUse1 (USE_BLSR_AMMO_2) - PROP_Weapon_AmmoGive1 (0) - PROP_Weapon_AtkState (S_BLASTERATK2) - PROP_Weapon_HoldAtkState (S_BLASTERATK2+2) - PROP_Weapon_SisterType ("Blaster") - PROP_Weapon_ProjectileType ("BlasterFX1") -END_DEFAULTS // Blaster FX 1 ------------------------------------------------------------- class ABlasterFX1 : public AActor { - DECLARE_ACTOR (ABlasterFX1, AActor) + DECLARE_CLASS(ABlasterFX1, AActor) public: void Tick (); int DoSpecialDamage (AActor *target, int damage); }; -FState ABlasterFX1::States[] = -{ -#define S_BLASTERFX1 0 - S_NORMAL (ACLO, 'E', 200, NULL , &States[S_BLASTERFX1+0]), - -#define S_BLASTERFXI1 (S_BLASTERFX1+1) - S_BRIGHT (FX18, 'A', 3, A_SpawnRippers , &States[S_BLASTERFXI1+1]), - S_BRIGHT (FX18, 'B', 3, NULL , &States[S_BLASTERFXI1+2]), - S_BRIGHT (FX18, 'C', 4, NULL , &States[S_BLASTERFXI1+3]), - S_BRIGHT (FX18, 'D', 4, NULL , &States[S_BLASTERFXI1+4]), - S_BRIGHT (FX18, 'E', 4, NULL , &States[S_BLASTERFXI1+5]), - S_BRIGHT (FX18, 'F', 4, NULL , &States[S_BLASTERFXI1+6]), - S_BRIGHT (FX18, 'G', 4, NULL , NULL) -}; - -IMPLEMENT_ACTOR (ABlasterFX1, Heretic, -1, 0) - PROP_RadiusFixed (12) - PROP_HeightFixed (8) - PROP_SpeedFixed (184) - PROP_Damage (2) - PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY) - PROP_Flags2 (MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT) - - PROP_SpawnState (S_BLASTERFX1) - PROP_DeathState (S_BLASTERFXI1) - - PROP_DeathSound ("weapons/blasterhit") -END_DEFAULTS int ABlasterFX1::DoSpecialDamage (AActor *target, int damage) { @@ -835,69 +729,18 @@ int ABlasterFX1::DoSpecialDamage (AActor *target, int damage) return damage; } -// Blaster smoke ------------------------------------------------------------ - -class ABlasterSmoke : public AActor -{ - DECLARE_ACTOR (ABlasterSmoke, AActor) -}; - -FState ABlasterSmoke::States[] = -{ -#define S_BLASTERSMOKE 0 - S_NORMAL (FX18, 'H', 4, NULL , &States[S_BLASTERSMOKE+1]), - S_NORMAL (FX18, 'I', 4, NULL , &States[S_BLASTERSMOKE+2]), - S_NORMAL (FX18, 'J', 4, NULL , &States[S_BLASTERSMOKE+3]), - S_NORMAL (FX18, 'K', 4, NULL , &States[S_BLASTERSMOKE+4]), - S_NORMAL (FX18, 'L', 4, NULL , NULL) -}; - -IMPLEMENT_ACTOR (ABlasterSmoke, Heretic, -1, 0) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY) - PROP_Flags2 (MF2_NOTELEPORT|MF2_CANNOTPUSH) - PROP_RenderStyle (STYLE_Translucent) - PROP_Alpha (HR_SHADOW) - - PROP_SpawnState (S_BLASTERSMOKE) -END_DEFAULTS +IMPLEMENT_CLASS(ABlasterFX1) // Ripper ------------------------------------------------------------------- class ARipper : public AActor { - DECLARE_ACTOR (ARipper, AActor) + DECLARE_CLASS (ARipper, AActor) public: int DoSpecialDamage (AActor *target, int damage); }; -FState ARipper::States[] = -{ -#define S_RIPPER 0 - S_NORMAL (FX18, 'M', 4, NULL , &States[S_RIPPER+1]), - S_NORMAL (FX18, 'N', 5, NULL , &States[S_RIPPER+0]), - -#define S_RIPPERX (S_RIPPER+2) - S_BRIGHT (FX18, 'O', 4, NULL , &States[S_RIPPERX+1]), - S_BRIGHT (FX18, 'P', 4, NULL , &States[S_RIPPERX+2]), - S_BRIGHT (FX18, 'Q', 4, NULL , &States[S_RIPPERX+3]), - S_BRIGHT (FX18, 'R', 4, NULL , &States[S_RIPPERX+4]), - S_BRIGHT (FX18, 'S', 4, NULL , NULL) -}; - -IMPLEMENT_ACTOR (ARipper, Heretic, -1, 157) - PROP_RadiusFixed (8) - PROP_HeightFixed (6) - PROP_SpeedFixed (14) - PROP_Damage (1) - PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY) - PROP_Flags2 (MF2_NOTELEPORT|MF2_RIP|MF2_PCROSS|MF2_IMPACT) - PROP_Flags3 (MF3_WARNBOT) - - PROP_SpawnState (S_RIPPER) - PROP_DeathState (S_RIPPERX) - - PROP_DeathSound ("weapons/blasterpowhit") -END_DEFAULTS +IMPLEMENT_CLASS(ARipper) int ARipper::DoSpecialDamage (AActor *target, int damage) { @@ -912,41 +755,6 @@ int ARipper::DoSpecialDamage (AActor *target, int damage) return damage; } -// Blaster Puff ------------------------------------------------------------- - -class ABlasterPuff : public AActor -{ - DECLARE_ACTOR (ABlasterPuff, AActor) -}; - -FState ABlasterPuff::States[] = -{ -#define S_BLASTERPUFF1 0 - S_BRIGHT (FX17, 'A', 4, NULL , &States[S_BLASTERPUFF1+1]), - S_BRIGHT (FX17, 'B', 4, NULL , &States[S_BLASTERPUFF1+2]), - S_BRIGHT (FX17, 'C', 4, NULL , &States[S_BLASTERPUFF1+3]), - S_BRIGHT (FX17, 'D', 4, NULL , &States[S_BLASTERPUFF1+4]), - S_BRIGHT (FX17, 'E', 4, NULL , NULL), - -#define S_BLASTERPUFF2 (S_BLASTERPUFF1+5) - S_BRIGHT (FX17, 'F', 3, NULL , &States[S_BLASTERPUFF2+1]), - S_BRIGHT (FX17, 'G', 3, NULL , &States[S_BLASTERPUFF2+2]), - S_BRIGHT (FX17, 'H', 4, NULL , &States[S_BLASTERPUFF2+3]), - S_BRIGHT (FX17, 'I', 4, NULL , &States[S_BLASTERPUFF2+4]), - S_BRIGHT (FX17, 'J', 4, NULL , &States[S_BLASTERPUFF2+5]), - S_BRIGHT (FX17, 'K', 4, NULL , &States[S_BLASTERPUFF2+6]), - S_BRIGHT (FX17, 'L', 4, NULL , NULL) -}; - -IMPLEMENT_ACTOR (ABlasterPuff, Heretic, -1, 0) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY) - PROP_Flags3 (MF3_PUFFONACTORS) - PROP_RenderStyle (STYLE_Add) - - PROP_SpawnState (S_BLASTERPUFF2) - PROP_CrashState (S_BLASTERPUFF1) -END_DEFAULTS - //---------------------------------------------------------------------------- // // PROC A_FireBlasterPL1 @@ -977,36 +785,10 @@ void A_FireBlasterPL1 (AActor *actor) { angle += pr_fb1.Random2() << 18; } - P_LineAttack (actor, angle, PLAYERMISSILERANGE, pitch, damage, NAME_None, RUNTIME_CLASS(ABlasterPuff)); + P_LineAttack (actor, angle, PLAYERMISSILERANGE, pitch, damage, NAME_None, "BlasterPuff"); S_Sound (actor, CHAN_WEAPON, "weapons/blastershoot", 1, ATTN_NORM); } -//---------------------------------------------------------------------------- -// -// PROC A_FireBlasterPL2 -// -//---------------------------------------------------------------------------- - -void A_FireBlasterPL2 (AActor *actor) -{ - player_t *player; - - if (NULL == (player = actor->player)) - { - return; - } - - AWeapon *weapon = actor->player->ReadyWeapon; - if (weapon != NULL) - { - if (!weapon->DepleteAmmo (weapon->bAltFire)) - return; - } - P_SpawnPlayerMissile (actor, RUNTIME_CLASS(ABlasterFX1)); - S_Sound (actor, CHAN_WEAPON, "weapons/blastershoot", 1, ATTN_NORM); - -} - //---------------------------------------------------------------------------- // // PROC A_SpawnRippers @@ -1085,7 +867,7 @@ void ABlasterFX1::Tick () } if (changexy && (pr_bfx1t() < 64)) { - Spawn (x, y, MAX (z - 8 * FRACUNIT, floorz), ALLOW_REPLACE); + Spawn("BlasterSmoke", x, y, MAX (z - 8 * FRACUNIT, floorz), ALLOW_REPLACE); } } } @@ -1105,168 +887,17 @@ void ABlasterFX1::Tick () // --- Skull rod ------------------------------------------------------------ -void A_FireSkullRodPL1 (AActor *); -void A_FireSkullRodPL2 (AActor *); -void A_SkullRodPL2Seek (AActor *); -void A_AddPlayerRain (AActor *); -void A_HideInCeiling (AActor *); -void A_SkullRodStorm (AActor *); -void A_RainImpact (AActor *); - -// Skull (Horn) Rod --------------------------------------------------------- - -class ASkullRod : public AHereticWeapon -{ - DECLARE_ACTOR (ASkullRod, AHereticWeapon) -}; - -class ASkullRodPowered : public ASkullRod -{ - DECLARE_STATELESS_ACTOR (ASkullRodPowered, ASkullRod) -}; - -FState ASkullRod::States[] = -{ -#define S_WSKL 0 - S_NORMAL (WSKL, 'A', -1, NULL , NULL), - -#define S_HORNRODREADY (S_WSKL+1) - S_NORMAL (HROD, 'A', 1, A_WeaponReady , &States[S_HORNRODREADY]), - -#define S_HORNRODDOWN (S_HORNRODREADY+1) - S_NORMAL (HROD, 'A', 1, A_Lower , &States[S_HORNRODDOWN]), - -#define S_HORNRODUP (S_HORNRODDOWN+1) - S_NORMAL (HROD, 'A', 1, A_Raise , &States[S_HORNRODUP]), - -#define S_HORNRODATK1 (S_HORNRODUP+1) - S_NORMAL (HROD, 'A', 4, A_FireSkullRodPL1 , &States[S_HORNRODATK1+1]), - S_NORMAL (HROD, 'B', 4, A_FireSkullRodPL1 , &States[S_HORNRODATK1+2]), - S_NORMAL (HROD, 'B', 0, A_ReFire , &States[S_HORNRODREADY]), - -#define S_HORNRODATK2 (S_HORNRODATK1+3) - S_NORMAL (HROD, 'C', 2, NULL , &States[S_HORNRODATK2+1]), - S_NORMAL (HROD, 'D', 3, NULL , &States[S_HORNRODATK2+2]), - S_NORMAL (HROD, 'E', 2, NULL , &States[S_HORNRODATK2+3]), - S_NORMAL (HROD, 'F', 3, NULL , &States[S_HORNRODATK2+4]), - S_NORMAL (HROD, 'G', 4, A_FireSkullRodPL2 , &States[S_HORNRODATK2+5]), - S_NORMAL (HROD, 'F', 2, NULL , &States[S_HORNRODATK2+6]), - S_NORMAL (HROD, 'E', 3, NULL , &States[S_HORNRODATK2+7]), - S_NORMAL (HROD, 'D', 2, NULL , &States[S_HORNRODATK2+8]), - S_NORMAL (HROD, 'C', 2, A_ReFire , &States[S_HORNRODREADY]) -}; - -IMPLEMENT_ACTOR (ASkullRod, Heretic, 2004, 30) - PROP_Flags (MF_SPECIAL) - PROP_SpawnState (S_WSKL) - - PROP_Weapon_SelectionOrder (200) - PROP_Weapon_AmmoUse1 (USE_SKRD_AMMO_1) - PROP_Weapon_AmmoGive1 (50) - PROP_Weapon_UpState (S_HORNRODUP) - PROP_Weapon_DownState (S_HORNRODDOWN) - PROP_Weapon_ReadyState (S_HORNRODREADY) - PROP_Weapon_AtkState (S_HORNRODATK1) - PROP_Weapon_YAdjust (15) - PROP_Weapon_MoveCombatDist (27000000) - PROP_Weapon_AmmoType1 ("SkullRodAmmo") - PROP_Weapon_SisterType ("SkullRodPowered") - PROP_Weapon_ProjectileType ("HornRodFX1") - PROP_Inventory_PickupMessage("$TXT_WPNSKULLROD") -END_DEFAULTS - -IMPLEMENT_STATELESS_ACTOR (ASkullRodPowered, Heretic, -1, 0) - PROP_Weapon_Flags (WIF_POWERED_UP) - PROP_Weapon_AmmoUse1 (USE_SKRD_AMMO_2) - PROP_Weapon_AmmoGive1 (0) - PROP_Weapon_AtkState (S_HORNRODATK2) - PROP_Weapon_SisterType ("SkullRod") - PROP_Weapon_ProjectileType ("HornRodFX2") -END_DEFAULTS - -// Horn Rod FX 1 ------------------------------------------------------------ - -class AHornRodFX1 : public AActor -{ - DECLARE_ACTOR (AHornRodFX1, AActor) -}; - -FState AHornRodFX1::States[] = -{ -#define S_HRODFX1 0 - S_BRIGHT (FX00, 'A', 6, NULL , &States[S_HRODFX1+1]), - S_BRIGHT (FX00, 'B', 6, NULL , &States[S_HRODFX1+0]), - -#define S_HRODFXI1 (S_HRODFX1+2) - S_BRIGHT (FX00, 'H', 5, NULL , &States[S_HRODFXI1+1]), - S_BRIGHT (FX00, 'I', 5, NULL , &States[S_HRODFXI1+2]), - S_BRIGHT (FX00, 'J', 4, NULL , &States[S_HRODFXI1+3]), - S_BRIGHT (FX00, 'K', 4, NULL , &States[S_HRODFXI1+4]), - S_BRIGHT (FX00, 'L', 3, NULL , &States[S_HRODFXI1+5]), - S_BRIGHT (FX00, 'M', 3, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AHornRodFX1, Heretic, -1, 160) - PROP_RadiusFixed (12) - PROP_HeightFixed (8) - PROP_SpeedFixed (22) - PROP_Damage (3) - PROP_Flags (MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY) - PROP_Flags2 (MF2_WINDTHRUST|MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT) - PROP_Flags3 (MF3_WARNBOT) - PROP_RenderStyle (STYLE_Add) - - PROP_SpawnState (S_HRODFX1) - PROP_DeathState (S_HRODFXI1) - - PROP_SeeSound ("weapons/hornrodshoot") - PROP_DeathSound ("weapons/hornrodhit") -END_DEFAULTS // Horn Rod FX 2 ------------------------------------------------------------ class AHornRodFX2 : public AActor { - DECLARE_ACTOR (AHornRodFX2, AActor) + DECLARE_CLASS (AHornRodFX2, AActor) public: int DoSpecialDamage (AActor *target, int damage); }; -FState AHornRodFX2::States[] = -{ -#define S_HRODFX2 0 - S_BRIGHT (FX00, 'C', 3, NULL , &States[S_HRODFX2+1]), - S_BRIGHT (FX00, 'D', 3, A_SkullRodPL2Seek , &States[S_HRODFX2+2]), - S_BRIGHT (FX00, 'E', 3, NULL , &States[S_HRODFX2+3]), - S_BRIGHT (FX00, 'F', 3, A_SkullRodPL2Seek , &States[S_HRODFX2+0]), - -#define S_HRODFXI2 (S_HRODFX2+4) - S_BRIGHT (FX00, 'H', 5, A_AddPlayerRain , &States[S_HRODFXI2+1]), - S_BRIGHT (FX00, 'I', 5, NULL , &States[S_HRODFXI2+2]), - S_BRIGHT (FX00, 'J', 4, NULL , &States[S_HRODFXI2+3]), - S_BRIGHT (FX00, 'K', 3, NULL , &States[S_HRODFXI2+4]), - S_BRIGHT (FX00, 'L', 3, NULL , &States[S_HRODFXI2+5]), - S_BRIGHT (FX00, 'M', 3, NULL , &States[S_HRODFXI2+6]), - S_NORMAL (FX00, 'G', 1, A_HideInCeiling , &States[S_HRODFXI2+7]), - S_NORMAL (FX00, 'G', 1, A_SkullRodStorm , &States[S_HRODFXI2+7]) -}; - -IMPLEMENT_ACTOR (AHornRodFX2, Heretic, -1, 0) - PROP_RadiusFixed (12) - PROP_HeightFixed (8) - PROP_SpeedFixed (22) - PROP_Damage (10) - PROP_SpawnHealth (4*35) - PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY) - PROP_Flags2 (MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT) - PROP_RenderStyle (STYLE_Add) - - PROP_SpawnState (S_HRODFX2) - PROP_DeathState (S_HRODFXI2) - - PROP_SeeSound ("weapons/hornrodshoot") - PROP_DeathSound ("weapons/hornrodpowhit") -END_DEFAULTS +IMPLEMENT_CLASS (AHornRodFX2) int AHornRodFX2::DoSpecialDamage (AActor *target, int damage) { @@ -1282,41 +913,12 @@ int AHornRodFX2::DoSpecialDamage (AActor *target, int damage) class ARainPillar : public AActor { - DECLARE_ACTOR (ARainPillar, AActor) + DECLARE_CLASS (ARainPillar, AActor) public: int DoSpecialDamage (AActor *target, int damage); }; -FState ARainPillar::States[] = -{ -#define S_RAINPLR 0 - S_BRIGHT (FX22, 'A', -1, NULL , NULL), - -#define S_RAINPLRX (S_RAINPLR+1) - S_BRIGHT (FX22, 'B', 4, A_RainImpact , &States[S_RAINPLRX+1]), - S_BRIGHT (FX22, 'C', 4, NULL , &States[S_RAINPLRX+2]), - S_BRIGHT (FX22, 'D', 4, NULL , &States[S_RAINPLRX+3]), - S_BRIGHT (FX22, 'E', 4, NULL , &States[S_RAINPLRX+4]), - S_BRIGHT (FX22, 'F', 4, NULL , NULL), - -#define S_RAINAIRXPLR (S_RAINPLRX+5) - S_BRIGHT (FX22, 'G', 4, NULL , &States[S_RAINAIRXPLR+1]), - S_BRIGHT (FX22, 'H', 4, NULL , &States[S_RAINAIRXPLR+2]), - S_BRIGHT (FX22, 'I', 4, NULL , NULL), -}; - -IMPLEMENT_ACTOR (ARainPillar, Heretic, -1, 0) - PROP_RadiusFixed (5) - PROP_HeightFixed (12) - PROP_SpeedFixed (12) - PROP_Damage (5) - PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY) - PROP_Flags2 (MF2_NOTELEPORT) - PROP_RenderStyle (STYLE_Add) - - PROP_SpawnState (S_RAINPLR) - PROP_DeathState (S_RAINPLRX) -END_DEFAULTS +IMPLEMENT_CLASS (ARainPillar) int ARainPillar::DoSpecialDamage (AActor *target, int damage) { @@ -1331,16 +933,14 @@ int ARainPillar::DoSpecialDamage (AActor *target, int damage) class ARainTracker : public AInventory { - DECLARE_STATELESS_ACTOR (ARainTracker, AInventory) + DECLARE_CLASS (ARainTracker, AInventory) public: void Serialize (FArchive &arc); AActor *Rain1, *Rain2; }; -IMPLEMENT_STATELESS_ACTOR (ARainTracker, Any, -1, 0) - PROP_Inventory_FlagsSet (IF_UNDROPPABLE) -END_DEFAULTS - +IMPLEMENT_CLASS (ARainTracker) + void ARainTracker::Serialize (FArchive &arc) { Super::Serialize (arc); @@ -1369,7 +969,7 @@ void A_FireSkullRodPL1 (AActor *actor) if (!weapon->DepleteAmmo (weapon->bAltFire)) return; } - mo = P_SpawnPlayerMissile (actor, RUNTIME_CLASS(AHornRodFX1)); + mo = P_SpawnPlayerMissile (actor, PClass::FindClass("HornRodFX1")); // Randomize the first frame if (mo && pr_fsr1() > 128) { @@ -1551,7 +1151,7 @@ void A_RainImpact (AActor *actor) { if (actor->z > actor->floorz) { - actor->SetState (&ARainPillar::States[S_RAINAIRXPLR]); + actor->SetState (actor->FindState("NotFloor")); } else if (pr_impact() < 40) { diff --git a/src/g_level.cpp b/src/g_level.cpp index e36b1a8ac..a36c20840 100644 --- a/src/g_level.cpp +++ b/src/g_level.cpp @@ -1784,11 +1784,6 @@ void G_InitNew (const char *mapname, bool bTitleLevel) wantFast = !!G_SkillProperty(SKILLP_FastMonsters); GameSpeed = wantFast ? SPEED_Fast : SPEED_Normal; - if (oldSpeed != GameSpeed) - { - FActorInfo::StaticSpeedSet (); - } - if (!savegamerestore) { if (!netgame) diff --git a/src/g_raven/a_minotaur.cpp b/src/g_raven/a_minotaur.cpp index b9625a2fe..2ddb0ea5e 100644 --- a/src/g_raven/a_minotaur.cpp +++ b/src/g_raven/a_minotaur.cpp @@ -323,165 +323,6 @@ void AMinotaurFriend::NoBlockingSet () // Do not drop anything } -// Minotaur FX 1 ------------------------------------------------------------ - -class AMinotaurFX1 : public AActor -{ - DECLARE_ACTOR (AMinotaurFX1, AActor) -}; - -FState AMinotaurFX1::States[] = -{ -#define S_MNTRFX1 0 - S_BRIGHT (FX12, 'A', 6, NULL , &States[S_MNTRFX1+1]), - S_BRIGHT (FX12, 'B', 6, NULL , &States[S_MNTRFX1+0]), - -#define S_MNTRFXI1 (S_MNTRFX1+2) - S_BRIGHT (FX12, 'C', 5, NULL , &States[S_MNTRFXI1+1]), - S_BRIGHT (FX12, 'D', 5, NULL , &States[S_MNTRFXI1+2]), - S_BRIGHT (FX12, 'E', 5, NULL , &States[S_MNTRFXI1+3]), - S_BRIGHT (FX12, 'F', 5, NULL , &States[S_MNTRFXI1+4]), - S_BRIGHT (FX12, 'G', 5, NULL , &States[S_MNTRFXI1+5]), - S_BRIGHT (FX12, 'H', 5, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AMinotaurFX1, Raven, -1, 0) - PROP_RadiusFixed (10) - PROP_HeightFixed (6) - PROP_SpeedFixed (20) - PROP_Damage (3) - PROP_DamageType (NAME_Fire) - PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY) - PROP_Flags2 (MF2_NOTELEPORT) - PROP_RenderStyle (STYLE_Add) - - PROP_SpawnState (S_MNTRFX1) - PROP_DeathState (S_MNTRFXI1) -END_DEFAULTS - -AT_SPEED_SET (MinotaurFX1, speed) -{ - SimpleSpeedSetter (AMinotaurFX1, 20*FRACUNIT, 26*FRACUNIT, speed); -} - -// Minotaur FX 2 ------------------------------------------------------------ - -class AMinotaurFX2 : public AMinotaurFX1 -{ - DECLARE_ACTOR (AMinotaurFX2, AMinotaurFX1) -public: - void GetExplodeParms (int &damage, int &distance, bool &hurtSource) - { - damage = 24; - } -}; - -FState AMinotaurFX2::States[] = -{ -#define S_MNTRFX2 0 - S_NORMAL (FX13, 'A', 2, A_MntrFloorFire , &States[S_MNTRFX2+0]), - -#define S_MNTRFXI2 (S_MNTRFX2+1) - S_BRIGHT (FX13, 'I', 4, A_Explode , &States[S_MNTRFXI2+1]), - S_BRIGHT (FX13, 'J', 4, NULL , &States[S_MNTRFXI2+2]), - S_BRIGHT (FX13, 'K', 4, NULL , &States[S_MNTRFXI2+3]), - S_BRIGHT (FX13, 'L', 4, NULL , &States[S_MNTRFXI2+4]), - S_BRIGHT (FX13, 'M', 4, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AMinotaurFX2, Raven, -1, 0) - PROP_RadiusFixed (5) - PROP_HeightFixed (12) - PROP_SpeedFixed (14) - PROP_Damage (4) - PROP_Flags3 (MF3_FLOORHUGGER) - - PROP_SpawnState (S_MNTRFX2) - PROP_DeathState (S_MNTRFXI2) - - PROP_DeathSound ("minotaur/fx2hit") -END_DEFAULTS - -AT_SPEED_SET (MinotaurFX2, speed) -{ - SimpleSpeedSetter (AMinotaurFX2, 14*FRACUNIT, 20*FRACUNIT, speed); -} - -// Minotaur FX 3 ------------------------------------------------------------ - -class AMinotaurFX3 : public AMinotaurFX2 -{ - DECLARE_ACTOR (AMinotaurFX3, AMinotaurFX2) -public: - void GetExplodeParms (int &damage, int &distance, bool &hurtSource) - { - damage = 128; - } -}; - -FState AMinotaurFX3::States[] = -{ -#define S_MNTRFX3 0 - S_BRIGHT (FX13, 'D', 4, NULL , &States[S_MNTRFX3+1]), - S_BRIGHT (FX13, 'C', 4, NULL , &States[S_MNTRFX3+2]), - S_BRIGHT (FX13, 'B', 5, NULL , &States[S_MNTRFX3+3]), - S_BRIGHT (FX13, 'C', 5, NULL , &States[S_MNTRFX3+4]), - S_BRIGHT (FX13, 'D', 5, NULL , &States[S_MNTRFX3+5]), - S_BRIGHT (FX13, 'E', 5, NULL , &States[S_MNTRFX3+6]), - S_BRIGHT (FX13, 'F', 4, NULL , &States[S_MNTRFX3+7]), - S_BRIGHT (FX13, 'G', 4, NULL , &States[S_MNTRFX3+8]), - S_BRIGHT (FX13, 'H', 4, NULL , NULL) -}; - -IMPLEMENT_ACTOR (AMinotaurFX3, Raven, -1, 0) - PROP_RadiusFixed (8) - PROP_HeightFixed (16) - PROP_SpeedFixed (0) - - PROP_SpawnState (S_MNTRFX3) - - PROP_DeathSound ("minotaur/fx3hit") -END_DEFAULTS - -// Minotaur Smoke Exit ------------------------------------------------------ - -class AMinotaurSmokeExit : public AActor -{ - DECLARE_ACTOR (AMinotaurSmokeExit, AActor) -}; - -FState AMinotaurSmokeExit::States[] = -{ - S_NORMAL (MNSM, 'A', 3, NULL , &States[1]), - S_NORMAL (MNSM, 'B', 3, NULL , &States[2]), - S_NORMAL (MNSM, 'C', 3, NULL , &States[3]), - S_NORMAL (MNSM, 'D', 3, NULL , &States[4]), - S_NORMAL (MNSM, 'E', 3, NULL , &States[5]), - S_NORMAL (MNSM, 'F', 3, NULL , &States[6]), - S_NORMAL (MNSM, 'G', 3, NULL , &States[7]), - S_NORMAL (MNSM, 'H', 3, NULL , &States[8]), - S_NORMAL (MNSM, 'I', 3, NULL , &States[9]), - S_NORMAL (MNSM, 'J', 3, NULL , &States[10]), - S_NORMAL (MNSM, 'I', 3, NULL , &States[11]), - S_NORMAL (MNSM, 'H', 3, NULL , &States[12]), - S_NORMAL (MNSM, 'G', 3, NULL , &States[13]), - S_NORMAL (MNSM, 'F', 3, NULL , &States[14]), - S_NORMAL (MNSM, 'E', 3, NULL , &States[15]), - S_NORMAL (MNSM, 'D', 3, NULL , &States[16]), - S_NORMAL (MNSM, 'C', 3, NULL , &States[17]), - S_NORMAL (MNSM, 'B', 3, NULL , &States[18]), - S_NORMAL (MNSM, 'A', 3, NULL , NULL), -}; - -IMPLEMENT_ACTOR (AMinotaurSmokeExit, Hexen, -1, 0) - PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY) - PROP_Flags2 (MF2_NOTELEPORT) - PROP_RenderStyle (STYLE_Translucent) - PROP_Alpha (HX_SHADOW) - - PROP_SpawnState (0) -END_DEFAULTS - // Action functions for the minotaur ---------------------------------------- //---------------------------------------------------------------------------- @@ -641,16 +482,20 @@ void A_MinotaurAtk2 (AActor *actor) return; } z = actor->z + 40*FRACUNIT; - mo = P_SpawnMissileZ (actor, z, actor->target, RUNTIME_CLASS(AMinotaurFX1)); - if (mo != NULL) + const PClass *fx = PClass::FindClass("MinotaurFX1"); + if (fx) { -// S_Sound (mo, CHAN_WEAPON, "minotaur/attack2", 1, ATTN_NORM); - momz = mo->momz; - angle = mo->angle; - P_SpawnMissileAngleZ (actor, z, RUNTIME_CLASS(AMinotaurFX1), angle-(ANG45/8), momz); - P_SpawnMissileAngleZ (actor, z, RUNTIME_CLASS(AMinotaurFX1), angle+(ANG45/8), momz); - P_SpawnMissileAngleZ (actor, z, RUNTIME_CLASS(AMinotaurFX1), angle-(ANG45/16), momz); - P_SpawnMissileAngleZ (actor, z, RUNTIME_CLASS(AMinotaurFX1), angle+(ANG45/16), momz); + mo = P_SpawnMissileZ (actor, z, actor->target, fx); + if (mo != NULL) + { +// S_Sound (mo, CHAN_WEAPON, "minotaur/attack2", 1, ATTN_NORM); + momz = mo->momz; + angle = mo->angle; + P_SpawnMissileAngleZ (actor, z, fx, angle-(ANG45/8), momz); + P_SpawnMissileAngleZ (actor, z, fx, angle+(ANG45/8), momz); + P_SpawnMissileAngleZ (actor, z, fx, angle-(ANG45/16), momz); + P_SpawnMissileAngleZ (actor, z, fx, angle+(ANG45/16), momz); + } } } @@ -688,7 +533,7 @@ void A_MinotaurAtk3 (AActor *actor) } else { - mo = P_SpawnMissile (actor, actor->target, RUNTIME_CLASS(AMinotaurFX2)); + mo = P_SpawnMissile (actor, actor->target, PClass::FindClass("MinotaurFX2")); if (mo != NULL) { S_Sound (mo, CHAN_WEAPON, "minotaur/attack1", 1, ATTN_NORM); @@ -715,7 +560,7 @@ void A_MntrFloorFire (AActor *actor) actor->z = actor->floorz; x = actor->x + (pr_fire.Random2 () << 10); y = actor->y + (pr_fire.Random2 () << 10); - mo = Spawn (x, y, ONFLOORZ, ALLOW_REPLACE); + mo = Spawn("MinotaurFX3", x, y, ONFLOORZ, ALLOW_REPLACE); mo->target = actor->target; mo->momx = 1; // Force block checking P_CheckMissileSpawn (mo); @@ -967,5 +812,5 @@ void A_SmokePuffEntry(mobj_t *actor) void A_SmokePuffExit (AActor *actor) { - Spawn (actor->x, actor->y, actor->z, ALLOW_REPLACE); + Spawn("MinotaurSmokeExit", actor->x, actor->y, actor->z, ALLOW_REPLACE); } diff --git a/src/info.cpp b/src/info.cpp index c3cff54f2..32d1f80c6 100644 --- a/src/info.cpp +++ b/src/info.cpp @@ -342,22 +342,6 @@ void FActorInfo::RegisterIDs () } } -//========================================================================== -// -// Called when a new game is started, but only if the game -// speed has changed. -// -//========================================================================== - -void FActorInfo::StaticSpeedSet () -{ - TAutoSegIteratorNoArrow setters; - while (++setters != NULL) - { - ((void (*)(int))setters) (GameSpeed); - } -} - //========================================================================== // // diff --git a/src/info.h b/src/info.h index 48cfc4605..6b565765e 100644 --- a/src/info.h +++ b/src/info.h @@ -387,7 +387,6 @@ struct FActorInfo static void StaticInit (); static void StaticGameSet (); static void StaticSetActorNums (); - static void StaticSpeedSet (); void BuildDefaults (); void ApplyDefaults (BYTE *defaults); diff --git a/src/infomacros.h b/src/infomacros.h index 18680ebbd..ff7b7e15c 100644 --- a/src/infomacros.h +++ b/src/infomacros.h @@ -69,7 +69,6 @@ typedef void (*voidfunc_)(); #pragma data_seg(".areg$u") // ActorInfo initializer list #pragma data_seg(".greg$u") // AT_GAME_SET list -#pragma data_seg(".sreg$u") // AT_SPEED_SET list #pragma data_seg() #define DOOMEDNUMOF(actor) actor##ActorInfo.DoomEdNum @@ -104,12 +103,6 @@ typedef void (*voidfunc_)(); __declspec(allocate(".greg$u")) voidfunc_ ns##_gsr = ns##_gs; \ void ns##_gs () -// Define a function that gets called when the speed is changed. -#define AT_SPEED_SET(ns,varname) \ - extern void ns##_ss(EGameSpeed); \ - __declspec(allocate(".sreg$u")) void (*ns##_gsr)(EGameSpeed) = ns##_ss; \ - void ns##_ss (EGameSpeed varname) - #else /*********************************************** @@ -151,11 +144,6 @@ extern void ApplyActorDefault (int defnum, int dataint); //typedef void (*speedfunc)(EGameSpeed); -#define AT_SPEED_SET(ns,varname) \ - extern void ns##_ss(EGameSpeed); \ - void (*ns##_gsr)(EGameSpeed) __attribute__((section(SREG_SECTION))) = ns##_ss; \ - void ns##_ss (EGameSpeed varname) - #endif // Common macros diff --git a/wadsrc/static/actors/heretic/hereticweaps.txt b/wadsrc/static/actors/heretic/hereticweaps.txt index f3c7056fa..70ca3a494 100644 --- a/wadsrc/static/actors/heretic/hereticweaps.txt +++ b/wadsrc/static/actors/heretic/hereticweaps.txt @@ -658,3 +658,320 @@ ACTOR MaceSpawner : SpecialSpot 2002 } } + +// Blaster ------------------------------------------------------------------ + +ACTOR Blaster : Weapon 53 +{ + Game Heretic + SpawnID 28 + +BLOODSPLATTER + Weapon.SelectionOrder 500 + Weapon.AmmoUse 1 + Weapon.AmmoGive 30 + Weapon.YAdjust 15 + Weapon.AmmoType "BlasterAmmo" + Weapon.SisterWeapon "BlasterPowered" + Inventory.PickupMessage "$TxT_WPNBLASTER" + + action native A_FireBlasterPL1(); + + States + { + Spawn: + WBLS A -1 + Stop + Ready: + BLSR A 1 A_WeaponReady + Loop + Deselect: + BLSR A 1 A_Lower + Loop + Select: + BLSR A 1 A_Raise + Loop + Fire: + BLSR BC 3 + Hold: + BLSR D 2 A_FireBlasterPL1 + BLSR CB 2 + BLSR A 0 A_ReFire + Goto Ready + } +} + +ACTOR BlasterPowered : Blaster +{ + +WEAPON.POWERED_UP + Weapon.AmmoUse 5 + Weapon.AmmoGive 0 + Weapon.SisterWeapon "Blaster" + States + { + Fire: + BLSR BC 0 + Hold: + BLSR D 3 A_FireCustomMissile("BlasterFX1") + BLSR CB 4 + BLSR A 0 A_ReFire + Goto Ready + } +} + +// Blaster FX 1 ------------------------------------------------------------- + +ACTOR BlasterFX1 native +{ + Radius 12 + Height 8 + Speed 184 + Damage 2 + Projectile + SeeSound "weapons/blastershoot" + DeathSound "weapons/blasterhit" + +SPAWNSOUNDSOURCE + + action native A_SpawnRippers(); + + States + { + Spawn: + ACLO E 200 + Loop + Death: + FX18 A 3 BRIGHT A_SpawnRippers + FX18 BCDEFG 4 BRIGHT + Stop + } +} + +// Blaster smoke ------------------------------------------------------------ + +ACTOR BlasterSmoke +{ + +NOBLOCKMAP + +NOGRAVITY + +NOTELEPORT + +CANNOTPUSH + RenderStyle Translucent + Alpha 0.4 + States + { + Spawn: + FX18 HIJKL 4 + Stop + } +} + +// Ripper ------------------------------------------------------------------- + +ACTOR Ripper native +{ + Game Heretic + SpawnID 157 + Radius 8 + Height 6 + Speed 14 + Damage 1 + Projectile + +RIPPER + DeathSound "weapons/blasterpowhit" + States + { + Spawn: + FX18 M 4 + FX18 N 5 + Loop + Death: + FX18 OPQRS 4 BRIGHT + Stop + } +} + +// Blaster Puff ------------------------------------------------------------- + +ACTOR BlasterPuff +{ + +NOBLOCKMAP + +NOGRAVITY + +PUFFONACTORS + +NOTELEPORT + RenderStyle Add + States + { + Crash: + FX17 ABCDE 4 BRIGHT + Stop + Spawn: + FX17 FG 3 BRIGHT + FX17 HIJKL 4 BRIGHT + Stop + } +} + + +// Skull (Horn) Rod --------------------------------------------------------- + +ACTOR SkullRod : Weapon 2004 +{ + Game Heretic + SpawnID 30 + Weapon.SelectionOrder 200 + Weapon.AmmoUse1 1 + Weapon.AmmoGive1 50 + Weapon.YAdjust 15 + Weapon.AmmoType1 "SkullRodAmmo" + Weapon.SisterWeapon "SkullRodPowered" + Inventory.PickupMessage "$TxT_WPNSKULLROD" + + action native A_FireSkullRodPL1(); + + States + { + Spawn: + WSKL A -1 + Stop + Ready: + HROD A 1 A_WeaponReady + Loop + Deselect: + HROD A 1 A_Lower + Loop + Select: + HROD A 1 A_Raise + Loop + Fire: + HROD AB 4 A_FireSkullRodPL1 + HROD B 0 A_ReFire + Goto Ready + } +} + +ACTOR SkullRodPowered : SkullRod +{ + +WEAPON.POWERED_UP + Weapon.AmmoUse1 5 + Weapon.AmmoGive1 0 + Weapon.SisterWeapon "SkullRod" + States + { + Fire: + HROD C 2 + HROD D 3 + HROD E 2 + HROD F 3 + HROD G 4 A_FireCustomMissile("HornRodFX2") + HROD F 2 + HROD E 3 + HROD D 2 + HROD C 2 A_ReFire + Goto Ready + } +} + +// Horn Rod FX 1 ------------------------------------------------------------ + +ACTOR HornRodFX1 +{ + Game Heretic + SpawnID 160 + Radius 12 + Height 8 + Speed 22 + Damage 3 + Projectile + +WINDTHRUST + -NOBLOCKMAP + RenderStyle Add + SeeSound "weapons/hornrodshoot" + DeathSound "weapons/hornrodhit" + States + { + Spawn: + FX00 AB 6 BRIGHT + Loop + Death: + FX00 HI 5 BRIGHT + FX00 JK 4 BRIGHT + FX00 LM 3 BRIGHT + Stop + } +} + + +// Horn Rod FX 2 ------------------------------------------------------------ + +ACTOR HornRodFX2 native +{ + Radius 12 + Height 8 + Speed 22 + Damage 10 + Health 140 + Projectile + RenderStyle Add + SeeSound "weapons/hornrodpowshoot" + DeathSound "weapons/hornrodpowhit" + + action native A_AddPlayerRain(); + action native A_HideInCeiling(); + action native A_SkullRodStorm(); + + States + { + Spawn: + FX00 C 3 BRIGHT + FX00 D 3 BRIGHT A_SeekerMissile(10, 30) + FX00 E 3 BRIGHT + FX00 F 3 BRIGHT A_SeekerMissile(10, 30) + Loop + Death: + FX00 H 5 BRIGHT A_AddPlayerRain + FX00 I 5 BRIGHT + FX00 JK 4 BRIGHT + FX00 LM 3 BRIGHT + FX00 G 1 A_HideInCeiling + FX00 G 1 A_SkullRodStorm + Wait + } +} + +// Rain pillar 1 ------------------------------------------------------------ + +ACTOR RainPillar native +{ + Radius 5 + Height 12 + Speed 12 + Damage 5 + Mass 5 + Projectile + -ACTIVATEPCROSS + -ACTIVATEIMPACT + RenderStyle Add + + action native A_RainImpact(); + + States + { + Spawn: + FX22 A -1 BRIGHT + Stop + Death: + FX22 B 4 BRIGHT A_RainImpact + FX22 CDEF 4 BRIGHT + Stop + NotFloor: + FX22 GHI 4 BRIGHT + Stop + } +} + +// Rain tracker "inventory" item -------------------------------------------- + +ACTOR RainTracker : Inventory native +{ + +INVENTORY.UNDROPPABLE +} + + diff --git a/wadsrc/static/actors/hexen/clericflame.txt b/wadsrc/static/actors/hexen/clericflame.txt index e8ace5e97..bfb6cd732 100644 --- a/wadsrc/static/actors/hexen/clericflame.txt +++ b/wadsrc/static/actors/hexen/clericflame.txt @@ -3,6 +3,7 @@ ACTOR CWeapFlame : ClericWeapon 8009 { + Game Hexen +NOGRAVITY Weapon.SelectionOrder 1000 Weapon.AmmoUse 4 @@ -45,7 +46,6 @@ ACTOR CWeapFlame : ClericWeapon 8009 ACTOR CFlameFloor { - Game Hexen +NOBLOCKMAP +NOGRAVITY RenderStyle Add States @@ -62,7 +62,6 @@ ACTOR CFlameFloor ACTOR FlamePuff { - Game Hexen Radius 1 Height 1 +NOBLOCKMAP +NOGRAVITY diff --git a/wadsrc/static/actors/hexen/firedemon.txt b/wadsrc/static/actors/hexen/firedemon.txt index 855bfc747..550c5ec95 100644 --- a/wadsrc/static/actors/hexen/firedemon.txt +++ b/wadsrc/static/actors/hexen/firedemon.txt @@ -220,8 +220,6 @@ ACTOR FireDemonMissile Damage 1 DamageType "Fire" Projectile - +FLOORCLIP - -BLOODSPLATTER RenderStyle Add DeathSound "FireDemonMissileHit" States diff --git a/wadsrc/static/actors/raven/minotaur.txt b/wadsrc/static/actors/raven/minotaur.txt new file mode 100644 index 000000000..04ddb3163 --- /dev/null +++ b/wadsrc/static/actors/raven/minotaur.txt @@ -0,0 +1,88 @@ +// Minotaur FX 1 ------------------------------------------------------------ + +ACTOR MinotaurFX1 +{ + Radius 10 + Height 6 + Speed 20 + FastSpeed 26 + Damage 3 + DamageType Fire + Projectile + -ACTIVATEIMPACT + -ACTIVATEPCROSS + RenderStyle Add + States + { + Spawn: + FX12 AB 6 Bright + Loop + Death: + FX12 CDEFGH 5 Bright + Stop + } +} + + +// Minotaur FX 2 ------------------------------------------------------------ + +ACTOR MinotaurFX2 : MinotaurFX1 +{ + Radius 5 + Height 12 + Speed 14 + FastSpeed 20 + Damage 4 + +FLOORHUGGER + ExplosionDamage 24 + DeathSound "minotaur/fx2hit" + + action native A_MntrFloorFire(); + + states + { + Spawn: + FX13 A 2 Bright A_MntrFloorFire + Loop + Death: + FX13 I 4 Bright A_Explode + FX13 JKLM 4 Bright + Stop + } +} + +// Minotaur FX 3 ------------------------------------------------------------ + +ACTOR MinotaurFX3 : MinotaurFX2 +{ + Radius 8 + Height 16 + Speed 0 + DeathSound "minotaur/fx3hit" + ExplosionDamage 128 + States + { + Spawn: + FX13 DC 4 Bright + FX13 BCDE 5 Bright + FX13 FGH 4 Bright + Stop + } +} + +// Minotaur Smoke Exit ------------------------------------------------------ + +ACTOR MinotaurSmokeExit +{ + +NOBLOCKMAP + +NOTELEPORT + RenderStyle Translucent + Alpha 0.4 + States + { + Spawn: + MNSM ABCDEFGHIJIHGFEDCBA 3 + Stop + } +} + diff --git a/wadsrc/static/actors/raven/ravenartifacts.txt b/wadsrc/static/actors/raven/ravenartifacts.txt index 77149f854..4f95be8f1 100644 --- a/wadsrc/static/actors/raven/ravenartifacts.txt +++ b/wadsrc/static/actors/raven/ravenartifacts.txt @@ -75,6 +75,7 @@ ACTOR ArtiInvulnerability : PowerupGiver 84 +FLOATBOB +INVENTORY.PICKUPFLASH Inventory.RespawnTics 4230 + Inventory.Icon ARTIINVU Inventory.PickupMessage "$TXT_ARTIINVULNERABILITY" Powerup.Type Invulnerable Powerup.Color GoldMap diff --git a/wadsrc/static/decorate.txt b/wadsrc/static/decorate.txt index 6d1110528..0ecfa4257 100644 --- a/wadsrc/static/decorate.txt +++ b/wadsrc/static/decorate.txt @@ -44,6 +44,7 @@ #include "actors/raven/ravenartifacts.txt" #include "actors/raven/ravenhealth.txt" #include "actors/raven/ravenambient.txt" +#include "actors/raven/minotaur.txt" #include "actors/heretic/hereticplayer.txt" #include "actors/heretic/hereticammo.txt"