mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-23 04:22:34 +00:00
- re-fixed the massacre fix for Dehacked-modified inventory items.
Instead of overriding the Massacre method it is preferable to clear the flags causing the bad behavior, most notably ISMONSTER. # Conflicts: # src/g_inventory/a_pickups.cpp # src/g_inventory/a_pickups.h
This commit is contained in:
parent
7301bbc58e
commit
a14b0c58bf
6 changed files with 8 additions and 31 deletions
|
@ -52,6 +52,7 @@
|
|||
#include "teaminfo.h"
|
||||
#include "p_conversation.h"
|
||||
#include "d_event.h"
|
||||
#include "p_enemy.h"
|
||||
#include "m_argv.h"
|
||||
#include "p_lnspec.h"
|
||||
#include "p_spec.h"
|
||||
|
@ -2079,19 +2080,7 @@ uint8_t *FDynamicBuffer::GetData (int *len)
|
|||
|
||||
static int KillAll(PClassActor *cls)
|
||||
{
|
||||
AActor *actor;
|
||||
int killcount = 0;
|
||||
TThinkerIterator<AActor> iterator(cls);
|
||||
while ( (actor = iterator.Next ()) )
|
||||
{
|
||||
if (actor->IsA(cls))
|
||||
{
|
||||
if (!(actor->flags2 & MF2_DORMANT) && (actor->flags3 & MF3_ISMONSTER))
|
||||
killcount += actor->Massacre ();
|
||||
}
|
||||
}
|
||||
return killcount;
|
||||
|
||||
return P_Massacre(false, cls);
|
||||
}
|
||||
|
||||
static int RemoveClass(const PClass *cls)
|
||||
|
|
|
@ -141,20 +141,6 @@ void AInventory::Serialize(FSerializer &arc)
|
|||
("droptime", DropTime, def->DropTime);
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// AInventory :: Massacre
|
||||
//
|
||||
// This is a countermeasure for Dehacked modifications mainly.
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
bool AInventory::Massacre()
|
||||
{
|
||||
if (Owner == nullptr) return Super::Massacre();
|
||||
return false;
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
//
|
||||
|
|
|
@ -72,7 +72,6 @@ public:
|
|||
|
||||
virtual void Serialize(FSerializer &arc) override;
|
||||
virtual void Tick() override;
|
||||
virtual bool Massacre() override;
|
||||
|
||||
bool CallTryPickup(AActor *toucher, AActor **toucher_return = NULL); // Wrapper for script function.
|
||||
|
||||
|
|
|
@ -3465,7 +3465,7 @@ DEFINE_ACTION_FUNCTION(AActor, A_BossDeath)
|
|||
//
|
||||
//----------------------------------------------------------------------------
|
||||
|
||||
int P_Massacre (bool baddies)
|
||||
int P_Massacre (bool baddies, PClassActor *cls)
|
||||
{
|
||||
// jff 02/01/98 'em' cheat - kill all monsters
|
||||
// partially taken from Chi's .46 port
|
||||
|
@ -3475,7 +3475,7 @@ int P_Massacre (bool baddies)
|
|||
|
||||
int killcount = 0;
|
||||
AActor *actor;
|
||||
TThinkerIterator<AActor> iterator;
|
||||
TThinkerIterator<AActor> iterator(cls);
|
||||
|
||||
while ( (actor = iterator.Next ()) )
|
||||
{
|
||||
|
|
|
@ -67,7 +67,7 @@ void A_FaceTarget(AActor *actor);
|
|||
void A_Face(AActor *self, AActor *other, DAngle max_turn = 0., DAngle max_pitch = 270., DAngle ang_offset = 0., DAngle pitch_offset = 0., int flags = 0, double z_add = 0);
|
||||
|
||||
bool CheckBossDeath (AActor *);
|
||||
int P_Massacre (bool baddies = false);
|
||||
int P_Massacre (bool baddies = false, PClassActor *cls = nullptr);
|
||||
bool P_CheckMissileRange (AActor *actor);
|
||||
|
||||
#define SKULLSPEED (20.)
|
||||
|
|
|
@ -212,6 +212,9 @@ class Inventory : Actor native
|
|||
}
|
||||
ChangeTid(0);
|
||||
bSpecial = false;
|
||||
// if the item was turned into a monster through Dehacked, undo that here.
|
||||
bCountkill = false;
|
||||
bIsMonster = false;
|
||||
ChangeStatNum(STAT_INVENTORY);
|
||||
// stop all sounds this item is playing.
|
||||
for(int i = 1;i<=7;i++) A_StopSound(i);
|
||||
|
|
Loading…
Reference in a new issue