mirror of
https://github.com/ZDoom/qzdoom-gpl.git
synced 2025-01-31 10:40:33 +00:00
- Added replacement handling to A_BossDeath.
SVN r260 (trunk)
This commit is contained in:
parent
93cd78ebfb
commit
e5a26c75fa
6 changed files with 26 additions and 4 deletions
|
@ -1,4 +1,5 @@
|
||||||
July 16, 2006 (Changes by Graf Zahl)
|
July 16, 2006 (Changes by Graf Zahl)
|
||||||
|
- Added replacement handling to A_BossDeath.
|
||||||
- Fixed: The check for no skill menu was incorrect when a custom player
|
- Fixed: The check for no skill menu was incorrect when a custom player
|
||||||
class menu was present so instead of starting the game specific skill menu
|
class menu was present so instead of starting the game specific skill menu
|
||||||
it always started Hexen's.
|
it always started Hexen's.
|
||||||
|
|
15
src/info.cpp
15
src/info.cpp
|
@ -320,6 +320,21 @@ FActorInfo *FActorInfo::GetReplacement ()
|
||||||
return rep;
|
return rep;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
FActorInfo *FActorInfo::GetReplacee ()
|
||||||
|
{
|
||||||
|
if (Replacee == NULL)
|
||||||
|
{
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
// The Replacee field is temporarily NULLed to prevent
|
||||||
|
// potential infinite recursion.
|
||||||
|
FActorInfo *savedrep = Replacee;
|
||||||
|
Replacee = NULL;
|
||||||
|
FActorInfo *rep = savedrep->GetReplacee ();
|
||||||
|
Replacee = savedrep;
|
||||||
|
return rep;
|
||||||
|
}
|
||||||
|
|
||||||
FDoomEdMap DoomEdMap;
|
FDoomEdMap DoomEdMap;
|
||||||
|
|
||||||
FDoomEdMap::FDoomEdEntry *FDoomEdMap::DoomEdHash[DOOMED_HASHSIZE];
|
FDoomEdMap::FDoomEdEntry *FDoomEdMap::DoomEdHash[DOOMED_HASHSIZE];
|
||||||
|
|
|
@ -385,10 +385,12 @@ struct FActorInfo
|
||||||
void ApplyDefaults (BYTE *defaults);
|
void ApplyDefaults (BYTE *defaults);
|
||||||
void RegisterIDs ();
|
void RegisterIDs ();
|
||||||
FActorInfo *GetReplacement ();
|
FActorInfo *GetReplacement ();
|
||||||
|
FActorInfo *GetReplacee ();
|
||||||
|
|
||||||
PClass *Class;
|
PClass *Class;
|
||||||
FState *OwnedStates;
|
FState *OwnedStates;
|
||||||
FActorInfo *Replacement;
|
FActorInfo *Replacement;
|
||||||
|
FActorInfo *Replacee;
|
||||||
int NumOwnedStates;
|
int NumOwnedStates;
|
||||||
BYTE GameFilter;
|
BYTE GameFilter;
|
||||||
BYTE SpawnID;
|
BYTE SpawnID;
|
||||||
|
|
|
@ -173,12 +173,12 @@ public:
|
||||||
|
|
||||||
#define BEGIN_DEFAULTS(actor,game,ednum,spawnid) \
|
#define BEGIN_DEFAULTS(actor,game,ednum,spawnid) \
|
||||||
BEGIN_DEFAULTS_PRE(actor) \
|
BEGIN_DEFAULTS_PRE(actor) \
|
||||||
RUNTIME_CLASS(actor), &actor::States[0], NULL, countof(actor::States), \
|
RUNTIME_CLASS(actor), &actor::States[0], NULL, NULL, countof(actor::States), \
|
||||||
BEGIN_DEFAULTS_POST(actor,game,ednum,spawnid)
|
BEGIN_DEFAULTS_POST(actor,game,ednum,spawnid)
|
||||||
|
|
||||||
#define BEGIN_STATELESS_DEFAULTS(actor,game,ednum,spawnid) \
|
#define BEGIN_STATELESS_DEFAULTS(actor,game,ednum,spawnid) \
|
||||||
BEGIN_DEFAULTS_PRE(actor) \
|
BEGIN_DEFAULTS_PRE(actor) \
|
||||||
RUNTIME_CLASS(actor), NULL, NULL, 0, \
|
RUNTIME_CLASS(actor), NULL, NULL, NULL, 0, \
|
||||||
BEGIN_DEFAULTS_POST(actor,game,ednum,spawnid)
|
BEGIN_DEFAULTS_POST(actor,game,ednum,spawnid)
|
||||||
|
|
||||||
// IMPLEMENT_ACTOR combines IMPLEMENT_CLASS and BEGIN_DEFAULTS
|
// IMPLEMENT_ACTOR combines IMPLEMENT_CLASS and BEGIN_DEFAULTS
|
||||||
|
|
|
@ -2377,14 +2377,17 @@ bool CheckBossDeath (AActor *actor)
|
||||||
//
|
//
|
||||||
void A_BossDeath (AActor *actor)
|
void A_BossDeath (AActor *actor)
|
||||||
{
|
{
|
||||||
FName type = actor->GetClass()->TypeName;
|
FName mytype = actor->GetClass()->TypeName;
|
||||||
|
|
||||||
|
// Ugh...
|
||||||
|
FName type = actor->GetClass()->ActorInfo->GetReplacee()->Class->TypeName;
|
||||||
|
|
||||||
// Do generic special death actions first
|
// Do generic special death actions first
|
||||||
bool checked = false;
|
bool checked = false;
|
||||||
FSpecialAction *sa = level.info->specialactions;
|
FSpecialAction *sa = level.info->specialactions;
|
||||||
while (sa)
|
while (sa)
|
||||||
{
|
{
|
||||||
if (type == sa->Type)
|
if (type == sa->Type || mytype == sa->Type)
|
||||||
{
|
{
|
||||||
if (!checked && !CheckBossDeath(actor))
|
if (!checked && !CheckBossDeath(actor))
|
||||||
{
|
{
|
||||||
|
|
|
@ -1263,6 +1263,7 @@ static FActorInfo * CreateNewActor(FActorInfo ** parentc, Baggage *bag)
|
||||||
SC_ScriptError ("Replaced type '%s' is not an actor", sc_String);
|
SC_ScriptError ("Replaced type '%s' is not an actor", sc_String);
|
||||||
}
|
}
|
||||||
replacee->ActorInfo->Replacement = ti->ActorInfo;
|
replacee->ActorInfo->Replacement = ti->ActorInfo;
|
||||||
|
ti->ActorInfo->Replacee = replacee->ActorInfo;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue