From 3cce6543c675327132d69b0f06995dc9c14292aa Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 17 Apr 2013 16:44:32 +1000 Subject: [PATCH] More generator fixes --- qcsrc/client/Main.qc | 1 + qcsrc/server/generator.qc | 55 ++++++++++++++++++--- qcsrc/server/generator.qh | 5 +- qcsrc/server/mutators/gamemode_onslaught.qc | 2 +- 4 files changed, 53 insertions(+), 10 deletions(-) diff --git a/qcsrc/client/Main.qc b/qcsrc/client/Main.qc index 72c22553b..2a782cb39 100644 --- a/qcsrc/client/Main.qc +++ b/qcsrc/client/Main.qc @@ -173,6 +173,7 @@ void CSQC_Init(void) } Monsters_Precache(); + generator_precache(); Projectile_Precache(); Hook_Precache(); GibSplash_Precache(); diff --git a/qcsrc/server/generator.qc b/qcsrc/server/generator.qc index dd7ab19c5..aaac33a5f 100644 --- a/qcsrc/server/generator.qc +++ b/qcsrc/server/generator.qc @@ -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) diff --git a/qcsrc/server/generator.qh b/qcsrc/server/generator.qh index cd1737189..439a34278 100644 --- a/qcsrc/server/generator.qh +++ b/qcsrc/server/generator.qh @@ -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 diff --git a/qcsrc/server/mutators/gamemode_onslaught.qc b/qcsrc/server/mutators/gamemode_onslaught.qc index 24131b682..8373ab49a 100644 --- a/qcsrc/server/mutators/gamemode_onslaught.qc +++ b/qcsrc/server/mutators/gamemode_onslaught.qc @@ -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) -- 2.39.2