Merge pull request #108 from protocultor/g_swap_speed

Cheat to speed up "weapon change" animations
This commit is contained in:
Yamagi 2023-07-01 16:21:50 +02:00 committed by GitHub
commit 391128e0ac
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 41 additions and 28 deletions

View file

@ -76,6 +76,7 @@ cvar_t *g_disruptor;
cvar_t *aimfix; cvar_t *aimfix;
cvar_t *g_machinegun_norecoil; cvar_t *g_machinegun_norecoil;
cvar_t *g_swap_speed;
void SpawnEntities(char *mapname, char *entities, char *spawnpoint); void SpawnEntities(char *mapname, char *entities, char *spawnpoint);
void ClientThink(edict_t *ent, usercmd_t *cmd); void ClientThink(edict_t *ent, usercmd_t *cmd);

View file

@ -635,6 +635,7 @@ extern cvar_t *g_disruptor;
extern cvar_t *aimfix; extern cvar_t *aimfix;
extern cvar_t *g_machinegun_norecoil; extern cvar_t *g_machinegun_norecoil;
extern cvar_t *g_swap_speed;
/* this is for the count of monsters */ /* this is for the count of monsters */
#define ENT_SLOTS_LEFT \ #define ENT_SLOTS_LEFT \

View file

@ -584,6 +584,31 @@ Think_Weapon(edict_t *ent)
} }
} }
/*
* Client (player) animation for changing weapon
*/
static void
Change_Weap_Animation(edict_t *ent)
{
if (!ent)
{
return;
}
ent->client->anim_priority = ANIM_REVERSE;
if (ent->client->ps.pmove.pm_flags & PMF_DUCKED)
{
ent->s.frame = FRAME_crpain4 + 1;
ent->client->anim_end = FRAME_crpain1;
}
else
{
ent->s.frame = FRAME_pain304 + 1;
ent->client->anim_end = FRAME_pain301;
}
}
/* /*
* Make the weapon ready if there is ammo * Make the weapon ready if there is ammo
*/ */
@ -666,6 +691,7 @@ Weapon_Generic(edict_t *ent, int FRAME_ACTIVATE_LAST, int FRAME_FIRE_LAST, int F
int FRAME_DEACTIVATE_LAST, int *pause_frames, int *fire_frames, void (*fire)(edict_t *ent)) int FRAME_DEACTIVATE_LAST, int *pause_frames, int *fire_frames, void (*fire)(edict_t *ent))
{ {
int n; int n;
const unsigned short int change_speed = (g_swap_speed->value > 0)?(unsigned short int)g_swap_speed->value:1;
if (!ent || !fire) if (!ent || !fire)
{ {
@ -679,41 +705,36 @@ Weapon_Generic(edict_t *ent, int FRAME_ACTIVATE_LAST, int FRAME_FIRE_LAST, int F
if (ent->client->weaponstate == WEAPON_DROPPING) if (ent->client->weaponstate == WEAPON_DROPPING)
{ {
if (ent->client->ps.gunframe == FRAME_DEACTIVATE_LAST) if (ent->client->ps.gunframe >= FRAME_DEACTIVATE_LAST - change_speed + 1)
{ {
ChangeWeapon(ent); ChangeWeapon(ent);
return; return;
} }
else if ((FRAME_DEACTIVATE_LAST - ent->client->ps.gunframe) == 4) else if ( (FRAME_DEACTIVATE_LAST - FRAME_DEACTIVATE_FIRST) >= (4 * change_speed) )
{ {
ent->client->anim_priority = ANIM_REVERSE; unsigned short int remainder = FRAME_DEACTIVATE_LAST - ent->client->ps.gunframe;
// "if (remainder == 4)" at change_speed == 1
if (ent->client->ps.pmove.pm_flags & PMF_DUCKED) if ( ( remainder <= (4 * change_speed) )
&& ( remainder > (3 * change_speed) ) )
{ {
ent->s.frame = FRAME_crpain4 + 1; Change_Weap_Animation(ent);
ent->client->anim_end = FRAME_crpain1;
}
else
{
ent->s.frame = FRAME_pain304 + 1;
ent->client->anim_end = FRAME_pain301;
} }
} }
ent->client->ps.gunframe++; ent->client->ps.gunframe += change_speed;
return; return;
} }
if (ent->client->weaponstate == WEAPON_ACTIVATING) if (ent->client->weaponstate == WEAPON_ACTIVATING)
{ {
if (ent->client->ps.gunframe == FRAME_ACTIVATE_LAST) if (ent->client->ps.gunframe >= FRAME_ACTIVATE_LAST - change_speed + 1)
{ {
ent->client->weaponstate = WEAPON_READY; ent->client->weaponstate = WEAPON_READY;
ent->client->ps.gunframe = FRAME_IDLE_FIRST; ent->client->ps.gunframe = FRAME_IDLE_FIRST;
return; return;
} }
ent->client->ps.gunframe++; ent->client->ps.gunframe += change_speed;
return; return;
} }
@ -722,20 +743,9 @@ Weapon_Generic(edict_t *ent, int FRAME_ACTIVATE_LAST, int FRAME_FIRE_LAST, int F
ent->client->weaponstate = WEAPON_DROPPING; ent->client->weaponstate = WEAPON_DROPPING;
ent->client->ps.gunframe = FRAME_DEACTIVATE_FIRST; ent->client->ps.gunframe = FRAME_DEACTIVATE_FIRST;
if ((FRAME_DEACTIVATE_LAST - FRAME_DEACTIVATE_FIRST) < 4) if ( (FRAME_DEACTIVATE_LAST - FRAME_DEACTIVATE_FIRST) < (4 * change_speed) )
{ {
ent->client->anim_priority = ANIM_REVERSE; Change_Weap_Animation(ent);
if (ent->client->ps.pmove.pm_flags & PMF_DUCKED)
{
ent->s.frame = FRAME_crpain4 + 1;
ent->client->anim_end = FRAME_crpain1;
}
else
{
ent->s.frame = FRAME_pain304 + 1;
ent->client->anim_end = FRAME_pain301;
}
} }
return; return;

View file

@ -260,6 +260,7 @@ InitGame(void)
/* others */ /* others */
aimfix = gi.cvar("aimfix", "0", CVAR_ARCHIVE); aimfix = gi.cvar("aimfix", "0", CVAR_ARCHIVE);
g_machinegun_norecoil = gi.cvar("g_machinegun_norecoil", "0", CVAR_ARCHIVE); g_machinegun_norecoil = gi.cvar("g_machinegun_norecoil", "0", CVAR_ARCHIVE);
g_swap_speed = gi.cvar("g_swap_speed", "1", 0);
/* items */ /* items */
InitItems (); InitItems ();