X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=data%2Fqcsrc%2Fserver%2Fcl_weaponsystem.qc;h=48058cca9e23864607b36b7c0aef2052aa229df1;hb=2dc434f346fd63cb9d909788c9c1fa3e9355c56e;hp=e76ebbf111e7a4b93cee22eb446d6d2b747f4a11;hpb=3fcd2d55a894957166be3423e2370a82c768395d;p=voretournament%2Fvoretournament.git diff --git a/data/qcsrc/server/cl_weaponsystem.qc b/data/qcsrc/server/cl_weaponsystem.qc index e76ebbf1..48058cca 100644 --- a/data/qcsrc/server/cl_weaponsystem.qc +++ b/data/qcsrc/server/cl_weaponsystem.qc @@ -223,7 +223,10 @@ void W_SetupShot_Dir_ProjectileSize(entity ent, vector s_forward, vector mi, vec ent.dphitcontentsmask = oldsolid; // restore solid type (generally SOLID_SLIDEBOX) if (!g_norecoil) - ent.punchangle_x = recoil * -1; + { + ent.punchangle_x += crandom() * recoil; + ent.punchangle_y += crandom() * recoil; + } if (snd != "") { @@ -269,7 +272,13 @@ float CL_ExteriorWeaponentity_CustomizeEntityForClient() return TRUE; } - self.effects &~= EF_NODEPTHTEST; + if(cvar("g_nodepthtestplayers")) + self.effects |= EF_NODEPTHTEST; + else + self.effects &~= EF_NODEPTHTEST; + if(cvar("g_fullbrightplayers")) + self.effects |= EF_FULLBRIGHT; + if not(self.owner.stat_eaten) setmodel(self, strcat("models/weapons/v_", self.owner.weaponname, ".md3")); else if(cvar("g_vore_neighborprey_distance") && other.predator == self.owner.predator && !(chase || other.classname == "observer")) @@ -752,14 +761,21 @@ void CL_Weaponentity_Think() } - // create or update the lasertarget entity - // if we are a micro or macro, size the weapon model accordingly - if(self.owner.scale && cvar("g_healthsize_weapon_scalefactor")) - if(self.model != "") + if(cvar("g_healthsize") && cvar("g_healthsize_weapon_scalefactor")) + if(self.owner.scale) // prevents some exceptions { - self.weaponentity.scale = (1 + cvar("g_healthsize_weapon_scalefactor")) - cvar("g_healthsize_weapon_scalefactor") * self.owner.scale; - self.weaponentity.origin_z = (1 - self.weaponentity.scale) * cvar("g_healthsize_weapon_scalefactor_pos"); + self.scale = pow(1 / self.owner.scale, cvar("g_healthsize_weapon_scalefactor")); + if(self.scale < 0.1) + self.scale = 0.1; // stuff breaks if scale is smaller than this + self.origin_z = (1 - self.scale) * cvar("g_healthsize_weapon_scalefactor_pos"); + + // copy properties to the static weapon entity as well + if(self.weaponentity != world) // prevents assignment to world + { + self.weaponentity.scale = self.scale; + self.weaponentity.origin = self.origin; + } } }; @@ -1588,7 +1604,7 @@ void W_DecreaseAmmo(.float ammo_type, float ammo_use, float ammo_reload) if(ammo_reload) { self.clip_load -= ammo_use; - self.weapon_load[self.weapon] = self.clip_load; + self.(weapon_load[self.weapon]) = self.clip_load; } else self.(self.current_ammo) -= ammo_use; @@ -1605,7 +1621,7 @@ void W_ReloadedAndReady() // if we are inside the stomach, don't allow reloading, and schedule the weapon to reload once when we're out if(self.stat_eaten) { - self.clip_load = self.weapon_load[self.weapon] = -1; + self.clip_load = self.(weapon_load[self.weapon]) = -1; w_ready(); // don't keep executing each frame return; } @@ -1625,7 +1641,7 @@ void W_ReloadedAndReady() self.(self.current_ammo) -= 1; } } - self.weapon_load[self.weapon] = self.clip_load; + self.(weapon_load[self.weapon]) = self.clip_load; // do not set ATTACK_FINISHED in reload code any more. This causes annoying delays if eg: You start reloading a weapon, // then quickly switch to another weapon and back. Reloading is canceled, but the reload delay is still there, @@ -1717,5 +1733,5 @@ void W_Reload(float sent_ammo_min, float sent_ammo_amount, float sent_time, stri if(self.clip_load < 0) self.clip_load = 0; self.old_clip_load = self.clip_load; - self.clip_load = self.weapon_load[self.weapon] = -1; + self.clip_load = self.(weapon_load[self.weapon]) = -1; } \ No newline at end of file