From 928eb2f9f9793c2a4073761ab5c8d06f225de8b8 Mon Sep 17 00:00:00 2001 From: Mario Date: Fri, 8 Mar 2013 02:50:40 +1100 Subject: [PATCH] Improve monster weapon dropping --- qcsrc/server/monsters/lib/monsters.qc | 9 ++++--- qcsrc/server/monsters/monster/enforcer.qc | 31 ++++++++++++----------- qcsrc/server/monsters/monster/hknight.qc | 2 +- qcsrc/server/monsters/monster/ogre.qc | 3 +-- qcsrc/server/monsters/monster/shambler.qc | 4 +-- qcsrc/server/monsters/monster/soldier.qc | 12 --------- 6 files changed, 25 insertions(+), 36 deletions(-) diff --git a/qcsrc/server/monsters/lib/monsters.qc b/qcsrc/server/monsters/lib/monsters.qc index 7e0578849..22a3efec5 100644 --- a/qcsrc/server/monsters/lib/monsters.qc +++ b/qcsrc/server/monsters/lib/monsters.qc @@ -655,9 +655,6 @@ void monsters_damage (entity inflictor, entity attacker, float damage, float dea if(deathtype == DEATH_KILL) self.candrop = FALSE; // killed by mobkill command - - if(self.flags & MONSTERFLAG_MINIBOSS && self.candrop) - W_ThrowNewWeapon(self, WEP_NEX, 0, self.origin, self.velocity); activator = attacker; other = self.enemy; @@ -684,6 +681,12 @@ void monster_hook_death() if(!(self.spawnflags & MONSTERFLAG_SPAWNED) && !self.monster_respawned) monsters_killed += 1; + if(self.candrop && self.weapon) + W_ThrowNewWeapon(self, self.weapon, 0, self.origin, randomvec() * 150 + '0 0 325'); + + if(self.flags & MONSTERFLAG_MINIBOSS && self.candrop && !self.weapon) + W_ThrowNewWeapon(self, WEP_NEX, 0, self.origin, randomvec() * 150 + '0 0 325'); + if(self.realowner.classname == "monster_spawner") self.realowner.spawner_monstercount -= 1; diff --git a/qcsrc/server/monsters/monster/enforcer.qc b/qcsrc/server/monsters/monster/enforcer.qc index 3bd02bd14..0449aeaa2 100644 --- a/qcsrc/server/monsters/monster/enforcer.qc +++ b/qcsrc/server/monsters/monster/enforcer.qc @@ -119,20 +119,6 @@ void enforcer_die () remove(self.weaponentity); self.weaponentity = world; - - if(self.candrop) - { - if (self.attack_ranged == enf_missile_rocket) - W_ThrowNewWeapon(self, WEP_ROCKET_LAUNCHER, 0, self.origin, self.velocity); - else if (self.attack_ranged == enf_missile_plasma) - W_ThrowNewWeapon(self, WEP_ELECTRO, 0, self.origin, self.velocity); - else if (self.attack_ranged == enf_missile_shotgun) - W_ThrowNewWeapon(self, WEP_SHOTGUN, 0, self.origin, self.velocity); - else if (self.attack_ranged == enf_missile_uzi) - W_ThrowNewWeapon(self, WEP_UZI, 0, self.origin, self.velocity); - else - W_ThrowNewWeapon(self, WEP_LASER, 0, self.origin, self.velocity); - } self.frame = enforcer_anim_stop; @@ -163,15 +149,30 @@ void enforcer_spawn () local float r = random(); if (r < 0.20) + { self.attack_ranged = enf_missile_rocket; + self.weapon = WEP_ROCKET_LAUNCHER; + } else if (r < 0.40) + { self.attack_ranged = enf_missile_plasma; + self.weapon = WEP_ELECTRO; + } else if (r < 0.60) - self.attack_ranged = enf_missile_shotgun; + { + self.attack_ranged = enf_missile_shotgun; + self.weapon = WEP_SHOTGUN; + } else if (r < 0.80) + { self.attack_ranged = enf_missile_uzi; + self.weapon = WEP_UZI; + } else + { self.attack_ranged = enf_missile_laser; + self.weapon = WEP_LASER; + } monster_hook_spawn(); // for post-spawn mods } diff --git a/qcsrc/server/monsters/monster/hknight.qc b/qcsrc/server/monsters/monster/hknight.qc index 059878a82..359049506 100644 --- a/qcsrc/server/monsters/monster/hknight.qc +++ b/qcsrc/server/monsters/monster/hknight.qc @@ -409,7 +409,7 @@ void hellknight_die () if(self.candrop) { self.superweapons_finished = time + autocvar_g_balance_superweapons_time + 5; // give the player a few seconds to find the weapon - W_ThrowNewWeapon(self, WEP_FIREBALL, 0, self.origin, self.velocity); + self.weapon = WEP_FIREBALL; } if (random() > 0.5) diff --git a/qcsrc/server/monsters/monster/ogre.qc b/qcsrc/server/monsters/monster/ogre.qc index 2d08a4c0d..868a15d51 100644 --- a/qcsrc/server/monsters/monster/ogre.qc +++ b/qcsrc/server/monsters/monster/ogre.qc @@ -133,8 +133,6 @@ void ogre_die() self.movetype = MOVETYPE_TOSS; self.think = Monster_Fade; - if(self.candrop) - W_ThrowNewWeapon(self, WEP_GRENADE_LAUNCHER, 0, self.origin, self.velocity); if (random() < 0.5) self.frame = ogre_anim_death1; else @@ -157,6 +155,7 @@ void ogre_spawn () self.nextthink = time + 1; self.think = ogre_think; self.sprite_height = 40 * self.scale; + self.weapon = WEP_GRENADE_LAUNCHER; monster_hook_spawn(); // for post-spawn mods } diff --git a/qcsrc/server/monsters/monster/shambler.qc b/qcsrc/server/monsters/monster/shambler.qc index 681750c5b..7125e48af 100644 --- a/qcsrc/server/monsters/monster/shambler.qc +++ b/qcsrc/server/monsters/monster/shambler.qc @@ -138,9 +138,6 @@ void shambler_die () { Monster_CheckDropCvars ("shambler"); - if(self.candrop) - W_ThrowNewWeapon(self, WEP_NEX, 0, self.origin, self.velocity); - self.think = Monster_Fade; self.solid = SOLID_NOT; self.takedamage = DAMAGE_NO; @@ -167,6 +164,7 @@ void shambler_spawn () self.frame = shambler_anim_stand; self.think = shambler_think; self.sprite_height = 70 * self.scale; + self.weapon = WEP_NEX; monster_hook_spawn(); // for post-spawn mods } diff --git a/qcsrc/server/monsters/monster/soldier.qc b/qcsrc/server/monsters/monster/soldier.qc index 98ba477c3..474706759 100644 --- a/qcsrc/server/monsters/monster/soldier.qc +++ b/qcsrc/server/monsters/monster/soldier.qc @@ -253,18 +253,6 @@ void soldier_die() self.think = Monster_Fade; self.nextthink = time + 2.1; self.weaponentity = world; - - if(self.candrop) - { - if (self.attack_ranged == soldier_missile_uzi) - W_ThrowNewWeapon(self, WEP_UZI, 0, self.origin, self.velocity); - else if (self.attack_ranged == soldier_missile_shotgun) - W_ThrowNewWeapon(self, WEP_SHOTGUN, 0, self.origin, self.velocity); - else if (self.attack_ranged == soldier_missile_rl) - W_ThrowNewWeapon(self, WEP_ROCKET_LAUNCHER, 0, self.origin, self.velocity); - else - W_ThrowNewWeapon(self, WEP_LASER, 0, self.origin, self.velocity); - } if (random() < 0.5) self.frame = soldier_anim_die1; -- 2.39.2