]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/client/monsters.qc
Don't align monster with ground
[xonotic/xonotic-data.pk3dir.git] / qcsrc / client / monsters.qc
index 80f1b991a5e8b1409f90fee048e21fceac50975a..c3eef3c1666970e58083edd2c99de72128ac96d5 100644 (file)
@@ -19,14 +19,14 @@ void monster_precache(float _mid)
                        precache_model(ZOMBIE_MODEL);
                        break;
                }
-               case MONSTER_OGRE:
+               case MONSTER_BRUTE:
                {
-                       precache_model(OGRE_MODEL);
+                       precache_model(BRUTE_MODEL);
                        break;
                }
-               case MONSTER_DEMON:
+               case MONSTER_ANIMUS:
                {
-                       precache_model(DEMON_MODEL);
+                       precache_model(ANIMUS_MODEL);
                        break;
                }
                case MONSTER_SHAMBLER:
@@ -34,56 +34,40 @@ void monster_precache(float _mid)
                        precache_model(SHAMBLER_MODEL);
                        break;
                }
-               case MONSTER_KNIGHT:
-               {
-                       precache_model(KNIGHT_MODEL);
-                       break;
-               }
-               case MONSTER_MARINE:
+               case MONSTER_BRUISER:
                {
-                       precache_model(SOLDIER_MODEL);
-                       precache_sound("weapons/shotgun_fire.wav");
-                       precache_sound("weapons/uzi_fire.wav");
-                       precache_sound("weapons/laser_fire.wav");
-                       precache_sound("weapons/reload.wav");
-                       precache_model("models/weapons/v_seeker.md3");
+                       precache_model(BRUISER_MODEL);
                        break;
                }
-               case MONSTER_SCRAG:
+               case MONSTER_WYVERN:
                {
-                       precache_model(WIZARD_MODEL);
+                       precache_model(WYVERN_MODEL);
                        break;
                }
-               case MONSTER_DOG:
+               case MONSTER_CERBERUS:
                {
-                       precache_model(DOG_MODEL);
+                       precache_model(CERBERUS_MODEL);
                        break;
                }
-               case MONSTER_TARBABY:
+               case MONSTER_SLIME:
                {
-                       precache_model(TARBABY_MODEL);
+                       precache_model(SLIME_MODEL);
                        precache_sound("weapons/rocket_impact.wav");
                        break;
                }
-               case MONSTER_HELLKNIGHT:
+               case MONSTER_KNIGHT:
                {
-                       precache_model(HELLKNIGHT_MODEL);
+                       precache_model(KNIGHT_MODEL);
                        break;
                }
-               case MONSTER_FISH:
+               case MONSTER_STINGRAY:
                {
-                       precache_model(FISH_MODEL);
+                       precache_model(STINGRAY_MODEL);
                        break;
                }
                case MONSTER_MAGE:
                {
-                       precache_model(SHALRATH_MODEL);
-                       break;
-               }
-               case MONSTER_ENFORCER:
-               {
-                       precache_model(ENFORCER_MODEL);
-                       precache_model("models/turrets/ewheel-gun1.md3");
+                       precache_model(MAGE_MODEL);
                        break;
                }
                case MONSTER_SPIDER:
@@ -92,14 +76,15 @@ void monster_precache(float _mid)
 
                        break;
                }
-    }    
+    }
+       
     monster_precached[_mid] = TRUE;
 }
 
 void Monsters_Precache()
 {
        float i;
-       for(i = MONSTER_FIRST; i <= MONSTER_LAST; ++i)
+       for(i = MONSTER_FIRST + 1; i < MONSTER_LAST; ++i)
                monster_precache(i);
 }
 
@@ -115,20 +100,21 @@ void monster_mid2info(float _mid)
                        mid2info_max = ZOMBIE_MAX;
                        break;
                }
-               case MONSTER_OGRE:
+               case MONSTER_BRUTE:
                {
-                       mid2info_model = OGRE_MODEL;
-                       mid2info_name = "Ogre";
-                       mid2info_min = OGRE_MIN;
-                       mid2info_max = OGRE_MAX;
+                       mid2info_model = BRUTE_MODEL;
+                       mid2info_name = "Brute";
+                       mid2info_min = BRUTE_MIN;
+                       mid2info_max = BRUTE_MAX;
                        break;
                }
-               case MONSTER_DEMON:
+               case MONSTER_ANIMUS:
                {
-                       mid2info_model = DEMON_MODEL;
-                       mid2info_name = "Fiend";
-                       mid2info_min = DEMON_MIN;
-                       mid2info_max = DEMON_MAX;
+                       mid2info_model = ANIMUS_MODEL;
+                       mid2info_name = "Animus";
+                       mid2info_min = ANIMUS_MIN;
+                       mid2info_max = ANIMUS_MAX;
+                       if(self) self.scale = 1.3;
                        break;
                }
                case MONSTER_SHAMBLER:
@@ -137,78 +123,67 @@ void monster_mid2info(float _mid)
                        mid2info_name = "Shambler";
                        mid2info_min = SHAMBLER_MIN;
                        mid2info_max = SHAMBLER_MAX;
+                       if(self) self.scale = 1.3;
                        break;
                }
-               case MONSTER_KNIGHT:
-               {
-                       mid2info_model = KNIGHT_MODEL;
-                       mid2info_name = "Knight";
-                       mid2info_min = KNIGHT_MIN;
-                       mid2info_max = KNIGHT_MAX;
-                       break;
-               }
-               case MONSTER_MARINE:
+               case MONSTER_BRUISER:
                {
-                       mid2info_model = SOLDIER_MODEL;
-                       mid2info_name = "Marine";
-                       mid2info_min = SOLDIER_MIN;
-                       mid2info_max = SOLDIER_MAX;
+                       mid2info_model = BRUISER_MODEL;
+                       mid2info_name = "Bruiser";
+                       mid2info_min = BRUISER_MIN;
+                       mid2info_max = BRUISER_MAX;
+                       if(self) self.scale = 1.3;
                        break;
                }
-               case MONSTER_SCRAG:
+               case MONSTER_WYVERN:
                {
-                       mid2info_model = WIZARD_MODEL;
-                       mid2info_name = "Scrag";
-                       mid2info_min = WIZARD_MIN;
-                       mid2info_max = WIZARD_MAX;
+                       mid2info_model = WYVERN_MODEL;
+                       mid2info_name = "Wyvern";
+                       mid2info_min = WYVERN_MIN;
+                       mid2info_max = WYVERN_MAX;
+                       if(self) self.scale = 1.3;
                        break;
                }
-               case MONSTER_DOG:
+               case MONSTER_CERBERUS:
                {
-                       mid2info_model = DOG_MODEL;
+                       mid2info_model = CERBERUS_MODEL;
                        mid2info_name = "Cerberus";
-                       mid2info_min = DOG_MIN;
-                       mid2info_max = DOG_MAX;
+                       mid2info_min = CERBERUS_MIN;
+                       mid2info_max = CERBERUS_MAX;
                        break;
                }
-               case MONSTER_TARBABY:
+               case MONSTER_SLIME:
                {
-                       mid2info_model = TARBABY_MODEL;
-                       mid2info_name = "Spawn";
-                       mid2info_min = TARBABY_MIN;
-                       mid2info_max = TARBABY_MAX;
+                       mid2info_model = SLIME_MODEL;
+                       mid2info_name = "Slime";
+                       mid2info_min = SLIME_MIN;
+                       mid2info_max = SLIME_MAX;
                        break;
                }
-               case MONSTER_HELLKNIGHT:
+               case MONSTER_KNIGHT:
                {
-                       mid2info_model = HELLKNIGHT_MODEL;
-                       mid2info_name = "Hell-Knight";
-                       mid2info_min = HELLKNIGHT_MIN;
-                       mid2info_max = HELLKNIGHT_MAX;
+                       mid2info_model = KNIGHT_MODEL;
+                       mid2info_name = "Knight";
+                       mid2info_min = KNIGHT_MIN;
+                       mid2info_max = KNIGHT_MAX;
+                       if(self) self.scale = 1.3;
                        break;
                }
-               case MONSTER_FISH:
+               case MONSTER_STINGRAY:
                {
-                       mid2info_model = FISH_MODEL;
-                       mid2info_name = "Rotfish";
-                       mid2info_min = FISH_MIN;
-                       mid2info_max = FISH_MAX;
+                       mid2info_model = STINGRAY_MODEL;
+                       mid2info_name = "Stingray";
+                       mid2info_min = STINGRAY_MIN;
+                       mid2info_max = STINGRAY_MAX;
+                       if(self) self.scale = 1.3;
                        break;
                }
                case MONSTER_MAGE:
                {
-                       mid2info_model = SHALRATH_MODEL;
+                       mid2info_model = MAGE_MODEL;
                        mid2info_name = "Mage";
-                       mid2info_min = SHALRATH_MIN;
-                       mid2info_max = SHALRATH_MAX;
-                       break;
-               }
-               case MONSTER_ENFORCER:
-               {
-                       mid2info_model = ENFORCER_MODEL;
-                       mid2info_name = "Enforcer";
-                       mid2info_min = ENFORCER_MIN;
-                       mid2info_max = ENFORCER_MAX;
+                       mid2info_min = MAGE_MIN;
+                       mid2info_max = MAGE_MAX;
                        break;
                }
                case MONSTER_SPIDER:
@@ -229,52 +204,37 @@ void monster_mid2info(float _mid)
 
 .vector glowmod;
 void monster_changeteam()
-{      
-       switch(self.team - 1)
-       {
-               case NUM_TEAM_1: // Red
-               {
-                       self.glowmod = '2 0 0';
-                       self.teamradar_color = '1 0 0';
-                       break;
-               }
-               case NUM_TEAM_2: // Blue
-               {
-                       self.glowmod = '0 0 2';
-                       self.teamradar_color = '0 0 1';
-                       break;
-               }
-               case NUM_TEAM_3: // Yellow
-               {
-                       self.glowmod = '1 1 0';
-                       self.teamradar_color = '1 1 0';
-                       break;
-               }
-               case NUM_TEAM_4: // Pink
-               {
-                       self.glowmod = '1 0 1';
-                       self.teamradar_color = '1 0 1';
-                       break;
-               }
-       }
+{
+       self.glowmod = Team_ColorRGB(self.team - 1);
+       self.teamradar_color = Team_ColorRGB(self.team - 1);
        
        if(self.team)
                self.colormap = 1024 + (self.team - 1) * 17;
+       else
+               self.colormap = 1024;
+}
+
+void monster_die()
+{
+       if(self.monsterid == MONSTER_SPIDER)
+               self.angles += '180 0 0';
+               
+       self.solid = SOLID_CORPSE;
 }
 
 void monster_draw()
 {        
-    float dt;
+       float dt;
             
-    dt = time - self.move_time;
-    self.move_time = time;
-    if(dt <= 0)
-        return;
+       dt = time - self.move_time;
+       self.move_time = time;
+       if(dt <= 0)
+               return;
     
-    fixedmakevectors(self.angles);
-    movelib_groundalign4point(300, 100, 0.25, 45);
-    setorigin(self, self.origin + self.velocity * dt);
-    self.angles_y = self.move_angles_y;  
+       fixedmakevectors(self.angles);
+       //movelib_groundalign4point(50, 25, 0.25, 45);
+       setorigin(self, self.origin + self.velocity * dt);
+       self.angles_y = self.move_angles_y;
 }
 
 void monster_construct()
@@ -303,7 +263,7 @@ void ent_monster()
        sf = ReadByte();
 
        if(sf & MSF_SETUP)
-       {               
+       {
                self.monsterid = ReadByte();
                                
                self.origin_x = ReadCoord();
@@ -314,27 +274,12 @@ void ent_monster()
                self.angles_x = ReadAngle();
                self.angles_y = ReadAngle();
                
-               self.scale = ReadByte();
                self.skin = ReadByte();
+               self.team = ReadByte();
                
                monster_precache(self.monsterid);
                monster_construct();
-               self.colormap = 1024;
-               self.glowmod = '0 1 1'; 
-       }
-       
-       if(sf & MSF_SIZE)
-       {
-               self.scale = ReadByte();
-               self.mins_x = ReadCoord();
-               self.mins_y = ReadCoord();
-               self.mins_z = ReadCoord();
-               
-               self.maxs_x = ReadCoord();
-               self.maxs_y = ReadCoord();
-               self.maxs_z = ReadCoord();
-
-               setsize(self, self.mins, self.maxs);
+               monster_changeteam();
        }
        
        if(sf & MSF_ANG)
@@ -361,7 +306,7 @@ void ent_monster()
                self.move_velocity = self.velocity;
                self.move_origin   = self.origin;
        }
-               
+       
        if(sf & MSF_ANIM)
        {
                self.frame1time = ReadCoord();
@@ -380,11 +325,14 @@ void ent_monster()
                        monster_changeteam();
                }
                
+               _tmp = ReadByte();
+               if(_tmp == 4) // respawning
+                       setmodel(self, "null");
+               
                _tmp = ReadByte();
                
                if(_tmp == 0 && self.health != 0)
-               if(self.monsterid == MONSTER_SPIDER)
-                       self.angles += '180 0 0';
+                       monster_die();
 
                self.health = _tmp;
        }