diff --git a/src/config.c b/src/config.c index 75fa907c4d..4e6f9383c0 100644 --- a/src/config.c +++ b/src/config.c @@ -23,19 +23,25 @@ #include "config.h" #include "rct2.h" +static const int MagicNumber = 0x0003113A; + +/** + * + * rct2: 0x006752D5 + */ void config_load() { HANDLE hFile; - DWORD bytes_read; + DWORD bytesRead; hFile = CreateFile(get_file_path(PATH_ID_GAMECFG), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_FLAG_RANDOM_ACCESS | FILE_ATTRIBUTE_NORMAL, NULL); if (hFile != INVALID_HANDLE_VALUE) { // Read and check magic number - ReadFile(hFile, RCT2_ADDRESS(0x013CE928, void), 4, &bytes_read, NULL); - if (RCT2_GLOBAL(0x013CE928, int) == 0x0003113A) { + ReadFile(hFile, RCT2_ADDRESS(0x013CE928, void), 4, &bytesRead, NULL); + if (RCT2_GLOBAL(0x013CE928, int) == MagicNumber) { // Read options - ReadFile(hFile, (void*)0x009AAC5C, 2155, &bytes_read, NULL); + ReadFile(hFile, (void*)0x009AAC5C, 2155, &bytesRead, NULL); CloseHandle(hFile); if (RCT2_GLOBAL(0x009AB4C6, sint8) == 1) return; @@ -64,3 +70,20 @@ void config_load() RCT2_GLOBAL(0x009AACBD, sint16) = (RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_METRIC, sint8) + 1) * 256; RCT2_GLOBAL(0x009AA00D, sint8) = 1; } + +/** + * + * rct2: 0x00675487 + */ +void config_save() +{ + HANDLE hFile; + DWORD bytesWritten; + + hFile = CreateFile(get_file_path(PATH_ID_GAMECFG), GENERIC_WRITE, NULL, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); + if (hFile != INVALID_HANDLE_VALUE) { + WriteFile(hFile, &MagicNumber, 4, &bytesWritten, NULL); + WriteFile(hFile, 0x009AAC5C, 2155, &bytesWritten, NULL); + CloseHandle(hFile); + } +} \ No newline at end of file diff --git a/src/config.h b/src/config.h index 16bdf47784..019c995232 100644 --- a/src/config.h +++ b/src/config.h @@ -28,5 +28,6 @@ enum { }; void config_load(); +void config_save(); #endif diff --git a/src/game.c b/src/game.c index 9414e9dc2f..37833ea961 100644 --- a/src/game.c +++ b/src/game.c @@ -20,6 +20,7 @@ #include "addresses.h" #include "audio.h" +#include "config.h" #include "rct2.h" #include "game.h" #include "news_item.h" @@ -111,9 +112,8 @@ void game_update() if (RCT2_GLOBAL(0x009AAC73, uint8) != 255) { RCT2_GLOBAL(0x009AAC73, uint8)++; - if (RCT2_GLOBAL(0x009AAC73, uint8) == 255) { - RCT2_CALLPROC_EBPSAFE(0x00675487); - } + if (RCT2_GLOBAL(0x009AAC73, uint8) == 255) + config_save(); } } diff --git a/src/title.c b/src/title.c index ac9908b460..dc5af510ee 100644 --- a/src/title.c +++ b/src/title.c @@ -21,6 +21,7 @@ #include #include #include "addresses.h" +#include "config.h" #include "date.h" #include "game.h" #include "gfx.h" @@ -267,9 +268,8 @@ void title_update() if (RCT2_GLOBAL(0x009AAC73, uint8) != 255) { RCT2_GLOBAL(0x009AAC73, uint8)++; - if (RCT2_GLOBAL(0x009AAC73, uint8) == 255) { - RCT2_CALLPROC_EBPSAFE(0x00675487); - } + if (RCT2_GLOBAL(0x009AAC73, uint8) == 255) + config_save(); } }