X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fclient%2Ftturrets.qc;h=caca8ca04aab2de27e222b9b0a8486fddfc1af3e;hb=9f98772df6aa640fb11b47c608a41edf10962026;hp=b83db07c77914baccd455a7144ef3012e6c1a2ed;hpb=add5162c2c034ff0e9eda824d3bf2b82e627be6c;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/client/tturrets.qc b/qcsrc/client/tturrets.qc index b83db07c7..caca8ca04 100644 --- a/qcsrc/client/tturrets.qc +++ b/qcsrc/client/tturrets.qc @@ -4,30 +4,89 @@ string tid2info_name; vector tid2info_min; vector tid2info_max; +void turret_tid2info(float _tid); +void turret_precache(float _tid); +float turret_is_precache[TID_LAST]; + void turrets_precache() { - precache_model ("models/turrets/ewheel-base2.md3"); - precache_model ("models/turrets/ewheel-gun1.md3"); - precache_model ("models/turrets/base.md3"); - precache_model ("models/turrets/flac.md3"); - precache_model ("models/turrets/reactor.md3"); - precache_model ("models/turrets/hellion.md3"); - precache_model ("models/turrets/hk.md3"); - precache_model ("models/turrets/machinegun.md3"); - precache_model ("models/turrets/mlrs.md3"); - precache_model ("models/turrets/phaser.md3"); - precache_model ("models/turrets/phaser_beam.md3"); - precache_model ("models/turrets/plasma.md3"); - precache_model ("models/turrets/plasmad.md3"); - precache_model ("models/turrets/tesla_head.md3"); - precache_model ("models/turrets/tesla_base.md3"); - precache_model ("models/turrets/walker_head_minigun.md3"); - precache_model ("models/turrets/walker_body.md3"); - precache_model ("models/turrets/rocket.md3"); - - precache_sound ("turrets/phaser.wav"); - precache_sound ("weapons/rocket_impact.wav"); - precache_sound ("weapons/uzi_fire.wav"); + turret_precache(TID_COMMON); +} + +void turret_precache(float _tid) +{ + if (!turret_is_precache[TID_COMMON]) + { + dprint("turret_precache TID_COMMON\n"); + precache_sound ("weapons/rocket_impact.wav"); + precache_model ("models/turrets/base-gib1.md3"); + precache_model ("models/turrets/base-gib2.md3"); + precache_model ("models/turrets/base-gib3.md3"); + precache_model ("models/turrets/base-gib4.md3"); + precache_model ("models/turrets/head-gib1.md3"); + precache_model ("models/turrets/head-gib2.md3"); + precache_model ("models/turrets/head-gib3.md3"); + precache_model ("models/turrets/head-gib4.md3"); + precache_model ("models/turrets/terrainbase.md3"); + precache_model ("models/turrets/base.md3"); + precache_model ("models/turrets/rocket.md3"); + } + turret_tid2info(_tid); + if(turret_is_precache[_tid]) + { + dprint("turret_precache: ", tid2info_name, " allready precachd, skipping.\n"); + return; + } + else + dprint("turret_precache: ", tid2info_name, " precaching.\n"); + + switch(_tid) + { + case TID_EWHEEL: + precache_model ("models/turrets/ewheel-base2.md3"); + precache_model ("models/turrets/ewheel-gun1.md3"); + break; + case TID_FLAC: + precache_model ("models/turrets/flac.md3"); + break; + case TID_FUSION: + precache_model ("models/turrets/reactor.md3"); + break; + case TID_HELLION: + precache_model ("models/turrets/hellion.md3"); + break; + case TID_HK: + precache_model ("models/turrets/hk.md3"); + break; + case TID_MACHINEGUN: + precache_model ("models/turrets/machinegun.md3"); + precache_sound ("weapons/uzi_fire.wav"); + break; + case TID_MLRS: + precache_model ("models/turrets/mlrs.md3"); + break; + case TID_PHASER: + precache_model ("models/turrets/phaser.md3"); + precache_model ("models/turrets/phaser_beam.md3"); + precache_sound ("turrets/phaser.wav"); + break; + case TID_PLASMA: + precache_model ("models/turrets/plasma.md3"); + break; + case TID_PLASMA_DUAL: + precache_model ("models/turrets/plasmad.md3"); + break; + case TID_TESLA: + precache_model ("models/turrets/tesla_head.md3"); + precache_model ("models/turrets/tesla_base.md3"); + break; + case TID_WALKER: + precache_model ("models/turrets/walker_head_minigun.md3"); + precache_model ("models/turrets/walker_body.md3"); + precache_sound ("weapons/uzi_fire.wav"); + break; + } + turret_is_precache[_tid] = TRUE; } void turret_tid2info(float _tid) @@ -150,11 +209,24 @@ void turret_draw() self.tur_head.angles += dt * self.tur_head.move_avelocity; if (self.health < 127) - if(random() < 0.25) - te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16); + { + dt = random(); + + if(dt < 0.25) + te_spark(self.origin + '0 0 40', randomvec() * 256 + '0 0 256', 16); + + } + + if(self.health < 85) + if(dt < 0.1) + pointparticles(particleeffectnum("smoke_small"), (self.origin + (randomvec() * 80)), '0 0 0', 1); + + if(self.health < 32) + if(dt < 0.1) + pointparticles(particleeffectnum("smoke_large"), (self.origin + (randomvec() * 80)), '0 0 0', 1); + } - void turret_walker_draw() { float dt; @@ -251,8 +323,7 @@ void turret_construct() break; case TID_WALKER: self.draw = turret_walker_draw; - } - + } } } @@ -375,6 +446,7 @@ void ent_turret() self.angles_x = ReadAngle(); self.angles_y = ReadAngle(); + turret_precache(self.turret_type); turret_construct(); } @@ -426,8 +498,9 @@ void ent_turret() self.team = _team; turret_changeteam(); } + + if(self.health == 0) + turret_die(); } - if(self.health == 0) - turret_die(); }