From 589ef1076ef3c727adf7ba124d1c6f41faf01721 Mon Sep 17 00:00:00 2001 From: Mario Date: Sun, 13 Oct 2013 06:58:31 +1100 Subject: [PATCH] Colorize monsters based on skill --- qcsrc/common/monsters/sv_monsters.qc | 63 +++++++++++++--------- qcsrc/server/mutators/gamemode_invasion.qc | 2 +- 2 files changed, 39 insertions(+), 26 deletions(-) diff --git a/qcsrc/common/monsters/sv_monsters.qc b/qcsrc/common/monsters/sv_monsters.qc index b46675617..58da71cf3 100644 --- a/qcsrc/common/monsters/sv_monsters.qc +++ b/qcsrc/common/monsters/sv_monsters.qc @@ -43,9 +43,7 @@ void monster_dropitem() float Monster_SkillModifier() { - float t = 1; - - t *= (self.monster_skill * 0.5); + float t = 1.0 * (self.monster_skill * 0.15); return t; } @@ -605,8 +603,8 @@ void monster_move(float runspeed, float walkspeed, float stopspeed, float manim_ } targ = monster_target; - runspeed = monster_speed_run; - walkspeed = monster_speed_walk; + runspeed = bound(0, monster_speed_run * Monster_SkillModifier(), runspeed * 2); // limit maxspeed to prevent craziness + walkspeed = bound(0, monster_speed_walk * Monster_SkillModifier(), walkspeed * 2); // limit maxspeed to prevent craziness if(teamplay) if(autocvar_g_monsters_teams) @@ -925,6 +923,29 @@ void monsters_damage (entity inflictor, entity attacker, float damage, float dea } } +void monster_setupcolors() +{ + if(IS_PLAYER(self.monster_owner)) + self.colormap = self.monster_owner.colormap; + else if(teamplay && self.team) + self.colormap = 1024 + self.team * 17; + else + { + if(self.monster_skill <= MONSTER_SKILL_EASY) + self.colormap = 1029; + else if(self.monster_skill <= MONSTER_SKILL_MEDIUM) + self.colormap = 1027; + else if(self.monster_skill <= MONSTER_SKILL_HARD) + self.colormap = 1038; + else if(self.monster_skill <= MONSTER_SKILL_INSANE) + self.colormap = 1028; + else if(self.monster_skill <= MONSTER_SKILL_NIGHTMARE) + self.colormap = 1032; + else + self.colormap = 1024; + } +} + void monster_think() { self.think = monster_think; @@ -942,12 +963,15 @@ void monster_think() CSQCMODEL_AUTOUPDATE(); } -void monster_spawn() +float monster_spawn() { MON_ACTION(self.monsterid, MR_SETUP); if not(self.monster_respawned) + { Monster_CheckMinibossFlag(); + self.health *= Monster_SkillModifier(); + } self.max_health = self.health; self.pain_finished = self.nextthink; @@ -976,25 +1000,11 @@ void monster_spawn() self.think = monster_think; self.nextthink = time + self.ticrate; - - MUTATOR_CALLHOOK(MonsterSpawn); - // TODO: fix this mess - if(IS_PLAYER(self.monster_owner)) - self.colormap = self.monster_owner.colormap; - else if(teamplay && self.team) - self.colormap = 1024 + self.team * 17; - else - { - if(self.monster_skill <= MONSTER_SKILL_EASY) - self.colormap = 1027; - else if(self.monster_skill <= MONSTER_SKILL_MEDIUM) - self.colormap = 1038; - else if(self.monster_skill <= MONSTER_SKILL_HARD) - self.colormap = 1028; - else - self.colormap = 1024; - } + if(MUTATOR_CALLHOOK(MonsterSpawn)) + return FALSE; + + return TRUE; } float monster_initialize(float mon_id, float nodrop) @@ -1095,7 +1105,10 @@ float monster_initialize(float mon_id, float nodrop) setorigin(self, trace_endpos); } - monster_spawn(); + if not(monster_spawn()) + return FALSE; + + monster_setupcolors(); CSQCMODEL_AUTOINIT(); diff --git a/qcsrc/server/mutators/gamemode_invasion.qc b/qcsrc/server/mutators/gamemode_invasion.qc index 560f05b98..aa6917592 100644 --- a/qcsrc/server/mutators/gamemode_invasion.qc +++ b/qcsrc/server/mutators/gamemode_invasion.qc @@ -166,7 +166,7 @@ void Invasion_RoundStart() roundcnt += 1; - invasion_monsterskill = roundcnt + max(1, numplayers * 0.3); + invasion_monsterskill = roundcnt + (numplayers * 0.3); maxcurrent = 0; numspawned = 0; -- 2.39.2