]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Improve monster weapon dropping
authorMario <mario.mario@y7mail.com>
Thu, 7 Mar 2013 15:50:40 +0000 (02:50 +1100)
committerMario <mario.mario@y7mail.com>
Thu, 7 Mar 2013 15:50:40 +0000 (02:50 +1100)
qcsrc/server/monsters/lib/monsters.qc
qcsrc/server/monsters/monster/enforcer.qc
qcsrc/server/monsters/monster/hknight.qc
qcsrc/server/monsters/monster/ogre.qc
qcsrc/server/monsters/monster/shambler.qc
qcsrc/server/monsters/monster/soldier.qc

index 7e05788494ac3020372f0bb9f1c586516b398b37..22a3efec52c4c14fd2624b294a60fc0555b3e8fc 100644 (file)
@@ -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;
                
index 3bd02bd146efe691d36cd28c60cab6775faadd84..0449aeaa2c46e11238ea7a2bad238b1757c8225b 100644 (file)
@@ -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
 }
index 059878a82f4006246aa00aa89c750227bd701ce9..359049506ce01639082f2b51e7d5c7503ef884a6 100644 (file)
@@ -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)
index 2d08a4c0ddb257d26aaf4281dd9a3a70d177d8a3..868a15d51a22a030a5495eb1fe794bba6e1fa776 100644 (file)
@@ -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
 }
index 681750c5b0671c582c8351931a171efe8cc7d656..7125e48af543c2dac5a116651fe55f1a9d75b874 100644 (file)
@@ -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
 }
index 98ba477c3be3f3ac7f94c35b79dfc8daa5a69ea1..47470675979db7fa1332c1829f3eabfba39fe32d 100644 (file)
@@ -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;