From 56e07c3f06ff81f6c76b63a66553905fb652771c Mon Sep 17 00:00:00 2001 From: Marco Hladik Date: Thu, 16 Sep 2021 21:16:37 +0200 Subject: [PATCH] CGameRules: Add MonstersSpawn(), now game-modes can be queried for whether or not monster entities spawn on init. --- src/gs-entbase/server/basemonster.qc | 3 +-- src/gs-entbase/server/basetrigger.qc | 14 +++++++------- src/gs-entbase/server/func_breakable.qc | 1 - src/gs-entbase/shared/baseentity.qc | 2 +- src/gs-entbase/shared/decals.qc | 2 +- src/server/gamerules.h | 1 + src/server/gamerules.qc | 8 +++++++- src/shared/sound.qc | 1 + 8 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/gs-entbase/server/basemonster.qc b/src/gs-entbase/server/basemonster.qc index 798a390f..497c8132 100644 --- a/src/gs-entbase/server/basemonster.qc +++ b/src/gs-entbase/server/basemonster.qc @@ -711,9 +711,8 @@ CBaseMonster::SendEntity(entity ePEnt, float fChanged) void CBaseMonster::CBaseMonster(void) { - /* FIXME: Put this somewhere else? */ if (!(spawnflags & MSF_MULTIPLAYER)) - if (!(cvar("coop") == 1 || cvar("sv_playerslots") == 1)) { + if (g_grMode.MonstersSpawn() == FALSE) { remove(this); return; } diff --git a/src/gs-entbase/server/basetrigger.qc b/src/gs-entbase/server/basetrigger.qc index 85384832..15ee34f5 100644 --- a/src/gs-entbase/server/basetrigger.qc +++ b/src/gs-entbase/server/basetrigger.qc @@ -85,17 +85,17 @@ CBaseTrigger::GetMaster(void) /* we couldn't find it, so let's not even bother going further */ if (!t) { - /*dprint(sprintf("^2%s::^3GetMaster^7: Invalid master, return success\n", - this.classname));*/ + print(sprintf("^2%s::^3GetMaster^7: Invalid master, return success\n", + this.classname)); return (1); } - /*if (t.GetValue() == 1) - dprint(sprintf("^2%s::^3GetMaster^7: %s learns %s ^2POSITIVE\n", + if (t.GetValue() == 1) + print(sprintf("^2%s::^3GetMaster^7: %s learns %s ^2POSITIVE\n", this.classname, targetname, m_strMaster)); else - dprint(sprintf("^2%s::^3GetMaster^7: %s learns %s ^1NEGATIVE\n", - this.classname, targetname, m_strMaster));*/ + print(sprintf("^2%s::^3GetMaster^7: %s learns %s ^1NEGATIVE\n", + this.classname, targetname, m_strMaster)); return t.GetValue(); } @@ -110,7 +110,7 @@ CBaseTrigger::InitPointTrigger(void) void CBaseTrigger::InitBrushTrigger(void) { - SetModel(m_oldModel); + SetModel(GetSpawnModel()); SetMovetype(MOVETYPE_NONE); SetSolid(SOLID_BSPTRIGGER); diff --git a/src/gs-entbase/server/func_breakable.qc b/src/gs-entbase/server/func_breakable.qc index a790d865..cc6b7685 100644 --- a/src/gs-entbase/server/func_breakable.qc +++ b/src/gs-entbase/server/func_breakable.qc @@ -208,7 +208,6 @@ func_breakable::Death(void) unit.nextthink = time; unit.real_owner = this; setorigin(unit, absmin + (0.5 * (absmax - absmin))); - print(sprintf("breakable spawning %s\n", unit.classname)); } /* This may seem totally absurd. That's because it is. It's very diff --git a/src/gs-entbase/shared/baseentity.qc b/src/gs-entbase/shared/baseentity.qc index b19f7266..6e322713 100644 --- a/src/gs-entbase/shared/baseentity.qc +++ b/src/gs-entbase/shared/baseentity.qc @@ -490,7 +490,7 @@ CBaseEntity_ParseSentence(void) targ = (CBaseEntity)ent; targ.Sentence(sentence); } else { - print(sprintf("^3CBaseNPC_ParseSentence^7: Entity %d not in PVS\n", e)); + dprint(sprintf("^3CBaseNPC_ParseSentence^7: Entity %d not in PVS\n", e)); } } #else diff --git a/src/gs-entbase/shared/decals.qc b/src/gs-entbase/shared/decals.qc index 70bb82c9..22a55574 100644 --- a/src/gs-entbase/shared/decals.qc +++ b/src/gs-entbase/shared/decals.qc @@ -156,7 +156,7 @@ decal::Place(vector org, string dname) /* we never hit any wall. */ if (g_tracedDecal.fraction == 1.0f) { - print(sprintf("^1infodecal tracing failed at %v\n", org)); + dprint(sprintf("^1infodecal tracing failed at %v\n", org)); if (classname != "tempdecal") remove(this); return; diff --git a/src/server/gamerules.h b/src/server/gamerules.h index 812c3c0b..d3ec1818 100644 --- a/src/server/gamerules.h +++ b/src/server/gamerules.h @@ -43,6 +43,7 @@ class CGameRules virtual void(base_player) LevelChangeParms; virtual int(int) MaxItemPerSlot; + virtual int(void) MonstersSpawn; /* end of a game */ virtual void(void) IntermissionStart; diff --git a/src/server/gamerules.qc b/src/server/gamerules.qc index a82fe0b5..a8e20cf8 100644 --- a/src/server/gamerules.qc +++ b/src/server/gamerules.qc @@ -107,7 +107,7 @@ CGameRules::SpectatorThink(player pl) int CGameRules::MaxItemPerSlot(int slot) { - return -1; + return (-1); } void @@ -171,6 +171,12 @@ CGameRules::IntermissionCycle(void) } +int +CGameRules::MonstersSpawn(void) +{ + return (TRUE); +} + void CGameRules::IntermissionEnd(void) { diff --git a/src/shared/sound.qc b/src/shared/sound.qc index 1905203c..a815e7dd 100644 --- a/src/shared/sound.qc +++ b/src/shared/sound.qc @@ -239,6 +239,7 @@ Sound_Precache(string shader) g_sounds[index].volume = 1.0f; g_sounds[index].dist_max = 1; g_sounds[index].pitch_min = g_sounds[index].pitch_max = 100; + g_sounds[index].offset = 0; sh = search_begin("sound/*.sndshd", TRUE, TRUE);