From d204c4e1fe5f39ee19d8b825656b63f4f350dc9c Mon Sep 17 00:00:00 2001 From: Jakob MG Date: Sat, 9 Apr 2011 07:29:13 +0200 Subject: [PATCH] Begin csqc'ing tturrets --- .../server/tturrets/include/turrets_early.qh | 22 +++- qcsrc/server/tturrets/system/system_damage.qc | 15 ++- qcsrc/server/tturrets/system/system_main.qc | 100 ++++++++++++------ qcsrc/server/tturrets/units/unit_ewheel.qc | 2 +- qcsrc/server/tturrets/units/unit_flac.qc | 2 +- .../tturrets/units/unit_fusionreactor.qc | 2 +- qcsrc/server/tturrets/units/unit_hellion.qc | 2 +- qcsrc/server/tturrets/units/unit_hk.qc | 2 +- .../server/tturrets/units/unit_machinegun.qc | 2 +- qcsrc/server/tturrets/units/unit_mlrs.qc | 2 +- qcsrc/server/tturrets/units/unit_phaser.qc | 2 +- qcsrc/server/tturrets/units/unit_plasma.qc | 4 +- qcsrc/server/tturrets/units/unit_tessla.qc | 2 +- qcsrc/server/tturrets/units/unit_walker.qc | 2 +- 14 files changed, 114 insertions(+), 47 deletions(-) diff --git a/qcsrc/server/tturrets/include/turrets_early.qh b/qcsrc/server/tturrets/include/turrets_early.qh index 8cdd0f509..14173b4c8 100644 --- a/qcsrc/server/tturrets/include/turrets_early.qh +++ b/qcsrc/server/tturrets/include/turrets_early.qh @@ -2,8 +2,8 @@ #define TTURRETS_ENABLED #ifdef TTURRETS_ENABLED - -#message "with tZork turrets" +#ifdef SVQC +//#message "with tZork turrets" float turret_count; @@ -464,8 +464,22 @@ void turret_do_updates(entity e_turret); .vector tur_shotdir_updated; void turrets_precash(); - - +#endif // SVQC + +.float turret_type; +float TID_EWHEEL = 1; +float TID_FLAC = 2; +float TID_FUSION = 3; +float TID_HELLION = 4; +float TID_HK = 5; +float TID_MACHINEGUN = 6; +float TID_MLRS = 7; +float TID_PHASER = 8; +float TID_PLASMA = 9; +float TID_PLASMA_DUAL = 10; +float TID_TESLA = 11; +float TID_WALKER = 12; +float TID_LAST = 12; #endif // TTURRETS_ENABLED diff --git a/qcsrc/server/tturrets/system/system_damage.qc b/qcsrc/server/tturrets/system/system_damage.qc index c7f25a446..4c8b1c2c8 100644 --- a/qcsrc/server/tturrets/system/system_damage.qc +++ b/qcsrc/server/tturrets/system/system_damage.qc @@ -248,7 +248,15 @@ void turret_stdproc_respawn() self.ammo = self.ammo_max; self.nextthink = time + self.ticrate; - self.think = turret_think; + + if(self.SendEntity) + { + self.SendFlags = TNSF_FULL_UPDATE; + self.think = turret_link; // CSQC? + } + + else + self.think = turret_think; // Or not? if (self.turret_respawnhook) self.turret_respawnhook(); @@ -304,4 +312,9 @@ void turret_stdproc_damage (entity inflictor, entity attacker, float damage, flo self.nextthink = time; self.think = turret_stdproc_die; } + + // CSQC + if(self.SendEntity) + self.SendFlags = TNSF_STATUS; + } diff --git a/qcsrc/server/tturrets/system/system_main.qc b/qcsrc/server/tturrets/system/system_main.qc index 7d023e99e..e65d3897e 100644 --- a/qcsrc/server/tturrets/system/system_main.qc +++ b/qcsrc/server/tturrets/system/system_main.qc @@ -1,23 +1,48 @@ #define cvar_base "g_turrets_unit_" -/* -float turret_customizeentityforclient() -{ -} +float TNSF_UPDATE = 2; +float TNSF_STATUS = 4; +float TNSF_SETUP = 8; -float Turret_SendEntity(entity to, float sf) -{ +float TNSF_ANG1 = 16; +float TNSF_AVEL1 = 32; +float TNSF_ANG2 = 64; +float TNSF_AVEL2 = 128; +float TNSF_FULL_UPDATE = 16777215; +float turret_send(entity to, float sf) +{ WriteByte(MSG_ENTITY, ENT_CLIENT_TURRET); - WriteCoord(MSG_ENTITY, self.tur_head.angles_x); - WriteCoord(MSG_ENTITY, self.tur_head.angles_y); - WriteByte(MSG_ENTITY, self.tur_head.frame); - - //WriteCoord(MSG_ENTITY, self.tur_head.angles_z); - + + WriteByte(MSG_ENTITY, sf); + if(sf & TNSF_SETUP) + { + WriteByte(MSG_ENTITY, self.turret_type); + + WriteCoord(MSG_ENTITY, self.origin_x); + WriteCoord(MSG_ENTITY, self.origin_y); + WriteCoord(MSG_ENTITY, self.origin_z); + + WriteAngle(MSG_ENTITY, self.angles_x); + WriteAngle(MSG_ENTITY, self.angles_y); + } + + if(sf & TNSF_UPDATE) + { + WriteAngle(MSG_ENTITY, self.tur_head.angles_x); + WriteAngle(MSG_ENTITY, self.tur_head.angles_y); + WriteAngle(MSG_ENTITY, self.tur_head.avelocity_x); + WriteAngle(MSG_ENTITY, self.tur_head.avelocity_y); + } + + if(sf & TNSF_STATUS) + { + WriteByte(MSG_ENTITY, self.team); + WriteByte(MSG_ENTITY, rint((self.health / self.tur_health) * 255)); + } + return TRUE; } -*/ void load_unit_settings(entity ent, string unitname, float is_reload) { @@ -116,8 +141,6 @@ void turret_do_updates(entity t_turret) self.tur_dist_impact_to_aimpos = 0; else self.tur_dist_impact_to_aimpos = vlen(trace_endpos - self.tur_aimpos); - - } else tracebox(self.tur_shotorg, '-1 -1 -1','1 1 1', self.tur_shotorg + (self.tur_shotdir_updated * self.tur_dist_aimpos),MOVE_NORMAL,self); @@ -204,7 +227,10 @@ void turret_stdproc_track() vector target_angle; // This is where we want to aim vector move_angle; // This is where we can aim float f_tmp; - + vector v1, v2; + v1 = self.tur_head.angles; + v2 = self.tur_head.avelocity; + if (self.track_flags == TFL_TRACK_NO) return; @@ -252,7 +278,10 @@ void turret_stdproc_track() if(self.tur_head.angles_y < -self.aim_maxrot) self.tur_head.angles_y = self.aim_maxrot; } - + + // CSQC + if(self.SendEntity) + self.SendFlags = TNSF_STATUS; return; case TFL_TRACKTYPE_FLUIDINERTIA: @@ -830,7 +859,7 @@ void turret_stdproc_use() void turret_link() { - //Net_LinkEntity(self, FALSE, 0, Turret_SendEntity); + Net_LinkEntity(self, TRUE, 0, turret_send); self.think = turret_think; self.nextthink = time; } @@ -863,15 +892,21 @@ void turrets_manager_think() * (unless you have a very good reason not to) * if the return value is 0, the turret should be removed. */ -float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base, string head) +float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base, string head, float _turret_type) { entity e, ee; // Are turrets allowed? if (autocvar_g_turrets == 0) return 0; - - + + if(_turret_type < 1 || _turret_type > TID_LAST) + { + dprint("Invalid / Unkown turret type\"", ftos(_turret_type), "\", aborting!\n"); + return 0; + } + self.turret_type = _turret_type; + e = find(world, classname, "turret_manager"); if not (e) { @@ -895,17 +930,20 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base e.nextthink = time + 2; } + /* if(csqc_shared) { dprint("WARNING: turret requested csqc_shared but this is not implemented. Expect strange things to happen.\n"); csqc_shared = 0; } - + */ + if not (self.spawnflags & TSF_SUSPENDED) droptofloor_builtin(); // Terrainbase spawnflag. This puts a enlongated model // under the turret, so it looks ok on uneaven surfaces. + /* TODO: Handle this with CSQC if (self.spawnflags & TSF_TERRAINBASE) { entity tb; @@ -914,9 +952,10 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base setorigin(tb,self.origin); tb.solid = SOLID_BBOX; } + */ self.cvar_basename = cvar_base_name; - load_unit_settings(self,self.cvar_basename, 0); + load_unit_settings(self, self.cvar_basename, 0); // Handle turret teams. if (autocvar_g_assault != 0) @@ -1208,12 +1247,6 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base self.use = turret_stdproc_use; self.bot_attack = TRUE; - // Initiate the main AI loop - if(csqc_shared) - self.think = turret_link; - else - self.think = turret_think; - ++turret_count; self.nextthink = time + 1; self.nextthink += turret_count * sys_frametime; @@ -1244,8 +1277,15 @@ float turret_stdproc_init (string cvar_base_name, float csqc_shared, string base activator = ee; self.use(); } - + turret_stdproc_respawn(); + + // Initiate the main AI loop + if(csqc_shared) + self.think = turret_link; + else + self.think = turret_think; + return 1; } diff --git a/qcsrc/server/tturrets/units/unit_ewheel.qc b/qcsrc/server/tturrets/units/unit_ewheel.qc index 02c0ffa60..df728166f 100644 --- a/qcsrc/server/tturrets/units/unit_ewheel.qc +++ b/qcsrc/server/tturrets/units/unit_ewheel.qc @@ -283,7 +283,7 @@ void turret_ewheel_dinit() self.turret_diehook = ewheel_diehook; - if (turret_stdproc_init("ewheel_std",0,"models/turrets/ewheel-base2.md3","models/turrets/ewheel-gun1.md3") == 0) + if (turret_stdproc_init("ewheel_std", TRUE, "models/turrets/ewheel-base2.md3", "models/turrets/ewheel-gun1.md3", TID_EWHEEL) == 0) { remove(self); return; diff --git a/qcsrc/server/tturrets/units/unit_flac.qc b/qcsrc/server/tturrets/units/unit_flac.qc index 0c874fb50..e05806582 100644 --- a/qcsrc/server/tturrets/units/unit_flac.qc +++ b/qcsrc/server/tturrets/units/unit_flac.qc @@ -89,7 +89,7 @@ void turret_flac_dinit() self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE; self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE; - if (turret_stdproc_init("flac_std",0,"models/turrets/base.md3","models/turrets/flac.md3") == 0) + if (turret_stdproc_init("flac_std", TRUE, "models/turrets/base.md3", "models/turrets/flac.md3", TID_FLAC) == 0) { remove(self); return; diff --git a/qcsrc/server/tturrets/units/unit_fusionreactor.qc b/qcsrc/server/tturrets/units/unit_fusionreactor.qc index 03b0c40ad..968410780 100644 --- a/qcsrc/server/tturrets/units/unit_fusionreactor.qc +++ b/qcsrc/server/tturrets/units/unit_fusionreactor.qc @@ -68,7 +68,7 @@ void turret_fusionreactor_dinit() self.track_flags = TFL_TRACK_NO; // self.turret_respawnhook = turret_fusionreactor_respawnhook; - if (turret_stdproc_init("fusreac_std",0,"models/turrets/base.md3","models/turrets/reactor.md3") == 0) + if (turret_stdproc_init("fusreac_std", TRUE,"models/turrets/base.md3", "models/turrets/reactor.md3", TID_FUSION) == 0) { remove(self); return; diff --git a/qcsrc/server/tturrets/units/unit_hellion.qc b/qcsrc/server/tturrets/units/unit_hellion.qc index 1e2890f6e..ea7eabecb 100644 --- a/qcsrc/server/tturrets/units/unit_hellion.qc +++ b/qcsrc/server/tturrets/units/unit_hellion.qc @@ -188,7 +188,7 @@ void turret_hellion_dinit() self.firecheck_flags = TFL_FIRECHECK_WORLD | TFL_FIRECHECK_DEAD | TFL_FIRECHECK_DISTANCES | TFL_FIRECHECK_TEAMCECK | TFL_FIRECHECK_REFIRE | TFL_FIRECHECK_AFF | TFL_FIRECHECK_OWM_AMMO; self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE; - if (turret_stdproc_init("hellion_std",0,"models/turrets/base.md3","models/turrets/hellion.md3") == 0) + if (turret_stdproc_init("hellion_std", TRUE, "models/turrets/base.md3", "models/turrets/hellion.md3", TID_HELLION) == 0) { remove(self); return; diff --git a/qcsrc/server/tturrets/units/unit_hk.qc b/qcsrc/server/tturrets/units/unit_hk.qc index 2b8e0f6a3..df8b47d75 100644 --- a/qcsrc/server/tturrets/units/unit_hk.qc +++ b/qcsrc/server/tturrets/units/unit_hk.qc @@ -408,7 +408,7 @@ void turret_hk_dinit() self.shoot_flags = TFL_SHOOT_CLEARTARGET; - if (turret_stdproc_init("hk_std",0,"models/turrets/base.md3","models/turrets/hk.md3") == 0) + if (turret_stdproc_init("hk_std", TRUE, "models/turrets/base.md3", "models/turrets/hk.md3", TID_HK) == 0) { remove(self); return; diff --git a/qcsrc/server/tturrets/units/unit_machinegun.qc b/qcsrc/server/tturrets/units/unit_machinegun.qc index f6426fce2..6b3a3f915 100644 --- a/qcsrc/server/tturrets/units/unit_machinegun.qc +++ b/qcsrc/server/tturrets/units/unit_machinegun.qc @@ -28,7 +28,7 @@ void turret_machinegun_std_init() if not (autocvar_g_antilag_bullets) self.turrcaps_flags |= TFL_TURRCAPS_HITSCAN; - if (turret_stdproc_init("machinegun_std",0,"models/turrets/base.md3","models/turrets/machinegun.md3") == 0) + if (turret_stdproc_init("machinegun_std", TRUE, "models/turrets/base.md3", "models/turrets/machinegun.md3", TID_MACHINEGUN) == 0) { remove(self); return; diff --git a/qcsrc/server/tturrets/units/unit_mlrs.qc b/qcsrc/server/tturrets/units/unit_mlrs.qc index 499d6de23..667a67e90 100644 --- a/qcsrc/server/tturrets/units/unit_mlrs.qc +++ b/qcsrc/server/tturrets/units/unit_mlrs.qc @@ -101,7 +101,7 @@ void turret_mlrs_dinit() self.ammo_flags = TFL_AMMO_ROCKETS | TFL_AMMO_RECHARGE; self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE;// | TFL_AIM_GROUND2; - if (turret_stdproc_init("mlrs_std",0,"models/turrets/base.md3","models/turrets/mlrs.md3") == 0) + if (turret_stdproc_init("mlrs_std", TRUE, "models/turrets/base.md3", "models/turrets/mlrs.md3", TID_MLRS) == 0) { remove(self); return; diff --git a/qcsrc/server/tturrets/units/unit_phaser.qc b/qcsrc/server/tturrets/units/unit_phaser.qc index 9c5ca071d..ba3c67633 100644 --- a/qcsrc/server/tturrets/units/unit_phaser.qc +++ b/qcsrc/server/tturrets/units/unit_phaser.qc @@ -116,7 +116,7 @@ void turret_phaser_dinit() self.ammo_flags = TFL_AMMO_ENERGY | TFL_AMMO_RECHARGE | TFL_AMMO_RECIVE; self.aim_flags = TFL_AIM_LEAD; - if (turret_stdproc_init("phaser_std",0,"models/turrets/base.md3","models/turrets/phaser.md3") == 0) + if (turret_stdproc_init("phaser_std", TRUE, "models/turrets/base.md3","models/turrets/phaser.md3", TID_PHASER) == 0) { remove(self); return; diff --git a/qcsrc/server/tturrets/units/unit_plasma.qc b/qcsrc/server/tturrets/units/unit_plasma.qc index 63466084a..a19ccfe4e 100644 --- a/qcsrc/server/tturrets/units/unit_plasma.qc +++ b/qcsrc/server/tturrets/units/unit_plasma.qc @@ -124,7 +124,7 @@ void turret_plasma_std_init() self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_GROUND2; self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL | TFL_TURRCAPS_MISSILEKILL; - if (turret_stdproc_init("plasma_std",FALSE,"models/turrets/base.md3","models/turrets/plasma.md3") == 0) + if (turret_stdproc_init("plasma_std", TRUE, "models/turrets/base.md3", "models/turrets/plasma.md3", TID_PLASMA) == 0) { remove(self); return; @@ -156,7 +156,7 @@ void turret_plasma_dual_init() self.aim_flags = TFL_AIM_LEAD | TFL_AIM_SHOTTIMECOMPENSATE | TFL_AIM_GROUND2 ; self.turrcaps_flags = TFL_TURRCAPS_RADIUSDMG | TFL_TURRCAPS_MEDPROJ | TFL_TURRCAPS_PLAYERKILL; - if (turret_stdproc_init("plasma_dual",0,"models/turrets/base.md3","models/turrets/plasmad.md3") == 0) + if (turret_stdproc_init("plasma_dual", TRUE, "models/turrets/base.md3", "models/turrets/plasmad.md3", TID_PLASMA_DUAL) == 0) { remove(self); return; diff --git a/qcsrc/server/tturrets/units/unit_tessla.qc b/qcsrc/server/tturrets/units/unit_tessla.qc index 443cd8b56..d05fb47c6 100644 --- a/qcsrc/server/tturrets/units/unit_tessla.qc +++ b/qcsrc/server/tturrets/units/unit_tessla.qc @@ -145,7 +145,7 @@ void turret_tesla_dinit() self.aim_flags = TFL_AIM_NO; self.track_flags = TFL_TRACK_NO; - if (turret_stdproc_init("tesla_std",0,"models/turrets/tesla_base.md3","models/turrets/tesla_head.md3") == 0) + if (turret_stdproc_init("tesla_std", TRUE, "models/turrets/tesla_base.md3", "models/turrets/tesla_head.md3", TID_TESLA) == 0) { remove(self); return; diff --git a/qcsrc/server/tturrets/units/unit_walker.qc b/qcsrc/server/tturrets/units/unit_walker.qc index d1d48c46c..72d117f4e 100644 --- a/qcsrc/server/tturrets/units/unit_walker.qc +++ b/qcsrc/server/tturrets/units/unit_walker.qc @@ -704,7 +704,7 @@ void turret_walker_dinit() self.turret_diehook = walker_diehook; self.ticrate = 0.05; - if (turret_stdproc_init("walker_std",FALSE,"models/turrets/walker_body.md3","models/turrets/walker_head_minigun.md3") == 0) + if (turret_stdproc_init("walker_std", TRUE, "models/turrets/walker_body.md3", "models/turrets/walker_head_minigun.md3", TID_WALKER) == 0) { remove(self); return; -- 2.39.2