mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-23 12:32:34 +00:00
- scriptified the Acolyte.
This commit is contained in:
parent
d4427e696d
commit
7ea9f60464
7 changed files with 87 additions and 94 deletions
|
@ -861,7 +861,6 @@ set( NOT_COMPILED_SOURCE_FILES
|
|||
sc_man_scanner.re
|
||||
g_hexen/a_heresiarch.cpp
|
||||
g_hexen/a_spike.cpp
|
||||
g_strife/a_acolyte.cpp
|
||||
g_strife/a_alienspectres.cpp
|
||||
g_strife/a_coin.cpp
|
||||
g_strife/a_crusader.cpp
|
||||
|
|
|
@ -478,7 +478,8 @@ void G_InitNew (const char *mapname, bool bTitleLevel)
|
|||
// Set the initial quest log text for Strife.
|
||||
for (i = 0; i < MAXPLAYERS; ++i)
|
||||
{
|
||||
players[i].SetLogText ("Find help");
|
||||
if (playeringame[i])
|
||||
players[i].SetLogText ("Find help");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1092,7 +1093,7 @@ void G_WorldDone (void)
|
|||
if (strncmp (nextlevel, "enDSeQ", 6) == 0)
|
||||
{
|
||||
FName endsequence = ENamedName(strtol(nextlevel.GetChars()+6, NULL, 16));
|
||||
// Strife needs a special case here to choose between good and sad ending. Bad is handled elsewherw.
|
||||
// Strife needs a special case here to choose between good and sad ending. Bad is handled elsewhere.
|
||||
if (endsequence == NAME_Inter_Strife)
|
||||
{
|
||||
if (players[0].mo->FindInventory (QuestItemClasses[24]) ||
|
||||
|
|
|
@ -1,86 +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 "a_strifeglobal.h"
|
||||
#include "doomdata.h"
|
||||
#include "vm.h"
|
||||
#include "doomstat.h"
|
||||
*/
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// A_HideDecepticon
|
||||
//
|
||||
// Hide the Acolyte-to-be ->
|
||||
// Hide the guy transforming into an Acolyte ->
|
||||
// Hide the transformer ->
|
||||
// Transformers are Autobots and Decepticons, and
|
||||
// Decepticons are the bad guys, so... ->
|
||||
//
|
||||
// Hide the Decepticon!
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
DEFINE_ACTION_FUNCTION(AActor, A_HideDecepticon)
|
||||
{
|
||||
PARAM_SELF_PROLOGUE(AActor);
|
||||
|
||||
EV_DoDoor (DDoor::doorClose, NULL, self, 999, 8., 0, 0, 0);
|
||||
if (self->target != NULL && self->target->player != NULL)
|
||||
{
|
||||
P_NoiseAlert (self->target, self);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// A_AcolyteDie
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
DEFINE_ACTION_FUNCTION(AActor, A_AcolyteDie)
|
||||
{
|
||||
PARAM_SELF_PROLOGUE(AActor);
|
||||
|
||||
int i;
|
||||
|
||||
// [RH] Disable translucency here.
|
||||
self->RenderStyle = STYLE_Normal;
|
||||
|
||||
// Only the Blue Acolyte does extra stuff on death.
|
||||
if (self->GetClass()->TypeName != NAME_AcolyteBlue)
|
||||
return 0;
|
||||
|
||||
// Make sure somebody is still alive
|
||||
for (i = 0; i < MAXPLAYERS; ++i)
|
||||
{
|
||||
if (playeringame[i] && players[i].health > 0)
|
||||
break;
|
||||
}
|
||||
if (i == MAXPLAYERS)
|
||||
return 0;
|
||||
|
||||
// Make sure all the other blue acolytes are dead.
|
||||
TThinkerIterator<AActor> iterator(NAME_AcolyteBlue);
|
||||
AActor *other;
|
||||
|
||||
while ( (other = iterator.Next ()) )
|
||||
{
|
||||
if (other != self && other->health > 0)
|
||||
{ // Found a living one
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
players[i].mo->GiveInventoryType (QuestItemClasses[6]);
|
||||
players[i].SetLogNumber (14);
|
||||
S_StopSound (CHAN_VOICE);
|
||||
S_Sound (CHAN_VOICE, "svox/voc14", 1, ATTN_NORM);
|
||||
return 0;
|
||||
}
|
||||
|
|
@ -24,7 +24,6 @@
|
|||
#include "vm.h"
|
||||
|
||||
// Include all the other Strife stuff here to reduce compile time
|
||||
#include "a_acolyte.cpp"
|
||||
#include "a_spectral.cpp"
|
||||
#include "a_alienspectres.cpp"
|
||||
#include "a_coin.cpp"
|
||||
|
|
|
@ -486,6 +486,14 @@ void player_t::SetLogNumber (int num)
|
|||
}
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION(_PlayerInfo, SetLogNumber)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_t);
|
||||
PARAM_INT(log);
|
||||
self->SetLogNumber(log);
|
||||
return 0;
|
||||
}
|
||||
|
||||
void player_t::SetLogText (const char *text)
|
||||
{
|
||||
LogText = text;
|
||||
|
@ -496,6 +504,14 @@ void player_t::SetLogText (const char *text)
|
|||
AddToConsole(-1, "\n");
|
||||
}
|
||||
|
||||
DEFINE_ACTION_FUNCTION(_PlayerInfo, SetLogText)
|
||||
{
|
||||
PARAM_SELF_STRUCT_PROLOGUE(player_t);
|
||||
PARAM_STRING(log);
|
||||
self->SetLogText(log);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int player_t::GetSpawnClass()
|
||||
{
|
||||
const PClass * type = PlayerClasses[CurrentPlayerClass].Type;
|
||||
|
|
|
@ -233,5 +233,7 @@ FWeaponSlots weapons;
|
|||
native void SetSafeFlash(Weapon weap, State flashstate, int index);
|
||||
native PSprite GetPSprite(int id);
|
||||
native PSprite FindPSprite(int id);
|
||||
native void SetLogNumber (int text);
|
||||
native void SetLogText (String text);
|
||||
|
||||
}
|
||||
|
|
|
@ -26,8 +26,6 @@ class Acolyte : StrifeHumanoid
|
|||
Obituary "$OB_ACOLYTE";
|
||||
}
|
||||
|
||||
native void A_AcolyteDie ();
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
@ -75,6 +73,49 @@ class Acolyte : StrifeHumanoid
|
|||
Stop;
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// A_AcolyteDie
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
void A_AcolyteDie ()
|
||||
{
|
||||
// [RH] Disable translucency here.
|
||||
A_SetRenderStyle(1, STYLE_Normal);
|
||||
|
||||
// Only the Blue Acolyte does extra stuff on death.
|
||||
if (self is "AcolyteBlue")
|
||||
{
|
||||
int i;
|
||||
// Make sure somebody is still alive
|
||||
for (i = 0; i < MAXPLAYERS; ++i)
|
||||
{
|
||||
if (playeringame[i] && players[i].health > 0)
|
||||
break;
|
||||
}
|
||||
if (i == MAXPLAYERS)
|
||||
return;
|
||||
|
||||
// Make sure all the other blue acolytes are dead.
|
||||
ThinkerIterator it = ThinkerIterator.Create("AcolyteBlue");
|
||||
Actor other;
|
||||
|
||||
while ( (other = Actor(it.Next ())) )
|
||||
{
|
||||
if (other != self && other.health > 0)
|
||||
{ // Found a living one
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
players[i].mo.GiveInventoryType ("QuestItem7");
|
||||
players[i].SetLogNumber (14);
|
||||
A_StopSound (CHAN_VOICE);
|
||||
A_PlaySound ("svox/voc14", CHAN_VOICE);
|
||||
}
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// A_BeShadowyFoe
|
||||
|
@ -238,8 +279,6 @@ class AcolyteToBe : Acolyte
|
|||
-ISMONSTER
|
||||
}
|
||||
|
||||
native void A_HideDecepticon ();
|
||||
|
||||
States
|
||||
{
|
||||
Spawn:
|
||||
|
@ -251,4 +290,27 @@ class AcolyteToBe : Acolyte
|
|||
Death:
|
||||
Goto XDeath;
|
||||
}
|
||||
|
||||
//============================================================================
|
||||
//
|
||||
// A_HideDecepticon
|
||||
//
|
||||
// Hide the Acolyte-to-be ->
|
||||
// Hide the guy transforming into an Acolyte ->
|
||||
// Hide the transformer ->
|
||||
// Transformers are Autobots and Decepticons, and
|
||||
// Decepticons are the bad guys, so... ->
|
||||
//
|
||||
// Hide the Decepticon!
|
||||
//
|
||||
//============================================================================
|
||||
|
||||
void A_HideDecepticon ()
|
||||
{
|
||||
Door_Close(999, 64);
|
||||
if (target != null && target.player != null)
|
||||
{
|
||||
target.NoiseAlert (self);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue