Basic player animation code for Valve/Scihunt/Rewolf

This commit is contained in:
Marco Hladik 2019-08-06 22:57:18 -07:00
parent 97ea5e6208
commit 921ec444a2
8 changed files with 144 additions and 47 deletions

View file

@ -278,7 +278,7 @@ void CSQC_UpdateView(float w, float h, float focus)
DSP_UpdateListener();
pSeat = (void*)0x70000000i;
needcursor = 0;
if (needcursor) {
setcursormode(TRUE, "gfx/cursor", [0,0,0], 1.0f);
} else {

View file

@ -39,6 +39,8 @@ void Player_ReadEntity(float flIsNew)
pl.viewzoom = readfloat();
pl.jumptime = readfloat();
pl.teleport_time = readfloat();
pl.baseframe = readbyte();
pl.frame = readbyte();
pl.a_ammo1 = readbyte();
pl.a_ammo2 = readbyte();
pl.a_ammo3 = readbyte();

View file

@ -60,6 +60,7 @@ valve/ammo.cpp
spawn.c
vox.c
../shared/valve/animations.c
valve/client.c
client.c

View file

@ -59,6 +59,7 @@ scihunt/shdata_parse.c
spawn.c
vox.c
../shared/valve/animations.c
scihunt/client.c
client.c

View file

@ -57,6 +57,7 @@ valve/ammo.cpp
spawn.c
vox.c
../shared/valve/animations.c
valve/client.c
client.c

View file

@ -27,9 +27,10 @@ void Game_PlayerPreThink(void)
{
}
void Game_PlayerPostThink(void)
{
Animation_PlayerUpdate();
self.SendFlags = 1;
}
void Game_RunClientCommand(void)

View file

@ -112,6 +112,9 @@ float Player_SendEntity(entity ePEnt, float fChanged)
WriteFloat(MSG_ENTITY, pl.jumptime);
WriteFloat(MSG_ENTITY, pl.teleport_time);
WriteByte(MSG_ENTITY, pl.baseframe);
WriteByte(MSG_ENTITY, pl.frame);
WriteByte(MSG_ENTITY, pl.a_ammo1);
WriteByte(MSG_ENTITY, pl.a_ammo2);
WriteByte(MSG_ENTITY, pl.a_ammo3);

View file

@ -10,6 +10,82 @@
.float baseframe_old;
.float fWasCrouching;
enum {
ANIM_LOOKIDLE,
ANIM_IDLE,
ANIM_DEEPIDLE,
ANIM_RUN2,
ANIM_WALK2HANDED,
ANIM_2HANDSHOT,
ANIM_CRAWL,
ANIM_CROUCHIDLE,
ANIM_JUMP,
ANIM_LONGJUMP,
ANIM_SWIM,
ANIM_TREADWATER,
ANIM_RUN,
ANIM_WALK,
ANIM_AIM2,
ANIM_SHOOT2,
ANIM_AIM1,
ANIM_SHOOT1,
ANIM_DIESIMPLE,
ANIM_DIEBACKWARDS1,
ANIM_DIEBACKWARDS2,
ANIM_DIEFORWARD,
ANIM_DIEHEADSHOT,
ANIM_DIESPIN,
ANIM_DIEGUTSHOT,
ANIM_AIMCROWBAR,
ANIM_SHOOTCROWBAR,
ANIM_CR_AIMCROWBAR,
ANIM_CR_SHOOTCROWBAR,
ANIM_AIMTRIPMINE,
ANIM_SHOOTTRIPMINE,
ANIM_CR_AIMTRIPMINE,
ANIM_CR_SHOOTTRIPMINE,
ANIM_AIM1HAND,
ANIM_SHOOT1HAND,
ANIM_CR_AIM1HAND,
ANIM_CR_SHOOT1HAND,
ANIM_AIMPYTHON,
ANIM_SHOOTPYTHON,
ANIM_CR_AIMPYTHON,
ANIM_CR_SHOOTPYTHON,
ANIM_AIMSHOTGUN,
ANIM_SHOOTSHOTGUN,
ANIM_CR_AIMSHOTGUN,
ANIM_CR_SHOOTSHOTGUN,
ANIM_AIMGAUSS,
ANIM_SHOOTGAUSS,
ANIM_CR_AIMGAUSS,
ANIM_CR_SHOOTGAUSS,
ANIM_AIMMP5,
ANIM_SHOOTMP5,
ANIM_CR_AIMMP5,
ANIM_CR_SHOOTMP5,
ANIM_AIMRPG,
ANIM_SHOOTRPG,
ANIM_CR_AIMRPG,
ANIM_CR_SHOOTRPG,
ANIM_AIMEGON,
ANIM_SHOOTEGON,
ANIM_CR_AIMEGON,
ANIM_CR_SHOOTEGON,
ANIM_AIMSQUEAK,
ANIM_SHOOTSQUEAK,
ANIM_CR_AIMSQUEAK,
ANIM_CR_SHOOTSQUEAK,
ANIM_AIMHIVE,
ANIM_SHOOTHIVE,
ANIM_CR_AIMHIVE,
ANIM_CR_SHOOTHIVE,
ANIM_AIMBOW,
ANIM_SHOOTBOW,
ANIM_CR_AIMBOW,
ANIM_CR_SHOOTBOW
};
// For lerping, sigh
#ifdef CSQC
.float frame_last;
@ -35,69 +111,81 @@ depending on what the player is doing
=================
*/
void Animation_PlayerUpdate( void ) {
self.basebone = 40;
/*
self.basebone = 16;
#ifdef SSQC
// TODO: Make this faster
if ( self.baseframe_time < time ) {
switch ( Weapon_GetAnimType( self.weapon ) ) {
case ATYPE_AK47:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_AK47 : ANIM_AIM_AK47;
break;
case ATYPE_C4:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_C4 : ANIM_AIM_C4;
break;
case ATYPE_CARBINE:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_CARBINE : ANIM_AIM_CARBINE;
break;
case ATYPE_DUALPISTOLS:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_DUALPISTOLS : ANIM_AIM_DUALPISTOLS;
break;
case ATYPE_GRENADE:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_GRENADE : ANIM_AIM_GRENADE;
break;
case ATYPE_KNIFE:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_KNIFE : ANIM_AIM_KNIFE;
break;
case ATYPE_MP5:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_MP5 : ANIM_AIM_MP5;
break;
case ATYPE_ONEHAND:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_ONEHAND : ANIM_AIM_ONEHAND;
break;
case ATYPE_PARA:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_PARA : ANIM_AIM_PARA;
break;
case ATYPE_RIFLE:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_RIFLE : ANIM_AIM_RIFLE;
break;
case ATYPE_SHOTGUN:
self.baseframe = self.flags & FL_CROUCHING ? ANIM_CROUCH_AIM_SHOTGUN : ANIM_AIM_SHOTGUN;
break;
player pl = (player)self;
int i = pl.activeweapon;
switch ( i ) {
case WEAPON_CROWBAR:
self.frame = self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR;
break;
case WEAPON_GLOCK:
self.frame = self.flags & FL_CROUCHING ? ANIM_CR_AIM1HAND : ANIM_AIM1HAND;
break;
case WEAPON_PYTHON:
self.frame = self.flags & FL_CROUCHING ? ANIM_CR_AIMPYTHON : ANIM_AIMPYTHON;
break;
case WEAPON_MP5:
self.frame = self.flags & FL_CROUCHING ? ANIM_CR_AIMMP5 : ANIM_AIMMP5;
break;
case WEAPON_SHOTGUN:
self.frame = self.flags & FL_CROUCHING ? ANIM_CR_AIMSHOTGUN : ANIM_AIMSHOTGUN;
break;
case WEAPON_CROSSBOW:
self.frame = self.flags & FL_CROUCHING ? ANIM_CR_AIMBOW : ANIM_AIMBOW;
break;
case WEAPON_RPG:
self.frame = self.flags & FL_CROUCHING ? ANIM_CR_AIMRPG : ANIM_AIMRPG;
break;
case WEAPON_GAUSS:
self.frame = self.flags & FL_CROUCHING ? ANIM_CR_AIMGAUSS : ANIM_AIMGAUSS;
break;
case WEAPON_EGON:
self.frame = self.flags & FL_CROUCHING ? ANIM_CR_AIMEGON : ANIM_AIMEGON;
break;
case WEAPON_HORNETGUN:
self.frame = self.flags & FL_CROUCHING ? ANIM_CR_AIMHIVE : ANIM_AIMHIVE;
break;
case WEAPON_HANDGRENADE:
self.frame = self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR;
break;
case WEAPON_SATCHEL:
self.frame = self.flags & FL_CROUCHING ? ANIM_CR_AIMCROWBAR : ANIM_AIMCROWBAR;
break;
case WEAPON_TRIPMINE:
self.frame = self.flags & FL_CROUCHING ? ANIM_CR_AIMTRIPMINE : ANIM_AIMTRIPMINE;
break;
case WEAPON_SNARK:
self.frame = self.flags & FL_CROUCHING ? ANIM_CR_AIMSQUEAK : ANIM_AIMSQUEAK;
break;
}
self.baseframe_old = self.baseframe;
self.baseframe_old = self.frame;
}
if ( !( self.flags & FL_ONGROUND ) ) {
self.frame = ANIM_JUMP;
self.baseframe = ANIM_JUMP;
} else if ( vlen( self.velocity ) == 0 ) {
if ( self.flags & FL_CROUCHING ) {
self.frame = ANIM_IDLE_CROUCH;
self.baseframe = ANIM_CROUCHIDLE;
} else {
self.frame = ANIM_IDLE;
self.baseframe = ANIM_IDLE;
}
} else if ( vlen( self.velocity ) < 150 ) {
if ( self.flags & FL_CROUCHING ) {
self.frame = ANIM_RUN_CROUCH;
self.baseframe = ANIM_CRAWL;
} else {
self.frame = ANIM_WALK;
self.baseframe = ANIM_WALK;
}
} else if ( vlen( self.velocity ) > 150 ) {
if ( self.flags & FL_CROUCHING ) {
self.frame = ANIM_RUN_CROUCH;
self.baseframe = ANIM_CRAWL;
} else {
self.frame = ANIM_RUN;
self.baseframe = ANIM_RUN;
}
}*/
}
#endif
#ifdef CSQC
// Lerp it down!