From 6f282f35c6365a2e4ad72e1409fc4843f74294dd Mon Sep 17 00:00:00 2001 From: havoc Date: Sun, 18 Mar 2007 22:44:59 +0000 Subject: [PATCH] changed bestweapon command to match the one in proquake - taking each weapon identifier as a separate parameter, rather than one string of them, I don't know why the person asking for bestweapon support gave me an example of a single parameter as no other engine seems to do it that way git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@6998 d7cf8633-e32d-0410-b094-e92efae38249 --- cl_input.c | 58 +++++++++++++++++++++++++++++++----------------------- todo | 1 + 2 files changed, 34 insertions(+), 25 deletions(-) diff --git a/cl_input.c b/cl_input.c index 96e57d9d..c8b9515e 100644 --- a/cl_input.c +++ b/cl_input.c @@ -197,47 +197,55 @@ void IN_JumpUp (void) {KeyUp(&in_jump);} void IN_Impulse (void) {in_impulse=atoi(Cmd_Argv(1));} -int in_bestweapon_info[][5] = +struct { - {'1', 1, IT_AXE, STAT_SHELLS, 0}, - {'2', 2, IT_SHOTGUN, STAT_SHELLS, 1}, - {'3', 3, IT_SUPER_SHOTGUN, STAT_SHELLS, 1}, - {'4', 4, IT_NAILGUN, STAT_NAILS, 1}, - {'5', 5, IT_SUPER_NAILGUN, STAT_NAILS, 1}, - {'6', 6, IT_GRENADE_LAUNCHER, STAT_ROCKETS, 1}, - {'7', 7, IT_ROCKET_LAUNCHER, STAT_ROCKETS, 1}, - {'8', 8, IT_LIGHTNING, STAT_CELLS, 1}, - {'9', 9, 128, STAT_CELLS, 1}, // generic energy weapon for mods - {'p', 209, 128, STAT_CELLS, 1}, // dpmod plasma gun - {'w', 210, 8388608, STAT_CELLS, 1}, // dpmod plasma wave cannon - {'l', 225, HIT_LASER_CANNON, STAT_CELLS, 1}, // hipnotic laser cannon - {'h', 226, HIT_MJOLNIR, STAT_CELLS, 0}, // hipnotic mjolnir hammer - {-1, 0, 0, 0, 0} + const char *name; + int impulse; + int weaponbit; + int ammostat; + int ammomin; +} +in_bestweapon_info[] = +{ + {"1", 1, IT_AXE, STAT_SHELLS, 0}, + {"2", 2, IT_SHOTGUN, STAT_SHELLS, 1}, + {"3", 3, IT_SUPER_SHOTGUN, STAT_SHELLS, 1}, + {"4", 4, IT_NAILGUN, STAT_NAILS, 1}, + {"5", 5, IT_SUPER_NAILGUN, STAT_NAILS, 1}, + {"6", 6, IT_GRENADE_LAUNCHER, STAT_ROCKETS, 1}, + {"7", 7, IT_ROCKET_LAUNCHER, STAT_ROCKETS, 1}, + {"8", 8, IT_LIGHTNING, STAT_CELLS, 1}, + {"9", 9, 128, STAT_CELLS, 1}, // generic energy weapon for mods + {"p", 209, 128, STAT_CELLS, 1}, // dpmod plasma gun + {"w", 210, 8388608, STAT_CELLS, 1}, // dpmod plasma wave cannon + {"l", 225, HIT_LASER_CANNON, STAT_CELLS, 1}, // hipnotic laser cannon + {"h", 226, HIT_MJOLNIR, STAT_CELLS, 0}, // hipnotic mjolnir hammer + {NULL, 0, 0, 0, 0} }; void IN_BestWeapon (void) { int i, n; - const char *s; - if (Cmd_Argc() != 2) + const char *t; + if (Cmd_Argc() < 2) { - Con_Printf("bestweapon requires 1 parameter\n"); + Con_Printf("bestweapon requires 1 or more parameters\n"); return; } - s = Cmd_Argv(1); - for (i = 0;s[i];i++) + for (i = 1;i < Cmd_Argc();i++) { + t = Cmd_Argv(i); // figure out which weapon this character refers to - for (n = 0;in_bestweapon_info[n][0] >= 0;n++) + for (n = 0;in_bestweapon_info[n].name;n++) { - if (in_bestweapon_info[n][0] == s[i]) + if (!strcmp(in_bestweapon_info[n].name, t)) { // we found out what weapon this character refers to // check if the inventory contains the weapon and enough ammo - if ((cl.stats[STAT_ITEMS] & in_bestweapon_info[n][2]) && (cl.stats[in_bestweapon_info[n][3]] >= in_bestweapon_info[n][4])) + if ((cl.stats[STAT_ITEMS] & in_bestweapon_info[n].weaponbit) && (cl.stats[in_bestweapon_info[n].ammostat] >= in_bestweapon_info[n].ammomin)) { // we found one of the weapons the player wanted // send an impulse to switch to it - in_impulse = in_bestweapon_info[n][1]; + in_impulse = in_bestweapon_info[n].impulse; return; } break; @@ -1667,7 +1675,7 @@ void CL_InitInput (void) Cmd_AddCommand ("-button16", IN_Button16Up, "deactivate button16"); // LordHavoc: added bestweapon command - Cmd_AddCommand ("bestweapon", IN_BestWeapon, "send an impulse number to server to select the first usable weapon out of several (example: 87654321)"); + Cmd_AddCommand ("bestweapon", IN_BestWeapon, "send an impulse number to server to select the first usable weapon out of several (example: 8 7 6 5 4 3 2 1)"); Cvar_RegisterVariable(&cl_movement); Cvar_RegisterVariable(&cl_movement_minping); diff --git a/todo b/todo index 1b46fa8f..0415f3c1 100644 --- a/todo +++ b/todo @@ -1,4 +1,5 @@ - todo: difficulty ratings are: 0 = trivial, 1 = easy, 2 = easy-moderate, 3 = moderate, 4 = moderate-hard, 5 = hard, 6 = hard++, 7 = nightmare, d = done, -d = done but have not notified the people who asked for it, f = failed, -f = failed but have not notified the people who asked for it +0 bug darkplaces client: if you press 1 during the demo loop when quake starts, escape doesn't do anything until you hit some other key (daemon) 0 bug darkplaces client: can't move mouse around in nexuiz menu if vid_mouse is 0 0 bug darkplaces client: decals are not sticking to submodels 0 bug darkplaces loader: make rtlight entity loader support q3map/q3map2 lights properly, they use a spawnflag for LINEAR mode, by default they use 1/(x*x) falloff (Carni, motorsep) -- 2.39.2