]> git.rm.cloudns.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
Clean up monster weapons a little
authorMario <mario.mario@y7mail.com>
Wed, 10 Apr 2013 23:18:43 +0000 (09:18 +1000)
committerMario <mario.mario@y7mail.com>
Wed, 10 Apr 2013 23:18:43 +0000 (09:18 +1000)
qcsrc/server/monsters/lib/monsters.qc
qcsrc/server/monsters/monster/enforcer.qc
qcsrc/server/monsters/monster/soldier.qc

index 0ef8712586c9d5dfd065638dc48bd633bec7d1db..c72b197241de5d7161197f07aaa333d9f34b1383 100644 (file)
@@ -44,11 +44,10 @@ void Monster_DropItem (string itype, string itemsize)
        else
        {
                dprint("Invalid monster drop item selected.\n");
-               self = oldself;
-               return;
        }
        
        self.gravity = 1;
+       self.noalign = TRUE;
        setorigin(self, backuporigin);
        
        self.velocity = randomvec() * 175 + '0 0 325';
@@ -110,14 +109,12 @@ float monster_isvalidtarget (entity targ, entity ent)
 entity FindTarget (entity ent) 
 {
        if(MUTATOR_CALLHOOK(MonsterFindTarget)) { return ent.enemy; } // Handled by a mutator
-       local entity e;
+       entity e;
+       
        for(e = world; (e = findflags(e, monster_attack, TRUE)); ) 
-       {
-               if(monster_isvalidtarget(e, ent))
-               {
-                       return e;
-               }
-       }
+       if(monster_isvalidtarget(e, ent))
+               return e;
+
        return world;
 }
 
@@ -140,19 +137,19 @@ void monster_sound(string msound, float sound_delay, float delaytoo)
        if(msound == "")
                return; // sound doesn't exist
 
-       sound(self, CH_PAIN_SINGLE, msound, VOL_BASE, ATTN_NORM);
+       sound(self, CHAN_AUTO, msound, VOL_BASE, ATTN_NORM);
 
        self.msound_delay = time + sound_delay;
 }
 
-void monster_precachesounds()
+void monster_precachesounds(entity e)
 {
-       precache_sound(self.msound_idle);
-       precache_sound(self.msound_death);
-       precache_sound(self.msound_attack_melee);
-       precache_sound(self.msound_attack_ranged);
-       precache_sound(self.msound_sight);
-       precache_sound(self.msound_pain);
+       precache_sound(e.msound_idle);
+       precache_sound(e.msound_death);
+       precache_sound(e.msound_attack_melee);
+       precache_sound(e.msound_attack_ranged);
+       precache_sound(e.msound_sight);
+       precache_sound(e.msound_pain);
 }
 
 void monster_melee (entity targ, float damg, float er, float deathtype)
@@ -217,6 +214,7 @@ void Monster_CheckMinibossFlag ()
                self.health += autocvar_g_monsters_miniboss_healthboost;
                ScaleMonster(1.5);
                self.flags |= MONSTERFLAG_MINIBOSS;
+               self.weapon = WEP_NEX;
                
                if (r < 2 || self.team == NUM_TEAM_2)
                {
@@ -596,7 +594,9 @@ void monsters_damage (entity inflictor, entity attacker, float damage, float dea
        if((ignore_turrets && !(attacker.turrcaps_flags & TFL_TURRCAPS_ISTURRET)) || !ignore_turrets)
        if(monster_isvalidtarget(attacker, self))
                self.enemy = attacker;
-       
+               
+       damage *= self.armorvalue;
+               
        self.health -= damage;
        
        if(self.sprite)
@@ -649,6 +649,12 @@ void monster_hook_death()
        if(self.sprite)
         WaypointSprite_Kill(self.sprite);
                
+       if(self.weaponentity)
+       {
+               remove(self.weaponentity);
+               self.weaponentity = world;
+       }
+               
        monster_sound(self.msound_death, 0, FALSE);
                
        if(!(self.spawnflags & MONSTERFLAG_SPAWNED) && !self.monster_respawned)
@@ -657,9 +663,6 @@ void monster_hook_death()
        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;
                
@@ -677,7 +680,7 @@ void monster_hook_spawn()
        self.max_health = self.health;
        self.pain_finished = self.nextthink;
 
-       monster_precachesounds();
+       monster_precachesounds(self);
        
        if(teamplay && self.team)
        {
@@ -793,6 +796,9 @@ float monster_initialize(string  net_name,
        self.pos2                               = self.angles;
        self.candrop                    = TRUE;
        
+       if not(self.armorvalue)
+               self.armorvalue = 1;
+       
        if not(self.target_range)
                self.target_range = autocvar_g_monsters_target_range;
        
index 432010b6c40b7850a8b0be0fdf58804916b63853..d52fdd0467079dec142c01b701a466cdaa5db164 100644 (file)
@@ -116,11 +116,7 @@ void enforcer_die ()
        self.event_damage   = func_null;
        self.enemy                      = world;
        self.nextthink          = time + 2.1;
-       
-       remove(self.weaponentity);
-       self.weaponentity = world;
-               
-       self.frame = enforcer_anim_stop;
+       self.frame                      = enforcer_anim_stop;
                
        monster_hook_death(); // for post-death mods
 }
index 89d56ba89b36b94ff096d7d9f1f9a8fc6a6ed81a..480410f611a96f82217b4b4fdcb9079ed62178e3 100644 (file)
@@ -243,8 +243,6 @@ void soldier_die()
 {
        Monster_CheckDropCvars ("soldier");
        
-       remove(self.weaponentity);
-       
        self.solid                      = SOLID_NOT;
        self.takedamage         = DAMAGE_NO;
        self.event_damage   = func_null;
@@ -252,7 +250,6 @@ void soldier_die()
        self.movetype           = MOVETYPE_TOSS;
        self.think                      = Monster_Fade;
        self.nextthink          = time + 2.1;
-       self.weaponentity       = world;
 
        if (random() < 0.5)
                self.frame = soldier_anim_die1;
@@ -295,27 +292,27 @@ void soldier_spawn ()
        {
                self.weapon = WEP_ROCKET_LAUNCHER;
                self.currentammo = self.ammo_rockets;
-               self.armorvalue = 10;
+               self.armorvalue = 0.9;
                self.attack_ranged = soldier_missile_rl;
        }
        else if (RandomSelection_chosen_float == WEP_UZI)
        {
                self.weapon = WEP_UZI;
                self.currentammo = self.ammo_nails;
-               self.armorvalue = 100;
+               self.armorvalue = 0.5;
                self.attack_ranged = soldier_missile_uzi;
        }
        else if (RandomSelection_chosen_float == WEP_SHOTGUN)
        {
                self.weapon = WEP_SHOTGUN;
                self.currentammo = self.ammo_shells;
-               self.armorvalue = 25;
+               self.armorvalue = 0.7;
                self.attack_ranged = soldier_missile_shotgun;
        }
        else
        {
                self.weapon = WEP_LASER;
-               self.armorvalue = 60;
+               self.armorvalue = 0.6;
                self.currentammo = self.ammo_none;
                self.attack_ranged = soldier_missile_laser;
        }