- Added Gez's actor replacement per skill submission.
SVN r1681 (trunk)
This commit is contained in:
parent
590eb5cb76
commit
5a80938b11
5 changed files with 103 additions and 9 deletions
34
src/info.cpp
34
src/info.cpp
|
|
@ -48,9 +48,13 @@
|
|||
#include "p_local.h"
|
||||
#include "templates.h"
|
||||
#include "cmdlib.h"
|
||||
#include "g_level.h"
|
||||
|
||||
extern void LoadActors ();
|
||||
|
||||
extern TArray<FSkillInfo> AllSkills;
|
||||
|
||||
|
||||
//==========================================================================
|
||||
//
|
||||
//
|
||||
|
|
@ -164,9 +168,10 @@ void FActorInfo::RegisterIDs ()
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
FActorInfo *FActorInfo::GetReplacement ()
|
||||
FActorInfo *FActorInfo::GetReplacement (bool lookskill)
|
||||
{
|
||||
if (Replacement == NULL)
|
||||
FName skillrepname = AllSkills[gameskill].GetReplacement(this->Class->TypeName);
|
||||
if (Replacement == NULL && (!lookskill || skillrepname == NAME_None))
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
|
@ -174,7 +179,18 @@ FActorInfo *FActorInfo::GetReplacement ()
|
|||
// potential infinite recursion.
|
||||
FActorInfo *savedrep = Replacement;
|
||||
Replacement = NULL;
|
||||
FActorInfo *rep = savedrep->GetReplacement ();
|
||||
FActorInfo *rep = savedrep;
|
||||
// Handle skill-based replacement here. It has precedence on DECORATE replacement
|
||||
// in that the skill replacement is applied first, followed by DECORATE replacement
|
||||
// on the actor indicated by the skill replacement.
|
||||
if (lookskill && skillrepname != NAME_None && PClass::FindClass(skillrepname) != NULL)
|
||||
{
|
||||
rep = PClass::FindClass(skillrepname)->ActorInfo;
|
||||
}
|
||||
// Now handle DECORATE replacement chain
|
||||
// Skill replacements are not recursive, contrarily to DECORATE replacements
|
||||
rep = rep->GetReplacement(false);
|
||||
// Reset the temporarily NULLed field
|
||||
Replacement = savedrep;
|
||||
return rep;
|
||||
}
|
||||
|
|
@ -184,9 +200,10 @@ FActorInfo *FActorInfo::GetReplacement ()
|
|||
//
|
||||
//==========================================================================
|
||||
|
||||
FActorInfo *FActorInfo::GetReplacee ()
|
||||
FActorInfo *FActorInfo::GetReplacee (bool lookskill)
|
||||
{
|
||||
if (Replacee == NULL)
|
||||
FName skillrepname = AllSkills[gameskill].GetReplacedBy(this->Class->TypeName);
|
||||
if (Replacee == NULL && (!lookskill || skillrepname == NAME_None))
|
||||
{
|
||||
return this;
|
||||
}
|
||||
|
|
@ -194,7 +211,12 @@ FActorInfo *FActorInfo::GetReplacee ()
|
|||
// potential infinite recursion.
|
||||
FActorInfo *savedrep = Replacee;
|
||||
Replacee = NULL;
|
||||
FActorInfo *rep = savedrep->GetReplacee ();
|
||||
FActorInfo *rep = savedrep;
|
||||
if (lookskill && skillrepname != NAME_None && PClass::FindClass(skillrepname) != NULL)
|
||||
{
|
||||
rep = PClass::FindClass(skillrepname)->ActorInfo;
|
||||
}
|
||||
rep = rep->GetReplacee (false);
|
||||
Replacee = savedrep;
|
||||
return rep;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue