X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;ds=sidebyside;f=qcsrc%2Fcommon%2Fphysics.qc;h=1a799c8de79c903edef70a5db80115bc103d657b;hb=33cc9bcffae3eb87b65d706e98dce250667cc1d2;hp=4143ad3b11a71e651fba7b32e129f132692ea702;hpb=a16bfaa11ae87fe6fdab9e6c4504e2c5528ea595;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/physics.qc b/qcsrc/common/physics.qc index 4143ad3b1..1a799c8de 100644 --- a/qcsrc/common/physics.qc +++ b/qcsrc/common/physics.qc @@ -25,15 +25,15 @@ float Physics_ClientOption(entity pl, string option) { if(Physics_Valid(pl.cvar_cl_physics)) { - string var = sprintf("g_physics_%s_%s", pl.cvar_cl_physics, option); - if(cvar_type(var) & CVAR_TYPEFLAG_EXISTS) - return cvar(var); + string s = sprintf("g_physics_%s_%s", pl.cvar_cl_physics, option); + if(cvar_type(s) & CVAR_TYPEFLAG_EXISTS) + return cvar(s); } if(autocvar_g_physics_clientselect && autocvar_g_physics_clientselect_default) { - string var = sprintf("g_physics_%s_%s", autocvar_g_physics_clientselect_default, option); - if(cvar_type(var) & CVAR_TYPEFLAG_EXISTS) - return cvar(var); + string s = sprintf("g_physics_%s_%s", autocvar_g_physics_clientselect_default, option); + if(cvar_type(s) & CVAR_TYPEFLAG_EXISTS) + return cvar(s); } return cvar(strcat("sv_", option)); } @@ -116,7 +116,7 @@ void Physics_AddStats() } void Physics_UpdateStats(float maxspd_mod) -{ +{SELFPARAM(); // blah self.stat_pl_view_ofs = PL_VIEW_OFS; self.stat_pl_crouch_view_ofs = PL_CROUCH_VIEW_OFS; @@ -222,7 +222,7 @@ vector unstick_offsets[unstick_count] = }; void PM_ClientMovement_Unstick() -{ +{SELFPARAM(); float i; for (i = 0; i < unstick_count; i++) { @@ -237,7 +237,7 @@ void PM_ClientMovement_Unstick() } void PM_ClientMovement_UpdateStatus(bool ground) -{ +{SELFPARAM(); // make sure player is not stuck PM_ClientMovement_Unstick(); @@ -308,7 +308,7 @@ void PM_ClientMovement_UpdateStatus(bool ground) } void PM_ClientMovement_Move() -{ +{SELFPARAM(); #ifdef CSQC int bump; float t; @@ -327,7 +327,7 @@ void PM_ClientMovement_Move() vector trace1_plane_normal = '0 0 0'; vector trace2_plane_normal = '0 0 0'; vector trace3_plane_normal = '0 0 0'; - + PM_ClientMovement_UpdateStatus(false); primalvelocity = self.velocity; @@ -397,7 +397,7 @@ void PM_ClientMovement_Move() } void CPM_PM_Aircontrol(vector wishdir, float wishspeed) -{ +{SELFPARAM(); float k = 32 * (2 * IsMoveInDirection(self.movement, 0) - 1); if (k <= 0) return; @@ -434,7 +434,7 @@ float AdjustAirAccelQW(float accelqw, float factor) // prvm_globalset server speedclamp_mode 1 // (or 2) void PM_Accelerate(vector wishdir, float wishspeed, float wishspeed0, float accel, float accelqw, float stretchfactor, float sidefric, float speedlimit) -{ +{SELFPARAM(); float speedclamp = stretchfactor > 0 ? stretchfactor : accelqw < 0 ? 1 // full clamping, no stretch : -1; // no clamping @@ -498,7 +498,7 @@ void PM_Accelerate(vector wishdir, float wishspeed, float wishspeed0, float acce } void PM_AirAccelerate(vector wishdir, float wishspeed) -{ +{SELFPARAM(); if (wishspeed == 0) return; @@ -541,7 +541,7 @@ returns true if handled ============= */ bool PlayerJump (void) -{ +{SELFPARAM(); if (PHYS_FROZEN(self)) return true; // no jumping in freezetag when frozen @@ -552,15 +552,16 @@ bool PlayerJump (void) bool doublejump = false; float mjumpheight = PHYS_JUMPVELOCITY; - +#ifdef CSQC player_multijump = doublejump; player_jumpheight = mjumpheight; -#ifdef SVQC - if (MUTATOR_CALLHOOK(PlayerJump)) -#elif defined(CSQC) - if(PM_multijump_checkjump()) #endif - return true; + + if (MUTATOR_CALLHOOK(PlayerJump, doublejump, mjumpheight) +#ifdef CSQC + || PM_multijump_checkjump() +#endif + ) { return true; } doublejump = player_multijump; mjumpheight = player_jumpheight; @@ -624,7 +625,7 @@ bool PlayerJump (void) { #ifdef SVQC if(autocvar_speedmeter) - dprint(strcat("landing velocity: ", vtos(self.velocity), " (abs: ", ftos(vlen(self.velocity)), ")\n")); + LOG_TRACE(strcat("landing velocity: ", vtos(self.velocity), " (abs: ", ftos(vlen(self.velocity)), ")\n")); #endif if(self.lastground < time - 0.3) { @@ -633,7 +634,7 @@ bool PlayerJump (void) } #ifdef SVQC if(self.jumppadcount > 1) - dprint(strcat(ftos(self.jumppadcount), "x jumppad combo\n")); + LOG_TRACE(strcat(ftos(self.jumppadcount), "x jumppad combo\n")); self.jumppadcount = 0; #endif } @@ -656,7 +657,7 @@ bool PlayerJump (void) } void CheckWaterJump() -{ +{SELFPARAM(); // check for a jump-out-of-water makevectors(self.v_angle); vector start = self.origin; @@ -696,7 +697,7 @@ void CheckWaterJump() // Hack: shouldn't need to know about this .float multijump_count; void CheckPlayerJump() -{ +{SELFPARAM(); #ifdef SVQC float was_flying = ITEMS_STAT(self) & IT_USING_JETPACK; #endif @@ -709,7 +710,7 @@ void CheckPlayerJump() float activate = JETPACK_JUMP(self) && air_jump && PHYS_INPUT_BUTTON_JUMP(self) || PHYS_INPUT_BUTTON_JETPACK(self); float has_fuel = !PHYS_JETPACK_FUEL || PHYS_AMMO_FUEL(self) || ITEMS_STAT(self) & IT_UNLIMITED_WEAPON_AMMO; - if (!(ITEMS_STAT(self) & IT_JETPACK)) { } + if (!(ITEMS_STAT(self) & ITEM_Jetpack.m_itemid)) { } else if (self.jetpack_stopped) { } else if (!has_fuel) { @@ -756,7 +757,7 @@ float racecar_angle(float forward, float down) } void RaceCarPhysics() -{ +{SELFPARAM(); #ifdef SVQC // using this move type for "big rigs" // the engine does not push the entity! @@ -970,22 +971,13 @@ void SpecialCommand() TetrisImpulse(); #else if (!CheatImpulse(99)) - print("A hollow voice says \"Plugh\".\n"); + LOG_INFO("A hollow voice says \"Plugh\".\n"); #endif #endif } -float PM_check_keepaway(void) -{ -#ifdef SVQC - return (self.ballcarried && g_keepaway) ? autocvar_g_keepaway_ballcarrier_highspeed : 1; -#else - return 1; -#endif -} - void PM_check_race_movetime(void) -{ +{SELFPARAM(); #ifdef SVQC self.race_movetime_frac += PHYS_INPUT_TIMELENGTH; float f = floor(self.race_movetime_frac); @@ -996,7 +988,7 @@ void PM_check_race_movetime(void) } float PM_check_specialcommand(float buttons) -{ +{SELFPARAM(); #ifdef SVQC string c; if (!buttons) @@ -1033,7 +1025,7 @@ float PM_check_specialcommand(float buttons) } void PM_check_nickspam(void) -{ +{SELFPARAM(); #ifdef SVQC if (time >= self.nickspamtime) return; @@ -1055,7 +1047,7 @@ void PM_check_nickspam(void) } void PM_check_punch() -{ +{SELFPARAM(); #ifdef SVQC if (self.punchangle != '0 0 0') { @@ -1078,7 +1070,7 @@ void PM_check_punch() } void PM_check_spider(void) -{ +{SELFPARAM(); #ifdef SVQC if (time >= self.spider_slowness) return; @@ -1091,7 +1083,7 @@ void PM_check_spider(void) // predict frozen movement, as frozen players CAN move in some cases void PM_check_frozen(void) -{ +{SELFPARAM(); if (!PHYS_FROZEN(self)) return; if (PHYS_DODGING_FROZEN @@ -1118,7 +1110,7 @@ void PM_check_frozen(void) } void PM_check_hitground() -{ +{SELFPARAM(); #ifdef SVQC if (IS_ONGROUND(self)) if (IS_PLAYER(self)) // no fall sounds for observers thank you very much @@ -1145,7 +1137,7 @@ void PM_check_hitground() } void PM_check_blocked(void) -{ +{SELFPARAM(); #ifdef SVQC if (!self.player_blocked) return; @@ -1159,7 +1151,7 @@ float speedaward_lastsent; float speedaward_lastupdate; #endif void PM_check_race(void) -{ +{SELFPARAM(); #ifdef SVQC if(!(g_cts || g_race)) return; @@ -1189,11 +1181,11 @@ void PM_check_race(void) } void PM_check_vortex(void) -{ +{SELFPARAM(); #ifdef SVQC // WEAPONTODO float xyspeed = vlen(vec2(self.velocity)); - if (self.weapon == WEP_VORTEX && WEP_CVAR(vortex, charge) && WEP_CVAR(vortex, charge_velocity_rate) && xyspeed > WEP_CVAR(vortex, charge_minspeed)) + if (self.weapon == WEP_VORTEX.m_id && WEP_CVAR(vortex, charge) && WEP_CVAR(vortex, charge_velocity_rate) && xyspeed > WEP_CVAR(vortex, charge_minspeed)) { // add a maximum of charge_velocity_rate when going fast (f = 1), gradually increasing from minspeed (f = 0) to maxspeed xyspeed = min(xyspeed, WEP_CVAR(vortex, charge_maxspeed)); @@ -1205,7 +1197,7 @@ void PM_check_vortex(void) } void PM_fly(float maxspd_mod) -{ +{SELFPARAM(); // noclipping or flying UNSET_ONGROUND(self); @@ -1226,7 +1218,7 @@ void PM_fly(float maxspd_mod) } void PM_swim(float maxspd_mod) -{ +{SELFPARAM(); // swimming UNSET_ONGROUND(self); @@ -1309,7 +1301,7 @@ void PM_swim(float maxspd_mod) } void PM_ladder(float maxspd_mod) -{ +{SELFPARAM(); // on a spawnfunc_func_ladder or swimming in spawnfunc_func_water UNSET_ONGROUND(self); @@ -1362,7 +1354,7 @@ void PM_ladder(float maxspd_mod) } void PM_jetpack(float maxspd_mod) -{ +{SELFPARAM(); //makevectors(self.v_angle.y * '0 1 0'); makevectors(self.v_angle); vector wishvel = v_forward * self.movement_x @@ -1478,18 +1470,18 @@ void PM_jetpack(float maxspd_mod) } void PM_walk(float buttons_prev, float maxspd_mod) -{ +{SELFPARAM(); if (!WAS_ONGROUND(self)) { #ifdef SVQC if (autocvar_speedmeter) - dprint(strcat("landing velocity: ", vtos(self.velocity), " (abs: ", ftos(vlen(self.velocity)), ")\n")); + LOG_TRACE(strcat("landing velocity: ", vtos(self.velocity), " (abs: ", ftos(vlen(self.velocity)), ")\n")); #endif if (self.lastground < time - 0.3) self.velocity *= (1 - PHYS_FRICTION_ONLAND); #ifdef SVQC if (self.jumppadcount > 1) - dprint(strcat(ftos(self.jumppadcount), "x jumppad combo\n")); + LOG_TRACE(strcat(ftos(self.jumppadcount), "x jumppad combo\n")); self.jumppadcount = 0; #endif } @@ -1563,7 +1555,7 @@ void PM_walk(float buttons_prev, float maxspd_mod) } void PM_air(float buttons_prev, float maxspd_mod) -{ +{SELFPARAM(); makevectors(self.v_angle.y * '0 1 0'); vector wishvel = v_forward * self.movement.x + v_right * self.movement.y; @@ -1649,7 +1641,7 @@ bool IsFlying(entity a) } void PM_Main() -{ +{SELFPARAM(); int buttons = PHYS_INPUT_BUTTON_MASK(self); #ifdef CSQC self.items = getstati(STAT_ITEMS, 0, 24); @@ -1668,13 +1660,12 @@ void PM_Main() PM_ClientMovement_UpdateStatus(true); #endif - + #ifdef SVQC WarpZone_PlayerPhysics_FixVAngle(); #endif float maxspeed_mod = 1; - maxspeed_mod *= PM_check_keepaway(); maxspeed_mod *= PHYS_HIGHSPEED; #ifdef SVQC @@ -1885,7 +1876,7 @@ void PM_Main() RaceCarPhysics(); #endif - else if (self.movetype == MOVETYPE_NOCLIP || self.movetype == MOVETYPE_FLY || self.movetype == MOVETYPE_FLY_WORLDONLY || (BUFFS(self) & BUFF_FLIGHT)) + else if (self.movetype == MOVETYPE_NOCLIP || self.movetype == MOVETYPE_FLY || self.movetype == MOVETYPE_FLY_WORLDONLY || (BUFFS_STAT(self) & BUFF_FLIGHT.m_itemid)) PM_fly(maxspeed_mod); else if (self.waterlevel >= WATERLEVEL_SWIMMING) @@ -1932,11 +1923,11 @@ void SV_PlayerPhysics(void) #elif defined(CSQC) void CSQC_ClientMovement_PlayerMove_Frame(void) #endif -{ +{SELFPARAM(); PM_Main(); #ifdef CSQC - self.pmove_flags = + self.pmove_flags = ((self.flags & FL_DUCKED) ? PMF_DUCKED : 0) | (!(self.flags & FL_JUMPRELEASED) ? 0 : PMF_JUMP_HELD) | ((self.flags & FL_ONGROUND) ? PMF_ONGROUND : 0);