gzdoom/wadsrc/static/zscript/actors/hexen/fighterquietus.zs

237 lines
4.5 KiB
Text

// Fighter Weapon Piece -----------------------------------------------------
class FighterWeaponPiece : WeaponPiece
{
Default
{
Inventory.PickupSound "misc/w_pkup";
Inventory.PickupMessage "$TXT_QUIETUS_PIECE";
Inventory.ForbiddenTo "ClericPlayer", "MagePlayer";
WeaponPiece.Weapon "FWeapQuietus";
+FLOATBOB
}
}
// Fighter Weapon Piece 1 ---------------------------------------------------
class FWeaponPiece1 : FighterWeaponPiece
{
Default
{
WeaponPiece.Number 1;
}
States
{
Spawn:
WFR1 A -1 Bright;
Stop;
}
}
// Fighter Weapon Piece 2 ---------------------------------------------------
class FWeaponPiece2 : FighterWeaponPiece
{
Default
{
WeaponPiece.Number 2;
}
States
{
Spawn:
WFR2 A -1 Bright;
Stop;
}
}
// Fighter Weapon Piece 3 ---------------------------------------------------
class FWeaponPiece3 : FighterWeaponPiece
{
Default
{
WeaponPiece.Number 3;
}
States
{
Spawn:
WFR3 A -1 Bright;
Stop;
}
}
// Quietus Drop -------------------------------------------------------------
class QuietusDrop : Actor
{
States
{
Spawn:
TNT1 A 1;
TNT1 A 1 A_DropWeaponPieces("FWeaponPiece1", "FWeaponPiece2", "FWeaponPiece3");
Stop;
}
}
// The Fighter's Sword (Quietus) --------------------------------------------
class FWeapQuietus : FighterWeapon
{
Default
{
Health 3;
Weapon.SelectionOrder 2900;
+WEAPON.PRIMARY_USES_BOTH;
+Inventory.NoAttenPickupSound
Weapon.AmmoUse1 14;
Weapon.AmmoUse2 14;
Weapon.AmmoGive1 20;
Weapon.AmmoGive2 20;
Weapon.KickBack 150;
Weapon.YAdjust 10;
Weapon.AmmoType1 "Mana1";
Weapon.AmmoType2 "Mana2";
Inventory.PickupMessage "$TXT_WEAPON_F4";
Inventory.PickupSound "WeaponBuild";
Tag "$TAG_FWEAPQUIETUS";
}
States
{
Spawn:
TNT1 A -1;
Stop;
Select:
FSRD A 1 Bright A_Raise;
Loop;
Deselect:
FSRD A 1 Bright A_Lower;
Loop;
Ready:
FSRD AAAABBBBCCCC 1 Bright A_WeaponReady;
Loop;
Fire:
FSRD DE 3 Bright Offset (5, 36);
FSRD F 2 Bright Offset (5, 36);
FSRD G 3 Bright Offset (5, 36) A_FSwordAttack;
FSRD H 2 Bright Offset (5, 36);
FSRD I 2 Bright Offset (5, 36);
FSRD I 10 Bright Offset (5, 150);
FSRD A 1 Bright Offset (5, 60);
FSRD B 1 Bright Offset (5, 55);
FSRD C 1 Bright Offset (5, 50);
FSRD A 1 Bright Offset (5, 45);
FSRD B 1 Bright Offset (5, 40);
Goto Ready;
}
//============================================================================
//
// A_FSwordAttack
//
//============================================================================
action void A_FSwordAttack()
{
if (player == null)
{
return;
}
Weapon weapon = player.ReadyWeapon;
if (weapon != null)
{
if (!weapon.DepleteAmmo (weapon.bAltFire))
return;
}
SpawnPlayerMissile ("FSwordMissile", Angle + (45./4),0, 0, -10);
SpawnPlayerMissile ("FSwordMissile", Angle + (45./8),0, 0, -5);
SpawnPlayerMissile ("FSwordMissile", Angle ,0, 0, 0);
SpawnPlayerMissile ("FSwordMissile", Angle - (45./8),0, 0, 5);
SpawnPlayerMissile ("FSwordMissile", Angle - (45./4),0, 0, 10);
A_StartSound ("FighterSwordFire", CHAN_WEAPON);
}
}
// Fighter Sword Missile ----------------------------------------------------
class FSwordMissile : Actor
{
Default
{
Speed 30;
Radius 16;
Height 8;
Damage 8;
Projectile;
+EXTREMEDEATH
+ZDOOMTRANS
RenderStyle "Add";
DeathSound "FighterSwordExplode";
Obituary "$OB_MPFWEAPQUIETUS";
}
States
{
Spawn:
FSFX ABC 3 Bright;
Loop;
Death:
FSFX D 4 Bright;
FSFX E 3 Bright A_FSwordFlames;
FSFX F 4 Bright A_Explode (64, 128, 0);
FSFX G 3 Bright;
FSFX H 4 Bright;
FSFX I 3 Bright;
FSFX J 4 Bright;
FSFX KLM 3 Bright;
Stop;
}
override int DoSpecialDamage(Actor victim, int damage, Name damagetype)
{
if (victim.player)
{
damage -= damage >> 2;
}
return damage;
}
//============================================================================
//
// A_FSwordFlames
//
//============================================================================
void A_FSwordFlames()
{
for (int i = random[FSwordFlame](1, 4); i; i--)
{
double xo = (random[FSwordFlame]() - 128) / 16.;
double yo = (random[FSwordFlame]() - 128) / 16.;
double zo = (random[FSwordFlame]() - 128) / 8.;
Spawn ("FSwordFlame", Vec3Offset(xo, yo, zo), ALLOW_REPLACE);
}
}
}
// Fighter Sword Flame ------------------------------------------------------
class FSwordFlame : Actor
{
Default
{
+NOBLOCKMAP +NOGRAVITY
RenderStyle "Translucent";
Alpha 0.6;
}
States
{
Spawn:
FSFX NOPQRSTUVW 3 Bright;
Stop;
}
}