diff --git a/source/server/damage.qc b/source/server/damage.qc index 2858081..f4d9af1 100644 --- a/source/server/damage.qc +++ b/source/server/damage.qc @@ -698,6 +698,9 @@ void(entity inflictor, entity attacker, float damage2, float mindamage, float ra //final_damage = calculate_proximity_value(mindamage, damage2, inflictor.origin, ent.origin, radius); //bprint(PRINT_HIGH, strcat("damage: ", ftos(final_damage), "\n")); final_damage = damage2; + } else if (inflictor.classname == "player") { + // phd flopper. + final_damage = calculate_proximity_value(mindamage, damage2, inflictor.origin, ent.origin, radius); } else { r = rounds; multi = 1.07; diff --git a/source/server/player.qc b/source/server/player.qc index b222aae..d8c342c 100644 --- a/source/server/player.qc +++ b/source/server/player.qc @@ -266,7 +266,7 @@ void() PlayerPreThink = switch(self.stance) { case 1: - self.maxspeed *= 0.5; + self.maxspeed *= 0.65; break; case 0: self.maxspeed *= 0.25; diff --git a/source/server/weapons/weapon_core.qc b/source/server/weapons/weapon_core.qc index 4324061..d0aa40b 100644 --- a/source/server/weapons/weapon_core.qc +++ b/source/server/weapons/weapon_core.qc @@ -1003,7 +1003,7 @@ void(float side) W_Fire = if (GetFiretype(self.weapon) == FIRETYPE_FLAME && self.cooldown) return; - if (self.semiswitch == true) + if (self.semiswitch == true || self.dive) return; //First check that we can actualy fire @@ -1173,6 +1173,12 @@ void(float side) W_Fire = delay *= 0.66; } + // Players shouldn't be allowed to move while firing and prone. + if (self.stance == 0) { + self.speed_penalty = 0; + self.speed_penalty_time = time + delay; + } + if (self.weapon == W_GUT || self.weapon == W_KAR_SCOPE || self.weapon == W_TRENCH || self.weapon == W_KAR || self.weapon == W_ARMAGEDDON || self.weapon == W_HEADCRACKER || self.weapon == W_SPRING || self.weapon == W_PULVERIZER) { Set_W_Frame (startframe, endframe, delay, 0, FIRE, W_LoadAmmo, modelname, FALSE, side); @@ -1589,7 +1595,7 @@ void() dolphin_dive = //naievil self.flags = self.flags - (self.flags & FL_JUMPRELEASED); self.flags = self.flags - FL_ONGROUND; // don't stairwalk makevectors (self.v_angle); - self.velocity = self.velocity * 1.2; + self.velocity = self.velocity * 1.1; self.velocity_z = self.velocity_z + 270; if (self.button2) @@ -1897,17 +1903,19 @@ void() CheckPlayer = if (!self.button2 && self.flags & FL_ONGROUND) { if (self.dive) { - if (self.perks & P_FLOP && fabs(self.oldz - self.origin_z) > 90) { + if (self.perks & P_FLOP && fabs(self.oldz - self.origin_z) >= 64) { sound (self, CHAN_WEAPON, "sounds/weapons/grenade/explode.wav", 1, ATTN_NORM); - DamgageExplode (self, self, 225, 75, 128); + DamgageExplode (self, self, 5000, 1000, 300); #ifdef FTE - te_customflash(self.origin, 128, 300, '1 1 1'); + te_customflash(self.origin, 300, 300, '1 0.6 0.1'); #endif // FTE CallExplosion(self.origin); + CallExplosion(self.origin); + CallExplosion(self.origin); } self.dive = 0; } @@ -1957,6 +1965,22 @@ void () Weapon_Logic = #endif // FTE + // If the player is aiming down the sight while prone and moving, + // force them to stop + if (self.stance == 0 && self.velocity && self.zoom) { + W_AimOut(); + self.zoom = 0; + +#ifdef FTE + + self.viewzoom = 1; + UpdateVmodel(self.weaponmodel, GetWepSkin(self.weapon)); + UpdateV2model(self.weapon2model, 0); + +#endif // FTE + + } + // // Force-ADS if toggled // @@ -1975,6 +1999,9 @@ void () Weapon_Logic = #endif // FTE } else if (self.reload_delay < time && self.reload_delay2 < time && self.knife_delay < time && self.grenade_delay < time) { + if (self.stance == 0 && self.velocity) + return; + W_AimIn(); #ifdef FTE @@ -2066,6 +2093,9 @@ void () Weapon_Logic = self.ads_toggle = !self.ads_toggle; self.ads_release = false; } else { + if (self.stance == 0 && self.velocity) + return; + W_AimIn(); #ifdef FTE