From da570c60f96cdc1f1f70a682414eb73c1b051117 Mon Sep 17 00:00:00 2001 From: Mario Date: Thu, 29 Aug 2013 18:22:00 +1000 Subject: [PATCH] Add a special flag for powerful monsters --- qcsrc/common/monsters/monster/shambler.qc | 2 +- qcsrc/common/monsters/monsters.qh | 1 + qcsrc/server/mutators/gamemode_invasion.qc | 16 ++++++++-------- 3 files changed, 10 insertions(+), 9 deletions(-) diff --git a/qcsrc/common/monsters/monster/shambler.qc b/qcsrc/common/monsters/monster/shambler.qc index 387c98f00..b29e8e3ef 100644 --- a/qcsrc/common/monsters/monster/shambler.qc +++ b/qcsrc/common/monsters/monster/shambler.qc @@ -2,7 +2,7 @@ REGISTER_MONSTER( /* MON_##id */ SHAMBLER, /* function */ m_shambler, -/* spawnflags */ MONSTER_SIZE_BROKEN, +/* spawnflags */ MONSTER_SIZE_BROKEN | MON_FLAG_SUPERMONSTER, /* mins,maxs */ '-41 -41 -31', '41 41 65', /* model */ "shambler.mdl", /* netname */ "shambler", diff --git a/qcsrc/common/monsters/monsters.qh b/qcsrc/common/monsters/monsters.qh index e5750baed..ae994ae1b 100644 --- a/qcsrc/common/monsters/monsters.qh +++ b/qcsrc/common/monsters/monsters.qh @@ -13,6 +13,7 @@ const float MONSTER_RESPAWN_DEATHPOINT = 128; // re-spawn where we died const float MONSTER_TYPE_FLY = 256; const float MONSTER_TYPE_SWIM = 512; const float MONSTER_SIZE_BROKEN = 1024; // TODO: remove when bad models are replaced +const float MON_FLAG_SUPERMONSTER = 2048; // incredibly powerful monster // entity properties of monsterinfo: .float monsterid; // MON_... diff --git a/qcsrc/server/mutators/gamemode_invasion.qc b/qcsrc/server/mutators/gamemode_invasion.qc index af5b5e707..90d18d4fc 100644 --- a/qcsrc/server/mutators/gamemode_invasion.qc +++ b/qcsrc/server/mutators/gamemode_invasion.qc @@ -5,7 +5,7 @@ void invasion_spawnpoint() self.classname = "invasion_spawnpoint"; } -float invasion_PickMonster(float have_shamblers) +float invasion_PickMonster(float supermonster_count) { if(autocvar_g_invasion_zombies_only) return MON_ZOMBIE; @@ -18,7 +18,7 @@ float invasion_PickMonster(float have_shamblers) for(i = MON_FIRST; i <= MON_LAST; ++i) { mon = get_monsterinfo(i); - if((mon.spawnflags & MONSTER_TYPE_FLY) || (mon.spawnflags & MONSTER_TYPE_SWIM) || (i == MON_SHAMBLER && have_shamblers >= 1)) + if((mon.spawnflags & MONSTER_TYPE_FLY) || (mon.spawnflags & MONSTER_TYPE_SWIM) || (mon.spawnflags & MON_FLAG_SUPERMONSTER && supermonster_count >= 1)) continue; // flying/swimming monsters not yet supported RandomSelection_Add(world, i, "", 1, 1); @@ -54,9 +54,9 @@ void invasion_SpawnChosenMonster(float mon) monster = spawnmonster("", mon, spawn_point, spawn_point, spawn_point.origin, FALSE, 2); } -void invasion_SpawnMonsters(float have_shamblers) +void invasion_SpawnMonsters(float supermonster_count) { - float chosen_monster = invasion_PickMonster(have_shamblers); + float chosen_monster = invasion_PickMonster(supermonster_count); invasion_SpawnChosenMonster(chosen_monster); } @@ -86,12 +86,12 @@ float Invasion_CheckWinner() return 1; } - float total_alive_monsters = 0, shamblers = 0; + float total_alive_monsters = 0, supermonster_count = 0; FOR_EACH_MONSTER(head) if(head.health > 0) { - if(head.monsterid == MON_SHAMBLER) - ++shamblers; + if((get_monsterinfo(head.monsterid)).spawnflags & MON_FLAG_SUPERMONSTER) + ++supermonster_count; ++total_alive_monsters; } @@ -99,7 +99,7 @@ float Invasion_CheckWinner() { if(time >= last_check) { - invasion_SpawnMonsters(shamblers); + invasion_SpawnMonsters(supermonster_count); last_check = time + 2; } -- 2.39.2