mirror of
https://github.com/ZDoom/gzdoom.git
synced 2024-11-10 23:01:50 +00:00
- scriptified the no-spawn flag check for armor and health items.
This commit is contained in:
parent
319f8743db
commit
a5fc26b37c
3 changed files with 30 additions and 23 deletions
|
@ -5621,31 +5621,16 @@ AActor *P_SpawnMapThing (FMapThing *mthing, int position)
|
|||
{
|
||||
return NULL;
|
||||
}
|
||||
auto it = GetDefaultByType(i);
|
||||
|
||||
// [RH] Other things that shouldn't be spawned depending on dmflags
|
||||
if (deathmatch || alwaysapplydmflags)
|
||||
IFVIRTUALPTR(it, AActor, ShouldSpawn)
|
||||
{
|
||||
if (i->IsDescendantOf(RUNTIME_CLASS(AInventory)))
|
||||
{
|
||||
auto it = static_cast<AInventory*>(GetDefaultByType(i));
|
||||
|
||||
if (dmflags & DF_NO_HEALTH)
|
||||
{
|
||||
if (it->ItemFlags & IF_ISHEALTH) return nullptr;
|
||||
int ret;
|
||||
VMValue param = it;
|
||||
VMReturn rett(&ret);
|
||||
VMCall(func, ¶m, 1, &rett, 1);
|
||||
if (!ret) return nullptr;
|
||||
}
|
||||
if (dmflags & DF_NO_ITEMS)
|
||||
{
|
||||
// if (i->IsDescendantOf (RUNTIME_CLASS(AArtifact)))
|
||||
// return;
|
||||
}
|
||||
if (dmflags & DF_NO_ARMOR)
|
||||
{
|
||||
if (it->ItemFlags & IF_ISARMOR) return nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// spawn it
|
||||
double sz;
|
||||
|
|
|
@ -961,6 +961,11 @@ class Actor : Thinker native
|
|||
Alpha = default.Alpha;
|
||||
}
|
||||
|
||||
virtual bool ShouldSpawn()
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
native void A_Face(Actor faceto, double max_turn = 0, double max_pitch = 270, double ang_offset = 0, double pitch_offset = 0, int flags = 0, double z_ofs = 0);
|
||||
|
||||
void A_FaceTarget(double max_turn = 0, double max_pitch = 270, double ang_offset = 0, double pitch_offset = 0, int flags = 0, double z_ofs = 0)
|
||||
|
|
|
@ -113,6 +113,23 @@ class Inventory : Actor native
|
|||
Super.OnDestroy();
|
||||
}
|
||||
|
||||
//===========================================================================
|
||||
//
|
||||
// AInventory :: ShouldSpawn
|
||||
//
|
||||
//===========================================================================
|
||||
|
||||
override bool ShouldSpawn()
|
||||
{
|
||||
// [RH] Other things that shouldn't be spawned depending on dmflags
|
||||
if (deathmatch || alwaysapplydmflags)
|
||||
{
|
||||
if (sv_nohealth && bIsHealth) return false;
|
||||
if (sv_noarmor && bIsArmor) return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
// PROC A_RestoreSpecialThing1
|
||||
|
|
Loading…
Reference in a new issue