- 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.


SVN r1109 (trunk)
This commit is contained in:
Christoph Oelckers 2008-08-04 19:25:13 +00:00
parent cc99d150a3
commit b2a6bed19f
17 changed files with 451 additions and 639 deletions

View file

@ -1,4 +1,7 @@
August 3, 2008 (Changes by Graf Zahl) 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 - Converted the mace and all related actors to DECORATE and generalized
the spawn function that only spawns one mace per level. the spawn function that only spawns one mace per level.
- Moved Mace respawning code into AInventory so that it works properly - Moved Mace respawning code into AInventory so that it works properly

View file

@ -40,12 +40,10 @@
#define AREG_SECTION "__DATA,areg" #define AREG_SECTION "__DATA,areg"
#define CREG_SECTION "__DATA,creg" #define CREG_SECTION "__DATA,creg"
#define GREG_SECTION "__DATA,greg" #define GREG_SECTION "__DATA,greg"
#define SREG_SECTION "__DATA,sreg"
#else #else
#define AREG_SECTION "areg" #define AREG_SECTION "areg"
#define CREG_SECTION "creg" #define CREG_SECTION "creg"
#define GREG_SECTION "greg" #define GREG_SECTION "greg"
#define SREG_SECTION "sreg"
#endif #endif
#endif #endif
@ -60,10 +58,6 @@ extern REGINFO ARegTail;
extern REGINFO GRegHead; extern REGINFO GRegHead;
extern REGINFO GRegTail; extern REGINFO GRegTail;
// List of AT_SPEED_SET functions
extern REGINFO SRegHead;
extern REGINFO SRegTail;
// List of TypeInfos // List of TypeInfos
extern REGINFO CRegHead; extern REGINFO CRegHead;
extern REGINFO CRegTail; extern REGINFO CRegTail;

View file

@ -46,7 +46,7 @@
#if defined(_MSC_VER) #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") #pragma data_seg(".areg$a")
void *ARegHead = 0; void *ARegHead = 0;
@ -57,9 +57,6 @@ void *CRegHead = 0;
#pragma data_seg(".greg$a") #pragma data_seg(".greg$a")
void *GRegHead = 0; void *GRegHead = 0;
#pragma data_seg(".sreg$a")
void *SRegHead = 0;
#pragma data_seg() #pragma data_seg()
// We want visual styles support under XP // We want visual styles support under XP
@ -86,7 +83,6 @@ void *SRegHead = 0;
void *ARegHead __attribute__((section(AREG_SECTION))) = 0; void *ARegHead __attribute__((section(AREG_SECTION))) = 0;
void *CRegHead __attribute__((section(CREG_SECTION))) = 0; void *CRegHead __attribute__((section(CREG_SECTION))) = 0;
void *GRegHead __attribute__((section(GREG_SECTION))) = 0; void *GRegHead __attribute__((section(GREG_SECTION))) = 0;
void *SRegHead __attribute__((section(SREG_SECTION))) = 0;
#elif #elif

View file

@ -46,9 +46,6 @@ void *CRegTail = 0;
#pragma data_seg(".greg$z") #pragma data_seg(".greg$z")
void *GRegTail = 0; void *GRegTail = 0;
#pragma data_seg(".sreg$z")
void *SRegTail = 0;
#pragma data_seg() #pragma data_seg()
@ -58,7 +55,6 @@ void *SRegTail = 0;
void *ARegTail __attribute__((section(AREG_SECTION))) = 0; void *ARegTail __attribute__((section(AREG_SECTION))) = 0;
void *CRegTail __attribute__((section(CREG_SECTION))) = 0; void *CRegTail __attribute__((section(CREG_SECTION))) = 0;
void *GRegTail __attribute__((section(GREG_SECTION))) = 0; void *GRegTail __attribute__((section(GREG_SECTION))) = 0;
void *SRegTail __attribute__((section(SREG_SECTION))) = 0;
#elif #elif

View file

@ -158,6 +158,14 @@ ACTOR(MacePL1Check)
ACTOR(MaceBallImpact) ACTOR(MaceBallImpact)
ACTOR(MaceBallImpact2) ACTOR(MaceBallImpact2)
ACTOR(DeathBallImpact) ACTOR(DeathBallImpact)
ACTOR(FireBlasterPL1)
ACTOR(SpawnRippers)
ACTOR(FireSkullRodPL1)
ACTOR(AddPlayerRain)
ACTOR(HideInCeiling)
ACTOR(SkullRodStorm)
ACTOR(RainImpact)
ACTOR(MntrFloorFire)
ACTOR(BatSpawnInit) ACTOR(BatSpawnInit)

View file

@ -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 ------------------------------------------------------------- // Blaster FX 1 -------------------------------------------------------------
class ABlasterFX1 : public AActor class ABlasterFX1 : public AActor
{ {
DECLARE_ACTOR (ABlasterFX1, AActor) DECLARE_CLASS(ABlasterFX1, AActor)
public: public:
void Tick (); void Tick ();
int DoSpecialDamage (AActor *target, int damage); 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) int ABlasterFX1::DoSpecialDamage (AActor *target, int damage)
{ {
@ -835,69 +729,18 @@ int ABlasterFX1::DoSpecialDamage (AActor *target, int damage)
return damage; return damage;
} }
// Blaster smoke ------------------------------------------------------------ IMPLEMENT_CLASS(ABlasterFX1)
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
// Ripper ------------------------------------------------------------------- // Ripper -------------------------------------------------------------------
class ARipper : public AActor class ARipper : public AActor
{ {
DECLARE_ACTOR (ARipper, AActor) DECLARE_CLASS (ARipper, AActor)
public: public:
int DoSpecialDamage (AActor *target, int damage); int DoSpecialDamage (AActor *target, int damage);
}; };
FState ARipper::States[] = IMPLEMENT_CLASS(ARipper)
{
#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
int ARipper::DoSpecialDamage (AActor *target, int damage) int ARipper::DoSpecialDamage (AActor *target, int damage)
{ {
@ -912,41 +755,6 @@ int ARipper::DoSpecialDamage (AActor *target, int damage)
return 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 // PROC A_FireBlasterPL1
@ -977,36 +785,10 @@ void A_FireBlasterPL1 (AActor *actor)
{ {
angle += pr_fb1.Random2() << 18; 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); 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 // PROC A_SpawnRippers
@ -1085,7 +867,7 @@ void ABlasterFX1::Tick ()
} }
if (changexy && (pr_bfx1t() < 64)) if (changexy && (pr_bfx1t() < 64))
{ {
Spawn<ABlasterSmoke> (x, y, MAX<fixed_t> (z - 8 * FRACUNIT, floorz), ALLOW_REPLACE); Spawn("BlasterSmoke", x, y, MAX<fixed_t> (z - 8 * FRACUNIT, floorz), ALLOW_REPLACE);
} }
} }
} }
@ -1105,168 +887,17 @@ void ABlasterFX1::Tick ()
// --- Skull rod ------------------------------------------------------------ // --- 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 ------------------------------------------------------------ // Horn Rod FX 2 ------------------------------------------------------------
class AHornRodFX2 : public AActor class AHornRodFX2 : public AActor
{ {
DECLARE_ACTOR (AHornRodFX2, AActor) DECLARE_CLASS (AHornRodFX2, AActor)
public: public:
int DoSpecialDamage (AActor *target, int damage); int DoSpecialDamage (AActor *target, int damage);
}; };
FState AHornRodFX2::States[] = IMPLEMENT_CLASS (AHornRodFX2)
{
#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
int AHornRodFX2::DoSpecialDamage (AActor *target, int damage) int AHornRodFX2::DoSpecialDamage (AActor *target, int damage)
{ {
@ -1282,41 +913,12 @@ int AHornRodFX2::DoSpecialDamage (AActor *target, int damage)
class ARainPillar : public AActor class ARainPillar : public AActor
{ {
DECLARE_ACTOR (ARainPillar, AActor) DECLARE_CLASS (ARainPillar, AActor)
public: public:
int DoSpecialDamage (AActor *target, int damage); int DoSpecialDamage (AActor *target, int damage);
}; };
FState ARainPillar::States[] = IMPLEMENT_CLASS (ARainPillar)
{
#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
int ARainPillar::DoSpecialDamage (AActor *target, int damage) int ARainPillar::DoSpecialDamage (AActor *target, int damage)
{ {
@ -1331,15 +933,13 @@ int ARainPillar::DoSpecialDamage (AActor *target, int damage)
class ARainTracker : public AInventory class ARainTracker : public AInventory
{ {
DECLARE_STATELESS_ACTOR (ARainTracker, AInventory) DECLARE_CLASS (ARainTracker, AInventory)
public: public:
void Serialize (FArchive &arc); void Serialize (FArchive &arc);
AActor *Rain1, *Rain2; AActor *Rain1, *Rain2;
}; };
IMPLEMENT_STATELESS_ACTOR (ARainTracker, Any, -1, 0) IMPLEMENT_CLASS (ARainTracker)
PROP_Inventory_FlagsSet (IF_UNDROPPABLE)
END_DEFAULTS
void ARainTracker::Serialize (FArchive &arc) void ARainTracker::Serialize (FArchive &arc)
{ {
@ -1369,7 +969,7 @@ void A_FireSkullRodPL1 (AActor *actor)
if (!weapon->DepleteAmmo (weapon->bAltFire)) if (!weapon->DepleteAmmo (weapon->bAltFire))
return; return;
} }
mo = P_SpawnPlayerMissile (actor, RUNTIME_CLASS(AHornRodFX1)); mo = P_SpawnPlayerMissile (actor, PClass::FindClass("HornRodFX1"));
// Randomize the first frame // Randomize the first frame
if (mo && pr_fsr1() > 128) if (mo && pr_fsr1() > 128)
{ {
@ -1551,7 +1151,7 @@ void A_RainImpact (AActor *actor)
{ {
if (actor->z > actor->floorz) if (actor->z > actor->floorz)
{ {
actor->SetState (&ARainPillar::States[S_RAINAIRXPLR]); actor->SetState (actor->FindState("NotFloor"));
} }
else if (pr_impact() < 40) else if (pr_impact() < 40)
{ {

View file

@ -1784,11 +1784,6 @@ void G_InitNew (const char *mapname, bool bTitleLevel)
wantFast = !!G_SkillProperty(SKILLP_FastMonsters); wantFast = !!G_SkillProperty(SKILLP_FastMonsters);
GameSpeed = wantFast ? SPEED_Fast : SPEED_Normal; GameSpeed = wantFast ? SPEED_Fast : SPEED_Normal;
if (oldSpeed != GameSpeed)
{
FActorInfo::StaticSpeedSet ();
}
if (!savegamerestore) if (!savegamerestore)
{ {
if (!netgame) if (!netgame)

View file

@ -323,165 +323,6 @@ void AMinotaurFriend::NoBlockingSet ()
// Do not drop anything // 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 ---------------------------------------- // Action functions for the minotaur ----------------------------------------
//---------------------------------------------------------------------------- //----------------------------------------------------------------------------
@ -641,16 +482,20 @@ void A_MinotaurAtk2 (AActor *actor)
return; return;
} }
z = actor->z + 40*FRACUNIT; z = actor->z + 40*FRACUNIT;
mo = P_SpawnMissileZ (actor, z, actor->target, RUNTIME_CLASS(AMinotaurFX1)); const PClass *fx = PClass::FindClass("MinotaurFX1");
if (fx)
{
mo = P_SpawnMissileZ (actor, z, actor->target, fx);
if (mo != NULL) if (mo != NULL)
{ {
// S_Sound (mo, CHAN_WEAPON, "minotaur/attack2", 1, ATTN_NORM); // S_Sound (mo, CHAN_WEAPON, "minotaur/attack2", 1, ATTN_NORM);
momz = mo->momz; momz = mo->momz;
angle = mo->angle; angle = mo->angle;
P_SpawnMissileAngleZ (actor, z, RUNTIME_CLASS(AMinotaurFX1), angle-(ANG45/8), momz); P_SpawnMissileAngleZ (actor, z, fx, angle-(ANG45/8), momz);
P_SpawnMissileAngleZ (actor, z, RUNTIME_CLASS(AMinotaurFX1), angle+(ANG45/8), momz); P_SpawnMissileAngleZ (actor, z, fx, angle+(ANG45/8), momz);
P_SpawnMissileAngleZ (actor, z, RUNTIME_CLASS(AMinotaurFX1), angle-(ANG45/16), momz); P_SpawnMissileAngleZ (actor, z, fx, angle-(ANG45/16), momz);
P_SpawnMissileAngleZ (actor, z, RUNTIME_CLASS(AMinotaurFX1), angle+(ANG45/16), momz); P_SpawnMissileAngleZ (actor, z, fx, angle+(ANG45/16), momz);
}
} }
} }
@ -688,7 +533,7 @@ void A_MinotaurAtk3 (AActor *actor)
} }
else else
{ {
mo = P_SpawnMissile (actor, actor->target, RUNTIME_CLASS(AMinotaurFX2)); mo = P_SpawnMissile (actor, actor->target, PClass::FindClass("MinotaurFX2"));
if (mo != NULL) if (mo != NULL)
{ {
S_Sound (mo, CHAN_WEAPON, "minotaur/attack1", 1, ATTN_NORM); S_Sound (mo, CHAN_WEAPON, "minotaur/attack1", 1, ATTN_NORM);
@ -715,7 +560,7 @@ void A_MntrFloorFire (AActor *actor)
actor->z = actor->floorz; actor->z = actor->floorz;
x = actor->x + (pr_fire.Random2 () << 10); x = actor->x + (pr_fire.Random2 () << 10);
y = actor->y + (pr_fire.Random2 () << 10); y = actor->y + (pr_fire.Random2 () << 10);
mo = Spawn<AMinotaurFX3> (x, y, ONFLOORZ, ALLOW_REPLACE); mo = Spawn("MinotaurFX3", x, y, ONFLOORZ, ALLOW_REPLACE);
mo->target = actor->target; mo->target = actor->target;
mo->momx = 1; // Force block checking mo->momx = 1; // Force block checking
P_CheckMissileSpawn (mo); P_CheckMissileSpawn (mo);
@ -967,5 +812,5 @@ void A_SmokePuffEntry(mobj_t *actor)
void A_SmokePuffExit (AActor *actor) void A_SmokePuffExit (AActor *actor)
{ {
Spawn<AMinotaurSmokeExit> (actor->x, actor->y, actor->z, ALLOW_REPLACE); Spawn("MinotaurSmokeExit", actor->x, actor->y, actor->z, ALLOW_REPLACE);
} }

View file

@ -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<void (*)(int), &SRegHead, &SRegTail> setters;
while (++setters != NULL)
{
((void (*)(int))setters) (GameSpeed);
}
}
//========================================================================== //==========================================================================
// //
// //

View file

@ -387,7 +387,6 @@ struct FActorInfo
static void StaticInit (); static void StaticInit ();
static void StaticGameSet (); static void StaticGameSet ();
static void StaticSetActorNums (); static void StaticSetActorNums ();
static void StaticSpeedSet ();
void BuildDefaults (); void BuildDefaults ();
void ApplyDefaults (BYTE *defaults); void ApplyDefaults (BYTE *defaults);

View file

@ -69,7 +69,6 @@ typedef void (*voidfunc_)();
#pragma data_seg(".areg$u") // ActorInfo initializer list #pragma data_seg(".areg$u") // ActorInfo initializer list
#pragma data_seg(".greg$u") // AT_GAME_SET list #pragma data_seg(".greg$u") // AT_GAME_SET list
#pragma data_seg(".sreg$u") // AT_SPEED_SET list
#pragma data_seg() #pragma data_seg()
#define DOOMEDNUMOF(actor) actor##ActorInfo.DoomEdNum #define DOOMEDNUMOF(actor) actor##ActorInfo.DoomEdNum
@ -104,12 +103,6 @@ typedef void (*voidfunc_)();
__declspec(allocate(".greg$u")) voidfunc_ ns##_gsr = ns##_gs; \ __declspec(allocate(".greg$u")) voidfunc_ ns##_gsr = ns##_gs; \
void 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 #else
/*********************************************** /***********************************************
@ -151,11 +144,6 @@ extern void ApplyActorDefault (int defnum, int dataint);
//typedef void (*speedfunc)(EGameSpeed); //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 #endif
// Common macros // Common macros

View file

@ -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
}

View file

@ -3,6 +3,7 @@
ACTOR CWeapFlame : ClericWeapon 8009 ACTOR CWeapFlame : ClericWeapon 8009
{ {
Game Hexen
+NOGRAVITY +NOGRAVITY
Weapon.SelectionOrder 1000 Weapon.SelectionOrder 1000
Weapon.AmmoUse 4 Weapon.AmmoUse 4
@ -45,7 +46,6 @@ ACTOR CWeapFlame : ClericWeapon 8009
ACTOR CFlameFloor ACTOR CFlameFloor
{ {
Game Hexen
+NOBLOCKMAP +NOGRAVITY +NOBLOCKMAP +NOGRAVITY
RenderStyle Add RenderStyle Add
States States
@ -62,7 +62,6 @@ ACTOR CFlameFloor
ACTOR FlamePuff ACTOR FlamePuff
{ {
Game Hexen
Radius 1 Radius 1
Height 1 Height 1
+NOBLOCKMAP +NOGRAVITY +NOBLOCKMAP +NOGRAVITY

View file

@ -220,8 +220,6 @@ ACTOR FireDemonMissile
Damage 1 Damage 1
DamageType "Fire" DamageType "Fire"
Projectile Projectile
+FLOORCLIP
-BLOODSPLATTER
RenderStyle Add RenderStyle Add
DeathSound "FireDemonMissileHit" DeathSound "FireDemonMissileHit"
States States

View file

@ -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
}
}

View file

@ -75,6 +75,7 @@ ACTOR ArtiInvulnerability : PowerupGiver 84
+FLOATBOB +FLOATBOB
+INVENTORY.PICKUPFLASH +INVENTORY.PICKUPFLASH
Inventory.RespawnTics 4230 Inventory.RespawnTics 4230
Inventory.Icon ARTIINVU
Inventory.PickupMessage "$TXT_ARTIINVULNERABILITY" Inventory.PickupMessage "$TXT_ARTIINVULNERABILITY"
Powerup.Type Invulnerable Powerup.Type Invulnerable
Powerup.Color GoldMap Powerup.Color GoldMap

View file

@ -44,6 +44,7 @@
#include "actors/raven/ravenartifacts.txt" #include "actors/raven/ravenartifacts.txt"
#include "actors/raven/ravenhealth.txt" #include "actors/raven/ravenhealth.txt"
#include "actors/raven/ravenambient.txt" #include "actors/raven/ravenambient.txt"
#include "actors/raven/minotaur.txt"
#include "actors/heretic/hereticplayer.txt" #include "actors/heretic/hereticplayer.txt"
#include "actors/heretic/hereticammo.txt" #include "actors/heretic/hereticammo.txt"