From 456016e36b045af327268267e7277383d6738498 Mon Sep 17 00:00:00 2001 From: Mario Date: Sun, 13 Oct 2013 03:09:49 +1100 Subject: [PATCH 1/1] Disable extra monsters --- qcsrc/common/monsters/monster/animus.qc | 2 +- qcsrc/common/monsters/monster/bruiser.qc | 2 +- qcsrc/common/monsters/monster/brute.qc | 2 +- qcsrc/common/monsters/monster/cerberus.qc | 2 +- qcsrc/common/monsters/monster/knight.qc | 2 +- qcsrc/common/monsters/monster/slime.qc | 2 +- qcsrc/common/monsters/monster/stingray.qc | 2 +- qcsrc/common/monsters/monsters.qh | 1 + qcsrc/common/monsters/spawn.qc | 16 ++++----- qcsrc/common/monsters/spawn.qh | 2 +- qcsrc/common/monsters/sv_monsters.qc | 24 +++++++++++++ qcsrc/common/monsters/sv_monsters.qh | 2 ++ qcsrc/server/command/sv_cmd.qc | 10 +----- qcsrc/server/mutators/gamemode_invasion.qc | 12 ++----- qcsrc/server/mutators/mutator_new_toys.qc | 41 +++++++++++++++++----- 15 files changed, 79 insertions(+), 43 deletions(-) diff --git a/qcsrc/common/monsters/monster/animus.qc b/qcsrc/common/monsters/monster/animus.qc index f56bdbefb..aa3dba2a8 100644 --- a/qcsrc/common/monsters/monster/animus.qc +++ b/qcsrc/common/monsters/monster/animus.qc @@ -2,7 +2,7 @@ REGISTER_MONSTER( /* MON_##id */ ANIMUS, /* function */ m_animus, -/* spawnflags */ MONSTER_SIZE_BROKEN | MON_FLAG_MELEE, +/* spawnflags */ MONSTER_SIZE_BROKEN | MON_FLAG_MELEE | MON_FLAG_MUTATORBLOCKED, /* mins,maxs */ '-41 -41 -31', '41 41 31', /* model */ "demon.mdl", /* netname */ "animus", diff --git a/qcsrc/common/monsters/monster/bruiser.qc b/qcsrc/common/monsters/monster/bruiser.qc index 81602ad10..dfb6d0787 100644 --- a/qcsrc/common/monsters/monster/bruiser.qc +++ b/qcsrc/common/monsters/monster/bruiser.qc @@ -2,7 +2,7 @@ REGISTER_MONSTER( /* MON_##id */ BRUISER, /* function */ m_bruiser, -/* spawnflags */ MONSTER_SIZE_BROKEN | MON_FLAG_MELEE, +/* spawnflags */ MONSTER_SIZE_BROKEN | MON_FLAG_MELEE | MON_FLAG_MUTATORBLOCKED, /* mins,maxs */ '-20 -20 -31', '20 20 53', /* model */ "knight.mdl", /* netname */ "bruiser", diff --git a/qcsrc/common/monsters/monster/brute.qc b/qcsrc/common/monsters/monster/brute.qc index 9442c174f..4b7fa5612 100644 --- a/qcsrc/common/monsters/monster/brute.qc +++ b/qcsrc/common/monsters/monster/brute.qc @@ -2,7 +2,7 @@ REGISTER_MONSTER( /* MON_##id */ BRUTE, /* function */ m_brute, -/* spawnflags */ MON_FLAG_MELEE | MON_FLAG_RANGED, +/* spawnflags */ MON_FLAG_MELEE | MON_FLAG_RANGED | MON_FLAG_MUTATORBLOCKED, /* mins,maxs */ '-36 -36 -20', '36 36 50', /* model */ "ogre.dpm", /* netname */ "brute", diff --git a/qcsrc/common/monsters/monster/cerberus.qc b/qcsrc/common/monsters/monster/cerberus.qc index a91f1ddd9..b3964103e 100644 --- a/qcsrc/common/monsters/monster/cerberus.qc +++ b/qcsrc/common/monsters/monster/cerberus.qc @@ -2,7 +2,7 @@ REGISTER_MONSTER( /* MON_##id */ CERBERUS, /* function */ m_cerberus, -/* spawnflags */ MON_FLAG_MELEE, +/* spawnflags */ MON_FLAG_MELEE | MON_FLAG_MUTATORBLOCKED, /* mins,maxs */ '-16 -16 -24', '16 16 12', /* model */ "dog.dpm", /* netname */ "cerberus", diff --git a/qcsrc/common/monsters/monster/knight.qc b/qcsrc/common/monsters/monster/knight.qc index d4c743fca..1189d93de 100644 --- a/qcsrc/common/monsters/monster/knight.qc +++ b/qcsrc/common/monsters/monster/knight.qc @@ -2,7 +2,7 @@ REGISTER_MONSTER( /* MON_##id */ KNIGHT, /* function */ m_knight, -/* spawnflags */ MONSTER_SIZE_BROKEN | MON_FLAG_MELEE | MON_FLAG_RANGED, +/* spawnflags */ MONSTER_SIZE_BROKEN | MON_FLAG_MELEE | MON_FLAG_RANGED | MON_FLAG_MUTATORBLOCKED, /* mins,maxs */ '-20 -20 -32', '20 20 41', /* model */ "hknight.mdl", /* netname */ "knight", diff --git a/qcsrc/common/monsters/monster/slime.qc b/qcsrc/common/monsters/monster/slime.qc index cebaf340a..d5f2bd9d0 100644 --- a/qcsrc/common/monsters/monster/slime.qc +++ b/qcsrc/common/monsters/monster/slime.qc @@ -2,7 +2,7 @@ REGISTER_MONSTER( /* MON_##id */ SLIME, /* function */ m_slime, -/* spawnflags */ 0, +/* spawnflags */ MON_FLAG_MUTATORBLOCKED, /* mins,maxs */ '-16 -16 -24', '16 16 16', /* model */ "slime.dpm", /* netname */ "slime", diff --git a/qcsrc/common/monsters/monster/stingray.qc b/qcsrc/common/monsters/monster/stingray.qc index a4c80122c..e6b47aa44 100644 --- a/qcsrc/common/monsters/monster/stingray.qc +++ b/qcsrc/common/monsters/monster/stingray.qc @@ -2,7 +2,7 @@ REGISTER_MONSTER( /* MON_##id */ STINGRAY, /* function */ m_stingray, -/* spawnflags */ MONSTER_TYPE_SWIM | MONSTER_SIZE_BROKEN | MON_FLAG_MELEE, +/* spawnflags */ MONSTER_TYPE_SWIM | MONSTER_SIZE_BROKEN | MON_FLAG_MELEE | MON_FLAG_MUTATORBLOCKED, /* mins,maxs */ '-20 -20 -31', '20 20 20', /* model */ "fish.mdl", /* netname */ "stingray", diff --git a/qcsrc/common/monsters/monsters.qh b/qcsrc/common/monsters/monsters.qh index e9a942b45..0245d4401 100644 --- a/qcsrc/common/monsters/monsters.qh +++ b/qcsrc/common/monsters/monsters.qh @@ -16,6 +16,7 @@ const float MONSTER_SIZE_BROKEN = 128; // TODO: remove when bad models are repla const float MON_FLAG_SUPERMONSTER = 256; // incredibly powerful monster const float MON_FLAG_RANGED = 512; // monster shoots projectiles const float MON_FLAG_MELEE = 1024; +const float MON_FLAG_MUTATORBLOCKED = 2048; // entity properties of monsterinfo: .float monsterid; // MON_... diff --git a/qcsrc/common/monsters/spawn.qc b/qcsrc/common/monsters/spawn.qc index e8dfdd58f..ebe8ba8e0 100644 --- a/qcsrc/common/monsters/spawn.qc +++ b/qcsrc/common/monsters/spawn.qc @@ -1,4 +1,4 @@ -entity spawnmonster (string monster, float mnster, entity spawnedby, entity own, vector orig, float respwn, float moveflag) +entity spawnmonster (string monster, float monster_id, entity spawnedby, entity own, vector orig, float respwn, float moveflag) { // ensure spawnfunc database is initialized initialize_field_db(); @@ -30,24 +30,24 @@ entity spawnmonster (string monster, float mnster, entity spawnedby, entity own, } if(monster == "") - if(mnster) - monster = (get_monsterinfo(mnster)).netname; + if(monster_id) + monster = (get_monsterinfo(monster_id)).netname; e.realowner = spawnedby; if(moveflag) e.monster_moveflags = moveflag; + + if(e.team || !IS_PLAYER(spawnedby)) + e.colormap = 1024; + else + e.colormap = spawnedby.colormap; if(IS_PLAYER(spawnedby)) { if(teamplay && autocvar_g_monsters_teams) e.team = spawnedby.team; // colors handled in spawn code - if(e.team) - e.colormap = 1024; - else - e.colormap = spawnedby.colormap; - if(autocvar_g_monsters_owners) e.monster_owner = own; // using .owner makes the monster non-solid for its master diff --git a/qcsrc/common/monsters/spawn.qh b/qcsrc/common/monsters/spawn.qh index 7d8410368..d3d3fcb34 100644 --- a/qcsrc/common/monsters/spawn.qh +++ b/qcsrc/common/monsters/spawn.qh @@ -1 +1 @@ -entity spawnmonster (string monster, float mnster, entity spawnedby, entity own, vector orig, float respwn, float moveflag); +entity spawnmonster (string monster, float monster_id, entity spawnedby, entity own, vector orig, float respwn, float moveflag); diff --git a/qcsrc/common/monsters/sv_monsters.qc b/qcsrc/common/monsters/sv_monsters.qc index 12f9acb4f..bf56a6245 100644 --- a/qcsrc/common/monsters/sv_monsters.qc +++ b/qcsrc/common/monsters/sv_monsters.qc @@ -703,6 +703,24 @@ void monster_move(float runspeed, float walkspeed, float stopspeed, float manim_ monster_checkattack(self, self.enemy); } +void monster_remove(entity mon) +{ + if not(mon) + return; // nothing to remove + + pointparticles(particleeffectnum("item_pickup"), mon.origin, '0 0 0', 1); + + if(mon.weaponentity) + remove(mon.weaponentity); + + if(mon.iceblock) + remove(mon.iceblock); + + WaypointSprite_Kill(mon.sprite); + + remove(mon); +} + void monster_dead_think() { self.nextthink = time + self.ticrate; @@ -961,6 +979,12 @@ float monster_initialize(float mon_id, float nodrop) return FALSE; entity mon = get_monsterinfo(mon_id); + + if(mon.spawnflags & MON_FLAG_MUTATORBLOCKED) + { + dprint("Attempted to spawn a mutator-blocked monster rejected"); + return FALSE; + } // support for quake style removing monsters based on skill if(monster_skill <= 1) if(self.spawnflags & MONSTERSKILL_NOTEASY) { return FALSE; } diff --git a/qcsrc/common/monsters/sv_monsters.qh b/qcsrc/common/monsters/sv_monsters.qh index 2327887cc..851dacd74 100644 --- a/qcsrc/common/monsters/sv_monsters.qh +++ b/qcsrc/common/monsters/sv_monsters.qh @@ -13,6 +13,8 @@ float monsters_killed; void monsters_setstatus(); // monsters.qc .float monster_moveflags; // checks where to move when not attacking +void monster_remove(entity mon); // removes a monster + .float(float attack_type) monster_attackfunc; const float MONSTER_ATTACK_MELEE = 1; const float MONSTER_ATTACK_RANGED = 2; diff --git a/qcsrc/server/command/sv_cmd.qc b/qcsrc/server/command/sv_cmd.qc index 337138bd0..2791f8bcf 100644 --- a/qcsrc/server/command/sv_cmd.qc +++ b/qcsrc/server/command/sv_cmd.qc @@ -153,15 +153,7 @@ void GameCommand_butcher(float request) FOR_EACH_MONSTER(head) { - if(head.weaponentity) - remove(head.weaponentity); - - if(head.iceblock) - remove(head.iceblock); - - WaypointSprite_Kill(head.sprite); - - remove(head); + monster_remove(head); ++removed_count; } diff --git a/qcsrc/server/mutators/gamemode_invasion.qc b/qcsrc/server/mutators/gamemode_invasion.qc index ca4736375..1f55f776a 100644 --- a/qcsrc/server/mutators/gamemode_invasion.qc +++ b/qcsrc/server/mutators/gamemode_invasion.qc @@ -70,12 +70,7 @@ float Invasion_CheckWinner() if(round_handler_GetEndTime() > 0 && round_handler_GetEndTime() - time <= 0) { FOR_EACH_MONSTER(head) - { - if(head.weaponentity) remove(head.weaponentity); - if(head.iceblock) remove(head.iceblock); - WaypointSprite_Kill(head.sprite); - remove(head); - } + monster_remove(head); if(roundcnt >= maxrounds) { @@ -201,10 +196,7 @@ MUTATOR_HOOKFUNCTION(invasion_MonsterSpawn) { if not(self.spawnflags & MONSTERFLAG_SPAWNED) { - if(self.weaponentity) remove(self.weaponentity); - if(self.iceblock) remove(self.iceblock); - WaypointSprite_Kill(self.sprite); - remove(self); + monster_remove(self); return FALSE; } diff --git a/qcsrc/server/mutators/mutator_new_toys.qc b/qcsrc/server/mutators/mutator_new_toys.qc index 873e1632c..25c89cee5 100644 --- a/qcsrc/server/mutators/mutator_new_toys.qc +++ b/qcsrc/server/mutators/mutator_new_toys.qc @@ -81,16 +81,33 @@ MUTATOR_HOOKFUNCTION(nt_SetModname) float nt_IsNewToy(float w) { - switch(w) + if((get_weaponinfo(w)).weapon) { - case WEP_SEEKER: - case WEP_MINE_LAYER: - case WEP_HLAC: - case WEP_RIFLE: - return TRUE; - default: - return FALSE; + switch(w) + { + case WEP_SEEKER: + case WEP_MINE_LAYER: + case WEP_HLAC: + case WEP_RIFLE: + return TRUE; + } } + else + { + switch(w) + { + case MON_ANIMUS: + case MON_BRUISER: + case MON_BRUTE: + case MON_CERBERUS: + case MON_KNIGHT: + case MON_SLIME: + case MON_STINGRAY: + return TRUE; + } + } + + return FALSE; } string nt_GetFullReplacement(string w) @@ -207,6 +224,10 @@ MUTATOR_DEFINITION(mutator_new_toys) for(i = WEP_FIRST; i <= WEP_LAST; ++i) if(nt_IsNewToy(i)) get_weaponinfo(i).spawnflags &= ~WEP_FLAG_MUTATORBLOCKED; + + for(i = MON_FIRST; i <= MON_LAST; ++i) + if(nt_IsNewToy(i)) + get_monsterinfo(i).spawnflags &= ~MON_FLAG_MUTATORBLOCKED; } MUTATOR_ONROLLBACK_OR_REMOVE @@ -215,6 +236,10 @@ MUTATOR_DEFINITION(mutator_new_toys) for(i = WEP_FIRST; i <= WEP_LAST; ++i) if(nt_IsNewToy(i)) get_weaponinfo(i).spawnflags |= WEP_FLAG_MUTATORBLOCKED; + + for(i = MON_FIRST; i <= MON_LAST; ++i) + if(nt_IsNewToy(i)) + get_monsterinfo(i).spawnflags |= MON_FLAG_MUTATORBLOCKED; } MUTATOR_ONREMOVE -- 2.39.2