From 1eb30e1ad1d0825112dbedee23e28bd7a44c24a1 Mon Sep 17 00:00:00 2001 From: ktkaufman03 Date: Tue, 4 Jul 2023 18:19:57 -0400 Subject: [PATCH 01/16] fix: MxPalette::GetDefaultPalette is now 100% matching --- LEGO1/mxpalette.cpp | 278 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 272 insertions(+), 6 deletions(-) diff --git a/LEGO1/mxpalette.cpp b/LEGO1/mxpalette.cpp index 84d4fcd3..2bedc5eb 100644 --- a/LEGO1/mxpalette.cpp +++ b/LEGO1/mxpalette.cpp @@ -1,5 +1,265 @@ #include "mxpalette.h" +PALETTEENTRY g_defaultPaletteEntries[256] = +{ + { 0u, 0u, 0u, 0u }, + { 128u, 0u, 0u, 0u }, + { 0u, 128u, 0u, 0u }, + { 128u, 128u, 0u, 0u }, + { 0u, 0u, 128u, 0u }, + { 128u, 0u, 128u, 0u }, + { 0u, 128u, 128u, 0u }, + { 128u, 128u, 128u, 0u }, + { 192u, 220u, 192u, 0u }, + { 166u, 202u, 240u, 0u }, + { 255u, 255u, 255u, 0u }, + { 250u, 250u, 250u, 0u }, + { 239u, 239u, 239u, 0u }, + { 228u, 228u, 228u, 0u }, + { 217u, 217u, 217u, 0u }, + { 206u, 206u, 206u, 0u }, + { 195u, 195u, 195u, 0u }, + { 185u, 185u, 185u, 0u }, + { 174u, 174u, 174u, 0u }, + { 163u, 163u, 163u, 0u }, + { 152u, 152u, 152u, 0u }, + { 141u, 141u, 141u, 0u }, + { 130u, 130u, 130u, 0u }, + { 123u, 123u, 123u, 0u }, + { 115u, 115u, 115u, 0u }, + { 108u, 108u, 108u, 0u }, + { 101u, 101u, 101u, 0u }, + { 93u, 93u, 93u, 0u }, + { 86u, 86u, 86u, 0u }, + { 79u, 79u, 79u, 0u }, + { 71u, 71u, 71u, 0u }, + { 64u, 64u, 64u, 0u }, + { 54u, 54u, 54u, 0u }, + { 43u, 43u, 43u, 0u }, + { 33u, 33u, 33u, 0u }, + { 22u, 22u, 22u, 0u }, + { 12u, 12u, 12u, 0u }, + { 8u, 8u, 8u, 0u }, + { 4u, 4u, 4u, 0u }, + { 0u, 0u, 0u, 0u }, + { 225u, 218u, 217u, 0u }, + { 195u, 182u, 179u, 0u }, + { 165u, 145u, 141u, 0u }, + { 134u, 108u, 102u, 0u }, + { 104u, 72u, 64u, 0u }, + { 74u, 35u, 26u, 0u }, + { 59u, 28u, 21u, 0u }, + { 44u, 21u, 16u, 0u }, + { 30u, 14u, 10u, 0u }, + { 15u, 7u, 5u, 0u }, + { 250u, 231u, 232u, 0u }, + { 240u, 185u, 189u, 0u }, + { 233u, 154u, 160u, 0u }, + { 226u, 124u, 131u, 0u }, + { 219u, 93u, 102u, 0u }, + { 213u, 62u, 73u, 0u }, + { 203u, 18u, 32u, 0u }, + { 172u, 15u, 27u, 0u }, + { 159u, 14u, 25u, 0u }, + { 146u, 13u, 23u, 0u }, + { 133u, 12u, 21u, 0u }, + { 120u, 11u, 19u, 0u }, + { 107u, 10u, 17u, 0u }, + { 94u, 8u, 15u, 0u }, + { 81u, 7u, 13u, 0u }, + { 68u, 6u, 11u, 0u }, + { 55u, 5u, 9u, 0u }, + { 42u, 4u, 7u, 0u }, + { 29u, 3u, 5u, 0u }, + { 10u, 1u, 2u, 0u }, + { 227u, 236u, 242u, 0u }, + { 178u, 203u, 220u, 0u }, + { 145u, 181u, 205u, 0u }, + { 112u, 159u, 191u, 0u }, + { 79u, 137u, 176u, 0u }, + { 30u, 104u, 154u, 0u }, + { 0u, 84u, 140u, 0u }, + { 0u, 79u, 132u, 0u }, + { 0u, 72u, 119u, 0u }, + { 0u, 66u, 110u, 0u }, + { 0u, 61u, 101u, 0u }, + { 0u, 55u, 92u, 0u }, + { 0u, 47u, 78u, 0u }, + { 0u, 39u, 65u, 0u }, + { 0u, 34u, 56u, 0u }, + { 0u, 28u, 47u, 0u }, + { 0u, 23u, 38u, 0u }, + { 0u, 18u, 29u, 0u }, + { 0u, 12u, 20u, 0u }, + { 0u, 4u, 7u, 0u }, + { 230u, 242u, 234u, 0u }, + { 180u, 215u, 193u, 0u }, + { 147u, 198u, 166u, 0u }, + { 113u, 180u, 138u, 0u }, + { 80u, 162u, 111u, 0u }, + { 30u, 136u, 70u, 0u }, + { 0u, 120u, 45u, 0u }, + { 0u, 114u, 43u, 0u }, + { 0u, 102u, 38u, 0u }, + { 0u, 95u, 35u, 0u }, + { 0u, 83u, 31u, 0u }, + { 0u, 72u, 27u, 0u }, + { 0u, 63u, 24u, 0u }, + { 0u, 56u, 21u, 0u }, + { 0u, 48u, 18u, 0u }, + { 0u, 36u, 14u, 0u }, + { 0u, 25u, 9u, 0u }, + { 0u, 17u, 6u, 0u }, + { 0u, 9u, 3u, 0u }, + { 0u, 1u, 1u, 0u }, + { 254u, 244u, 220u, 0u }, + { 255u, 239u, 181u, 0u }, + { 255u, 231u, 156u, 0u }, + { 255u, 222u, 132u, 0u }, + { 255u, 222u, 115u, 0u }, + { 255u, 214u, 99u, 0u }, + { 255u, 206u, 66u, 0u }, + { 255u, 198u, 41u, 0u }, + { 255u, 185u, 0u, 0u }, + { 255u, 189u, 8u, 0u }, + { 247u, 181u, 0u, 0u }, + { 222u, 156u, 0u, 0u }, + { 189u, 140u, 0u, 0u }, + { 173u, 123u, 0u, 0u }, + { 148u, 107u, 0u, 0u }, + { 132u, 90u, 0u, 0u }, + { 107u, 74u, 0u, 0u }, + { 74u, 49u, 0u, 0u }, + { 57u, 41u, 0u, 0u }, + { 33u, 24u, 0u, 0u }, + { 117u, 52u, 87u, 0u }, + { 176u, 158u, 50u, 0u }, + { 122u, 165u, 29u, 0u }, + { 242u, 142u, 8u, 0u }, + { 164u, 43u, 36u, 0u }, + { 113u, 67u, 20u, 0u }, + { 255u, 0u, 255u, 0u }, + { 255u, 0u, 255u, 0u }, + { 255u, 0u, 255u, 0u }, + { 255u, 0u, 255u, 0u }, + { 255u, 0u, 255u, 0u }, + { 57u, 163u, 217u, 0u }, + { 255u, 255u, 255u, 0u }, + { 254u, 255u, 247u, 0u }, + { 253u, 253u, 239u, 0u }, + { 248u, 247u, 247u, 0u }, + { 248u, 247u, 231u, 0u }, + { 240u, 240u, 240u, 0u }, + { 239u, 239u, 218u, 0u }, + { 227u, 232u, 236u, 0u }, + { 224u, 221u, 209u, 0u }, + { 215u, 222u, 215u, 0u }, + { 213u, 214u, 215u, 0u }, + { 214u, 214u, 203u, 0u }, + { 255u, 219u, 57u, 0u }, + { 206u, 206u, 206u, 0u }, + { 206u, 206u, 198u, 0u }, + { 255u, 214u, 18u, 0u }, + { 207u, 203u, 186u, 0u }, + { 197u, 199u, 199u, 0u }, + { 255u, 206u, 0u, 0u }, + { 207u, 198u, 159u, 0u }, + { 247u, 204u, 0u, 0u }, + { 189u, 198u, 189u, 0u }, + { 189u, 189u, 189u, 0u }, + { 238u, 199u, 0u, 0u }, + { 189u, 189u, 181u, 0u }, + { 238u, 190u, 24u, 0u }, + { 181u, 189u, 184u, 0u }, + { 161u, 186u, 224u, 0u }, + { 181u, 181u, 181u, 0u }, + { 231u, 189u, 0u, 0u }, + { 173u, 182u, 173u, 0u }, + { 222u, 181u, 0u, 0u }, + { 173u, 173u, 173u, 0u }, + { 213u, 182u, 0u, 0u }, + { 172u, 173u, 160u, 0u }, + { 214u, 173u, 0u, 0u }, + { 165u, 165u, 165u, 0u }, + { 206u, 173u, 0u, 0u }, + { 160u, 168u, 151u, 0u }, + { 206u, 164u, 0u, 0u }, + { 198u, 165u, 0u, 0u }, + { 157u, 156u, 156u, 0u }, + { 134u, 156u, 200u, 0u }, + { 153u, 156u, 144u, 0u }, + { 142u, 156u, 161u, 0u }, + { 189u, 156u, 0u, 0u }, + { 148u, 148u, 148u, 0u }, + { 146u, 148u, 138u, 0u }, + { 133u, 143u, 161u, 0u }, + { 189u, 143u, 0u, 0u }, + { 140u, 140u, 140u, 0u }, + { 177u, 147u, 0u, 0u }, + { 131u, 140u, 136u, 0u }, + { 146u, 130u, 126u, 0u }, + { 170u, 137u, 0u, 0u }, + { 132u, 132u, 130u, 0u }, + { 123u, 125u, 125u, 0u }, + { 123u, 123u, 133u, 0u }, + { 153u, 126u, 0u, 0u }, + { 114u, 116u, 118u, 0u }, + { 110u, 112u, 108u, 0u }, + { 97u, 109u, 136u, 0u }, + { 127u, 108u, 6u, 0u }, + { 0u, 173u, 0u, 0u }, + { 100u, 99u, 101u, 0u }, + { 176u, 71u, 41u, 0u }, + { 36u, 142u, 33u, 0u }, + { 98u, 91u, 75u, 0u }, + { 80u, 88u, 104u, 0u }, + { 252u, 0u, 0u, 0u }, + { 78u, 71u, 73u, 0u }, + { 73u, 71u, 78u, 0u }, + { 62u, 63u, 61u, 0u }, + { 0u, 66u, 211u, 0u }, + { 99u, 51u, 14u, 0u }, + { 198u, 0u, 0u, 0u }, + { 189u, 0u, 0u, 0u }, + { 0u, 57u, 206u, 0u }, + { 181u, 0u, 0u, 0u }, + { 0u, 56u, 185u, 0u }, + { 173u, 0u, 0u, 0u }, + { 165u, 0u, 0u, 0u }, + { 49u, 49u, 49u, 0u }, + { 0u, 49u, 165u, 0u }, + { 156u, 0u, 0u, 0u }, + { 42u, 45u, 60u, 0u }, + { 148u, 0u, 0u, 0u }, + { 140u, 0u, 0u, 0u }, + { 41u, 41u, 41u, 0u }, + { 0u, 41u, 144u, 0u }, + { 132u, 0u, 0u, 0u }, + { 123u, 0u, 0u, 0u }, + { 7u, 35u, 114u, 0u }, + { 34u, 36u, 32u, 0u }, + { 115u, 0u, 0u, 0u }, + { 107u, 0u, 0u, 0u }, + { 90u, 0u, 0u, 0u }, + { 23u, 24u, 27u, 0u }, + { 74u, 0u, 0u, 0u }, + { 15u, 15u, 16u, 0u }, + { 49u, 0u, 0u, 0u }, + { 16u, 12u, 4u, 0u }, + { 7u, 8u, 8u, 0u }, + { 0u, 0u, 8u, 0u }, + { 255u, 251u, 240u, 0u }, + { 160u, 160u, 164u, 0u }, + { 128u, 128u, 128u, 0u }, + { 255u, 0u, 0u, 0u }, + { 0u, 255u, 0u, 0u }, + { 255u, 255u, 0u, 0u }, + { 0u, 0u, 255u, 0u }, + { 255u, 0u, 255u, 0u }, + { 0u, 255u, 255u, 0u }, + { 255u, 255u, 255u, 0u } +}; + LPPALETTEENTRY g_defaultPalette; // OFFSET: LEGO1 0x100bee30 @@ -61,14 +321,20 @@ MxPalette* MxPalette::FromBitmapPalette(RGBQUAD* p_bmp) // OFFSET: LEGO1 0x100bf420 void MxPalette::GetDefaultPalette(LPPALETTEENTRY p_entries) { - HDC hdc = GetDC((HWND) NULL); - int rasterCaps = GetDeviceCaps(hdc, RASTERCAPS); + HDC DC; - if ((rasterCaps & RC_PALETTE) != 0 && GetDeviceCaps(hdc, SIZEPALETTE) == 256) { - GetSystemPaletteEntries(hdc, 0, 256, p_entries); - memcpy(p_entries - 10, g_defaultPalette - 10, 236); + DC = GetDC(0); + if ( (GetDeviceCaps(DC, 38) & 0x100) != 0 && GetDeviceCaps(DC, 104) == 256 ) + { + GetSystemPaletteEntries(DC, 0, 0x100u, p_entries); + memcpy(&p_entries[10], &g_defaultPaletteEntries[10], sizeof(PALETTEENTRY) * 236); } - ReleaseDC((HWND) NULL, hdc); + else + { + memcpy(p_entries, g_defaultPaletteEntries, sizeof(PALETTEENTRY) * 256); + } + + ReleaseDC(0, DC); } // OFFSET: LEGO1 0x100bf150 From 57885103c0f7f0fa66fb11b0f9ae49d0e5be0d08 Mon Sep 17 00:00:00 2001 From: ktkaufman03 Date: Tue, 4 Jul 2023 18:29:41 -0400 Subject: [PATCH 02/16] fix: MxPalette::ApplySystemEntriesToPalette is now 100% matching --- LEGO1/mxpalette.cpp | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/LEGO1/mxpalette.cpp b/LEGO1/mxpalette.cpp index 2bedc5eb..872aa32f 100644 --- a/LEGO1/mxpalette.cpp +++ b/LEGO1/mxpalette.cpp @@ -282,20 +282,20 @@ MxPalette::~MxPalette() // OFFSET: LEGO1 0x100bf390 void MxPalette::ApplySystemEntriesToPalette(LPPALETTEENTRY p_entries) { - HDC hdc = GetDC(NULL); - int rastercaps = GetDeviceCaps(hdc, RASTERCAPS); - int sizepalettecaps; - if ((rastercaps & RC_PALETTE) != 0) { - sizepalettecaps = GetDeviceCaps(hdc, SIZEPALETTE); - if(sizepalettecaps = 256) { - GetSystemPaletteEntries(hdc,0,10,p_entries); - GetSystemPaletteEntries(hdc,246,10,p_entries + 0xf6); - ReleaseDC(NULL, hdc); - } + HDC hdc; + + hdc = GetDC(0); + if ( (GetDeviceCaps(hdc, RASTERCAPS) & RC_PALETTE) != 0 && GetDeviceCaps(hdc, SIZEPALETTE) == 256 ) + { + GetSystemPaletteEntries(hdc, 0, 10, p_entries); + GetSystemPaletteEntries(hdc, 246, 10, &p_entries[246]); } - memcpy(p_entries, g_defaultPalette, 10); - memcpy(p_entries + 0xf6, g_defaultPalette + 0xf6, 10); - ReleaseDC(NULL, hdc); + else + { + memcpy(p_entries, g_defaultPaletteEntries, sizeof(PALETTEENTRY) * 10); + memcpy(&p_entries[246], &g_defaultPaletteEntries[246], sizeof(PALETTEENTRY) * 10); + } + ReleaseDC(0, hdc); } // OFFSET: LEGO1 0x100bf0b0 @@ -322,7 +322,7 @@ MxPalette* MxPalette::FromBitmapPalette(RGBQUAD* p_bmp) void MxPalette::GetDefaultPalette(LPPALETTEENTRY p_entries) { HDC DC; - + DC = GetDC(0); if ( (GetDeviceCaps(DC, 38) & 0x100) != 0 && GetDeviceCaps(DC, 104) == 256 ) { From 5a6fcde97ba77a70628b1d2b129387de26bc89b9 Mon Sep 17 00:00:00 2001 From: ktkaufman03 Date: Tue, 4 Jul 2023 18:33:19 -0400 Subject: [PATCH 03/16] tidy: rename `DC` var in GetDefaultPalette to `hdc` --- LEGO1/mxpalette.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/LEGO1/mxpalette.cpp b/LEGO1/mxpalette.cpp index 872aa32f..64e8b424 100644 --- a/LEGO1/mxpalette.cpp +++ b/LEGO1/mxpalette.cpp @@ -321,12 +321,12 @@ MxPalette* MxPalette::FromBitmapPalette(RGBQUAD* p_bmp) // OFFSET: LEGO1 0x100bf420 void MxPalette::GetDefaultPalette(LPPALETTEENTRY p_entries) { - HDC DC; + HDC hdc; - DC = GetDC(0); - if ( (GetDeviceCaps(DC, 38) & 0x100) != 0 && GetDeviceCaps(DC, 104) == 256 ) + hdc = GetDC(0); + if ( (GetDeviceCaps(hdc, RASTERCAPS) & RC_PALETTE) != 0 && GetDeviceCaps(hdc, SIZEPALETTE) == 256 ) { - GetSystemPaletteEntries(DC, 0, 0x100u, p_entries); + GetSystemPaletteEntries(hdc, 0, 256, p_entries); memcpy(&p_entries[10], &g_defaultPaletteEntries[10], sizeof(PALETTEENTRY) * 236); } else @@ -334,7 +334,7 @@ void MxPalette::GetDefaultPalette(LPPALETTEENTRY p_entries) memcpy(p_entries, g_defaultPaletteEntries, sizeof(PALETTEENTRY) * 256); } - ReleaseDC(0, DC); + ReleaseDC(0, hdc); } // OFFSET: LEGO1 0x100bf150 From 5dd157fe6c666fa0d685069bd07129a0d56a2a83 Mon Sep 17 00:00:00 2001 From: ktkaufman03 Date: Tue, 4 Jul 2023 19:46:55 -0400 Subject: [PATCH 04/16] fix: MxPalette::SetPalette is now functionally matching Not assembly matching yet because of MSVC weirdness. At some point it will probably start matching, because the structure seems to be accurate. --- LEGO1/mxpalette.cpp | 53 ++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 47 insertions(+), 6 deletions(-) diff --git a/LEGO1/mxpalette.cpp b/LEGO1/mxpalette.cpp index 64e8b424..2ee03cab 100644 --- a/LEGO1/mxpalette.cpp +++ b/LEGO1/mxpalette.cpp @@ -367,16 +367,57 @@ void MxPalette::Detach() } // OFFSET: LEGO1 0x100bf170 -MxResult MxPalette::SetPalette(LPPALETTEENTRY p_palette) +MxResult MxPalette::SetPalette(LPPALETTEENTRY p_entries) { - int i = 0; - MxResult ret = SUCCESS; - if (this->m_palette != NULL) { - for(int i = 0; i <= 10; i++) { + MxS32 i; + MxResult status = 0; + + if ( this->m_palette ) + { + for ( i = 0; i < 10; i++ ) this->m_entries[i].peFlags = 0x80; + for ( i = 10; i < 136; i++ ) + { + this->m_entries[i].peFlags = 68; + this->m_entries[i].peRed = p_entries[i].peRed; + this->m_entries[i].peGreen = p_entries[i].peGreen; + this->m_entries[i].peBlue = p_entries[i].peBlue; } + for ( i = 136; i < 140; i++ ) + { + this->m_entries[i].peFlags = 132; + this->m_entries[i].peRed = p_entries[i].peRed; + this->m_entries[i].peGreen = p_entries[i].peGreen; + this->m_entries[i].peBlue = p_entries[i].peBlue; + } + if ( !this->m_overrideSkyColor ) + { + this->m_entries[140].peFlags = 0x44; + this->m_entries[140].peRed = p_entries[140].peRed; + this->m_entries[140].peGreen = p_entries[140].peGreen; + this->m_entries[140].peBlue = p_entries[140].peBlue; + this->m_entries[141].peFlags = 0x84; + this->m_entries[141].peRed = p_entries[141].peRed; + this->m_entries[141].peGreen = p_entries[141].peGreen; + this->m_entries[141].peBlue = p_entries[141].peBlue; + } + + for ( i = 142; i < 246; i++ ) + { + this->m_entries[i].peFlags = 132; + this->m_entries[i].peRed = p_entries[i].peRed; + this->m_entries[i].peGreen = p_entries[i].peGreen; + this->m_entries[i].peBlue = p_entries[i].peBlue; + } + + for ( i = 246; i < 256; i++ ) + this->m_entries[i].peFlags = 0x80; + + if ( this->m_palette->SetEntries(0, 0, 256, this->m_entries) ) + status = -1; } - return ret; + + return status; } // OFFSET: LEGO1 0x100bf2d0 From ebc3145ca79d28f9f2f3751ce928e588fbc9d5bf Mon Sep 17 00:00:00 2001 From: ktkaufman03 Date: Tue, 4 Jul 2023 20:11:48 -0400 Subject: [PATCH 05/16] fix: MxPalette rgbquad ctor functionally matches Not quite ASM matching yet because of weird register allocation mismatches. --- LEGO1/mxpalette.cpp | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/LEGO1/mxpalette.cpp b/LEGO1/mxpalette.cpp index 2ee03cab..dac24ba6 100644 --- a/LEGO1/mxpalette.cpp +++ b/LEGO1/mxpalette.cpp @@ -271,6 +271,24 @@ MxPalette::MxPalette() this->m_skyColor = this->m_entries[141]; } +// OFFSET: LEGO1 0x100BEED0 +MxPalette::MxPalette(const RGBQUAD *p_colors) +{ + this->m_overrideSkyColor = FALSE; + this->m_palette = NULL; + GetDefaultPalette(this->m_entries); + + for ( int i = 10; i < 246; i++ ) + { + this->m_entries[i].peRed = p_colors[i].rgbRed; + this->m_entries[i].peGreen = p_colors[i].rgbGreen; + this->m_entries[i].peBlue = p_colors[i].rgbBlue; + this->m_entries[i].peFlags = 0; + } + + this->m_skyColor = this->m_entries[141]; +} + // OFFSET: LEGO1 100bef90 MxPalette::~MxPalette() { @@ -307,17 +325,6 @@ MxPalette* MxPalette::Clone() return result; } -// OFFSET: LEGO1 0x100beed0 -MxPalette* MxPalette::FromBitmapPalette(RGBQUAD* p_bmp) -{ - // FIXME: Incomplete - this->m_overrideSkyColor = FALSE; - ApplySystemEntriesToPalette(this->m_entries); - memcpy(this->m_entries + 10, &p_bmp[10], 246); - this->m_skyColor = this->m_entries[141]; - return this; -} - // OFFSET: LEGO1 0x100bf420 void MxPalette::GetDefaultPalette(LPPALETTEENTRY p_entries) { From 0495056bf3fe2956305ea5ac5e7e68162a413d4d Mon Sep 17 00:00:00 2001 From: ktkaufman03 Date: Tue, 4 Jul 2023 20:20:49 -0400 Subject: [PATCH 06/16] fix: I forgot to commit mxpalette.h... --- LEGO1/mxpalette.h | 1 + 1 file changed, 1 insertion(+) diff --git a/LEGO1/mxpalette.h b/LEGO1/mxpalette.h index 490cd7c3..0229a99c 100644 --- a/LEGO1/mxpalette.h +++ b/LEGO1/mxpalette.h @@ -15,6 +15,7 @@ class MxPalette : public MxCore __declspec(dllexport) void Detach(); MxPalette(); + MxPalette(const RGBQUAD *); virtual ~MxPalette(); void ApplySystemEntriesToPalette(LPPALETTEENTRY p_entries); From cc3f3139b76d54177f7d446a5aa604fdb2eb9f04 Mon Sep 17 00:00:00 2001 From: ktkaufman03 Date: Tue, 4 Jul 2023 20:24:52 -0400 Subject: [PATCH 07/16] tidy: use Mx* primitives instead of builtins --- LEGO1/mxpalette.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/LEGO1/mxpalette.cpp b/LEGO1/mxpalette.cpp index dac24ba6..b24f220e 100644 --- a/LEGO1/mxpalette.cpp +++ b/LEGO1/mxpalette.cpp @@ -278,7 +278,7 @@ MxPalette::MxPalette(const RGBQUAD *p_colors) this->m_palette = NULL; GetDefaultPalette(this->m_entries); - for ( int i = 10; i < 246; i++ ) + for ( MxS32 i = 10; i < 246; i++ ) { this->m_entries[i].peRed = p_colors[i].rgbRed; this->m_entries[i].peGreen = p_colors[i].rgbGreen; @@ -354,8 +354,7 @@ MxResult MxPalette::GetEntries(LPPALETTEENTRY p_entries) // OFFSET: LEGO1 0x100bf340 MxBool MxPalette::operator==(MxPalette &other) { - int i; - for (i = 0; i < 256; i++) + for (MxS32 i = 0; i < 256; i++) { if (this->m_entries[i].peRed != other.m_entries[i].peRed) return FALSE; @@ -430,7 +429,7 @@ MxResult MxPalette::SetPalette(LPPALETTEENTRY p_entries) // OFFSET: LEGO1 0x100bf2d0 MxResult MxPalette::SetSkyColor(LPPALETTEENTRY p_sky_color) { - int status = 0; + MxResult status = 0; LPDIRECTDRAWPALETTE palette = this->m_palette; if ( palette ) { From f02d6198f1bfcc4389d1b07b9d0a3be841b82660 Mon Sep 17 00:00:00 2001 From: ktkaufman03 Date: Tue, 4 Jul 2023 20:26:48 -0400 Subject: [PATCH 08/16] refactor: remove MxPalette::FromBitmapPalette --- LEGO1/mxpalette.h | 1 - 1 file changed, 1 deletion(-) diff --git a/LEGO1/mxpalette.h b/LEGO1/mxpalette.h index 0229a99c..534f918a 100644 --- a/LEGO1/mxpalette.h +++ b/LEGO1/mxpalette.h @@ -20,7 +20,6 @@ class MxPalette : public MxCore void ApplySystemEntriesToPalette(LPPALETTEENTRY p_entries); MxPalette* Clone(); - MxPalette* FromBitmapPalette(RGBQUAD* p_bmp); void GetDefaultPalette(LPPALETTEENTRY p_entries); MxResult GetEntries(LPPALETTEENTRY p_entries); MxResult SetPalette(LPPALETTEENTRY p_palette); From df039077ce5e1c8c67b52e993f269597a739330a Mon Sep 17 00:00:00 2001 From: ktkaufman03 Date: Tue, 4 Jul 2023 20:36:33 -0400 Subject: [PATCH 09/16] fix: call ApplySystemEntriesToPalette from MxPalette(const RGBQUAD *) --- LEGO1/mxpalette.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LEGO1/mxpalette.cpp b/LEGO1/mxpalette.cpp index b24f220e..52934aad 100644 --- a/LEGO1/mxpalette.cpp +++ b/LEGO1/mxpalette.cpp @@ -276,7 +276,7 @@ MxPalette::MxPalette(const RGBQUAD *p_colors) { this->m_overrideSkyColor = FALSE; this->m_palette = NULL; - GetDefaultPalette(this->m_entries); + ApplySystemEntriesToPalette(this->m_entries); for ( MxS32 i = 10; i < 246; i++ ) { From 7182644f7f6c3d8afe3f78296fad37c7686e6ccb Mon Sep 17 00:00:00 2001 From: ktkaufman03 Date: Tue, 4 Jul 2023 20:48:15 -0400 Subject: [PATCH 10/16] rename MxPalette::SetPalette to MxPalette::SetEntries --- LEGO1/mxpalette.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LEGO1/mxpalette.cpp b/LEGO1/mxpalette.cpp index 52934aad..78d16f8d 100644 --- a/LEGO1/mxpalette.cpp +++ b/LEGO1/mxpalette.cpp @@ -373,7 +373,7 @@ void MxPalette::Detach() } // OFFSET: LEGO1 0x100bf170 -MxResult MxPalette::SetPalette(LPPALETTEENTRY p_entries) +MxResult MxPalette::SetEntries(LPPALETTEENTRY p_entries) { MxS32 i; MxResult status = 0; From d711e015dc75b649cff5450101ebde17560dc4e8 Mon Sep 17 00:00:00 2001 From: ktkaufman03 Date: Tue, 4 Jul 2023 20:50:44 -0400 Subject: [PATCH 11/16] fix: I once again forgot to commit mxpalette.h... --- LEGO1/mxpalette.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/LEGO1/mxpalette.h b/LEGO1/mxpalette.h index 534f918a..016dc0a4 100644 --- a/LEGO1/mxpalette.h +++ b/LEGO1/mxpalette.h @@ -22,7 +22,7 @@ class MxPalette : public MxCore MxPalette* Clone(); void GetDefaultPalette(LPPALETTEENTRY p_entries); MxResult GetEntries(LPPALETTEENTRY p_entries); - MxResult SetPalette(LPPALETTEENTRY p_palette); + MxResult SetEntries(LPPALETTEENTRY p_palette); MxResult SetSkyColor(LPPALETTEENTRY p_sky_color); private: LPDIRECTDRAWPALETTE m_palette; From 7b774666c8a59a8b347aa5c0828dfc00381304bc Mon Sep 17 00:00:00 2001 From: ktkaufman03 Date: Tue, 4 Jul 2023 20:54:58 -0400 Subject: [PATCH 12/16] feat: add/match MxPalette::Reset [0x100BF490] --- LEGO1/mxpalette.cpp | 15 +++++++++++++++ LEGO1/mxpalette.h | 1 + 2 files changed, 16 insertions(+) diff --git a/LEGO1/mxpalette.cpp b/LEGO1/mxpalette.cpp index 78d16f8d..ab5ef4aa 100644 --- a/LEGO1/mxpalette.cpp +++ b/LEGO1/mxpalette.cpp @@ -442,4 +442,19 @@ MxResult MxPalette::SetSkyColor(LPPALETTEENTRY p_sky_color) status = -1; } return status; +} + +// OFFSET: LEGO1 0x100BF490 +void MxPalette::Reset(MxBool p_ignoreSkyColor) +{ + if ( this->m_palette != NULL ) + { + GetDefaultPalette(this->m_entries); + if ( !p_ignoreSkyColor ) + { + this->m_entries[140] = this->m_entries[141] = this->m_skyColor; + } + SetEntries(this->m_entries); + this->m_palette->SetEntries(0, 0, 256, this->m_entries); + } } \ No newline at end of file diff --git a/LEGO1/mxpalette.h b/LEGO1/mxpalette.h index 016dc0a4..c10fd668 100644 --- a/LEGO1/mxpalette.h +++ b/LEGO1/mxpalette.h @@ -24,6 +24,7 @@ class MxPalette : public MxCore MxResult GetEntries(LPPALETTEENTRY p_entries); MxResult SetEntries(LPPALETTEENTRY p_palette); MxResult SetSkyColor(LPPALETTEENTRY p_sky_color); + void Reset(MxBool p_ignoreSkyColor); private: LPDIRECTDRAWPALETTE m_palette; PALETTEENTRY m_entries[256]; From 4097e0fa0d02dfefefb0303056d39fb1ff733cef Mon Sep 17 00:00:00 2001 From: ktkaufman03 Date: Tue, 4 Jul 2023 21:43:44 -0400 Subject: [PATCH 13/16] fix: add MVideoManager() to mxomni header --- LEGO1/mxomni.h | 1 + 1 file changed, 1 insertion(+) diff --git a/LEGO1/mxomni.h b/LEGO1/mxomni.h index f3f1ee9a..b09d11ad 100644 --- a/LEGO1/mxomni.h +++ b/LEGO1/mxomni.h @@ -77,5 +77,6 @@ __declspec(dllexport) MxVariableTable * VariableTable(); __declspec(dllexport) MxMusicManager * MusicManager(); __declspec(dllexport) MxEventManager * EventManager(); __declspec(dllexport) MxNotificationManager * NotificationManager(); +MxVideoManager * MVideoManager(); #endif // MXOMNI_H From 8734935beb007f5c1d7b137d08097c9e142bcee2 Mon Sep 17 00:00:00 2001 From: ktkaufman03 Date: Tue, 4 Jul 2023 21:44:24 -0400 Subject: [PATCH 14/16] refactor: change unk50 in MxVideoManager to LPDIRECTDRAW --- LEGO1/mxvideomanager.cpp | 2 +- LEGO1/mxvideomanager.h | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/LEGO1/mxvideomanager.cpp b/LEGO1/mxvideomanager.cpp index 543f4136..af4995ae 100644 --- a/LEGO1/mxvideomanager.cpp +++ b/LEGO1/mxvideomanager.cpp @@ -23,7 +23,7 @@ MxVideoManager::MxVideoManager() // OFFSET: LEGO1 0x100be320 int MxVideoManager::Init() { - this->m_unk50 = 0; + this->m_pDirectDraw = NULL; this->m_unk54 = NULL; this->m_unk58 = NULL; this->m_unk5c = 0; diff --git a/LEGO1/mxvideomanager.h b/LEGO1/mxvideomanager.h index f70bf06e..2061ec6b 100644 --- a/LEGO1/mxvideomanager.h +++ b/LEGO1/mxvideomanager.h @@ -21,10 +21,10 @@ class MxVideoManager : public MxUnknown100dc6b0 int Init(); inline MxVideoParam& GetVideoParam() { return this->m_videoParam; } - + inline LPDIRECTDRAW GetDirectDraw() { return this->m_pDirectDraw; } private: MxVideoParam m_videoParam; - int m_unk50; + LPDIRECTDRAW m_pDirectDraw; LPDIRECTDRAWSURFACE m_unk54; void* m_unk58; int m_unk5c; From 149d0e4f9b93c378727e105e8f8806c56070294d Mon Sep 17 00:00:00 2001 From: ktkaufman03 Date: Tue, 4 Jul 2023 21:45:12 -0400 Subject: [PATCH 15/16] feat: add/match MxPalette::CreateNativePalette [0x100BF000] --- LEGO1/mxpalette.cpp | 29 +++++++++++++++++++++++++++++ LEGO1/mxpalette.h | 1 + 2 files changed, 30 insertions(+) diff --git a/LEGO1/mxpalette.cpp b/LEGO1/mxpalette.cpp index ab5ef4aa..8ed1a60a 100644 --- a/LEGO1/mxpalette.cpp +++ b/LEGO1/mxpalette.cpp @@ -1,4 +1,5 @@ #include "mxpalette.h" +#include "mxomni.h" PALETTEENTRY g_defaultPaletteEntries[256] = { @@ -457,4 +458,32 @@ void MxPalette::Reset(MxBool p_ignoreSkyColor) SetEntries(this->m_entries); this->m_palette->SetEntries(0, 0, 256, this->m_entries); } +} + +// OFFSET: LEGO1 0x100BF000 +LPDIRECTDRAWPALETTE MxPalette::CreateNativePalette() +{ + MxS32 i; + if ( this->m_palette == NULL ) + { + for (i = 0; i < 10; i++) + this->m_entries[i].peFlags = 0x80; + for (i = 10; i < 136; i++) + this->m_entries[i].peFlags = 0x44; + for (i = 136; i < 140; i++) + this->m_entries[i].peFlags = 0x84; + this->m_entries[140].peFlags = 0x84; + this->m_entries[141].peFlags = 0x44; + for (i = 142; i < 246; i++) + this->m_entries[i].peFlags = 0x84; + for (i = 246; i < 256; i++) + this->m_entries[i].peFlags = 0x80; + + if (MVideoManager() && MVideoManager()->GetDirectDraw()) + { + MVideoManager()->GetDirectDraw()->CreatePalette(4, this->m_entries, &this->m_palette, NULL); + } + } + + return this->m_palette; } \ No newline at end of file diff --git a/LEGO1/mxpalette.h b/LEGO1/mxpalette.h index c10fd668..72af2b0e 100644 --- a/LEGO1/mxpalette.h +++ b/LEGO1/mxpalette.h @@ -25,6 +25,7 @@ class MxPalette : public MxCore MxResult SetEntries(LPPALETTEENTRY p_palette); MxResult SetSkyColor(LPPALETTEENTRY p_sky_color); void Reset(MxBool p_ignoreSkyColor); + LPDIRECTDRAWPALETTE CreateNativePalette(); private: LPDIRECTDRAWPALETTE m_palette; PALETTEENTRY m_entries[256]; From f63190e3d4bb49c4d94c9f60754f051e1c93aaab Mon Sep 17 00:00:00 2001 From: ktkaufman03 Date: Wed, 5 Jul 2023 18:02:54 -0400 Subject: [PATCH 16/16] fix: MxPalette::SetSkyColor is 100% matching --- LEGO1/mxpalette.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/LEGO1/mxpalette.cpp b/LEGO1/mxpalette.cpp index 8ed1a60a..a0157a5b 100644 --- a/LEGO1/mxpalette.cpp +++ b/LEGO1/mxpalette.cpp @@ -431,16 +431,16 @@ MxResult MxPalette::SetEntries(LPPALETTEENTRY p_entries) MxResult MxPalette::SetSkyColor(LPPALETTEENTRY p_sky_color) { MxResult status = 0; - LPDIRECTDRAWPALETTE palette = this->m_palette; - if ( palette ) + if ( this->m_palette != NULL ) { this->m_entries[141].peRed = p_sky_color->peRed; this->m_entries[141].peGreen = p_sky_color->peGreen; this->m_entries[141].peBlue = p_sky_color->peBlue; this->m_skyColor = this->m_entries[141]; - - if ( palette->SetEntries(0, 141, 1, &this->m_skyColor) ) + if ( this->m_palette->SetEntries(0, 141, 1, &this->m_skyColor) ) + { status = -1; + } } return status; }