mirror of
https://github.com/ZDoom/qzdoom.git
synced 2025-01-17 23:01:04 +00:00
- Added DECORATE conversions for Hexen's Cleric weapons by Karate Chris.
- Added a check to Zipdir that excludes files with a .orig extension. These can be left behind by patch.exe and create problems. - fixed: Unmorphing from chicken caused a crash when reading non-existent meta-data strings. SVN r1112 (trunk)
This commit is contained in:
parent
4a9e70f1d2
commit
43715c5249
10 changed files with 399 additions and 429 deletions
|
@ -1,4 +1,9 @@
|
|||
August 5, 2008 (Changes by Graf Zahl)
|
||||
- Added DECORATE conversions for Hexen's Cleric weapons by Karate Chris.
|
||||
- Added a check to Zipdir that excludes files with a .orig extension. These
|
||||
can be left behind by patch.exe and create problems.
|
||||
- fixed: Unmorphing from chicken caused a crash when reading non-existent
|
||||
meta-data strings.
|
||||
- Converted the ScriptedMarines to DECORATE.
|
||||
- Fixed: DLightTransfer and DWallLightTransfer were declared as actors.
|
||||
|
||||
|
|
|
@ -207,7 +207,18 @@ WEAPON(CFlameAttack)
|
|||
WEAPON(CFlameRotate)
|
||||
ACTOR(CFlamePuff)
|
||||
WEAPON(CFlameMissile)
|
||||
ACTOR(DropWraithvergePieces)
|
||||
WEAPON(CHolyAttack)
|
||||
WEAPON(CHolyAttack2)
|
||||
WEAPON(CHolyPalette)
|
||||
ACTOR(CHolySeek)
|
||||
ACTOR(CHolyCheckScream)
|
||||
ACTOR(CHolyTail)
|
||||
WEAPON(CMaceAttack)
|
||||
WEAPON(CStaffInitBlink)
|
||||
WEAPON(CStaffCheckBlink)
|
||||
WEAPON(CStaffCheck)
|
||||
WEAPON(CStaffAttack)
|
||||
ACTOR(FiredRocks)
|
||||
ACTOR(FiredChase)
|
||||
ACTOR(FiredAttack)
|
||||
|
|
|
@ -17,7 +17,6 @@ static FRandom pr_checkscream ("CCheckScream");
|
|||
static FRandom pr_spiritslam ("CHolySlam");
|
||||
static FRandom pr_wraithvergedrop ("WraithvergeDrop");
|
||||
|
||||
void A_CHolySpawnPuff (AActor *);
|
||||
void A_CHolyAttack2 (AActor *);
|
||||
void A_CHolyTail (AActor *);
|
||||
void A_CHolySeek (AActor *);
|
||||
|
@ -33,16 +32,14 @@ void SpawnSpiritTail (AActor *spirit);
|
|||
|
||||
class AClericWeaponPiece : public AFourthWeaponPiece
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AClericWeaponPiece, AFourthWeaponPiece)
|
||||
DECLARE_CLASS (AClericWeaponPiece, AFourthWeaponPiece)
|
||||
public:
|
||||
void BeginPlay ();
|
||||
protected:
|
||||
bool MatchPlayerClass (AActor *toucher);
|
||||
};
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AClericWeaponPiece, Hexen, -1, 0)
|
||||
PROP_Inventory_PickupMessage("$TXT_WRAITHVERGE_PIECE")
|
||||
END_DEFAULTS
|
||||
IMPLEMENT_CLASS (AClericWeaponPiece)
|
||||
|
||||
bool AClericWeaponPiece::MatchPlayerClass (AActor *toucher)
|
||||
{
|
||||
|
@ -54,21 +51,12 @@ bool AClericWeaponPiece::MatchPlayerClass (AActor *toucher)
|
|||
|
||||
class ACWeaponPiece1 : public AClericWeaponPiece
|
||||
{
|
||||
DECLARE_ACTOR (ACWeaponPiece1, AClericWeaponPiece)
|
||||
DECLARE_CLASS (ACWeaponPiece1, AClericWeaponPiece)
|
||||
public:
|
||||
void BeginPlay ();
|
||||
};
|
||||
|
||||
FState ACWeaponPiece1::States[] =
|
||||
{
|
||||
S_BRIGHT (WCH1, 'A', -1, NULL , NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ACWeaponPiece1, Hexen, 18, 33)
|
||||
PROP_Flags (MF_SPECIAL)
|
||||
PROP_Flags2 (MF2_FLOATBOB)
|
||||
PROP_SpawnState (0)
|
||||
END_DEFAULTS
|
||||
IMPLEMENT_CLASS (ACWeaponPiece1)
|
||||
|
||||
void ACWeaponPiece1::BeginPlay ()
|
||||
{
|
||||
|
@ -85,16 +73,7 @@ public:
|
|||
void BeginPlay ();
|
||||
};
|
||||
|
||||
FState ACWeaponPiece2::States[] =
|
||||
{
|
||||
S_BRIGHT (WCH2, 'A', -1, NULL , NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ACWeaponPiece2, Hexen, 19, 34)
|
||||
PROP_Flags (MF_SPECIAL)
|
||||
PROP_Flags2 (MF2_FLOATBOB)
|
||||
PROP_SpawnState (0)
|
||||
END_DEFAULTS
|
||||
IMPLEMENT_CLASS (ACWeaponPiece2)
|
||||
|
||||
void ACWeaponPiece2::BeginPlay ()
|
||||
{
|
||||
|
@ -111,16 +90,7 @@ public:
|
|||
void BeginPlay ();
|
||||
};
|
||||
|
||||
FState ACWeaponPiece3::States[] =
|
||||
{
|
||||
S_BRIGHT (WCH3, 'A', -1, NULL , NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ACWeaponPiece3, Hexen, 20, 35)
|
||||
PROP_Flags (MF_SPECIAL)
|
||||
PROP_Flags2 (MF2_FLOATBOB)
|
||||
PROP_SpawnState (0)
|
||||
END_DEFAULTS
|
||||
IMPLEMENT_CLASS (ACWeaponPiece3)
|
||||
|
||||
void ACWeaponPiece3::BeginPlay ()
|
||||
{
|
||||
|
@ -128,27 +98,6 @@ void ACWeaponPiece3::BeginPlay ()
|
|||
PieceValue = WPIECE3<<3;
|
||||
}
|
||||
|
||||
// An actor that spawns the three pieces of the cleric's fourth weapon ------
|
||||
|
||||
// This gets spawned if weapon drop is on so that other players can pick up
|
||||
// this player's weapon.
|
||||
|
||||
class AWraithvergeDrop : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AWraithvergeDrop, AActor)
|
||||
};
|
||||
|
||||
FState AWraithvergeDrop::States[] =
|
||||
{
|
||||
S_NORMAL (TNT1, 'A', 1, NULL, &States[1]),
|
||||
S_NORMAL (TNT1, 'A', 1, A_DropWraithvergePieces, NULL)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AWraithvergeDrop, Hexen, -1, 0)
|
||||
PROP_SpawnState (0)
|
||||
END_DEFAULTS
|
||||
|
||||
|
||||
// Cleric's Wraithverge (Holy Symbol?) --------------------------------------
|
||||
|
||||
class ACWeapWraithverge : public AClericWeapon
|
||||
|
@ -167,171 +116,11 @@ public:
|
|||
BYTE CHolyCount;
|
||||
};
|
||||
|
||||
FState ACWeapWraithverge::States[] =
|
||||
{
|
||||
// Dummy state, because the fourth weapon does not appear in a level directly.
|
||||
S_NORMAL (TNT1, 'A', -1, NULL , NULL),
|
||||
|
||||
#define S_CHOLYREADY 1
|
||||
S_NORMAL (CHLY, 'A', 1, A_WeaponReady , &States[S_CHOLYREADY]),
|
||||
|
||||
#define S_CHOLYDOWN (S_CHOLYREADY+1)
|
||||
S_NORMAL (CHLY, 'A', 1, A_Lower , &States[S_CHOLYDOWN]),
|
||||
|
||||
#define S_CHOLYUP (S_CHOLYDOWN+1)
|
||||
S_NORMAL (CHLY, 'A', 1, A_Raise , &States[S_CHOLYUP]),
|
||||
|
||||
#define S_CHOLYATK (S_CHOLYUP+1)
|
||||
S_BRIGHT2 (CHLY, 'A', 1, NULL , &States[S_CHOLYATK+1], 0, 40),
|
||||
S_BRIGHT2 (CHLY, 'B', 1, NULL , &States[S_CHOLYATK+2], 0, 40),
|
||||
S_BRIGHT2 (CHLY, 'C', 2, NULL , &States[S_CHOLYATK+3], 0, 43),
|
||||
S_BRIGHT2 (CHLY, 'D', 2, NULL , &States[S_CHOLYATK+4], 0, 43),
|
||||
S_BRIGHT2 (CHLY, 'E', 2, NULL , &States[S_CHOLYATK+5], 0, 45),
|
||||
S_BRIGHT2 (CHLY, 'F', 6, A_CHolyAttack , &States[S_CHOLYATK+6], 0, 48),
|
||||
S_BRIGHT2 (CHLY, 'G', 2, A_CHolyPalette , &States[S_CHOLYATK+7], 0, 40),
|
||||
S_BRIGHT2 (CHLY, 'G', 2, A_CHolyPalette , &States[S_CHOLYATK+8], 0, 40),
|
||||
S_BRIGHT2 (CHLY, 'G', 2, A_CHolyPalette , &States[S_CHOLYREADY], 0, 36)
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ACWeapWraithverge, Hexen, -1, 0)
|
||||
PROP_Flags (MF_SPECIAL)
|
||||
PROP_SpawnState (0)
|
||||
|
||||
PROP_Weapon_SelectionOrder (3000)
|
||||
PROP_Weapon_Flags (WIF_PRIMARY_USES_BOTH)
|
||||
PROP_Weapon_AmmoUse1 (18)
|
||||
PROP_Weapon_AmmoUse2 (18)
|
||||
PROP_Weapon_AmmoGive1 (0)
|
||||
PROP_Weapon_AmmoGive2 (0)
|
||||
PROP_Weapon_UpState (S_CHOLYUP)
|
||||
PROP_Weapon_DownState (S_CHOLYDOWN)
|
||||
PROP_Weapon_ReadyState (S_CHOLYREADY)
|
||||
PROP_Weapon_AtkState (S_CHOLYATK)
|
||||
PROP_Weapon_Kickback (150)
|
||||
PROP_Weapon_MoveCombatDist (22000000)
|
||||
PROP_Weapon_AmmoType1 ("Mana1")
|
||||
PROP_Weapon_AmmoType2 ("Mana2")
|
||||
PROP_Weapon_ProjectileType ("HolyMissile")
|
||||
PROP_Inventory_PickupMessage("$TXT_WEAPON_C4")
|
||||
END_DEFAULTS
|
||||
|
||||
// Holy Missile -------------------------------------------------------------
|
||||
|
||||
class AHolyMissile : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AHolyMissile, AActor)
|
||||
};
|
||||
|
||||
FState AHolyMissile::States[] =
|
||||
{
|
||||
S_BRIGHT (SPIR, 'P', 3, A_CHolySpawnPuff , &States[1]),
|
||||
S_BRIGHT (SPIR, 'P', 3, A_CHolySpawnPuff , &States[2]),
|
||||
S_BRIGHT (SPIR, 'P', 3, A_CHolySpawnPuff , &States[3]),
|
||||
S_BRIGHT (SPIR, 'P', 3, A_CHolySpawnPuff , &States[4]),
|
||||
S_BRIGHT (SPIR, 'P', 1, A_CHolyAttack2 , NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AHolyMissile, Hexen, -1, 0)
|
||||
PROP_SpeedFixed (30)
|
||||
PROP_RadiusFixed (15)
|
||||
PROP_HeightFixed (8)
|
||||
PROP_Damage (4)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
|
||||
PROP_Flags2 (MF2_NOTELEPORT)
|
||||
PROP_Flags4 (MF4_EXTREMEDEATH)
|
||||
|
||||
PROP_SpawnState (0)
|
||||
PROP_DeathState (4)
|
||||
END_DEFAULTS
|
||||
|
||||
// Holy Missile Puff --------------------------------------------------------
|
||||
|
||||
class AHolyMissilePuff : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AHolyMissilePuff, AActor)
|
||||
};
|
||||
|
||||
FState AHolyMissilePuff::States[] =
|
||||
{
|
||||
S_NORMAL (SPIR, 'Q', 3, NULL , &States[1]),
|
||||
S_NORMAL (SPIR, 'R', 3, NULL , &States[2]),
|
||||
S_NORMAL (SPIR, 'S', 3, NULL , &States[3]),
|
||||
S_NORMAL (SPIR, 'T', 3, NULL , &States[4]),
|
||||
S_NORMAL (SPIR, 'U', 3, NULL , NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AHolyMissilePuff, Hexen, -1, 0)
|
||||
PROP_RadiusFixed (4)
|
||||
PROP_HeightFixed (8)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF)
|
||||
PROP_Flags2 (MF2_NOTELEPORT)
|
||||
PROP_RenderStyle (STYLE_Translucent)
|
||||
PROP_Alpha (HX_ALTSHADOW)
|
||||
|
||||
PROP_SpawnState (0)
|
||||
END_DEFAULTS
|
||||
|
||||
// Holy Puff ----------------------------------------------------------------
|
||||
|
||||
class AHolyPuff : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AHolyPuff, AActor)
|
||||
};
|
||||
|
||||
FState AHolyPuff::States[] =
|
||||
{
|
||||
S_NORMAL (SPIR, 'K', 3, NULL , &States[1]),
|
||||
S_NORMAL (SPIR, 'L', 3, NULL , &States[2]),
|
||||
S_NORMAL (SPIR, 'M', 3, NULL , &States[3]),
|
||||
S_NORMAL (SPIR, 'N', 3, NULL , &States[4]),
|
||||
S_NORMAL (SPIR, 'O', 3, NULL , NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AHolyPuff, Hexen, -1, 0)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
|
||||
PROP_RenderStyle (STYLE_Translucent)
|
||||
PROP_Alpha (HX_SHADOW)
|
||||
PROP_SpawnState (0)
|
||||
END_DEFAULTS
|
||||
|
||||
IMPLEMENT_CLASS (ACWeapWraithverge)
|
||||
|
||||
// Holy Spirit --------------------------------------------------------------
|
||||
|
||||
FState AHolySpirit::States[] =
|
||||
{
|
||||
#define S_HOLY_FX1 0
|
||||
S_NORMAL (SPIR, 'A', 2, A_CHolySeek , &States[S_HOLY_FX1+1]),
|
||||
S_NORMAL (SPIR, 'A', 2, A_CHolySeek , &States[S_HOLY_FX1+2]),
|
||||
S_NORMAL (SPIR, 'B', 2, A_CHolySeek , &States[S_HOLY_FX1+3]),
|
||||
S_NORMAL (SPIR, 'B', 2, A_CHolyCheckScream , &States[S_HOLY_FX1]),
|
||||
|
||||
#define S_HOLY_FX_X1 (S_HOLY_FX1+4)
|
||||
S_NORMAL (SPIR, 'D', 4, NULL , &States[S_HOLY_FX_X1+1]),
|
||||
S_NORMAL (SPIR, 'E', 4, A_Scream , &States[S_HOLY_FX_X1+2]),
|
||||
S_NORMAL (SPIR, 'F', 4, NULL , &States[S_HOLY_FX_X1+3]),
|
||||
S_NORMAL (SPIR, 'G', 4, NULL , &States[S_HOLY_FX_X1+4]),
|
||||
S_NORMAL (SPIR, 'H', 4, NULL , &States[S_HOLY_FX_X1+5]),
|
||||
S_NORMAL (SPIR, 'I', 4, NULL , NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AHolySpirit, Hexen, -1, 0)
|
||||
PROP_SpawnHealth (105)
|
||||
PROP_SpeedFixed (12)
|
||||
PROP_RadiusFixed (10)
|
||||
PROP_HeightFixed (6)
|
||||
PROP_Damage (3)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
|
||||
PROP_Flags2 (MF2_NOTELEPORT|MF2_RIP|MF2_IMPACT|MF2_PCROSS|MF2_SEEKERMISSILE)
|
||||
PROP_Flags3 (MF3_FOILINVUL|MF3_SKYEXPLODE|MF3_NOEXPLODEFLOOR|MF3_CANBLAST)
|
||||
PROP_Flags4 (MF4_EXTREMEDEATH)
|
||||
PROP_RenderStyle (STYLE_Translucent)
|
||||
PROP_Alpha (HX_ALTSHADOW)
|
||||
|
||||
PROP_SpawnState (S_HOLY_FX1)
|
||||
PROP_DeathState (S_HOLY_FX_X1)
|
||||
|
||||
PROP_DeathSound ("SpiritDie")
|
||||
END_DEFAULTS
|
||||
IMPLEMENT_CLASS (AHolySpirit)
|
||||
|
||||
bool AHolySpirit::Slam (AActor *thing)
|
||||
{
|
||||
|
@ -364,7 +153,7 @@ bool AHolySpirit::Slam (AActor *thing)
|
|||
P_DamageMobj (thing, this, target, dam, NAME_Melee);
|
||||
if (pr_spiritslam() < 128)
|
||||
{
|
||||
Spawn<AHolyPuff> (x, y, z, ALLOW_REPLACE);
|
||||
Spawn ("HolyPuff", x, y, z, ALLOW_REPLACE);
|
||||
S_Sound (this, CHAN_WEAPON, "SpiritAttack", 1, ATTN_NORM);
|
||||
if (thing->flags3&MF3_ISMONSTER && pr_spiritslam() < 128)
|
||||
{
|
||||
|
@ -421,43 +210,6 @@ bool AHolySpirit::IsOkayToAttack (AActor *link)
|
|||
return false;
|
||||
}
|
||||
|
||||
|
||||
// Holy Tail ----------------------------------------------------------------
|
||||
|
||||
class AHolyTail : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AHolyTail, AActor)
|
||||
};
|
||||
|
||||
FState AHolyTail::States[] =
|
||||
{
|
||||
S_NORMAL (SPIR, 'C', 1, A_CHolyTail , &States[0]),
|
||||
S_NORMAL (SPIR, 'D', -1, NULL , NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (AHolyTail, Hexen, -1, 0)
|
||||
PROP_RadiusFixed (1)
|
||||
PROP_HeightFixed (1)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_NOCLIP)
|
||||
PROP_Flags2 (MF2_NOTELEPORT)
|
||||
PROP_RenderStyle (STYLE_Translucent)
|
||||
PROP_Alpha (HX_ALTSHADOW)
|
||||
|
||||
PROP_SpawnState (0)
|
||||
END_DEFAULTS
|
||||
|
||||
// Holy Tail Trail ---------------------------------------------------------
|
||||
|
||||
class AHolyTailTrail : public AHolyTail
|
||||
{
|
||||
DECLARE_STATELESS_ACTOR (AHolyTailTrail, AHolyTail)
|
||||
};
|
||||
|
||||
|
||||
IMPLEMENT_STATELESS_ACTOR (AHolyTailTrail, Hexen, -1, 0)
|
||||
PROP_SpawnState (1)
|
||||
END_DEFAULTS
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// A_CHolyAttack3
|
||||
|
@ -467,7 +219,7 @@ END_DEFAULTS
|
|||
|
||||
void A_CHolyAttack3 (AActor *actor)
|
||||
{
|
||||
AActor * missile = P_SpawnMissileZ (actor, actor->z + 40*FRACUNIT, actor->target, RUNTIME_CLASS(AHolyMissile));
|
||||
AActor * missile = P_SpawnMissileZ (actor, actor->z + 40*FRACUNIT, actor->target, PClass::FindClass ("HolyMissile"));
|
||||
if (missile != NULL) missile->tracer = NULL; // No initial target
|
||||
S_Sound (actor, CHAN_WEAPON, "HolySymbolFire", 1, ATTN_NORM);
|
||||
}
|
||||
|
@ -539,11 +291,11 @@ void SpawnSpiritTail (AActor *spirit)
|
|||
AActor *tail, *next;
|
||||
int i;
|
||||
|
||||
tail = Spawn<AHolyTail> (spirit->x, spirit->y, spirit->z, ALLOW_REPLACE);
|
||||
tail = Spawn ("HolyTail", spirit->x, spirit->y, spirit->z, ALLOW_REPLACE);
|
||||
tail->target = spirit; // parent
|
||||
for (i = 1; i < 3; i++)
|
||||
{
|
||||
next = Spawn<AHolyTailTrail> (spirit->x, spirit->y, spirit->z, ALLOW_REPLACE);
|
||||
next = Spawn ("HolyTailTrail", spirit->x, spirit->y, spirit->z, ALLOW_REPLACE);
|
||||
tail->tracer = next;
|
||||
tail = next;
|
||||
}
|
||||
|
@ -571,7 +323,7 @@ void A_CHolyAttack (AActor *actor)
|
|||
if (!weapon->DepleteAmmo (weapon->bAltFire))
|
||||
return;
|
||||
}
|
||||
AActor * missile = P_SpawnPlayerMissile (actor, 0,0,0, RUNTIME_CLASS(AHolyMissile), actor->angle, &linetarget);
|
||||
AActor * missile = P_SpawnPlayerMissile (actor, 0,0,0, PClass::FindClass ("HolyMissile"), actor->angle, &linetarget);
|
||||
if (missile != NULL) missile->tracer = linetarget;
|
||||
|
||||
weapon->CHolyCount = 3;
|
||||
|
@ -867,17 +619,6 @@ void A_CHolyCheckScream (AActor *actor)
|
|||
}
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// A_CHolySpawnPuff
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
void A_CHolySpawnPuff (AActor *actor)
|
||||
{
|
||||
Spawn<AHolyMissilePuff> (actor->x, actor->y, actor->z, ALLOW_REPLACE);
|
||||
}
|
||||
|
||||
void AClericWeaponPiece::BeginPlay ()
|
||||
{
|
||||
Super::BeginPlay ();
|
||||
|
|
|
@ -20,120 +20,16 @@ void A_CStaffCheck (AActor *actor);
|
|||
void A_CStaffAttack (AActor *actor);
|
||||
void A_CStaffMissileSlither (AActor *);
|
||||
|
||||
// The Cleric's Serpent Staff -----------------------------------------------
|
||||
|
||||
class ACWeapStaff : public AClericWeapon
|
||||
{
|
||||
DECLARE_ACTOR (ACWeapStaff, AClericWeapon)
|
||||
};
|
||||
|
||||
FState ACWeapStaff::States[] =
|
||||
{
|
||||
#define S_CSTAFF 0
|
||||
S_NORMAL (WCSS, 'A', -1, NULL , NULL),
|
||||
|
||||
#define S_CSTAFFREADY (S_CSTAFF+1)
|
||||
S_NORMAL (CSSF, 'C', 4, NULL , &States[S_CSTAFFREADY+1]),
|
||||
S_NORMAL (CSSF, 'B', 3, A_CStaffInitBlink , &States[S_CSTAFFREADY+2]),
|
||||
S_NORMAL (CSSF, 'A', 1, A_WeaponReady , &States[S_CSTAFFREADY+3]),
|
||||
S_NORMAL (CSSF, 'A', 1, A_WeaponReady , &States[S_CSTAFFREADY+4]),
|
||||
S_NORMAL (CSSF, 'A', 1, A_WeaponReady , &States[S_CSTAFFREADY+5]),
|
||||
S_NORMAL (CSSF, 'A', 1, A_WeaponReady , &States[S_CSTAFFREADY+6]),
|
||||
S_NORMAL (CSSF, 'A', 1, A_WeaponReady , &States[S_CSTAFFREADY+7]),
|
||||
S_NORMAL (CSSF, 'A', 1, A_WeaponReady , &States[S_CSTAFFREADY+8]),
|
||||
S_NORMAL (CSSF, 'A', 1, A_WeaponReady , &States[S_CSTAFFREADY+9]),
|
||||
S_NORMAL (CSSF, 'A', 1, A_CStaffCheckBlink , &States[S_CSTAFFREADY+2]),
|
||||
|
||||
#define S_CSTAFFBLINK (S_CSTAFFREADY+10)
|
||||
S_NORMAL (CSSF, 'B', 1, A_WeaponReady , &States[S_CSTAFFBLINK+1]),
|
||||
S_NORMAL (CSSF, 'B', 1, A_WeaponReady , &States[S_CSTAFFBLINK+2]),
|
||||
S_NORMAL (CSSF, 'B', 1, A_WeaponReady , &States[S_CSTAFFBLINK+3]),
|
||||
S_NORMAL (CSSF, 'C', 1, A_WeaponReady , &States[S_CSTAFFBLINK+4]),
|
||||
S_NORMAL (CSSF, 'C', 1, A_WeaponReady , &States[S_CSTAFFBLINK+5]),
|
||||
S_NORMAL (CSSF, 'C', 1, A_WeaponReady , &States[S_CSTAFFBLINK+6]),
|
||||
S_NORMAL (CSSF, 'C', 1, A_WeaponReady , &States[S_CSTAFFBLINK+7]),
|
||||
S_NORMAL (CSSF, 'C', 1, A_WeaponReady , &States[S_CSTAFFBLINK+8]),
|
||||
S_NORMAL (CSSF, 'B', 1, A_WeaponReady , &States[S_CSTAFFBLINK+9]),
|
||||
S_NORMAL (CSSF, 'B', 1, A_WeaponReady , &States[S_CSTAFFBLINK+10]),
|
||||
S_NORMAL (CSSF, 'B', 1, A_WeaponReady , &States[S_CSTAFFREADY+2]),
|
||||
|
||||
#define S_CSTAFFDOWN (S_CSTAFFBLINK+11)
|
||||
S_NORMAL (CSSF, 'B', 3, NULL , &States[S_CSTAFFDOWN+1]),
|
||||
S_NORMAL (CSSF, 'C', 4, NULL , &States[S_CSTAFFDOWN+2]),
|
||||
S_NORMAL (CSSF, 'C', 1, A_Lower , &States[S_CSTAFFDOWN+2]),
|
||||
|
||||
#define S_CSTAFFUP (S_CSTAFFDOWN+3)
|
||||
S_NORMAL (CSSF, 'C', 1, A_Raise , &States[S_CSTAFFUP]),
|
||||
|
||||
#define S_CSTAFFATK (S_CSTAFFUP+1)
|
||||
S_NORMAL2 (CSSF, 'A', 1, A_CStaffCheck , &States[S_CSTAFFATK+1], 0, 45),
|
||||
S_NORMAL2 (CSSF, 'J', 1, A_CStaffAttack , &States[S_CSTAFFATK+2], 0, 50),
|
||||
S_NORMAL2 (CSSF, 'J', 2, NULL , &States[S_CSTAFFATK+3], 0, 50),
|
||||
S_NORMAL2 (CSSF, 'J', 2, NULL , &States[S_CSTAFFATK+4], 0, 45),
|
||||
S_NORMAL2 (CSSF, 'A', 2, NULL , &States[S_CSTAFFATK+5], 0, 40),
|
||||
S_NORMAL2 (CSSF, 'A', 2, NULL , &States[S_CSTAFFREADY+2], 0, 36),
|
||||
|
||||
#define S_CSTAFFATK2 (S_CSTAFFATK+6)
|
||||
S_NORMAL2 (CSSF, 'K', 10, NULL , &States[S_CSTAFFREADY+2], 0, 36),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ACWeapStaff, Hexen, 10, 32)
|
||||
PROP_Flags (MF_SPECIAL)
|
||||
PROP_SpawnState (S_CSTAFF)
|
||||
|
||||
PROP_Weapon_SelectionOrder (1600)
|
||||
PROP_Weapon_AmmoUse1 (1)
|
||||
PROP_Weapon_AmmoGive1 (25)
|
||||
PROP_Weapon_UpState (S_CSTAFFUP)
|
||||
PROP_Weapon_DownState (S_CSTAFFDOWN)
|
||||
PROP_Weapon_ReadyState (S_CSTAFFREADY)
|
||||
PROP_Weapon_AtkState (S_CSTAFFATK)
|
||||
PROP_Weapon_Kickback (150)
|
||||
PROP_Weapon_YAdjust (10)
|
||||
PROP_Weapon_MoveCombatDist (25000000)
|
||||
PROP_Weapon_AmmoType1 ("Mana1")
|
||||
PROP_Weapon_ProjectileType ("CStaffMissile")
|
||||
PROP_Inventory_PickupMessage("$TXT_WEAPON_C2")
|
||||
END_DEFAULTS
|
||||
|
||||
// Serpent Staff Missile ----------------------------------------------------
|
||||
|
||||
class ACStaffMissile : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (ACStaffMissile, AActor)
|
||||
DECLARE_CLASS (ACStaffMissile, AActor)
|
||||
public:
|
||||
int DoSpecialDamage (AActor *target, int damage);
|
||||
};
|
||||
|
||||
FState ACStaffMissile::States[] =
|
||||
{
|
||||
#define S_CSTAFF_MISSILE1 0
|
||||
S_BRIGHT (CSSF, 'D', 1, A_CStaffMissileSlither , &States[S_CSTAFF_MISSILE1+1]),
|
||||
S_BRIGHT (CSSF, 'D', 1, A_CStaffMissileSlither , &States[S_CSTAFF_MISSILE1+2]),
|
||||
S_BRIGHT (CSSF, 'E', 1, A_CStaffMissileSlither , &States[S_CSTAFF_MISSILE1+3]),
|
||||
S_BRIGHT (CSSF, 'E', 1, A_CStaffMissileSlither , &States[S_CSTAFF_MISSILE1]),
|
||||
|
||||
#define S_CSTAFF_MISSILE_X1 (S_CSTAFF_MISSILE1+4)
|
||||
S_BRIGHT (CSSF, 'F', 4, NULL , &States[S_CSTAFF_MISSILE_X1+1]),
|
||||
S_BRIGHT (CSSF, 'G', 4, NULL , &States[S_CSTAFF_MISSILE_X1+2]),
|
||||
S_BRIGHT (CSSF, 'H', 3, NULL , &States[S_CSTAFF_MISSILE_X1+3]),
|
||||
S_BRIGHT (CSSF, 'I', 3, NULL , NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ACStaffMissile, Hexen, -1, 0)
|
||||
PROP_SpeedFixed (22)
|
||||
PROP_RadiusFixed (12)
|
||||
PROP_HeightFixed (10)
|
||||
PROP_Damage (5)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
|
||||
PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS)
|
||||
PROP_RenderStyle (STYLE_Add)
|
||||
|
||||
PROP_SpawnState (S_CSTAFF_MISSILE1)
|
||||
PROP_DeathState (S_CSTAFF_MISSILE_X1)
|
||||
|
||||
PROP_DeathSound ("ClericCStaffExplode")
|
||||
END_DEFAULTS
|
||||
IMPLEMENT_CLASS (ACStaffMissile)
|
||||
|
||||
int ACStaffMissile::DoSpecialDamage (AActor *target, int damage)
|
||||
{
|
||||
|
@ -146,33 +42,6 @@ int ACStaffMissile::DoSpecialDamage (AActor *target, int damage)
|
|||
return damage;
|
||||
}
|
||||
|
||||
// Serpent Staff Puff -------------------------------------------------------
|
||||
|
||||
class ACStaffPuff : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (ACStaffPuff, AActor)
|
||||
};
|
||||
|
||||
FState ACStaffPuff::States[] =
|
||||
{
|
||||
S_NORMAL (FHFX, 'S', 4, NULL , &States[1]),
|
||||
S_NORMAL (FHFX, 'T', 4, NULL , &States[2]),
|
||||
S_NORMAL (FHFX, 'U', 4, NULL , &States[3]),
|
||||
S_NORMAL (FHFX, 'V', 4, NULL , &States[4]),
|
||||
S_NORMAL (FHFX, 'W', 4, NULL , NULL),
|
||||
};
|
||||
|
||||
IMPLEMENT_ACTOR (ACStaffPuff, Hexen, -1, 0)
|
||||
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
|
||||
PROP_Flags3 (MF3_PUFFONACTORS)
|
||||
PROP_RenderStyle (STYLE_Translucent)
|
||||
PROP_Alpha (HX_SHADOW)
|
||||
|
||||
PROP_SpawnState (0)
|
||||
|
||||
PROP_SeeSound ("ClericCStaffHitThing")
|
||||
END_DEFAULTS
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// A_CStaffCheck
|
||||
|
@ -204,7 +73,7 @@ void A_CStaffCheck (AActor *actor)
|
|||
slope = P_AimLineAttack (pmo, angle, fixed_t(1.5*MELEERANGE), &linetarget);
|
||||
if (linetarget)
|
||||
{
|
||||
P_LineAttack (pmo, angle, fixed_t(1.5*MELEERANGE), slope, damage, NAME_Melee, RUNTIME_CLASS(ACStaffPuff));
|
||||
P_LineAttack (pmo, angle, fixed_t(1.5*MELEERANGE), slope, damage, NAME_Melee, PClass::FindClass ("CStaffPuff"));
|
||||
pmo->angle = R_PointToAngle2 (pmo->x, pmo->y,
|
||||
linetarget->x, linetarget->y);
|
||||
if ((linetarget->player || linetarget->flags3&MF3_ISMONSTER)
|
||||
|
@ -216,7 +85,7 @@ void A_CStaffCheck (AActor *actor)
|
|||
{
|
||||
pmo->health = player->health = newLife;
|
||||
}
|
||||
P_SetPsprite (player, ps_weapon, &ACWeapStaff::States[S_CSTAFFATK2]);
|
||||
P_SetPsprite (player, ps_weapon, weapon->FindState ("Drain"));
|
||||
}
|
||||
if (weapon != NULL)
|
||||
{
|
||||
|
@ -228,7 +97,7 @@ void A_CStaffCheck (AActor *actor)
|
|||
slope = P_AimLineAttack (player->mo, angle, fixed_t(1.5*MELEERANGE), &linetarget);
|
||||
if (linetarget)
|
||||
{
|
||||
P_LineAttack (pmo, angle, fixed_t(1.5*MELEERANGE), slope, damage, NAME_Melee, RUNTIME_CLASS(ACStaffPuff));
|
||||
P_LineAttack (pmo, angle, fixed_t(1.5*MELEERANGE), slope, damage, NAME_Melee, PClass::FindClass ("CStaffPuff"));
|
||||
pmo->angle = R_PointToAngle2 (pmo->x, pmo->y,
|
||||
linetarget->x, linetarget->y);
|
||||
if (linetarget->player || linetarget->flags3&MF3_ISMONSTER)
|
||||
|
@ -236,7 +105,7 @@ void A_CStaffCheck (AActor *actor)
|
|||
newLife = player->health+(damage>>4);
|
||||
newLife = newLife > 100 ? 100 : newLife;
|
||||
pmo->health = player->health = newLife;
|
||||
P_SetPsprite (player, ps_weapon, &ACWeapStaff::States[S_CSTAFFATK2]);
|
||||
P_SetPsprite (player, ps_weapon, weapon->FindState ("Drain"));
|
||||
}
|
||||
weapon->DepleteAmmo (weapon->bAltFire, false);
|
||||
break;
|
||||
|
@ -323,7 +192,7 @@ void A_CStaffCheckBlink (AActor *actor)
|
|||
{
|
||||
if (!--actor->special1)
|
||||
{
|
||||
P_SetPsprite (actor->player, ps_weapon, &ACWeapStaff::States[S_CSTAFFBLINK]);
|
||||
P_SetPsprite (actor->player, ps_weapon, actor->FindState ("Blink"));
|
||||
actor->special1 = (pr_blink()+50)>>2;
|
||||
}
|
||||
else
|
||||
|
|
|
@ -31,7 +31,7 @@ public:
|
|||
|
||||
class AHolySpirit : public AActor
|
||||
{
|
||||
DECLARE_ACTOR (AHolySpirit, AActor)
|
||||
DECLARE_CLASS (AHolySpirit, AActor)
|
||||
public:
|
||||
bool Slam (AActor *thing);
|
||||
bool SpecialBlastHandling (AActor *source, fixed_t strength);
|
||||
|
|
|
@ -267,31 +267,34 @@ bool P_UndoPlayerMorph (player_t *activator, player_t *player, bool force)
|
|||
// taking events, reset up the face, if any;
|
||||
// this is only needed for old-skool skins
|
||||
// and for the original DOOM status bar.
|
||||
if ((player == &players[consoleplayer]) &&
|
||||
(strcmp(pmo->GetClass()->Meta.GetMetaString (APMETA_Face), "None") != 0))
|
||||
if ((player == &players[consoleplayer]))
|
||||
{
|
||||
// Assume root-level base skin to begin with
|
||||
size_t skinindex = 0;
|
||||
// If a custom skin was in use, then reload it
|
||||
// or else the base skin for the player class.
|
||||
if ((unsigned int)player->userinfo.skin >= PlayerClasses.Size () &&
|
||||
(size_t)player->userinfo.skin < numskins)
|
||||
const char *face = pmo->GetClass()->Meta.GetMetaString (APMETA_Face);
|
||||
if (face != NULL && strcmp(face, "None") != 0)
|
||||
{
|
||||
skinindex = player->userinfo.skin;
|
||||
}
|
||||
else if (PlayerClasses.Size () > 1)
|
||||
{
|
||||
const PClass *whatami = player->mo->GetClass();
|
||||
for (unsigned int i = 0; i < PlayerClasses.Size (); ++i)
|
||||
// Assume root-level base skin to begin with
|
||||
size_t skinindex = 0;
|
||||
// If a custom skin was in use, then reload it
|
||||
// or else the base skin for the player class.
|
||||
if ((unsigned int)player->userinfo.skin >= PlayerClasses.Size () &&
|
||||
(size_t)player->userinfo.skin < numskins)
|
||||
{
|
||||
if (PlayerClasses[i].Type == whatami)
|
||||
skinindex = player->userinfo.skin;
|
||||
}
|
||||
else if (PlayerClasses.Size () > 1)
|
||||
{
|
||||
const PClass *whatami = player->mo->GetClass();
|
||||
for (unsigned int i = 0; i < PlayerClasses.Size (); ++i)
|
||||
{
|
||||
skinindex = i;
|
||||
break;
|
||||
if (PlayerClasses[i].Type == whatami)
|
||||
{
|
||||
skinindex = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
StatusBar->SetFace(&skins[skinindex]);
|
||||
}
|
||||
StatusBar->SetFace(&skins[skinindex]);
|
||||
}
|
||||
|
||||
angle = mo->angle >> ANGLETOFINESHIFT;
|
||||
|
|
|
@ -270,6 +270,13 @@ void recurse_dir(dir_tree_t *tree, const char *dirpath)
|
|||
{
|
||||
file_entry_t *entry;
|
||||
|
||||
if (strstr(fileinfo.name, ".orig"))
|
||||
{
|
||||
// .orig files are left behind by patch.exe and should never be
|
||||
// added to zdoom.pk3
|
||||
continue;
|
||||
}
|
||||
|
||||
entry = alloc_file_entry(dirpath, fileinfo.name, fileinfo.time_write);
|
||||
if (entry == NULL)
|
||||
{
|
||||
|
|
237
wadsrc/static/actors/hexen/clericholy.txt
Normal file
237
wadsrc/static/actors/hexen/clericholy.txt
Normal file
|
@ -0,0 +1,237 @@
|
|||
|
||||
// Cleric Weapon Piece ------------------------------------------------------
|
||||
|
||||
ACTOR ClericWeaponPiece : FourthWeaponPiece native
|
||||
{
|
||||
Game Hexen
|
||||
Inventory.PickupMessage "$TXT_WRAITHVERGE_PIECE"
|
||||
}
|
||||
|
||||
// Cleric Weapon Piece 1 ----------------------------------------------------
|
||||
|
||||
ACTOR CWeaponPiece1 : ClericWeaponPiece 18 native
|
||||
{
|
||||
Game Hexen
|
||||
SpawnID 33
|
||||
+FLOATBOB
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
WCH1 A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
// Cleric Weapon Piece 2 ----------------------------------------------------
|
||||
|
||||
ACTOR CWeaponPiece2 : ClericWeaponPiece 19 native
|
||||
{
|
||||
Game Hexen
|
||||
SpawnID 34
|
||||
+FLOATBOB
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
WCH2 A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
// Cleric Weapon Piece 3 ----------------------------------------------------
|
||||
|
||||
ACTOR CWeaponPiece3 : ClericWeaponPiece 20 native
|
||||
{
|
||||
Game Hexen
|
||||
SpawnID 35
|
||||
+FLOATBOB
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
WCH3 A -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
// Wraithverge Drop ---------------------------------------------------------
|
||||
|
||||
ACTOR WraithvergeDrop
|
||||
{
|
||||
action native A_DropWraithvergePieces();
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
TNT1 A 1
|
||||
TNT1 A 1 A_DropWraithvergePieces
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
// Cleric's Wraithverge (Holy Symbol?) --------------------------------------
|
||||
|
||||
ACTOR CWeapWraithverge : ClericWeapon native
|
||||
{
|
||||
Weapon.SelectionOrder 3000
|
||||
+WEAPON.PRIMARY_USES_BOTH
|
||||
Weapon.AmmoUse1 18
|
||||
Weapon.AmmoUse2 18
|
||||
Weapon.AmmoGive1 0
|
||||
Weapon.AmmoGive2 0
|
||||
Weapon.KickBack 150
|
||||
Weapon.AmmoType1 "Mana1"
|
||||
Weapon.AmmoType2 "Mana2"
|
||||
Inventory.PickupMessage "$TXT_WEAPON_C4"
|
||||
|
||||
action native A_CHolyAttack();
|
||||
action native A_CHolyPalette();
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
TNT1 A -1
|
||||
Stop
|
||||
Ready:
|
||||
CHLY A 1 A_WeaponReady
|
||||
Loop
|
||||
Select:
|
||||
CHLY A 1 A_Raise
|
||||
Loop
|
||||
Deselect:
|
||||
CHLY A 1 A_Lower
|
||||
Loop
|
||||
Fire:
|
||||
CHLY AB 1 Bright Offset (0, 40)
|
||||
CHLY CD 2 Bright Offset (0, 43)
|
||||
CHLY E 2 Bright Offset (0, 45)
|
||||
CHLY F 6 Bright Offset (0, 48) A_CHolyAttack
|
||||
CHLY GG 2 Bright Offset (0, 40) A_CHolyPalette
|
||||
CHLY G 2 Offset (0, 36) A_CHolyPalette
|
||||
Goto Ready
|
||||
}
|
||||
}
|
||||
|
||||
// Holy Missile -------------------------------------------------------------
|
||||
|
||||
ACTOR HolyMissile
|
||||
{
|
||||
Speed 30
|
||||
Radius 15
|
||||
Height 8
|
||||
Damage 4
|
||||
Projectile
|
||||
-ACTIVATEIMPACT -ACTIVATEPCROSS
|
||||
+EXTREMEDEATH
|
||||
|
||||
action native A_CHolyAttack2();
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
SPIR PPPP 3 Bright A_SpawnItemEx("HolyMissilePuff")
|
||||
Death:
|
||||
SPIR P 1 Bright A_CHolyAttack2
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
// Holy Missile Puff --------------------------------------------------------
|
||||
|
||||
ACTOR HolyMissilePuff
|
||||
{
|
||||
Radius 4
|
||||
Height 8
|
||||
+NOBLOCKMAP +NOGRAVITY +DROPOFF
|
||||
+NOTELEPORT
|
||||
RenderStyle "Translucent"
|
||||
Alpha 0.4
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
SPIR QRSTU 3
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
// Holy Puff ----------------------------------------------------------------
|
||||
|
||||
ACTOR HolyPuff
|
||||
{
|
||||
+NOBLOCKMAP +NOGRAVITY
|
||||
RenderStyle Translucent
|
||||
Alpha 0.6
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
SPIR KLMNO 3
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
// Holy Spirit --------------------------------------------------------------
|
||||
|
||||
ACTOR HolySpirit native
|
||||
{
|
||||
Health 105
|
||||
Speed 12
|
||||
Radius 10
|
||||
Height 6
|
||||
Damage 3
|
||||
Projectile
|
||||
+RIPPER +SEEKERMISSILE
|
||||
+FOILINVUL +SKYEXPLODE +NOEXPLODEFLOOR +CANBLAST
|
||||
+EXTREMEDEATH
|
||||
RenderStyle Translucent
|
||||
Alpha 0.4
|
||||
DeathSound "SpiritDie"
|
||||
|
||||
action native A_CHolySeek();
|
||||
action native A_CHolyCheckScream();
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
SPIR AAB 2 A_CHolySeek
|
||||
SPIR B 2 A_CHolyCheckScream
|
||||
Loop
|
||||
Death:
|
||||
SPIR D 4
|
||||
SPIR E 4 A_Scream
|
||||
SPIR FGHI 4
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
// Holy Tail ----------------------------------------------------------------
|
||||
|
||||
ACTOR HolyTail
|
||||
{
|
||||
Radius 1
|
||||
Height 1
|
||||
+NOBLOCKMAP +NOGRAVITY +DROPOFF +NOCLIP
|
||||
+NOTELEPORT
|
||||
RenderStyle Translucent
|
||||
Alpha 0.6
|
||||
|
||||
action native A_CHolyTail();
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
SPIR C 1 A_CHolyTail
|
||||
Loop
|
||||
TailTrail:
|
||||
SPIR D -1
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
// Holy Tail Trail ---------------------------------------------------------
|
||||
|
||||
ACTOR HolyTailTrail : HolyTail
|
||||
{
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
Goto TailTrail
|
||||
}
|
||||
}
|
95
wadsrc/static/actors/hexen/clericstaff.txt
Normal file
95
wadsrc/static/actors/hexen/clericstaff.txt
Normal file
|
@ -0,0 +1,95 @@
|
|||
|
||||
// The Cleric's Serpent Staff -----------------------------------------------
|
||||
|
||||
ACTOR CWeapStaff : ClericWeapon 10
|
||||
{
|
||||
Game Hexen
|
||||
SpawnID 32
|
||||
Weapon.SelectionOrder 1600
|
||||
Weapon.AmmoUse1 1
|
||||
Weapon.AmmoGive1 25
|
||||
Weapon.KickBack 150
|
||||
Weapon.YAdjust 10
|
||||
Weapon.AmmoType1 "Mana1"
|
||||
Inventory.PickupMessage "$TXT_WEAPON_C2"
|
||||
|
||||
action native A_CStaffInitBlink();
|
||||
action native A_CStaffCheckBlink();
|
||||
action native A_CStaffCheck();
|
||||
action native A_CStaffAttack();
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
WCSS A -1
|
||||
Stop
|
||||
Select:
|
||||
CSSF C 1 A_Raise
|
||||
Loop
|
||||
Deselect:
|
||||
CSSF B 3
|
||||
CSSF C 4
|
||||
CSSF C 1 A_Lower
|
||||
Wait
|
||||
Ready:
|
||||
CSSF C 4
|
||||
CSSF B 3 A_CStaffInitBlink
|
||||
CSSF AAAAAAA 1 A_WeaponReady
|
||||
CSSF A 1 A_CStaffCheckBlink
|
||||
Goto Ready + 2
|
||||
Fire:
|
||||
CSSF A 1 Offset (0, 45) A_CStaffCheck
|
||||
CSSF J 1 Offset (0, 50) A_CStaffAttack
|
||||
CSSF J 2 Offset (0, 50)
|
||||
CSSF J 2 Offset (0, 45)
|
||||
CSSF A 2 Offset (0, 40)
|
||||
CSSF A 2 Offset (0, 36)
|
||||
Goto Ready + 2
|
||||
Blink:
|
||||
CSSF BBBCCCCCBBB 1 A_WeaponReady
|
||||
Goto Ready + 2
|
||||
Drain:
|
||||
CSSF K 10 Offset (0, 36)
|
||||
Goto Ready + 2
|
||||
}
|
||||
}
|
||||
|
||||
// Serpent Staff Missile ----------------------------------------------------
|
||||
|
||||
ACTOR CStaffMissile native
|
||||
{
|
||||
Speed 22
|
||||
Radius 12
|
||||
Height 10
|
||||
Damage 5
|
||||
RenderStyle Add
|
||||
Projectile
|
||||
DeathSound "ClericCStaffExplode"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
CSSF DDEE 1 Bright A_CStaffMissileSlither
|
||||
Loop
|
||||
Death:
|
||||
CSSF FG 4 Bright
|
||||
CSSF HI 3 Bright
|
||||
Stop
|
||||
}
|
||||
}
|
||||
|
||||
// Serpent Staff Puff -------------------------------------------------------
|
||||
|
||||
ACTOR CStaffPuff
|
||||
{
|
||||
+NOBLOCKMAP +NOGRAVITY
|
||||
+PUFFONACTORS
|
||||
RenderStyle Translucent
|
||||
Alpha 0.6
|
||||
SeeSound "ClericCStaffHitThing"
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
FHFX STUVW 4
|
||||
Stop
|
||||
}
|
||||
}
|
|
@ -94,6 +94,8 @@
|
|||
#include "actors/hexen/blastradius.txt"
|
||||
#include "actors/hexen/boostarmor.txt"
|
||||
#include "actors/hexen/clericflame.txt"
|
||||
#include "actors/hexen/clericholy.txt"
|
||||
#include "actors/hexen/clericstaff.txt"
|
||||
|
||||
#include "actors/strife/strifeplayer.txt"
|
||||
#include "actors/strife/beggars.txt"
|
||||
|
|
Loading…
Reference in a new issue