From 36625658796a3bf0e9aca7abe6fa34402177ba28 Mon Sep 17 00:00:00 2001 From: Marco Hladik Date: Wed, 6 Jan 2021 15:54:17 +0100 Subject: [PATCH] Unscrew player animation and fix a bug involving botlib overriding important playermethods on bot-clients with CBaseEntity ones. --- src/client/player.c | 2 -- src/client/valve/player.c | 2 +- src/server/entry.c | 12 +++++----- src/server/valve/client.c | 1 + src/server/valve/gamerules.cpp | 2 -- src/server/weapons.h | 1 - src/shared/cstrike/animations.c | 3 +-- src/shared/cstrike/include.src | 4 ++-- src/shared/valve/animations.c | 38 +++++++++++++++++++++----------- src/shared/valve/w_crowbar.c | 2 +- src/shared/valve/weapon_common.c | 2 -- src/shared/valve/weapon_common.h | 1 + 12 files changed, 38 insertions(+), 32 deletions(-) diff --git a/src/client/player.c b/src/client/player.c index 83aa906d..0c9028d7 100644 --- a/src/client/player.c +++ b/src/client/player.c @@ -115,8 +115,6 @@ player::draw(void) } } -var float autocvar_standheight = 0; -var float autocvar_crouchheight = 0; float player::predraw(void) { diff --git a/src/client/valve/player.c b/src/client/valve/player.c index e970f1c4..9d88e845 100644 --- a/src/client/valve/player.c +++ b/src/client/valve/player.c @@ -49,7 +49,7 @@ Player_ReceiveEntity(float new) float fl; player pl = (player)self; - if (new == TRUE) { + if (new == TRUE || pl.classname != "player") { spawnfunc_player(); pl.classname = "player"; pl.solid = SOLID_SLIDEBOX; diff --git a/src/server/entry.c b/src/server/entry.c index e89d1e79..3d293b04 100644 --- a/src/server/entry.c +++ b/src/server/entry.c @@ -47,6 +47,12 @@ void ClientConnect(float csqc_active) { int playercount = 0; +#ifdef BOT_INCLUDED + if (clienttype(self) == CLIENTTYPE_BOT) { + spawnfunc_bot(); + } else +#endif + /* make sure you never change the classname. ever. */ if (self.classname != "player") { spawnfunc_player(); @@ -148,12 +154,6 @@ void PutClientInServer(void) { g_grMode.PlayerSpawn((base_player)self); -#ifdef BOT_INCLUDED - if (clienttype(self) == CLIENTTYPE_BOT) { - spawnfunc_bot(); - } -#endif - /* activate all game_playerspawn entities */ for (entity a = world; (a = find(a, ::targetname, "game_playerspawn"));) { CBaseTrigger t = (CBaseTrigger)a; diff --git a/src/server/valve/client.c b/src/server/valve/client.c index 2a81dca8..d06d4159 100644 --- a/src/server/valve/client.c +++ b/src/server/valve/client.c @@ -19,6 +19,7 @@ void Game_RunClientCommand(void) { Footsteps_Update(); + Animation_PlayerUpdate(); PMove_Run(); } diff --git a/src/server/valve/gamerules.cpp b/src/server/valve/gamerules.cpp index 8bc4119a..d6434b51 100644 --- a/src/server/valve/gamerules.cpp +++ b/src/server/valve/gamerules.cpp @@ -114,8 +114,6 @@ HLGameRules::LevelNewParms(void) void HLGameRules::PlayerPostFrame(base_player pl) { - Animation_PlayerUpdate(); - if (autocvar_sv_playerkeepalive) pl.SendFlags |= PLAYER_KEEPALIVE; diff --git a/src/server/weapons.h b/src/server/weapons.h index 43832664..07352be0 100644 --- a/src/server/weapons.h +++ b/src/server/weapons.h @@ -14,7 +14,6 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ -float Weapons_GetAim(int); void Weapons_PickupNotify(base_player pl, int w); void Weapons_RefreshAmmo(base_player pl); void Weapons_SwitchBest(base_player pl); diff --git a/src/shared/cstrike/animations.c b/src/shared/cstrike/animations.c index 8dd8527d..83e7422e 100755 --- a/src/shared/cstrike/animations.c +++ b/src/shared/cstrike/animations.c @@ -47,13 +47,12 @@ depending on what the player is doing */ void Animation_PlayerUpdate(void) { self.basebone = cvar("spinebone"); // gettagindex(self, "Bip01 Spine"); -#ifdef SERVER + if (self.baseframe_time < time) { base_player pl = (base_player)self; self.baseframe = Weapons_GetAim(pl.activeweapon); self.baseframe_old = self.frame; } -#endif /* in order to appear jumping, we want to not be on ground, * but also make sure we're not just going down a ramp */ diff --git a/src/shared/cstrike/include.src b/src/shared/cstrike/include.src index c5d84aba..0e10e9c0 100644 --- a/src/shared/cstrike/include.src +++ b/src/shared/cstrike/include.src @@ -1,9 +1,10 @@ #includelist ../../shared/cstrike/defs.h ../../shared/cstrike/flags.h +../../shared/cstrike/player.h +../../shared/valve/weapon_common.h ../../shared/cstrike/animations.h ../../shared/cstrike/animations.c -../../shared/cstrike/player.h ../../shared/cstrike/item_c4bomb.h @@ -17,7 +18,6 @@ ../../shared/cstrike/fx_smokenade.c ../../shared/cstrike/weapons_cstrike.c -../../shared/valve/weapon_common.h ../../shared/cstrike/w_ak47.c ../../shared/cstrike/w_deagle.c ../../shared/cstrike/w_knife.c diff --git a/src/shared/valve/animations.c b/src/shared/valve/animations.c index ee7942aa..59dd1c54 100755 --- a/src/shared/valve/animations.c +++ b/src/shared/valve/animations.c @@ -14,18 +14,22 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +.float baselerpfrac; +.float lerpfrac; .float frame_time; .float frame_old; .float fWasCrouching; +.float frame2time; +.float frame2; +.float baseframe2time; +.float baseframe1time; +.float baseframe2; // For lerping, sigh -#ifdef CLIENT .float frame_last; .float baseframe_last; -#else .float subblendfrac; .float subblend2frac; -#endif void Animation_Print(string sWow) { #ifdef CLIENT @@ -35,6 +39,9 @@ void Animation_Print(string sWow) { #endif } +var int autocvar_bone_spinebone = 0; +var int autocvar_bone_baseframe = 0; +var int autocvar_bone_frame = 0; /* ================= Animation_PlayerUpdate @@ -43,10 +50,11 @@ Called every frame to update the animation sequences depending on what the player is doing ================= */ -void Animation_PlayerUpdate(void) { - self.basebone = gettagindex(self, "Bip01 Spine"); +void +Animation_PlayerUpdate(void) +{ + self.basebone = gettagindex(self, "Bip01 Spine1"); -#ifdef SERVER // TODO: Make this faster if (self.frame_time < time) { player pl = (player)self; @@ -77,9 +85,7 @@ void Animation_PlayerUpdate(void) { self.baseframe = ANIM_RUN; } } -#endif -#ifdef CLIENT // Lerp it down! if (self.lerpfrac > 0) { self.lerpfrac -= frametime * 5; @@ -124,7 +130,7 @@ void Animation_PlayerUpdate(void) { } self.subblend2frac = self.angles[0]; -#endif + self.angles[0] = self.angles[2] = 0; if (!(self.flags & FL_ONGROUND)) { @@ -138,7 +144,7 @@ void Animation_PlayerUpdate(void) { self.fWasCrouching = (self.flags & FL_CROUCHING); } -#ifdef SERVER +#ifndef CLIENT // On the CSQC it's done in Player.c self.subblendfrac = self.subblend2frac = self.v_angle[0] / 90; @@ -152,15 +158,21 @@ Animation_PlayerTop Changes the animation sequence for the upper body part ================= */ -void Animation_PlayerTop(float fFrame) { +void +Animation_PlayerTop(float fFrame) +{ +#ifndef CLIENT self.frame = fFrame; self.frame_old = fFrame; +#endif } -void Animation_PlayerTopTemp(float fFrame, float fTime) { +void +Animation_PlayerTopTemp(float fFrame, float fTime) +{ +#ifndef CLIENT self.frame = fFrame; self.frame_time = time + fTime; -#ifdef SERVER self.SendFlags |= PLAYER_FRAME; #endif } diff --git a/src/shared/valve/w_crowbar.c b/src/shared/valve/w_crowbar.c index 74060a12..ab4e26a2 100644 --- a/src/shared/valve/w_crowbar.c +++ b/src/shared/valve/w_crowbar.c @@ -127,13 +127,13 @@ w_crowbar_primary(void) Weapons_ViewAnimation(trace_fraction >= 1 ? CBAR_ATTACK3MISS:CBAR_ATTACK3HIT); } -#ifdef SERVER if (pl.flags & FL_CROUCHING) { Animation_PlayerTopTemp(ANIM_SHOOTCROWBAR, 0.5f); } else { Animation_PlayerTopTemp(ANIM_CR_SHOOTCROWBAR, 0.42f); } +#ifdef SERVER Sound_Play(self, CHAN_WEAPON, "weapon_crowbar.miss"); if (trace_fraction >= 1.0) { diff --git a/src/shared/valve/weapon_common.c b/src/shared/valve/weapon_common.c index b5fc342e..3ab43a77 100644 --- a/src/shared/valve/weapon_common.c +++ b/src/shared/valve/weapon_common.c @@ -200,7 +200,6 @@ string Weapons_GetDeathmessage(int id) return ""; } -#ifdef SERVER float Weapons_GetAim(int id) { if (g_weapons[id].aimanim != __NULL__) { @@ -209,7 +208,6 @@ float Weapons_GetAim(int id) return 0; } -#endif #ifdef CLIENT void Weapons_HUDPic(int id, int s, vector pos, float a) diff --git a/src/shared/valve/weapon_common.h b/src/shared/valve/weapon_common.h index 36863241..ebe3024e 100644 --- a/src/shared/valve/weapon_common.h +++ b/src/shared/valve/weapon_common.h @@ -40,6 +40,7 @@ typedef struct void(int, vector, float) hudpic; } weapon_t; +float Weapons_GetAim(int); void Weapons_Reload(void); void Weapons_DrawCrosshair(void); void Weapons_MakeVectors(void);