From c6fe078863b2ba763af4b9e37f361e1cde1f7310 Mon Sep 17 00:00:00 2001 From: div0 Date: Thu, 29 Jan 2009 12:12:43 +0000 Subject: [PATCH] make all assignments to SendEntity go through Net_LinkEntity; this makes fteqcc detect some type errors git-svn-id: svn://svn.icculus.org/nexuiz/trunk@5691 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/cl_client.qc | 12 +----- data/qcsrc/server/clientcommands.qc | 4 +- data/qcsrc/server/csqcprojectile.qc | 5 +-- data/qcsrc/server/csqcprojectile.qh | 2 +- data/qcsrc/server/ent_cs.qc | 7 +--- data/qcsrc/server/g_casings.qc | 7 +--- data/qcsrc/server/g_damage.qc | 7 +--- data/qcsrc/server/g_triggers.qc | 42 +++++-------------- data/qcsrc/server/g_violence.qc | 8 +--- data/qcsrc/server/g_world.qc | 6 +-- data/qcsrc/server/miscfunctions.qc | 29 +++++++++++-- data/qcsrc/server/mode_onslaught.qc | 3 +- data/qcsrc/server/scores.qc | 11 ++--- .../server/tturrets/units/unit_hellion.qc | 5 +-- data/qcsrc/server/tturrets/units/unit_hk.qc | 5 +-- data/qcsrc/server/tturrets/units/unit_mlrs.qc | 5 +-- .../server/tturrets/units/unit_walker.qc | 5 +-- data/qcsrc/server/w_common.qc | 10 ++--- data/qcsrc/server/w_crylink.qc | 8 +--- data/qcsrc/server/w_electro.qc | 8 +--- data/qcsrc/server/w_grenadelauncher.qc | 9 ++-- data/qcsrc/server/w_hagar.qc | 10 +---- data/qcsrc/server/w_hlac.qc | 8 +--- data/qcsrc/server/w_hook.qc | 4 +- data/qcsrc/server/w_laser.qc | 4 +- data/qcsrc/server/w_porto.qc | 6 +-- data/qcsrc/server/w_rocketlauncher.qc | 4 +- data/qcsrc/server/w_seeker.qc | 12 ++---- data/qcsrc/server/waypointsprites.qc | 3 +- 29 files changed, 80 insertions(+), 169 deletions(-) diff --git a/data/qcsrc/server/cl_client.qc b/data/qcsrc/server/cl_client.qc index b39e5e630..84a3851d5 100644 --- a/data/qcsrc/server/cl_client.qc +++ b/data/qcsrc/server/cl_client.qc @@ -44,12 +44,9 @@ float ClientData_Send(entity to, float sf) void ClientData_Attach() { - self.clientdata = spawn(); - self.clientdata.SendEntity = ClientData_Send; - self.clientdata.effects = EF_NODEPTHTEST; + Net_LinkEntity(self.clientdata = spawn(), FALSE, 0, ClientData_Send); self.clientdata.drawonlytoclient = self; self.clientdata.owner = self; - setmodel(self.clientdata, "null"); } void ClientData_Detach() @@ -921,12 +918,7 @@ float ClientInit_SendEntity(entity to, float sf) void ClientInit_Spawn() { - entity e; - e = spawn(); - e.classname = "ent_client_init"; - e.SendEntity = ClientInit_SendEntity; - setmodel(e, "null"); - e.effects = EF_NODEPTHTEST; + Net_LinkEntity(spawn(), FALSE, 0, ClientInit_SendEntity); } /* diff --git a/data/qcsrc/server/clientcommands.qc b/data/qcsrc/server/clientcommands.qc index c040eb887..8bb6401e5 100644 --- a/data/qcsrc/server/clientcommands.qc +++ b/data/qcsrc/server/clientcommands.qc @@ -36,9 +36,7 @@ float Nagger_SendEntity(entity to, float sendflags) } void Nagger_Init() { - nagger = spawn(); - Net_LinkEntity(nagger); - nagger.SendEntity = Nagger_SendEntity; + Net_LinkEntity(nagger = spawn(), FALSE, 0, Nagger_SendEntity); } void Nagger_VoteChanged() { diff --git a/data/qcsrc/server/csqcprojectile.qc b/data/qcsrc/server/csqcprojectile.qc index 3564a4803..fb6835a9e 100644 --- a/data/qcsrc/server/csqcprojectile.qc +++ b/data/qcsrc/server/csqcprojectile.qc @@ -31,9 +31,9 @@ float CSQCProjectile_SendEntity(entity to, float sf) return 1; } -void CSQCProjectile(entity e, float clientanimate, float type) +void CSQCProjectile(entity e, float clientanimate, float type, float docull) { - e.SendEntity = CSQCProjectile_SendEntity; + Net_LinkEntity(e, docull, 0, CSQCProjectile_SendEntity); e.csqcprojectile_clientanimate = clientanimate; @@ -46,7 +46,6 @@ void CSQCProjectile(entity e, float clientanimate, float type) e.gravity = 0; e.csqcprojectile_type = type; - e.SendFlags = 0xFFFFFF; } void UpdateCSQCProjectile(entity e) diff --git a/data/qcsrc/server/csqcprojectile.qh b/data/qcsrc/server/csqcprojectile.qh index 81beb36b4..e3a2a222c 100644 --- a/data/qcsrc/server/csqcprojectile.qh +++ b/data/qcsrc/server/csqcprojectile.qh @@ -1,4 +1,4 @@ .float csqcprojectile_clientanimate; -void CSQCProjectile(entity e, float clientanimate, float type); +void CSQCProjectile(entity e, float clientanimate, float type, float docull); void UpdateCSQCProjectile(entity e); diff --git a/data/qcsrc/server/ent_cs.qc b/data/qcsrc/server/ent_cs.qc index 5bf2fee74..e17d2fca5 100644 --- a/data/qcsrc/server/ent_cs.qc +++ b/data/qcsrc/server/ent_cs.qc @@ -36,7 +36,7 @@ float entcs_customize() return TRUE; } -float entcs_send(entity to) +float entcs_send(entity to, float sf) { entity o; o = self.owner; @@ -73,11 +73,8 @@ entity attach_entcs() ent.owner = self; ent.think = entcs_think; ent.nextthink = time; - ent.effects = EF_NODEPTHTEST | EF_LOWPRECISION; - ent.model = "entcs_sender"; - ent.modelindex = 1; - ent.SendEntity = entcs_send; + Net_LinkEntity(ent, FALSE, 0, entcs_send); ent.customizeentityforclient = entcs_customize; self.entcs = ent; diff --git a/data/qcsrc/server/g_casings.qc b/data/qcsrc/server/g_casings.qc index f58bfe651..92beaab3e 100644 --- a/data/qcsrc/server/g_casings.qc +++ b/data/qcsrc/server/g_casings.qc @@ -21,13 +21,8 @@ void SpawnCasing(vector org, vector vel, float randomvel, vector ang, vector ave e.origin = org; e.velocity = vel; e.angles = ang; - e.oldorigin_x = compressShortVector(e.velocity); - setmodel(e, "null"); - e.SendEntity = Casing_SendEntity; - - e.nextthink = time + 0.2; - e.think = SUB_Remove; + Net_LinkEntity(e, TRUE, 0.2, Casing_SendEntity); // 0.2s should be enough time for all clients to receive this ent once, do the gibbage and be done with it } diff --git a/data/qcsrc/server/g_damage.qc b/data/qcsrc/server/g_damage.qc index 839dd2f95..a6723841f 100644 --- a/data/qcsrc/server/g_damage.qc +++ b/data/qcsrc/server/g_damage.qc @@ -25,22 +25,17 @@ void Damage_DamageInfo(vector org, float coredamage, float edgedamage, float rad entity e; e = spawn(); - e.classname = "damageinfo"; setorigin(e, org); - setmodel(e, "null"); - e.think = SUB_Remove; - e.nextthink = time + 0.2; e.projectiledeathtype = deathtype; e.dmg = coredamage; e.dmg_edge = edgedamage; e.dmg_radius = rad; e.dmg_force = vlen(force); e.velocity = force; - e.effects = EF_NODEPTHTEST; // needs to be, sorry e.oldorigin_x = compressShortVector(e.velocity); - e.SendEntity = Damage_DamageInfo_SendEntity; + Net_LinkEntity(e, TRUE, 0.2, Damage_DamageInfo_SendEntity); } #define DAMAGE_CENTERPRINT_SPACER NEWLINES diff --git a/data/qcsrc/server/g_triggers.qc b/data/qcsrc/server/g_triggers.qc index bcaedbefe..687050e8e 100644 --- a/data/qcsrc/server/g_triggers.qc +++ b/data/qcsrc/server/g_triggers.qc @@ -632,19 +632,16 @@ void spawnfunc_func_pointparticles() if(self.noise != "") precache_sound (self.noise); - self.effects = EF_NODEPTHTEST; - self.SendEntity = pointparticles_SendEntity; if(!self.modelindex) { - vector misave, masave; - misave = self.mins; - masave = self.maxs; - setmodel(self, "null"); - setorigin(self, self.origin + misave); - setsize(self, '0 0 0', masave - misave); + setorigin(self, self.origin + self.mins); + setsize(self, '0 0 0', self.maxs - self.mins); } if(!self.cnt) self.cnt = particleeffectnum(self.mdl); + + Net_LinkEntity(self, FALSE, 0, pointparticles_SendEntity); + IFTARGETED { self.use = pointparticles_use; @@ -682,7 +679,7 @@ void spawnfunc_func_sparks() spawnfunc_func_pointparticles(); } -float rainsnow_SendEntity(float to) +float rainsnow_SendEntity(entity to, float sf) { WriteByte(MSG_ENTITY, ENT_CLIENT_RAINSNOW); WriteByte(MSG_ENTITY, self.state); @@ -730,18 +727,9 @@ void spawnfunc_func_rain() self.count = 65535; self.state = 1; // 1 is rain, 0 is snow - self.effects = EF_NODEPTHTEST; - self.SendEntity = rainsnow_SendEntity; self.Version = 1; - if(!self.modelindex) - { - vector misave, masave; - misave = self.mins; - masave = self.maxs; - setmodel(self, "null"); - setsize(self, misave, masave); - } + Net_LinkEntity(self, FALSE, 0, rainsnow_SendEntity); }; @@ -777,18 +765,9 @@ void spawnfunc_func_snow() self.count = 65535; self.state = 0; // 1 is rain, 0 is snow - self.effects = EF_NODEPTHTEST; - self.SendEntity = rainsnow_SendEntity; self.Version = 1; - if(!self.modelindex) - { - vector misave, masave; - misave = self.mins; - masave = self.maxs; - setmodel(self, "null"); - setsize(self, misave, masave); - } + Net_LinkEntity(self, FALSE, 0, rainsnow_SendEntity); }; @@ -1022,11 +1001,10 @@ void spawnfunc_misc_laser() self.nextthink = time; InitializeEntity(self, misc_laser_init, INITPRIO_FINDTARGET); - self.effects = EF_NODEPTHTEST; - self.SendEntity = laser_SendEntity; - setmodel(self, "null"); self.mangle = self.angles; + Net_LinkEntity(self, FALSE, 0, laser_SendEntity); + IFTARGETED { self.reset = laser_reset; diff --git a/data/qcsrc/server/g_violence.qc b/data/qcsrc/server/g_violence.qc index d2d1fc2ce..595cc4e75 100644 --- a/data/qcsrc/server/g_violence.qc +++ b/data/qcsrc/server/g_violence.qc @@ -23,12 +23,6 @@ void Violence_GibSplash_At(vector org, vector mi, vector ma, vector dir, float t e.state = type; if(sv_gentle) e.state |= 0x80; // "force gentle" bit - e.SendEntity = Violence_GibSplash_SendEntity; - e.nextthink = time + 0.2; - e.think = SUB_Remove; - // 0.2s should be enough time for all clients to receive this ent once, do the gibbage and be done with it - setmodel(e, "null"); - e.effects = EF_NODEPTHTEST; // show gibs from around the corner setorigin(e, org); setsize(e, mi, ma); e.velocity = dir; @@ -36,6 +30,8 @@ void Violence_GibSplash_At(vector org, vector mi, vector ma, vector dir, float t e.oldorigin_x = compressShortVector(e.velocity); e.oldorigin_y = compressShortVector(e.mins); e.oldorigin_z = compressShortVector(e.maxs); + + Net_LinkEntity(e, FALSE, 0.2, Violence_GibSplash_SendEntity); } void Violence_GibSplash(entity source, float type, float amount) diff --git a/data/qcsrc/server/g_world.qc b/data/qcsrc/server/g_world.qc index e442b38ab..4d1df10f7 100644 --- a/data/qcsrc/server/g_world.qc +++ b/data/qcsrc/server/g_world.qc @@ -2100,11 +2100,7 @@ float MapVote_SendEntity(entity to, float sf) void MapVote_Spawn() { - mapvote_ent = spawn(); - mapvote_ent.classname = "ent_client_mapvote"; - mapvote_ent.SendEntity = MapVote_SendEntity; - setmodel(mapvote_ent, "null"); - mapvote_ent.effects = EF_NODEPTHTEST; + Net_LinkEntity(mapvote_ent = spawn(), FALSE, 0, MapVote_SendEntity); } void MapVote_TouchMask() diff --git a/data/qcsrc/server/miscfunctions.qc b/data/qcsrc/server/miscfunctions.qc index 7f693f033..176d78006 100644 --- a/data/qcsrc/server/miscfunctions.qc +++ b/data/qcsrc/server/miscfunctions.qc @@ -1631,10 +1631,33 @@ void SetCustomizer(entity e, float(void) customizer, void(void) uncustomizer) .float nottargeted; #define IFTARGETED if(!self.nottargeted && self.targetname != "") -void Net_LinkEntity(entity e) +void() SUB_Remove; +void Net_LinkEntityWithSize(entity e, float docull, float dt, vector mi, vector ma, float(entity, float) sendfunc) { - setmodel(e, "null"); - e.effects = EF_NODEPTHTEST | EF_LOWPRECISION; + if(e.classname == "") + e.classname = "net_linked"; + + if(e.model == "" || self.modelindex == 0) + setmodel(e, "null"); + + setsize(e, mi, ma); + + e.SendEntity = sendfunc; + e.SendFlags = 0xFFFFFF; + + if(!docull) + e.effects |= EF_NODEPTHTEST; + + if(dt) + { + e.nextthink = time + dt; + e.think = SUB_Remove; + } +} + +void Net_LinkEntity(entity e, float docull, float dt, float(entity, float) sendfunc) +{ + Net_LinkEntityWithSize(e, docull, dt, e.mins, e.maxs, sendfunc); } void adaptor_think2touch() diff --git a/data/qcsrc/server/mode_onslaught.qc b/data/qcsrc/server/mode_onslaught.qc index 392e61b42..93de172e2 100644 --- a/data/qcsrc/server/mode_onslaught.qc +++ b/data/qcsrc/server/mode_onslaught.qc @@ -978,6 +978,5 @@ void spawnfunc_onslaught_link() objerror("target and target2 must be set\n"); self.think = onslaught_link_delayed; self.nextthink = time + 0.1; - self.SendEntity = onslaught_link_send; - Net_LinkEntity(self); + Net_LinkEntity(self, FALSE, 0, onslaught_link_send); }; diff --git a/data/qcsrc/server/scores.qc b/data/qcsrc/server/scores.qc index 612e399e4..6a59f456b 100644 --- a/data/qcsrc/server/scores.qc +++ b/data/qcsrc/server/scores.qc @@ -76,11 +76,9 @@ void TeamScore_Spawn(float t, string name) entity ts; ts = spawn(); ts.classname = "csqc_score_team"; - ts.SendEntity = TeamScore_SendEntity; ts.netname = name; // not used yet, FIXME - //ts.SendFlags = SENDFLAGS_CREATE; // immediately send, so csqc knows about the team ts.team = t; - Net_LinkEntity(ts); + Net_LinkEntity(ts, FALSE, 0, TeamScore_SendEntity); teamscorekeepers[t - 1] = ts; ++teamscores_entities_count; } @@ -178,9 +176,7 @@ void ScoreInfo_Init(float teams) { scores_initialized = spawn(); scores_initialized.classname = "ent_client_scoreinfo"; - scores_initialized.SendEntity = ScoreInfo_SendEntity; - setmodel(scores_initialized, "null"); - scores_initialized.effects = EF_NODEPTHTEST; + Net_LinkEntity(scores_initialized, FALSE, 0, ScoreInfo_SendEntity); } if(teams >= 1) TeamScore_Spawn(COLOR_TEAM1, "Red"); @@ -280,8 +276,7 @@ void PlayerScore_Attach(entity player) error("player already has a scorekeeper"); sk = spawn(); sk.owner = player; - sk.SendEntity = PlayerScore_SendEntity; - Net_LinkEntity(sk); + Net_LinkEntity(sk, FALSE, 0, PlayerScore_SendEntity); player.scorekeeper = sk; } diff --git a/data/qcsrc/server/tturrets/units/unit_hellion.qc b/data/qcsrc/server/tturrets/units/unit_hellion.qc index a9af33d68..874ff2b2a 100644 --- a/data/qcsrc/server/tturrets/units/unit_hellion.qc +++ b/data/qcsrc/server/tturrets/units/unit_hellion.qc @@ -31,7 +31,6 @@ void turret_hellion_attack() missile = spawn (); setorigin(missile, self.tur_shotorg_updated); - setmodel (missile, "models/turrets/mlrs_rocket.md3"); // precision set below setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot missile.classname = "hellion_missile"; @@ -46,7 +45,6 @@ void turret_hellion_attack() missile.nextthink = time + 0.2; missile.solid = SOLID_BBOX; missile.movetype = MOVETYPE_FLYMISSILE; - missile.effects = EF_LOWPRECISION; missile.velocity = (self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed; // + ('0 0 1' * self.shot_speed * 0.15); missile.angles = vectoangles(missile.velocity); missile.touch = turret_hellion_missile_explode; @@ -56,8 +54,7 @@ void turret_hellion_attack() missile.tur_aimpos = randomvec() * 128; te_explosion (missile.origin); - CSQCProjectile(missile, FALSE, PROJECTILE_ROCKET); - missile.effects |= EF_NODEPTHTEST; // projectile has a fly sound + CSQCProjectile(missile, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, has fly sound // switch tubes self.tur_shotorg_y = self.tur_shotorg_y * -1; diff --git a/data/qcsrc/server/tturrets/units/unit_hk.qc b/data/qcsrc/server/tturrets/units/unit_hk.qc index b2f3d1fe4..12e906e11 100644 --- a/data/qcsrc/server/tturrets/units/unit_hk.qc +++ b/data/qcsrc/server/tturrets/units/unit_hk.qc @@ -89,7 +89,6 @@ void turret_hk_attack() missile = spawn (); missile.solid = SOLID_BBOX; - setmodel (missile, "models/turrets/hunter2.md3"); // precision set below setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot setorigin(missile, self.tur_shotorg_updated); @@ -105,7 +104,6 @@ void turret_hk_attack() missile.event_damage = turret_hk_missile_damage; missile.nextthink = time + 0.25; missile.movetype = MOVETYPE_BOUNCEMISSILE; - missile.effects = EF_LOWPRECISION; missile.velocity = self.tur_shotdir_updated * (self.shot_speed * 0.75); missile.angles = vectoangles(missile.velocity); missile.touch = turret_hk_missile_explode; //turret_hk_missile_touch; @@ -115,8 +113,7 @@ void turret_hk_attack() missile.cnt = time + 30; missile.ticrate = max(cvar("sys_ticrate"),0.05); - CSQCProjectile(missile, FALSE, PROJECTILE_ROCKET); - missile.effects |= EF_NODEPTHTEST; // projectile has a fly sound + CSQCProjectile(missile, FALSE, PROJECTILE_ROCKET, FALSE); // no culling, fly sound te_explosion (missile.origin); diff --git a/data/qcsrc/server/tturrets/units/unit_mlrs.qc b/data/qcsrc/server/tturrets/units/unit_mlrs.qc index 6cffc33a4..59a545587 100644 --- a/data/qcsrc/server/tturrets/units/unit_mlrs.qc +++ b/data/qcsrc/server/tturrets/units/unit_mlrs.qc @@ -23,7 +23,6 @@ void turret_mlrs_attack() sound (self, CHAN_WEAPON, "weapons/rocket_fire.wav", VOL_BASE, ATTN_NORM); missile = spawn (); - setmodel (missile, "models/turrets/rocket.md3"); // precision set below setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot setorigin(missile, self.tur_shotorg_updated); missile.classname = "mlrs_missile"; @@ -37,7 +36,6 @@ void turret_mlrs_attack() missile.nextthink = time + max(self.tur_impacttime,(self.shot_radius * 2) / self.shot_speed); missile.solid = SOLID_BBOX; missile.movetype = MOVETYPE_FLYMISSILE; - missile.effects = EF_LOWPRECISION; missile.velocity = (self.tur_shotdir_updated + randomvec() * self.shot_spread) * self.shot_speed; missile.angles = vectoangles(missile.velocity); missile.touch = turret_mlrs_rocket_explode; @@ -45,8 +43,7 @@ void turret_mlrs_attack() missile.solid = SOLID_BBOX; missile.enemy = self.enemy; - CSQCProjectile(missile, TRUE, PROJECTILE_ROCKET); - missile.effects |= EF_NODEPTHTEST; // projectile has a fly sound + CSQCProjectile(missile, TRUE, PROJECTILE_ROCKET, FALSE); // no cull, fly sound te_explosion (missile.origin); diff --git a/data/qcsrc/server/tturrets/units/unit_walker.qc b/data/qcsrc/server/tturrets/units/unit_walker.qc index d67f4c294..998e29d02 100644 --- a/data/qcsrc/server/tturrets/units/unit_walker.qc +++ b/data/qcsrc/server/tturrets/units/unit_walker.qc @@ -310,7 +310,6 @@ void walker_fire_rocket(vector org) setorigin(rocket, org); sound (self, CHAN_WEAPON, "weapons/hagar_fire.wav", VOL_BASE, ATTN_NORM); - setmodel (rocket, "models/turrets/rocket.md3"); // precision set below setsize (rocket, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot rocket.classname = "walker_rocket"; @@ -335,7 +334,6 @@ void walker_fire_rocket(vector org) rocket.nextthink = time + 0.25; rocket.solid = SOLID_BBOX; rocket.movetype = MOVETYPE_FLYMISSILE; - rocket.effects = EF_LOWPRECISION; rocket.velocity = ((v_forward + v_up * 0.25) +(randomvec() * 0.1))* cvar("g_turrets_unit_walker_std_rocket_speed"); rocket.angles = vectoangles(rocket.velocity); rocket.touch = walker_rocket_explode; @@ -343,8 +341,7 @@ void walker_fire_rocket(vector org) rocket.solid = SOLID_BBOX; rocket.tur_health = time + 9; - CSQCProjectile(rocket, TRUE, PROJECTILE_ROCKET); - rocket.effects |= EF_NODEPTHTEST; // projectile has a fly sound + CSQCProjectile(rocket, TRUE, PROJECTILE_ROCKET, FALSE); // no cull, fly sound te_explosion (rocket.origin); diff --git a/data/qcsrc/server/w_common.qc b/data/qcsrc/server/w_common.qc index c4e905a2c..07bee1e7c 100644 --- a/data/qcsrc/server/w_common.qc +++ b/data/qcsrc/server/w_common.qc @@ -278,8 +278,6 @@ void fireBallisticBullet(vector start, vector dir, float spread, float pSpeed, f proj.angles = vectoangles(proj.velocity); proj.dmg_radius = cvar("g_ballistics_materialconstant") / bulletconstant; // so: bulletconstant = bullet mass / area of bullet circle - setmodel(proj, "null"); - setsize(proj, '0 0 0', '0 0 0'); setorigin(proj, start); proj.flags = FL_PROJECTILE; @@ -292,9 +290,9 @@ void fireBallisticBullet(vector start, vector dir, float spread, float pSpeed, f proj.oldvelocity = proj.velocity; if(tracereffects & EF_RED) - CSQCProjectile(proj, TRUE, PROJECTILE_BULLET_GLOWING); + CSQCProjectile(proj, TRUE, PROJECTILE_BULLET_GLOWING, TRUE); else - CSQCProjectile(proj, TRUE, PROJECTILE_BULLET); + CSQCProjectile(proj, TRUE, PROJECTILE_BULLET, TRUE); } void fireBullet (vector start, vector dir, float spread, float damage, float force, float dtype, float tracer) @@ -328,12 +326,10 @@ void fireBullet (vector start, vector dir, float spread, float damage, float for e.nextthink = time + vlen(trace_endpos - start) / 6000; e.velocity = dir * 6000; e.angles = vectoangles(e.velocity); - setmodel (e, "null"); // precision set below - setsize (e, '0 0 0', '0 0 0'); setorigin (e, start); e.flags = FL_PROJECTILE; - CSQCProjectile(e, TRUE, PROJECTILE_BULLET); + CSQCProjectile(e, TRUE, PROJECTILE_BULLET, TRUE); } if ((trace_fraction != 1.0) && (pointcontents (trace_endpos) != CONTENT_SKY)) diff --git a/data/qcsrc/server/w_crylink.qc b/data/qcsrc/server/w_crylink.qc index 0e2511c93..0c3041f18 100644 --- a/data/qcsrc/server/w_crylink.qc +++ b/data/qcsrc/server/w_crylink.qc @@ -86,8 +86,6 @@ void W_Crylink_Attack (void) proj.projectiledeathtype = WEP_CRYLINK; //proj.gravity = 0.001; - setmodel (proj, "null"); // precision set below - setsize (proj, '0 0 0', '0 0 0'); setorigin (proj, w_shotorg); @@ -120,7 +118,7 @@ void W_Crylink_Attack (void) proj.flags = FL_PROJECTILE; - CSQCProjectile(proj, TRUE, PROJECTILE_CRYLINK); + CSQCProjectile(proj, TRUE, PROJECTILE_CRYLINK, TRUE); counter = counter + 1; } @@ -151,8 +149,6 @@ void W_Crylink_Attack2 (void) proj.projectiledeathtype = WEP_CRYLINK | HITTYPE_SECONDARY; //proj.gravity = 0.001; - setmodel (proj, "null"); // precision set below - setsize (proj, '0 0 0', '0 0 0'); setorigin (proj, w_shotorg); proj.velocity = (w_shotdir + (((counter + 0.5) / shots) * 2 - 1) * v_right * cvar("g_balance_crylink_secondary_spread")) * cvar("g_balance_crylink_secondary_speed"); @@ -171,7 +167,7 @@ void W_Crylink_Attack2 (void) proj.flags = FL_PROJECTILE; - CSQCProjectile(proj, TRUE, PROJECTILE_CRYLINK); + CSQCProjectile(proj, TRUE, PROJECTILE_CRYLINK, TRUE); counter = counter + 1; } diff --git a/data/qcsrc/server/w_electro.qc b/data/qcsrc/server/w_electro.qc index 2288aaa35..44da1b1af 100644 --- a/data/qcsrc/server/w_electro.qc +++ b/data/qcsrc/server/w_electro.qc @@ -96,13 +96,11 @@ void W_Electro_Attack() proj.angles = vectoangles(proj.velocity); proj.touch = W_Plasma_TouchExplode; proj.flags = FL_PROJECTILE; - setmodel(proj, "null"); // precision set above - setsize(proj, '0 0 0', '0 0 0'); //sound (proj, CHAN_PAIN, "weapons/electro_fly.wav", VOL_BASE, ATTN_NORM); //sounds bad - CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO_BEAM); + CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO_BEAM, TRUE); } void W_Electro_Attack2() @@ -133,7 +131,6 @@ void W_Electro_Attack2() proj.velocity = (w_shotdir + randomvec() * cvar("g_balance_electro_secondary_spread")) * cvar("g_balance_electro_secondary_speed") + v_up * cvar("g_balance_electro_secondary_speed_up"); W_SetupProjectileVelocity(proj); proj.touch = W_Plasma_Touch; - setmodel(proj, "null"); // precision set above setsize(proj, '0 0 -3', '0 0 -3'); proj.takedamage = DAMAGE_YES; proj.damageforcescale = 4; @@ -141,8 +138,7 @@ void W_Electro_Attack2() proj.event_damage = W_Plasma_Damage; proj.flags = FL_PROJECTILE; - CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO); - proj.effects = EF_NODEPTHTEST; + CSQCProjectile(proj, TRUE, PROJECTILE_ELECTRO, FALSE); // no culling, it has sound } void spawnfunc_weapon_electro (void) diff --git a/data/qcsrc/server/w_grenadelauncher.qc b/data/qcsrc/server/w_grenadelauncher.qc index e2a8b865d..e823a326c 100644 --- a/data/qcsrc/server/w_grenadelauncher.qc +++ b/data/qcsrc/server/w_grenadelauncher.qc @@ -90,8 +90,6 @@ void W_Grenade_Attack (void) gren.movetype = MOVETYPE_BOUNCE; gren.solid = SOLID_BBOX; gren.projectiledeathtype = WEP_GRENADE_LAUNCHER; - setmodel(gren, "null"); // precision set above - setsize(gren, '0 0 0', '0 0 0'); setorigin(gren, w_shotorg); gren.nextthink = time + cvar("g_balance_grenadelauncher_primary_lifetime"); @@ -104,7 +102,7 @@ void W_Grenade_Attack (void) gren.angles = vectoangles (gren.velocity); gren.flags = FL_PROJECTILE; - CSQCProjectile(gren, TRUE, PROJECTILE_GRENADE); + CSQCProjectile(gren, TRUE, PROJECTILE_GRENADE, TRUE); } void W_Grenade_Attack2 (void) @@ -126,8 +124,7 @@ void W_Grenade_Attack2 (void) gren.movetype = MOVETYPE_BOUNCE; gren.solid = SOLID_BBOX; gren.projectiledeathtype = WEP_GRENADE_LAUNCHER | HITTYPE_SECONDARY; - setmodel(gren, "null"); // precision set above - setsize(gren, '0 0 -3', '0 0 -3'); + setsize(gren, '0 0 -3', '0 0 -3'); // why, just, why? setorigin(gren, w_shotorg); gren.nextthink = time + cvar("g_balance_grenadelauncher_secondary_lifetime"); @@ -144,7 +141,7 @@ void W_Grenade_Attack2 (void) gren.angles = vectoangles (gren.velocity); gren.flags = FL_PROJECTILE; - CSQCProjectile(gren, TRUE, PROJECTILE_GRENADE_BOUNCING); + CSQCProjectile(gren, TRUE, PROJECTILE_GRENADE_BOUNCING, TRUE); } void spawnfunc_weapon_grenadelauncher (void) diff --git a/data/qcsrc/server/w_hagar.qc b/data/qcsrc/server/w_hagar.qc index e8ddbbec7..286a5d4ae 100644 --- a/data/qcsrc/server/w_hagar.qc +++ b/data/qcsrc/server/w_hagar.qc @@ -66,11 +66,8 @@ void W_Hagar_Attack (void) missile.think = adaptor_think2use; missile.nextthink = time + cvar("g_balance_hagar_primary_lifetime"); missile.solid = SOLID_BBOX; - missile.scale = 0.4; // BUG: the model is too big missile.projectiledeathtype = WEP_HAGAR; setorigin (missile, w_shotorg); - setmodel (missile, "null"); // precision set below - setsize (missile, '0 0 0', '0 0 0'); //missile.takedamage = DAMAGE_YES; //missile.damageforcescale = 4; //missile.health = 10; @@ -83,7 +80,7 @@ void W_Hagar_Attack (void) missile.angles = vectoangles (missile.velocity); missile.flags = FL_PROJECTILE; - CSQCProjectile(missile, TRUE, PROJECTILE_HAGAR); + CSQCProjectile(missile, TRUE, PROJECTILE_HAGAR, TRUE); } void W_Hagar_Attack2 (void) @@ -108,11 +105,8 @@ void W_Hagar_Attack2 (void) missile.think = adaptor_think2use; missile.nextthink = time + cvar("g_balance_hagar_secondary_lifetime"); missile.solid = SOLID_BBOX; - missile.scale = 0.4; // BUG: the model is too big missile.projectiledeathtype = WEP_HAGAR | HITTYPE_SECONDARY; setorigin (missile, w_shotorg); - setmodel (missile, "null"); // precision set below - setsize (missile, '0 0 0', '0 0 0'); //missile.takedamage = DAMAGE_YES; //missile.damageforcescale = 4; //missile.health = 10; @@ -126,7 +120,7 @@ void W_Hagar_Attack2 (void) missile.angles = vectoangles (missile.velocity); missile.flags = FL_PROJECTILE; - CSQCProjectile(missile, TRUE, PROJECTILE_HAGAR_BOUNCING); + CSQCProjectile(missile, TRUE, PROJECTILE_HAGAR_BOUNCING, TRUE); } void spawnfunc_weapon_hagar (void) diff --git a/data/qcsrc/server/w_hlac.qc b/data/qcsrc/server/w_hlac.qc index c0e7b1f0b..c0062ce83 100644 --- a/data/qcsrc/server/w_hlac.qc +++ b/data/qcsrc/server/w_hlac.qc @@ -55,8 +55,6 @@ void W_HLAC_Attack (void) missile.movetype = MOVETYPE_FLY; missile.solid = SOLID_BBOX; - setmodel (missile, "null"); // precision set below - setsize (missile, '0 0 0', '0 0 0'); setorigin (missile, w_shotorg); missile.velocity = (w_shotdir + randomvec() * spread) * cvar("g_balance_hlac_primary_speed"); @@ -72,7 +70,7 @@ void W_HLAC_Attack (void) missile.flags = FL_PROJECTILE; missile.projectiledeathtype = WEP_HLAC; - CSQCProjectile(missile, TRUE, PROJECTILE_HLAC); + CSQCProjectile(missile, TRUE, PROJECTILE_HLAC, TRUE); } void W_HLAC_Attack2f (void) @@ -100,8 +98,6 @@ void W_HLAC_Attack2f (void) missile.movetype = MOVETYPE_FLY; missile.solid = SOLID_BBOX; - setmodel (missile, "null"); // precision set below - setsize (missile, '0 0 0', '0 0 0'); setorigin (missile, w_shotorg); missile.velocity = (w_shotdir + randomvec() * spread) * cvar("g_balance_hlac_secondary_speed"); @@ -117,7 +113,7 @@ void W_HLAC_Attack2f (void) missile.flags = FL_PROJECTILE; missile.projectiledeathtype = WEP_HLAC | HITTYPE_SECONDARY; - CSQCProjectile(missile, TRUE, PROJECTILE_HLAC); + CSQCProjectile(missile, TRUE, PROJECTILE_HLAC, TRUE); } void W_HLAC_Attack2 (void) diff --git a/data/qcsrc/server/w_hook.qc b/data/qcsrc/server/w_hook.qc index 22324dee2..da0f61311 100644 --- a/data/qcsrc/server/w_hook.qc +++ b/data/qcsrc/server/w_hook.qc @@ -69,8 +69,6 @@ void W_Hook_Attack2() gren.movetype = MOVETYPE_TOSS; gren.solid = SOLID_BBOX; gren.projectiledeathtype = WEP_HOOK | HITTYPE_SECONDARY; - setmodel(gren, "null"); // precision set above // FIXME replace - setsize(gren, '0 0 0', '0 0 0'); setorigin(gren, w_shotorg); gren.nextthink = time + cvar("g_balance_hook_secondary_lifetime"); @@ -88,7 +86,7 @@ void W_Hook_Attack2() gren.angles = '0 0 0'; gren.flags = FL_PROJECTILE; - CSQCProjectile(gren, TRUE, PROJECTILE_HOOKBOMB); + CSQCProjectile(gren, TRUE, PROJECTILE_HOOKBOMB, TRUE); } void spawnfunc_weapon_hook (void) diff --git a/data/qcsrc/server/w_laser.qc b/data/qcsrc/server/w_laser.qc index 1ffd61257..a2bd900d3 100644 --- a/data/qcsrc/server/w_laser.qc +++ b/data/qcsrc/server/w_laser.qc @@ -36,8 +36,6 @@ void W_Laser_Attack (float issecondary) if(issecondary) missile.projectiledeathtype |= HITTYPE_SECONDARY; - setmodel (missile, "null"); // precision set below - setsize (missile, '0 0 0', '0 0 0'); setorigin (missile, w_shotorg); if (issecondary) @@ -57,7 +55,7 @@ void W_Laser_Attack (float issecondary) missile.flags = FL_PROJECTILE; - CSQCProjectile(missile, TRUE, PROJECTILE_LASER); + CSQCProjectile(missile, TRUE, PROJECTILE_LASER, TRUE); } float w_laser(float req) diff --git a/data/qcsrc/server/w_porto.qc b/data/qcsrc/server/w_porto.qc index ea9a0272f..3f2f7b18b 100644 --- a/data/qcsrc/server/w_porto.qc +++ b/data/qcsrc/server/w_porto.qc @@ -123,7 +123,7 @@ void W_Porto_Touch (void) trace_plane_normal = norm; W_Porto_Fail(0); } - CSQCProjectile(self, TRUE, PROJECTILE_PORTO_BLUE); // change type + CSQCProjectile(self, TRUE, PROJECTILE_PORTO_BLUE, TRUE); // change type } else { @@ -170,8 +170,6 @@ void W_Porto_Attack (void) gren.solid = SOLID_BBOX; gren.effects = EF_RED; gren.scale = 4; - setmodel(gren, "null"); // precision set above - setsize(gren, '0 0 0', '0 0 0'); setorigin(gren, w_shotorg); gren.nextthink = time + cvar("g_balance_porto_primary_lifetime"); @@ -193,7 +191,7 @@ void W_Porto_Attack (void) gren.dphitcontentsmask = DPCONTENTS_SOLID | DPCONTENTS_BODY | DPCONTENTS_PLAYERCLIP; - CSQCProjectile(gren, TRUE, PROJECTILE_PORTO_RED); + CSQCProjectile(gren, TRUE, PROJECTILE_PORTO_RED, TRUE); } void spawnfunc_weapon_porto (void) diff --git a/data/qcsrc/server/w_rocketlauncher.qc b/data/qcsrc/server/w_rocketlauncher.qc index 6cd805eef..57b6d8168 100644 --- a/data/qcsrc/server/w_rocketlauncher.qc +++ b/data/qcsrc/server/w_rocketlauncher.qc @@ -221,7 +221,6 @@ void W_Rocket_Attack (void) missile.movetype = MOVETYPE_FLY; missile.solid = SOLID_BBOX; missile.projectiledeathtype = WEP_ROCKET_LAUNCHER; - setmodel (missile, "null"); // precision set below setsize (missile, '-3 -3 -3', '3 3 3'); // give it some size so it can be shot setorigin (missile, w_shotorg - v_forward * 3); // move it back so it hits the wall at the right point @@ -238,8 +237,7 @@ void W_Rocket_Attack (void) missile.cnt = time + cvar("g_balance_rocketlauncher_lifetime"); missile.flags = FL_PROJECTILE; - CSQCProjectile(missile, cvar("g_balance_rocketlauncher_speedaccel") == 0 && !g_laserguided_missile, PROJECTILE_ROCKET); - missile.effects |= EF_NODEPTHTEST; // because of fly sound + CSQCProjectile(missile, cvar("g_balance_rocketlauncher_speedaccel") == 0 && !g_laserguided_missile, PROJECTILE_ROCKET, FALSE); // because of fly sound // muzzle flash for 1st person view flash = spawn (); diff --git a/data/qcsrc/server/w_seeker.qc b/data/qcsrc/server/w_seeker.qc index f957e1c49..afe5214cb 100644 --- a/data/qcsrc/server/w_seeker.qc +++ b/data/qcsrc/server/w_seeker.qc @@ -189,7 +189,6 @@ void Seeker_Fire_Missile(vector f_org) missile.projectiledeathtype = WEP_SEEKER; setorigin (missile, w_shotorg); - setmodel (missile, "null"); setsize (missile, '-2 -2 -2', '2 2 2'); @@ -203,7 +202,7 @@ void Seeker_Fire_Missile(vector f_org) missile.switchweapon = vlen(missile.velocity); missile.angles = vectoangles (missile.velocity); - CSQCProjectile(missile, FALSE, PROJECTILE_SEEKER); + CSQCProjectile(missile, FALSE, PROJECTILE_SEEKER, TRUE); } void Seeker_Vollycontroler_Think() @@ -330,9 +329,7 @@ void Seeker_Fire_Tag() missile.event_damage = Seeker_Tag_Explode; missile.health = 5; - setmodel (missile, "null"); setorigin (missile, w_shotorg); - setsize (missile, '0 0 0', '0 0 0'); missile.flags = FL_PROJECTILE; @@ -341,8 +338,7 @@ void Seeker_Fire_Tag() W_SetupProjectileVelocity(missile); missile.angles = vectoangles (missile.velocity); - CSQCProjectile(missile, TRUE, PROJECTILE_TAG); - missile.effects = EF_NODEPTHTEST; + CSQCProjectile(missile, TRUE, PROJECTILE_TAG, FALSE); // has sound } @@ -405,8 +401,6 @@ void Seeker_Fire_Flac() missile.scale = 0.4; // BUG: the model is too big missile.projectiledeathtype = WEP_SEEKER; setorigin (missile, w_shotorg); - setmodel (missile, "null"); // precision set below - setsize (missile, '0 0 0', '0 0 0'); missile.projectiledeathtype = WEP_SEEKER | HITTYPE_SECONDARY; missile.movetype = MOVETYPE_FLY; @@ -418,7 +412,7 @@ void Seeker_Fire_Flac() missile.angles = vectoangles (missile.velocity); missile.flags = FL_PROJECTILE; - CSQCProjectile(missile, TRUE, PROJECTILE_FLAC); + CSQCProjectile(missile, TRUE, PROJECTILE_FLAC, TRUE); } void spawnfunc_weapon_seeker (void) diff --git a/data/qcsrc/server/waypointsprites.qc b/data/qcsrc/server/waypointsprites.qc index 82b6891ef..6b1c6ca81 100644 --- a/data/qcsrc/server/waypointsprites.qc +++ b/data/qcsrc/server/waypointsprites.qc @@ -256,11 +256,10 @@ entity WaypointSprite_Spawn( wp.nextthink = time; wp.effects = EF_NODEPTHTEST | EF_LOWPRECISION; wp.model1 = spr; - setmodel(wp, "null"); - wp.SendEntity = WaypointSprite_SendEntity; wp.customizeentityforclient = WaypointSprite_Customize; wp.waypointsprite_visible_for_player = WaypointSprite_visible_for_player; wp.reset2 = WaypointSprite_Reset; + Net_LinkEntity(wp, TRUE, 0, WaypointSprite_SendEntity); return wp; } -- 2.39.2