- Added more DECORATE conversions by Karate Chris.

SVN r1124 (trunk)
This commit is contained in:
Christoph Oelckers 2008-08-07 15:46:52 +00:00
parent 0ad1bfe87e
commit 269a54a258
13 changed files with 493 additions and 588 deletions

View file

@ -1,6 +1,7 @@
August 7, 2008 (Changes by Graf Zahl)
- Added Gez's dropammofactor submission with some necessary changes. Also merged
redundant ammo multiplication code from P_DropItem and ADehackedPickup::TryPickup.
- Restricted native action function definitions to zdoom.pk3.
- Fixed. The Firedemon was missing a game filter.
August 7, 2008 (SBARINfO update)

View file

@ -233,6 +233,21 @@ WEAPON(CStaffInitBlink)
WEAPON(CStaffCheckBlink)
WEAPON(CStaffCheck)
WEAPON(CStaffAttack)
WEAPON(FireConePL1)
WEAPON(ShedShard)
WEAPON(LightningReady)
WEAPON(MLightningAttack)
ACTOR(LightningZap)
ACTOR(LightningClip)
ACTOR(LightningRemove)
ACTOR(FreeTargMobj)
ACTOR(LastZap)
ACTOR(ZapMimic)
ACTOR(DropBloodscourgePieces)
WEAPON(MStaffAttack)
WEAPON(MStaffPalette)
ACTOR(MStaffTrack)
ACTOR(BeAdditive)
ACTOR(FiredRocks)
ACTOR(FiredChase)
ACTOR(FiredAttack)

View file

@ -68,7 +68,7 @@ void ACWeaponPiece1::BeginPlay ()
class ACWeaponPiece2 : public AClericWeaponPiece
{
DECLARE_ACTOR (ACWeaponPiece2, AClericWeaponPiece)
DECLARE_CLASS (ACWeaponPiece2, AClericWeaponPiece)
public:
void BeginPlay ();
};
@ -85,7 +85,7 @@ void ACWeaponPiece2::BeginPlay ()
class ACWeaponPiece3 : public AClericWeaponPiece
{
DECLARE_ACTOR (ACWeaponPiece3, AClericWeaponPiece)
DECLARE_CLASS (ACWeaponPiece3, AClericWeaponPiece)
public:
void BeginPlay ();
};
@ -102,7 +102,7 @@ void ACWeaponPiece3::BeginPlay ()
class ACWeapWraithverge : public AClericWeapon
{
DECLARE_ACTOR (ACWeapWraithverge, AClericWeapon)
DECLARE_CLASS (ACWeapWraithverge, AClericWeapon)
public:
void Serialize (FArchive &arc)
{

View file

@ -5,7 +5,7 @@
class ALightning : public AActor
{
DECLARE_STATELESS_ACTOR (ALightning, AActor)
DECLARE_CLASS (ALightning, AActor)
public:
int SpecialMissileHit (AActor *victim);
};

View file

@ -21,99 +21,16 @@ static FRandom pr_cone ("FireConePL1");
void A_FireConePL1 (AActor *actor);
void A_ShedShard (AActor *);
// The Mage's Frost Cone ----------------------------------------------------
class AMWeapFrost : public AMageWeapon
{
DECLARE_ACTOR (AMWeapFrost, AMageWeapon)
};
FState AMWeapFrost::States[] =
{
#define S_COS1 0
S_BRIGHT (WMCS, 'A', 8, NULL , &States[S_COS1+1]),
S_BRIGHT (WMCS, 'B', 8, NULL , &States[S_COS1+2]),
S_BRIGHT (WMCS, 'C', 8, NULL , &States[S_COS1]),
#define S_CONEREADY (S_COS1+3)
S_NORMAL (CONE, 'A', 1, A_WeaponReady , &States[S_CONEREADY]),
#define S_CONEDOWN (S_CONEREADY+1)
S_NORMAL (CONE, 'A', 1, A_Lower , &States[S_CONEDOWN]),
#define S_CONEUP (S_CONEDOWN+1)
S_NORMAL (CONE, 'A', 1, A_Raise , &States[S_CONEUP]),
#define S_CONEATK (S_CONEUP+1)
S_NORMAL (CONE, 'B', 3, NULL , &States[S_CONEATK+1]),
S_NORMAL (CONE, 'C', 4, NULL , &States[S_CONEATK+2]),
S_NORMAL (CONE, 'D', 3, NULL , &States[S_CONEATK+3]),
S_NORMAL (CONE, 'E', 5, NULL , &States[S_CONEATK+4]),
S_NORMAL (CONE, 'F', 3, A_FireConePL1 , &States[S_CONEATK+5]),
S_NORMAL (CONE, 'G', 3, NULL , &States[S_CONEATK+6]),
S_NORMAL (CONE, 'A', 9, NULL , &States[S_CONEATK+7]),
S_NORMAL (CONE, 'A', 10, A_ReFire , &States[S_CONEREADY]),
};
IMPLEMENT_ACTOR (AMWeapFrost, Hexen, 53, 36)
PROP_Flags (MF_SPECIAL)
PROP_Flags5 (MF5_BLOODSPLATTER)
PROP_SpawnState (S_COS1)
PROP_Weapon_SelectionOrder (1700)
PROP_Weapon_AmmoUse1 (3)
PROP_Weapon_AmmoGive1 (25)
PROP_Weapon_UpState (S_CONEUP)
PROP_Weapon_DownState (S_CONEDOWN)
PROP_Weapon_ReadyState (S_CONEREADY)
PROP_Weapon_AtkState (S_CONEATK)
PROP_Weapon_HoldAtkState (S_CONEATK+2)
PROP_Weapon_Kickback (150)
PROP_Weapon_YAdjust (20)
PROP_Weapon_MoveCombatDist (19000000)
PROP_Weapon_AmmoType1 ("Mana1")
PROP_Weapon_ProjectileType ("FrostMissile")
PROP_Inventory_PickupMessage("$TXT_WEAPON_M2")
END_DEFAULTS
// Frost Missile ------------------------------------------------------------
class AFrostMissile : public AActor
{
DECLARE_ACTOR (AFrostMissile, AActor)
DECLARE_CLASS (AFrostMissile, AActor)
public:
int DoSpecialDamage (AActor *victim, int damage);
};
FState AFrostMissile::States[] =
{
S_BRIGHT (SHRD, 'A', 2, NULL , &States[1]),
S_BRIGHT (SHRD, 'A', 3, A_ShedShard , &States[2]),
S_BRIGHT (SHRD, 'B', 3, NULL , &States[3]),
S_BRIGHT (SHRD, 'C', 3, NULL , &States[0]),
#define S_SHARDFXE1_1 (4)
S_BRIGHT (SHEX, 'A', 5, NULL , &States[S_SHARDFXE1_1+1]),
S_BRIGHT (SHEX, 'B', 5, NULL , &States[S_SHARDFXE1_1+2]),
S_BRIGHT (SHEX, 'C', 5, NULL , &States[S_SHARDFXE1_1+3]),
S_BRIGHT (SHEX, 'D', 5, NULL , &States[S_SHARDFXE1_1+4]),
S_BRIGHT (SHEX, 'E', 5, NULL , NULL),
};
IMPLEMENT_ACTOR (AFrostMissile, Hexen, -1, 0)
PROP_SpeedFixed (25)
PROP_RadiusFixed (13)
PROP_HeightFixed (8)
PROP_Damage (1)
PROP_DamageType (NAME_Ice)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS)
PROP_SpawnState (0)
PROP_DeathState (S_SHARDFXE1_1)
PROP_DeathSound ("MageShardsExplode")
END_DEFAULTS
IMPLEMENT_CLASS (AFrostMissile)
int AFrostMissile::DoSpecialDamage (AActor *victim, int damage)
{
@ -124,26 +41,6 @@ int AFrostMissile::DoSpecialDamage (AActor *victim, int damage)
return damage;
}
// Ice Shard ----------------------------------------------------------------
class AIceShard : public AFrostMissile
{
DECLARE_ACTOR (AIceShard, AFrostMissile)
};
FState AIceShard::States[] =
{
S_BRIGHT (SHRD, 'A', 3, NULL , &States[1]),
S_BRIGHT (SHRD, 'B', 3, NULL , &States[2]),
S_BRIGHT (SHRD, 'C', 3, NULL , &States[0]),
};
IMPLEMENT_ACTOR (AIceShard, Hexen, -1, 65)
PROP_DamageType (NAME_Ice)
PROP_Flags2 (MF2_NOTELEPORT)
PROP_SpawnState (0)
END_DEFAULTS
//============================================================================
//
// A_FireConePL1

View file

@ -29,93 +29,9 @@ void A_LastZap (AActor *);
void A_LightningRemove (AActor *);
void A_FreeTargMobj (AActor *);
// The Mage's Lightning Arc of Death ----------------------------------------
class AMWeapLightning : public AMageWeapon
{
DECLARE_ACTOR (AMWeapLightning, AMageWeapon)
};
FState AMWeapLightning::States[] =
{
#define S_MW_LIGHTNING1 0
S_BRIGHT (WMLG, 'A', 4, NULL , &States[S_MW_LIGHTNING1+1]),
S_BRIGHT (WMLG, 'B', 4, NULL , &States[S_MW_LIGHTNING1+2]),
S_BRIGHT (WMLG, 'C', 4, NULL , &States[S_MW_LIGHTNING1+3]),
S_BRIGHT (WMLG, 'D', 4, NULL , &States[S_MW_LIGHTNING1+4]),
S_BRIGHT (WMLG, 'E', 4, NULL , &States[S_MW_LIGHTNING1+5]),
S_BRIGHT (WMLG, 'F', 4, NULL , &States[S_MW_LIGHTNING1+6]),
S_BRIGHT (WMLG, 'G', 4, NULL , &States[S_MW_LIGHTNING1+7]),
S_BRIGHT (WMLG, 'H', 4, NULL , &States[S_MW_LIGHTNING1]),
#define S_MLIGHTNINGREADY (S_MW_LIGHTNING1+8)
S_BRIGHT (MLNG, 'A', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+1]),
S_BRIGHT (MLNG, 'A', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+2]),
S_BRIGHT (MLNG, 'A', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+3]),
S_BRIGHT (MLNG, 'A', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+4]),
S_BRIGHT (MLNG, 'A', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+5]),
S_BRIGHT (MLNG, 'A', 1, A_LightningReady , &States[S_MLIGHTNINGREADY+6]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+7]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+8]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+9]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+10]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+11]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+12]),
S_BRIGHT (MLNG, 'C', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+13]),
S_BRIGHT (MLNG, 'C', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+14]),
S_BRIGHT (MLNG, 'C', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+15]),
S_BRIGHT (MLNG, 'C', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+16]),
S_BRIGHT (MLNG, 'C', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+17]),
S_BRIGHT (MLNG, 'C', 1, A_LightningReady , &States[S_MLIGHTNINGREADY+18]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+19]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+20]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+21]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+22]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY+23]),
S_BRIGHT (MLNG, 'B', 1, A_WeaponReady , &States[S_MLIGHTNINGREADY]),
#define S_MLIGHTNINGDOWN (S_MLIGHTNINGREADY+24)
S_BRIGHT (MLNG, 'A', 1, A_Lower , &States[S_MLIGHTNINGDOWN]),
#define S_MLIGHTNINGUP (S_MLIGHTNINGDOWN+1)
S_BRIGHT (MLNG, 'A', 1, A_Raise , &States[S_MLIGHTNINGUP]),
#define S_MLIGHTNINGATK (S_MLIGHTNINGUP+1)
S_BRIGHT (MLNG, 'D', 3, NULL , &States[S_MLIGHTNINGATK+1]),
S_BRIGHT (MLNG, 'E', 3, NULL , &States[S_MLIGHTNINGATK+2]),
S_BRIGHT (MLNG, 'F', 4, A_MLightningAttack , &States[S_MLIGHTNINGATK+3]),
S_BRIGHT (MLNG, 'G', 4, NULL , &States[S_MLIGHTNINGATK+4]),
S_BRIGHT (MLNG, 'H', 3, NULL , &States[S_MLIGHTNINGATK+5]),
S_BRIGHT (MLNG, 'I', 3, NULL , &States[S_MLIGHTNINGATK+6]),
S_BRIGHT2 (MLNG, 'I', 6, NULL , &States[S_MLIGHTNINGATK+7], 0, 199),
S_BRIGHT2 (MLNG, 'C', 2, NULL , &States[S_MLIGHTNINGATK+8], 0, 55),
S_BRIGHT2 (MLNG, 'B', 2, NULL , &States[S_MLIGHTNINGATK+9], 0, 50),
S_BRIGHT2 (MLNG, 'B', 2, NULL , &States[S_MLIGHTNINGATK+10], 0, 45),
S_BRIGHT2 (MLNG, 'B', 2, NULL , &States[S_MLIGHTNINGREADY], 0, 40),
};
IMPLEMENT_ACTOR (AMWeapLightning, Hexen, 8040, 0)
PROP_Flags (MF_SPECIAL|MF_NOGRAVITY)
PROP_SpawnState (S_MW_LIGHTNING1)
PROP_Weapon_SelectionOrder (1100)
PROP_Weapon_AmmoUse1 (5)
PROP_Weapon_AmmoGive1 (25)
PROP_Weapon_UpState (S_MLIGHTNINGUP)
PROP_Weapon_DownState (S_MLIGHTNINGDOWN)
PROP_Weapon_ReadyState (S_MLIGHTNINGREADY)
PROP_Weapon_AtkState (S_MLIGHTNINGATK)
PROP_Weapon_Kickback (0)
PROP_Weapon_YAdjust (20)
PROP_Weapon_MoveCombatDist (23000000)
PROP_Weapon_AmmoType1 ("Mana2")
PROP_Weapon_ProjectileType ("LightningFloor")
PROP_Inventory_PickupMessage("$TXT_WEAPON_M3")
END_DEFAULTS
// Lightning ----------------------------------------------------------------
IMPLEMENT_ABSTRACT_ACTOR (ALightning)
IMPLEMENT_CLASS(ALightning)
int ALightning::SpecialMissileHit (AActor *thing)
{
@ -170,150 +86,16 @@ int ALightning::SpecialMissileHit (AActor *thing)
return 1; // lightning zaps through all sprites
}
// Ceiling Lightning --------------------------------------------------------
class ALightningCeiling : public ALightning
{
DECLARE_ACTOR (ALightningCeiling, ALightning)
};
FState ALightningCeiling::States[] =
{
#define S_LIGHTNING_CEILING1 0
S_BRIGHT (MLFX, 'A', 2, A_LightningZap , &States[S_LIGHTNING_CEILING1+1]),
S_BRIGHT (MLFX, 'B', 2, A_LightningClip , &States[S_LIGHTNING_CEILING1+2]),
S_BRIGHT (MLFX, 'C', 2, A_LightningClip , &States[S_LIGHTNING_CEILING1+3]),
S_BRIGHT (MLFX, 'D', 2, A_LightningClip , &States[S_LIGHTNING_CEILING1]),
#define S_LIGHTNING_C_X1 (S_LIGHTNING_CEILING1+4)
S_BRIGHT (MLF2, 'A', 2, A_LightningRemove , &States[S_LIGHTNING_C_X1+1]),
S_BRIGHT (MLF2, 'B', 3, NULL , &States[S_LIGHTNING_C_X1+2]),
S_BRIGHT (MLF2, 'C', 3, NULL , &States[S_LIGHTNING_C_X1+3]),
S_BRIGHT (MLF2, 'D', 3, NULL , &States[S_LIGHTNING_C_X1+4]),
S_BRIGHT (MLF2, 'E', 3, NULL , &States[S_LIGHTNING_C_X1+5]),
S_BRIGHT (MLF2, 'K', 3, NULL , &States[S_LIGHTNING_C_X1+6]),
S_BRIGHT (MLF2, 'L', 3, NULL , &States[S_LIGHTNING_C_X1+7]),
S_BRIGHT (MLF2, 'M', 3, NULL , &States[S_LIGHTNING_C_X1+8]),
S_NORMAL (ACLO, 'E', 35, NULL , &States[S_LIGHTNING_C_X1+9]),
S_BRIGHT (MLF2, 'N', 3, NULL , &States[S_LIGHTNING_C_X1+10]),
S_BRIGHT (MLF2, 'O', 3, NULL , &States[S_LIGHTNING_C_X1+11]),
S_BRIGHT (MLF2, 'P', 4, NULL , &States[S_LIGHTNING_C_X1+12]),
S_BRIGHT (MLF2, 'Q', 3, NULL , &States[S_LIGHTNING_C_X1+13]),
S_BRIGHT (MLF2, 'P', 3, NULL , &States[S_LIGHTNING_C_X1+14]),
S_BRIGHT (MLF2, 'Q', 4, NULL , &States[S_LIGHTNING_C_X1+15]),
S_BRIGHT (MLF2, 'P', 3, NULL , &States[S_LIGHTNING_C_X1+16]),
S_BRIGHT (MLF2, 'O', 3, NULL , &States[S_LIGHTNING_C_X1+17]),
S_BRIGHT (MLF2, 'P', 3, NULL , &States[S_LIGHTNING_C_X1+18]),
S_BRIGHT (MLF2, 'P', 1, A_HideThing , &States[S_LIGHTNING_C_X1+19]),
S_NORMAL (ACLO, 'E', 1050, A_FreeTargMobj , NULL),
};
IMPLEMENT_ACTOR (ALightningCeiling, Hexen, -1, 0)
PROP_SpawnHealth (144)
PROP_SpeedFixed (25)
PROP_RadiusFixed (16)
PROP_HeightFixed (40)
PROP_Damage (8)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS)
PROP_Flags3 (MF3_CEILINGHUGGER)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_LIGHTNING_CEILING1)
PROP_DeathState (S_LIGHTNING_C_X1)
END_DEFAULTS
// Floor Lightning ----------------------------------------------------------
class ALightningFloor : public ALightning
{
DECLARE_ACTOR (ALightningFloor, ALightning)
};
FState ALightningFloor::States[] =
{
#define S_LIGHTNING_FLOOR1 0
S_BRIGHT (MLFX, 'E', 2, A_LightningZap , &States[S_LIGHTNING_FLOOR1+1]),
S_BRIGHT (MLFX, 'F', 2, A_LightningClip , &States[S_LIGHTNING_FLOOR1+2]),
S_BRIGHT (MLFX, 'G', 2, A_LightningClip , &States[S_LIGHTNING_FLOOR1+3]),
S_BRIGHT (MLFX, 'H', 2, A_LightningClip , &States[S_LIGHTNING_FLOOR1]),
#define S_LIGHTNING_F_X1 (S_LIGHTNING_FLOOR1+4)
S_BRIGHT (MLF2, 'F', 2, A_LightningRemove , &States[S_LIGHTNING_F_X1+1]),
S_BRIGHT (MLF2, 'G', 3, NULL , &States[S_LIGHTNING_F_X1+2]),
S_BRIGHT (MLF2, 'H', 3, NULL , &States[S_LIGHTNING_F_X1+3]),
S_BRIGHT (MLF2, 'I', 3, NULL , &States[S_LIGHTNING_F_X1+4]),
S_BRIGHT (MLF2, 'J', 3, NULL , &States[S_LIGHTNING_F_X1+5]),
S_BRIGHT (MLF2, 'K', 3, NULL , &States[S_LIGHTNING_F_X1+6]),
S_BRIGHT (MLF2, 'L', 3, NULL , &States[S_LIGHTNING_F_X1+7]),
S_BRIGHT (MLF2, 'M', 3, NULL , &States[S_LIGHTNING_F_X1+8]),
S_NORMAL (ACLO, 'E', 20, NULL , &States[S_LIGHTNING_F_X1+9]),
S_BRIGHT (MLF2, 'N', 3, NULL , &States[S_LIGHTNING_F_X1+10]),
S_BRIGHT (MLF2, 'O', 3, NULL , &States[S_LIGHTNING_F_X1+11]),
S_BRIGHT (MLF2, 'P', 4, NULL , &States[S_LIGHTNING_F_X1+12]),
S_BRIGHT (MLF2, 'Q', 3, NULL , &States[S_LIGHTNING_F_X1+13]),
S_BRIGHT (MLF2, 'P', 3, NULL , &States[S_LIGHTNING_F_X1+14]),
S_BRIGHT (MLF2, 'Q', 4, A_LastZap , &States[S_LIGHTNING_F_X1+15]),
S_BRIGHT (MLF2, 'P', 3, NULL , &States[S_LIGHTNING_F_X1+16]),
S_BRIGHT (MLF2, 'O', 3, NULL , &States[S_LIGHTNING_F_X1+17]),
S_BRIGHT (MLF2, 'P', 3, NULL , &States[S_LIGHTNING_F_X1+18]),
S_BRIGHT (MLF2, 'P', 1, A_HideThing , &ALightningCeiling::States[S_LIGHTNING_C_X1+19]),
};
IMPLEMENT_ACTOR (ALightningFloor, Hexen, -1, 0)
PROP_SpawnHealth (144)
PROP_SpeedFixed (25)
PROP_RadiusFixed (16)
PROP_HeightFixed (40)
PROP_Damage (8)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS)
PROP_Flags3 (MF3_FLOORHUGGER)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_LIGHTNING_FLOOR1)
PROP_DeathState (S_LIGHTNING_F_X1)
END_DEFAULTS
// Lightning Zap ------------------------------------------------------------
class ALightningZap : public AActor
{
DECLARE_ACTOR (ALightningZap, AActor)
DECLARE_CLASS (ALightningZap, AActor)
public:
int SpecialMissileHit (AActor *thing);
};
FState ALightningZap::States[] =
{
#define S_LIGHTNING_ZAP1 0
S_BRIGHT (MLFX, 'I', 2, A_ZapMimic , &States[S_LIGHTNING_ZAP1+1]),
S_BRIGHT (MLFX, 'J', 2, A_ZapMimic , &States[S_LIGHTNING_ZAP1+2]),
S_BRIGHT (MLFX, 'K', 2, A_ZapMimic , &States[S_LIGHTNING_ZAP1+3]),
S_BRIGHT (MLFX, 'L', 2, A_ZapMimic , &States[S_LIGHTNING_ZAP1+4]),
S_BRIGHT (MLFX, 'M', 2, A_ZapMimic , &States[S_LIGHTNING_ZAP1]),
#define S_LIGHTNING_ZAP_X1 (S_LIGHTNING_ZAP1+5)
S_BRIGHT (MLFX, 'N', 2, NULL , &States[S_LIGHTNING_ZAP_X1+1]),
S_BRIGHT (MLFX, 'O', 2, NULL , &States[S_LIGHTNING_ZAP_X1+2]),
S_BRIGHT (MLFX, 'P', 2, NULL , &States[S_LIGHTNING_ZAP_X1+3]),
S_BRIGHT (MLFX, 'Q', 2, NULL , &States[S_LIGHTNING_ZAP_X1+4]),
S_BRIGHT (MLFX, 'R', 2, NULL , &States[S_LIGHTNING_ZAP_X1+5]),
S_BRIGHT (MLFX, 'S', 2, NULL , &States[S_LIGHTNING_ZAP_X1+6]),
S_BRIGHT (MLFX, 'T', 2, NULL , &States[S_LIGHTNING_ZAP_X1+7]),
S_BRIGHT (MLFX, 'U', 2, NULL , NULL),
};
IMPLEMENT_ACTOR (ALightningZap, Hexen, -1, 0)
PROP_RadiusFixed (15)
PROP_HeightFixed (35)
PROP_Damage (2)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_LIGHTNING_ZAP1)
PROP_DeathState (S_LIGHTNING_ZAP_X1+7)
END_DEFAULTS
IMPLEMENT_CLASS (ALightningZap)
int ALightningZap::SpecialMissileHit (AActor *thing)
{
@ -486,8 +268,8 @@ void A_MLightningAttack2 (AActor *actor)
{
AActor *fmo, *cmo;
fmo = P_SpawnPlayerMissile (actor, RUNTIME_CLASS(ALightningFloor));
cmo = P_SpawnPlayerMissile (actor, RUNTIME_CLASS(ALightningCeiling));
fmo = P_SpawnPlayerMissile (actor, PClass::FindClass ("LightningFloor"));
cmo = P_SpawnPlayerMissile (actor, PClass::FindClass ("LightningCeiling"));
if (fmo)
{
fmo->special1 = 0;
@ -560,7 +342,7 @@ void A_LastZap (AActor *actor)
mo = Spawn<ALightningZap> (actor->x, actor->y, actor->z, ALLOW_REPLACE);
if (mo)
{
mo->SetState (&ALightningZap::States[S_LIGHTNING_ZAP_X1]);
mo->SetState (mo->FindState ("Death"));
mo->momz = 40*FRACUNIT;
mo->Damage = 0;
}

View file

@ -22,16 +22,14 @@ static divline_t BlockCheckLine;
class AMageWeaponPiece : public AFourthWeaponPiece
{
DECLARE_STATELESS_ACTOR (AMageWeaponPiece, AFourthWeaponPiece)
DECLARE_CLASS (AMageWeaponPiece, AFourthWeaponPiece)
public:
void BeginPlay ();
protected:
bool MatchPlayerClass (AActor *toucher);
};
IMPLEMENT_STATELESS_ACTOR (AMageWeaponPiece, Hexen, -1, 0)
PROP_Inventory_PickupMessage("$TXT_BLOODSCOURGE_PIECE")
END_DEFAULTS
IMPLEMENT_CLASS (AMageWeaponPiece)
bool AMageWeaponPiece::MatchPlayerClass (AActor *toucher)
{
@ -43,21 +41,12 @@ bool AMageWeaponPiece::MatchPlayerClass (AActor *toucher)
class AMWeaponPiece1 : public AMageWeaponPiece
{
DECLARE_ACTOR (AMWeaponPiece1, AMageWeaponPiece)
DECLARE_CLASS (AMWeaponPiece1, AMageWeaponPiece)
public:
void BeginPlay ();
};
FState AMWeaponPiece1::States[] =
{
S_BRIGHT (WMS1, 'A', -1, NULL , NULL),
};
IMPLEMENT_ACTOR (AMWeaponPiece1, Hexen, 21, 37)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
IMPLEMENT_CLASS (AMWeaponPiece1)
void AMWeaponPiece1::BeginPlay ()
{
@ -69,21 +58,12 @@ void AMWeaponPiece1::BeginPlay ()
class AMWeaponPiece2 : public AMageWeaponPiece
{
DECLARE_ACTOR (AMWeaponPiece2, AMageWeaponPiece)
DECLARE_CLASS (AMWeaponPiece2, AMageWeaponPiece)
public:
void BeginPlay ();
};
FState AMWeaponPiece2::States[] =
{
S_BRIGHT (WMS2, 'A', -1, NULL , NULL),
};
IMPLEMENT_ACTOR (AMWeaponPiece2, Hexen, 22, 38)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
IMPLEMENT_CLASS (AMWeaponPiece2)
void AMWeaponPiece2::BeginPlay ()
{
@ -95,21 +75,12 @@ void AMWeaponPiece2::BeginPlay ()
class AMWeaponPiece3 : public AMageWeaponPiece
{
DECLARE_ACTOR (AMWeaponPiece3, AMageWeaponPiece)
DECLARE_CLASS (AMWeaponPiece3, AMageWeaponPiece)
public:
void BeginPlay ();
};
FState AMWeaponPiece3::States[] =
{
S_BRIGHT (WMS3, 'A', -1, NULL , NULL),
};
IMPLEMENT_ACTOR (AMWeaponPiece3, Hexen, 23, 39)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
IMPLEMENT_CLASS (AMWeaponPiece3)
void AMWeaponPiece3::BeginPlay ()
{
@ -117,31 +88,11 @@ void AMWeaponPiece3::BeginPlay ()
PieceValue = WPIECE3<<6;
}
// An actor that spawns the three pieces of the mage's fourth weapon --------
// This gets spawned if weapon drop is on so that other players can pick up
// this player's weapon.
class ABloodscourgeDrop : public AActor
{
DECLARE_ACTOR (ABloodscourgeDrop, AActor)
};
FState ABloodscourgeDrop::States[] =
{
S_NORMAL (TNT1, 'A', 1, NULL, &States[1]),
S_NORMAL (TNT1, 'A', 1, A_DropBloodscourgePieces, NULL)
};
IMPLEMENT_ACTOR (ABloodscourgeDrop, Hexen, -1, 0)
PROP_SpawnState (0)
END_DEFAULTS
// The Mages's Staff (Bloodscourge) -----------------------------------------
class AMWeapBloodscourge : public AMageWeapon
{
DECLARE_ACTOR (AMWeapBloodscourge, AMageWeapon)
DECLARE_CLASS (AMWeapBloodscourge, AMageWeapon)
public:
void Serialize (FArchive &arc)
{
@ -155,84 +106,7 @@ public:
BYTE MStaffCount;
};
FState AMWeapBloodscourge::States[] =
{
// Dummy state, because the fourth weapon does not appear in a level directly.
S_NORMAL (TNT1, 'A', -1, NULL , NULL),
#define S_MSTAFFREADY 1
S_NORMAL (MSTF, 'A', 1, A_WeaponReady , &States[S_MSTAFFREADY+1]),
S_NORMAL (MSTF, 'A', 1, A_WeaponReady , &States[S_MSTAFFREADY+2]),
S_NORMAL (MSTF, 'A', 1, A_WeaponReady , &States[S_MSTAFFREADY+3]),
S_NORMAL (MSTF, 'A', 1, A_WeaponReady , &States[S_MSTAFFREADY+4]),
S_NORMAL (MSTF, 'A', 1, A_WeaponReady , &States[S_MSTAFFREADY+5]),
S_NORMAL (MSTF, 'A', 1, A_WeaponReady , &States[S_MSTAFFREADY+6]),
S_NORMAL (MSTF, 'B', 1, A_WeaponReady , &States[S_MSTAFFREADY+7]),
S_NORMAL (MSTF, 'B', 1, A_WeaponReady , &States[S_MSTAFFREADY+8]),
S_NORMAL (MSTF, 'B', 1, A_WeaponReady , &States[S_MSTAFFREADY+9]),
S_NORMAL (MSTF, 'B', 1, A_WeaponReady , &States[S_MSTAFFREADY+10]),
S_NORMAL (MSTF, 'B', 1, A_WeaponReady , &States[S_MSTAFFREADY+11]),
S_NORMAL (MSTF, 'B', 1, A_WeaponReady , &States[S_MSTAFFREADY+12]),
S_NORMAL (MSTF, 'C', 1, A_WeaponReady , &States[S_MSTAFFREADY+13]),
S_NORMAL (MSTF, 'C', 1, A_WeaponReady , &States[S_MSTAFFREADY+14]),
S_NORMAL (MSTF, 'C', 1, A_WeaponReady , &States[S_MSTAFFREADY+15]),
S_NORMAL (MSTF, 'C', 1, A_WeaponReady , &States[S_MSTAFFREADY+16]),
S_NORMAL (MSTF, 'C', 1, A_WeaponReady , &States[S_MSTAFFREADY+17]),
S_NORMAL (MSTF, 'C', 1, A_WeaponReady , &States[S_MSTAFFREADY+18]),
S_NORMAL (MSTF, 'D', 1, A_WeaponReady , &States[S_MSTAFFREADY+19]),
S_NORMAL (MSTF, 'D', 1, A_WeaponReady , &States[S_MSTAFFREADY+20]),
S_NORMAL (MSTF, 'D', 1, A_WeaponReady , &States[S_MSTAFFREADY+21]),
S_NORMAL (MSTF, 'D', 1, A_WeaponReady , &States[S_MSTAFFREADY+22]),
S_NORMAL (MSTF, 'D', 1, A_WeaponReady , &States[S_MSTAFFREADY+23]),
S_NORMAL (MSTF, 'D', 1, A_WeaponReady , &States[S_MSTAFFREADY+24]),
S_NORMAL (MSTF, 'E', 1, A_WeaponReady , &States[S_MSTAFFREADY+25]),
S_NORMAL (MSTF, 'E', 1, A_WeaponReady , &States[S_MSTAFFREADY+26]),
S_NORMAL (MSTF, 'E', 1, A_WeaponReady , &States[S_MSTAFFREADY+27]),
S_NORMAL (MSTF, 'E', 1, A_WeaponReady , &States[S_MSTAFFREADY+28]),
S_NORMAL (MSTF, 'E', 1, A_WeaponReady , &States[S_MSTAFFREADY+29]),
S_NORMAL (MSTF, 'E', 1, A_WeaponReady , &States[S_MSTAFFREADY+30]),
S_NORMAL (MSTF, 'F', 1, A_WeaponReady , &States[S_MSTAFFREADY+31]),
S_NORMAL (MSTF, 'F', 1, A_WeaponReady , &States[S_MSTAFFREADY+32]),
S_NORMAL (MSTF, 'F', 1, A_WeaponReady , &States[S_MSTAFFREADY+33]),
S_NORMAL (MSTF, 'F', 1, A_WeaponReady , &States[S_MSTAFFREADY+34]),
S_NORMAL (MSTF, 'F', 1, A_WeaponReady , &States[S_MSTAFFREADY]),
#define S_MSTAFFDOWN (S_MSTAFFREADY+35)
S_NORMAL (MSTF, 'A', 1, A_Lower , &States[S_MSTAFFDOWN]),
#define S_MSTAFFUP (S_MSTAFFDOWN+1)
S_NORMAL (MSTF, 'A', 1, A_Raise , &States[S_MSTAFFUP]),
#define S_MSTAFFATK (S_MSTAFFUP+1)
S_NORMAL2 (MSTF, 'G', 4, NULL , &States[S_MSTAFFATK+1], 0, 40),
S_BRIGHT2 (MSTF, 'H', 4, A_MStaffAttack , &States[S_MSTAFFATK+2], 0, 48),
S_BRIGHT2 (MSTF, 'H', 2, A_MStaffPalette , &States[S_MSTAFFATK+3], 0, 48),
S_NORMAL2 (MSTF, 'I', 2, A_MStaffPalette , &States[S_MSTAFFATK+4], 0, 48),
S_NORMAL2 (MSTF, 'I', 2, A_MStaffPalette , &States[S_MSTAFFATK+5], 0, 48),
S_NORMAL2 (MSTF, 'I', 1, NULL , &States[S_MSTAFFATK+6], 0, 40),
S_NORMAL2 (MSTF, 'J', 5, NULL , &States[S_MSTAFFREADY], 0, 36)
};
IMPLEMENT_ACTOR (AMWeapBloodscourge, Hexen, -1, 0)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (0)
PROP_Weapon_SelectionOrder (3100)
PROP_Weapon_Flags (WIF_PRIMARY_USES_BOTH)
PROP_Weapon_AmmoUse1 (15)
PROP_Weapon_AmmoUse2 (15)
PROP_Weapon_UpState (S_MSTAFFUP)
PROP_Weapon_DownState (S_MSTAFFDOWN)
PROP_Weapon_ReadyState (S_MSTAFFREADY)
PROP_Weapon_AtkState (S_MSTAFFATK)
PROP_Weapon_Kickback (150)
PROP_Weapon_YAdjust (20)
PROP_Weapon_MoveCombatDist (20000000)
PROP_Weapon_AmmoType1 ("Mana1")
PROP_Weapon_AmmoType2 ("Mana2")
PROP_Weapon_ProjectileType ("MageStaffFX2")
PROP_Inventory_PickupMessage("$TXT_WEAPON_M4")
END_DEFAULTS
IMPLEMENT_CLASS (AMWeapBloodscourge)
// Mage Staff FX2 (Bloodscourge) --------------------------------------------
@ -243,7 +117,7 @@ void A_BeAdditive (AActor *self)
class AMageStaffFX2 : public AActor
{
DECLARE_ACTOR (AMageStaffFX2, AActor)
DECLARE_CLASS(AMageStaffFX2, AActor)
public:
void GetExplodeParms (int &damage, int &dist, bool &hurtSource);
int SpecialMissileHit (AActor *victim);
@ -251,36 +125,7 @@ public:
bool SpecialBlastHandling (AActor *source, fixed_t strength);
};
FState AMageStaffFX2::States[] =
{
#define S_MSTAFF_FX2_1 0
S_BRIGHT (MSP2, 'A', 2, A_MStaffTrack , &States[S_MSTAFF_FX2_1+1]),
S_BRIGHT (MSP2, 'B', 2, A_MStaffTrack , &States[S_MSTAFF_FX2_1+2]),
S_BRIGHT (MSP2, 'C', 2, A_MStaffTrack , &States[S_MSTAFF_FX2_1+3]),
S_BRIGHT (MSP2, 'D', 2, A_MStaffTrack , &States[S_MSTAFF_FX2_1]),
#define S_MSTAFF_FX2_X1 (S_MSTAFF_FX2_1+4)
S_BRIGHT (MSP2, 'E', 4, A_BeAdditive , &States[S_MSTAFF_FX2_X1+1]),
S_BRIGHT (MSP2, 'F', 5, A_Explode , &States[S_MSTAFF_FX2_X1+2]),
S_BRIGHT (MSP2, 'G', 5, NULL , &States[S_MSTAFF_FX2_X1+3]),
S_BRIGHT (MSP2, 'H', 5, NULL , &States[S_MSTAFF_FX2_X1+4]),
S_BRIGHT (MSP2, 'I', 4, NULL , NULL),
};
IMPLEMENT_ACTOR (AMageStaffFX2, Hexen, -1, 0)
PROP_SpeedFixed (17)
PROP_HeightFixed (8)
PROP_Damage (4)
PROP_DamageType (NAME_Fire)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS|MF2_SEEKERMISSILE)
PROP_Flags4 (MF4_EXTREMEDEATH)
PROP_SpawnState (S_MSTAFF_FX2_1)
PROP_DeathState (S_MSTAFF_FX2_X1)
PROP_DeathSound ("MageStaffExplode")
END_DEFAULTS
IMPLEMENT_CLASS (AMageStaffFX2)
void AMageStaffFX2::GetExplodeParms (int &damage, int &dist, bool &hurtSource)
{

View file

@ -15,100 +15,16 @@ static FRandom pr_smoke ("MWandSmoke");
void A_MWandAttack (AActor *actor);
// The Mage's Wand ----------------------------------------------------------
class AMWeapWand : public AMageWeapon
{
DECLARE_ACTOR (AMWeapWand, AMageWeapon)
};
FState AMWeapWand::States[] =
{
#define S_MWANDREADY 0
S_NORMAL (MWND, 'A', 1, A_WeaponReady , &States[S_MWANDREADY]),
#define S_MWANDDOWN (S_MWANDREADY+1)
S_NORMAL (MWND, 'A', 1, A_Lower , &States[S_MWANDDOWN]),
#define S_MWANDUP (S_MWANDDOWN+1)
S_NORMAL (MWND, 'A', 1, A_Raise , &States[S_MWANDUP]),
#define S_MWANDATK (S_MWANDUP+1)
S_NORMAL (MWND, 'A', 6, NULL , &States[S_MWANDATK+1]),
S_BRIGHT2 (MWND, 'B', 6, A_MWandAttack , &States[S_MWANDATK+2], 0, 48),
S_NORMAL2 (MWND, 'A', 3, NULL , &States[S_MWANDATK+3], 0, 40),
S_NORMAL2 (MWND, 'A', 3, A_ReFire , &States[S_MWANDREADY], 0, 36),
};
IMPLEMENT_ACTOR (AMWeapWand, Hexen, -1, 0)
PROP_Weapon_SelectionOrder (3600)
PROP_Weapon_UpState (S_MWANDUP)
PROP_Weapon_DownState (S_MWANDDOWN)
PROP_Weapon_ReadyState (S_MWANDREADY)
PROP_Weapon_AtkState (S_MWANDATK)
PROP_Weapon_Kickback (0)
PROP_Weapon_YAdjust (9)
PROP_Weapon_MoveCombatDist (25000000)
PROP_Weapon_ProjectileType ("MageWandMissile")
END_DEFAULTS
// Wand Smoke ---------------------------------------------------------------
class AMageWandSmoke : public AActor
{
DECLARE_ACTOR (AMageWandSmoke, AActor)
};
FState AMageWandSmoke::States[] =
{
S_NORMAL (MWND, 'C', 4, NULL , &States[1]),
S_NORMAL (MWND, 'D', 4, NULL , &States[2]),
S_NORMAL (MWND, 'C', 4, NULL , &States[3]),
S_NORMAL (MWND, 'D', 4, NULL , NULL),
};
IMPLEMENT_ACTOR (AMageWandSmoke, Hexen, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_SHADOW)
PROP_Flags2 (MF2_NOTELEPORT|MF2_CANNOTPUSH|MF2_NODMGTHRUST)
PROP_SpawnState (0)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_SHADOW)
END_DEFAULTS
// Wand Missile -------------------------------------------------------------
class AMageWandMissile : public AActor
{
DECLARE_ACTOR (AMageWandMissile, AActor)
DECLARE_CLASS(AMageWandMissile, AActor)
public:
void Tick ();
};
FState AMageWandMissile::States[] =
{
#define S_MWAND_MISSILE 0
S_BRIGHT (MWND, 'C', 4, NULL , &States[S_MWAND_MISSILE+1]),
S_BRIGHT (MWND, 'D', 4, NULL , &States[S_MWAND_MISSILE]),
#define S_MWANDPUFF (S_MWAND_MISSILE+2)
S_BRIGHT (MWND, 'E', 4, NULL , &States[S_MWANDPUFF+1]),
S_BRIGHT (MWND, 'F', 3, NULL , &States[S_MWANDPUFF+2]),
S_BRIGHT (MWND, 'G', 4, NULL , &States[S_MWANDPUFF+3]),
S_BRIGHT (MWND, 'H', 3, NULL , &States[S_MWANDPUFF+4]),
S_BRIGHT (MWND, 'I', 4, NULL , NULL),
};
IMPLEMENT_ACTOR (AMageWandMissile, Hexen, -1, 0)
PROP_SpeedFixed (184)
PROP_RadiusFixed (12)
PROP_HeightFixed (8)
PROP_Damage (2)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_RIP|MF2_CANNOTPUSH|MF2_NODMGTHRUST|MF2_IMPACT|MF2_PCROSS)
PROP_SpawnState (S_MWAND_MISSILE)
PROP_DeathState (S_MWANDPUFF)
END_DEFAULTS
IMPLEMENT_CLASS (AMageWandMissile)
void AMageWandMissile::Tick ()
{
@ -167,7 +83,7 @@ void AMageWandMissile::Tick ()
{
hitz = floorz;
}
Spawn<AMageWandSmoke> (x, y, hitz, ALLOW_REPLACE);
Spawn ("MageWandSmoke", x, y, hitz, ALLOW_REPLACE);
}
}
}

View file

@ -0,0 +1,89 @@
// The Mage's Frost Cone ----------------------------------------------------
ACTOR MWeapFrost : MageWeapon 53
{
Game Hexen
SpawnID 36
+BLOODSPLATTER
Weapon.SelectionOrder 1700
Weapon.AmmoUse1 3
Weapon.AmmoGive1 25
Weapon.KickBack 150
Weapon.YAdjust 20
Weapon.AmmoType1 "Mana1"
Inventory.PickupMessage "$TXT_WEAPON_M2"
action native A_FireConePL1();
States
{
Spawn:
WMCS ABC 8 Bright
Loop
Select:
CONE A 1 A_Raise
Loop
Deselect:
CONE A 1 A_Lower
Loop
Ready:
CONE A 1 A_WeaponReady
Loop
Fire:
CONE B 3
CONE C 4
Hold:
CONE D 3
CONE E 5
CONE F 3 A_FireConePL1
CONE G 3
CONE A 9
CONE A 10 A_ReFire
Goto Ready
}
}
// Frost Missile ------------------------------------------------------------
ACTOR FrostMissile native
{
Speed 25
Radius 13
Height 8
Damage 1
DamageType "Ice"
Projectile
DeathSound "MageShardsExplode"
action native A_ShedShard();
States
{
Spawn:
SHRD A 2 Bright
SHRD A 3 Bright A_ShedShard
SHRD B 3 Bright
SHRD C 3 Bright
Loop
Death:
SHEX ABCDE 5 Bright
Stop
}
}
// Ice Shard ----------------------------------------------------------------
ACTOR IceShard : FrostMissile
{
Game Hexen
SpawnID 65
DamageType "Ice"
+NOTELEPORT
States
{
Spawn:
SHRD ABC 3 Bright
Loop
}
}

View file

@ -0,0 +1,148 @@
// The Mage's Lightning Arc of Death ----------------------------------------
ACTOR MWeapLightning : MageWeapon 8040
{
Game Hexen
+NOGRAVITY
Weapon.SelectionOrder 1100
Weapon.AmmoUse1 5
Weapon.AmmoGive1 25
Weapon.KickBack 0
Weapon.YAdjust 20
Weapon.AmmoType1 "Mana2"
Inventory.PickupMessage "$TXT_WEAPON_M3"
action native A_LightningReady();
action native A_MLightningAttack();
States
{
Spawn:
WMLG ABCDEFGH 4 Bright
Loop
Select:
MLNG A 1 Bright A_Raise
Loop
Deselect:
MLNG A 1 Bright A_Lower
Loop
Ready:
MLNG AAAAA 1 Bright A_WeaponReady
MLNG A 1 Bright A_LightningReady
MLNG BBBBBB 1 Bright A_WeaponReady
MLNG CCCCC 1 Bright A_WeaponReady
MLNG C 1 Bright A_LightningReady
MLNG BBBBBB 1 Bright A_WeaponReady
Loop
Fire:
MLNG DE 3 Bright
MLNG F 4 Bright A_MLightningAttack
MLNG G 4 Bright
MLNG HI 3 Bright
MLNG I 6 Bright Offset (0, 199)
MLNG C 2 Bright Offset (0, 55)
MLNG B 2 Bright Offset (0, 50)
MLNG B 2 Bright Offset (0, 45)
MLNG B 2 Bright Offset (0, 40)
Goto Ready
}
}
// Ceiling Lightning --------------------------------------------------------
ACTOR Lightning native
{
}
ACTOR LightningCeiling : Lightning
{
Health 144
Speed 25
Radius 16
Height 40
Damage 8
Projectile
+CEILINGHUGGER
RenderStyle Add
action native A_LightningZap();
action native A_LightningClip();
action native A_LightningRemove();
action native A_FreeTargMobj();
States
{
Spawn:
MLFX A 2 Bright A_LightningZap
MLFX BCD 2 Bright A_LightningClip
Loop
Death:
MLF2 A 2 Bright A_LightningRemove
MLF2 BCDEKLM 3 Bright
ACLO E 35
MLF2 NO 3 Bright
MLF2 P 4 Bright
MLF2 QP 3 Bright
MLF2 Q 4 Bright
MLF2 P 3 Bright
MLF2 O 3 Bright
MLF2 P 3 Bright
MLF2 P 1 Bright A_HideThing
ACLO E 1050 A_FreeTargMobj
Stop
}
}
// Floor Lightning ----------------------------------------------------------
ACTOR LightningFloor : LightningCeiling
{
-CEILINGHUGGER
+FLOORHUGGER
RenderStyle Add
action native A_LastZap();
States
{
Spawn:
MLFX E 2 Bright A_LightningZap
MLFX FGH 2 Bright A_LightningClip
Loop
Death:
MLF2 F 2 Bright A_LightningRemove
MLF2 GHIJKLM 3 Bright
ACLO E 20
MLF2 NO 3 Bright
MLF2 P 4 Bright
MLF2 QP 3 Bright
MLF2 Q 4 Bright A_LastZap
MLF2 POP 3 Bright
MLF2 P 1 Bright A_HideThing
Goto Super::Death + 19
}
}
// Lightning Zap ------------------------------------------------------------
ACTOR LightningZap native
{
Radius 15
Height 35
Damage 2
+NOBLOCKMAP +NOGRAVITY +DROPOFF +MISSILE
RenderStyle Add
action native A_ZapMimic();
States
{
Spawn:
MLFX IJKLM 2 Bright A_ZapMimic
Loop
Death:
MLFX NOPQRSTU 2 Bright
Stop
}
}

View file

@ -0,0 +1,139 @@
// Mage Weapon Piece --------------------------------------------------------
ACTOR MageWeaponPiece : FourthWeaponPiece native
{
Inventory.PickupMessage "$TXT_BLOODSCOURGE_PIECE"
}
// Mage Weapon Piece 1 ------------------------------------------------------
ACTOR MWeaponPiece1 : MageWeaponPiece 21 native
{
Game Hexen
SpawnID 37
+FLOATBOB
States
{
Spawn:
WMS1 A -1 Bright
Stop
}
}
// Mage Weapon Piece 2 ------------------------------------------------------
ACTOR MWeaponPiece2 : MageWeaponPiece 22 native
{
Game Hexen
SpawnID 38
+FLOATBOB
States
{
Spawn:
WMS2 A -1 Bright
Stop
}
}
// Mage Weapon Piece 3 ------------------------------------------------------
ACTOR MWeaponPiece3 : MageWeaponPiece 23 native
{
Game Hexen
SpawnID 39
+FLOATBOB
States
{
Spawn:
WMS3 A -1 Bright
Stop
}
}
// Bloodscourge Drop --------------------------------------------------------
ACTOR BloodscourgeDrop
{
action native A_DropBloodscourgePieces();
States
{
Spawn:
TNT1 A 1
TNT1 A 1 A_DropBloodscourgePieces
Stop
}
}
// The Mages's Staff (Bloodscourge) -----------------------------------------
ACTOR MWeapBloodscourge : MageWeapon native
{
Weapon.SelectionOrder 3100
Weapon.AmmoUse1 15
Weapon.AmmoUse2 15
Weapon.KickBack 150
Weapon.YAdjust 20
Weapon.AmmoType1 "Mana1"
Weapon.AmmoType2 "Mana2"
+WEAPON.PRIMARY_USES_BOTH
Inventory.PickupMessage "$TXT_WEAPON_M4"
action native A_MStaffAttack();
action native A_MStaffPalette();
States
{
Spawn:
TNT1 A -1
Stop
Select:
MSTF A 1 A_Raise
Loop
Deselect:
MSTF A 1 A_Lower
Loop
Ready:
MSTF AAAAAABBBBBBCCCCCCDDDDDDEEEEEEFFFFF 1 A_WeaponReady
Loop
Fire:
MSTF G 4 Offset (0, 40)
MSTF H 4 Bright Offset (0, 48) A_MStaffAttack
MSTF H 2 Bright Offset (0, 48) A_MStaffPalette
MSTF II 2 Offset (0, 48) A_MStaffPalette
MSTF I 1 Offset (0, 40)
MSTF J 5 Offset (0, 36)
Goto Ready
}
}
// Mage Staff FX2 (Bloodscourge) --------------------------------------------
ACTOR MageStaffFX2 native
{
Speed 18
Height 8
Damage 4
DamageType "Fire"
Projectile
+SEEKERMISSILE
+EXTREMEDEATH
DeathSound "MageStaffExplode"
action native A_MStaffTrack();
action native A_BeAdditive();
States
{
Spawn:
MSP2 ABCD 2 Bright A_MStaffTrack
Loop
Death:
MSP2 E 4 Bright A_BeAdditive
MSP2 F 5 Bright A_Explode (80, 192, 0)
MSP2 GH 5 Bright
MSP2 I 4 Bright
Stop
}
}

View file

@ -0,0 +1,69 @@
// The Mage's Wand ----------------------------------------------------------
ACTOR MWeapWand : MageWeapon
{
Weapon.SelectionOrder 3600
Weapon.KickBack 0
Weapon.YAdjust 9
States
{
Select:
MWND A 1 A_Raise
Loop
Deselect:
MWND A 1 A_Lower
Loop
Ready:
MWND A 1 A_WeaponReady
Loop
Fire:
MWND A 6
MWND B 6 Bright Offset (0, 48) A_FireCustomMissile ("MageWandMissile")
MWND A 3 Offset (0, 40)
MWND A 3 Offset (0, 36) A_ReFire
Goto Ready
}
}
// Wand Smoke ---------------------------------------------------------------
ACTOR MageWandSmoke
{
+NOBLOCKMAP +NOGRAVITY +SHADOW
+NOTELEPORT +CANNOTPUSH +NODAMAGETHRUST
RenderStyle Translucent
Alpha 0.6
States
{
Spawn:
MWND CDCD 4
Stop
}
}
// Wand Missile -------------------------------------------------------------
ACTOR MageWandMissile native
{
Speed 184
Radius 12
Height 8
Damage 2
Projectile
+RIPPER +CANNOTPUSH +NODAMAGETHRUST
SeeSound "MageWandFire"
States
{
Spawn:
MWND CD 4 Bright
Loop
Death:
MWND E 4 Bright
MWND F 3 Bright
MWND G 4 Bright
MWND H 3 Bright
MWND I 4 Bright
Stop
}
}

View file

@ -81,7 +81,6 @@
#include "actors/hexen/ettin.txt"
#include "actors/hexen/centaur.txt"
#include "actors/hexen/demons.txt"
#include "actors/hexen/clericmace.txt"
#include "actors/hexen/firedemon.txt"
#include "actors/hexen/fog.txt"
#include "actors/hexen/summon.txt"
@ -93,9 +92,14 @@
#include "actors/hexen/bishop.txt"
#include "actors/hexen/blastradius.txt"
#include "actors/hexen/boostarmor.txt"
#include "actors/hexen/clericmace.txt"
#include "actors/hexen/clericflame.txt"
#include "actors/hexen/clericholy.txt"
#include "actors/hexen/clericstaff.txt"
#include "actors/hexen/magewand.txt"
#include "actors/hexen/magecone.txt"
#include "actors/hexen/magelightning.txt"
#include "actors/hexen/magestaff.txt"
#include "actors/strife/strifeplayer.txt"
#include "actors/strife/spectral.txt"