-#ifndef COMMON_PHYSICS_H
-#define COMMON_PHYSICS_H
+#pragma once
// Client/server mappings
#endif
.vector movement_old;
-.float buttons_old;
.vector v_angle_old;
.string lastclassname;
-.float() PlayerPhysplug;
+.float(entity,float) PlayerPhysplug;
float AdjustAirAccelQW(float accelqw, float factor);
bool IsFlying(entity a);
-#define BUFFS_STAT(s) STAT(BUFFS, s)
+#define PHYS_PL_MAX(s) STAT(PL_MAX, s)
+#define PHYS_PL_MIN(s) STAT(PL_MIN, s)
+#define PHYS_PL_CROUCH_MAX(s) STAT(PL_CROUCH_MAX, s)
+#define PHYS_PL_CROUCH_MIN(s) STAT(PL_CROUCH_MIN, s)
+
+#define PHYS_PL_VIEWOFS(s) STAT(PL_VIEW_OFS, s)
+#define PHYS_PL_CROUCH_VIEWOFS(s) STAT(PL_CROUCH_VIEW_OFS, s)
-#define GAMEPLAYFIX_DOWNTRACEONGROUND(s) STAT(GAMEPLAYFIX_DOWNTRACEONGROUND, s)
-#define GAMEPLAYFIX_EASIERWATERJUMP(s) STAT(GAMEPLAYFIX_EASIERWATERJUMP, s)
-#define GAMEPLAYFIX_STEPDOWN(s) STAT(GAMEPLAYFIX_STEPDOWN, s)
-#define GAMEPLAYFIX_STEPMULTIPLETIMES(s) STAT(GAMEPLAYFIX_STEPMULTIPLETIMES, s)
-#define GAMEPLAYFIX_UNSTICKPLAYERS(s) STAT(GAMEPLAYFIX_UNSTICKPLAYERS, s)
+#define PHYS_VIEWHEIGHT(s) STAT(VIEWHEIGHT, s)
+#define PHYS_HEALTH(s) STAT(HEALTH, s)
+
+#define BUFFS_STAT(s) STAT(BUFFS, s)
#define PHYS_ACCELERATE(s) STAT(MOVEVARS_ACCELERATE, s)
#define PHYS_AIRACCELERATE(s) STAT(MOVEVARS_AIRACCELERATE, s)
#define PHYS_AIRCONTROL(s) STAT(MOVEVARS_AIRCONTROL, s)
#define PHYS_AIRCONTROL_PENALTY(s) STAT(MOVEVARS_AIRCONTROL_PENALTY, s)
#define PHYS_AIRCONTROL_POWER(s) STAT(MOVEVARS_AIRCONTROL_POWER, s)
+#define PHYS_AIRCONTROL_BACKWARDS(s) STAT(MOVEVARS_AIRCONTROL_BACKWARDS, s)
+#define PHYS_AIRCONTROL_SIDEWARDS(s) STAT(MOVEVARS_AIRCONTROL_SIDEWARDS, s)
#define PHYS_AIRSPEEDLIMIT_NONQW(s) STAT(MOVEVARS_AIRSPEEDLIMIT_NONQW, s)
#define PHYS_AIRSTOPACCELERATE(s) STAT(MOVEVARS_AIRSTOPACCELERATE, s)
#define PHYS_AIRSTRAFEACCELERATE(s) STAT(MOVEVARS_AIRSTRAFEACCELERATE, s)
#define PHYS_JETPACK_FUEL(s) STAT(JETPACK_FUEL, s)
#define PHYS_JETPACK_MAXSPEED_SIDE(s) STAT(JETPACK_MAXSPEED_SIDE, s)
#define PHYS_JETPACK_MAXSPEED_UP(s) STAT(JETPACK_MAXSPEED_UP, s)
+#define PHYS_JETPACK_REVERSE_THRUST(s) STAT(JETPACK_REVERSE_THRUST, s)
-#define PHYS_JUMPSPEEDCAP_DISABLE_ONRAMPS(s) STAT(MOVEVARS_JUMPSPEEDCAP_DISABLE_ONRAMPS, s)
-#define PHYS_JUMPSTEP(s) STAT(MOVEVARS_JUMPSTEP, s)
+#define PHYS_JUMPSPEEDCAP_DISABLE_ONRAMPS(s) STAT(MOVEVARS_JUMPSPEEDCAP_DISABLE_ONRAMPS, NULL)
#define PHYS_JUMPVELOCITY(s) STAT(MOVEVARS_JUMPVELOCITY, s)
#define PHYS_MAXAIRSPEED(s) STAT(MOVEVARS_MAXAIRSPEED, s)
#define PHYS_MAXAIRSTRAFESPEED(s) STAT(MOVEVARS_MAXAIRSTRAFESPEED, s)
#define PHYS_MAXSPEED(s) STAT(MOVEVARS_MAXSPEED, s)
-#define PHYS_NOSTEP(s) STAT(NOSTEP, s)
-#define PHYS_STEPHEIGHT(s) STAT(MOVEVARS_STEPHEIGHT, s)
-
#define PHYS_STOPSPEED(s) STAT(MOVEVARS_STOPSPEED, s)
#define PHYS_TRACK_CANJUMP(s) STAT(MOVEVARS_TRACK_CANJUMP, s)
-#define PHYS_WALLFRICTION(s) STAT(MOVEVARS_WALLFRICTION, s)
-
#define PHYS_WARSOWBUNNY_ACCEL(s) STAT(MOVEVARS_WARSOWBUNNY_ACCEL, s)
#define PHYS_WARSOWBUNNY_AIRFORWARDACCEL(s) STAT(MOVEVARS_WARSOWBUNNY_AIRFORWARDACCEL, s)
#define PHYS_WARSOWBUNNY_BACKTOSIDERATIO(s) STAT(MOVEVARS_WARSOWBUNNY_BACKTOSIDERATIO, s)
#define PHYS_WARSOWBUNNY_TOPSPEED(s) STAT(MOVEVARS_WARSOWBUNNY_TOPSPEED, s)
#define PHYS_WARSOWBUNNY_TURNACCEL(s) STAT(MOVEVARS_WARSOWBUNNY_TURNACCEL, s)
-#define UPWARD_VELOCITY_CLEARS_ONGROUND(s) STAT(GAMEPLAYFIX_UPVELOCITYCLEARSONGROUND, s)
+#define PHYS_SLICK_APPLYGRAVITY(s) STAT(SLICK_APPLYGRAVITY, NULL)
#define PHYS_INPUT_BUTTON_ATCK(s) PHYS_INPUT_BUTTON_BUTTON1(s)
#define PHYS_INPUT_BUTTON_JUMP(s) PHYS_INPUT_BUTTON_BUTTON2(s)
#define PHYS_INPUT_BUTTON_ZOOM(s) PHYS_INPUT_BUTTON_BUTTON4(s)
#define PHYS_INPUT_BUTTON_CROUCH(s) PHYS_INPUT_BUTTON_BUTTON5(s)
#define PHYS_INPUT_BUTTON_HOOK(s) PHYS_INPUT_BUTTON_BUTTON6(s)
+
+#ifdef CSQC
+STATIC_INIT(PHYS_INPUT_BUTTON_HOOK)
+{
+ localcmd("alias +hook +button6\n");
+ localcmd("alias -hook -button6\n");
+}
+#endif
+
#define PHYS_INPUT_BUTTON_INFO(s) PHYS_INPUT_BUTTON_BUTTON7(s)
#define PHYS_INPUT_BUTTON_DRAG(s) PHYS_INPUT_BUTTON_BUTTON8(s)
#define PHYS_INPUT_BUTTON_USE(s) PHYS_INPUT_BUTTON_BUTTON_USE(s)
#define PHYS_INPUT_BUTTON_PRYDON(s) PHYS_INPUT_BUTTON_BUTTON_PRYDON(s)
#define PHYS_INPUT_BUTTON_ZOOMSCRIPT(s) PHYS_INPUT_BUTTON_BUTTON9(s)
#define PHYS_INPUT_BUTTON_JETPACK(s) PHYS_INPUT_BUTTON_BUTTON10(s)
+#define PHYS_INPUT_BUTTON_DODGE(s) PHYS_INPUT_BUTTON_BUTTON11(s)
+
+#ifdef CSQC
+STATIC_INIT(PHYS_INPUT_BUTTON_JETPACK)
+{
+ localcmd("alias +jetpack +button10\n");
+ localcmd("alias -jetpack -button10\n");
+}
+
+STATIC_INIT(PHYS_INPUT_BUTTON_DODGE)
+{
+ localcmd("alias +dodge +button11\n");
+ localcmd("alias -dodge -button11\n");
+}
+#endif
// if more buttons are needed, start using impulse bits as buttons
#define UNSET_JUMP_HELD(s) ((s).flags |= FL_JUMPRELEASED)
#define WAS_ONGROUND(s) boolean((s).lastflags & FL_ONGROUND)
+#define WAS_ONSLICK(s) boolean((s).lastflags & FL_ONSLICK)
#define ITEMS_STAT(s) ((s).items)
+.float teleport_time;
+#define PHYS_TELEPORT_TIME(s) ((s).teleport_time)
+
+.float waterjump_time;
+#define PHYS_WATERJUMP_TIME(s) ((s).waterjump_time)
+
#ifdef CSQC
+ #define PHYS_FIXANGLE(s) ('0 0 0')
+
string autocvar_cl_jumpspeedcap_min;
string autocvar_cl_jumpspeedcap_max;
- noref float pmove_waterjumptime;
-
const int FL_WATERJUMP = 2048; // player jumping out of water
const int FL_JUMPRELEASED = 4096; // for jump debouncing
.vector movement;
.vector v_angle;
+ .entity hook;
+
// TODO
- #define IS_CLIENT(s) ((s).isplayermodel)
+ #define IS_CLIENT(s) ((s).isplayermodel || (s) == csqcplayer)
#define IS_PLAYER(s) ((s).isplayermodel)
- #define IS_NOT_A_CLIENT(s) (!(s).isplayermodel)
+ #define IS_NOT_A_CLIENT(s) (!(s).isplayermodel && (s) != csqcplayer)
#define isPushable(s) ((s).isplayermodel || (s).pushable || ((s).flags & FL_PROJECTILE))
//float player_multijump;
//float player_jumpheight;
- #define PHYS_GRAVITY(s) STAT(MOVEVARS_GRAVITY, s)
-
- #define PHYS_TELEPORT_TIME(s) ((s).teleport_time)
-
- #define TICRATE ticrate
-
#define PHYS_INPUT_ANGLES(s) input_angles
// TODO
#define PHYS_WORLD_ANGLES(s) input_angles
#define PHYS_INPUT_FRAMETIME serverdeltatime
#define PHYS_INPUT_MOVEVALUES(s) input_movevalues
+ #define PHYS_CS(s) (s)
#define PHYS_INPUT_BUTTON_BUTTON1(s) boolean(input_buttons & BIT(0))
#define PHYS_INPUT_BUTTON_BUTTON2(s) boolean(input_buttons & BIT(1))
#define PHYS_INPUT_BUTTON_BUTTON15(s) boolean(input_buttons & BIT(17))
#define PHYS_INPUT_BUTTON_BUTTON16(s) boolean(input_buttons & BIT(18))
- #define GAMEPLAYFIX_GRAVITYUNAFFECTEDBYTICRATE (boolean(moveflags & MOVEFLAG_GRAVITYUNAFFECTEDBYTICRATE))
- #define GAMEPLAYFIX_NOGRAVITYONGROUND (boolean(moveflags & MOVEFLAG_NOGRAVITYONGROUND))
- #define GAMEPLAYFIX_Q2AIRACCELERATE (boolean(moveflags & MOVEFLAG_Q2AIRACCELERATE))
-
#define IS_DUCKED(s) (boolean((s).flags & FL_DUCKED))
#define SET_DUCKED(s) ((s).flags |= FL_DUCKED)
#define UNSET_DUCKED(s) ((s).flags &= ~FL_DUCKED)
#define PHYS_JUMPSPEEDCAP_MAX autocvar_cl_jumpspeedcap_max
#define PHYS_CL_TRACK_CANJUMP(s) STAT(MOVEVARS_CL_TRACK_CANJUMP, s)
- // FIXME: 0 doesn't mean zero gravity
- #define PHYS_ENTGRAVITY(s) STAT(MOVEVARS_ENTGRAVITY, s)
#elif defined(SVQC)
+ #define PHYS_FIXANGLE(s) ((s).fixangle)
+
bool Physics_Valid(string thecvar);
+ void Physics_UpdateStats(entity this, float maxspd_mod);
+
+ void PM_UpdateButtons(entity this, entity store);
+
.float stat_sv_airspeedlimit_nonqw = _STAT(MOVEVARS_AIRSPEEDLIMIT_NONQW);
.float stat_sv_maxspeed = _STAT(MOVEVARS_MAXSPEED);
.string jumpspeedcap_min;
.string jumpspeedcap_max;
- #define PHYS_TELEPORT_TIME(s) ((s).teleport_time)
-
- #define PHYS_GRAVITY(s) autocvar_sv_gravity
-
- #define TICRATE sys_frametime
-
#define PHYS_INPUT_ANGLES(s) ((s).v_angle)
#define PHYS_WORLD_ANGLES(s) ((s).angles)
#define PHYS_INPUT_TIMELENGTH frametime
#define PHYS_INPUT_FRAMETIME sys_frametime
- #define PHYS_INPUT_MOVEVALUES(s) ((s).movement)
-
- #define PHYS_INPUT_BUTTON_BUTTON1(s) ((s).button0)
- #define PHYS_INPUT_BUTTON_BUTTON2(s) ((s).button2)
- #define PHYS_INPUT_BUTTON_BUTTON3(s) ((s).button3)
- #define PHYS_INPUT_BUTTON_BUTTON4(s) ((s).button4)
- #define PHYS_INPUT_BUTTON_BUTTON5(s) ((s).button5)
- #define PHYS_INPUT_BUTTON_BUTTON6(s) ((s).button6)
- #define PHYS_INPUT_BUTTON_BUTTON7(s) ((s).button7)
- #define PHYS_INPUT_BUTTON_BUTTON8(s) ((s).button8)
- #define PHYS_INPUT_BUTTON_BUTTON_USE(s) ((s).buttonuse)
- #define PHYS_INPUT_BUTTON_BUTTON_CHAT(s) ((s).buttonchat)
- #define PHYS_INPUT_BUTTON_BUTTON_PRYDON(s) ((s).cursor_active)
- #define PHYS_INPUT_BUTTON_BUTTON9(s) ((s).button9)
- #define PHYS_INPUT_BUTTON_BUTTON10(s) ((s).button10)
- #define PHYS_INPUT_BUTTON_BUTTON11(s) ((s).button11)
- #define PHYS_INPUT_BUTTON_BUTTON12(s) ((s).button12)
- #define PHYS_INPUT_BUTTON_BUTTON13(s) ((s).button13)
- #define PHYS_INPUT_BUTTON_BUTTON14(s) ((s).button14)
- #define PHYS_INPUT_BUTTON_BUTTON15(s) ((s).button15)
- #define PHYS_INPUT_BUTTON_BUTTON16(s) ((s).button16)
-
- #define GAMEPLAYFIX_GRAVITYUNAFFECTEDBYTICRATE autocvar_sv_gameplayfix_gravityunaffectedbyticrate
- #define GAMEPLAYFIX_NOGRAVITYONGROUND autocvar_sv_gameplayfix_nogravityonground
- #define GAMEPLAYFIX_Q2AIRACCELERATE autocvar_sv_gameplayfix_q2airaccelerate
+ #define PHYS_INPUT_MOVEVALUES(s) CS(s).movement
+ #define PHYS_CS(s) CS(s)
+
+ #define PHYS_INPUT_BUTTON_BUTTON1(s) (CS(s).button0)
+ #define PHYS_INPUT_BUTTON_BUTTON2(s) (CS(s).button2)
+ #define PHYS_INPUT_BUTTON_BUTTON3(s) (CS(s).button3)
+ #define PHYS_INPUT_BUTTON_BUTTON4(s) (CS(s).button4)
+ #define PHYS_INPUT_BUTTON_BUTTON5(s) (CS(s).button5)
+ #define PHYS_INPUT_BUTTON_BUTTON6(s) (CS(s).button6)
+ #define PHYS_INPUT_BUTTON_BUTTON7(s) (CS(s).button7)
+ #define PHYS_INPUT_BUTTON_BUTTON8(s) (CS(s).button8)
+ #define PHYS_INPUT_BUTTON_BUTTON_USE(s) (CS(s).buttonuse)
+ #define PHYS_INPUT_BUTTON_BUTTON_CHAT(s) (CS(s).buttonchat)
+ #define PHYS_INPUT_BUTTON_BUTTON_PRYDON(s) (CS(s).cursor_active)
+ #define PHYS_INPUT_BUTTON_BUTTON9(s) (CS(s).button9)
+ #define PHYS_INPUT_BUTTON_BUTTON10(s) (CS(s).button10)
+ #define PHYS_INPUT_BUTTON_BUTTON11(s) (CS(s).button11)
+ #define PHYS_INPUT_BUTTON_BUTTON12(s) (CS(s).button12)
+ #define PHYS_INPUT_BUTTON_BUTTON13(s) (CS(s).button13)
+ #define PHYS_INPUT_BUTTON_BUTTON14(s) (CS(s).button14)
+ #define PHYS_INPUT_BUTTON_BUTTON15(s) (CS(s).button15)
+ #define PHYS_INPUT_BUTTON_BUTTON16(s) (CS(s).button16)
#define IS_DUCKED(s) ((s).crouch)
#define SET_DUCKED(s) ((s).crouch = true)
#define PHYS_JUMPSPEEDCAP_MAX autocvar_sv_jumpspeedcap_max
#define PHYS_CL_TRACK_CANJUMP(s) ((s).cvar_cl_movement_track_canjump)
- #define PHYS_ENTGRAVITY(s) ((s).gravity)
#endif
+#ifdef SVQC
+// FIXME/EXPLAINME: why? Mario: because
+vector autocvar_sv_player_maxs = '16 16 45';
+vector autocvar_sv_player_mins = '-16 -16 -24';
+vector autocvar_sv_player_viewoffset = '0 0 35';
+vector autocvar_sv_player_crouch_maxs = '16 16 25';
+vector autocvar_sv_player_crouch_mins = '-16 -16 -24';
+vector autocvar_sv_player_crouch_viewoffset = '0 0 20';
+//vector autocvar_sv_player_headsize = '24 24 12';
+#endif
+
REGISTER_NET_C2S(setpause)
#ifdef CSQC
void unpause_update()
return true;
}
#endif
-
-#endif