mirror of
https://github.com/ZDoom/qzdoom.git
synced 2024-11-28 06:53:58 +00:00
- scriptified the Quietus.
This commit is contained in:
parent
80f233cd0b
commit
796c262285
7 changed files with 94 additions and 156 deletions
|
@ -855,7 +855,6 @@ set( NOT_COMPILED_SOURCE_FILES
|
|||
${OTHER_SYSTEM_SOURCES}
|
||||
sc_man_scanner.h
|
||||
sc_man_scanner.re
|
||||
g_hexen/a_fighterquietus.cpp
|
||||
g_hexen/a_flechette.cpp
|
||||
g_hexen/a_flies.cpp
|
||||
g_hexen/a_healingradius.cpp
|
||||
|
|
|
@ -1,146 +0,0 @@
|
|||
/*
|
||||
#include "actor.h"
|
||||
#include "gi.h"
|
||||
#include "m_random.h"
|
||||
#include "s_sound.h"
|
||||
#include "d_player.h"
|
||||
#include "a_action.h"
|
||||
#include "p_local.h"
|
||||
#include "p_pspr.h"
|
||||
#include "gstrings.h"
|
||||
#include "a_hexenglobal.h"
|
||||
#include "a_weaponpiece.h"
|
||||
#include "vm.h"
|
||||
*/
|
||||
|
||||
static FRandom pr_quietusdrop ("QuietusDrop");
|
||||
static FRandom pr_fswordflame ("FSwordFlame");
|
||||
|
||||
//==========================================================================
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// A_DropQuietusPieces
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
DEFINE_ACTION_FUNCTION(AActor, A_DropWeaponPieces)
|
||||
{
|
||||
PARAM_SELF_PROLOGUE(AActor);
|
||||
PARAM_CLASS(p1, AActor);
|
||||
PARAM_CLASS(p2, AActor);
|
||||
PARAM_CLASS(p3, AActor);
|
||||
|
||||
for (int i = 0, j = 0; i < 3; ++i)
|
||||
{
|
||||
PClassActor *cls = j == 0 ? p1 : j == 1 ? p2 : p3;
|
||||
if (cls)
|
||||
{
|
||||
AActor *piece = Spawn (cls, self->Pos(), ALLOW_REPLACE);
|
||||
if (piece != NULL)
|
||||
{
|
||||
piece->Vel = self->Vel + DAngle(i*120.).ToVector(1);
|
||||
piece->flags |= MF_DROPPED;
|
||||
j = (j == 0) ? (pr_quietusdrop() & 1) + 1 : 3-j;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Fighter Sword Missile ----------------------------------------------------
|
||||
|
||||
class AFSwordMissile : public AActor
|
||||
{
|
||||
DECLARE_CLASS (AFSwordMissile, AActor)
|
||||
public:
|
||||
int DoSpecialDamage(AActor *victim, int damage, FName damagetype);
|
||||
};
|
||||
|
||||
IMPLEMENT_CLASS(AFSwordMissile, false, false)
|
||||
|
||||
int AFSwordMissile::DoSpecialDamage(AActor *victim, int damage, FName damagetype)
|
||||
{
|
||||
if (victim->player)
|
||||
{
|
||||
damage -= damage >> 2;
|
||||
}
|
||||
return damage;
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// A_FSwordAttack
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
DEFINE_ACTION_FUNCTION(AActor, A_FSwordAttack)
|
||||
{
|
||||
PARAM_ACTION_PROLOGUE(AActor);
|
||||
|
||||
player_t *player;
|
||||
|
||||
if (NULL == (player = self->player))
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
AWeapon *weapon = self->player->ReadyWeapon;
|
||||
if (weapon != NULL)
|
||||
{
|
||||
if (!weapon->DepleteAmmo (weapon->bAltFire))
|
||||
return 0;
|
||||
}
|
||||
P_SpawnPlayerMissile (self, 0, 0, -10, RUNTIME_CLASS(AFSwordMissile), self->Angles.Yaw + (45./4));
|
||||
P_SpawnPlayerMissile (self, 0, 0, -5, RUNTIME_CLASS(AFSwordMissile), self->Angles.Yaw + (45./8));
|
||||
P_SpawnPlayerMissile (self, 0, 0, 0, RUNTIME_CLASS(AFSwordMissile), self->Angles.Yaw);
|
||||
P_SpawnPlayerMissile (self, 0, 0, 5, RUNTIME_CLASS(AFSwordMissile), self->Angles.Yaw - (45./8));
|
||||
P_SpawnPlayerMissile (self, 0, 0, 10, RUNTIME_CLASS(AFSwordMissile), self->Angles.Yaw - (45./4));
|
||||
S_Sound (self, CHAN_WEAPON, "FighterSwordFire", 1, ATTN_NORM);
|
||||
return 0;
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// A_FSwordFlames
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
DEFINE_ACTION_FUNCTION(AActor, A_FSwordFlames)
|
||||
{
|
||||
PARAM_SELF_PROLOGUE(AActor);
|
||||
|
||||
int i;
|
||||
|
||||
for (i = 1+(pr_fswordflame()&3); i; i--)
|
||||
{
|
||||
double xo = (pr_fswordflame() - 128) / 16.;
|
||||
double yo = (pr_fswordflame() - 128) / 16.;
|
||||
double zo = (pr_fswordflame() - 128) / 8.;
|
||||
Spawn ("FSwordFlame", self->Vec3Offset(xo, yo, zo), ALLOW_REPLACE);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// A_FighterAttack
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
DEFINE_ACTION_FUNCTION(AActor, A_FighterAttack)
|
||||
{
|
||||
PARAM_SELF_PROLOGUE(AActor);
|
||||
|
||||
if (!self->target) return 0;
|
||||
|
||||
P_SpawnMissileAngle(self, RUNTIME_CLASS(AFSwordMissile), self->Angles.Yaw + (45. / 4), 0);
|
||||
P_SpawnMissileAngle(self, RUNTIME_CLASS(AFSwordMissile), self->Angles.Yaw + (45. / 8), 0);
|
||||
P_SpawnMissileAngle(self, RUNTIME_CLASS(AFSwordMissile), self->Angles.Yaw, 0);
|
||||
P_SpawnMissileAngle(self, RUNTIME_CLASS(AFSwordMissile), self->Angles.Yaw - (45. / 8), 0);
|
||||
P_SpawnMissileAngle(self, RUNTIME_CLASS(AFSwordMissile), self->Angles.Yaw - (45. / 4), 0);
|
||||
S_Sound (self, CHAN_WEAPON, "FighterSwordFire", 1, ATTN_NORM);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -24,7 +24,6 @@
|
|||
#include "serializer.h"
|
||||
|
||||
// Include all the Hexen stuff here to reduce compile time
|
||||
#include "a_fighterquietus.cpp"
|
||||
#include "a_flechette.cpp"
|
||||
#include "a_flies.cpp"
|
||||
#include "a_healingradius.cpp"
|
||||
|
|
|
@ -688,7 +688,6 @@ class Actor : Thinker native
|
|||
native void A_DropFire();
|
||||
native void A_GiveQuestItem(int itemno);
|
||||
native void A_RemoveForcefield();
|
||||
native void A_DropWeaponPieces(class<Actor> p1, class<Actor> p2, class<Actor> p3);
|
||||
native void A_SetAngle(double angle = 0, int flags = 0, int ptr = AAPTR_DEFAULT);
|
||||
native void A_SetPitch(double pitch, int flags = 0, int ptr = AAPTR_DEFAULT);
|
||||
native void A_SetRoll(double roll, int flags = 0, int ptr = AAPTR_DEFAULT);
|
||||
|
|
|
@ -61,4 +61,24 @@ extend class Actor
|
|||
angle = t.angleFromSource;
|
||||
}
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// A_DropQuietusPieces
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
void A_DropWeaponPieces(class<Actor> p1, class<Actor> p2, class<Actor> p3)
|
||||
{
|
||||
for (int i = 0, j = 0; i < 3; ++i)
|
||||
{
|
||||
Actor piece = Spawn (j == 0 ? p1 : j == 1 ? p2 : p3, Pos, ALLOW_REPLACE);
|
||||
if (piece != null)
|
||||
{
|
||||
piece.Vel = self.Vel + AngleToVector(i * 120., 1);
|
||||
piece.bDropped = true;
|
||||
j = (j == 0) ? (random[PieceDrop]() & 1) + 1 : 3-j;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -19,8 +19,6 @@ class FighterBoss : Actor
|
|||
Obituary "$OB_FBOSS";
|
||||
}
|
||||
|
||||
native void A_FighterAttack();
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
@ -80,4 +78,22 @@ class FighterBoss : Actor
|
|||
FDTH V 4 Bright;
|
||||
Stop;
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// A_FighterAttack
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
void A_FighterAttack()
|
||||
{
|
||||
if (!target) return;
|
||||
|
||||
SpawnMissileAngle("FSwordMissile", Angle + (45. / 4), 0);
|
||||
SpawnMissileAngle("FSwordMissile", Angle + (45. / 8), 0);
|
||||
SpawnMissileAngle("FSwordMissile", Angle, 0);
|
||||
SpawnMissileAngle("FSwordMissile", Angle - (45. / 8), 0);
|
||||
SpawnMissileAngle("FSwordMissile", Angle - (45. / 4), 0);
|
||||
A_PlaySound ("FighterSwordFire", CHAN_WEAPON);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -97,8 +97,6 @@ class FWeapQuietus : FighterWeapon
|
|||
Tag "$TAG_FWEAPQUIETUS";
|
||||
}
|
||||
|
||||
action native void A_FSwordAttack();
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
@ -127,11 +125,40 @@ class FWeapQuietus : FighterWeapon
|
|||
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_PlaySound ("FighterSwordFire", CHAN_WEAPON);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
// Fighter Sword Missile ----------------------------------------------------
|
||||
|
||||
class FSwordMissile : Actor native
|
||||
class FSwordMissile : Actor
|
||||
{
|
||||
Default
|
||||
{
|
||||
|
@ -146,8 +173,6 @@ class FSwordMissile : Actor native
|
|||
Obituary "$OB_MPFWEAPQUIETUS";
|
||||
}
|
||||
|
||||
native void A_FSwordFlames();
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
@ -164,6 +189,32 @@ class FSwordMissile : Actor native
|
|||
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 = 1+(random[FSwordFlame]()&3); 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 ------------------------------------------------------
|
||||
|
|
Loading…
Reference in a new issue