From 938418be299e15b8670688b84275a56461c941ef Mon Sep 17 00:00:00 2001 From: mjkzy Date: Sun, 26 Jun 2022 10:44:06 -0500 Subject: [PATCH] fix garbage buffers in errors & replace calls --- src/client/component/patches.cpp | 80 +++++++++++++++++++++++++++----- 1 file changed, 68 insertions(+), 12 deletions(-) diff --git a/src/client/component/patches.cpp b/src/client/component/patches.cpp index a5cae4f8..6edfe2d8 100644 --- a/src/client/component/patches.cpp +++ b/src/client/component/patches.cpp @@ -158,7 +158,7 @@ namespace patches void missing_content_error_stub(int, const char*) { - game::Com_Error(game::ERR_DROP, utils::string::va("MISSING FILE\n%s.ff", + game::Com_Error(game::ERR_DROP, utils::string::va("MISSING FILE\n%s.ff", fastfiles::get_current_fastfile().data())); } @@ -194,15 +194,74 @@ namespace patches char buffer[2048]; - va_list ap; - va_start(ap, fmt); + { + va_list ap; + va_start(ap, fmt); - vsnprintf_s(buffer, sizeof(buffer), _TRUNCATE, fmt, ap); + vsnprintf_s(buffer, sizeof(buffer), _TRUNCATE, fmt, ap); - va_end(ap); + va_end(ap); + } return utils::hook::invoke(SELECT_VALUE(0x429200_b, 0x5AF0F0_b), dest, size, "%s", buffer); } + + void create_2d_texture_stub_1(const char* fmt, ...) + { + fmt = "Create2DTexture( %s, %i, %i, %i, %i ) failed\n\n" + "Disable shader caching, lower graphic settings, free up RAM, or update your GPU drivers."; + + char buffer[2048]; + + { + va_list ap; + va_start(ap, fmt); + + vsnprintf_s(buffer, sizeof(buffer), _TRUNCATE, fmt, ap); + + va_end(ap); + } + + game::Sys_Error("%s", buffer); + } + + void create_2d_texture_stub_2(game::errorParm code, const char* fmt, ...) + { + fmt = "Create2DTexture( %s, %i, %i, %i, %i ) failed\n\n" + "Disable shader caching, lower graphic settings, free up RAM, or update your GPU drivers."; + + char buffer[2048]; + + { + va_list ap; + va_start(ap, fmt); + + vsnprintf_s(buffer, sizeof(buffer), _TRUNCATE, fmt, ap); + + va_end(ap); + } + + game::Com_Error(code, "%s", buffer); + } + + void swap_chain_stub(game::errorParm code, const char* fmt, ...) + { + fmt = "IDXGISwapChain::Present failed: %s\n\n" + "Disable shader caching, lower graphic settings, free up RAM, or update your GPU drivers."; + + char buffer[2048]; + + { + va_list ap; + va_start(ap, fmt); + + vsnprintf_s(buffer, sizeof(buffer), _TRUNCATE, fmt, ap); + + va_end(ap); + } + + game::Com_Error(code, "%s", buffer); + } } class component final : public component_interface @@ -242,13 +301,10 @@ namespace patches utils::hook::call(SELECT_VALUE(0x376EB5_b, 0x156D41_b), db_read_raw_file_stub); // Remove useless information from errors + add additional help to common errors - utils::hook::set(SELECT_VALUE(0x7E3DF0_b, 0x937B80_b), - "Create2DTexture( %s, %i, %i, %i, %i ) failed\n\n" - "Disable shader caching, lower graphic settings, free up RAM, or update your GPU drivers."); - utils::hook::set(SELECT_VALUE(0x800EA8_b, 0x954FF0_b), - "IDXGISwapChain::Present failed: %s\n\n" - "Disable shader caching, lower graphic settings, free up RAM, or update your GPU drivers."); - utils::hook::call(SELECT_VALUE(0x457BC9_b, 0x1D8E09_b), out_of_memory_text_stub); // "Out of memory. You are probably low on disk space." + utils::hook::call(SELECT_VALUE(0x55E919_b, 0x681A69_b), create_2d_texture_stub_1); // Sys_Error for "Create2DTexture( %s, %i, %i, %i, %i ) failed" + utils::hook::call(SELECT_VALUE(0x55EACB_b, 0x681C1B_b), create_2d_texture_stub_2); // Com_Error for ^ + utils::hook::call(SELECT_VALUE(0x5B35BA_b, 0x6CB1BC_b), swap_chain_stub); // Com_Error for "IDXGISwapChain::Present failed: %s" + utils::hook::call(SELECT_VALUE(0x457BC9_b, 0x1D8E09_b), out_of_memory_text_stub); // Com_sprintf for "Out of memory. You are probably low on disk space." // "fix" for rare 'Out of memory error' error // this will *at least* generate the configs for mp/sp, which is the #1 issue