diff --git a/artifacts/ddraw.ini b/artifacts/ddraw.ini index 5cd82ee5..687a548f 100644 --- a/artifacts/ddraw.ini +++ b/artifacts/ddraw.ini @@ -357,6 +357,7 @@ ProcessorIdle=-1 LoadProtoMaxLimit=-1 ;Set to 1 if using the hero appearance mod +;You can add AppChCrt.frm and AppChEdt.frm files to art/intrface/ to set a custom background for the character screen EnableHeroAppearanceMod=0 ;Set to 1 to skip the 3 opening movies diff --git a/sfall/Modules/ExtraSaveSlots.cpp b/sfall/Modules/ExtraSaveSlots.cpp index 2cacffaa..102344f1 100644 --- a/sfall/Modules/ExtraSaveSlots.cpp +++ b/sfall/Modules/ExtraSaveSlots.cpp @@ -138,11 +138,7 @@ void SetPageNum() { if (NewTick - OldTick > 166) { // time to draw OldTick = NewTick; - if (blip == '_') { - blip = ' '; - } else { - blip = '_'; - } + blip = (blip == '_') ? ' ' : '_'; sprintf_s(TempText, 32, "#%d%c", tempPageOffset / 10 + 1, '_'); if (tempPageOffset == -1) { diff --git a/sfall/main.cpp b/sfall/main.cpp index 5f6de84b..afc5079e 100644 --- a/sfall/main.cpp +++ b/sfall/main.cpp @@ -76,6 +76,8 @@ #include "main.h" +ddrawDll ddraw; + namespace sfall { @@ -208,6 +210,7 @@ inline void SfallInit() { isDebug = (GetPrivateProfileIntA("Debugging", "Enable", 0, ::sfall::ddrawIni) != 0); if (isDebug) { LoggingInit(); + if (!ddraw.dll) dlog("Error: Cannot load the original ddraw.dll library.\n", DL_MAIN); } char filepath[MAX_PATH]; @@ -220,8 +223,8 @@ inline void SfallInit() { typedef int (_stdcall *chk64bitproc)(HANDLE, int*); HMODULE h = LoadLibrary("Kernel32.dll"); chk64bitproc proc = (chk64bitproc)GetProcAddress(h, "IsWow64Process"); - if(proc) proc(GetCurrentProcess(), &is64bit); - else is64bit=0; + if (proc) proc(GetCurrentProcess(), &is64bit); + else is64bit = 0; FreeLibrary(h); CompatModeCheck(HKEY_CURRENT_USER, filepath, is64bit?KEY_WOW64_64KEY:0); @@ -257,7 +260,8 @@ inline void SfallInit() { strcpy_s(ini, ".\\"); strcat_s(ini, cmdline); HANDLE h = CreateFileA(cmdline, GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0); - if (h != INVALID_HANDLE_VALUE) CloseHandle(h); + if (h != INVALID_HANDLE_VALUE) + CloseHandle(h); else { MessageBox(0, "You gave a command line argument to fallout, but it couldn't be matched to a file\n" \ "Using default ddraw.ini instead", "Warning", MB_TASKMODAL); @@ -274,43 +278,39 @@ inline void SfallInit() { } -ddrawDll ddraw; static bool LoadOriginalDll(DWORD dwReason) { switch (dwReason) { case DLL_PROCESS_ATTACH: char path[MAX_PATH]; CopyMemory(path + GetSystemDirectoryA(path , MAX_PATH - 10), "\\ddraw.dll", 11); // path to original dll - ddraw.dll = LoadLibrary(path); - if (!ddraw.dll || ddraw.dll == INVALID_HANDLE_VALUE) { - MessageBox(0, "Cannot load the original ddraw.dll library.", "sfall", MB_ICONERROR); - ExitProcess(-1); - break; + ddraw.dll = LoadLibraryA(path); + if (ddraw.dll) { + ddraw.AcquireDDThreadLock = GetProcAddress(ddraw.dll, "AcquireDDThreadLock"); + ddraw.CheckFullscreen = GetProcAddress(ddraw.dll, "CheckFullscreen"); + ddraw.CompleteCreateSysmemSurface = GetProcAddress(ddraw.dll, "CompleteCreateSysmemSurface"); + ddraw.D3DParseUnknownCommand = GetProcAddress(ddraw.dll, "D3DParseUnknownCommand"); + ddraw.DDGetAttachedSurfaceLcl = GetProcAddress(ddraw.dll, "DDGetAttachedSurfaceLcl"); + ddraw.DDInternalLock = GetProcAddress(ddraw.dll, "DDInternalLock"); + ddraw.DDInternalUnlock = GetProcAddress(ddraw.dll, "DDInternalUnlock"); + ddraw.DSoundHelp = GetProcAddress(ddraw.dll, "DSoundHelp"); + ddraw.DirectDrawCreateClipper = GetProcAddress(ddraw.dll, "DirectDrawCreateClipper"); + ddraw.DirectDrawCreate = GetProcAddress(ddraw.dll, "DirectDrawCreate"); + ddraw.DirectDrawCreateEx = GetProcAddress(ddraw.dll, "DirectDrawCreateEx"); + ddraw.DirectDrawEnumerateA = GetProcAddress(ddraw.dll, "DirectDrawEnumerateA"); + ddraw.DirectDrawEnumerateExA = GetProcAddress(ddraw.dll, "DirectDrawEnumerateExA"); + ddraw.DirectDrawEnumerateExW = GetProcAddress(ddraw.dll, "DirectDrawEnumerateExW"); + ddraw.DirectDrawEnumerateW = GetProcAddress(ddraw.dll, "DirectDrawEnumerateW"); + //ddraw.DllCanUnloadNow = GetProcAddress(ddraw.dll, "DllCanUnloadNow"); + //ddraw.DllGetClassObject = GetProcAddress(ddraw.dll, "DllGetClassObject"); + ddraw.GetDDSurfaceLocal = GetProcAddress(ddraw.dll, "GetDDSurfaceLocal"); + ddraw.GetOLEThunkData = GetProcAddress(ddraw.dll, "GetOLEThunkData"); + ddraw.GetSurfaceFromDC = GetProcAddress(ddraw.dll, "GetSurfaceFromDC"); + ddraw.RegisterSpecialCase = GetProcAddress(ddraw.dll, "RegisterSpecialCase"); + ddraw.ReleaseDDThreadLock = GetProcAddress(ddraw.dll, "ReleaseDDThreadLock"); } - ddraw.AcquireDDThreadLock = GetProcAddress(ddraw.dll, "AcquireDDThreadLock"); - ddraw.CheckFullscreen = GetProcAddress(ddraw.dll, "CheckFullscreen"); - ddraw.CompleteCreateSysmemSurface = GetProcAddress(ddraw.dll, "CompleteCreateSysmemSurface"); - ddraw.D3DParseUnknownCommand = GetProcAddress(ddraw.dll, "D3DParseUnknownCommand"); - ddraw.DDGetAttachedSurfaceLcl = GetProcAddress(ddraw.dll, "DDGetAttachedSurfaceLcl"); - ddraw.DDInternalLock = GetProcAddress(ddraw.dll, "DDInternalLock"); - ddraw.DDInternalUnlock = GetProcAddress(ddraw.dll, "DDInternalUnlock"); - ddraw.DSoundHelp = GetProcAddress(ddraw.dll, "DSoundHelp"); - ddraw.DirectDrawCreateClipper = GetProcAddress(ddraw.dll, "DirectDrawCreateClipper"); - ddraw.DirectDrawCreate = GetProcAddress(ddraw.dll, "DirectDrawCreate"); - ddraw.DirectDrawCreateEx = GetProcAddress(ddraw.dll, "DirectDrawCreateEx"); - ddraw.DirectDrawEnumerateA = GetProcAddress(ddraw.dll, "DirectDrawEnumerateA"); - ddraw.DirectDrawEnumerateExA = GetProcAddress(ddraw.dll, "DirectDrawEnumerateExA"); - ddraw.DirectDrawEnumerateExW = GetProcAddress(ddraw.dll, "DirectDrawEnumerateExW"); - ddraw.DirectDrawEnumerateW = GetProcAddress(ddraw.dll, "DirectDrawEnumerateW"); - //ddraw.DllCanUnloadNow = GetProcAddress(ddraw.dll, "DllCanUnloadNow"); - //ddraw.DllGetClassObject = GetProcAddress(ddraw.dll, "DllGetClassObject"); - ddraw.GetDDSurfaceLocal = GetProcAddress(ddraw.dll, "GetDDSurfaceLocal"); - ddraw.GetOLEThunkData = GetProcAddress(ddraw.dll, "GetOLEThunkData"); - ddraw.GetSurfaceFromDC = GetProcAddress(ddraw.dll, "GetSurfaceFromDC"); - ddraw.RegisterSpecialCase = GetProcAddress(ddraw.dll, "RegisterSpecialCase"); - ddraw.ReleaseDDThreadLock = GetProcAddress(ddraw.dll, "ReleaseDDThreadLock"); return true; case DLL_PROCESS_DETACH: - FreeLibrary(ddraw.dll); + if (ddraw.dll) FreeLibrary(ddraw.dll); break; } return false;