Merge pull request #3 from ktkaufman03/matching/mxpalette-tmp-july3

MxPalette changes
This commit is contained in:
Joshua Peisach 2023-07-03 18:27:11 -04:00 committed by GitHub
commit 09f1933ac3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 34 additions and 36 deletions

View File

@ -35,16 +35,13 @@ void MxPalette::ApplySystemEntriesToPalette(LPPALETTEENTRY p_entries)
// FIXME: we get g_defaultPalette here, we need to define that, then we cna do the memcpy's // FIXME: we get g_defaultPalette here, we need to define that, then we cna do the memcpy's
} }
// OFFSET: LEGO1 100bf0b0 // OFFSET: LEGO1 0x100bf0b0
MxPalette* MxPalette::Clone() MxPalette& MxPalette::Clone()
{ {
// FIXME: doesnt match MxPalette *result = new MxPalette;
MxPalette *pal = (MxPalette *) malloc(0x414); this->GetEntries(result->m_entries);
if(pal != NULL) { result->m_overrideSkyColor = this->m_overrideSkyColor;
GetEntries(pal->m_entries); return *result;
pal->m_overrideSkyColor = m_overrideSkyColor;
}
return pal;
} }
// OFFSET: LEGO1 0x100beed0 // OFFSET: LEGO1 0x100beed0
@ -66,15 +63,21 @@ MxResult MxPalette::GetEntries(LPPALETTEENTRY p_entries)
} }
// OFFSET: LEGO1 0x100bf2d0 // OFFSET: LEGO1 0x100bf2d0
MxResult MxPalette::SetSkyColor(LPPALETTEENTRY p_entries) MxResult MxPalette::SetSkyColor(LPPALETTEENTRY p_sky_color)
{ {
// FIXME: doesnt match int status = 0;
MxResult ret = SUCCESS; LPDIRECTDRAWPALETTE palette = this->m_palette;
this->m_entries[141].peRed = p_entries->peRed; if ( palette )
this->m_entries[141].peGreen = p_entries->peGreen; {
this->m_entries[141].peBlue = p_entries->peBlue; 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]; this->m_skyColor = this->m_entries[141];
return ret;
if ( palette->SetEntries(0, 141, 1, &this->m_skyColor) )
status = -1;
}
return status;
} }
// OFFSET: LEGO1 0x100bf420 // OFFSET: LEGO1 0x100bf420
@ -100,23 +103,18 @@ void MxPalette::GetDefaultPalette(LPPALETTEENTRY p_entries)
} }
// OFFSET: LEGO1 0x100bf340 // OFFSET: LEGO1 0x100bf340
MxBool MxPalette::operator==(MxPalette *p_palette) MxBool MxPalette::operator==(MxPalette &other)
{ {
// FIXME: ok, idk what is happening here: trying memcpy in different ways showed 0.00% match. Here is literally what it does. int i;
// My guess is that memcpy doesn't break its loop when something is incorrect, and this function is only intended to check for (i = 0; i < 256; i++)
// the RGB and memcpy does everything? The paramater 'rhs' in ghidra suggests it was likely some memcmp. For now, {
// this is literally down to instruction swap. if (this->m_entries[i].peRed != other.m_entries[i].peRed)
int i = 0; return FALSE;
PALETTEENTRY *our = this->m_entries; if (this->m_entries[i].peGreen != other.m_entries[i].peGreen)
PALETTEENTRY *their = p_palette->m_entries; return FALSE;
do { if (this->m_entries[i].peBlue != other.m_entries[i].peBlue)
if(our->peRed != their->peRed) return FALSE; return FALSE;
if(our->peGreen != their->peGreen) return FALSE; }
if(our->peBlue != their->peBlue) return FALSE;
their += 1;
our += 1;
i += 1;
} while (i < 256);
return TRUE; return TRUE;
} }

View File

@ -11,18 +11,18 @@
class MxPalette : public MxCore class MxPalette : public MxCore
{ {
public: public:
__declspec(dllexport) MxBool operator==(MxPalette *p_palette); __declspec(dllexport) MxBool operator==(MxPalette &);
__declspec(dllexport) void Detach(); __declspec(dllexport) void Detach();
MxPalette(); MxPalette();
virtual ~MxPalette(); virtual ~MxPalette();
void ApplySystemEntriesToPalette(LPPALETTEENTRY p_entries); void ApplySystemEntriesToPalette(LPPALETTEENTRY p_entries);
MxPalette* Clone(); MxPalette& Clone();
MxPalette* FromBitmapPalette(RGBQUAD* p_bmp); MxPalette* FromBitmapPalette(RGBQUAD* p_bmp);
void GetDefaultPalette(LPPALETTEENTRY p_entries); void GetDefaultPalette(LPPALETTEENTRY p_entries);
MxResult GetEntries(LPPALETTEENTRY p_entries); MxResult GetEntries(LPPALETTEENTRY p_entries);
MxResult SetSkyColor(LPPALETTEENTRY p_entries); MxResult SetSkyColor(LPPALETTEENTRY p_sky_color);
private: private:
LPDIRECTDRAWPALETTE m_palette; LPDIRECTDRAWPALETTE m_palette;
PALETTEENTRY m_entries[256]; PALETTEENTRY m_entries[256];