mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-11 07:12:16 +00:00
- Scriptified Heretic's knight.
This commit is contained in:
parent
924096694e
commit
a5f9eb5be1
7 changed files with 55 additions and 78 deletions
|
@ -857,7 +857,6 @@ set( NOT_COMPILED_SOURCE_FILES
|
|||
g_heretic/a_hereticartifacts.cpp
|
||||
g_heretic/a_hereticweaps.cpp
|
||||
g_heretic/a_ironlich.cpp
|
||||
g_heretic/a_knight.cpp
|
||||
g_heretic/a_wizard.cpp
|
||||
g_hexen/a_bats.cpp
|
||||
g_hexen/a_bishop.cpp
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
#include "a_hereticartifacts.cpp"
|
||||
#include "a_hereticweaps.cpp"
|
||||
#include "a_ironlich.cpp"
|
||||
#include "a_knight.cpp"
|
||||
#include "a_wizard.cpp"
|
||||
|
||||
|
||||
|
|
|
@ -1,70 +0,0 @@
|
|||
/*
|
||||
#include "actor.h"
|
||||
#include "info.h"
|
||||
#include "m_random.h"
|
||||
#include "s_sound.h"
|
||||
#include "p_local.h"
|
||||
#include "a_action.h"
|
||||
#include "a_sharedglobal.h"
|
||||
#include "gstrings.h"
|
||||
#include "vm.h"
|
||||
*/
|
||||
|
||||
static FRandom pr_dripblood ("DripBlood");
|
||||
static FRandom pr_knightatk ("KnightAttack");
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
//
|
||||
// PROC A_DripBlood
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
DEFINE_ACTION_FUNCTION(AActor, A_DripBlood)
|
||||
{
|
||||
PARAM_SELF_PROLOGUE(AActor);
|
||||
|
||||
AActor *mo;
|
||||
|
||||
double xo = pr_dripblood.Random2() / 32.;
|
||||
double yo = pr_dripblood.Random2() / 32.;
|
||||
mo = Spawn ("Blood", self->Vec3Offset(xo, yo, 0.), ALLOW_REPLACE);
|
||||
mo->Vel.X = pr_dripblood.Random2 () / 64.;
|
||||
mo->Vel.Y = pr_dripblood.Random2() / 64.;
|
||||
mo->Gravity = 1./8;
|
||||
return 0;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
//
|
||||
// PROC A_KnightAttack
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
DEFINE_ACTION_FUNCTION(AActor, A_KnightAttack)
|
||||
{
|
||||
PARAM_SELF_PROLOGUE(AActor);
|
||||
|
||||
if (!self->target)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if (self->CheckMeleeRange ())
|
||||
{
|
||||
int damage = pr_knightatk.HitDice (3);
|
||||
int newdam = P_DamageMobj (self->target, self, self, damage, NAME_Melee);
|
||||
P_TraceBleed (newdam > 0 ? newdam : damage, self->target, self);
|
||||
S_Sound (self, CHAN_BODY, "hknight/melee", 1, ATTN_NORM);
|
||||
return 0;
|
||||
}
|
||||
// Throw axe
|
||||
S_Sound (self, CHAN_BODY, self->AttackSound, 1, ATTN_NORM);
|
||||
if (self->flags & MF_SHADOW || pr_knightatk () < 40)
|
||||
{ // Red axe
|
||||
P_SpawnMissileZ (self, self->Z() + 36, self->target, PClass::FindActor("RedAxe"));
|
||||
return 0;
|
||||
}
|
||||
// Green axe
|
||||
P_SpawnMissileZ (self, self->Z() + 36, self->target, PClass::FindActor("KnightAxe"));
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -6077,6 +6077,15 @@ AActor *P_SpawnMissileZ (AActor *source, double z, AActor *dest, PClassActor *ty
|
|||
return P_SpawnMissileXYZ (source->PosAtZ(z), source, dest, type);
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION(AActor, SpawnMissileZ)
|
||||
{
|
||||
PARAM_SELF_PROLOGUE(AActor);
|
||||
PARAM_FLOAT(z);
|
||||
PARAM_OBJECT(dest, AActor);
|
||||
PARAM_CLASS(type, AActor);
|
||||
ACTION_RETURN_OBJECT(P_SpawnMissileZ(self, z, dest, type));
|
||||
}
|
||||
|
||||
AActor *P_SpawnMissileXYZ (DVector3 pos, AActor *source, AActor *dest, PClassActor *type, bool checkspawn, AActor *owner)
|
||||
{
|
||||
if (source == NULL)
|
||||
|
|
|
@ -7000,7 +7000,7 @@ FxExpression *FxSequence::Resolve(FCompileContext &ctx)
|
|||
{
|
||||
fail = true;
|
||||
}
|
||||
if (Expressions[i]->ValueType == TypeError)
|
||||
else if (Expressions[i]->ValueType == TypeError)
|
||||
{
|
||||
ScriptPosition.Message(MSG_ERROR, "Invalid statement");
|
||||
fail = true;
|
||||
|
|
|
@ -63,6 +63,7 @@ class Actor : Thinker native
|
|||
native Actor GetPointer(int aaptr);
|
||||
native static Actor Spawn(class<Actor> type, vector3 pos = (0,0,0), int replace = NO_REPLACE);
|
||||
native Actor SpawnMissile(Actor dest, class<Actor> type, Actor owner = null);
|
||||
native Actor SpawnMissileZ (double z, Actor dest, class<Actor> type);
|
||||
native Actor OldSpawnMissile(Actor dest, class<Actor> type, Actor owner = null);
|
||||
native Actor SpawnPuff(class<Actor> pufftype, vector3 pos, float hitdir, float particledir, int updown, int flags = 0, Actor vict = null);
|
||||
|
||||
|
|
|
@ -23,8 +23,6 @@ class Knight : Actor
|
|||
DropItem "CrossbowAmmo", 84, 5;
|
||||
}
|
||||
|
||||
native void A_KnightAttack ();
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
@ -56,6 +54,34 @@ class Knight : Actor
|
|||
Stop;
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
//
|
||||
// PROC A_KnightAttack
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
void A_KnightAttack ()
|
||||
{
|
||||
if (!target) return;
|
||||
if (CheckMeleeRange ())
|
||||
{
|
||||
int damage = random[KnightAttack](1, 8) * 3;
|
||||
int newdam = target.DamageMobj (self, self, damage, 'Melee');
|
||||
target.TraceBleed (newdam > 0 ? newdam : damage, self);
|
||||
A_PlaySound ("hknight/melee", CHAN_BODY);
|
||||
return;
|
||||
}
|
||||
// Throw axe
|
||||
A_PlaySound (AttackSound, CHAN_BODY);
|
||||
if (self.bShadow || random[KnightAttack]() < 40)
|
||||
{ // Red axe
|
||||
SpawnMissileZ (pos.Z + 36, target, "RedAxe");
|
||||
}
|
||||
else
|
||||
{ // Green axe
|
||||
SpawnMissileZ (pos.Z + 36, target, "KnightAxe");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -116,8 +142,6 @@ class RedAxe : KnightAxe
|
|||
Damage 7;
|
||||
}
|
||||
|
||||
native void A_DripBlood ();
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
@ -127,5 +151,20 @@ class RedAxe : KnightAxe
|
|||
RAXE CDE 6 BRIGHT;
|
||||
Stop;
|
||||
}
|
||||
}
|
||||
|
||||
//----------------------------------------------------------------------------
|
||||
//
|
||||
// PROC A_DripBlood
|
||||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
void A_DripBlood ()
|
||||
{
|
||||
double xo = random2[DripBlood]() / 32.0;
|
||||
double yo = random2[DripBlood]() / 32.0;
|
||||
Actor mo = Spawn ("Blood", Vec3Offset(xo, yo, 0.), ALLOW_REPLACE);
|
||||
mo.Vel.X = random2[DripBlood]() / 64.0;
|
||||
mo.Vel.Y = random2[DripBlood]() / 64.0;
|
||||
mo.Gravity = 1./8;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue