mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-14 00:20:51 +00:00
- 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:
parent
cc99d150a3
commit
b2a6bed19f
17 changed files with 451 additions and 639 deletions
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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)
|
||||||
{
|
{
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
16
src/info.cpp
16
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<void (*)(int), &SRegHead, &SRegTail> setters;
|
|
||||||
while (++setters != NULL)
|
|
||||||
{
|
|
||||||
((void (*)(int))setters) (GameSpeed);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
//
|
//
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
88
wadsrc/static/actors/raven/minotaur.txt
Normal file
88
wadsrc/static/actors/raven/minotaur.txt
Normal 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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Reference in a new issue