mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-11-24 13:11:33 +00:00
- fixed: Dehacked replaced pickups multiple times for changing its states.
- fixed: Dehacked must copy AInventory's state to any item it hacks to be a pickup. - fixed a few more DECORATE bugs. SVN r1166 (trunk)
This commit is contained in:
parent
3cb073a3a0
commit
4fd717046e
8 changed files with 48 additions and 10 deletions
|
@ -1,3 +1,9 @@
|
||||||
|
August 12, 2008 (Changes by Graf Zahl)
|
||||||
|
- fixed: Dehacked replaced pickups multiple times for changing its states.
|
||||||
|
- fixed: Dehacked must copy AInventory's state to any item it hacks to be a
|
||||||
|
pickup.
|
||||||
|
- fixed a few more DECORATE bugs.
|
||||||
|
|
||||||
August 12, 2008 (Changes by Graf Zahl)
|
August 12, 2008 (Changes by Graf Zahl)
|
||||||
- Fixed: The chat sound for Strife was misnamed in the gameinfo structure.
|
- Fixed: The chat sound for Strife was misnamed in the gameinfo structure.
|
||||||
- fixed a few DECORATE bugs.
|
- fixed a few DECORATE bugs.
|
||||||
|
|
|
@ -346,6 +346,15 @@ static bool ReadChars (char **stuff, int size);
|
||||||
static char *igets (void);
|
static char *igets (void);
|
||||||
static int GetLine (void);
|
static int GetLine (void);
|
||||||
|
|
||||||
|
static void PushTouchedActor(PClass *cls)
|
||||||
|
{
|
||||||
|
for(unsigned i = 0; i < TouchedActors.Size(); i++)
|
||||||
|
{
|
||||||
|
if (TouchedActors[i] == cls) return;
|
||||||
|
}
|
||||||
|
TouchedActors.Push(cls);
|
||||||
|
}
|
||||||
|
|
||||||
inline const char *GetName (int name)
|
inline const char *GetName (int name)
|
||||||
{
|
{
|
||||||
return NameBase + NameOffs[name];
|
return NameBase + NameOffs[name];
|
||||||
|
@ -438,7 +447,8 @@ static FState *FindState (int statenum)
|
||||||
{
|
{
|
||||||
if (StateMap[i].OwnerIsPickup)
|
if (StateMap[i].OwnerIsPickup)
|
||||||
{
|
{
|
||||||
TouchedActors.Push (const_cast<PClass *>(StateMap[i].Owner));
|
|
||||||
|
PushTouchedActor(const_cast<PClass *>(StateMap[i].Owner));
|
||||||
}
|
}
|
||||||
return StateMap[i].State + statenum - stateacc;
|
return StateMap[i].State + statenum - stateacc;
|
||||||
}
|
}
|
||||||
|
@ -1026,7 +1036,7 @@ static int PatchThing (int thingy)
|
||||||
|
|
||||||
if (info->flags & MF_SPECIAL)
|
if (info->flags & MF_SPECIAL)
|
||||||
{
|
{
|
||||||
TouchedActors.Push (const_cast<PClass *>(type));
|
PushTouchedActor(const_cast<PClass *>(type));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Make MF3_ISMONSTER match MF_COUNTKILL
|
// Make MF3_ISMONSTER match MF_COUNTKILL
|
||||||
|
@ -2577,6 +2587,11 @@ void FinishDehPatch ()
|
||||||
|
|
||||||
// Make a copy the state labels
|
// Make a copy the state labels
|
||||||
MakeStateDefines(type->ActorInfo->StateList);
|
MakeStateDefines(type->ActorInfo->StateList);
|
||||||
|
if (!type->IsDescendantOf(RUNTIME_CLASS(AInventory)))
|
||||||
|
{
|
||||||
|
// If this is a hacked non-inventory item we must also copy AInventory's special states
|
||||||
|
AddStateDefines(RUNTIME_CLASS(AInventory)->ActorInfo->StateList);
|
||||||
|
}
|
||||||
InstallStates(subclass->ActorInfo, defaults2);
|
InstallStates(subclass->ActorInfo, defaults2);
|
||||||
|
|
||||||
// Use the DECORATE replacement feature to redirect all spawns
|
// Use the DECORATE replacement feature to redirect all spawns
|
||||||
|
@ -2584,7 +2599,7 @@ void FinishDehPatch ()
|
||||||
type->ActorInfo->Replacement = subclass->ActorInfo;
|
type->ActorInfo->Replacement = subclass->ActorInfo;
|
||||||
subclass->ActorInfo->Replacee = type->ActorInfo;
|
subclass->ActorInfo->Replacee = type->ActorInfo;
|
||||||
|
|
||||||
DPrintf ("%s replaces %s\n", subclass->TypeName.GetChars(), type->TypeName.GetChars());
|
Printf ("%s replaces %s\n", subclass->TypeName.GetChars(), type->TypeName.GetChars());
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now that all Dehacked patches have been processed, it's okay to free StateMap.
|
// Now that all Dehacked patches have been processed, it's okay to free StateMap.
|
||||||
|
|
|
@ -837,6 +837,8 @@ void AInventory::Hide ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
assert(HideDoomishState != NULL || HideSpecialState != NULL);
|
||||||
|
|
||||||
if (HideSpecialState != NULL)
|
if (HideSpecialState != NULL)
|
||||||
{
|
{
|
||||||
SetState (HideSpecialState);
|
SetState (HideSpecialState);
|
||||||
|
@ -848,11 +850,6 @@ void AInventory::Hide ()
|
||||||
SetState (HideDoomishState);
|
SetState (HideDoomishState);
|
||||||
tics = 1050;
|
tics = 1050;
|
||||||
}
|
}
|
||||||
else
|
|
||||||
{
|
|
||||||
GoAwayAndDie();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (RespawnTics != 0)
|
if (RespawnTics != 0)
|
||||||
{
|
{
|
||||||
tics = RespawnTics;
|
tics = RespawnTics;
|
||||||
|
|
|
@ -99,6 +99,7 @@ void AddState (const char * statename, FState * state);
|
||||||
FState * FindState(AActor * actor, const PClass * type, const char * name);
|
FState * FindState(AActor * actor, const PClass * type, const char * name);
|
||||||
void InstallStates(FActorInfo *info, AActor *defaults);
|
void InstallStates(FActorInfo *info, AActor *defaults);
|
||||||
void MakeStateDefines(const FStateLabels *list);
|
void MakeStateDefines(const FStateLabels *list);
|
||||||
|
void AddStateDefines(const FStateLabels *list);
|
||||||
FState *P_GetState(AActor *self, FState *CallingState, int offset);
|
FState *P_GetState(AActor *self, FState *CallingState, int offset);
|
||||||
int FinishStates (FScanner &sc, FActorInfo *actor, AActor *defaults, Baggage &bag);
|
int FinishStates (FScanner &sc, FActorInfo *actor, AActor *defaults, Baggage &bag);
|
||||||
int ParseStates(FScanner &sc, FActorInfo *actor, AActor *defaults, Baggage &bag);
|
int ParseStates(FScanner &sc, FActorInfo *actor, AActor *defaults, Baggage &bag);
|
||||||
|
|
|
@ -369,6 +369,24 @@ void MakeStateDefines(const FStateLabels *list)
|
||||||
MakeStateList(list, StateLabels);
|
MakeStateList(list, StateLabels);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AddStateDefines(const FStateLabels *list)
|
||||||
|
{
|
||||||
|
if (list != NULL) for(int i=0;i<list->NumLabels;i++)
|
||||||
|
{
|
||||||
|
if (list->Labels[i].Children == NULL)
|
||||||
|
{
|
||||||
|
if (!FindStateLabelInList(StateLabels, list->Labels[i].Label, false))
|
||||||
|
{
|
||||||
|
FStateDefine def;
|
||||||
|
|
||||||
|
def.Label = list->Labels[i].Label;
|
||||||
|
def.State = list->Labels[i].State;
|
||||||
|
StateLabels.Push(def);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//==========================================================================
|
//==========================================================================
|
||||||
//
|
//
|
||||||
// PrepareStateParameters
|
// PrepareStateParameters
|
||||||
|
|
|
@ -191,6 +191,7 @@ ACTOR BloodPool 111
|
||||||
|
|
||||||
ACTOR ZCorpseLynchedNoHeart 109 native
|
ACTOR ZCorpseLynchedNoHeart 109 native
|
||||||
{
|
{
|
||||||
|
Game Hexen
|
||||||
Radius 10
|
Radius 10
|
||||||
Height 100
|
Height 100
|
||||||
+SOLID +SPAWNCEILING +NOGRAVITY
|
+SOLID +SPAWNCEILING +NOGRAVITY
|
||||||
|
|
|
@ -37,7 +37,7 @@ ACTOR Inventory native
|
||||||
action native A_ClearReFire();
|
action native A_ClearReFire();
|
||||||
action native A_CheckReload();
|
action native A_CheckReload();
|
||||||
action native A_GunFlash();
|
action native A_GunFlash();
|
||||||
action native A_Saw(sound fullsound = "misc/sawfull", sound hitsound = "misc/sawhit", int damage = 2, class<Actor> pufftype = "BulletPuff");
|
action native A_Saw(sound fullsound = "weapons/sawfull", sound hitsound = "weapons/sawhit", int damage = 2, class<Actor> pufftype = "BulletPuff");
|
||||||
action native A_CheckForReload(int counter, state label);
|
action native A_CheckForReload(int counter, state label);
|
||||||
action native A_ResetReloadCounter();
|
action native A_ResetReloadCounter();
|
||||||
action native A_RestoreSpecialPosition();
|
action native A_RestoreSpecialPosition();
|
||||||
|
|
|
@ -467,7 +467,7 @@ ACTOR SStalagmiteSmall 163
|
||||||
States
|
States
|
||||||
{
|
{
|
||||||
Spawn:
|
Spawn:
|
||||||
STLG E -1
|
STLG F -1
|
||||||
Stop
|
Stop
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue