- Added more DECORATE conversions by Karate Chris.

SVN r1128 (trunk)
This commit is contained in:
Christoph Oelckers 2008-08-08 07:40:41 +00:00
parent f442e75dfa
commit 6ab69165c7
16 changed files with 530 additions and 1805 deletions

View file

@ -205,7 +205,7 @@ ACTOR(MinotaurRoam)
ACTOR(MinotaurChase) ACTOR(MinotaurChase)
ACTOR(MinotaurDeath) ACTOR(MinotaurDeath)
// Hexen stuff
ACTOR(BatSpawnInit) ACTOR(BatSpawnInit)
ACTOR(BatSpawn) ACTOR(BatSpawn)
ACTOR(BatMove) ACTOR(BatMove)
@ -255,6 +255,18 @@ ACTOR(FiredSplotch)
ACTOR(SmBounce) ACTOR(SmBounce)
ACTOR(FogSpawn) ACTOR(FogSpawn)
ACTOR(FogMove) ACTOR(FogMove)
WEAPON(FPunchAttack)
WEAPON(FAxeCheckUp)
WEAPON(FAxeCheckReady)
WEAPON(FAxeCheckAtk)
WEAPON(FAxeAttack)
WEAPON(FAxeCheckUpG)
WEAPON(FAxeCheckReadyG)
WEAPON(FHammerAttack)
WEAPON(FHammerThrow)
ACTOR(DropQuietusPieces)
WEAPON(FSwordAttack)
WEAPON(FSwordFlames)
ACTOR(Summon) ACTOR(Summon)
ACTOR(PoisonBagInit) ACTOR(PoisonBagInit)
ACTOR(CheckThrowBomb) ACTOR(CheckThrowBomb)

View file

@ -33,7 +33,7 @@ void A_CMaceAttack (AActor *actor)
slope = P_AimLineAttack (player->mo, angle, 2*MELEERANGE, &linetarget); slope = P_AimLineAttack (player->mo, angle, 2*MELEERANGE, &linetarget);
if (linetarget) if (linetarget)
{ {
P_LineAttack (player->mo, angle, 2*MELEERANGE, slope, damage, NAME_Melee, RUNTIME_CLASS(AHammerPuff), true); P_LineAttack (player->mo, angle, 2*MELEERANGE, slope, damage, NAME_Melee, PClass::FindClass ("HammerPuff"), true);
AdjustPlayerAngle (player->mo, linetarget); AdjustPlayerAngle (player->mo, linetarget);
// player->mo->angle = R_PointToAngle2(player->mo->x, // player->mo->angle = R_PointToAngle2(player->mo->x,
// player->mo->y, linetarget->x, linetarget->y); // player->mo->y, linetarget->x, linetarget->y);
@ -43,7 +43,7 @@ void A_CMaceAttack (AActor *actor)
slope = P_AimLineAttack (player->mo, angle, 2*MELEERANGE, &linetarget); slope = P_AimLineAttack (player->mo, angle, 2*MELEERANGE, &linetarget);
if (linetarget) if (linetarget)
{ {
P_LineAttack (player->mo, angle, 2*MELEERANGE, slope, damage, NAME_Melee, RUNTIME_CLASS(AHammerPuff), true); P_LineAttack (player->mo, angle, 2*MELEERANGE, slope, damage, NAME_Melee, PClass::FindClass ("HammerPuff"), true);
AdjustPlayerAngle (player->mo, linetarget); AdjustPlayerAngle (player->mo, linetarget);
// player->mo->angle = R_PointToAngle2(player->mo->x, // player->mo->angle = R_PointToAngle2(player->mo->x,
// player->mo->y, linetarget->x, linetarget->y); // player->mo->y, linetarget->x, linetarget->y);
@ -55,7 +55,7 @@ void A_CMaceAttack (AActor *actor)
angle = player->mo->angle; angle = player->mo->angle;
slope = P_AimLineAttack (player->mo, angle, MELEERANGE, &linetarget); slope = P_AimLineAttack (player->mo, angle, MELEERANGE, &linetarget);
P_LineAttack (player->mo, angle, MELEERANGE, slope, damage, NAME_Melee, RUNTIME_CLASS(AHammerPuff)); P_LineAttack (player->mo, angle, MELEERANGE, slope, damage, NAME_Melee, PClass::FindClass ("HammerPuff"));
macedone: macedone:
return; return;
} }

View file

@ -31,7 +31,7 @@ EXTERN_CVAR (Int, cl_bloodtype)
class AFWeapAxe : public AFighterWeapon class AFWeapAxe : public AFighterWeapon
{ {
DECLARE_ACTOR (AFWeapAxe, AFighterWeapon) DECLARE_CLASS (AFWeapAxe, AFighterWeapon)
public: public:
FState *GetUpState (); FState *GetUpState ();
FState *GetDownState (); FState *GetDownState ();
@ -39,157 +39,28 @@ public:
FState *GetAtkState (bool hold); FState *GetAtkState (bool hold);
}; };
FState AFWeapAxe::States[] = IMPLEMENT_CLASS (AFWeapAxe)
{
#define S_AXE 0
S_NORMAL (WFAX, 'A', -1, NULL , NULL),
#define S_FAXEREADY (S_AXE+1)
S_NORMAL (FAXE, 'A', 1, A_FAxeCheckReady , &States[S_FAXEREADY]),
#define S_FAXEDOWN (S_FAXEREADY+1)
S_NORMAL (FAXE, 'A', 1, A_Lower , &States[S_FAXEDOWN]),
#define S_FAXEUP (S_FAXEDOWN+1)
S_NORMAL (FAXE, 'A', 1, A_FAxeCheckUp , &States[S_FAXEUP]),
#define S_FAXEATK (S_FAXEUP+1)
S_NORMAL2 (FAXE, 'B', 4, A_FAxeCheckAtk , &States[S_FAXEATK+1], 15, 32),
S_NORMAL2 (FAXE, 'C', 3, NULL , &States[S_FAXEATK+2], 15, 32),
S_NORMAL2 (FAXE, 'D', 2, NULL , &States[S_FAXEATK+3], 15, 32),
S_NORMAL2 (FAXE, 'D', 1, A_FAxeAttack , &States[S_FAXEATK+4], -5, 70),
S_NORMAL2 (FAXE, 'D', 2, NULL , &States[S_FAXEATK+5], -25, 90),
S_NORMAL2 (FAXE, 'E', 1, NULL , &States[S_FAXEATK+6], 15, 32),
S_NORMAL2 (FAXE, 'E', 2, NULL , &States[S_FAXEATK+7], 10, 54),
S_NORMAL2 (FAXE, 'E', 7, NULL , &States[S_FAXEATK+8], 10, 150),
S_NORMAL2 (FAXE, 'A', 1, A_ReFire , &States[S_FAXEATK+9], 0, 60),
S_NORMAL2 (FAXE, 'A', 1, NULL , &States[S_FAXEATK+10], 0, 52),
S_NORMAL2 (FAXE, 'A', 1, NULL , &States[S_FAXEATK+11], 0, 44),
S_NORMAL2 (FAXE, 'A', 1, NULL , &States[S_FAXEATK+12], 0, 36),
S_NORMAL (FAXE, 'A', 1, NULL , &States[S_FAXEREADY]),
#define S_FAXEREADY_G (S_FAXEATK+13)
S_NORMAL (FAXE, 'L', 1, A_FAxeCheckReadyG , &States[S_FAXEREADY_G+1]),
S_NORMAL (FAXE, 'L', 1, A_FAxeCheckReadyG , &States[S_FAXEREADY_G+2]),
S_NORMAL (FAXE, 'L', 1, A_FAxeCheckReadyG , &States[S_FAXEREADY_G+3]),
S_NORMAL (FAXE, 'M', 1, A_FAxeCheckReadyG , &States[S_FAXEREADY_G+4]),
S_NORMAL (FAXE, 'M', 1, A_FAxeCheckReadyG , &States[S_FAXEREADY_G+5]),
S_NORMAL (FAXE, 'M', 1, A_FAxeCheckReadyG , &States[S_FAXEREADY_G]),
#define S_FAXEDOWN_G (S_FAXEREADY_G+6)
S_NORMAL (FAXE, 'L', 1, A_Lower , &States[S_FAXEDOWN_G]),
#define S_FAXEUP_G (S_FAXEDOWN_G+1)
S_NORMAL (FAXE, 'L', 1, A_FAxeCheckUpG , &States[S_FAXEUP_G]),
#define S_FAXEATK_G (S_FAXEUP_G+1)
S_NORMAL2 (FAXE, 'N', 4, NULL , &States[S_FAXEATK_G+1], 15, 32),
S_NORMAL2 (FAXE, 'O', 3, NULL , &States[S_FAXEATK_G+2], 15, 32),
S_NORMAL2 (FAXE, 'P', 2, NULL , &States[S_FAXEATK_G+3], 15, 32),
S_NORMAL2 (FAXE, 'P', 1, A_FAxeAttack , &States[S_FAXEATK_G+4], -5, 70),
S_NORMAL2 (FAXE, 'P', 2, NULL , &States[S_FAXEATK_G+5], -25, 90),
S_NORMAL2 (FAXE, 'Q', 1, NULL , &States[S_FAXEATK_G+6], 15, 32),
S_NORMAL2 (FAXE, 'Q', 2, NULL , &States[S_FAXEATK_G+7], 10, 54),
S_NORMAL2 (FAXE, 'Q', 7, NULL , &States[S_FAXEATK_G+8], 10, 150),
S_NORMAL2 (FAXE, 'A', 1, A_ReFire , &States[S_FAXEATK_G+9], 0, 60),
S_NORMAL2 (FAXE, 'A', 1, NULL , &States[S_FAXEATK_G+10], 0, 52),
S_NORMAL2 (FAXE, 'A', 1, NULL , &States[S_FAXEATK_G+11], 0, 44),
S_NORMAL2 (FAXE, 'A', 1, NULL , &States[S_FAXEATK_G+12], 0, 36),
S_NORMAL (FAXE, 'A', 1, NULL , &States[S_FAXEREADY_G]),
};
IMPLEMENT_ACTOR (AFWeapAxe, Hexen, 8010, 27)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (S_AXE)
PROP_Weapon_SelectionOrder (1500)
PROP_Weapon_Flags (WIF_AXEBLOOD|WIF_AMMO_OPTIONAL|WIF_BOT_MELEE)
PROP_Weapon_AmmoUse1 (2)
PROP_Weapon_AmmoGive1 (25)
PROP_Weapon_UpState (S_FAXEUP)
PROP_Weapon_DownState (S_FAXEDOWN)
PROP_Weapon_ReadyState (S_FAXEREADY)
PROP_Weapon_AtkState (S_FAXEATK)
PROP_Weapon_Kickback (150)
PROP_Weapon_YAdjust (0-12)
PROP_Weapon_AmmoType1 ("Mana1")
PROP_Inventory_PickupMessage("$TXT_WEAPON_F2")
END_DEFAULTS
FState *AFWeapAxe::GetUpState () FState *AFWeapAxe::GetUpState ()
{ {
return Ammo1->Amount ? &States[S_FAXEUP_G] : Super::GetUpState(); return Ammo1->Amount ? FindState ("SelectGlow") : Super::GetUpState();
} }
FState *AFWeapAxe::GetDownState () FState *AFWeapAxe::GetDownState ()
{ {
return Ammo1->Amount ? &States[S_FAXEDOWN_G] : Super::GetDownState(); return Ammo1->Amount ? FindState ("DeselectGlow") : Super::GetDownState();
} }
FState *AFWeapAxe::GetReadyState () FState *AFWeapAxe::GetReadyState ()
{ {
return Ammo1->Amount ? &States[S_FAXEREADY_G] : Super::GetReadyState(); return Ammo1->Amount ? FindState ("ReadyGlow") : Super::GetReadyState();
} }
FState *AFWeapAxe::GetAtkState (bool hold) FState *AFWeapAxe::GetAtkState (bool hold)
{ {
return Ammo1->Amount ? &States[S_FAXEATK_G] : Super::GetAtkState(hold); return Ammo1->Amount ? FindState ("FireGlow") : Super::GetAtkState(hold);
} }
// Axe Puff -----------------------------------------------------------------
class AAxePuff : public AActor
{
DECLARE_ACTOR (AAxePuff, AActor)
};
FState AAxePuff::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 (AAxePuff, 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 ("FighterAxeHitThing")
PROP_AttackSound ("FighterHammerHitWall")
PROP_ActiveSound ("FighterHammerMiss")
END_DEFAULTS
// Glowing Axe Puff ---------------------------------------------------------
class AAxePuffGlow : public AAxePuff
{
DECLARE_ACTOR (AAxePuffGlow, AAxePuff)
};
FState AAxePuffGlow::States[] =
{
S_BRIGHT (FAXE, 'R', 4, NULL , &States[1]),
S_BRIGHT (FAXE, 'S', 4, NULL , &States[2]),
S_BRIGHT (FAXE, 'T', 4, NULL , &States[3]),
S_BRIGHT (FAXE, 'U', 4, NULL , &States[4]),
S_BRIGHT (FAXE, 'V', 4, NULL , &States[5]),
S_BRIGHT (FAXE, 'W', 4, NULL , &States[6]),
S_BRIGHT (FAXE, 'X', 4, NULL , NULL),
};
IMPLEMENT_ACTOR (AAxePuffGlow, Hexen, -1, 0)
PROP_Flags3 (MF3_PUFFONACTORS)
PROP_RenderStyle (STYLE_Add)
PROP_Alpha (OPAQUE)
PROP_SpawnState (0)
END_DEFAULTS
//============================================================================ //============================================================================
// //
// A_FAxeCheckReady // A_FAxeCheckReady
@ -206,7 +77,7 @@ void A_FAxeCheckReady (AActor *actor)
} }
if (player->ReadyWeapon->Ammo1->Amount) if (player->ReadyWeapon->Ammo1->Amount)
{ {
P_SetPsprite (player, ps_weapon, &AFWeapAxe::States[S_FAXEREADY_G]); P_SetPsprite (player, ps_weapon, player->ReadyWeapon->FindState ("ReadyGlow"));
} }
else else
{ {
@ -230,7 +101,7 @@ void A_FAxeCheckReadyG (AActor *actor)
} }
if (player->ReadyWeapon->Ammo1->Amount <= 0) if (player->ReadyWeapon->Ammo1->Amount <= 0)
{ {
P_SetPsprite (player, ps_weapon, &AFWeapAxe::States[S_FAXEREADY]); P_SetPsprite (player, ps_weapon, player->ReadyWeapon->FindState ("Ready"));
} }
else else
{ {
@ -254,7 +125,7 @@ void A_FAxeCheckUp (AActor *actor)
} }
if (player->ReadyWeapon->Ammo1->Amount) if (player->ReadyWeapon->Ammo1->Amount)
{ {
P_SetPsprite (player, ps_weapon, &AFWeapAxe::States[S_FAXEUP_G]); P_SetPsprite (player, ps_weapon, player->ReadyWeapon->FindState ("ReadyGlow"));
} }
else else
{ {
@ -278,7 +149,7 @@ void A_FAxeCheckUpG (AActor *actor)
} }
if (player->ReadyWeapon->Ammo1->Amount <= 0) if (player->ReadyWeapon->Ammo1->Amount <= 0)
{ {
P_SetPsprite (player, ps_weapon, &AFWeapAxe::States[S_FAXEUP]); P_SetPsprite (player, ps_weapon, player->ReadyWeapon->FindState ("Select"));
} }
else else
{ {
@ -302,7 +173,7 @@ void A_FAxeCheckAtk (AActor *actor)
} }
if (player->ReadyWeapon->Ammo1->Amount) if (player->ReadyWeapon->Ammo1->Amount)
{ {
P_SetPsprite (player, ps_weapon, &AFWeapAxe::States[S_FAXEATK_G]); P_SetPsprite (player, ps_weapon, player->ReadyWeapon->FindState ("FireGlow"));
} }
} }
@ -339,12 +210,12 @@ void A_FAxeAttack (AActor *actor)
{ {
damage <<= 1; damage <<= 1;
power = 6*FRACUNIT; power = 6*FRACUNIT;
pufftype = RUNTIME_CLASS(AAxePuffGlow); pufftype = PClass::FindClass ("AxePuffGlow");
useMana = 1; useMana = 1;
} }
else else
{ {
pufftype = RUNTIME_CLASS(AAxePuff); pufftype = PClass::FindClass ("AxePuff");
useMana = 0; useMana = 0;
} }
for (i = 0; i < 16; i++) for (i = 0; i < 16; i++)
@ -395,7 +266,7 @@ axedone:
(!(weapon->WeaponFlags & WIF_PRIMARY_USES_BOTH) || (!(weapon->WeaponFlags & WIF_PRIMARY_USES_BOTH) ||
weapon->Ammo2 == NULL || weapon->Ammo2->Amount == 0)) weapon->Ammo2 == NULL || weapon->Ammo2->Amount == 0))
{ {
P_SetPsprite (player, ps_weapon, &AFWeapAxe::States[S_FAXEATK+5]); P_SetPsprite (player, ps_weapon, player->ReadyWeapon->FindState ("Fire") + 5);
} }
} }
} }

View file

@ -17,154 +17,6 @@ static FRandom pr_atk ("FHammerAtk");
extern void AdjustPlayerAngle (AActor *pmo, AActor *linetarget); extern void AdjustPlayerAngle (AActor *pmo, AActor *linetarget);
void A_FHammerAttack (AActor *actor);
void A_FHammerThrow (AActor *actor);
void A_HammerSound (AActor *);
void A_BeAdditive (AActor *);
// The Fighter's Hammer -----------------------------------------------------
class AFWeapHammer : public AFighterWeapon
{
DECLARE_ACTOR (AFWeapHammer, AFighterWeapon)
};
FState AFWeapHammer::States[] =
{
#define S_HAMM 0
S_NORMAL (WFHM, 'A', -1, NULL , NULL),
#define S_FHAMMERREADY (S_HAMM+1)
S_NORMAL (FHMR, 'A', 1, A_WeaponReady , &States[S_FHAMMERREADY]),
#define S_FHAMMERDOWN (S_FHAMMERREADY+1)
S_NORMAL (FHMR, 'A', 1, A_Lower , &States[S_FHAMMERDOWN]),
#define S_FHAMMERUP (S_FHAMMERDOWN+1)
S_NORMAL (FHMR, 'A', 1, A_Raise , &States[S_FHAMMERUP]),
#define S_FHAMMERATK (S_FHAMMERUP+1)
S_NORMAL2 (FHMR, 'B', 6, NULL , &States[S_FHAMMERATK+1], 5, 0),
S_NORMAL2 (FHMR, 'C', 3, A_FHammerAttack , &States[S_FHAMMERATK+2], 5, 0),
S_NORMAL2 (FHMR, 'D', 3, NULL , &States[S_FHAMMERATK+3], 5, 0),
S_NORMAL2 (FHMR, 'E', 2, NULL , &States[S_FHAMMERATK+4], 5, 0),
S_NORMAL2 (FHMR, 'E', 10, A_FHammerThrow , &States[S_FHAMMERATK+5], 5, 150),
S_NORMAL2 (FHMR, 'A', 1, NULL , &States[S_FHAMMERATK+6], 0, 60),
S_NORMAL2 (FHMR, 'A', 1, NULL , &States[S_FHAMMERATK+7], 0, 55),
S_NORMAL2 (FHMR, 'A', 1, NULL , &States[S_FHAMMERATK+8], 0, 50),
S_NORMAL2 (FHMR, 'A', 1, NULL , &States[S_FHAMMERATK+9], 0, 45),
S_NORMAL2 (FHMR, 'A', 1, NULL , &States[S_FHAMMERATK+10], 0, 40),
S_NORMAL2 (FHMR, 'A', 1, NULL , &States[S_FHAMMERATK+11], 0, 35),
S_NORMAL (FHMR, 'A', 1, NULL , &States[S_FHAMMERREADY]),
};
IMPLEMENT_ACTOR (AFWeapHammer, Hexen, 123, 28)
PROP_Flags (MF_SPECIAL)
PROP_Flags5 (MF5_BLOODSPLATTER)
PROP_SpawnState (S_HAMM)
PROP_Weapon_SelectionOrder (900)
PROP_Weapon_Flags (WIF_AMMO_OPTIONAL|WIF_BOT_MELEE)
PROP_Weapon_AmmoUse1 (3)
PROP_Weapon_AmmoGive1 (25)
PROP_Weapon_UpState (S_FHAMMERUP)
PROP_Weapon_DownState (S_FHAMMERDOWN)
PROP_Weapon_ReadyState (S_FHAMMERREADY)
PROP_Weapon_AtkState (S_FHAMMERATK)
PROP_Weapon_Kickback (150)
PROP_Weapon_YAdjust (0-10)
PROP_Weapon_MoveCombatDist (22000000)
PROP_Weapon_AmmoType1 ("Mana2")
PROP_Weapon_ProjectileType ("HammerMissile")
PROP_Inventory_PickupMessage("$TXT_WEAPON_F3")
END_DEFAULTS
// Hammer Missile -----------------------------------------------------------
class AHammerMissile : public AActor
{
DECLARE_ACTOR (AHammerMissile, AActor)
public:
void GetExplodeParms (int &damage, int &dist, bool &hurtSource);
};
FState AHammerMissile::States[] =
{
#define S_HAMMER_MISSILE_1 0
S_BRIGHT (FHFX, 'A', 2, NULL , &States[S_HAMMER_MISSILE_1+1]),
S_BRIGHT (FHFX, 'B', 2, A_HammerSound , &States[S_HAMMER_MISSILE_1+2]),
S_BRIGHT (FHFX, 'C', 2, NULL , &States[S_HAMMER_MISSILE_1+3]),
S_BRIGHT (FHFX, 'D', 2, NULL , &States[S_HAMMER_MISSILE_1+4]),
S_BRIGHT (FHFX, 'E', 2, NULL , &States[S_HAMMER_MISSILE_1+5]),
S_BRIGHT (FHFX, 'F', 2, NULL , &States[S_HAMMER_MISSILE_1+6]),
S_BRIGHT (FHFX, 'G', 2, NULL , &States[S_HAMMER_MISSILE_1+7]),
S_BRIGHT (FHFX, 'H', 2, NULL , &States[S_HAMMER_MISSILE_1]),
#define S_HAMMER_MISSILE_X1 (S_HAMMER_MISSILE_1+8)
S_BRIGHT (FHFX, 'I', 3, A_BeAdditive , &States[S_HAMMER_MISSILE_X1+1]),
S_BRIGHT (FHFX, 'J', 3, NULL , &States[S_HAMMER_MISSILE_X1+2]),
S_BRIGHT (FHFX, 'K', 3, A_Explode , &States[S_HAMMER_MISSILE_X1+3]),
S_BRIGHT (FHFX, 'L', 3, NULL , &States[S_HAMMER_MISSILE_X1+4]),
S_BRIGHT (FHFX, 'M', 3, NULL , &States[S_HAMMER_MISSILE_X1+5]),
S_NORMAL (FHFX, 'N', 3, NULL , &States[S_HAMMER_MISSILE_X1+6]),
S_BRIGHT (FHFX, 'O', 3, NULL , &States[S_HAMMER_MISSILE_X1+7]),
S_BRIGHT (FHFX, 'P', 3, NULL , &States[S_HAMMER_MISSILE_X1+8]),
S_BRIGHT (FHFX, 'Q', 3, NULL , &States[S_HAMMER_MISSILE_X1+9]),
S_BRIGHT (FHFX, 'R', 3, NULL , NULL),
};
IMPLEMENT_ACTOR (AHammerMissile, Hexen, -1, 0)
PROP_SpeedFixed (25)
PROP_RadiusFixed (14)
PROP_HeightFixed (20)
PROP_Damage (10)
PROP_DamageType (NAME_Fire)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS)
PROP_SpawnState (S_HAMMER_MISSILE_1)
PROP_DeathState (S_HAMMER_MISSILE_X1)
PROP_DeathSound ("FighterHammerExplode")
END_DEFAULTS
void AHammerMissile::GetExplodeParms (int &damage, int &dist, bool &hurtSource)
{
damage = 128;
dist;
hurtSource = false;
}
// Hammer Puff (also used by fist) ------------------------------------------
FState AHammerPuff::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 (AHammerPuff, 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 ("FighterHammerHitThing")
PROP_AttackSound ("FighterHammerHitWall")
PROP_ActiveSound ("FighterHammerMiss")
END_DEFAULTS
void AHammerPuff::BeginPlay ()
{
Super::BeginPlay ();
momz = FRACUNIT*8/10;
}
//============================================================================ //============================================================================
// //
// A_FHammerAttack // A_FHammerAttack
@ -195,7 +47,7 @@ void A_FHammerAttack (AActor *actor)
slope = P_AimLineAttack (pmo, angle, HAMMER_RANGE, &linetarget); slope = P_AimLineAttack (pmo, angle, HAMMER_RANGE, &linetarget);
if (linetarget) if (linetarget)
{ {
P_LineAttack (pmo, angle, HAMMER_RANGE, slope, damage, NAME_Melee, RUNTIME_CLASS(AHammerPuff), true); P_LineAttack (pmo, angle, HAMMER_RANGE, slope, damage, NAME_Melee, PClass::FindClass ("HammerPuff"), true);
AdjustPlayerAngle(pmo, linetarget); AdjustPlayerAngle(pmo, linetarget);
if (linetarget->flags3&MF3_ISMONSTER || linetarget->player) if (linetarget->flags3&MF3_ISMONSTER || linetarget->player)
{ {
@ -208,7 +60,7 @@ void A_FHammerAttack (AActor *actor)
slope = P_AimLineAttack(pmo, angle, HAMMER_RANGE, &linetarget); slope = P_AimLineAttack(pmo, angle, HAMMER_RANGE, &linetarget);
if(linetarget) if(linetarget)
{ {
P_LineAttack(pmo, angle, HAMMER_RANGE, slope, damage, NAME_Melee, RUNTIME_CLASS(AHammerPuff), true); P_LineAttack(pmo, angle, HAMMER_RANGE, slope, damage, NAME_Melee, PClass::FindClass ("HammerPuff"), true);
AdjustPlayerAngle(pmo, linetarget); AdjustPlayerAngle(pmo, linetarget);
if (linetarget->flags3&MF3_ISMONSTER || linetarget->player) if (linetarget->flags3&MF3_ISMONSTER || linetarget->player)
{ {
@ -221,7 +73,7 @@ void A_FHammerAttack (AActor *actor)
// didn't find any targets in meleerange, so set to throw out a hammer // didn't find any targets in meleerange, so set to throw out a hammer
angle = pmo->angle; angle = pmo->angle;
slope = P_AimLineAttack (pmo, angle, HAMMER_RANGE, &linetarget); slope = P_AimLineAttack (pmo, angle, HAMMER_RANGE, &linetarget);
if (P_LineAttack (pmo, angle, HAMMER_RANGE, slope, damage, NAME_Melee, RUNTIME_CLASS(AHammerPuff), true) != NULL) if (P_LineAttack (pmo, angle, HAMMER_RANGE, slope, damage, NAME_Melee, PClass::FindClass ("HammerPuff"), true) != NULL)
{ {
pmo->special1 = false; pmo->special1 = false;
} }
@ -266,20 +118,9 @@ void A_FHammerThrow (AActor *actor)
if (!weapon->DepleteAmmo (weapon->bAltFire, false)) if (!weapon->DepleteAmmo (weapon->bAltFire, false))
return; return;
} }
mo = P_SpawnPlayerMissile (player->mo, RUNTIME_CLASS(AHammerMissile)); mo = P_SpawnPlayerMissile (player->mo, PClass::FindClass ("HammerMissile"));
if (mo) if (mo)
{ {
mo->special1 = 0; mo->special1 = 0;
} }
} }
//============================================================================
//
// A_HammerSound
//
//============================================================================
void A_HammerSound (AActor *actor)
{
S_Sound (actor, CHAN_BODY, "FighterHammerContinuous", 1, ATTN_NORM);
}

View file

@ -133,93 +133,6 @@ void AdjustPlayerAngle (AActor *pmo, AActor *linetarget)
} }
} }
// Fist (first weapon) ------------------------------------------------------
void A_FPunchAttack (AActor *actor);
class AFWeapFist : public AFighterWeapon
{
DECLARE_ACTOR (AFWeapFist, AFighterWeapon)
};
FState AFWeapFist::States[] =
{
#define S_PUNCHREADY 0
S_NORMAL (FPCH, 'A', 1, A_WeaponReady , &States[S_PUNCHREADY]),
#define S_PUNCHDOWN (S_PUNCHREADY+1)
S_NORMAL (FPCH, 'A', 1, A_Lower , &States[S_PUNCHDOWN]),
#define S_PUNCHUP (S_PUNCHDOWN+1)
S_NORMAL (FPCH, 'A', 1, A_Raise , &States[S_PUNCHUP]),
#define S_PUNCHATK1 (S_PUNCHUP+1)
S_NORMAL2(FPCH, 'B', 5, NULL , &States[S_PUNCHATK1+1], 5, 40),
S_NORMAL2(FPCH, 'C', 4, NULL , &States[S_PUNCHATK1+2], 5, 40),
S_NORMAL2(FPCH, 'D', 4, A_FPunchAttack , &States[S_PUNCHATK1+3], 5, 40),
S_NORMAL2(FPCH, 'C', 4, NULL , &States[S_PUNCHATK1+4], 5, 40),
S_NORMAL2(FPCH, 'B', 5, A_ReFire , &States[S_PUNCHREADY], 5, 40),
#define S_PUNCHATK2 (S_PUNCHATK1+5)
S_NORMAL2(FPCH, 'D', 4, NULL , &States[S_PUNCHATK2+1], 5, 40),
S_NORMAL2(FPCH, 'E', 4, NULL , &States[S_PUNCHATK2+2], 5, 40),
S_NORMAL2(FPCH, 'E', 1, NULL , &States[S_PUNCHATK2+3], 15, 50),
S_NORMAL2(FPCH, 'E', 1, NULL , &States[S_PUNCHATK2+4], 25, 60),
S_NORMAL2(FPCH, 'E', 1, NULL , &States[S_PUNCHATK2+5], 35, 70),
S_NORMAL2(FPCH, 'E', 1, NULL , &States[S_PUNCHATK2+6], 45, 80),
S_NORMAL2(FPCH, 'E', 1, NULL , &States[S_PUNCHATK2+7], 55, 90),
S_NORMAL2(FPCH, 'E', 1, NULL , &States[S_PUNCHATK2+8], 65, 100),
S_NORMAL2(FPCH, 'E', 10, NULL , &States[S_PUNCHREADY], 0, 150)
};
IMPLEMENT_ACTOR (AFWeapFist, Hexen, -1, 0)
PROP_Flags5 (MF5_BLOODSPLATTER)
PROP_Weapon_SelectionOrder (3400)
PROP_Weapon_Flags (WIF_BOT_MELEE)
PROP_Weapon_UpState (S_PUNCHUP)
PROP_Weapon_DownState (S_PUNCHDOWN)
PROP_Weapon_ReadyState (S_PUNCHREADY)
PROP_Weapon_AtkState (S_PUNCHATK1)
PROP_Weapon_Kickback (150)
END_DEFAULTS
// Punch puff ---------------------------------------------------------------
class APunchPuff : public AActor
{
DECLARE_ACTOR (APunchPuff, AActor)
public:
void BeginPlay ();
};
FState APunchPuff::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 (APunchPuff, 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 ("FighterPunchHitThing")
PROP_AttackSound ("FighterPunchHitWall")
PROP_ActiveSound ("FighterPunchMiss")
END_DEFAULTS
void APunchPuff::BeginPlay ()
{
Super::BeginPlay ();
momz = FRACUNIT;
}
//============================================================================ //============================================================================
// //
// A_FPunchAttack // A_FPunchAttack
@ -245,7 +158,7 @@ void A_FPunchAttack (AActor *actor)
damage = 40+(pr_fpatk()&15); damage = 40+(pr_fpatk()&15);
power = 2*FRACUNIT; power = 2*FRACUNIT;
pufftype = RUNTIME_CLASS(APunchPuff); pufftype = PClass::FindClass ("PunchPuff");
for (i = 0; i < 16; i++) for (i = 0; i < 16; i++)
{ {
angle = pmo->angle + i*(ANG45/16); angle = pmo->angle + i*(ANG45/16);
@ -257,7 +170,7 @@ void A_FPunchAttack (AActor *actor)
{ {
damage <<= 1; damage <<= 1;
power = 6*FRACUNIT; power = 6*FRACUNIT;
pufftype = RUNTIME_CLASS(AHammerPuff); pufftype = PClass::FindClass ("HammerPuff");
} }
P_LineAttack (pmo, angle, 2*MELEERANGE, slope, damage, NAME_Melee, pufftype, true); P_LineAttack (pmo, angle, 2*MELEERANGE, slope, damage, NAME_Melee, pufftype, true);
if (linetarget->flags3&MF3_ISMONSTER || linetarget->player) if (linetarget->flags3&MF3_ISMONSTER || linetarget->player)
@ -276,7 +189,7 @@ void A_FPunchAttack (AActor *actor)
{ {
damage <<= 1; damage <<= 1;
power = 6*FRACUNIT; power = 6*FRACUNIT;
pufftype = RUNTIME_CLASS(AHammerPuff); pufftype = PClass::FindClass ("HammerPuff");
} }
P_LineAttack (pmo, angle, 2*MELEERANGE, slope, damage, NAME_Melee, pufftype, true); P_LineAttack (pmo, angle, 2*MELEERANGE, slope, damage, NAME_Melee, pufftype, true);
if (linetarget->flags3&MF3_ISMONSTER || linetarget->player) if (linetarget->flags3&MF3_ISMONSTER || linetarget->player)
@ -298,7 +211,7 @@ punchdone:
if (pmo->special1 == 3) if (pmo->special1 == 3)
{ {
pmo->special1 = 0; pmo->special1 = 0;
P_SetPsprite (player, ps_weapon, &AFWeapFist::States[S_PUNCHATK2]); P_SetPsprite (player, ps_weapon, player->ReadyWeapon->FindState ("Fire2"));
S_Sound (pmo, CHAN_VOICE, "*fistgrunt", 1, ATTN_NORM); S_Sound (pmo, CHAN_VOICE, "*fistgrunt", 1, ATTN_NORM);
} }
return; return;

View file

@ -28,9 +28,7 @@ protected:
bool MatchPlayerClass (AActor *toucher); bool MatchPlayerClass (AActor *toucher);
}; };
IMPLEMENT_STATELESS_ACTOR (AFighterWeaponPiece, Hexen, -1, 0) IMPLEMENT_CLASS (AFighterWeaponPiece)
PROP_Inventory_PickupMessage("$TXT_QUIETUS_PIECE")
END_DEFAULTS
bool AFighterWeaponPiece::MatchPlayerClass (AActor *toucher) bool AFighterWeaponPiece::MatchPlayerClass (AActor *toucher)
{ {
@ -42,21 +40,12 @@ bool AFighterWeaponPiece::MatchPlayerClass (AActor *toucher)
class AFWeaponPiece1 : public AFighterWeaponPiece class AFWeaponPiece1 : public AFighterWeaponPiece
{ {
DECLARE_ACTOR (AFWeaponPiece1, AFighterWeaponPiece) DECLARE_CLASS (AFWeaponPiece1, AFighterWeaponPiece)
public: public:
void BeginPlay (); void BeginPlay ();
}; };
FState AFWeaponPiece1::States[] = IMPLEMENT_CLASS (AFWeaponPiece1)
{
S_BRIGHT (WFR1, 'A', -1, NULL , NULL)
};
IMPLEMENT_ACTOR (AFWeaponPiece1, Hexen, 12, 29)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
void AFWeaponPiece1::BeginPlay () void AFWeaponPiece1::BeginPlay ()
{ {
@ -68,21 +57,12 @@ void AFWeaponPiece1::BeginPlay ()
class AFWeaponPiece2 : public AFighterWeaponPiece class AFWeaponPiece2 : public AFighterWeaponPiece
{ {
DECLARE_ACTOR (AFWeaponPiece2, AFighterWeaponPiece) DECLARE_CLASS (AFWeaponPiece2, AFighterWeaponPiece)
public: public:
void BeginPlay (); void BeginPlay ();
}; };
FState AFWeaponPiece2::States[] = IMPLEMENT_CLASS (AFWeaponPiece2)
{
S_BRIGHT (WFR2, 'A', -1, NULL , NULL)
};
IMPLEMENT_ACTOR (AFWeaponPiece2, Hexen, 13, 30)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
void AFWeaponPiece2::BeginPlay () void AFWeaponPiece2::BeginPlay ()
{ {
@ -94,21 +74,12 @@ void AFWeaponPiece2::BeginPlay ()
class AFWeaponPiece3 : public AFighterWeaponPiece class AFWeaponPiece3 : public AFighterWeaponPiece
{ {
DECLARE_ACTOR (AFWeaponPiece3, AFighterWeaponPiece) DECLARE_CLASS (AFWeaponPiece3, AFighterWeaponPiece)
public: public:
void BeginPlay (); void BeginPlay ();
}; };
FState AFWeaponPiece3::States[] = IMPLEMENT_CLASS (AFWeaponPiece3)
{
S_BRIGHT (WFR3, 'A', -1, NULL , NULL)
};
IMPLEMENT_ACTOR (AFWeaponPiece3, Hexen, 16, 31)
PROP_Flags (MF_SPECIAL)
PROP_Flags2 (MF2_FLOATBOB)
PROP_SpawnState (0)
END_DEFAULTS
void AFWeaponPiece3::BeginPlay () void AFWeaponPiece3::BeginPlay ()
{ {
@ -116,147 +87,16 @@ void AFWeaponPiece3::BeginPlay ()
PieceValue = WPIECE3; PieceValue = WPIECE3;
} }
// An actor that spawns the three pieces of the fighter's fourth weapon -----
// This gets spawned if weapon drop is on so that other players can pick up
// this player's weapon.
class AQuietusDrop : public AActor
{
DECLARE_ACTOR (AQuietusDrop, AActor)
};
FState AQuietusDrop::States[] =
{
S_NORMAL (TNT1, 'A', 1, NULL, &States[1]),
S_NORMAL (TNT1, 'A', 1, A_DropQuietusPieces, NULL)
};
IMPLEMENT_ACTOR (AQuietusDrop, Hexen, -1, 0)
PROP_SpawnState (0)
END_DEFAULTS
// The Fighter's Sword (Quietus) --------------------------------------------
class AFWeapQuietus : public AFighterWeapon
{
DECLARE_ACTOR (AFWeapQuietus, AFighterWeapon)
};
FState AFWeapQuietus::States[] =
{
// Dummy state, because the fourth weapon does not appear in a level directly.
S_NORMAL (TNT1, 'A', -1, NULL , NULL),
#define S_FSWORDREADY (1)
S_BRIGHT (FSRD, 'A', 1, A_WeaponReady , &States[S_FSWORDREADY+1]), // S_FSWORDREADY
S_BRIGHT (FSRD, 'A', 1, A_WeaponReady , &States[S_FSWORDREADY+2]), // S_FSWORDREADY1
S_BRIGHT (FSRD, 'A', 1, A_WeaponReady , &States[S_FSWORDREADY+3]), // S_FSWORDREADY2
S_BRIGHT (FSRD, 'A', 1, A_WeaponReady , &States[S_FSWORDREADY+4]), // S_FSWORDREADY3
S_BRIGHT (FSRD, 'B', 1, A_WeaponReady , &States[S_FSWORDREADY+5]), // S_FSWORDREADY4
S_BRIGHT (FSRD, 'B', 1, A_WeaponReady , &States[S_FSWORDREADY+6]), // S_FSWORDREADY5
S_BRIGHT (FSRD, 'B', 1, A_WeaponReady , &States[S_FSWORDREADY+7]), // S_FSWORDREADY6
S_BRIGHT (FSRD, 'B', 1, A_WeaponReady , &States[S_FSWORDREADY+8]), // S_FSWORDREADY7
S_BRIGHT (FSRD, 'C', 1, A_WeaponReady , &States[S_FSWORDREADY+9]), // S_FSWORDREADY8
S_BRIGHT (FSRD, 'C', 1, A_WeaponReady , &States[S_FSWORDREADY+10]), // S_FSWORDREADY9
S_BRIGHT (FSRD, 'C', 1, A_WeaponReady , &States[S_FSWORDREADY+11]), // S_FSWORDREADY10
S_BRIGHT (FSRD, 'C', 1, A_WeaponReady , &States[S_FSWORDREADY]), // S_FSWORDREADY11
#define S_FSWORDDOWN (S_FSWORDREADY+12)
S_BRIGHT (FSRD, 'A', 1, A_Lower , &States[S_FSWORDDOWN]), // S_FSWORDDOWN
#define S_FSWORDUP (S_FSWORDDOWN+1)
S_BRIGHT (FSRD, 'A', 1, A_Raise , &States[S_FSWORDUP]), // S_FSWORDUP
#define S_FSWORDATK (S_FSWORDUP+1)
S_BRIGHT2 (FSRD, 'D', 3, NULL , &States[S_FSWORDATK+1], 5, 36), // S_FSWORDATK_1
S_BRIGHT2 (FSRD, 'E', 3, NULL , &States[S_FSWORDATK+2], 5, 36), // S_FSWORDATK_2
S_BRIGHT2 (FSRD, 'F', 2, NULL , &States[S_FSWORDATK+3], 5, 36), // S_FSWORDATK_3
S_BRIGHT2 (FSRD, 'G', 3, A_FSwordAttack , &States[S_FSWORDATK+4], 5, 36), // S_FSWORDATK_4
S_BRIGHT2 (FSRD, 'H', 2, NULL , &States[S_FSWORDATK+5], 5, 36), // S_FSWORDATK_5
S_BRIGHT2 (FSRD, 'I', 2, NULL , &States[S_FSWORDATK+6], 5, 36), // S_FSWORDATK_6
S_BRIGHT2 (FSRD, 'I', 10, NULL , &States[S_FSWORDATK+7], 5, 150), // S_FSWORDATK_7
S_BRIGHT2 (FSRD, 'A', 1, NULL , &States[S_FSWORDATK+8], 5, 60), // S_FSWORDATK_8
S_BRIGHT2 (FSRD, 'B', 1, NULL , &States[S_FSWORDATK+9], 5, 55), // S_FSWORDATK_9
S_BRIGHT2 (FSRD, 'C', 1, NULL , &States[S_FSWORDATK+10], 5, 50), // S_FSWORDATK_10
S_BRIGHT2 (FSRD, 'A', 1, NULL , &States[S_FSWORDATK+11], 5, 45), // S_FSWORDATK_11
S_BRIGHT2 (FSRD, 'B', 1, NULL , &States[S_FSWORDREADY], 5, 40), // S_FSWORDATK_12
};
IMPLEMENT_ACTOR (AFWeapQuietus, Hexen, -1, 0)
PROP_Flags (MF_SPECIAL)
PROP_SpawnState (0)
PROP_Weapon_SelectionOrder (2900)
PROP_Weapon_Flags (WIF_PRIMARY_USES_BOTH)
PROP_Weapon_AmmoUse1 (14)
PROP_Weapon_AmmoUse2 (14)
PROP_Weapon_AmmoGive1 (0)
PROP_Weapon_AmmoGive2 (0)
PROP_Weapon_UpState (S_FSWORDUP)
PROP_Weapon_DownState (S_FSWORDDOWN)
PROP_Weapon_ReadyState (S_FSWORDREADY)
PROP_Weapon_AtkState (S_FSWORDATK)
PROP_Weapon_Kickback (150)
PROP_Weapon_YAdjust (10)
PROP_Weapon_MoveCombatDist (20000000)
PROP_Weapon_AmmoType1 ("Mana1")
PROP_Weapon_AmmoType2 ("Mana2")
PROP_Weapon_ProjectileType ("FSwordMissile")
PROP_Inventory_PickupMessage("$TXT_WEAPON_F4")
END_DEFAULTS
// Fighter Sword Missile ---------------------------------------------------- // Fighter Sword Missile ----------------------------------------------------
class AFSwordMissile : public AActor class AFSwordMissile : public AActor
{ {
DECLARE_ACTOR (AFSwordMissile, AActor) DECLARE_CLASS (AFSwordMissile, AActor)
public: public:
void GetExplodeParms (int &damage, int &dist, bool &hurtSource);
int DoSpecialDamage(AActor *victim, AActor *source, int damage); int DoSpecialDamage(AActor *victim, AActor *source, int damage);
}; };
FState AFSwordMissile::States[] = IMPLEMENT_CLASS (AFSwordMissile)
{
#define S_FSWORD_MISSILE1 0
S_BRIGHT (FSFX, 'A', 3, NULL , &States[S_FSWORD_MISSILE1+1]),
S_BRIGHT (FSFX, 'B', 3, NULL , &States[S_FSWORD_MISSILE1+2]),
S_BRIGHT (FSFX, 'C', 3, NULL , &States[S_FSWORD_MISSILE1]),
#define S_FSWORD_MISSILE_X1 (S_FSWORD_MISSILE1+3)
S_BRIGHT (FSFX, 'D', 4, NULL , &States[S_FSWORD_MISSILE_X1+1]),
S_BRIGHT (FSFX, 'E', 3, A_FSwordFlames , &States[S_FSWORD_MISSILE_X1+2]),
S_BRIGHT (FSFX, 'F', 4, A_Explode , &States[S_FSWORD_MISSILE_X1+3]),
S_BRIGHT (FSFX, 'G', 3, NULL , &States[S_FSWORD_MISSILE_X1+4]),
S_BRIGHT (FSFX, 'H', 4, NULL , &States[S_FSWORD_MISSILE_X1+5]),
S_BRIGHT (FSFX, 'I', 3, NULL , &States[S_FSWORD_MISSILE_X1+6]),
S_BRIGHT (FSFX, 'J', 4, NULL , &States[S_FSWORD_MISSILE_X1+7]),
S_BRIGHT (FSFX, 'K', 3, NULL , &States[S_FSWORD_MISSILE_X1+8]),
S_BRIGHT (FSFX, 'L', 3, NULL , &States[S_FSWORD_MISSILE_X1+9]),
S_BRIGHT (FSFX, 'M', 3, NULL , NULL),
};
IMPLEMENT_ACTOR (AFSwordMissile, Hexen, -1, 0)
PROP_SpeedFixed (30)
PROP_RadiusFixed (16)
PROP_HeightFixed (8)
PROP_Damage (8)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY|MF_DROPOFF|MF_MISSILE)
PROP_Flags2 (MF2_NOTELEPORT|MF2_IMPACT|MF2_PCROSS)
PROP_Flags4 (MF4_EXTREMEDEATH)
PROP_RenderStyle (STYLE_Add)
PROP_SpawnState (S_FSWORD_MISSILE1)
PROP_DeathState (S_FSWORD_MISSILE_X1)
PROP_DeathSound ("FighterSwordExplode")
END_DEFAULTS
void AFSwordMissile::GetExplodeParms (int &damage, int &dist, bool &hurtSource)
{
damage = 64;
hurtSource = false;
}
int AFSwordMissile::DoSpecialDamage(AActor *victim, AActor *source, int damage) int AFSwordMissile::DoSpecialDamage(AActor *victim, AActor *source, int damage)
{ {
@ -267,36 +107,6 @@ int AFSwordMissile::DoSpecialDamage(AActor *victim, AActor *source, int damage)
return damage; return damage;
} }
// Fighter Sword Flame ------------------------------------------------------
class AFSwordFlame : public AActor
{
DECLARE_ACTOR (AFSwordFlame, AActor)
};
FState AFSwordFlame::States[] =
{
S_BRIGHT (FSFX, 'N', 3, NULL , &States[1]),
S_BRIGHT (FSFX, 'O', 3, NULL , &States[2]),
S_BRIGHT (FSFX, 'P', 3, NULL , &States[3]),
S_BRIGHT (FSFX, 'Q', 3, NULL , &States[4]),
S_BRIGHT (FSFX, 'R', 3, NULL , &States[5]),
S_BRIGHT (FSFX, 'S', 3, NULL , &States[6]),
S_BRIGHT (FSFX, 'T', 3, NULL , &States[7]),
S_BRIGHT (FSFX, 'U', 3, NULL , &States[8]),
S_BRIGHT (FSFX, 'V', 3, NULL , &States[9]),
S_BRIGHT (FSFX, 'W', 3, NULL , NULL),
};
IMPLEMENT_ACTOR (AFSwordFlame, Hexen, -1, 0)
PROP_Flags (MF_NOBLOCKMAP|MF_NOGRAVITY)
PROP_RenderStyle (STYLE_Translucent)
PROP_Alpha (HX_SHADOW)
PROP_SpawnState (0)
END_DEFAULTS
//============================================================================ //============================================================================
// //
// A_FSwordAttack // A_FSwordAttack
@ -340,7 +150,7 @@ void A_FSwordFlames (AActor *actor)
fixed_t x = actor->x+((pr_fswordflame()-128)<<12); fixed_t x = actor->x+((pr_fswordflame()-128)<<12);
fixed_t y = actor->y+((pr_fswordflame()-128)<<12); fixed_t y = actor->y+((pr_fswordflame()-128)<<12);
fixed_t z = actor->z+((pr_fswordflame()-128)<<11); fixed_t z = actor->z+((pr_fswordflame()-128)<<11);
Spawn<AFSwordFlame> (x, y, z, ALLOW_REPLACE); Spawn ("FSwordFlame", x, y, z, ALLOW_REPLACE);
} }
} }
@ -377,7 +187,7 @@ void A_DropQuietusPieces (AActor *actor)
void AFighterWeaponPiece::BeginPlay () void AFighterWeaponPiece::BeginPlay ()
{ {
Super::BeginPlay (); Super::BeginPlay ();
FourthWeaponClass = RUNTIME_CLASS(AFWeapQuietus); FourthWeaponClass = PClass::FindClass ("FWeapQuietus");
} }
//============================================================================ //============================================================================

View file

@ -38,13 +38,6 @@ public:
bool IsOkayToAttack (AActor *link); bool IsOkayToAttack (AActor *link);
}; };
class AHammerPuff : public AActor
{
DECLARE_ACTOR (AHammerPuff, AActor)
public:
void BeginPlay ();
};
class AFourthWeaponPiece : public AInventory class AFourthWeaponPiece : public AInventory
{ {
DECLARE_STATELESS_ACTOR (AFourthWeaponPiece, AInventory) DECLARE_STATELESS_ACTOR (AFourthWeaponPiece, AInventory)

View file

@ -1249,7 +1249,7 @@ bool AInventory::TryPickup (AActor *toucher)
{ {
// Add the item to the inventory. It is not already there, or HandlePickup // Add the item to the inventory. It is not already there, or HandlePickup
// would have already taken care of it. // would have already taken care of it.
AInventory *copy = CreateCopy (toucher); AInventory *copy = CreeCopy (toucher);
if (copy == NULL) if (copy == NULL)
{ {
return false; return false;

View file

@ -66,17 +66,7 @@ public:
bool TryPickup (AActor *toucher); bool TryPickup (AActor *toucher);
}; };
class AStrifeWeapon : public AWeapon class ASigil : public AWeapon
{
DECLARE_STATELESS_ACTOR (AStrifeWeapon, AWeapon)
};
class AFlameThrower : public AStrifeWeapon
{
DECLARE_ACTOR (AFlameThrower, AStrifeWeapon)
};
class ASigil : public AStrifeWeapon
{ {
DECLARE_ACTOR (ASigil, AStrifeWeapon) DECLARE_ACTOR (ASigil, AStrifeWeapon)
public: public:

File diff suppressed because it is too large Load diff

View file

@ -414,6 +414,7 @@ FState *P_GetState(AActor *self, FState *CallingState, int offset)
} }
else if (offset>0) else if (offset>0)
{ {
if (CallingState == NULL) return NULL;
return CallingState + offset; return CallingState + offset;
} }
else if (self != NULL) else if (self != NULL)

View file

@ -0,0 +1,113 @@
// The Fighter's Axe --------------------------------------------------------
ACTOR FWeapAxe : FighterWeapon 8010 native
{
Game Hexen
SpawnID 27
Weapon.SelectionOrder 1500
+WEAPON.AXEBLOOD +WEAPON.AMMO_OPTIONAL +WEAPON.MELEEWEAPON
Weapon.AmmoUse1 2
Weapon.AmmoGive1 25
Weapon.KickBack 150
Weapon.YAdjust -12
Weapon.AmmoType1 "Mana1"
Inventory.PickupMessage "$TXT_WEAPON_F2"
action native A_FAxeCheckUp();
action native A_FAxeCheckReady();
action native A_FAxeCheckAtk();
action native A_FAxeAttack();
action native A_FAxeCheckUpG();
action native A_FAxeCheckReadyG();
States
{
Spawn:
WFAX A -1
Stop
Select:
FAXE A 1 A_FAxeCheckUp
Loop
Deselect:
FAXE A 1 A_Lower
Loop
Ready:
FAXE A 1 A_FAxeCheckReady
Loop
Fire:
FAXE B 4 Offset (15, 32) A_FAxeCheckAtk
FAXE C 3 Offset (15, 32)
FAXE D 2 Offset (15, 32)
FAXE D 1 Offset (-5, 70) A_FAxeAttack
FAXE D 2 Offset (-25, 90)
FAXE E 1 Offset (15, 32)
FAXE E 2 Offset (10, 54)
FAXE E 7 Offset (10, 150)
FAXE A 1 Offset (0, 60) A_ReFire
FAXE A 1 Offset (0, 52)
FAXE A 1 Offset (0, 44)
FAXE A 1 Offset (0, 36)
FAXE A 1
Goto Ready
SelectGlow:
FAXE L 1 A_FAxeCheckUpG
Loop
DeselectGlow:
FAXE L 1 A_Lower
Loop
ReadyGlow:
FAXE LLL 1 A_FAxeCheckReadyG
FAXE MMM 1 A_FAxeCheckReadyG
Loop
FireGlow:
FAXE N 4 Offset (15, 32)
FAXE O 3 Offset (15, 32)
FAXE P 2 Offset (15, 32)
FAXE P 1 Offset (-5, 70) A_FAxeAttack
FAXE P 2 Offset (-25, 90)
FAXE Q 1 Offset (15, 32)
FAXE Q 2 Offset (10, 54)
FAXE Q 7 Offset (10, 150)
FAXE A 1 Offset (0, 60) A_ReFire
FAXE A 1 Offset (0, 52)
FAXE A 1 Offset (0, 44)
FAXE A 1 Offset (0, 36)
FAXE A 1
Goto ReadyGlow
}
}
// Axe Puff -----------------------------------------------------------------
ACTOR AxePuff
{
+NOBLOCKMAP +NOGRAVITY
+PUFFONACTORS
RenderStyle Translucent
Alpha 0.6
SeeSound "FighterAxeHitThing"
AttackSound "FighterHammerHitWall"
ActiveSound "FighterHammerMiss"
States
{
Spawn:
FHFX STUVW 4
Stop
}
}
// Glowing Axe Puff ---------------------------------------------------------
ACTOR AxePuffGlow : AxePuff
{
+PUFFONACTORS
RenderStyle Add
Alpha 1
States
{
Spawn:
FAXE RSTUVWX 4 Bright
Stop
}
}

View file

@ -0,0 +1,62 @@
// Fist (first weapon) ------------------------------------------------------
ACTOR FWeapFist : FighterWeapon
{
+BLOODSPLATTER
Weapon.SelectionOrder 3400
+WEAPON.MELEEWEAPON
Weapon.KickBack 150
action native A_FPunchAttack();
States
{
Select:
FPCH A 1 A_Raise
Loop
Deselect:
FPCH A 1 A_Lower
Loop
Ready:
FPCH A 1 A_WeaponReady
Loop
Fire:
FPCH B 5 Offset (5, 40)
FPCH C 4 Offset (5, 40)
FPCH D 4 Offset (5, 40) A_FPunchAttack
FPCH C 4 Offset (5, 40)
FPCH B 5 Offset (5, 40) A_ReFire
Goto Ready
Fire2:
FPCH DE 4 Offset (5, 40)
FPCH E 1 Offset (15, 50)
FPCH E 1 Offset (25, 60)
FPCH E 1 Offset (35, 70)
FPCH E 1 Offset (45, 80)
FPCH E 1 Offset (55, 90)
FPCH E 1 Offset (65, 90)
FPCH E 10 Offset (0, 150)
Goto Ready
}
}
// Punch puff ---------------------------------------------------------------
ACTOR PunchPuff
{
+NOBLOCKMAP +NOGRAVITY
+PUFFONACTORS
RenderStyle Translucent
Alpha 0.6
SeeSound "FighterPunchHitThing"
AttackSound "FighterPunchHitWall"
ActiveSound "FighterPunchMiss"
VSpeed 1
States
{
Spawn:
FHFX STUVW 4
Stop
}
}

View file

@ -0,0 +1,102 @@
// The Fighter's Hammer -----------------------------------------------------
ACTOR FWeapHammer : FighterWeapon 123
{
Game Hexen
SpawnID 28
+BLOODSPLATTER
Weapon.SelectionOrder 900
+WEAPON.AMMO_OPTIONAL +WEAPON.MELEEWEAPON
Weapon.AmmoUse1 3
Weapon.AmmoGive1 25
Weapon.KickBack 150
Weapon.YAdjust -10
Weapon.AmmoType1 "Mana2"
Inventory.PickupMessage "$TXT_WEAPON_F3"
action native A_FHammerAttack();
action native A_FHammerThrow();
States
{
Spawn:
WFHM A -1
Stop
Select:
FHMR A 1 A_Raise
Loop
Deselect:
FHMR A 1 A_Lower
Loop
Ready:
FHMR A 1 A_WeaponReady
Loop
Fire:
FHMR B 6 Offset (5, 0)
FHMR C 3 Offset (5, 0) A_FHammerAttack
FHMR D 3 Offset (5, 0)
FHMR E 2 Offset (5, 0)
FHMR E 10 Offset (5, 150) A_FHammerThrow
FHMR A 1 Offset (0, 60)
FHMR A 1 Offset (0, 55)
FHMR A 1 Offset (0, 50)
FHMR A 1 Offset (0, 45)
FHMR A 1 Offset (0, 40)
FHMR A 1 Offset (0, 35)
FHMR A 1
Goto Ready
}
}
// Hammer Missile -----------------------------------------------------------
ACTOR HammerMissile
{
Speed 25
Radius 14
Height 20
Damage 10
DamageType "Fire"
Projectile
DeathSound "FighterHammerExplode"
action native A_BeAdditive();
States
{
Spawn:
FHFX A 2 Bright
FHFX B 2 Bright A_PlaySound ("FighterHammerContinuous")
FHFX CDEFGH 2 Bright
Loop
Death:
FHFX I 3 Bright A_BeAdditive
FHFX J 3 Bright
FHFX K 3 Bright A_Explode (128, 128, 0)
FHFX LM 3 Bright
FHFX N 3
FHFX OPQR 3 Bright
Stop
}
}
// Hammer Puff (also used by fist) ------------------------------------------
ACTOR HammerPuff
{
+NOBLOCKMAP +NOGRAVITY
+PUFFONACTORS
RenderStyle "Translucent"
Alpha 0.6
VSpeed 0.8
SeeSound "FighterHammerHitThing"
AttackSound "FighterHammerHitWall"
ActiveSound "FighterHammerMiss"
States
{
Spawn:
FHFX STUVW 4
Stop
}
}

View file

@ -0,0 +1,163 @@
// Fighter Weapon Piece -----------------------------------------------------
ACTOR FighterWeaponPiece : FourthWeaponPiece native
{
Inventory.PickupMessage "$TXT_QUIETUS_PIECE"
}
// Fighter Weapon Piece 1 ---------------------------------------------------
ACTOR FWeaponPiece1 : FighterWeaponPiece 12 native
{
Game Hexen
SpawnID 29
+FLOATBOB
States
{
Spawn:
WFR1 A -1 Bright
Stop
}
}
// Fighter Weapon Piece 2 ---------------------------------------------------
ACTOR FWeaponPiece2 : FighterWeaponPiece 13 native
{
Game Hexen
SpawnID 30
+FLOATBOB
States
{
Spawn:
WFR2 A -1 Bright
Stop
}
}
// Fighter Weapon Piece 3 ---------------------------------------------------
ACTOR FWeaponPiece3 : FighterWeaponPiece 16 native
{
Game Hexen
SpawnID 31
+FLOATBOB
States
{
Spawn:
WFR3 A -1 Bright
Stop
}
}
// Quietus Drop -------------------------------------------------------------
ACTOR QuietusDrop
{
action native A_DropQuietusPieces();
States
{
Spawn:
TNT1 A 1
TNT1 A 1 A_DropQuietusPieces
Stop
}
}
// The Fighter's Sword (Quietus) --------------------------------------------
ACTOR FWeapQuietus : FighterWeapon
{
Weapon.SelectionOrder 2900
+WEAPON.PRIMARY_USES_BOTH
Weapon.AmmoUse1 14
Weapon.AmmoUse2 14
Weapon.AmmoGive1 0
Weapon.AmmoGive2 0
Weapon.KickBack 150
Weapon.YAdjust 10
Weapon.AmmoType1 "Mana1"
Weapon.AmmoType2 "Mana2"
Inventory.PickupMessage "$TXT_WEAPON_F4"
action native A_FSwordAttack();
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
}
}
// Fighter Sword Missile ----------------------------------------------------
ACTOR FSwordMissile native
{
Speed 30
Radius 16
Height 8
Damage 8
Projectile
+EXTREMEDEATH
RenderStyle Add
DeathSound "FighterSwordExplode"
action native A_FSwordFlames();
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
}
}
// Fighter Sword Flame ------------------------------------------------------
ACTOR FSwordFlame
{
+NOBLOCKMAP +NOGRAVITY
RenderStyle Translucent
Alpha 0.6
States
{
Spawn:
FSFX NOPQRSTUVW 3 Bright
Stop
}
}

View file

@ -101,6 +101,10 @@
#include "actors/hexen/magecone.txt" #include "actors/hexen/magecone.txt"
#include "actors/hexen/magelightning.txt" #include "actors/hexen/magelightning.txt"
#include "actors/hexen/magestaff.txt" #include "actors/hexen/magestaff.txt"
#include "actors/hexen/fighterfist.txt"
#include "actors/hexen/fighteraxe.txt"
#include "actors/hexen/fighterhammer.txt"
#include "actors/hexen/fighterquietus.txt"
#include "actors/strife/strifehumanoid.txt" #include "actors/strife/strifehumanoid.txt"
#include "actors/strife/strifeplayer.txt" #include "actors/strife/strifeplayer.txt"