mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-10 14:51:40 +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)
|
||||
- Converted the Minotaur's projectiles to DECORATE so that I can get
|
||||
rid of the AT_SPEED_SET code.
|
||||
- Converted Heretic's Blaster and SkullRod to DECORATE.
|
||||
- Converted the mace and all related actors to DECORATE and generalized
|
||||
the spawn function that only spawns one mace per level.
|
||||
- Moved Mace respawning code into AInventory so that it works properly
|
||||
|
|
|
@ -40,12 +40,10 @@
|
|||
#define AREG_SECTION "__DATA,areg"
|
||||
#define CREG_SECTION "__DATA,creg"
|
||||
#define GREG_SECTION "__DATA,greg"
|
||||
#define SREG_SECTION "__DATA,sreg"
|
||||
#else
|
||||
#define AREG_SECTION "areg"
|
||||
#define CREG_SECTION "creg"
|
||||
#define GREG_SECTION "greg"
|
||||
#define SREG_SECTION "sreg"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -60,10 +58,6 @@ extern REGINFO ARegTail;
|
|||
extern REGINFO GRegHead;
|
||||
extern REGINFO GRegTail;
|
||||
|
||||
// List of AT_SPEED_SET functions
|
||||
extern REGINFO SRegHead;
|
||||
extern REGINFO SRegTail;
|
||||
|
||||
// List of TypeInfos
|
||||
extern REGINFO CRegHead;
|
||||
extern REGINFO CRegTail;
|
||||
|
|
|
@ -46,7 +46,7 @@
|
|||
|
||||
#if defined(_MSC_VER)
|
||||
|
||||
#pragma comment(linker, "/merge:.areg=.data /merge:.creg=.data /merge:.greg=.data /merge:.sreg=.data /merge:.wreg=.data")
|
||||
#pragma comment(linker, "/merge:.areg=.data /merge:.creg=.data /merge:.greg=.data /merge:.wreg=.data")
|
||||
|
||||
#pragma data_seg(".areg$a")
|
||||
void *ARegHead = 0;
|
||||
|
@ -57,9 +57,6 @@ void *CRegHead = 0;
|
|||
#pragma data_seg(".greg$a")
|
||||
void *GRegHead = 0;
|
||||
|
||||
#pragma data_seg(".sreg$a")
|
||||
void *SRegHead = 0;
|
||||
|
||||
#pragma data_seg()
|
||||
|
||||
// We want visual styles support under XP
|
||||
|
@ -86,7 +83,6 @@ void *SRegHead = 0;
|
|||
void *ARegHead __attribute__((section(AREG_SECTION))) = 0;
|
||||
void *CRegHead __attribute__((section(CREG_SECTION))) = 0;
|
||||
void *GRegHead __attribute__((section(GREG_SECTION))) = 0;
|
||||
void *SRegHead __attribute__((section(SREG_SECTION))) = 0;
|
||||
|
||||
#elif
|
||||
|
||||
|
|
|
@ -46,9 +46,6 @@ void *CRegTail = 0;
|
|||
#pragma data_seg(".greg$z")
|
||||
void *GRegTail = 0;
|
||||
|
||||
#pragma data_seg(".sreg$z")
|
||||
void *SRegTail = 0;
|
||||
|
||||
#pragma data_seg()
|
||||
|
||||
|
||||
|
@ -58,7 +55,6 @@ void *SRegTail = 0;
|
|||
void *ARegTail __attribute__((section(AREG_SECTION))) = 0;
|
||||
void *CRegTail __attribute__((section(CREG_SECTION))) = 0;
|
||||
void *GRegTail __attribute__((section(GREG_SECTION))) = 0;
|
||||
void *SRegTail __attribute__((section(SREG_SECTION))) = 0;
|
||||
|
||||
#elif
|
||||
|
||||
|
|
|
@ -158,6 +158,14 @@ ACTOR(MacePL1Check)
|
|||
ACTOR(MaceBallImpact)
|
||||
ACTOR(MaceBallImpact2)
|
||||
ACTOR(DeathBallImpact)
|
||||
ACTOR(FireBlasterPL1)
|
||||
ACTOR(SpawnRippers)
|
||||
ACTOR(FireSkullRodPL1)
|
||||
ACTOR(AddPlayerRain)
|
||||
ACTOR(HideInCeiling)
|
||||
ACTOR(SkullRodStorm)
|
||||
ACTOR(RainImpact)
|
||||
ACTOR(MntrFloorFire)
|
||||
|
||||
|
||||
ACTOR(BatSpawnInit)
|
||||
|
|
|
@ -704,123 +704,17 @@ boom:
|
|||
}
|
||||
}
|
||||
|
||||
// --- Blaster (aka Claw) ---------------------------------------------------
|
||||
|
||||
void A_FireBlasterPL1 (AActor *);
|
||||
void A_FireBlasterPL2 (AActor *);
|
||||
void A_SpawnRippers (AActor *);
|
||||
|
||||
// Blaster ------------------------------------------------------------------
|
||||
|
||||
class ABlaster : public AHereticWeapon
|
||||
{
|
||||
DECLARE_ACTOR (ABlaster, AHereticWeapon)
|
||||
};
|
||||
|
||||
class ABlasterPowered : public ABlaster
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (ABlasterPowered, ABlaster)
|
||||
};
|
||||
|
||||
FState ABlaster::States[] =
|
||||
{
|
||||
#define S_BLSR 0
|
||||
S_NORMAL (WBLS, 'A', -1, NULL , NULL),
|
||||
|
||||
#define S_BLASTERREADY (S_BLSR+1)
|
||||
S_NORMAL (BLSR, 'A', 1, A_WeaponReady , &States[S_BLASTERREADY]),
|
||||
|
||||
#define S_BLASTERDOWN (S_BLASTERREADY+1)
|
||||
S_NORMAL (BLSR, 'A', 1, A_Lower , &States[S_BLASTERDOWN]),
|
||||
|
||||
#define S_BLASTERUP (S_BLASTERDOWN+1)
|
||||
S_NORMAL (BLSR, 'A', 1, A_Raise , &States[S_BLASTERUP]),
|
||||
|
||||
#define S_BLASTERATK1 (S_BLASTERUP+1)
|
||||
S_NORMAL (BLSR, 'B', 3, NULL , &States[S_BLASTERATK1+1]),
|
||||
S_NORMAL (BLSR, 'C', 3, NULL , &States[S_BLASTERATK1+2]),
|
||||
S_NORMAL (BLSR, 'D', 2, A_FireBlasterPL1 , &States[S_BLASTERATK1+3]),
|
||||
S_NORMAL (BLSR, 'C', 2, NULL , &States[S_BLASTERATK1+4]),
|
||||
S_NORMAL (BLSR, 'B', 2, NULL , &States[S_BLASTERATK1+5]),
|
||||
S_NORMAL (BLSR, 'A', 0, A_ReFire , &States[S_BLASTERREADY]),
|
||||
|
||||
#define S_BLASTERATK2 (S_BLASTERATK1+6)
|
||||
S_NORMAL (BLSR, 'B', 0, NULL , &States[S_BLASTERATK2+1]),
|
||||
S_NORMAL (BLSR, 'C', 0, NULL , &States[S_BLASTERATK2+2]),
|
||||
S_NORMAL (BLSR, 'D', 3, A_FireBlasterPL2 , &States[S_BLASTERATK2+3]),
|
||||
S_NORMAL (BLSR, 'C', 4, NULL , &States[S_BLASTERATK2+4]),
|
||||
S_NORMAL (BLSR, 'B', 4, NULL , &States[S_BLASTERATK2+5]),
|
||||
S_NORMAL (BLSR, 'A', 0, A_ReFire , &States[S_BLASTERREADY])
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ABlaster, Heretic, 53, 28)
|
||||
PROP_Flags (MF_SPECIAL)
|
||||
PROP_Flags5 (MF5_BLOODSPLATTER)
|
||||
PROP_SpawnState (S_BLSR)
|
||||
|
||||
PROP_Weapon_SelectionOrder (500)
|
||||
PROP_Weapon_AmmoUse1 (USE_BLSR_AMMO_1)
|
||||
PROP_Weapon_AmmoGive1 (30)
|
||||
PROP_Weapon_UpState (S_BLASTERUP)
|
||||
PROP_Weapon_DownState (S_BLASTERDOWN)
|
||||
PROP_Weapon_ReadyState (S_BLASTERREADY)
|
||||
PROP_Weapon_AtkState (S_BLASTERATK1)
|
||||
PROP_Weapon_HoldAtkState (S_BLASTERATK1+2)
|
||||
PROP_Weapon_YAdjust (15)
|
||||
PROP_Weapon_MoveCombatDist (27000000)
|
||||
PROP_Weapon_AmmoType1 ("BlasterAmmo")
|
||||
PROP_Weapon_SisterType ("BlasterPowered")
|
||||
PROP_Inventory_PickupMessage("$TXT_WPNBLASTER")
|
||||
END_DEFAULTS
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (ABlasterPowered, Heretic, -1, 0)
|
||||
PROP_Weapon_Flags (WIF_POWERED_UP)
|
||||
PROP_Weapon_AmmoUse1 (USE_BLSR_AMMO_2)
|
||||
PROP_Weapon_AmmoGive1 (0)
|
||||
PROP_Weapon_AtkState (S_BLASTERATK2)
|
||||
PROP_Weapon_HoldAtkState (S_BLASTERATK2+2)
|
||||
PROP_Weapon_SisterType ("Blaster")
|
||||
PROP_Weapon_ProjectileType ("BlasterFX1")
|
||||
END_DEFAULTS
|
||||
|
||||
// Blaster FX 1 -------------------------------------------------------------
|
||||
|
||||
class ABlasterFX1 : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (ABlasterFX1, AActor)
|
||||
DECLARE_CLASS(ABlasterFX1, AActor)
|
||||
public:
|
||||
void Tick ();
|
||||
int DoSpecialDamage (AActor *target, int damage);
|
||||
};
|
||||
|
||||
FState ABlasterFX1::States[] =
|
||||
{
|
||||
#define S_BLASTERFX1 0
|
||||
S_NORMAL (ACLO, 'E', 200, NULL , &States[S_BLASTERFX1+0]),
|
||||
|
||||
#define S_BLASTERFXI1 (S_BLASTERFX1+1)
|
||||
S_BRIGHT (FX18, 'A', 3, A_SpawnRippers , &States[S_BLASTERFXI1+1]),
|
||||
S_BRIGHT (FX18, 'B', 3, NULL , &States[S_BLASTERFXI1+2]),
|
||||
S_BRIGHT (FX18, 'C', 4, NULL , &States[S_BLASTERFXI1+3]),
|
||||
S_BRIGHT (FX18, 'D', 4, NULL , &States[S_BLASTERFXI1+4]),
|
||||
S_BRIGHT (FX18, 'E', 4, NULL , &States[S_BLASTERFXI1+5]),
|
||||
S_BRIGHT (FX18, 'F', 4, NULL , &States[S_BLASTERFXI1+6]),
|
||||
S_BRIGHT (FX18, 'G', 4, NULL , NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ABlasterFX1, Heretic, -1, 0)
|
||||
PROP_RadiusFixed (12)
|
||||
PROP_HeightFixed (8)
|
||||
PROP_SpeedFixed (184)
|
||||
PROP_Damage (2)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
|
||||
PROP_Flags2 (MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT)
|
||||
|
||||
PROP_SpawnState (S_BLASTERFX1)
|
||||
PROP_DeathState (S_BLASTERFXI1)
|
||||
|
||||
PROP_DeathSound ("weapons/blasterhit")
|
||||
END_DEFAULTS
|
||||
|
||||
int ABlasterFX1::DoSpecialDamage (AActor *target, int damage)
|
||||
{
|
||||
|
@ -835,69 +729,18 @@ int ABlasterFX1::DoSpecialDamage (AActor *target, int damage)
|
|||
return damage;
|
||||
}
|
||||
|
||||
// Blaster smoke ------------------------------------------------------------
|
||||
|
||||
class ABlasterSmoke : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (ABlasterSmoke, AActor)
|
||||
};
|
||||
|
||||
FState ABlasterSmoke::States[] =
|
||||
{
|
||||
#define S_BLASTERSMOKE 0
|
||||
S_NORMAL (FX18, 'H', 4, NULL , &States[S_BLASTERSMOKE+1]),
|
||||
S_NORMAL (FX18, 'I', 4, NULL , &States[S_BLASTERSMOKE+2]),
|
||||
S_NORMAL (FX18, 'J', 4, NULL , &States[S_BLASTERSMOKE+3]),
|
||||
S_NORMAL (FX18, 'K', 4, NULL , &States[S_BLASTERSMOKE+4]),
|
||||
S_NORMAL (FX18, 'L', 4, NULL , NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ABlasterSmoke, Heretic, -1, 0)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
|
||||
PROP_Flags2 (MF2_NOTELEPORT|MF2_CANNOTPUSH)
|
||||
PROP_RenderStyle (STYLE_Translucent)
|
||||
PROP_Alpha (HR_SHADOW)
|
||||
|
||||
PROP_SpawnState (S_BLASTERSMOKE)
|
||||
END_DEFAULTS
|
||||
IMPLEMENT_CLASS(ABlasterFX1)
|
||||
|
||||
// Ripper -------------------------------------------------------------------
|
||||
|
||||
class ARipper : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (ARipper, AActor)
|
||||
DECLARE_CLASS (ARipper, AActor)
|
||||
public:
|
||||
int DoSpecialDamage (AActor *target, int damage);
|
||||
};
|
||||
|
||||
FState ARipper::States[] =
|
||||
{
|
||||
#define S_RIPPER 0
|
||||
S_NORMAL (FX18, 'M', 4, NULL , &States[S_RIPPER+1]),
|
||||
S_NORMAL (FX18, 'N', 5, NULL , &States[S_RIPPER+0]),
|
||||
|
||||
#define S_RIPPERX (S_RIPPER+2)
|
||||
S_BRIGHT (FX18, 'O', 4, NULL , &States[S_RIPPERX+1]),
|
||||
S_BRIGHT (FX18, 'P', 4, NULL , &States[S_RIPPERX+2]),
|
||||
S_BRIGHT (FX18, 'Q', 4, NULL , &States[S_RIPPERX+3]),
|
||||
S_BRIGHT (FX18, 'R', 4, NULL , &States[S_RIPPERX+4]),
|
||||
S_BRIGHT (FX18, 'S', 4, NULL , NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ARipper, Heretic, -1, 157)
|
||||
PROP_RadiusFixed (8)
|
||||
PROP_HeightFixed (6)
|
||||
PROP_SpeedFixed (14)
|
||||
PROP_Damage (1)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
|
||||
PROP_Flags2 (MF2_NOTELEPORT|MF2_RIP|MF2_PCROSS|MF2_IMPACT)
|
||||
PROP_Flags3 (MF3_WARNBOT)
|
||||
|
||||
PROP_SpawnState (S_RIPPER)
|
||||
PROP_DeathState (S_RIPPERX)
|
||||
|
||||
PROP_DeathSound ("weapons/blasterpowhit")
|
||||
END_DEFAULTS
|
||||
IMPLEMENT_CLASS(ARipper)
|
||||
|
||||
int ARipper::DoSpecialDamage (AActor *target, int damage)
|
||||
{
|
||||
|
@ -912,41 +755,6 @@ int ARipper::DoSpecialDamage (AActor *target, int damage)
|
|||
return damage;
|
||||
}
|
||||
|
||||
// Blaster Puff -------------------------------------------------------------
|
||||
|
||||
class ABlasterPuff : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (ABlasterPuff, AActor)
|
||||
};
|
||||
|
||||
FState ABlasterPuff::States[] =
|
||||
{
|
||||
#define S_BLASTERPUFF1 0
|
||||
S_BRIGHT (FX17, 'A', 4, NULL , &States[S_BLASTERPUFF1+1]),
|
||||
S_BRIGHT (FX17, 'B', 4, NULL , &States[S_BLASTERPUFF1+2]),
|
||||
S_BRIGHT (FX17, 'C', 4, NULL , &States[S_BLASTERPUFF1+3]),
|
||||
S_BRIGHT (FX17, 'D', 4, NULL , &States[S_BLASTERPUFF1+4]),
|
||||
S_BRIGHT (FX17, 'E', 4, NULL , NULL),
|
||||
|
||||
#define S_BLASTERPUFF2 (S_BLASTERPUFF1+5)
|
||||
S_BRIGHT (FX17, 'F', 3, NULL , &States[S_BLASTERPUFF2+1]),
|
||||
S_BRIGHT (FX17, 'G', 3, NULL , &States[S_BLASTERPUFF2+2]),
|
||||
S_BRIGHT (FX17, 'H', 4, NULL , &States[S_BLASTERPUFF2+3]),
|
||||
S_BRIGHT (FX17, 'I', 4, NULL , &States[S_BLASTERPUFF2+4]),
|
||||
S_BRIGHT (FX17, 'J', 4, NULL , &States[S_BLASTERPUFF2+5]),
|
||||
S_BRIGHT (FX17, 'K', 4, NULL , &States[S_BLASTERPUFF2+6]),
|
||||
S_BRIGHT (FX17, 'L', 4, NULL , NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ABlasterPuff, Heretic, -1, 0)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
|
||||
PROP_Flags3 (MF3_PUFFONACTORS)
|
||||
PROP_RenderStyle (STYLE_Add)
|
||||
|
||||
PROP_SpawnState (S_BLASTERPUFF2)
|
||||
PROP_CrashState (S_BLASTERPUFF1)
|
||||
END_DEFAULTS
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
//
|
||||
// PROC A_FireBlasterPL1
|
||||
|
@ -977,36 +785,10 @@ void A_FireBlasterPL1 (AActor *actor)
|
|||
{
|
||||
angle += pr_fb1.Random2() << 18;
|
||||
}
|
||||
P_LineAttack (actor, angle, PLAYERMISSILERANGE, pitch, damage, NAME_None, RUNTIME_CLASS(ABlasterPuff));
|
||||
P_LineAttack (actor, angle, PLAYERMISSILERANGE, pitch, damage, NAME_None, "BlasterPuff");
|
||||
S_Sound (actor, CHAN_WEAPON, "weapons/blastershoot", 1, ATTN_NORM);
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
//
|
||||
// PROC A_FireBlasterPL2
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
void A_FireBlasterPL2 (AActor *actor)
|
||||
{
|
||||
player_t *player;
|
||||
|
||||
if (NULL == (player = actor->player))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
AWeapon *weapon = actor->player->ReadyWeapon;
|
||||
if (weapon != NULL)
|
||||
{
|
||||
if (!weapon->DepleteAmmo (weapon->bAltFire))
|
||||
return;
|
||||
}
|
||||
P_SpawnPlayerMissile (actor, RUNTIME_CLASS(ABlasterFX1));
|
||||
S_Sound (actor, CHAN_WEAPON, "weapons/blastershoot", 1, ATTN_NORM);
|
||||
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
//
|
||||
// PROC A_SpawnRippers
|
||||
|
@ -1085,7 +867,7 @@ void ABlasterFX1::Tick ()
|
|||
}
|
||||
if (changexy && (pr_bfx1t() < 64))
|
||||
{
|
||||
Spawn<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 ------------------------------------------------------------
|
||||
|
||||
void A_FireSkullRodPL1 (AActor *);
|
||||
void A_FireSkullRodPL2 (AActor *);
|
||||
void A_SkullRodPL2Seek (AActor *);
|
||||
void A_AddPlayerRain (AActor *);
|
||||
void A_HideInCeiling (AActor *);
|
||||
void A_SkullRodStorm (AActor *);
|
||||
void A_RainImpact (AActor *);
|
||||
|
||||
// Skull (Horn) Rod ---------------------------------------------------------
|
||||
|
||||
class ASkullRod : public AHereticWeapon
|
||||
{
|
||||
DECLARE_ACTOR (ASkullRod, AHereticWeapon)
|
||||
};
|
||||
|
||||
class ASkullRodPowered : public ASkullRod
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (ASkullRodPowered, ASkullRod)
|
||||
};
|
||||
|
||||
FState ASkullRod::States[] =
|
||||
{
|
||||
#define S_WSKL 0
|
||||
S_NORMAL (WSKL, 'A', -1, NULL , NULL),
|
||||
|
||||
#define S_HORNRODREADY (S_WSKL+1)
|
||||
S_NORMAL (HROD, 'A', 1, A_WeaponReady , &States[S_HORNRODREADY]),
|
||||
|
||||
#define S_HORNRODDOWN (S_HORNRODREADY+1)
|
||||
S_NORMAL (HROD, 'A', 1, A_Lower , &States[S_HORNRODDOWN]),
|
||||
|
||||
#define S_HORNRODUP (S_HORNRODDOWN+1)
|
||||
S_NORMAL (HROD, 'A', 1, A_Raise , &States[S_HORNRODUP]),
|
||||
|
||||
#define S_HORNRODATK1 (S_HORNRODUP+1)
|
||||
S_NORMAL (HROD, 'A', 4, A_FireSkullRodPL1 , &States[S_HORNRODATK1+1]),
|
||||
S_NORMAL (HROD, 'B', 4, A_FireSkullRodPL1 , &States[S_HORNRODATK1+2]),
|
||||
S_NORMAL (HROD, 'B', 0, A_ReFire , &States[S_HORNRODREADY]),
|
||||
|
||||
#define S_HORNRODATK2 (S_HORNRODATK1+3)
|
||||
S_NORMAL (HROD, 'C', 2, NULL , &States[S_HORNRODATK2+1]),
|
||||
S_NORMAL (HROD, 'D', 3, NULL , &States[S_HORNRODATK2+2]),
|
||||
S_NORMAL (HROD, 'E', 2, NULL , &States[S_HORNRODATK2+3]),
|
||||
S_NORMAL (HROD, 'F', 3, NULL , &States[S_HORNRODATK2+4]),
|
||||
S_NORMAL (HROD, 'G', 4, A_FireSkullRodPL2 , &States[S_HORNRODATK2+5]),
|
||||
S_NORMAL (HROD, 'F', 2, NULL , &States[S_HORNRODATK2+6]),
|
||||
S_NORMAL (HROD, 'E', 3, NULL , &States[S_HORNRODATK2+7]),
|
||||
S_NORMAL (HROD, 'D', 2, NULL , &States[S_HORNRODATK2+8]),
|
||||
S_NORMAL (HROD, 'C', 2, A_ReFire , &States[S_HORNRODREADY])
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ASkullRod, Heretic, 2004, 30)
|
||||
PROP_Flags (MF_SPECIAL)
|
||||
PROP_SpawnState (S_WSKL)
|
||||
|
||||
PROP_Weapon_SelectionOrder (200)
|
||||
PROP_Weapon_AmmoUse1 (USE_SKRD_AMMO_1)
|
||||
PROP_Weapon_AmmoGive1 (50)
|
||||
PROP_Weapon_UpState (S_HORNRODUP)
|
||||
PROP_Weapon_DownState (S_HORNRODDOWN)
|
||||
PROP_Weapon_ReadyState (S_HORNRODREADY)
|
||||
PROP_Weapon_AtkState (S_HORNRODATK1)
|
||||
PROP_Weapon_YAdjust (15)
|
||||
PROP_Weapon_MoveCombatDist (27000000)
|
||||
PROP_Weapon_AmmoType1 ("SkullRodAmmo")
|
||||
PROP_Weapon_SisterType ("SkullRodPowered")
|
||||
PROP_Weapon_ProjectileType ("HornRodFX1")
|
||||
PROP_Inventory_PickupMessage("$TXT_WPNSKULLROD")
|
||||
END_DEFAULTS
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (ASkullRodPowered, Heretic, -1, 0)
|
||||
PROP_Weapon_Flags (WIF_POWERED_UP)
|
||||
PROP_Weapon_AmmoUse1 (USE_SKRD_AMMO_2)
|
||||
PROP_Weapon_AmmoGive1 (0)
|
||||
PROP_Weapon_AtkState (S_HORNRODATK2)
|
||||
PROP_Weapon_SisterType ("SkullRod")
|
||||
PROP_Weapon_ProjectileType ("HornRodFX2")
|
||||
END_DEFAULTS
|
||||
|
||||
// Horn Rod FX 1 ------------------------------------------------------------
|
||||
|
||||
class AHornRodFX1 : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AHornRodFX1, AActor)
|
||||
};
|
||||
|
||||
FState AHornRodFX1::States[] =
|
||||
{
|
||||
#define S_HRODFX1 0
|
||||
S_BRIGHT (FX00, 'A', 6, NULL , &States[S_HRODFX1+1]),
|
||||
S_BRIGHT (FX00, 'B', 6, NULL , &States[S_HRODFX1+0]),
|
||||
|
||||
#define S_HRODFXI1 (S_HRODFX1+2)
|
||||
S_BRIGHT (FX00, 'H', 5, NULL , &States[S_HRODFXI1+1]),
|
||||
S_BRIGHT (FX00, 'I', 5, NULL , &States[S_HRODFXI1+2]),
|
||||
S_BRIGHT (FX00, 'J', 4, NULL , &States[S_HRODFXI1+3]),
|
||||
S_BRIGHT (FX00, 'K', 4, NULL , &States[S_HRODFXI1+4]),
|
||||
S_BRIGHT (FX00, 'L', 3, NULL , &States[S_HRODFXI1+5]),
|
||||
S_BRIGHT (FX00, 'M', 3, NULL , NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AHornRodFX1, Heretic, -1, 160)
|
||||
PROP_RadiusFixed (12)
|
||||
PROP_HeightFixed (8)
|
||||
PROP_SpeedFixed (22)
|
||||
PROP_Damage (3)
|
||||
PROP_Flags (MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
|
||||
PROP_Flags2 (MF2_WINDTHRUST|MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT)
|
||||
PROP_Flags3 (MF3_WARNBOT)
|
||||
PROP_RenderStyle (STYLE_Add)
|
||||
|
||||
PROP_SpawnState (S_HRODFX1)
|
||||
PROP_DeathState (S_HRODFXI1)
|
||||
|
||||
PROP_SeeSound ("weapons/hornrodshoot")
|
||||
PROP_DeathSound ("weapons/hornrodhit")
|
||||
END_DEFAULTS
|
||||
|
||||
// Horn Rod FX 2 ------------------------------------------------------------
|
||||
|
||||
class AHornRodFX2 : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AHornRodFX2, AActor)
|
||||
DECLARE_CLASS (AHornRodFX2, AActor)
|
||||
public:
|
||||
int DoSpecialDamage (AActor *target, int damage);
|
||||
};
|
||||
|
||||
FState AHornRodFX2::States[] =
|
||||
{
|
||||
#define S_HRODFX2 0
|
||||
S_BRIGHT (FX00, 'C', 3, NULL , &States[S_HRODFX2+1]),
|
||||
S_BRIGHT (FX00, 'D', 3, A_SkullRodPL2Seek , &States[S_HRODFX2+2]),
|
||||
S_BRIGHT (FX00, 'E', 3, NULL , &States[S_HRODFX2+3]),
|
||||
S_BRIGHT (FX00, 'F', 3, A_SkullRodPL2Seek , &States[S_HRODFX2+0]),
|
||||
|
||||
#define S_HRODFXI2 (S_HRODFX2+4)
|
||||
S_BRIGHT (FX00, 'H', 5, A_AddPlayerRain , &States[S_HRODFXI2+1]),
|
||||
S_BRIGHT (FX00, 'I', 5, NULL , &States[S_HRODFXI2+2]),
|
||||
S_BRIGHT (FX00, 'J', 4, NULL , &States[S_HRODFXI2+3]),
|
||||
S_BRIGHT (FX00, 'K', 3, NULL , &States[S_HRODFXI2+4]),
|
||||
S_BRIGHT (FX00, 'L', 3, NULL , &States[S_HRODFXI2+5]),
|
||||
S_BRIGHT (FX00, 'M', 3, NULL , &States[S_HRODFXI2+6]),
|
||||
S_NORMAL (FX00, 'G', 1, A_HideInCeiling , &States[S_HRODFXI2+7]),
|
||||
S_NORMAL (FX00, 'G', 1, A_SkullRodStorm , &States[S_HRODFXI2+7])
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AHornRodFX2, Heretic, -1, 0)
|
||||
PROP_RadiusFixed (12)
|
||||
PROP_HeightFixed (8)
|
||||
PROP_SpeedFixed (22)
|
||||
PROP_Damage (10)
|
||||
PROP_SpawnHealth (4*35)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
|
||||
PROP_Flags2 (MF2_NOTELEPORT|MF2_PCROSS|MF2_IMPACT)
|
||||
PROP_RenderStyle (STYLE_Add)
|
||||
|
||||
PROP_SpawnState (S_HRODFX2)
|
||||
PROP_DeathState (S_HRODFXI2)
|
||||
|
||||
PROP_SeeSound ("weapons/hornrodshoot")
|
||||
PROP_DeathSound ("weapons/hornrodpowhit")
|
||||
END_DEFAULTS
|
||||
IMPLEMENT_CLASS (AHornRodFX2)
|
||||
|
||||
int AHornRodFX2::DoSpecialDamage (AActor *target, int damage)
|
||||
{
|
||||
|
@ -1282,41 +913,12 @@ int AHornRodFX2::DoSpecialDamage (AActor *target, int damage)
|
|||
|
||||
class ARainPillar : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (ARainPillar, AActor)
|
||||
DECLARE_CLASS (ARainPillar, AActor)
|
||||
public:
|
||||
int DoSpecialDamage (AActor *target, int damage);
|
||||
};
|
||||
|
||||
FState ARainPillar::States[] =
|
||||
{
|
||||
#define S_RAINPLR 0
|
||||
S_BRIGHT (FX22, 'A', -1, NULL , NULL),
|
||||
|
||||
#define S_RAINPLRX (S_RAINPLR+1)
|
||||
S_BRIGHT (FX22, 'B', 4, A_RainImpact , &States[S_RAINPLRX+1]),
|
||||
S_BRIGHT (FX22, 'C', 4, NULL , &States[S_RAINPLRX+2]),
|
||||
S_BRIGHT (FX22, 'D', 4, NULL , &States[S_RAINPLRX+3]),
|
||||
S_BRIGHT (FX22, 'E', 4, NULL , &States[S_RAINPLRX+4]),
|
||||
S_BRIGHT (FX22, 'F', 4, NULL , NULL),
|
||||
|
||||
#define S_RAINAIRXPLR (S_RAINPLRX+5)
|
||||
S_BRIGHT (FX22, 'G', 4, NULL , &States[S_RAINAIRXPLR+1]),
|
||||
S_BRIGHT (FX22, 'H', 4, NULL , &States[S_RAINAIRXPLR+2]),
|
||||
S_BRIGHT (FX22, 'I', 4, NULL , NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ARainPillar, Heretic, -1, 0)
|
||||
PROP_RadiusFixed (5)
|
||||
PROP_HeightFixed (12)
|
||||
PROP_SpeedFixed (12)
|
||||
PROP_Damage (5)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
|
||||
PROP_Flags2 (MF2_NOTELEPORT)
|
||||
PROP_RenderStyle (STYLE_Add)
|
||||
|
||||
PROP_SpawnState (S_RAINPLR)
|
||||
PROP_DeathState (S_RAINPLRX)
|
||||
END_DEFAULTS
|
||||
IMPLEMENT_CLASS (ARainPillar)
|
||||
|
||||
int ARainPillar::DoSpecialDamage (AActor *target, int damage)
|
||||
{
|
||||
|
@ -1331,16 +933,14 @@ int ARainPillar::DoSpecialDamage (AActor *target, int damage)
|
|||
|
||||
class ARainTracker : public AInventory
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (ARainTracker, AInventory)
|
||||
DECLARE_CLASS (ARainTracker, AInventory)
|
||||
public:
|
||||
void Serialize (FArchive &arc);
|
||||
AActor *Rain1, *Rain2;
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (ARainTracker, Any, -1, 0)
|
||||
PROP_Inventory_FlagsSet (IF_UNDROPPABLE)
|
||||
END_DEFAULTS
|
||||
|
||||
IMPLEMENT_CLASS (ARainTracker)
|
||||
|
||||
void ARainTracker::Serialize (FArchive &arc)
|
||||
{
|
||||
Super::Serialize (arc);
|
||||
|
@ -1369,7 +969,7 @@ void A_FireSkullRodPL1 (AActor *actor)
|
|||
if (!weapon->DepleteAmmo (weapon->bAltFire))
|
||||
return;
|
||||
}
|
||||
mo = P_SpawnPlayerMissile (actor, RUNTIME_CLASS(AHornRodFX1));
|
||||
mo = P_SpawnPlayerMissile (actor, PClass::FindClass("HornRodFX1"));
|
||||
// Randomize the first frame
|
||||
if (mo && pr_fsr1() > 128)
|
||||
{
|
||||
|
@ -1551,7 +1151,7 @@ void A_RainImpact (AActor *actor)
|
|||
{
|
||||
if (actor->z > actor->floorz)
|
||||
{
|
||||
actor->SetState (&ARainPillar::States[S_RAINAIRXPLR]);
|
||||
actor->SetState (actor->FindState("NotFloor"));
|
||||
}
|
||||
else if (pr_impact() < 40)
|
||||
{
|
||||
|
|
|
@ -1784,11 +1784,6 @@ void G_InitNew (const char *mapname, bool bTitleLevel)
|
|||
wantFast = !!G_SkillProperty(SKILLP_FastMonsters);
|
||||
GameSpeed = wantFast ? SPEED_Fast : SPEED_Normal;
|
||||
|
||||
if (oldSpeed != GameSpeed)
|
||||
{
|
||||
FActorInfo::StaticSpeedSet ();
|
||||
}
|
||||
|
||||
if (!savegamerestore)
|
||||
{
|
||||
if (!netgame)
|
||||
|
|
|
@ -323,165 +323,6 @@ void AMinotaurFriend::NoBlockingSet ()
|
|||
// Do not drop anything
|
||||
}
|
||||
|
||||
// Minotaur FX 1 ------------------------------------------------------------
|
||||
|
||||
class AMinotaurFX1 : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AMinotaurFX1, AActor)
|
||||
};
|
||||
|
||||
FState AMinotaurFX1::States[] =
|
||||
{
|
||||
#define S_MNTRFX1 0
|
||||
S_BRIGHT (FX12, 'A', 6, NULL , &States[S_MNTRFX1+1]),
|
||||
S_BRIGHT (FX12, 'B', 6, NULL , &States[S_MNTRFX1+0]),
|
||||
|
||||
#define S_MNTRFXI1 (S_MNTRFX1+2)
|
||||
S_BRIGHT (FX12, 'C', 5, NULL , &States[S_MNTRFXI1+1]),
|
||||
S_BRIGHT (FX12, 'D', 5, NULL , &States[S_MNTRFXI1+2]),
|
||||
S_BRIGHT (FX12, 'E', 5, NULL , &States[S_MNTRFXI1+3]),
|
||||
S_BRIGHT (FX12, 'F', 5, NULL , &States[S_MNTRFXI1+4]),
|
||||
S_BRIGHT (FX12, 'G', 5, NULL , &States[S_MNTRFXI1+5]),
|
||||
S_BRIGHT (FX12, 'H', 5, NULL , NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AMinotaurFX1, Raven, -1, 0)
|
||||
PROP_RadiusFixed (10)
|
||||
PROP_HeightFixed (6)
|
||||
PROP_SpeedFixed (20)
|
||||
PROP_Damage (3)
|
||||
PROP_DamageType (NAME_Fire)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_MISSILE|MF_DROPOFF|MF_NOGRAVITY)
|
||||
PROP_Flags2 (MF2_NOTELEPORT)
|
||||
PROP_RenderStyle (STYLE_Add)
|
||||
|
||||
PROP_SpawnState (S_MNTRFX1)
|
||||
PROP_DeathState (S_MNTRFXI1)
|
||||
END_DEFAULTS
|
||||
|
||||
AT_SPEED_SET (MinotaurFX1, speed)
|
||||
{
|
||||
SimpleSpeedSetter (AMinotaurFX1, 20*FRACUNIT, 26*FRACUNIT, speed);
|
||||
}
|
||||
|
||||
// Minotaur FX 2 ------------------------------------------------------------
|
||||
|
||||
class AMinotaurFX2 : public AMinotaurFX1
|
||||
{
|
||||
DECLARE_ACTOR (AMinotaurFX2, AMinotaurFX1)
|
||||
public:
|
||||
void GetExplodeParms (int &damage, int &distance, bool &hurtSource)
|
||||
{
|
||||
damage = 24;
|
||||
}
|
||||
};
|
||||
|
||||
FState AMinotaurFX2::States[] =
|
||||
{
|
||||
#define S_MNTRFX2 0
|
||||
S_NORMAL (FX13, 'A', 2, A_MntrFloorFire , &States[S_MNTRFX2+0]),
|
||||
|
||||
#define S_MNTRFXI2 (S_MNTRFX2+1)
|
||||
S_BRIGHT (FX13, 'I', 4, A_Explode , &States[S_MNTRFXI2+1]),
|
||||
S_BRIGHT (FX13, 'J', 4, NULL , &States[S_MNTRFXI2+2]),
|
||||
S_BRIGHT (FX13, 'K', 4, NULL , &States[S_MNTRFXI2+3]),
|
||||
S_BRIGHT (FX13, 'L', 4, NULL , &States[S_MNTRFXI2+4]),
|
||||
S_BRIGHT (FX13, 'M', 4, NULL , NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AMinotaurFX2, Raven, -1, 0)
|
||||
PROP_RadiusFixed (5)
|
||||
PROP_HeightFixed (12)
|
||||
PROP_SpeedFixed (14)
|
||||
PROP_Damage (4)
|
||||
PROP_Flags3 (MF3_FLOORHUGGER)
|
||||
|
||||
PROP_SpawnState (S_MNTRFX2)
|
||||
PROP_DeathState (S_MNTRFXI2)
|
||||
|
||||
PROP_DeathSound ("minotaur/fx2hit")
|
||||
END_DEFAULTS
|
||||
|
||||
AT_SPEED_SET (MinotaurFX2, speed)
|
||||
{
|
||||
SimpleSpeedSetter (AMinotaurFX2, 14*FRACUNIT, 20*FRACUNIT, speed);
|
||||
}
|
||||
|
||||
// Minotaur FX 3 ------------------------------------------------------------
|
||||
|
||||
class AMinotaurFX3 : public AMinotaurFX2
|
||||
{
|
||||
DECLARE_ACTOR (AMinotaurFX3, AMinotaurFX2)
|
||||
public:
|
||||
void GetExplodeParms (int &damage, int &distance, bool &hurtSource)
|
||||
{
|
||||
damage = 128;
|
||||
}
|
||||
};
|
||||
|
||||
FState AMinotaurFX3::States[] =
|
||||
{
|
||||
#define S_MNTRFX3 0
|
||||
S_BRIGHT (FX13, 'D', 4, NULL , &States[S_MNTRFX3+1]),
|
||||
S_BRIGHT (FX13, 'C', 4, NULL , &States[S_MNTRFX3+2]),
|
||||
S_BRIGHT (FX13, 'B', 5, NULL , &States[S_MNTRFX3+3]),
|
||||
S_BRIGHT (FX13, 'C', 5, NULL , &States[S_MNTRFX3+4]),
|
||||
S_BRIGHT (FX13, 'D', 5, NULL , &States[S_MNTRFX3+5]),
|
||||
S_BRIGHT (FX13, 'E', 5, NULL , &States[S_MNTRFX3+6]),
|
||||
S_BRIGHT (FX13, 'F', 4, NULL , &States[S_MNTRFX3+7]),
|
||||
S_BRIGHT (FX13, 'G', 4, NULL , &States[S_MNTRFX3+8]),
|
||||
S_BRIGHT (FX13, 'H', 4, NULL , NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AMinotaurFX3, Raven, -1, 0)
|
||||
PROP_RadiusFixed (8)
|
||||
PROP_HeightFixed (16)
|
||||
PROP_SpeedFixed (0)
|
||||
|
||||
PROP_SpawnState (S_MNTRFX3)
|
||||
|
||||
PROP_DeathSound ("minotaur/fx3hit")
|
||||
END_DEFAULTS
|
||||
|
||||
// Minotaur Smoke Exit ------------------------------------------------------
|
||||
|
||||
class AMinotaurSmokeExit : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AMinotaurSmokeExit, AActor)
|
||||
};
|
||||
|
||||
FState AMinotaurSmokeExit::States[] =
|
||||
{
|
||||
S_NORMAL (MNSM, 'A', 3, NULL , &States[1]),
|
||||
S_NORMAL (MNSM, 'B', 3, NULL , &States[2]),
|
||||
S_NORMAL (MNSM, 'C', 3, NULL , &States[3]),
|
||||
S_NORMAL (MNSM, 'D', 3, NULL , &States[4]),
|
||||
S_NORMAL (MNSM, 'E', 3, NULL , &States[5]),
|
||||
S_NORMAL (MNSM, 'F', 3, NULL , &States[6]),
|
||||
S_NORMAL (MNSM, 'G', 3, NULL , &States[7]),
|
||||
S_NORMAL (MNSM, 'H', 3, NULL , &States[8]),
|
||||
S_NORMAL (MNSM, 'I', 3, NULL , &States[9]),
|
||||
S_NORMAL (MNSM, 'J', 3, NULL , &States[10]),
|
||||
S_NORMAL (MNSM, 'I', 3, NULL , &States[11]),
|
||||
S_NORMAL (MNSM, 'H', 3, NULL , &States[12]),
|
||||
S_NORMAL (MNSM, 'G', 3, NULL , &States[13]),
|
||||
S_NORMAL (MNSM, 'F', 3, NULL , &States[14]),
|
||||
S_NORMAL (MNSM, 'E', 3, NULL , &States[15]),
|
||||
S_NORMAL (MNSM, 'D', 3, NULL , &States[16]),
|
||||
S_NORMAL (MNSM, 'C', 3, NULL , &States[17]),
|
||||
S_NORMAL (MNSM, 'B', 3, NULL , &States[18]),
|
||||
S_NORMAL (MNSM, 'A', 3, NULL , NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AMinotaurSmokeExit, Hexen, -1, 0)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
|
||||
PROP_Flags2 (MF2_NOTELEPORT)
|
||||
PROP_RenderStyle (STYLE_Translucent)
|
||||
PROP_Alpha (HX_SHADOW)
|
||||
|
||||
PROP_SpawnState (0)
|
||||
END_DEFAULTS
|
||||
|
||||
// Action functions for the minotaur ----------------------------------------
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
|
@ -641,16 +482,20 @@ void A_MinotaurAtk2 (AActor *actor)
|
|||
return;
|
||||
}
|
||||
z = actor->z + 40*FRACUNIT;
|
||||
mo = P_SpawnMissileZ (actor, z, actor->target, RUNTIME_CLASS(AMinotaurFX1));
|
||||
if (mo != NULL)
|
||||
const PClass *fx = PClass::FindClass("MinotaurFX1");
|
||||
if (fx)
|
||||
{
|
||||
// S_Sound (mo, CHAN_WEAPON, "minotaur/attack2", 1, ATTN_NORM);
|
||||
momz = mo->momz;
|
||||
angle = mo->angle;
|
||||
P_SpawnMissileAngleZ (actor, z, RUNTIME_CLASS(AMinotaurFX1), angle-(ANG45/8), momz);
|
||||
P_SpawnMissileAngleZ (actor, z, RUNTIME_CLASS(AMinotaurFX1), angle+(ANG45/8), momz);
|
||||
P_SpawnMissileAngleZ (actor, z, RUNTIME_CLASS(AMinotaurFX1), angle-(ANG45/16), momz);
|
||||
P_SpawnMissileAngleZ (actor, z, RUNTIME_CLASS(AMinotaurFX1), angle+(ANG45/16), momz);
|
||||
mo = P_SpawnMissileZ (actor, z, actor->target, fx);
|
||||
if (mo != NULL)
|
||||
{
|
||||
// S_Sound (mo, CHAN_WEAPON, "minotaur/attack2", 1, ATTN_NORM);
|
||||
momz = mo->momz;
|
||||
angle = mo->angle;
|
||||
P_SpawnMissileAngleZ (actor, z, fx, angle-(ANG45/8), momz);
|
||||
P_SpawnMissileAngleZ (actor, z, fx, angle+(ANG45/8), momz);
|
||||
P_SpawnMissileAngleZ (actor, z, fx, angle-(ANG45/16), momz);
|
||||
P_SpawnMissileAngleZ (actor, z, fx, angle+(ANG45/16), momz);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -688,7 +533,7 @@ void A_MinotaurAtk3 (AActor *actor)
|
|||
}
|
||||
else
|
||||
{
|
||||
mo = P_SpawnMissile (actor, actor->target, RUNTIME_CLASS(AMinotaurFX2));
|
||||
mo = P_SpawnMissile (actor, actor->target, PClass::FindClass("MinotaurFX2"));
|
||||
if (mo != NULL)
|
||||
{
|
||||
S_Sound (mo, CHAN_WEAPON, "minotaur/attack1", 1, ATTN_NORM);
|
||||
|
@ -715,7 +560,7 @@ void A_MntrFloorFire (AActor *actor)
|
|||
actor->z = actor->floorz;
|
||||
x = actor->x + (pr_fire.Random2 () << 10);
|
||||
y = actor->y + (pr_fire.Random2 () << 10);
|
||||
mo = Spawn<AMinotaurFX3> (x, y, ONFLOORZ, ALLOW_REPLACE);
|
||||
mo = Spawn("MinotaurFX3", x, y, ONFLOORZ, ALLOW_REPLACE);
|
||||
mo->target = actor->target;
|
||||
mo->momx = 1; // Force block checking
|
||||
P_CheckMissileSpawn (mo);
|
||||
|
@ -967,5 +812,5 @@ void A_SmokePuffEntry(mobj_t *actor)
|
|||
|
||||
void A_SmokePuffExit (AActor *actor)
|
||||
{
|
||||
Spawn<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 StaticGameSet ();
|
||||
static void StaticSetActorNums ();
|
||||
static void StaticSpeedSet ();
|
||||
|
||||
void BuildDefaults ();
|
||||
void ApplyDefaults (BYTE *defaults);
|
||||
|
|
|
@ -69,7 +69,6 @@ typedef void (*voidfunc_)();
|
|||
|
||||
#pragma data_seg(".areg$u") // ActorInfo initializer list
|
||||
#pragma data_seg(".greg$u") // AT_GAME_SET list
|
||||
#pragma data_seg(".sreg$u") // AT_SPEED_SET list
|
||||
#pragma data_seg()
|
||||
|
||||
#define DOOMEDNUMOF(actor) actor##ActorInfo.DoomEdNum
|
||||
|
@ -104,12 +103,6 @@ typedef void (*voidfunc_)();
|
|||
__declspec(allocate(".greg$u")) voidfunc_ ns##_gsr = ns##_gs; \
|
||||
void ns##_gs ()
|
||||
|
||||
// Define a function that gets called when the speed is changed.
|
||||
#define AT_SPEED_SET(ns,varname) \
|
||||
extern void ns##_ss(EGameSpeed); \
|
||||
__declspec(allocate(".sreg$u")) void (*ns##_gsr)(EGameSpeed) = ns##_ss; \
|
||||
void ns##_ss (EGameSpeed varname)
|
||||
|
||||
#else
|
||||
|
||||
/***********************************************
|
||||
|
@ -151,11 +144,6 @@ extern void ApplyActorDefault (int defnum, int dataint);
|
|||
|
||||
//typedef void (*speedfunc)(EGameSpeed);
|
||||
|
||||
#define AT_SPEED_SET(ns,varname) \
|
||||
extern void ns##_ss(EGameSpeed); \
|
||||
void (*ns##_gsr)(EGameSpeed) __attribute__((section(SREG_SECTION))) = ns##_ss; \
|
||||
void ns##_ss (EGameSpeed varname)
|
||||
|
||||
#endif
|
||||
|
||||
// Common macros
|
||||
|
|
|
@ -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
|
||||
{
|
||||
Game Hexen
|
||||
+NOGRAVITY
|
||||
Weapon.SelectionOrder 1000
|
||||
Weapon.AmmoUse 4
|
||||
|
@ -45,7 +46,6 @@ ACTOR CWeapFlame : ClericWeapon 8009
|
|||
|
||||
ACTOR CFlameFloor
|
||||
{
|
||||
Game Hexen
|
||||
+NOBLOCKMAP +NOGRAVITY
|
||||
RenderStyle Add
|
||||
States
|
||||
|
@ -62,7 +62,6 @@ ACTOR CFlameFloor
|
|||
|
||||
ACTOR FlamePuff
|
||||
{
|
||||
Game Hexen
|
||||
Radius 1
|
||||
Height 1
|
||||
+NOBLOCKMAP +NOGRAVITY
|
||||
|
|
|
@ -220,8 +220,6 @@ ACTOR FireDemonMissile
|
|||
Damage 1
|
||||
DamageType "Fire"
|
||||
Projectile
|
||||
+FLOORCLIP
|
||||
-BLOODSPLATTER
|
||||
RenderStyle Add
|
||||
DeathSound "FireDemonMissileHit"
|
||||
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
|
||||
+INVENTORY.PICKUPFLASH
|
||||
Inventory.RespawnTics 4230
|
||||
Inventory.Icon ARTIINVU
|
||||
Inventory.PickupMessage "$TXT_ARTIINVULNERABILITY"
|
||||
Powerup.Type Invulnerable
|
||||
Powerup.Color GoldMap
|
||||
|
|
|
@ -44,6 +44,7 @@
|
|||
#include "actors/raven/ravenartifacts.txt"
|
||||
#include "actors/raven/ravenhealth.txt"
|
||||
#include "actors/raven/ravenambient.txt"
|
||||
#include "actors/raven/minotaur.txt"
|
||||
|
||||
#include "actors/heretic/hereticplayer.txt"
|
||||
#include "actors/heretic/hereticammo.txt"
|
||||
|
|
Loading…
Reference in a new issue