From 15019ffe810a95e10cbed881ea39f5998025121f Mon Sep 17 00:00:00 2001 From: NovaRain Date: Tue, 4 Feb 2020 16:28:21 +0800 Subject: [PATCH] Some code edits to ExtraSaveSlots.cpp --- sfall/ExtraSaveSlots.cpp | 46 ++++++++++++++++++++++++++++++---------- sfall/ExtraSaveSlots.h | 1 + sfall/main.cpp | 1 + 3 files changed, 37 insertions(+), 11 deletions(-) diff --git a/sfall/ExtraSaveSlots.cpp b/sfall/ExtraSaveSlots.cpp index 07a0487a..51bbc1a7 100644 --- a/sfall/ExtraSaveSlots.cpp +++ b/sfall/ExtraSaveSlots.cpp @@ -27,6 +27,7 @@ DWORD LSPageOffset = 0; int LSButtDN = 0; +BYTE* SaveLoadSurface = nullptr; static const char* filename = "%s\\savegame\\slotdat.ini"; @@ -128,6 +129,7 @@ void SetPageNum() { char TempText[32]; unsigned int TxtMaxWidth = GetMaxCharWidth() * 8; // GetTextWidth(TempText); + unsigned int HalfMaxWidth = TxtMaxWidth / 2; unsigned int TxtWidth = 0; DWORD NewTick = 0, OldTick = 0; @@ -136,6 +138,9 @@ void SetPageNum() { DWORD tempPageOffset = -1; + char* EndBracket = "]"; + int width = GetTextWidth(EndBracket); + while (!exitFlag) { NewTick = GetTickCount(); // timer for redraw if (OldTick > NewTick) { @@ -146,23 +151,29 @@ void SetPageNum() { blip = (blip == '_') ? ' ' : '_'; - sprintf_s(TempText, 32, "#%d%c", tempPageOffset / 10 + 1, '_'); if (tempPageOffset == -1) { - sprintf_s(TempText, 32, "#%c", '_'); + sprintf_s(TempText, 32, "[ %c ]", '_'); + } else { + sprintf_s(TempText, 32, "[ %d%c ]", tempPageOffset / 10 + 1, '_'); } TxtWidth = GetTextWidth(TempText); - sprintf_s(TempText, 32, "#%d%c", tempPageOffset / 10 + 1, blip); if (tempPageOffset == -1) { - sprintf_s(TempText, 32, "#%c", blip); + sprintf_s(TempText, 32, "[ %c", blip); + } else { + sprintf_s(TempText, 32, "[ %d%c", tempPageOffset / 10 + 1, blip); } - // fill over text area with consol black colour - for (int y = SaveLoadWin->width * 52; y < SaveLoadWin->width * 82; y = y + SaveLoadWin->width) { - memset(SaveLoadWin->surface + y + 170 - TxtMaxWidth / 2, 0xCF, TxtMaxWidth); + int z = 0; + // paste image part from buffer into text area + for (int y = SaveLoadWin->width * 60; y < SaveLoadWin->width * 75; y += SaveLoadWin->width) { + memcpy(SaveLoadWin->surface + y + (170 - HalfMaxWidth), SaveLoadSurface + (100 - HalfMaxWidth) + (200 * z++), TxtMaxWidth); } - PrintText(TempText, ConsoleGold, 170 - TxtWidth / 2, 64, TxtWidth, SaveLoadWin->width, SaveLoadWin->surface); + int HalfTxtWidth = TxtWidth / 2; + + PrintText(TempText, ConsoleGold, 170 - HalfTxtWidth, 64, TxtWidth, SaveLoadWin->width, SaveLoadWin->surface); + PrintText(EndBracket, ConsoleGold, (170 - HalfTxtWidth) + TxtWidth - width, 64, width, SaveLoadWin->width, SaveLoadWin->surface); WinDraw(winRef); } @@ -268,9 +279,18 @@ void DrawPageText() { return; } - // fill over text area with consol black colour - for (int y = SaveLoadWin->width * 52; y < SaveLoadWin->width * 82; y = y + SaveLoadWin->width) { - memset(SaveLoadWin->surface + 50 + y, 0xCF, 240); + int z = 0; + if (SaveLoadSurface == nullptr) { + SaveLoadSurface = new BYTE[3000]; + // save part of original image to buffer + for (int y = SaveLoadWin->width * 60; y < SaveLoadWin->width * 75; y += SaveLoadWin->width) { + memcpy(SaveLoadSurface + (200 * z++), SaveLoadWin->surface + 70 + y, 200); + } + } else { + // paste image from buffer into text area + for (int y = SaveLoadWin->width * 60; y < SaveLoadWin->width * 75; y += SaveLoadWin->width) { + memcpy(SaveLoadWin->surface + 70 + y, SaveLoadSurface + (200 * z++), 200); + } } BYTE ConsoleGreen = *ptr_GreenColor; // palette offset stored in mem - text colour @@ -508,3 +528,7 @@ void ExtraSaveSlotsInit() { dlogr(" Done", DL_INIT); } } + +void ExtraSaveSlotsExit() { + if (SaveLoadSurface) delete[] SaveLoadSurface; +} diff --git a/sfall/ExtraSaveSlots.h b/sfall/ExtraSaveSlots.h index 031f2731..83c6c5e1 100644 --- a/sfall/ExtraSaveSlots.h +++ b/sfall/ExtraSaveSlots.h @@ -21,3 +21,4 @@ extern DWORD LSPageOffset; void ExtraSaveSlotsInit(); +void ExtraSaveSlotsExit(); diff --git a/sfall/main.cpp b/sfall/main.cpp index 3ee999b8..231124ea 100644 --- a/sfall/main.cpp +++ b/sfall/main.cpp @@ -773,6 +773,7 @@ static void _stdcall OnExit() { SkillsExit(); ReputationsExit(); ConsoleExit(); + ExtraSaveSlotsExit(); BooksExit(); //gExtraGameMsgLists.clear(); AnimationsExit();