Add HistoryBook international support

This commit is contained in:
Christian Semmler 2025-06-16 21:19:54 -07:00
parent 14a3cfb2fa
commit 40517a53a8
2 changed files with 27 additions and 1 deletions

View File

@ -46,6 +46,8 @@ class HistoryBook : public LegoWorld {
MxStillPresenter* m_name[20][7]; // 0x164 MxStillPresenter* m_name[20][7]; // 0x164
MxStillPresenter* m_scores[20]; // 0x394 MxStillPresenter* m_scores[20]; // 0x394
MxStillPresenter* m_intAlphabet[sizeOfArray(LegoGameState::g_intCharacters)];
}; };
#endif // HISTORYBOOK_H #endif // HISTORYBOOK_H

View File

@ -10,12 +10,15 @@
#include "mxstillpresenter.h" #include "mxstillpresenter.h"
#include "mxtransitionmanager.h" #include "mxtransitionmanager.h"
#include <SDL3/SDL_Log.h>
DECOMP_SIZE_ASSERT(HistoryBook, 0x3e4) DECOMP_SIZE_ASSERT(HistoryBook, 0x3e4)
// FUNCTION: LEGO1 0x100822f0 // FUNCTION: LEGO1 0x100822f0
HistoryBook::HistoryBook() HistoryBook::HistoryBook()
{ {
memset(m_alphabet, 0, sizeof(m_alphabet)); memset(m_alphabet, 0, sizeof(m_alphabet));
memset(m_intAlphabet, 0, sizeof(m_intAlphabet));
memset(m_name, 0, sizeof(m_name)); memset(m_name, 0, sizeof(m_name));
memset(m_scores, 0, sizeof(m_scores)); memset(m_scores, 0, sizeof(m_scores));
NotificationManager()->Register(this); NotificationManager()->Register(this);
@ -112,6 +115,10 @@ void HistoryBook::ReadyWorld()
} }
} }
for (i = 0; i < sizeOfArray(m_intAlphabet); i++) {
m_intAlphabet[i] = (MxStillPresenter*) Find("MxStillPresenter", LegoGameState::g_intCharacters[i].m_bitmap);
}
MxStillPresenter* scoreboxMaster = (MxStillPresenter*) Find("MxStillPresenter", "ScoreBox"); MxStillPresenter* scoreboxMaster = (MxStillPresenter*) Find("MxStillPresenter", "ScoreBox");
MxU8 scoreColors[3] = MxU8 scoreColors[3] =
{0x76, 0x4c, 0x38}; // yellow - #FFB900, blue - #00548C, red - #CB1220, background - #CECECE, border - #74818B {0x76, 0x4c, 0x38}; // yellow - #FFB900, blue - #00548C, red - #CB1220, background - #CECECE, border - #74818B
@ -167,7 +174,24 @@ void HistoryBook::ReadyWorld()
for (MxS16 j = 0; j < (MxS16) sizeOfArray(m_name[0]) && score->m_name.m_letters[j] != -1; j++, scoreX += 0x17) for (MxS16 j = 0; j < (MxS16) sizeOfArray(m_name[0]) && score->m_name.m_letters[j] != -1; j++, scoreX += 0x17)
#endif #endif
{ {
m_name[i][j] = m_alphabet[score->m_name.m_letters[j]]->Clone(); MxStillPresenter** intoAlphabet = [this,
index = score->m_name.m_letters[j]]() mutable -> MxStillPresenter** {
if (index < sizeOfArray(m_alphabet)) {
return &m_alphabet[index];
}
index -= sizeOfArray(m_alphabet);
assert(index < sizeOfArray(m_intAlphabet));
if (!m_intAlphabet[index]) {
SDL_Log("Warning: international character not present in current game. Falling back to X");
return &m_alphabet[SDLK_X - SDLK_A];
}
return &m_intAlphabet[index];
}();
m_name[i][j] = (*intoAlphabet)->Clone();
assert(m_name[i][j]); assert(m_name[i][j]);
m_name[i][j]->Enable(TRUE); m_name[i][j]->Enable(TRUE);