mirror of
https://github.com/yquake2/yquake2remaster.git
synced 2024-11-13 00:24:44 +00:00
Faster "weapprev" and "weapnext" behavior
These commands can now "count" how many times they have been called, similar to how "cycleweap" operates after #865. This allows for changing to different weapons, instead of just going "one down" or "one up". New cvar "g_quick_swap" allows to enable/disable this behavior.
This commit is contained in:
parent
4967b9d0ca
commit
9eca08fd92
5 changed files with 37 additions and 22 deletions
|
@ -222,6 +222,12 @@ Set `0` by default.
|
||||||
single player, the same way as in multiplayer.
|
single player, the same way as in multiplayer.
|
||||||
This cvar only works if the game.dll implements this behaviour.
|
This cvar only works if the game.dll implements this behaviour.
|
||||||
|
|
||||||
|
* **g_quick_weap**: If set to `1`, both *weapprev* and *weapnext*
|
||||||
|
commands will "count" how many times they have been called, making
|
||||||
|
possible to skip weapons by quickly tapping one of these keys.
|
||||||
|
By default this cvar is set to `0`, and will only work if the
|
||||||
|
game.dll implements this behaviour.
|
||||||
|
|
||||||
* **g_swap_speed**: Sets the speed of the "changing weapon" animation.
|
* **g_swap_speed**: Sets the speed of the "changing weapon" animation.
|
||||||
Default is `1`. If set to `2`, it will be double the speed, `3` is
|
Default is `1`. If set to `2`, it will be double the speed, `3` is
|
||||||
the triple... up until the max of `8`, since there are at least 2
|
the triple... up until the max of `8`, since there are at least 2
|
||||||
|
|
|
@ -732,17 +732,25 @@ Cmd_WeapPrev_f(edict_t *ent)
|
||||||
|
|
||||||
cl = ent->client;
|
cl = ent->client;
|
||||||
|
|
||||||
if (!cl->pers.weapon)
|
if (g_quick_weap->value && cl->newweapon)
|
||||||
|
{
|
||||||
|
it = cl->newweapon;
|
||||||
|
}
|
||||||
|
else if (cl->pers.weapon)
|
||||||
|
{
|
||||||
|
it = cl->pers.weapon;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
selected_weapon = ITEM_INDEX(cl->pers.weapon);
|
selected_weapon = ITEM_INDEX(it);
|
||||||
|
|
||||||
/* scan for the next valid one */
|
/* scan for the next valid one */
|
||||||
for (i = 1; i <= MAX_ITEMS; i++)
|
for (i = 1; i <= MAX_ITEMS; i++)
|
||||||
{
|
{
|
||||||
index = (selected_weapon + i) % MAX_ITEMS;
|
index = (selected_weapon + MAX_ITEMS - i) % MAX_ITEMS;
|
||||||
|
|
||||||
if (!cl->pers.inventory[index])
|
if (!cl->pers.inventory[index])
|
||||||
{
|
{
|
||||||
|
@ -751,19 +759,14 @@ Cmd_WeapPrev_f(edict_t *ent)
|
||||||
|
|
||||||
it = &itemlist[index];
|
it = &itemlist[index];
|
||||||
|
|
||||||
if (!it->use)
|
if (!it->use || !(it->flags & IT_WEAPON))
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(it->flags & IT_WEAPON))
|
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
it->use(ent, it);
|
it->use(ent, it);
|
||||||
|
|
||||||
if (cl->pers.weapon == it)
|
if (cl->newweapon == it)
|
||||||
{
|
{
|
||||||
return; /* successful */
|
return; /* successful */
|
||||||
}
|
}
|
||||||
|
@ -785,17 +788,25 @@ Cmd_WeapNext_f(edict_t *ent)
|
||||||
|
|
||||||
cl = ent->client;
|
cl = ent->client;
|
||||||
|
|
||||||
if (!cl->pers.weapon)
|
if (g_quick_weap->value && cl->newweapon)
|
||||||
|
{
|
||||||
|
it = cl->newweapon;
|
||||||
|
}
|
||||||
|
else if (cl->pers.weapon)
|
||||||
|
{
|
||||||
|
it = cl->pers.weapon;
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
selected_weapon = ITEM_INDEX(cl->pers.weapon);
|
selected_weapon = ITEM_INDEX(it);
|
||||||
|
|
||||||
/* scan for the next valid one */
|
/* scan for the next valid one */
|
||||||
for (i = 1; i <= MAX_ITEMS; i++)
|
for (i = 1; i <= MAX_ITEMS; i++)
|
||||||
{
|
{
|
||||||
index = (selected_weapon + MAX_ITEMS - i) % MAX_ITEMS;
|
index = (selected_weapon + i) % MAX_ITEMS;
|
||||||
|
|
||||||
if (!cl->pers.inventory[index])
|
if (!cl->pers.inventory[index])
|
||||||
{
|
{
|
||||||
|
@ -804,19 +815,14 @@ Cmd_WeapNext_f(edict_t *ent)
|
||||||
|
|
||||||
it = &itemlist[index];
|
it = &itemlist[index];
|
||||||
|
|
||||||
if (!it->use)
|
if (!it->use || !(it->flags & IT_WEAPON))
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!(it->flags & IT_WEAPON))
|
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
it->use(ent, it);
|
it->use(ent, it);
|
||||||
|
|
||||||
if (cl->pers.weapon == it)
|
if (cl->newweapon == it)
|
||||||
{
|
{
|
||||||
return; /* successful */
|
return; /* successful */
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,6 +88,7 @@ cvar_t *gib_on;
|
||||||
|
|
||||||
cvar_t *aimfix;
|
cvar_t *aimfix;
|
||||||
cvar_t *g_machinegun_norecoil;
|
cvar_t *g_machinegun_norecoil;
|
||||||
|
cvar_t *g_quick_weap;
|
||||||
cvar_t *g_swap_speed;
|
cvar_t *g_swap_speed;
|
||||||
|
|
||||||
void G_RunFrame(void);
|
void G_RunFrame(void);
|
||||||
|
|
|
@ -551,6 +551,7 @@ extern cvar_t *sv_maplist;
|
||||||
|
|
||||||
extern cvar_t *aimfix;
|
extern cvar_t *aimfix;
|
||||||
extern cvar_t *g_machinegun_norecoil;
|
extern cvar_t *g_machinegun_norecoil;
|
||||||
|
extern cvar_t *g_quick_weap;
|
||||||
extern cvar_t *g_swap_speed;
|
extern cvar_t *g_swap_speed;
|
||||||
|
|
||||||
#define world (&g_edicts[0])
|
#define world (&g_edicts[0])
|
||||||
|
|
|
@ -246,6 +246,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_quick_weap = gi.cvar("g_quick_weap", "0", CVAR_ARCHIVE);
|
||||||
g_swap_speed = gi.cvar("g_swap_speed", "1", 0);
|
g_swap_speed = gi.cvar("g_swap_speed", "1", 0);
|
||||||
|
|
||||||
/* items */
|
/* items */
|
||||||
|
|
Loading…
Reference in a new issue