mirror of
https://github.com/fabiangreffrath/woof.git
synced 2025-09-24 04:29:34 -04:00
simplify matters in cheat code handling, again (#768)
One less level of function pointer indirection, still full clang-15 compatible.
This commit is contained in:
parent
004cd3928d
commit
e413bb866a
@ -52,16 +52,16 @@
|
|||||||
//
|
//
|
||||||
//-----------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------
|
||||||
|
|
||||||
static void cheat_mus(cheatarg_t arg);
|
static void cheat_mus(char *buf);
|
||||||
static void cheat_choppers();
|
static void cheat_choppers();
|
||||||
static void cheat_god();
|
static void cheat_god();
|
||||||
static void cheat_fa();
|
static void cheat_fa();
|
||||||
static void cheat_k();
|
static void cheat_k();
|
||||||
static void cheat_kfa();
|
static void cheat_kfa();
|
||||||
static void cheat_noclip();
|
static void cheat_noclip();
|
||||||
static void cheat_pw(cheatarg_t arg);
|
static void cheat_pw(int pw);
|
||||||
static void cheat_behold();
|
static void cheat_behold();
|
||||||
static void cheat_clev(cheatarg_t arg);
|
static void cheat_clev(char *buf);
|
||||||
static void cheat_clev0();
|
static void cheat_clev0();
|
||||||
static void cheat_mypos();
|
static void cheat_mypos();
|
||||||
static void cheat_comp();
|
static void cheat_comp();
|
||||||
@ -74,11 +74,11 @@ static void cheat_hom();
|
|||||||
static void cheat_fast();
|
static void cheat_fast();
|
||||||
static void cheat_key();
|
static void cheat_key();
|
||||||
static void cheat_keyx();
|
static void cheat_keyx();
|
||||||
static void cheat_keyxx(cheatarg_t arg);
|
static void cheat_keyxx(int key);
|
||||||
static void cheat_weap();
|
static void cheat_weap();
|
||||||
static void cheat_weapx(cheatarg_t arg);
|
static void cheat_weapx(char *buf);
|
||||||
static void cheat_ammo();
|
static void cheat_ammo();
|
||||||
static void cheat_ammox(cheatarg_t arg);
|
static void cheat_ammox(char *buf);
|
||||||
static void cheat_smart();
|
static void cheat_smart();
|
||||||
static void cheat_pitch();
|
static void cheat_pitch();
|
||||||
static void cheat_nuke();
|
static void cheat_nuke();
|
||||||
@ -87,7 +87,7 @@ static void cheat_buddha();
|
|||||||
static void cheat_spechits();
|
static void cheat_spechits();
|
||||||
static void cheat_notarget();
|
static void cheat_notarget();
|
||||||
|
|
||||||
static void cheat_autoaim(); // killough 7/19/98
|
static void cheat_autoaim(); // killough 7/19/98
|
||||||
static void cheat_tst();
|
static void cheat_tst();
|
||||||
static void cheat_showfps(); // [FG] FPS counter widget
|
static void cheat_showfps(); // [FG] FPS counter widget
|
||||||
|
|
||||||
@ -114,7 +114,7 @@ static void cheat_showfps(); // [FG] FPS counter widget
|
|||||||
|
|
||||||
struct cheat_s cheat[] = {
|
struct cheat_s cheat[] = {
|
||||||
{"idmus", "Change music", always,
|
{"idmus", "Change music", always,
|
||||||
{cheat_mus}, {-2} },
|
{cheat_mus}, -2 },
|
||||||
|
|
||||||
{"idchoppers", "Chainsaw", not_net | not_demo,
|
{"idchoppers", "Chainsaw", not_net | not_demo,
|
||||||
{cheat_choppers} },
|
{cheat_choppers} },
|
||||||
@ -141,31 +141,31 @@ struct cheat_s cheat[] = {
|
|||||||
{cheat_noclip} },
|
{cheat_noclip} },
|
||||||
|
|
||||||
{"idbeholdo", NULL, not_net | not_demo | not_deh,
|
{"idbeholdo", NULL, not_net | not_demo | not_deh,
|
||||||
{cheat_pw}, {NUMPOWERS} }, // [FG] disable all powerups at once
|
{cheat_pw}, NUMPOWERS }, // [FG] disable all powerups at once
|
||||||
|
|
||||||
{"idbeholdv", "Invincibility", not_net | not_demo,
|
{"idbeholdv", "Invincibility", not_net | not_demo,
|
||||||
{cheat_pw}, {pw_invulnerability} },
|
{cheat_pw}, pw_invulnerability },
|
||||||
|
|
||||||
{"idbeholds", "Berserk", not_net | not_demo,
|
{"idbeholds", "Berserk", not_net | not_demo,
|
||||||
{cheat_pw}, {pw_strength} },
|
{cheat_pw}, pw_strength },
|
||||||
|
|
||||||
{"idbeholdi", "Invisibility", not_net | not_demo,
|
{"idbeholdi", "Invisibility", not_net | not_demo,
|
||||||
{cheat_pw}, {pw_invisibility} },
|
{cheat_pw}, pw_invisibility },
|
||||||
|
|
||||||
{"idbeholdr", "Radiation Suit", not_net | not_demo,
|
{"idbeholdr", "Radiation Suit", not_net | not_demo,
|
||||||
{cheat_pw}, {pw_ironfeet} },
|
{cheat_pw}, pw_ironfeet },
|
||||||
|
|
||||||
{"idbeholda", "Auto-map", not_net | not_demo,
|
{"idbeholda", "Auto-map", not_net | not_demo,
|
||||||
{cheat_pw}, {pw_allmap} },
|
{cheat_pw}, pw_allmap },
|
||||||
|
|
||||||
{"idbeholdl", "Lite-Amp Goggles", not_net | not_demo,
|
{"idbeholdl", "Lite-Amp Goggles", not_net | not_demo,
|
||||||
{cheat_pw}, {pw_infrared} },
|
{cheat_pw}, pw_infrared },
|
||||||
|
|
||||||
{"idbehold", "BEHOLD menu", not_net | not_demo,
|
{"idbehold", "BEHOLD menu", not_net | not_demo,
|
||||||
{cheat_behold} },
|
{cheat_behold} },
|
||||||
|
|
||||||
{"idclev", "Level Warp", not_net | not_demo | not_menu,
|
{"idclev", "Level Warp", not_net | not_demo | not_menu,
|
||||||
{cheat_clev}, {-2} },
|
{cheat_clev}, -2 },
|
||||||
|
|
||||||
{"idclev", "Level Warp", not_net | not_demo | not_menu,
|
{"idclev", "Level Warp", not_net | not_demo | not_menu,
|
||||||
{cheat_clev0} },
|
{cheat_clev0} },
|
||||||
@ -204,34 +204,34 @@ struct cheat_s cheat[] = {
|
|||||||
{cheat_keyx} },
|
{cheat_keyx} },
|
||||||
|
|
||||||
{"keyrc", NULL, not_net | not_demo,
|
{"keyrc", NULL, not_net | not_demo,
|
||||||
{cheat_keyxx}, {it_redcard} },
|
{cheat_keyxx}, it_redcard },
|
||||||
|
|
||||||
{"keyyc", NULL, not_net | not_demo,
|
{"keyyc", NULL, not_net | not_demo,
|
||||||
{cheat_keyxx}, {it_yellowcard} },
|
{cheat_keyxx}, it_yellowcard },
|
||||||
|
|
||||||
{"keybc", NULL, not_net | not_demo,
|
{"keybc", NULL, not_net | not_demo,
|
||||||
{cheat_keyxx}, {it_bluecard} },
|
{cheat_keyxx}, it_bluecard },
|
||||||
|
|
||||||
{"keyrs", NULL, not_net | not_demo,
|
{"keyrs", NULL, not_net | not_demo,
|
||||||
{cheat_keyxx}, {it_redskull} },
|
{cheat_keyxx}, it_redskull },
|
||||||
|
|
||||||
{"keyys", NULL, not_net | not_demo,
|
{"keyys", NULL, not_net | not_demo,
|
||||||
{cheat_keyxx}, {it_yellowskull} },
|
{cheat_keyxx}, it_yellowskull },
|
||||||
|
|
||||||
{"keybs", NULL, not_net | not_demo,
|
{"keybs", NULL, not_net | not_demo,
|
||||||
{cheat_keyxx}, {it_blueskull} }, // killough 2/16/98: end generalized keys
|
{cheat_keyxx}, it_blueskull }, // killough 2/16/98: end generalized keys
|
||||||
|
|
||||||
{"weap", NULL, not_net | not_demo,
|
{"weap", NULL, not_net | not_demo,
|
||||||
{cheat_weap} }, // killough 2/16/98: generalized weapon cheats
|
{cheat_weap} }, // killough 2/16/98: generalized weapon cheats
|
||||||
|
|
||||||
{"weap", NULL, not_net | not_demo,
|
{"weap", NULL, not_net | not_demo,
|
||||||
{cheat_weapx}, {-1} },
|
{cheat_weapx}, -1 },
|
||||||
|
|
||||||
{"ammo", NULL, not_net | not_demo,
|
{"ammo", NULL, not_net | not_demo,
|
||||||
{cheat_ammo} },
|
{cheat_ammo} },
|
||||||
|
|
||||||
{"ammo", NULL, not_net | not_demo,
|
{"ammo", NULL, not_net | not_demo,
|
||||||
{cheat_ammox}, {-1} }, // killough 2/16/98: end generalized weapons
|
{cheat_ammox}, -1 }, // killough 2/16/98: end generalized weapons
|
||||||
|
|
||||||
{"tran", NULL, always,
|
{"tran", NULL, always,
|
||||||
{cheat_tran} }, // invoke translucency // phares
|
{cheat_tran} }, // invoke translucency // phares
|
||||||
@ -300,9 +300,8 @@ static void cheat_autoaim()
|
|||||||
"Projectile autoaiming off";
|
"Projectile autoaiming off";
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cheat_mus(cheatarg_t arg)
|
static void cheat_mus(char *buf)
|
||||||
{
|
{
|
||||||
char *buf = arg.s;
|
|
||||||
int musnum;
|
int musnum;
|
||||||
|
|
||||||
//jff 3/20/98 note: this cheat allowed in netgame/demorecord
|
//jff 3/20/98 note: this cheat allowed in netgame/demorecord
|
||||||
@ -464,9 +463,8 @@ static void cheat_noclip()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// 'behold?' power-up cheats (modified for infinite duration -- killough)
|
// 'behold?' power-up cheats (modified for infinite duration -- killough)
|
||||||
static void cheat_pw(cheatarg_t arg)
|
static void cheat_pw(int pw)
|
||||||
{
|
{
|
||||||
int pw = arg.i;
|
|
||||||
if (pw == NUMPOWERS)
|
if (pw == NUMPOWERS)
|
||||||
{
|
{
|
||||||
memset(plyr->powers, 0, sizeof(plyr->powers));
|
memset(plyr->powers, 0, sizeof(plyr->powers));
|
||||||
@ -510,9 +508,8 @@ static void cheat_clev0()
|
|||||||
free(cur);
|
free(cur);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cheat_clev(cheatarg_t arg)
|
static void cheat_clev(char *buf)
|
||||||
{
|
{
|
||||||
char *buf = arg.s;
|
|
||||||
int epsd, map;
|
int epsd, map;
|
||||||
mapentry_t* entry;
|
mapentry_t* entry;
|
||||||
|
|
||||||
@ -623,7 +620,7 @@ static void cheat_tran()
|
|||||||
D_SetPredefinedTranslucency();
|
D_SetPredefinedTranslucency();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cheat_massacre() // jff 2/01/98 kill all monsters
|
static void cheat_massacre() // jff 2/01/98 kill all monsters
|
||||||
{
|
{
|
||||||
// jff 02/01/98 'em' cheat - kill all monsters
|
// jff 02/01/98 'em' cheat - kill all monsters
|
||||||
// partially taken from Chi's .46 port
|
// partially taken from Chi's .46 port
|
||||||
@ -844,9 +841,8 @@ static void cheat_keyx()
|
|||||||
plyr->message = "Card, Skull"; // Ty 03/27/98 - *not* externalized
|
plyr->message = "Card, Skull"; // Ty 03/27/98 - *not* externalized
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cheat_keyxx(cheatarg_t arg)
|
static void cheat_keyxx(int key)
|
||||||
{
|
{
|
||||||
int key = arg.i;
|
|
||||||
plyr->message = (plyr->cards[key] = !plyr->cards[key]) ?
|
plyr->message = (plyr->cards[key] = !plyr->cards[key]) ?
|
||||||
"Key Added" : "Key Removed"; // Ty 03/27/98 - *not* externalized
|
"Key Added" : "Key Removed"; // Ty 03/27/98 - *not* externalized
|
||||||
}
|
}
|
||||||
@ -859,9 +855,8 @@ static void cheat_weap()
|
|||||||
"Weapon number 1-9" : "Weapon number 1-8";
|
"Weapon number 1-9" : "Weapon number 1-8";
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cheat_weapx(cheatarg_t arg)
|
static void cheat_weapx(char *buf)
|
||||||
{
|
{
|
||||||
char *buf = arg.s;
|
|
||||||
int w = *buf - '1';
|
int w = *buf - '1';
|
||||||
|
|
||||||
if ((w==wp_supershotgun && gamemode!=commercial) || // killough 2/28/98
|
if ((w==wp_supershotgun && gamemode!=commercial) || // killough 2/28/98
|
||||||
@ -869,7 +864,7 @@ static void cheat_weapx(cheatarg_t arg)
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
if (w==wp_fist) // make '1' apply beserker strength toggle
|
if (w==wp_fist) // make '1' apply beserker strength toggle
|
||||||
cheat_pw((cheatarg_t){.i = pw_strength});
|
cheat_pw(pw_strength);
|
||||||
else
|
else
|
||||||
if (w >= 0 && w < NUMWEAPONS)
|
if (w >= 0 && w < NUMWEAPONS)
|
||||||
{
|
{
|
||||||
@ -890,9 +885,8 @@ static void cheat_ammo()
|
|||||||
plyr->message = "Ammo 1-4, Backpack"; // Ty 03/27/98 - *not* externalized
|
plyr->message = "Ammo 1-4, Backpack"; // Ty 03/27/98 - *not* externalized
|
||||||
}
|
}
|
||||||
|
|
||||||
static void cheat_ammox(cheatarg_t arg)
|
static void cheat_ammox(char *buf)
|
||||||
{
|
{
|
||||||
char *buf = arg.s;
|
|
||||||
int a = *buf - '1';
|
int a = *buf - '1';
|
||||||
if (*buf == 'b') // Ty 03/27/98 - strings *not* externalized
|
if (*buf == 'b') // Ty 03/27/98 - strings *not* externalized
|
||||||
if ((plyr->backpack = !plyr->backpack))
|
if ((plyr->backpack = !plyr->backpack))
|
||||||
@ -960,7 +954,7 @@ boolean M_FindCheats(int key)
|
|||||||
{
|
{
|
||||||
*arg++ = tolower(key); // store key in arg buffer
|
*arg++ = tolower(key); // store key in arg buffer
|
||||||
if (!--argsleft) // if last key in arg list,
|
if (!--argsleft) // if last key in arg list,
|
||||||
cheat[cht].func.p1((cheatarg_t){.s = argbuf}); // process the arg buffer
|
cheat[cht].func.s(argbuf); // process the arg buffer
|
||||||
return 1; // affirmative response
|
return 1; // affirmative response
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1006,18 +1000,18 @@ boolean M_FindCheats(int key)
|
|||||||
!(cheat[i].when & beta_only && !beta_emulation) &&
|
!(cheat[i].when & beta_only && !beta_emulation) &&
|
||||||
!(cheat[i].when & not_deh && cheat[i].deh_modified))
|
!(cheat[i].when & not_deh && cheat[i].deh_modified))
|
||||||
{
|
{
|
||||||
if (cheat[i].arg.i < 0) // if additional args are required
|
if (cheat[i].arg < 0) // if additional args are required
|
||||||
{
|
{
|
||||||
cht = i; // remember this cheat code
|
cht = i; // remember this cheat code
|
||||||
arg = argbuf; // point to start of arg buffer
|
arg = argbuf; // point to start of arg buffer
|
||||||
argsleft = -cheat[i].arg.i; // number of args expected
|
argsleft = -cheat[i].arg; // number of args expected
|
||||||
ret = 1; // responder has eaten key
|
ret = 1; // responder has eaten key
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if (!matchedbefore) // allow only one cheat at a time
|
if (!matchedbefore) // allow only one cheat at a time
|
||||||
{
|
{
|
||||||
matchedbefore = ret = 1; // responder has eaten key
|
matchedbefore = ret = 1; // responder has eaten key
|
||||||
cheat[i].func.p1(cheat[i].arg); // call cheat handler
|
cheat[i].func.i(cheat[i].arg); // call cheat handler
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -31,19 +31,15 @@
|
|||||||
|
|
||||||
#include "doomtype.h"
|
#include "doomtype.h"
|
||||||
|
|
||||||
typedef union cheatarg_u
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
char *s;
|
|
||||||
} cheatarg_t;
|
|
||||||
|
|
||||||
typedef void (*cheatf_v)();
|
typedef void (*cheatf_v)();
|
||||||
typedef void (*cheatf_p1)(cheatarg_t);
|
typedef void (*cheatf_i)(int i);
|
||||||
|
typedef void (*cheatf_s)(char *s);
|
||||||
|
|
||||||
typedef union
|
typedef union
|
||||||
{
|
{
|
||||||
cheatf_v v;
|
cheatf_v v;
|
||||||
cheatf_p1 p1;
|
cheatf_i i;
|
||||||
|
cheatf_s s;
|
||||||
} cheatf_t;
|
} cheatf_t;
|
||||||
|
|
||||||
// killough 4/16/98: Cheat table structure
|
// killough 4/16/98: Cheat table structure
|
||||||
@ -62,7 +58,7 @@ extern struct cheat_s {
|
|||||||
not_net = not_dm | not_coop
|
not_net = not_dm | not_coop
|
||||||
} const when;
|
} const when;
|
||||||
const cheatf_t func;
|
const cheatf_t func;
|
||||||
const cheatarg_t arg;
|
const int arg;
|
||||||
uint64_t code, mask;
|
uint64_t code, mask;
|
||||||
boolean deh_modified; // killough 9/12/98
|
boolean deh_modified; // killough 9/12/98
|
||||||
} cheat[];
|
} cheat[];
|
||||||
|
Loading…
x
Reference in New Issue
Block a user