]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/commitdiff
More generator fixes
authorMario <mario.mario@y7mail.com>
Wed, 17 Apr 2013 06:44:32 +0000 (16:44 +1000)
committerMario <mario.mario@y7mail.com>
Wed, 17 Apr 2013 06:44:32 +0000 (16:44 +1000)
qcsrc/client/Main.qc
qcsrc/server/generator.qc
qcsrc/server/generator.qh
qcsrc/server/mutators/gamemode_onslaught.qc

index 72c22553b0fc34d33b912039cc124c460e28086a..2a782cb391a101d0e54ab10cd39b9a7464ffbab5 100644 (file)
@@ -173,6 +173,7 @@ void CSQC_Init(void)
        }
 
        Monsters_Precache();
+       generator_precache();
        Projectile_Precache();
        Hook_Precache();
        GibSplash_Precache();
index dd7ab19c519b50c1fdb957391c4ed514be0fcacc..aaac33a5fe86afb8db91d99a675d332f8aaf3930 100644 (file)
@@ -4,15 +4,48 @@ void generator_precache()
        precache_model("models/onslaught/generator.md3");
        precache_model("models/onslaught/generator_dead.md3");
        precache_sound("onslaught/generator_underattack.wav");
+       
+       precache_model("models/onslaught/generator_dmg1.md3");
+       precache_model("models/onslaught/generator_dmg2.md3");
+       precache_model("models/onslaught/generator_dmg3.md3");
+       precache_model("models/onslaught/generator_dmg4.md3");
+       precache_model("models/onslaught/generator_dmg5.md3");
+       precache_model("models/onslaught/generator_dmg6.md3");
+       precache_model("models/onslaught/generator_dmg7.md3");
+       precache_model("models/onslaught/generator_dmg8.md3");
+       precache_model("models/onslaught/generator_dmg9.md3");
+       precache_model("models/onslaught/generator_dead.md3");
 }
 
-void generator_die()
+void generator_draw() { } // TODO
+
+.float max_health;
+void generator_damage(float hp)
 {
-       setmodel(self, "models/onslaught/generator_dead.md3");
+       if(hp <= 0)
+               setmodel(self, "models/onslaught/generator_dead.md3");
+       else if(hp < self.max_health * 0.10)
+               setmodel(self, "models/onslaught/generator_dmg9.md3");
+       else if(hp < self.max_health * 0.20)
+               setmodel(self, "models/onslaught/generator_dmg8.md3");
+       else if(hp < self.max_health * 0.30)
+               setmodel(self, "models/onslaught/generator_dmg7.md3");
+       else if(hp < self.max_health * 0.40)
+               setmodel(self, "models/onslaught/generator_dmg6.md3");
+       else if(hp < self.max_health * 0.50)
+               setmodel(self, "models/onslaught/generator_dmg5.md3");
+       else if(hp < self.max_health * 0.60)
+               setmodel(self, "models/onslaught/generator_dmg4.md3");
+       else if(hp < self.max_health * 0.70)
+               setmodel(self, "models/onslaught/generator_dmg3.md3");
+       else if(hp < self.max_health * 0.80)
+               setmodel(self, "models/onslaught/generator_dmg2.md3");
+       else if(hp < self.max_health * 0.90)
+               setmodel(self, "models/onslaught/generator_dmg1.md3");
+               
+       setsize(self, GENERATOR_MIN, GENERATOR_MAX);
 }
 
-void generator_draw() { } // TODO
-
 void generator_construct()
 {      
        self.netname = "Generator";
@@ -22,7 +55,6 @@ void generator_construct()
        setsize(self, GENERATOR_MIN, GENERATOR_MAX);
        
        self.move_movetype      = MOVETYPE_NOCLIP;
-       self.health                     = 255;
        self.solid                      = SOLID_BBOX;
        self.movetype           = MOVETYPE_NOCLIP; 
        self.move_origin        = self.origin;
@@ -79,6 +111,9 @@ void ent_generator()
                self.origin_z = ReadCoord();
                setorigin(self, self.origin);
                
+               self.health = ReadByte();
+               self.max_health = ReadByte();
+               
                generator_precache();
                generator_construct();
                self.colormap = 1024;
@@ -97,8 +132,11 @@ void ent_generator()
                
                _tmp = ReadByte();
                
-               if(_tmp == 0 && self.health != 0)
-                       generator_die();
+               if(_tmp != self.health)
+                       generator_damage(_tmp);
+               
+               //if(_tmp == 0 && self.health != 0)
+                       //generator_die();
 
                self.health = _tmp;
        }
@@ -115,6 +153,9 @@ float generator_send(entity to, float sf)
            WriteCoord(MSG_ENTITY, self.origin_x);
            WriteCoord(MSG_ENTITY, self.origin_y);
            WriteCoord(MSG_ENTITY, self.origin_z);
+               
+               WriteByte(MSG_ENTITY, self.health);
+               WriteByte(MSG_ENTITY, self.max_health);
     }
     
     if(sf & GSF_STATUS)
index cd1737189bfed7b12a9293b4ec0c3d887f5ec413..439a3427852832060f7b78874e7deef6c28d7d8d 100644 (file)
@@ -1,9 +1,10 @@
-#define GENERATOR_MIN '-52 -52 -14'
-#define GENERATOR_MAX '52 52 75'
+const vector GENERATOR_MIN = '-52 -52 -14';
+const vector GENERATOR_MAX = '52 52 75';
 
 float GSF_STATUS = 4;
 float GSF_SETUP = 8;
 
 #ifdef CSQC
 void ent_generator();
+void generator_precache();
 #endif
\ No newline at end of file
index 24131b6821531026cc0a4dad9783ba87f2d3c4e1..8373ab49a01d521dfa9129e1e5b69c32b42d72ab 100644 (file)
@@ -659,7 +659,7 @@ void onslaught_generator_damage(entity inflictor, entity attacker, float damage,
                setmodel(self, "models/onslaught/generator_dmg2.md3");
        else if(self.health < self.max_health * 0.90)
                setmodel(self, "models/onslaught/generator_dmg1.md3");
-       setsize(self, '-52 -52 -14', '52 52 75');
+       setsize(self, GENERATOR_MIN, GENERATOR_MAX);
 
        // Throw some flaming gibs on damage, more damage = more chance for gib
        if(random() < damage/220)