From 5c92c2d05dfe64bf29108dbf21ca5dce1cf26af6 Mon Sep 17 00:00:00 2001 From: Jakob MG Date: Tue, 14 Jun 2011 02:03:44 +0200 Subject: [PATCH] crude but sorta working support for csqc walker & ewheel --- qcsrc/client/tturrets.qc | 70 ++++++++++++++++++- .../server/tturrets/include/turrets_early.qh | 4 +- qcsrc/server/tturrets/system/system_damage.qc | 2 +- qcsrc/server/tturrets/system/system_main.qc | 23 +++++- qcsrc/server/tturrets/units/unit_ewheel.qc | 8 ++- qcsrc/server/tturrets/units/unit_walker.qc | 5 +- 6 files changed, 103 insertions(+), 9 deletions(-) diff --git a/qcsrc/client/tturrets.qc b/qcsrc/client/tturrets.qc index 17bd12c7b..ffbae2a56 100644 --- a/qcsrc/client/tturrets.qc +++ b/qcsrc/client/tturrets.qc @@ -80,6 +80,34 @@ void turret_draw() self.drawmask = MASK_NORMAL; } +void turret_moving_head_draw() +{ + self.drawmask = MASK_NORMAL; +} + +void turret_moving_draw() +{ + float dt; + + dt = time - self.move_time; + self.move_time = time; + if(dt <= 0) + return; + + setorigin(self, self.origin + self.velocity * dt); + if(self.turret_type == TID_WALKER) + setorigin(self.tur_head, gettaginfo(self, gettagindex(self, "tag_head"))); + else + setorigin(self.tur_head, self.origin); + 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); + + self.drawmask = MASK_NORMAL; +} + string tid2info_base; string tid2info_head; vector tid2info_min; @@ -172,6 +200,19 @@ void turret_construct() self.draw = turret_draw; self.tur_head.draw = turret_head_draw; self.entremove = turret_remove; + + if(self.turret_type == TID_EWHEEL || self.turret_type == TID_WALKER) + { + self.gravity = 1; + self.move_movetype = MOVETYPE_BOUNCE; + self.move_origin = self.origin; + self.move_time = time; + + self.movetype = MOVETYPE_NOCLIP; + self.tur_head.movetype = MOVETYPE_NOCLIP; + self.draw = turret_moving_draw; + self.tur_head.draw = turret_moving_head_draw; + } } entity turret_gibtoss(string _model, vector _from, vector _to, vector _cmod, float _explode); @@ -180,6 +221,7 @@ void turret_gibboom(); void turret_gib_draw() { Movetype_Physics_MatchTicrate(autocvar_cl_gibs_ticrate, autocvar_cl_gibs_sloppy); + self.drawmask = MASK_NORMAL; if(self.cnt) @@ -308,6 +350,31 @@ void ent_turret() self.tur_head.move_avelocity_y = ReadShort(); } + if(sf & TNSF_AVEL) + { + //WriteShort(MSG_ENTITY, rint(self.tur_head.avelocity_x)); + //WriteShort(MSG_ENTITY, rint(self.tur_head.avelocity_y)); + } + + if(sf & TNSF_MOVE) + { + self.origin_x = ReadShort(); + self.origin_y = ReadShort(); + self.origin_z = ReadShort(); + setorigin(self, self.origin); + + self.velocity_x = ReadShort(); + self.velocity_y = ReadShort(); + self.velocity_z = ReadShort(); + + self.angles_y = ReadShort(); + + self.move_time = time; + self.move_velocity = self.velocity; + self.move_origin = self.origin; + } + + if(sf & TNSF_STATUS) { float _team; @@ -321,6 +388,7 @@ void ent_turret() } } - if(sf == TNSF_DIE) + //if(sf == TNSF_DIE) + if(self.health == 0) turret_die(); } diff --git a/qcsrc/server/tturrets/include/turrets_early.qh b/qcsrc/server/tturrets/include/turrets_early.qh index 45a487c16..eeccd73d2 100644 --- a/qcsrc/server/tturrets/include/turrets_early.qh +++ b/qcsrc/server/tturrets/include/turrets_early.qh @@ -474,8 +474,8 @@ float TNSF_STATUS = 4; float TNSF_SETUP = 8; float TNSF_ANG = 16; float TNSF_AVEL = 32; -float TNSF_DIE = 64; -float TNSF_FIRE = 128; +float TNSF_MOVE = 64; +float TNSF_ANIM = 128; float TNSF_FULL_UPDATE = 16777215; diff --git a/qcsrc/server/tturrets/system/system_damage.qc b/qcsrc/server/tturrets/system/system_damage.qc index 10a1b9a59..7459db357 100644 --- a/qcsrc/server/tturrets/system/system_damage.qc +++ b/qcsrc/server/tturrets/system/system_damage.qc @@ -64,7 +64,7 @@ void turret_stdproc_die() else { // Setup respawn - self.SendFlags = TNSF_DIE; + self.SendFlags |= TNSF_STATUS; self.nextthink = time + 0.2; self.think = turret_hide; diff --git a/qcsrc/server/tturrets/system/system_main.qc b/qcsrc/server/tturrets/system/system_main.qc index fb79f5442..8d4867fdf 100644 --- a/qcsrc/server/tturrets/system/system_main.qc +++ b/qcsrc/server/tturrets/system/system_main.qc @@ -29,10 +29,31 @@ float turret_send(entity to, float sf) WriteShort(MSG_ENTITY, rint(self.tur_head.avelocity_y)); } + if(sf & TNSF_MOVE) + { + WriteShort(MSG_ENTITY, rint(self.origin_x)); + WriteShort(MSG_ENTITY, rint(self.origin_y)); + WriteShort(MSG_ENTITY, rint(self.origin_z)); + + WriteShort(MSG_ENTITY, rint(self.velocity_x)); + WriteShort(MSG_ENTITY, rint(self.velocity_y)); + WriteShort(MSG_ENTITY, rint(self.velocity_z)); + + WriteShort(MSG_ENTITY, rint(self.angles_y)); + } + + if(sf & TNSF_ANIM) + { + + } + if(sf & TNSF_STATUS) { WriteByte(MSG_ENTITY, self.team); - WriteByte(MSG_ENTITY, rint((self.health / self.tur_health) * 255)); // Send health as 0-255 insted of real value, where 255 = 100% + if(self.health <= 0) + WriteByte(MSG_ENTITY, 0); + else + WriteByte(MSG_ENTITY, rint((self.health / self.tur_health) * 255)); // Send health as 0-255 insted of real value, where 255 = 100% } return TRUE; diff --git a/qcsrc/server/tturrets/units/unit_ewheel.qc b/qcsrc/server/tturrets/units/unit_ewheel.qc index cd062aa5f..8a493668e 100644 --- a/qcsrc/server/tturrets/units/unit_ewheel.qc +++ b/qcsrc/server/tturrets/units/unit_ewheel.qc @@ -210,6 +210,9 @@ void ewheel_postthink() self.velocity_z = vz; + + if(vlen(self.velocity)) + self.SendFlags |= TNSF_MOVE; } void ewheel_respawnhook() @@ -290,9 +293,8 @@ void turret_ewheel_dinit() } self.target_select_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS; - self.target_select_flags = TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS; - self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;// | TFL_TARGETSELECT_LOS; - self.target_validate_flags = TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK;// | TFL_TARGETSELECT_LOS; + self.target_validate_flags = TFL_TARGETSELECT_PLAYERS | TFL_TARGETSELECT_RANGELIMTS | TFL_TARGETSELECT_TEAMCHECK | TFL_TARGETSELECT_LOS; + self.damage_flags |= TFL_DMG_DEATH_NOGIBS; self.iscreature = TRUE; diff --git a/qcsrc/server/tturrets/units/unit_walker.qc b/qcsrc/server/tturrets/units/unit_walker.qc index d5bedc5cd..ea61cf987 100644 --- a/qcsrc/server/tturrets/units/unit_walker.qc +++ b/qcsrc/server/tturrets/units/unit_walker.qc @@ -609,8 +609,11 @@ void walker_postthink() walker_move_enemy(); } - walker_animate(); + + //if(vlen(self.velocity)) + self.SendFlags |= TNSF_MOVE; + } void walker_attack() -- 2.39.2