From bf1c2a7e51d1e0688adc215539635635ed76d9b8 Mon Sep 17 00:00:00 2001 From: Christoph Oelckers Date: Mon, 28 Nov 2016 18:49:25 +0100 Subject: [PATCH] - scriptified the Inquisitor. --- src/CMakeLists.txt | 2 - src/g_strife/a_inquisitor.cpp | 136 -------------------- src/g_strife/a_strifestuff.cpp | 2 - wadsrc/static/zscript/strife/inquisitor.txt | 112 ++++++++++++++-- 4 files changed, 104 insertions(+), 148 deletions(-) delete mode 100644 src/g_strife/a_inquisitor.cpp diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index c8d560c2b..74760f138 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -861,8 +861,6 @@ set( NOT_COMPILED_SOURCE_FILES sc_man_scanner.re g_hexen/a_heresiarch.cpp g_hexen/a_spike.cpp - g_strife/a_crusader.cpp - g_strife/a_inquisitor.cpp g_strife/a_loremaster.cpp g_strife/a_oracle.cpp g_strife/a_programmer.cpp diff --git a/src/g_strife/a_inquisitor.cpp b/src/g_strife/a_inquisitor.cpp deleted file mode 100644 index a4c2d72f4..000000000 --- a/src/g_strife/a_inquisitor.cpp +++ /dev/null @@ -1,136 +0,0 @@ -/* -#include "actor.h" -#include "m_random.h" -#include "a_action.h" -#include "p_local.h" -#include "p_enemy.h" -#include "s_sound.h" -#include "vm.h" -*/ - -static FRandom pr_inq ("Inquisitor"); - -DEFINE_ACTION_FUNCTION(AActor, A_InquisitorWalk) -{ - PARAM_SELF_PROLOGUE(AActor); - - S_Sound (self, CHAN_BODY, "inquisitor/walk", 1, ATTN_NORM); - A_Chase (stack, self); - return 0; -} - -bool InquisitorCheckDistance (AActor *self) -{ - if (self->reactiontime == 0 && P_CheckSight (self, self->target)) - { - return self->Distance2D (self->target) < 264.; - } - return false; -} - -DEFINE_ACTION_FUNCTION(AActor, A_InquisitorDecide) -{ - PARAM_SELF_PROLOGUE(AActor); - - if (self->target == NULL) - return 0; - - A_FaceTarget (self); - if (!InquisitorCheckDistance (self)) - { - self->SetState (self->FindState("Grenade")); - } - if (self->target->Z() != self->Z()) - { - if (self->Top() + 54 < self->ceilingz) - { - self->SetState (self->FindState("Jump")); - } - } - return 0; -} - -DEFINE_ACTION_FUNCTION(AActor, A_InquisitorAttack) -{ - PARAM_SELF_PROLOGUE(AActor); - - AActor *proj; - - if (self->target == NULL) - return 0; - - A_FaceTarget (self); - - self->AddZ(32); - self->Angles.Yaw -= 45./32; - proj = P_SpawnMissileZAimed (self, self->Z(), self->target, PClass::FindActor("InquisitorShot")); - if (proj != NULL) - { - proj->Vel.Z += 9; - } - self->Angles.Yaw += 45./16; - proj = P_SpawnMissileZAimed (self, self->Z(), self->target, PClass::FindActor("InquisitorShot")); - if (proj != NULL) - { - proj->Vel.Z += 16; - } - self->AddZ(-32); - return 0; -} - -DEFINE_ACTION_FUNCTION(AActor, A_InquisitorJump) -{ - PARAM_SELF_PROLOGUE(AActor); - - double dist; - double speed; - - if (self->target == NULL) - return 0; - - S_Sound (self, CHAN_ITEM|CHAN_LOOP, "inquisitor/jump", 1, ATTN_NORM); - self->AddZ(64); - A_FaceTarget (self); - speed = self->Speed * (2./3); - self->VelFromAngle(speed); - dist = self->DistanceBySpeed(self->target, speed); - self->Vel.Z = (self->target->Z() - self->Z()) / dist; - self->reactiontime = 60; - self->flags |= MF_NOGRAVITY; - return 0; -} - -DEFINE_ACTION_FUNCTION(AActor, A_InquisitorCheckLand) -{ - PARAM_SELF_PROLOGUE(AActor); - - self->reactiontime--; - if (self->reactiontime < 0 || - self->Vel.X == 0 || - self->Vel.Y == 0 || - self->Z() <= self->floorz) - { - self->SetState (self->SeeState); - self->reactiontime = 0; - self->flags &= ~MF_NOGRAVITY; - S_StopSound (self, CHAN_ITEM); - return 0; - } - if (!S_IsActorPlayingSomething (self, CHAN_ITEM, -1)) - { - S_Sound (self, CHAN_ITEM|CHAN_LOOP, "inquisitor/jump", 1, ATTN_NORM); - } - return 0; -} - -DEFINE_ACTION_FUNCTION(AActor, A_TossArm) -{ - PARAM_SELF_PROLOGUE(AActor); - - AActor *foo = Spawn("InquisitorArm", self->PosPlusZ(24.), ALLOW_REPLACE); - foo->Angles.Yaw = self->Angles.Yaw - 90. + pr_inq.Random2() * (360./1024.); - foo->VelFromAngle(foo->Speed / 8); - foo->Vel.Z = pr_inq() / 64.; - return 0; -} - diff --git a/src/g_strife/a_strifestuff.cpp b/src/g_strife/a_strifestuff.cpp index d38e4130b..ba316175d 100644 --- a/src/g_strife/a_strifestuff.cpp +++ b/src/g_strife/a_strifestuff.cpp @@ -24,9 +24,7 @@ #include "vm.h" // Include all the other Strife stuff here to reduce compile time -#include "a_inquisitor.cpp" #include "a_loremaster.cpp" -//#include "a_macil.cpp" #include "a_oracle.cpp" #include "a_programmer.cpp" #include "a_rebels.cpp" diff --git a/wadsrc/static/zscript/strife/inquisitor.txt b/wadsrc/static/zscript/strife/inquisitor.txt index e7da303be..ef73ade1e 100644 --- a/wadsrc/static/zscript/strife/inquisitor.txt +++ b/wadsrc/static/zscript/strife/inquisitor.txt @@ -25,13 +25,6 @@ class Inquisitor : Actor Obituary "$OB_INQUISITOR"; } - native void A_InquisitorWalk (); - native void A_InquisitorDecide (); - native void A_InquisitorAttack (); - native void A_InquisitorJump (); - native void A_InquisitorCheckLand (); - native void A_TossArm (); - States { Spawn: @@ -81,6 +74,109 @@ class Inquisitor : Actor RBB3 E -1; Stop; } + + + // Inquisitor --------------------------------------------------------------- + + void A_InquisitorWalk () + { + A_PlaySound ("inquisitor/walk", CHAN_BODY); + A_Chase (); + } + + private bool InquisitorCheckDistance () + { + if (reactiontime == 0 && CheckSight (target)) + { + return Distance2D (target) < 264.; + } + return false; + } + + void A_InquisitorDecide () + { + if (target == null) + return; + + A_FaceTarget (); + if (!InquisitorCheckDistance ()) + { + SetStateLabel("Grenade"); + } + if (target.pos.z != pos.z) + { + if (pos.z + height + 54 < ceilingz) + { + SetStateLabel("Jump"); + } + } + } + + void A_InquisitorAttack () + { + if (target == null) + return; + + A_FaceTarget (); + + AddZ(32); + angle -= 45./32; + Actor proj = SpawnMissileZAimed (pos.z, target, "InquisitorShot"); + if (proj != null) + { + proj.Vel.Z += 9; + } + angle += 45./16; + proj = SpawnMissileZAimed (pos.z, target, "InquisitorShot"); + if (proj != null) + { + proj.Vel.Z += 16; + } + AddZ(-32); + } + + void A_InquisitorJump () + { + if (target == null) + return; + + A_PlaySound ("inquisitor/jump", CHAN_ITEM, 1, true); + AddZ(64); + A_FaceTarget (); + speed = Speed * (2./3); + VelFromAngle(speed); + double dist = DistanceBySpeed(target, speed); + Vel.Z = (target.pos.z - pos.z) / dist; + reactiontime = 60; + bNoGravity = true; + } + + void A_InquisitorCheckLand () + { + reactiontime--; + if (reactiontime < 0 || + Vel.X == 0 || + Vel.Y == 0 || + pos.z <= floorz) + { + SetState (SeeState); + reactiontime = 0; + bNoGravity = false; + A_StopSound (CHAN_ITEM); + return; + } + A_PlaySound ("inquisitor/jump", CHAN_ITEM, 1, true); + } + + void A_TossArm () + { + Actor foo = Spawn("InquisitorArm", Pos + (0,0,24), ALLOW_REPLACE); + foo.angle = angle - 90. + Random2[Inquisitor]() * (360./1024.); + foo.VelFromAngle(foo.Speed / 8); + foo.Vel.Z = random[Inquisitor]() / 64.; + } + + } // Inquisitor Shot ---------------------------------------------------------- @@ -109,7 +205,7 @@ class InquisitorShot : Actor UBAM AB 3 A_Countdown; Loop; Death: - BNG2 A 0 Bright A_SetTranslucent(1,1); + BNG2 A 0 Bright A_SetRenderStyle(1, STYLE_Normal); BNG2 A 4 Bright A_Explode(192, 192, 1, 1); BNG2 B 4 Bright; BNG2 C 4 Bright;