From d8c42b20aebcff0bdcdd1589ce1a133e6ec0daec Mon Sep 17 00:00:00 2001 From: Marco Cawthorne Date: Mon, 23 Jan 2023 13:41:08 -0800 Subject: [PATCH] Shared: Add player animation code for movement and weapons. --- src/shared/animations_tfc.h | 52 +++++++++++ src/shared/defs.h | 2 +- src/shared/include.src | 1 + src/shared/player.qc | 179 ++++++++++++++++++++++++++++++++++++ src/shared/w_asscan.qc | 9 +- src/shared/w_autorifle.qc | 8 +- src/shared/w_crowbar.qc | 8 +- src/shared/w_dbs.qc | 10 +- src/shared/w_flamer.qc | 6 +- src/shared/w_glauncher.qc | 10 +- src/shared/w_grapple.qc | 2 +- src/shared/w_incendiary.qc | 15 +-- src/shared/w_knife.qc | 4 +- src/shared/w_medkit.qc | 8 +- src/shared/w_nailgun.qc | 10 +- src/shared/w_pipebomb.qc | 12 ++- src/shared/w_railgun.qc | 10 +- src/shared/w_rpg.qc | 15 +-- src/shared/w_sbs.qc | 8 +- src/shared/w_sniper.qc | 8 +- src/shared/w_supernail.qc | 12 ++- src/shared/w_tranquil.qc | 10 +- src/shared/w_umbrella.qc | 2 +- src/shared/w_wrench.qc | 2 +- 24 files changed, 351 insertions(+), 52 deletions(-) create mode 100644 src/shared/animations_tfc.h diff --git a/src/shared/animations_tfc.h b/src/shared/animations_tfc.h new file mode 100644 index 0000000..644074c --- /dev/null +++ b/src/shared/animations_tfc.h @@ -0,0 +1,52 @@ +enum +{ + TFCANIM_DIEGUTSHOT = ANIM_DIEGUTSHOT, + TFCANIM_AIMCROWBAR, + TFCANIM_SHOOTCROWBAR, + TFCANIM_CR_AIMCROWBAR, + TFCANIM_CR_SHOOTCROWBAR, + TFCANIM_AIM1HAND, + TFCANIM_SHOOT1HAND, + TFCANIM_CR_AIM1HAND, + TFCANIM_CR_SHOOT1HAND, + TFCANIM_AIMSHOTGUN, + TFCANIM_SHOOTSHOTGUN, + TFCANIM_CR_AIMSHOTGUN, + TFCANIM_CR_SHOOTSHOTGUN, + TFCANIM_AIMGAUSS, + TFCANIM_SHOOTGAUSS, + TFCANIM_CR_AIMGAUSS, + TFCANIM_CR_SHOOTGAUSS, + TFCANIM_AIMMP5, + TFCANIM_SHOOTMP5, + TFCANIM_CR_AIMMP5, + TFCANIM_CR_SHOOTMP5, + TFCANIM_AIMRPG, + TFCANIM_SHOOTRPG, + TFCANIM_CR_AIMRPG, + TFCANIM_CR_SHOOTRPG, + TFCANIM_AIMEGON, + TFCANIM_SHOOTEGON, + TFCANIM_CR_AIMEGON, + TFCANIM_CR_SHOOTEGON, + TFCANIM_AIMSNIPER, + TFCANIM_SHOOTSNIPER, + TFCANIM_CR_AIMSNIPER, + TFCANIM_CR_SHOOTSNIPER, + TFCANIM_AIMAUTOSNIPER, + TFCANIM_SHOOTAUTOSNIPER, + TFCANIM_CR_AIMAUTOSNIPER, + TFCANIM_CR_SHOOTAUTOSNIPER, + TFCANIM_AIMMEDKIT, + TFCANIM_SHOOTMEDKIT, + TFCANIM_CR_AIMMEDKIT, + TFCANIM_CR_SHOOTMEDKIT, + TFCANIM_AIMKNIFE, + TFCANIM_SHOOTKNIFE, + TFCANIM_CR_AIMKNIFE, + TFCANIM_CR_SHOOTKNIFE, + TFCANIM_AIMASSCAN, + TFCANIM_SHOOTASSCAN, + TFCANIM_CR_AIMASSCAN, + TFCANIM_CR_SHOOTASSCAN +}; \ No newline at end of file diff --git a/src/shared/defs.h b/src/shared/defs.h index 295cf04..a59543b 100644 --- a/src/shared/defs.h +++ b/src/shared/defs.h @@ -32,7 +32,7 @@ string g_teammodels[] = { "models/player/scout/scout2.mdl", "models/player/sniper/sniper2.mdl", "models/player/soldier/soldier2.mdl", - "models/player/demo/demo.mdl", + "models/player/demo/demo2.mdl", "models/player/medic/medic2.mdl", "models/player/hvyweapon/hvyweapon2.mdl", "models/player/pyro/pyro2.mdl", diff --git a/src/shared/include.src b/src/shared/include.src index 26d0d60..9447355 100644 --- a/src/shared/include.src +++ b/src/shared/include.src @@ -8,6 +8,7 @@ events.h player.qc ../../../base/src/shared/weapon_common.h ../../../valve/src/shared/animations.h +animations_tfc.h ../../../valve/src/shared/animations.qc pmove.qc diff --git a/src/shared/player.qc b/src/shared/player.qc index 30ead3e..35f8b48 100644 --- a/src/shared/player.qc +++ b/src/shared/player.qc @@ -14,6 +14,89 @@ * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. */ +#ifdef CLIENT +/* Here's a list of bone names that we are aware of on HL player models. + Usually we'd use skeletalobjects to share the same skeleton/anim with + another model - but because FTEQW does not support that for HLMDL we + are forced to manually position the bones of our attachnment + by iterating over them and manually setting their position in 3D-space. +*/ +string g_pbones[] = +{ + "Bip01", + "Bip01 Footsteps", + "Bip01 Pelvis", + "Bip01 L Leg", + "Bip01 L Leg1", + "Bip01 L Foot", + "Bip01 L Toe0", + "Bip01 L Toe01", + "Bip01 L Toe02", + "Dummy16", + "Bip01 R Leg", + "Bip01 R Leg1", + "Bip01 R Foot", + "Bip01 R Toe0", + "Bip01 R Toe01", + "Bip01 R Toe02", + "Dummy11", + "Bip01 Spine", + "Bip01 Spine1", + "Bip01 Spine2", + "Bip01 Spine3", + "Bip01 Neck", + "Bip01 Head", + "Dummy21", + "Dummy08", + "Bone02", + "Bone03", + "Bone04", + "Dummy05", + "Bone09", + "Bone10", + "Dummy04", + "Bone05", + "Bone06", + "Dummy03", + "Bone07", + "Bone08", + "Dummy09", + "Bone11", + "Bone12", +"Dummy10", + "Bone13", + "Bone14", + "Bone15", + "Bip01 L Arm", + "Bip01 L Arm1", + "Bip01 L Arm2", + "Bip01 L Hand", + "Bip01 L Finger0", + "Bip01 L Finger01", + "Bip01 L Finger02", + "Dummy06", + "Bip01 L Finger1", + "Bip01 L Finger11", + "Bip01 L Finger12", + "Dummy07", + "Bip01 R Arm", + "Bip01 R Arm1", + "Bip01 R Arm2", + "Bip01 R Hand", + "Bip01 R Finger0", + "Bip01 R Finger01", + "Bip01 R Finger02", + "Dummy01", + "Bip01 R Finger1", + "Bip01 R Finger11", + "Bip01 R Finger12", + "Dummy02", + "Box02", + "Bone08", + "Bone15" +}; +#endif + /* all potential SendFlags bits we can possibly send */ enumflags { @@ -65,12 +148,14 @@ class player:NSClientPlayer nonvirtual void TFC_CookGren2(void); nonvirtual void TFC_ReleaseGren1(void); nonvirtual void TFC_ReleaseGren2(void); + virtual void UpdatePlayerAnimation(float); #ifdef CLIENT virtual void ReceiveEntity(float,float); virtual void PredictPreFrame(void); virtual void PredictPostFrame(void); virtual void UpdateAliveCam(void); + virtual void UpdatePlayerAttachments(bool); #else NSTimer gren1; @@ -98,6 +183,18 @@ class player:NSClientPlayer #endif }; +void Animation_PlayerUpdate(player); +void Animation_TimerUpdate(player, float); + +void +player::UpdatePlayerAnimation(float timelength) +{ + /* calculate our skeletal progression */ + Animation_PlayerUpdate(this); + /* advance animation timers */ + Animation_TimerUpdate(this, timelength); +} + #ifdef SERVER void TFCNade_ThrowCaltrop(player); @@ -215,6 +312,88 @@ player::ProcessInput(void) } #ifdef CLIENT + +.string oldmodel; +string Weapons_GetPlayermodel(player, int); + +void +player::UpdatePlayerAttachments(bool visible) +{ + /* draw the flashlight */ + if (gflags & GF_FLASHLIGHT) { + vector src; + vector ang; + + if (entnum != player_localentnum) { + src = origin + view_ofs; + ang = v_angle; + } else { + src = pSeat->m_vecPredictedOrigin + [0,0,-8]; + ang = view_angles; + } + + makevectors(ang); + traceline(src, src + (v_forward * 8096), MOVE_NORMAL, this); + + if (serverkeyfloat("*bspversion") == BSPVER_HL) { + dynamiclight_add(trace_endpos + (v_forward * -2), 128, [1,1,1]); + } else { + float p = dynamiclight_add(src, 512, [1,1,1], 0, "textures/flashlight"); + dynamiclight_set(p, LFIELD_ANGLES, ang); + dynamiclight_set(p, LFIELD_FLAGS, 3); + } + } + + /* FIXME: this needs to be incorporated and simplified, now that we can handle it all in-class */ + if (!visible) + return; + + /* what's the current weapon model supposed to be anyway? */ + p_model.oldmodel = Weapons_GetPlayermodel(this, activeweapon); + + /* we changed weapons, update skeletonindex */ + if (p_model.model != p_model.oldmodel) { + /* free memory */ + if (p_model.skeletonindex) + skel_delete(p_model.skeletonindex); + + /* set the new model and mark us updated */ + setmodel(p_model, p_model.oldmodel); + p_model.model = p_model.oldmodel; + + /* set the new skeletonindex */ + p_model.skeletonindex = skel_create(p_model.modelindex); + + /* hack this thing in here FIXME: this should be done when popping in/out of a pvs */ + if (autocvar(cl_himodels, 1, "Use high-quality thisayer models over lower-definition ones")) + setcustomskin(this, "", "geomset 0 2\n"); + else + setcustomskin(this, "", "geomset 0 1\n"); + } + + /* follow thisayer at all times */ + setorigin(p_model, origin); + p_model.angles = angles; + skel_build(p_model.skeletonindex, p_model, p_model.modelindex,0, 0, -1); + + /* we have to loop through all valid bones of the weapon model and match them + * to the thisayer one */ + for (float i = 0; i < g_pbones.length; i++) { + vector bpos; + float pbone = gettagindex(this, g_pbones[i]); + float wbone = gettagindex(p_model, g_pbones[i]); + + /* if the bone doesn't ignore in either skeletal mesh, ignore */ + if (wbone <= 0 || pbone <= 0) + continue; + + bpos = gettaginfo(this, pbone); + + /* the most expensive bit */ + skel_set_bone_world(p_model, wbone, bpos, v_forward, v_right, v_up); + } +} + void Weapons_AmmoUpdate(entity); void HUD_AmmoNotify_Check(player pl); void HUD_ItemNotify_Check(player pl); diff --git a/src/shared/w_asscan.qc b/src/shared/w_asscan.qc index 2ad7dcd..2d692aa 100644 --- a/src/shared/w_asscan.qc +++ b/src/shared/w_asscan.qc @@ -98,7 +98,7 @@ w_asscan_wmodel(void) string w_asscan_pmodel(player pl) { - return "models/p_tfac.mdl"; + return "models/p_mini2.mdl"; } string @@ -177,6 +177,11 @@ w_asscan_primary(player pl) Weapons_ViewPunchAngle(pl, [random(-2, 2),0,0]); Weapons_Sound(pl, CHAN_WEAPON, "weapon_asscan.fire"); + if (pl.flags & FL_CROUCHING) + Animation_PlayerTop(pl, TFCANIM_CR_SHOOTASSCAN, 0.1f); + else + Animation_PlayerTop(pl, TFCANIM_SHOOTASSCAN, 0.1f); + #ifdef CLIENT View_AddEvent(w_asscan_ejectshell, 0.0f); View_SetMuzzleflash(MUZZLE_WEIRD); @@ -207,7 +212,7 @@ w_asscan_hud(player pl) float w_asscan_aimanim(player pl) { - return self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; + return pl.flags & FL_CROUCHING ? TFCANIM_CR_AIMASSCAN : TFCANIM_AIMASSCAN; } void diff --git a/src/shared/w_autorifle.qc b/src/shared/w_autorifle.qc index ca75601..aa297cf 100644 --- a/src/shared/w_autorifle.qc +++ b/src/shared/w_autorifle.qc @@ -78,7 +78,7 @@ w_autorifle_draw(player pl) float w_autorifle_aimanim(player pl) { - return self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; + return pl.flags & FL_CROUCHING ? TFCANIM_CR_AIMAUTOSNIPER : TFCANIM_AIMAUTOSNIPER; } void @@ -93,6 +93,12 @@ w_autorifle_primary(player pl) case AUTO_FIRED: case AUTO_LAST: Weapons_ViewAnimation(pl, SNIPER_AUTOFIRE); + + if (pl.flags & FL_CROUCHING) + Animation_PlayerTop(pl, TFCANIM_CR_SHOOTAUTOSNIPER, 0.45f); + else + Animation_PlayerTop(pl, TFCANIM_SHOOTAUTOSNIPER, 0.45f); + #ifdef CLIENT View_SetMuzzleflash(MUZZLE_RIFLE); #endif diff --git a/src/shared/w_crowbar.qc b/src/shared/w_crowbar.qc index f2b7f9e..b5c234f 100644 --- a/src/shared/w_crowbar.qc +++ b/src/shared/w_crowbar.qc @@ -45,7 +45,7 @@ w_crowbar_precache(void) Sound_Precache("weapon_crowbar.hitbody"); precache_model("models/w_crowbar.mdl"); #else - precache_model("models/v_crowbar.mdl"); + precache_model("models/v_tfc_crowbar.mdl"); precache_model("models/p_crowbar.mdl"); #endif } @@ -76,7 +76,7 @@ w_crowbar_deathmsg(void) void w_crowbar_draw(player pl) { - Weapons_SetModel("models/v_crowbar.mdl"); + Weapons_SetModel("models/v_tfc_crowbar.mdl"); Weapons_ViewAnimation(pl, CBAR_DRAW); } @@ -124,7 +124,7 @@ w_crowbar_primary(player pl) Weapons_ViewAnimation(pl, trace_fraction >= 1 ? CBAR_ATTACK3MISS:CBAR_ATTACK3HIT); } - if (self.flags & FL_CROUCHING) + if (pl.flags & FL_CROUCHING) Animation_PlayerTop(pl, ANIM_CR_SHOOTCROWBAR, 0.41f); else Animation_PlayerTop(pl, ANIM_SHOOTCROWBAR, 0.5f); @@ -169,7 +169,7 @@ w_crowbar_release(player pl) float w_crowbar_aimanim(player pl) { - return self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; + return pl.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; } void diff --git a/src/shared/w_dbs.qc b/src/shared/w_dbs.qc index 5e46596..2d9c983 100644 --- a/src/shared/w_dbs.qc +++ b/src/shared/w_dbs.qc @@ -56,7 +56,7 @@ w_dbs_wmodel(void) string w_dbs_pmodel(player pl) { - return "models/p_shot2.mdl"; + return "models/p_shotgun2.mdl"; } string @@ -106,6 +106,12 @@ w_dbs_primary(player pl) pl.mag_dbs--; Weapons_ViewAnimation(pl, DBS_FIRE1); Weapons_ViewPunchAngle(pl, [-2,0,0]); + + if (pl.flags & FL_CROUCHING) + Animation_PlayerTop(pl, TFCANIM_CR_SHOOTSHOTGUN, 0.45f); + else + Animation_PlayerTop(pl, TFCANIM_SHOOTSHOTGUN, 0.45f); + #ifdef CLIENT View_SetMuzzleflash(MUZZLE_ROUND); #endif @@ -175,7 +181,7 @@ w_dbs_crosshair(player pl) float w_dbs_aimanim(player pl) { - return self.flags & FL_CROUCHING ? ANIM_CR_AIMSHOTGUN : ANIM_AIMSHOTGUN; + return pl.flags & FL_CROUCHING ? ANIM_CR_AIMSHOTGUN : ANIM_AIMSHOTGUN; } void diff --git a/src/shared/w_flamer.qc b/src/shared/w_flamer.qc index c6b5ef5..dcd6134 100644 --- a/src/shared/w_flamer.qc +++ b/src/shared/w_flamer.qc @@ -57,7 +57,7 @@ w_flamer_wmodel(void) string w_flamer_pmodel(player pl) { - return "models/p_egon.mdl"; + return "models/p_egon2.mdl"; } string @@ -163,14 +163,14 @@ w_flamer_crosshair(player pl) //Cross_DrawSub(g_cross_spr, [24,24], [72/128,48/128], [0.1875, 0.1875]); HUD_DrawAmmo2(); vector aicon_pos = g_hudmins + [g_hudres[0] - 48, g_hudres[1] - 42]; - drawsubpic(aicon_pos, [24,24], "sprites/640hud7.spr_0.tga", [0,96/128], [24/256, 24/128], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE); + drawsubpic(aicon_pos, [24,24], g_hud7_spr, [0,96/128], [24/256, 24/128], g_hud_color, pSeatLocal->m_flAmmo2Alpha, DRAWFLAG_ADDITIVE); #endif } float w_flamer_aimanim(player pl) { - return self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; + return pl.flags & FL_CROUCHING ? TFCANIM_CR_AIMEGON : TFCANIM_AIMEGON; } void diff --git a/src/shared/w_glauncher.qc b/src/shared/w_glauncher.qc index 621a3f6..ce6a3a6 100644 --- a/src/shared/w_glauncher.qc +++ b/src/shared/w_glauncher.qc @@ -67,7 +67,7 @@ w_glauncher_wmodel(void) string w_glauncher_pmodel(player pl) { - return "models/p_glauncher.mdl"; + return "models/p_glauncher2.mdl"; } string @@ -173,6 +173,12 @@ w_glauncher_primary(player pl) case AUTO_LAST: Weapons_ViewAnimation(pl, GLAUNCHER_GFIRE); Weapons_ViewPunchAngle(pl, [-1,0,0]); + + if (pl.flags & FL_CROUCHING) + Animation_PlayerTop(pl, TFCANIM_CR_SHOOTSHOTGUN, 0.45f); + else + Animation_PlayerTop(pl, TFCANIM_SHOOTSHOTGUN, 0.45f); + pl.w_attack_next = 0.6f; break; case AUTO_EMPTY: @@ -214,7 +220,7 @@ w_glauncher_postdraw(player pl) float w_glauncher_aimanim(player pl) { - return self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; + return pl.flags & FL_CROUCHING ? TFCANIM_CR_AIMSHOTGUN : TFCANIM_AIMSHOTGUN; } void diff --git a/src/shared/w_grapple.qc b/src/shared/w_grapple.qc index 1d05e90..6d60872 100644 --- a/src/shared/w_grapple.qc +++ b/src/shared/w_grapple.qc @@ -57,7 +57,7 @@ w_grapple_draw(player pl) float w_grapple_aimanim(player pl) { - return self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; + return pl.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; } void diff --git a/src/shared/w_incendiary.qc b/src/shared/w_incendiary.qc index 4b0da3d..fbc7f79 100644 --- a/src/shared/w_incendiary.qc +++ b/src/shared/w_incendiary.qc @@ -56,7 +56,7 @@ w_incendiary_wmodel(void) string w_incendiary_pmodel(player pl) { - return "models/p_incendiary.mdl"; + return "models/p_rpg2.mdl"; } string @@ -108,15 +108,16 @@ w_incendiary_primary(player pl) return; break; case AUTO_FIRED: - Weapons_ViewAnimation(pl, INC_FIRE); - Weapons_Sound(pl, CHAN_WEAPON, "weapon_incendiary.fire"); - Weapons_ViewPunchAngle(pl, [-2,0,0]); - pl.w_attack_next = 0.8f; - break; case AUTO_LAST: Weapons_ViewAnimation(pl, INC_FIRE); Weapons_Sound(pl, CHAN_WEAPON, "weapon_incendiary.fire"); Weapons_ViewPunchAngle(pl, [-2,0,0]); + + if (pl.flags & FL_CROUCHING) + Animation_PlayerTop(pl, TFCANIM_CR_SHOOTRPG, 0.45f); + else + Animation_PlayerTop(pl, TFCANIM_SHOOTRPG, 0.45f); + pl.w_attack_next = 0.8f; break; case AUTO_EMPTY: @@ -130,7 +131,7 @@ w_incendiary_primary(player pl) float w_incendiary_aimanim(player pl) { - return self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; + return pl.flags & FL_CROUCHING ? TFCANIM_CR_AIMRPG : TFCANIM_AIMRPG; } void diff --git a/src/shared/w_knife.qc b/src/shared/w_knife.qc index 0a12088..e51a1ed 100644 --- a/src/shared/w_knife.qc +++ b/src/shared/w_knife.qc @@ -99,7 +99,7 @@ w_knife_primary(player pl) Weapons_ViewAnimation(pl, KNIFE_SLASH); - if (self.flags & FL_CROUCHING) + if (pl.flags & FL_CROUCHING) Animation_PlayerTop(pl, ANIM_CR_SHOOTCROWBAR, 0.41f); else Animation_PlayerTop(pl, ANIM_SHOOTCROWBAR, 0.5f); @@ -144,7 +144,7 @@ w_knife_primary(player pl) float w_knife_aimanim(player pl) { - return self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; + return pl.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; } void diff --git a/src/shared/w_medkit.qc b/src/shared/w_medkit.qc index c88e927..26cd1c7 100644 --- a/src/shared/w_medkit.qc +++ b/src/shared/w_medkit.qc @@ -80,10 +80,10 @@ w_medkit_primary(player pl) Weapons_ViewAnimation(pl, MEDKIT_USE); - if (self.flags & FL_CROUCHING) - Animation_PlayerTop(pl, ANIM_SHOOT1HAND, 0.45f); + if (pl.flags & FL_CROUCHING) + Animation_PlayerTop(pl, TFCANIM_CR_SHOOTMEDKIT, 0.45f); else - Animation_PlayerTop(pl, ANIM_CR_SHOOT1HAND, 0.45f); + Animation_PlayerTop(pl, TFCANIM_SHOOTMEDKIT, 0.45f); if (trace_ent.classname == "player") { player otherpl = (player) trace_ent; @@ -131,7 +131,7 @@ w_medkit_release(player pl) float w_medkit_aimanim(player pl) { - return self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; + return pl.flags & FL_CROUCHING ? TFCANIM_CR_AIMMEDKIT : TFCANIM_AIMMEDKIT; } void diff --git a/src/shared/w_nailgun.qc b/src/shared/w_nailgun.qc index 97f3f12..7b87fc6 100644 --- a/src/shared/w_nailgun.qc +++ b/src/shared/w_nailgun.qc @@ -50,7 +50,7 @@ w_nailgun_wmodel(void) string w_nailgun_pmodel(player pl) { - return "models/p_nailgun.mdl"; + return "models/p_nailgun2.mdl"; } string @@ -69,7 +69,7 @@ w_nailgun_draw(player pl) float w_nailgun_aimanim(player pl) { - return self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; + return pl.flags & FL_CROUCHING ? TFCANIM_CR_AIMMP5 : TFCANIM_AIMMP5; } void @@ -125,6 +125,12 @@ w_nailgun_primary(player pl) } Weapons_ViewAnimation(pl, NAILGUN_SHOOT2); Weapons_ViewPunchAngle(pl, [-1,0,0]); + + if (pl.flags & FL_CROUCHING) + Animation_PlayerTop(pl, TFCANIM_CR_SHOOTMP5, 0.45f); + else + Animation_PlayerTop(pl, TFCANIM_SHOOTMP5, 0.45f); + #ifdef CLIENT View_SetMuzzleflash(MUZZLE_RIFLE); #endif diff --git a/src/shared/w_pipebomb.qc b/src/shared/w_pipebomb.qc index 441bdf3..c231e03 100644 --- a/src/shared/w_pipebomb.qc +++ b/src/shared/w_pipebomb.qc @@ -46,12 +46,12 @@ w_pipebomb_pickup(player pl, int new, int startammo) string w_pipebomb_wmodel(void) { - return "models/w_pipebomb.mdl"; + return "models/p_glauncher.mdl"; } string w_pipebomb_pmodel(player pl) { - return "models/p_pipebomb.mdl"; + return "models/p_glauncher.mdl"; } string @@ -181,6 +181,12 @@ w_pipebomb_primary(player pl) case AUTO_LAST: Weapons_ViewAnimation(pl, GLAUNCHER_PFIRE); Weapons_ViewPunchAngle(pl, [-1,0,0]); + + if (pl.flags & FL_CROUCHING) + Animation_PlayerTop(pl, TFCANIM_CR_SHOOTSHOTGUN, 0.45f); + else + Animation_PlayerTop(pl, TFCANIM_SHOOTSHOTGUN, 0.45f); + pl.w_attack_next = 0.6f; break; case AUTO_EMPTY: @@ -244,7 +250,7 @@ w_pipebomb_postdraw(player pl) float w_pipebomb_aimanim(player pl) { - return self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; + return pl.flags & FL_CROUCHING ? TFCANIM_CR_AIMSHOTGUN : TFCANIM_AIMSHOTGUN; } void diff --git a/src/shared/w_railgun.qc b/src/shared/w_railgun.qc index e3cf874..9f8bc09 100644 --- a/src/shared/w_railgun.qc +++ b/src/shared/w_railgun.qc @@ -46,7 +46,7 @@ w_railgun_wmodel(void) string w_railgun_pmodel(player pl) { - return "models/p_railgun.mdl"; + return "models/p_9mmhandgun.mdl"; } string @@ -65,7 +65,7 @@ w_railgun_draw(player pl) float w_railgun_aimanim(player pl) { - return pl.flags & FL_CROUCHING ? ANIM_CR_AIM1HAND : ANIM_AIM1HAND; + return pl.flags & FL_CROUCHING ? TFCANIM_CR_AIM1HAND : TFCANIM_AIM1HAND; } void @@ -118,6 +118,12 @@ w_railgun_primary(player pl) int r = (float)input_sequence % 3; Weapons_ViewAnimation(pl, RAILGUN_SHOOT); Weapons_ViewPunchAngle(pl, [-1,0,0]); + + if (pl.flags & FL_CROUCHING) + Animation_PlayerTop(pl, TFCANIM_CR_SHOOT1HAND, 0.45f); + else + Animation_PlayerTop(pl, TFCANIM_SHOOT1HAND, 0.45f); + Weapons_Sound(pl, CHAN_WEAPON, "weapon_railgun.fire"); pl.w_attack_next = 0.4f; break; diff --git a/src/shared/w_rpg.qc b/src/shared/w_rpg.qc index df5dd66..2dd7a04 100644 --- a/src/shared/w_rpg.qc +++ b/src/shared/w_rpg.qc @@ -114,16 +114,17 @@ w_rpg_primary(player pl) case AUTO_FIRE_FAILED: return; break; + case AUTO_LAST: case AUTO_FIRED: Weapons_ViewAnimation(pl, RPG_FIRE); Weapons_ViewPunchAngle(pl, [-2,0,0]); Weapons_Sound(pl, CHAN_WEAPON, "weapon_rpg.fire"); - pl.w_attack_next = 0.8f; - break; - case AUTO_LAST: - Weapons_ViewAnimation(pl, RPG_FIRE); - Weapons_ViewPunchAngle(pl, [-2,0,0]); - Weapons_Sound(pl, CHAN_WEAPON, "weapon_rpg.fire"); + + if (pl.flags & FL_CROUCHING) + Animation_PlayerTop(pl, TFCANIM_CR_SHOOTRPG, 0.45f); + else + Animation_PlayerTop(pl, TFCANIM_SHOOTRPG, 0.45f); + pl.w_attack_next = 0.8f; break; case AUTO_EMPTY: @@ -174,7 +175,7 @@ w_rpg_release(player pl) float w_rpg_aimanim(player pl) { - return self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; + return pl.flags & FL_CROUCHING ? TFCANIM_CR_AIMRPG : TFCANIM_AIMRPG; } void diff --git a/src/shared/w_sbs.qc b/src/shared/w_sbs.qc index d666012..f345479 100644 --- a/src/shared/w_sbs.qc +++ b/src/shared/w_sbs.qc @@ -97,6 +97,12 @@ w_sbs_primary(player pl) #endif Weapons_ViewAnimation(pl, SBS_FIRE1); Weapons_ViewPunchAngle(pl, [-2,0,0]); + + if (pl.flags & FL_CROUCHING) + Animation_PlayerTop(pl, TFCANIM_CR_SHOOTSHOTGUN, 0.45f); + else + Animation_PlayerTop(pl, TFCANIM_SHOOTSHOTGUN, 0.45f); + Weapons_Sound(pl, CHAN_WEAPON, "weapon_sbs.fire"); pl.w_attack_next = 0.5f; break; @@ -163,7 +169,7 @@ w_sbs_crosshair(player pl) float w_sbs_aimanim(player pl) { - return self.flags & FL_CROUCHING ? ANIM_CR_AIMSHOTGUN : ANIM_AIMSHOTGUN; + return pl.flags & FL_CROUCHING ? ANIM_CR_AIMSHOTGUN : ANIM_AIMSHOTGUN; } void diff --git a/src/shared/w_sniper.qc b/src/shared/w_sniper.qc index 5de7220..4163c13 100644 --- a/src/shared/w_sniper.qc +++ b/src/shared/w_sniper.qc @@ -69,7 +69,7 @@ w_sniper_draw(player pl) float w_sniper_aimanim(player pl) { - return self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; + return pl.flags & FL_CROUCHING ? TFCANIM_CR_AIMSNIPER : TFCANIM_AIMSNIPER; } void @@ -82,6 +82,12 @@ w_sniper_release(player pl) float dmg = bound(75, (pl.mode_tempstate/2) * 75, 375); w_baseauto_fire(pl, player::m_iAmmoShells, dmg, [0,0]); Weapons_ViewAnimation(pl, SNIPER_FIRE); + + if (pl.flags & FL_CROUCHING) + Animation_PlayerTop(pl, TFCANIM_CR_SHOOTSNIPER, 0.45f); + else + Animation_PlayerTop(pl, TFCANIM_SHOOTSNIPER, 0.45f); + #ifdef CLIENT View_SetMuzzleflash(MUZZLE_RIFLE); #endif diff --git a/src/shared/w_supernail.qc b/src/shared/w_supernail.qc index 862fce1..a9bc964 100644 --- a/src/shared/w_supernail.qc +++ b/src/shared/w_supernail.qc @@ -48,12 +48,12 @@ w_supernail_updateammo(player pl) string w_supernail_wmodel(void) { - return "models/w_supernail.mdl"; + return "models/p_snailgun2.mdl"; } string w_supernail_pmodel(player pl) { - return "models/p_supernail.mdl"; + return "models/p_snailgun2.mdl"; } string @@ -72,7 +72,7 @@ w_supernail_draw(player pl) float w_supernail_aimanim(player pl) { - return self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; + return pl.flags & FL_CROUCHING ? TFCANIM_CR_AIMMP5 : TFCANIM_AIMMP5; } void @@ -128,6 +128,12 @@ w_supernail_primary(player pl) } Weapons_ViewAnimation(pl, NAILGUN_SHOOT2); Weapons_ViewPunchAngle(pl, [-1,0,0]); + + if (pl.flags & FL_CROUCHING) + Animation_PlayerTop(pl, TFCANIM_CR_SHOOTMP5, 0.45f); + else + Animation_PlayerTop(pl, TFCANIM_SHOOTMP5, 0.45f); + #ifdef CLIENT View_SetMuzzleflash(MUZZLE_RIFLE); #endif diff --git a/src/shared/w_tranquil.qc b/src/shared/w_tranquil.qc index 8e14988..212ee11 100644 --- a/src/shared/w_tranquil.qc +++ b/src/shared/w_tranquil.qc @@ -50,7 +50,7 @@ w_tranquil_wmodel(void) string w_tranquil_pmodel(player pl) { - return "models/p_tranquil.mdl"; + return "models/p_9mmhandgun2.mdl"; } string @@ -113,6 +113,12 @@ w_tranquil_primary(player pl) Weapons_ViewAnimation(pl, TRANQUIL_SHOOT); Weapons_ViewPunchAngle(pl, [-2,0,0]); Weapons_Sound(pl, CHAN_WEAPON, "weapon_tranquilizer.fire"); + + if (pl.flags & FL_CROUCHING) + Animation_PlayerTop(pl, TFCANIM_CR_SHOOT1HAND, 0.45f); + else + Animation_PlayerTop(pl, TFCANIM_SHOOT1HAND, 0.45f); + pl.w_attack_next = 1.5f; break; case AUTO_EMPTY: @@ -126,7 +132,7 @@ w_tranquil_primary(player pl) float w_tranquil_aimanim(player pl) { - return self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; + return pl.flags & FL_CROUCHING ? TFCANIM_CR_AIM1HAND : TFCANIM_AIM1HAND; } void diff --git a/src/shared/w_umbrella.qc b/src/shared/w_umbrella.qc index 294fb5b..54ca3da 100644 --- a/src/shared/w_umbrella.qc +++ b/src/shared/w_umbrella.qc @@ -176,7 +176,7 @@ w_umbrella_release(player pl) float w_umbrella_aimanim(player pl) { - return self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; + return pl.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; } void diff --git a/src/shared/w_wrench.qc b/src/shared/w_wrench.qc index fee845b..81d0a98 100644 --- a/src/shared/w_wrench.qc +++ b/src/shared/w_wrench.qc @@ -191,7 +191,7 @@ w_wrench_crosshair(player pl) float w_wrench_aimanim(player pl) { - return self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; + return pl.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR; } void