diff --git a/include/teamplay.h b/include/teamplay.h index 5b050f2..7c2c850 100644 --- a/include/teamplay.h +++ b/include/teamplay.h @@ -31,4 +31,6 @@ extern cvar_t *cl_deadbodyfilter; extern cvar_t *cl_gibfilter; +// FIXME: prefix these with TP_ or Team_ ? void CL_InitTeamplay (void); +void CL_BestWeaponImpulse (void); diff --git a/source/cl_input.c b/source/cl_input.c index b911b40..3c3b002 100644 --- a/source/cl_input.c +++ b/source/cl_input.c @@ -181,7 +181,14 @@ void IN_UseUp (void) {KeyUp(&in_use);} void IN_JumpDown (void) {KeyDown(&in_jump);} void IN_JumpUp (void) {KeyUp(&in_jump);} -void IN_Impulse (void) {in_impulse=atoi(Cmd_Argv(1));} +void IN_Impulse (void) +{ + in_impulse= atoi(Cmd_Argv(1)); + if (Cmd_Argc() <= 2) + return; + + CL_BestWeaponImpulse(); // HACK HACK HACK +} /* =============== diff --git a/source/teamplay.c b/source/teamplay.c index 2f198dd..99c0bfe 100644 --- a/source/teamplay.c +++ b/source/teamplay.c @@ -26,6 +26,9 @@ $Id$ */ +#include "bothdefs.h" +#include "client.h" +#include "cmd.h" #include "cvar.h" #include "teamplay.h" @@ -33,6 +36,62 @@ cvar_t *cl_deadbodyfilter; cvar_t *cl_gibfilter; +void CL_BestWeaponImpulse (void) +{ + int best, i, imp, items; + extern int in_impulse; + + items = cl.stats[STAT_ITEMS]; + best = 0; + + for (i = Cmd_Argc() - 1; i > 0; i--) + { + imp = atoi(Cmd_Argv(i)); + if (imp < 1 || imp > 8) + continue; + + switch (imp) + { + case 1: + if (items & IT_AXE) + best = 1; + break; + case 2: + if (items & IT_SHOTGUN && cl.stats[STAT_SHELLS] >= 1) + best = 2; + break; + case 3: + if (items & IT_SUPER_SHOTGUN && cl.stats[STAT_SHELLS] >= 2) + best = 3; + break; + case 4: + if (items & IT_NAILGUN && cl.stats[STAT_NAILS] >= 1) + best = 4; + break; + case 5: + if (items & IT_SUPER_NAILGUN && cl.stats[STAT_NAILS] >= 2) + best = 5; + break; + case 6: + if (items & IT_GRENADE_LAUNCHER && cl.stats[STAT_ROCKETS] >= 1) + best = 6; + break; + case 7: + if (items & IT_ROCKET_LAUNCHER && cl.stats[STAT_ROCKETS] >= 1) + best = 7; + break; + case 8: + if (items & IT_LIGHTNING && cl.stats[STAT_CELLS] >= 1) + best = 8; + + } + } + + if (best) + in_impulse = best; +} + + void CL_InitTeamplay (void) { cl_deadbodyfilter = Cvar_Get("cl_deadbodyfilter", "0", CVAR_NONE, "None");