From b408818e749a72bd264881d0e21ad5fe89036134 Mon Sep 17 00:00:00 2001 From: superp00t Date: Mon, 14 Aug 2023 17:03:02 -0400 Subject: [PATCH] feat(client): process command-line arguments in InitializeGlobal() --- src/client/Client.cpp | 60 ++++++++++++++++++++++++++++++++++++++++--- src/client/Client.hpp | 41 +++++++++++++++++++++++++++++ 2 files changed, 98 insertions(+), 3 deletions(-) diff --git a/src/client/Client.cpp b/src/client/Client.cpp index 8d423b7..cc10ec3 100644 --- a/src/client/Client.cpp +++ b/src/client/Client.cpp @@ -17,6 +17,7 @@ #include #include #include +#include CVar* Client::g_accountListVar; HEVENTCONTEXT Client::g_clientEventContext; @@ -135,12 +136,65 @@ int32_t InitializeEngineCallback(const void* a1, void* a2) { return 1; } +int32_t CmdLineProcess() { + // engine-specific flags. + static ARGLIST s_argList[] = { + {0x0, CMD_D3D, "d3d", nullptr}, + {0x0, CMD_D3D9EX, "d3d9ex", nullptr}, + {STORM_COMMAND_TYPE_STRING, CMD_DATADIR, "datadir", nullptr}, + {0x0, CMD_NO_LAG_FIX, "nolagfix", nullptr}, + {STORM_COMMAND_TYPE_STRING, CMD_LOADFILE, "loadfile", nullptr}, + {STORM_COMMAND_TYPE_STRING, CMD_GAMETYPE, "gametype", nullptr}, + {0x0, CMD_OPENGL, "opengl", nullptr}, + {0x0, CMD_SWTNL, "swtnl", nullptr}, + {0x0, CMD_TIMEDEMO, "timedemo", nullptr}, + {STORM_COMMAND_TYPE_STRING, CMD_DEMOREZ, "rez", nullptr}, + {STORM_COMMAND_TYPE_STRING, CMD_DEMODEPTH, "depth", nullptr}, + {STORM_COMMAND_TYPE_STRING, CMD_DEMODETAIL, "detail", nullptr}, + {STORM_COMMAND_TYPE_STRING, CMD_DEMOSOUND, "sound", nullptr}, + {0x0, CMD_FULLSCREEN, "fullscreen", nullptr}, + {0x0, CMD_22050HZ, "22050", nullptr}, + {0x0, CMD_NO_WARNINGS, "nowarnings", nullptr} + }; + + // load engine-specific launch flags + SCmdRegisterArgList(s_argList, std::size(s_argList)); + + // parse command line + return SCmdProcessCommandLine(0, 0); +} + +static void ProcessCommandLine() { + static ARGLIST s_wowArgList[] = { + {0x0, WOWCMD_RES_800x600, "800x600", nullptr}, + {0x0, WOWCMD_RES_1024x768, "1024x768", nullptr}, + {0x0, WOWCMD_RES_1280x960, "1280x960", nullptr}, + {0x0, WOWCMD_RES_1280x1024, "1280x1024", nullptr}, + {0x0, WOWCMD_RES_1600x1200, "1600x1200", nullptr}, + {0x0, WOWCMD_16_BIT, "16bit", nullptr}, + {0x0, WOWCMD_UP_TO_DATE, "uptodate", nullptr}, + {0x0, WOWCMD_NO_SOUND, "nosound", nullptr}, + {0x0, WOWCMD_SOUND_CHAOS, "soundchaos", nullptr}, + {0x0, WOWCMD_NO_FIX_LAG, "nofixlag", nullptr}, + {0x0, WOWCMD_DEPTH_16, "d16", nullptr}, + {0x0, WOWCMD_DEPTH_24, "d24", nullptr}, + {0x0, WOWCMD_DEPTH_32, "d32", nullptr}, + {0x0, WOWCMD_WINDOWED, "windowed", nullptr}, + {0x0, WOWCMD_HW_DETECT, "hwdetect", nullptr}, + {0x0, WOWCMD_CONSOLE, "console", nullptr}, + {STORM_COMMAND_TYPE_STRING, WOWCMD_GX_OVERRIDE, "gxoverride", nullptr} + }; + + // Load wow-specific launch flags + SCmdRegisterArgList(s_wowArgList, std::size(s_wowArgList)); + + CmdLineProcess(); +} + int32_t InitializeGlobal() { // TODO - // SCmdRegisterArgList(&ProcessCommandLine(void)::s_wowArgList, 17u); - - // CmdLineProcess(); + ProcessCommandLine(); // sub_403600("WoW.mfil"); diff --git a/src/client/Client.hpp b/src/client/Client.hpp index 7d3f60b..c8a4e84 100644 --- a/src/client/Client.hpp +++ b/src/client/Client.hpp @@ -4,6 +4,47 @@ #include "event/Event.hpp" #include +enum CMDOPT { + CMD_D3D = 0, + CMD_D3D9EX = 1, + CMD_DATA_DIR = 2, + CMD_NO_LAG_FIX = 3, + CMD_LOADFILE = 4, + CMD_GAMETYPE = 5, + CMD_OPENGL = 6, + CMD_SW_TNL = 7, + CMD_TIMEDEMO = 8, + CMD_DEMOREZ = 9, + CMD_DEMODEPTH = 10, + CMD_DEMODETAIL = 11, + CMD_DEMOSOUND = 12, + CMD_FULL_SCREEN = 13, + CMD_22050HZ = 14, + CMD_NO_WARNINGS = 15, + CMDOPTS +}; + +enum WOWCMDOPT { + WOWCMD_RES_800x600 = 16, + WOWCMD_RES_1024x768 = 17, + WOWCMD_RES_1280x960 = 18, + WOWCMD_RES_1280x1024 = 19, + WOWCMD_RES_1600x1200 = 20, + WOWCMD_UP_TO_DATE = 21, + WOWCMD_16_BIT = 22, + WOWCMD_NO_FIX_LAG = 24, + WOWCMD_NO_SOUND = 26, + WOWCMD_SOUND_CHAOS = 27, + WOWCMD_DEPTH_16 = 29, + WOWCMD_DEPTH_24 = 30, + WOWCMD_DEPTH_32 = 31, + WOWCMD_WINDOWED = 32, + WOWCMD_CONSOLE = 35, + WOWCMD_HW_DETECT = 36, + WOWCMD_GX_OVERRIDE = 39, + WOWCMD_OPTS +}; + class CVar; namespace Client {