From ce357a573fec4e54069e480a25bb3e2216be378a Mon Sep 17 00:00:00 2001 From: Rudolf Polzer Date: Sat, 8 May 2010 15:28:03 +0200 Subject: [PATCH 1/1] custom bouncefactor/bouncestopspeed for mortar --- qcsrc/client/Main.qc | 3 +++ qcsrc/client/projectile.qc | 17 +++----------- qcsrc/server/cl_client.qc | 42 +++++++++++++++++++++++++++++++--- qcsrc/server/csqcprojectile.qc | 16 ------------- 4 files changed, 45 insertions(+), 33 deletions(-) diff --git a/qcsrc/client/Main.qc b/qcsrc/client/Main.qc index ddff8e18fe..d16e91820e 100644 --- a/qcsrc/client/Main.qc +++ b/qcsrc/client/Main.qc @@ -1017,6 +1017,9 @@ void Ent_Init() g_weaponswitchdelay = ReadByte() / 255.0; + g_balance_grenadelauncher_secondary_bouncefactor = ReadCoord(); + g_balance_grenadelauncher_secondary_bouncestop = ReadCoord(); + if(!postinit) PostInit(); } diff --git a/qcsrc/client/projectile.qc b/qcsrc/client/projectile.qc index b22a5b9dbd..1cbab300f9 100644 --- a/qcsrc/client/projectile.qc +++ b/qcsrc/client/projectile.qc @@ -158,11 +158,9 @@ void Ent_RemoveProjectile() } } -.float bouncefactor; -.float bouncestop; void Ent_Projectile() { - float f, s; + float f; // projectile properties: // kind (interpolated, or clientside) @@ -216,19 +214,8 @@ void Ent_Projectile() self.velocity_y = ReadCoord(); self.velocity_z = ReadCoord(); self.gravity = ReadCoord(); - - s = ReadByte(); - - if (s & 1) - { - self.bouncefactor = ReadCoord(); - self.bouncestop = ReadCoord(); - } - self.move_origin = self.origin; self.move_velocity = self.velocity; - self.move_bounce_factor = self.bouncefactor; - self.move_bounce_stopspeed = self.bouncestop; } if(time == self.spawntime || (self.count & 0x80) || (f & 0x10)) @@ -316,6 +303,8 @@ void Ent_Projectile() self.maxs = '0 0 -3'; self.move_movetype = MOVETYPE_BOUNCE; self.move_touch = SUB_Null; + self.move_bounce_factor = g_balance_grenadelauncher_secondary_bouncefactor; + self.move_bounce_stopspeed = g_balance_grenadelauncher_secondary_bouncestop; break; case PROJECTILE_PORTO_RED: self.colormod = '2 1 1'; diff --git a/qcsrc/server/cl_client.qc b/qcsrc/server/cl_client.qc index 8a3fe88fd5..0ec16a9a3d 100644 --- a/qcsrc/server/cl_client.qc +++ b/qcsrc/server/cl_client.qc @@ -1064,14 +1064,50 @@ float ClientInit_SendEntity(entity to, float sf) WriteString(MSG_ENTITY, world.fog); else WriteString(MSG_ENTITY, ""); - WriteByte(MSG_ENTITY, cvar("g_balance_armor_blockpercent") * 255.0); - WriteByte(MSG_ENTITY, cvar("g_balance_weaponswitchdelay") * 255.0); + WriteByte(MSG_ENTITY, self.count * 255.0); // g_balance_armor_blockpercent + WriteByte(MSG_ENTITY, self.cnt * 255.0); // g_balance_weaponswitchdelay + WriteCoord(MSG_ENTITY, self.bouncefactor); // g_balance_grenadelauncher_secondary_bouncefactor + WriteCoord(MSG_ENTITY, self.bouncestop); // g_balance_grenadelauncher_secondary_bouncestop return TRUE; } +void ClientInit_CheckUpdate() +{ + self.nextthink = time; + if(self.count != cvar("g_balance_armor_blockpercent")) + { + self.count = cvar("g_balance_armor_blockpercent"); + self.SendFlags |= 1; + } + if(self.cnt != cvar("g_balance_weaponswitchdelay")) + { + self.cnt = cvar("g_balance_weaponswitchdelay"); + self.SendFlags |= 1; + } + if(self.bouncefactor != cvar("g_balance_grenadelauncher_secondary_bouncefactor")) + { + self.bouncefactor = cvar("g_balance_grenadelauncher_secondary_bouncefactor"); + self.SendFlags |= 1; + } + if(self.bouncestop != cvar("g_balance_grenadelauncher_secondary_bouncestop")) + { + self.bouncestop = cvar("g_balance_grenadelauncher_secondary_bouncestop"); + self.SendFlags |= 1; + } +} + void ClientInit_Spawn() { - Net_LinkEntity(spawn(), FALSE, 0, ClientInit_SendEntity); + entity o; + entity e; + e.classname = "clientinit"; + e.think = ClientInit_CheckUpdate; + e.nextthink = time; + Net_LinkEntity(e, FALSE, 0, ClientInit_SendEntity); + o = self; + self = e; + ClientInit_CheckUpdate(); + self = o; } /* diff --git a/qcsrc/server/csqcprojectile.qc b/qcsrc/server/csqcprojectile.qc index aecdcf7f2f..e585b1e379 100644 --- a/qcsrc/server/csqcprojectile.qc +++ b/qcsrc/server/csqcprojectile.qc @@ -3,7 +3,6 @@ float CSQCProjectile_SendEntity(entity to, float sf) { float ft, fr; - float s; // note: flag 0x10 = no trail please sf = sf & 0x1F; @@ -22,13 +21,6 @@ float CSQCProjectile_SendEntity(entity to, float sf) sf |= 0x20; } - // HACK: subflags for sendflags = 0x80 - - s = 0; - - if (self.movetype == MOVETYPE_BOUNCEMISSILE || self.movetype == MOVETYPE_BOUNCE) - s |= 1; - WriteByte(MSG_ENTITY, ENT_CLIENT_PROJECTILE); WriteByte(MSG_ENTITY, sf); @@ -44,14 +36,6 @@ float CSQCProjectile_SendEntity(entity to, float sf) WriteCoord(MSG_ENTITY, self.velocity_y); WriteCoord(MSG_ENTITY, self.velocity_z); WriteCoord(MSG_ENTITY, self.gravity); - - WriteByte(MSG_ENTITY, s); - - if (s & 1) - { - WriteCoord(MSG_ENTITY, self.bouncefactor); - WriteCoord(MSG_ENTITY, self.bouncestop); - } } if(sf & 0x20) -- 2.39.2