From ae04a199084b522cca7db98205c368a44778e68a Mon Sep 17 00:00:00 2001 From: Marco Hladik Date: Sat, 10 Apr 2021 10:26:59 +0200 Subject: [PATCH] Put the player animation code in line with upstream FreeHL --- src/server/gamerules.qc | 92 ----------------------------------------- src/shared/include.src | 2 +- src/shared/player.qc | 69 +++++++++++++++++++++++-------- 3 files changed, 52 insertions(+), 111 deletions(-) diff --git a/src/server/gamerules.qc b/src/server/gamerules.qc index b072fd3..e334f9b 100644 --- a/src/server/gamerules.qc +++ b/src/server/gamerules.qc @@ -226,98 +226,6 @@ void SHMultiplayerRules::PlayerPostFrame(base_player pp) { player pl = (player)pp; - Animation_PlayerUpdate(); - - if (autocvar_sv_playerkeepalive) - pl.SendFlags |= PLAYER_KEEPALIVE; - - if (pl.old_modelindex != pl.modelindex) - pl.SendFlags |= PLAYER_MODELINDEX; - - if (pl.old_origin[0] != pl.origin[0]) - pl.SendFlags |= PLAYER_ORIGIN; - - if (pl.old_origin[1] != pl.origin[1]) - pl.SendFlags |= PLAYER_ORIGIN; - - if (pl.old_origin[2] != pl.origin[2]) - pl.SendFlags |= PLAYER_ORIGIN_Z; - - if (pl.old_angles[0] != pl.v_angle[0]) - pl.SendFlags |= PLAYER_ANGLES_X; - - if (pl.old_angles[1] != pl.angles[1]) - pl.SendFlags |= PLAYER_ANGLES_Y; - - if (pl.old_angles[2] != pl.angles[2]) - pl.SendFlags |= PLAYER_ANGLES_Z; - - if (pl.old_velocity[0] != pl.velocity[0]) - pl.SendFlags |= PLAYER_VELOCITY; - - if (pl.old_velocity[1] != pl.velocity[1]) - pl.SendFlags |= PLAYER_VELOCITY; - - if (pl.old_velocity[2] != pl.velocity[2]) - pl.SendFlags |= PLAYER_VELOCITY_Z; - - if (pl.old_flags != pl.flags) - pl.SendFlags |= PLAYER_FLAGS; - - if (pl.old_gflags != pl.gflags) - pl.SendFlags |= PLAYER_FLAGS; - - if (pl.old_activeweapon != pl.activeweapon) - pl.SendFlags |= PLAYER_WEAPON; - - if (pl.old_items != pl.g_items) - pl.SendFlags |= PLAYER_ITEMS; - - if (pl.old_health != pl.health) - pl.SendFlags |= PLAYER_HEALTH; - - if (pl.old_armor != pl.armor) - pl.SendFlags |= PLAYER_ARMOR; - - if (pl.old_movetype != pl.movetype) - pl.SendFlags |= PLAYER_MOVETYPE; - - if (pl.old_viewofs != pl.view_ofs[2]) - pl.SendFlags |= PLAYER_VIEWOFS; - - if (pl.old_baseframe != pl.baseframe) - pl.SendFlags |= PLAYER_BASEFRAME; - - if (pl.old_frame != pl.frame) - pl.SendFlags |= PLAYER_FRAME; - - if (pl.old_a_ammo1 != pl.a_ammo1) - pl.SendFlags |= PLAYER_AMMO1; - - if (pl.old_a_ammo2 != pl.a_ammo2) - pl.SendFlags |= PLAYER_AMMO2; - - if (pl.old_a_ammo3 != pl.a_ammo3) - pl.SendFlags |= PLAYER_AMMO3; - - pl.old_modelindex = pl.modelindex; - pl.old_origin = pl.origin; - pl.old_angles = pl.angles; - pl.old_angles[0] = pl.v_angle[0]; - pl.old_velocity = pl.velocity; - pl.old_flags = pl.flags; - pl.old_gflags = pl.gflags; - pl.old_activeweapon = pl.activeweapon; - pl.old_items = pl.g_items; - pl.old_health = pl.health; - pl.old_armor = pl.armor; - pl.old_movetype = pl.movetype; - pl.old_viewofs = pl.view_ofs[2]; - pl.old_baseframe = pl.baseframe; - pl.old_frame = pl.frame; - pl.old_a_ammo1 = pl.a_ammo1; - pl.old_a_ammo2 = pl.a_ammo2; - pl.old_a_ammo3 = pl.a_ammo3; pl.sh_insaneactive = bound(0.0f, pl.sh_insaneactive - frametime, pl.sh_insaneactive); diff --git a/src/shared/include.src b/src/shared/include.src index b1e2b19..f8a3cdc 100644 --- a/src/shared/include.src +++ b/src/shared/include.src @@ -12,7 +12,7 @@ pmove.qc ../../../valve/src/shared/fx_breakmodel.qc ../../../valve/src/shared/fx_explosion.qc ../../../valve/src/shared/fx_gibhuman.qc -../../../valve/src/shared/fx_spark.qc +../../../base/src/shared/fx_spark.qc ../../../valve/src/shared/fx_impact.qc items.h diff --git a/src/shared/player.qc b/src/shared/player.qc index 9060eeb..5e7b0f7 100644 --- a/src/shared/player.qc +++ b/src/shared/player.qc @@ -33,8 +33,8 @@ enumflags PLAYER_ARMOR, PLAYER_MOVETYPE, PLAYER_VIEWOFS, - PLAYER_BASEFRAME, - PLAYER_FRAME, + PLAYER_TOPFRAME, + PLAYER_BOTTOMFRAME, PLAYER_AMMO1, PLAYER_AMMO2, PLAYER_AMMO3, @@ -147,6 +147,12 @@ class player:base_player int ammo_hammer_state; int ammo_hammer_state_net; + float anim_top; float anim_top_net; + float anim_top_time; float anim_top_time_net; + float anim_top_delay; float anim_top_delay_net; + float anim_bottom; float anim_bottom_net; + float anim_bottom_time; float anim_bottom_time_net; + #ifdef CLIENT /* External model */ entity p_model; @@ -154,7 +160,6 @@ class player:base_player int p_model_bone; float lastweapon; - virtual void(void) gun_offset; virtual void(void) draw; virtual float() predraw; virtual void(void) postdraw; @@ -234,12 +239,16 @@ player::ReceiveEntity(float new) movetype = readbyte(); if (fl & PLAYER_VIEWOFS) view_ofs[2] = readfloat(); - if (fl & PLAYER_BASEFRAME) - baseframe = readbyte(); - if (fl & PLAYER_FRAME) { - frame = readbyte(); - frame1time = 0.0f; - frame2time = 0.0f; + + /* animation */ + if (fl & PLAYER_TOPFRAME) { + anim_top = readbyte(); + anim_top_time = readfloat(); + anim_top_delay = readfloat(); + } + if (fl & PLAYER_BOTTOMFRAME) { + anim_bottom = readbyte(); + anim_bottom_time = readfloat(); } if (fl & PLAYER_AMMO1) { @@ -325,6 +334,12 @@ player::PredictPreFrame(void) mode_tempstate_net = mode_tempstate; ammo_chainsaw_state_net = ammo_chainsaw_state; ammo_hammer_state_net = ammo_hammer_state; + + anim_top_net = anim_top; + anim_top_delay_net = anim_top_delay; + anim_top_time_net = anim_top_time; + anim_bottom_net = anim_bottom; + anim_bottom_time_net = anim_bottom_time; } /* @@ -368,6 +383,12 @@ player::PredictPostFrame(void) mode_tempstate = mode_tempstate_net; ammo_chainsaw_state = ammo_chainsaw_state_net; ammo_hammer_state = ammo_hammer_state_net; + + anim_top = anim_top_net; + anim_top_delay = anim_top_delay_net; + anim_top_time = anim_top_time_net; + anim_bottom = anim_bottom_net; + anim_bottom_time = anim_bottom_time_net; } #else @@ -430,11 +451,11 @@ player::EvaluateEntity(void) if (old_viewofs != view_ofs[2]) SendFlags |= PLAYER_VIEWOFS; - if (old_baseframe != baseframe) - SendFlags |= PLAYER_BASEFRAME; - - if (old_frame != frame) - SendFlags |= PLAYER_FRAME; + /* animation */ + if (anim_bottom_net != anim_bottom || anim_bottom_time != anim_bottom_time_net) + SendFlags |= PLAYER_BOTTOMFRAME; + if (anim_top_net != anim_top || anim_top_time != anim_top_time_net || anim_top_delay != anim_top_delay_net) + SendFlags |= PLAYER_TOPFRAME; /* ammo 1 type updates */ if (glock_mag != glock_mag_net) { @@ -572,6 +593,12 @@ player::EvaluateEntity(void) mode_tempstate_net = mode_tempstate; ammo_chainsaw_state_net = ammo_chainsaw_state; ammo_hammer_state_net = ammo_hammer_state; + + anim_top_net = anim_top; + anim_top_delay_net = anim_top_delay; + anim_top_time_net = anim_top_time; + anim_bottom_net = anim_bottom; + anim_bottom_time_net = anim_bottom_time; } /* @@ -640,10 +667,16 @@ player::SendEntity(entity ePEnt, float fChanged) WriteByte(MSG_ENTITY, movetype); if (fChanged & PLAYER_VIEWOFS) WriteFloat(MSG_ENTITY, view_ofs[2]); - if (fChanged & PLAYER_BASEFRAME) - WriteByte(MSG_ENTITY, baseframe); - if (fChanged & PLAYER_FRAME) - WriteByte(MSG_ENTITY, frame); + + if (fChanged & PLAYER_TOPFRAME) { + WriteByte(MSG_ENTITY, anim_top); + WriteFloat(MSG_ENTITY, anim_top_time); + WriteFloat(MSG_ENTITY, anim_top_delay); + } + if (fChanged & PLAYER_BOTTOMFRAME) { + WriteByte(MSG_ENTITY, anim_bottom); + WriteFloat(MSG_ENTITY, anim_bottom_time); + } if (fChanged & PLAYER_AMMO1) { WriteByte(MSG_ENTITY, glock_mag);