summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/console_cmds.cpp14
-rw-r--r--src/settings.cpp19
-rw-r--r--src/settings.h1
3 files changed, 34 insertions, 0 deletions
diff --git a/src/console_cmds.cpp b/src/console_cmds.cpp
index bcffc4896..40cf2c57c 100644
--- a/src/console_cmds.cpp
+++ b/src/console_cmds.cpp
@@ -1416,6 +1416,19 @@ DEF_CONSOLE_CMD(ConPatch)
return true;
}
+DEF_CONSOLE_CMD(ConListPatches)
+{
+ if (argc == 0) {
+ IConsoleHelp("List patch options. Usage: 'list_patches'");
+ return true;
+ }
+
+ if (argc != 1) return false;
+
+ IConsoleListPatches();
+ return true;
+}
+
DEF_CONSOLE_CMD(ConListDumpVariables)
{
const IConsoleVar *var;
@@ -1497,6 +1510,7 @@ void IConsoleStdLibRegister()
IConsoleCmdRegister("pwd", ConPrintWorkingDirectory);
IConsoleCmdRegister("clear", ConClearBuffer);
IConsoleCmdRegister("patch", ConPatch);
+ IConsoleCmdRegister("list_patches", ConListPatches);
IConsoleAliasRegister("dir", "ls");
IConsoleAliasRegister("del", "rm %+");
diff --git a/src/settings.cpp b/src/settings.cpp
index c9b1cdef9..2a758ab22 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -1829,6 +1829,25 @@ void IConsoleGetPatchSetting(const char *name)
name, value, (sd->desc.flags & SGF_0ISDISABLED) ? "(0) " : "", sd->desc.min, sd->desc.max);
}
+void IConsoleListPatches()
+{
+ IConsolePrintF(_icolour_warn, "All patches with their current value:");
+
+ for (const SettingDesc *sd = _patch_settings; sd->save.cmd != SL_END; sd++) {
+ char value[80];
+ const void *ptr = GetVariableAddress((_game_mode == GM_MENU) ? &_patches_newgame : &_patches, &sd->save);
+
+ if (sd->desc.cmd == SDT_BOOLX) {
+ snprintf(value, lengthof(value), (*(bool*)ptr == 1) ? "on" : "off");
+ } else {
+ snprintf(value, lengthof(value), "%d", (uint32)ReadValue(ptr, sd->save.conv));
+ }
+ IConsolePrintF(_icolour_def, "%s = %s", sd->desc.name, value);
+ }
+
+ IConsolePrintF(_icolour_warn, "Use 'patch' command to change a value");
+}
+
/** Save and load handler for patches/settings
* @param osd SettingDesc struct containing all information
* @param object can be either NULL in which case we load global variables or
diff --git a/src/settings.h b/src/settings.h
index 726b72483..7d00a44a6 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -86,6 +86,7 @@ extern Patches _patches_newgame;
bool IConsoleSetPatchSetting(const char *name, int32 value);
void IConsoleGetPatchSetting(const char *name);
+void IConsoleListPatches();
const SettingDesc *GetPatchFromName(const char *name, uint *i);
bool SetPatchValue(uint index, const Patches *object, int32 value);