From cc6423603e9e0c0fe2649c80c088f0544071a81f Mon Sep 17 00:00:00 2001 From: jonschz Date: Fri, 24 Jan 2025 10:50:19 +0100 Subject: [PATCH 1/9] Some progress on HistoryBook::ReadyWorld --- LEGO1/lego/legoomni/include/historybook.h | 7 ++- LEGO1/lego/legoomni/include/legogamestate.h | 4 +- .../lego/legoomni/src/worlds/historybook.cpp | 57 ++++++++++++------- LEGO1/library_msvc.h | 3 + reccmp-project.yml | 2 + 5 files changed, 51 insertions(+), 22 deletions(-) diff --git a/LEGO1/lego/legoomni/include/historybook.h b/LEGO1/lego/legoomni/include/historybook.h index 38f174a00a..76912d5dc3 100644 --- a/LEGO1/lego/legoomni/include/historybook.h +++ b/LEGO1/lego/legoomni/include/historybook.h @@ -41,8 +41,11 @@ class HistoryBook : public LegoWorld { private: LegoGameState::Area m_destLocation; // 0xf8 MxStillPresenter* m_alphabet[26]; // 0xfc - MxStillPresenter* m_names[20][7]; // 0x164 - MxStillPresenter* m_scores[20]; // 0x394 + + // variable name verified by BETA10 0x1002bd27 + MxStillPresenter* m_name[20][7]; // 0x164 + + MxStillPresenter* m_scores[20]; // 0x394 }; #endif // HISTORYBOOK_H diff --git a/LEGO1/lego/legoomni/include/legogamestate.h b/LEGO1/lego/legoomni/include/legogamestate.h index dc1e6a97c3..2e71db5a3c 100644 --- a/LEGO1/lego/legoomni/include/legogamestate.h +++ b/LEGO1/lego/legoomni/include/legogamestate.h @@ -163,7 +163,9 @@ class LegoGameState { // FUNCTION: BETA10 0x1002c2b0 MxS16 GetCount() { return m_count; } - ScoreItem* GetScore(MxS16 p_index) { return p_index >= m_count ? NULL : &m_scores[p_index]; } + // TODO: Not yet correct + // FUNCTION: BETA10 0x1002c54 + ScoreItem* GetScore(MxS32 p_index) { return p_index >= m_count ? NULL : &m_scores[p_index]; } MxS16 m_count; // 0x00 ScoreItem m_scores[20]; // 0x02 diff --git a/LEGO1/lego/legoomni/src/worlds/historybook.cpp b/LEGO1/lego/legoomni/src/worlds/historybook.cpp index cf32582580..cbb6ccc422 100644 --- a/LEGO1/lego/legoomni/src/worlds/historybook.cpp +++ b/LEGO1/lego/legoomni/src/worlds/historybook.cpp @@ -16,7 +16,7 @@ DECOMP_SIZE_ASSERT(HistoryBook, 0x3e4) HistoryBook::HistoryBook() { memset(m_alphabet, 0, sizeof(m_alphabet)); - memset(m_names, 0, sizeof(m_names)); + memset(m_name, 0, sizeof(m_name)); memset(m_scores, 0, sizeof(m_scores)); NotificationManager()->Register(this); } @@ -32,11 +32,11 @@ HistoryBook::~HistoryBook() m_scores[scoreIndex] = NULL; } - for (MxS16 letterIndex = 0; letterIndex < (MxS16) sizeOfArray(m_names[0]); letterIndex++) { - if (m_names[scoreIndex][letterIndex]) { - delete m_names[scoreIndex][letterIndex]->GetAction(); - delete m_names[scoreIndex][letterIndex]; - m_names[scoreIndex][letterIndex] = NULL; + for (MxS16 letterIndex = 0; letterIndex < (MxS16) sizeOfArray(m_name[0]); letterIndex++) { + if (m_name[scoreIndex][letterIndex]) { + delete m_name[scoreIndex][letterIndex]->GetAction(); + delete m_name[scoreIndex][letterIndex]; + m_name[scoreIndex][letterIndex] = NULL; } } } @@ -104,14 +104,19 @@ inline void SetColor(MxStillPresenter* p_presenter, MxU8 p_color, MxU8* p_colors } // FUNCTION: LEGO1 0x100826f0 +// FUNCTION: BETA10 0x1002b9b9 void HistoryBook::ReadyWorld() { LegoWorld::ReadyWorld(); + // TODO: No GetHistory() in between for BETA10 - check order / alignment for WriteScoreHistory GameState()->GetHistory()->WriteScoreHistory(); char bitmap[] = "A_Bitmap"; - for (MxS16 i = 0; i < 26; i++) { + MxS16 i = 0; + + for (; i < 26; i++) { m_alphabet[i] = (MxStillPresenter*) Find("MxStillPresenter", bitmap); + assert(m_alphabet[i]); bitmap[0]++; } @@ -120,15 +125,15 @@ void HistoryBook::ReadyWorld() {0x76, 0x4c, 0x38}; // yellow - #FFB900, blue - #00548C, red - #CB1220, background - #CECECE, border - #74818B MxS32 scoreY = 0x79; - for (MxS16 scoreIndex = 0; scoreIndex < GameState()->GetHistory()->m_count; scoreIndex++) { - LegoGameState::ScoreItem* score = GameState()->GetHistory()->GetScore(scoreIndex); + for (i = 0; i < GameState()->GetHistory()->GetCount(); i++) { + LegoGameState::ScoreItem* score = GameState()->GetHistory()->GetScore(i); - MxStillPresenter** scorebox = &m_scores[scoreIndex]; + MxStillPresenter** scorebox = &m_scores[i]; *scorebox = scoreboxMaster->Clone(); MxS32 scoreX = 0x90; - if (scoreIndex >= 10) { - if (scoreIndex == 10) { + if (i >= 10) { + if (i == 10) { scoreY = 0x79; } @@ -141,7 +146,19 @@ void HistoryBook::ReadyWorld() for (; scoreboxRow > 0; scoreboxRow--) { for (MxS32 scoreBoxColumn = 0, scoreboxY = 1; scoreBoxColumn < 5; scoreBoxColumn++, scoreboxY += 5) { - SetColor(*scorebox, score->m_scores[scoreState][scoreBoxColumn], scoreColors, scoreboxX, scoreboxY); + // SetColor(*scorebox, score->m_scores[scoreState][scoreBoxColumn], scoreColors, scoreboxX, scoreboxY); + // inline void SetColor(MxStillPresenter* p_presenter, MxU8 p_color, MxU8* p_colors, MxS32 p_x, MxS32 p_y) + MxU8 color = score->m_scores[scoreState][scoreBoxColumn]; + if (color) { + for (MxS32 lax = 0; lax < 4; lax++) { + if ((*scorebox)->GetAlphaMask() != NULL) { + memset(NULL, scoreColors[color - 1], 4); + } + else { + memset((*scorebox)->GetBitmap()->GetStart(scoreboxX, scoreboxY + lax), scoreColors[color - 1], 4); + } + } + } } scoreState++; @@ -152,18 +169,20 @@ void HistoryBook::ReadyWorld() (*scorebox)->SetTickleState(MxPresenter::e_repeating); (*scorebox)->SetPosition(scoreX + 0xa1, scoreY); - for (MxS16 letterIndex = 0; letterIndex < (MxS16) sizeOfArray(m_names[0]);) { + for (MxS16 letterIndex = 0; letterIndex < (MxS16) sizeOfArray(m_name[0]);) { MxS16 letter = score->m_name.m_letters[letterIndex]; if (letter == -1) { break; } - MxS16 nameIndex = letterIndex++; - m_names[scoreIndex][nameIndex] = m_alphabet[letter]->Clone(); - m_names[scoreIndex][nameIndex]->Enable(TRUE); - m_names[scoreIndex][nameIndex]->SetTickleState(MxPresenter::e_repeating); - m_names[scoreIndex][nameIndex]->SetPosition(scoreX, scoreY); + MxS16 j = letterIndex++; + + assert(m_name[i][j]); + m_name[i][j] = m_alphabet[letter]->Clone(); + m_name[i][j]->Enable(TRUE); + m_name[i][j]->SetTickleState(MxPresenter::e_repeating); + m_name[i][j]->SetPosition(scoreX, scoreY); scoreX += 0x17; } diff --git a/LEGO1/library_msvc.h b/LEGO1/library_msvc.h index 82f3ae8780..2ae816e745 100644 --- a/LEGO1/library_msvc.h +++ b/LEGO1/library_msvc.h @@ -702,6 +702,9 @@ // LIBRARY: BETA10 0x100f9420 // memcpy +// LIBRARY: BETA10 0x100faa00 +// memcmp + // LIBRARY: BETA10 0x100fb080 // _stricmp diff --git a/reccmp-project.yml b/reccmp-project.yml index c614cdedce..09283c82e2 100644 --- a/reccmp-project.yml +++ b/reccmp-project.yml @@ -34,3 +34,5 @@ targets: - 0x100f8ad0 - 0x100fa200 - 0x100f9780 + # memset etc. + - 0x100f9570 From e548f9e44a0eb84e3d3d0c331e401f9dbebb7469 Mon Sep 17 00:00:00 2001 From: jonschz Date: Fri, 24 Jan 2025 11:06:48 +0100 Subject: [PATCH 2/9] Refactor getter --- LEGO1/lego/legoomni/include/legogamestate.h | 1 - LEGO1/lego/legoomni/src/worlds/historybook.cpp | 9 +++++---- LEGO1/lego/legoomni/src/worlds/registrationbook.cpp | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/LEGO1/lego/legoomni/include/legogamestate.h b/LEGO1/lego/legoomni/include/legogamestate.h index 2e71db5a3c..f6e1bb2fa9 100644 --- a/LEGO1/lego/legoomni/include/legogamestate.h +++ b/LEGO1/lego/legoomni/include/legogamestate.h @@ -208,7 +208,6 @@ class LegoGameState { Act GetLoadedAct() { return m_loadedAct; } Area GetPreviousArea() { return m_previousArea; } Area GetUnknown0x42c() { return m_unk0x42c; } - History* GetHistory() { return &m_history; } void SetDirty(MxBool p_isDirty) { m_isDirty = p_isDirty; } void SetPreviousArea(Area p_previousArea) { m_previousArea = p_previousArea; } diff --git a/LEGO1/lego/legoomni/src/worlds/historybook.cpp b/LEGO1/lego/legoomni/src/worlds/historybook.cpp index cbb6ccc422..a547cb93a8 100644 --- a/LEGO1/lego/legoomni/src/worlds/historybook.cpp +++ b/LEGO1/lego/legoomni/src/worlds/historybook.cpp @@ -107,9 +107,10 @@ inline void SetColor(MxStillPresenter* p_presenter, MxU8 p_color, MxU8* p_colors // FUNCTION: BETA10 0x1002b9b9 void HistoryBook::ReadyWorld() { + undefined4 dummy; + LegoWorld::ReadyWorld(); - // TODO: No GetHistory() in between for BETA10 - check order / alignment for WriteScoreHistory - GameState()->GetHistory()->WriteScoreHistory(); + GameState()->m_history.WriteScoreHistory(); char bitmap[] = "A_Bitmap"; MxS16 i = 0; @@ -125,8 +126,8 @@ void HistoryBook::ReadyWorld() {0x76, 0x4c, 0x38}; // yellow - #FFB900, blue - #00548C, red - #CB1220, background - #CECECE, border - #74818B MxS32 scoreY = 0x79; - for (i = 0; i < GameState()->GetHistory()->GetCount(); i++) { - LegoGameState::ScoreItem* score = GameState()->GetHistory()->GetScore(i); + for (i = 0; i < GameState()->m_history.GetCount(); i++) { + LegoGameState::ScoreItem* score = GameState()->m_history.GetScore(i); MxStillPresenter** scorebox = &m_scores[i]; *scorebox = scoreboxMaster->Clone(); diff --git a/LEGO1/lego/legoomni/src/worlds/registrationbook.cpp b/LEGO1/lego/legoomni/src/worlds/registrationbook.cpp index 5ade0b3ae7..0e08113391 100644 --- a/LEGO1/lego/legoomni/src/worlds/registrationbook.cpp +++ b/LEGO1/lego/legoomni/src/worlds/registrationbook.cpp @@ -391,7 +391,7 @@ void RegistrationBook::FUN_100778c0() void RegistrationBook::ReadyWorld() { LegoGameState* gameState = GameState(); - gameState->GetHistory()->WriteScoreHistory(); + gameState->m_history.WriteScoreHistory(); MxS16 i; PlayMusic(JukeboxScript::c_InformationCenter_Music); From c5da684ac29715b6b229f545a25798726e1c79fa Mon Sep 17 00:00:00 2001 From: jonschz Date: Fri, 24 Jan 2025 11:27:52 +0100 Subject: [PATCH 3/9] 48 % --- LEGO1/lego/legoomni/src/worlds/historybook.cpp | 17 ++++++++++++----- LEGO1/omni/include/mxvideopresenter.h | 3 +++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/LEGO1/lego/legoomni/src/worlds/historybook.cpp b/LEGO1/lego/legoomni/src/worlds/historybook.cpp index a547cb93a8..71d5761694 100644 --- a/LEGO1/lego/legoomni/src/worlds/historybook.cpp +++ b/LEGO1/lego/legoomni/src/worlds/historybook.cpp @@ -107,7 +107,7 @@ inline void SetColor(MxStillPresenter* p_presenter, MxU8 p_color, MxU8* p_colors // FUNCTION: BETA10 0x1002b9b9 void HistoryBook::ReadyWorld() { - undefined4 dummy; + undefined4 dummy1; LegoWorld::ReadyWorld(); GameState()->m_history.WriteScoreHistory(); @@ -143,21 +143,25 @@ void HistoryBook::ReadyWorld() MxS32 scoreboxX = 1; MxS32 scoreboxRow = 5; - MxS32 scoreState = 0; - for (; scoreboxRow > 0; scoreboxRow--) { + for (MxS32 scoreState = 0; scoreState < 5; scoreState++) { for (MxS32 scoreBoxColumn = 0, scoreboxY = 1; scoreBoxColumn < 5; scoreBoxColumn++, scoreboxY += 5) { // SetColor(*scorebox, score->m_scores[scoreState][scoreBoxColumn], scoreColors, scoreboxX, scoreboxY); // inline void SetColor(MxStillPresenter* p_presenter, MxU8 p_color, MxU8* p_colors, MxS32 p_x, MxS32 p_y) MxU8 color = score->m_scores[scoreState][scoreBoxColumn]; + // this->m_scores if (color) { for (MxS32 lax = 0; lax < 4; lax++) { +#ifdef BETA10 + memset(m_scores[i]->GetBitmapStart(scoreboxX, scoreboxY + lax), scoreColors[color - 1], 4); +#else if ((*scorebox)->GetAlphaMask() != NULL) { memset(NULL, scoreColors[color - 1], 4); } else { - memset((*scorebox)->GetBitmap()->GetStart(scoreboxX, scoreboxY + lax), scoreColors[color - 1], 4); + memset(m_scores[i]->GetBitmap()->GetStart(scoreboxX, scoreboxY + lax), scoreColors[color - 1], 4); } +#endif } } } @@ -179,8 +183,9 @@ void HistoryBook::ReadyWorld() MxS16 j = letterIndex++; - assert(m_name[i][j]); m_name[i][j] = m_alphabet[letter]->Clone(); + + assert(m_name[i][j]); m_name[i][j]->Enable(TRUE); m_name[i][j]->SetTickleState(MxPresenter::e_repeating); m_name[i][j]->SetPosition(scoreX, scoreY); @@ -190,7 +195,9 @@ void HistoryBook::ReadyWorld() scoreY += 0x1b; } +#ifndef BETA10 PlayMusic(JukeboxScript::c_InformationCenter_Music); +#endif } // FUNCTION: LEGO1 0x10082a10 diff --git a/LEGO1/omni/include/mxvideopresenter.h b/LEGO1/omni/include/mxvideopresenter.h index 907ddc0e54..a1794aec4a 100644 --- a/LEGO1/omni/include/mxvideopresenter.h +++ b/LEGO1/omni/include/mxvideopresenter.h @@ -104,6 +104,9 @@ class MxVideoPresenter : public MxMediaPresenter { MxBitmap* GetBitmap() { return m_frameBitmap; } AlphaMask* GetAlphaMask() { return m_alpha; } + // FUNCTION: BETA10 0x1002c2e0 + MxU8* GetBitmapStart(MxS32 p_left, MxS32 p_top) { return m_frameBitmap->GetStart(p_left, p_top); } + void SetBit0(BOOL p_e) { m_flags.m_bit0 = p_e; } void SetBit1(BOOL p_e) { m_flags.m_bit1 = p_e; } void SetBit2(BOOL p_e) { m_flags.m_bit2 = p_e; } From f49b4e6ff63aa87e61f814eb0aab0ae3ba0a7273 Mon Sep 17 00:00:00 2001 From: jonschz Date: Fri, 24 Jan 2025 11:36:26 +0100 Subject: [PATCH 4/9] 49 % --- LEGO1/lego/legoomni/src/worlds/historybook.cpp | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/LEGO1/lego/legoomni/src/worlds/historybook.cpp b/LEGO1/lego/legoomni/src/worlds/historybook.cpp index 71d5761694..ee1f0940ac 100644 --- a/LEGO1/lego/legoomni/src/worlds/historybook.cpp +++ b/LEGO1/lego/legoomni/src/worlds/historybook.cpp @@ -142,9 +142,10 @@ void HistoryBook::ReadyWorld() } MxS32 scoreboxX = 1; - MxS32 scoreboxRow = 5; for (MxS32 scoreState = 0; scoreState < 5; scoreState++) { + MxS32 scoreboxY = 1; + for (MxS32 scoreBoxColumn = 0, scoreboxY = 1; scoreBoxColumn < 5; scoreBoxColumn++, scoreboxY += 5) { // SetColor(*scorebox, score->m_scores[scoreState][scoreBoxColumn], scoreColors, scoreboxX, scoreboxY); // inline void SetColor(MxStillPresenter* p_presenter, MxU8 p_color, MxU8* p_colors, MxS32 p_x, MxS32 p_y) @@ -159,11 +160,13 @@ void HistoryBook::ReadyWorld() memset(NULL, scoreColors[color - 1], 4); } else { - memset(m_scores[i]->GetBitmap()->GetStart(scoreboxX, scoreboxY + lax), scoreColors[color - 1], 4); + memset(m_scores[i]->GetBitmap()->GetStart(scoreboxX, lax + scoreboxY), scoreColors[color - 1], 4); } #endif } } + + scoreboxY += 5; } scoreState++; @@ -192,7 +195,7 @@ void HistoryBook::ReadyWorld() scoreX += 0x17; } - scoreY += 0x1b; + scoreY += 0x1b; // TODO: wrong place in BETA10, skipped at loop start } #ifndef BETA10 From 90c707650af6005f04c7b623d73c9f92dba7c3f2 Mon Sep 17 00:00:00 2001 From: jonschz Date: Fri, 24 Jan 2025 12:55:03 +0100 Subject: [PATCH 5/9] 53 % --- .../lego/legoomni/src/worlds/historybook.cpp | 49 +++++-------------- 1 file changed, 13 insertions(+), 36 deletions(-) diff --git a/LEGO1/lego/legoomni/src/worlds/historybook.cpp b/LEGO1/lego/legoomni/src/worlds/historybook.cpp index ee1f0940ac..51f2349034 100644 --- a/LEGO1/lego/legoomni/src/worlds/historybook.cpp +++ b/LEGO1/lego/legoomni/src/worlds/historybook.cpp @@ -89,33 +89,19 @@ MxLong HistoryBook::Notify(MxParam& p_param) return 0; } -inline void SetColor(MxStillPresenter* p_presenter, MxU8 p_color, MxU8* p_colors, MxS32 p_x, MxS32 p_y) -{ - if (p_color) { - for (MxS32 lax = 0; lax < 4; lax++) { - if (p_presenter->GetAlphaMask() != NULL) { - memset(NULL, p_colors[p_color - 1], 4); - } - else { - memset(p_presenter->GetBitmap()->GetStart(p_x, p_y + lax), p_colors[p_color - 1], 4); - } - } - } -} - // FUNCTION: LEGO1 0x100826f0 // FUNCTION: BETA10 0x1002b9b9 void HistoryBook::ReadyWorld() { - undefined4 dummy1; + undefined4 dummy1, dummy2, dummy3; LegoWorld::ReadyWorld(); GameState()->m_history.WriteScoreHistory(); char bitmap[] = "A_Bitmap"; - MxS16 i = 0; + MxS16 i; - for (; i < 26; i++) { + for (i = 0; i < 26; i++) { m_alphabet[i] = (MxStillPresenter*) Find("MxStillPresenter", bitmap); assert(m_alphabet[i]); bitmap[0]++; @@ -124,13 +110,13 @@ void HistoryBook::ReadyWorld() MxStillPresenter* scoreboxMaster = (MxStillPresenter*) Find("MxStillPresenter", "ScoreBox"); MxU8 scoreColors[3] = {0x76, 0x4c, 0x38}; // yellow - #FFB900, blue - #00548C, red - #CB1220, background - #CECECE, border - #74818B - MxS32 scoreY = 0x79; - for (i = 0; i < GameState()->m_history.GetCount(); i++) { + MxS32 scoreY; + + for (i = 0, scoreY = 0x79; i < GameState()->m_history.GetCount(); i++, scoreY += 0x1b) { LegoGameState::ScoreItem* score = GameState()->m_history.GetScore(i); - MxStillPresenter** scorebox = &m_scores[i]; - *scorebox = scoreboxMaster->Clone(); + m_scores[i] = scoreboxMaster->Clone(); MxS32 scoreX = 0x90; if (i >= 10) { @@ -141,22 +127,17 @@ void HistoryBook::ReadyWorld() scoreX = 0x158; } - MxS32 scoreboxX = 1; - - for (MxS32 scoreState = 0; scoreState < 5; scoreState++) { - MxS32 scoreboxY = 1; + for (MxS32 scoreState = 0, scoreboxX = 1; scoreState < 5; scoreState++, scoreboxX += 5) { for (MxS32 scoreBoxColumn = 0, scoreboxY = 1; scoreBoxColumn < 5; scoreBoxColumn++, scoreboxY += 5) { - // SetColor(*scorebox, score->m_scores[scoreState][scoreBoxColumn], scoreColors, scoreboxX, scoreboxY); - // inline void SetColor(MxStillPresenter* p_presenter, MxU8 p_color, MxU8* p_colors, MxS32 p_x, MxS32 p_y) MxU8 color = score->m_scores[scoreState][scoreBoxColumn]; - // this->m_scores + if (color) { for (MxS32 lax = 0; lax < 4; lax++) { #ifdef BETA10 memset(m_scores[i]->GetBitmapStart(scoreboxX, scoreboxY + lax), scoreColors[color - 1], 4); #else - if ((*scorebox)->GetAlphaMask() != NULL) { + if (m_scores[i]->GetAlphaMask() != NULL) { memset(NULL, scoreColors[color - 1], 4); } else { @@ -165,17 +146,15 @@ void HistoryBook::ReadyWorld() #endif } } - - scoreboxY += 5; } scoreState++; scoreboxX += 5; } - (*scorebox)->Enable(TRUE); - (*scorebox)->SetTickleState(MxPresenter::e_repeating); - (*scorebox)->SetPosition(scoreX + 0xa1, scoreY); + m_scores[i]->Enable(TRUE); + m_scores[i]->SetTickleState(MxPresenter::e_repeating); + m_scores[i]->SetPosition(scoreX + 0xa1, scoreY); for (MxS16 letterIndex = 0; letterIndex < (MxS16) sizeOfArray(m_name[0]);) { MxS16 letter = score->m_name.m_letters[letterIndex]; @@ -194,8 +173,6 @@ void HistoryBook::ReadyWorld() m_name[i][j]->SetPosition(scoreX, scoreY); scoreX += 0x17; } - - scoreY += 0x1b; // TODO: wrong place in BETA10, skipped at loop start } #ifndef BETA10 From aaee45e0fd1b72a409325d5db21c4c42ed93cd83 Mon Sep 17 00:00:00 2001 From: jonschz Date: Fri, 24 Jan 2025 13:15:27 +0100 Subject: [PATCH 6/9] Improve BETA10 stack, LEGO1 now at 91 --- LEGO1/lego/legoomni/src/worlds/historybook.cpp | 8 ++------ reccmp-project.yml | 1 + 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/LEGO1/lego/legoomni/src/worlds/historybook.cpp b/LEGO1/lego/legoomni/src/worlds/historybook.cpp index 51f2349034..d5743276d1 100644 --- a/LEGO1/lego/legoomni/src/worlds/historybook.cpp +++ b/LEGO1/lego/legoomni/src/worlds/historybook.cpp @@ -93,7 +93,7 @@ MxLong HistoryBook::Notify(MxParam& p_param) // FUNCTION: BETA10 0x1002b9b9 void HistoryBook::ReadyWorld() { - undefined4 dummy1, dummy2, dummy3; + undefined2 dummy1 = 0x90, dummy2 = 0x79, dummy3 = 0xc8;//, dummy4 = 0x17, dummy5 = 0x1b; LegoWorld::ReadyWorld(); GameState()->m_history.WriteScoreHistory(); @@ -147,16 +147,13 @@ void HistoryBook::ReadyWorld() } } } - - scoreState++; - scoreboxX += 5; } m_scores[i]->Enable(TRUE); m_scores[i]->SetTickleState(MxPresenter::e_repeating); m_scores[i]->SetPosition(scoreX + 0xa1, scoreY); - for (MxS16 letterIndex = 0; letterIndex < (MxS16) sizeOfArray(m_name[0]);) { + for (MxS16 letterIndex = 0; letterIndex < (MxS16) sizeOfArray(m_name[0]); letterIndex++, scoreX += 0x17) { MxS16 letter = score->m_name.m_letters[letterIndex]; if (letter == -1) { @@ -171,7 +168,6 @@ void HistoryBook::ReadyWorld() m_name[i][j]->Enable(TRUE); m_name[i][j]->SetTickleState(MxPresenter::e_repeating); m_name[i][j]->SetPosition(scoreX, scoreY); - scoreX += 0x17; } } diff --git a/reccmp-project.yml b/reccmp-project.yml index 09283c82e2..009c737fdd 100644 --- a/reccmp-project.yml +++ b/reccmp-project.yml @@ -24,6 +24,7 @@ targets: # these classes have been changed by hand to account for changes between LEGO1 and BETA10 - Act2Actor - Act2Brick + - HistoryBook - LegoAct2 - LegoCarBuild - LegoCarBuildAnimPresenter From df37b5014deca7438598ad00b7902497385d8195 Mon Sep 17 00:00:00 2001 From: jonschz Date: Fri, 24 Jan 2025 13:58:49 +0100 Subject: [PATCH 7/9] variable number match on BETA10, 91 % on LEGO1 --- LEGO1/lego/legoomni/include/legogamestate.h | 2 +- .../lego/legoomni/src/worlds/historybook.cpp | 22 ++++++++----------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/LEGO1/lego/legoomni/include/legogamestate.h b/LEGO1/lego/legoomni/include/legogamestate.h index f6e1bb2fa9..291e58d045 100644 --- a/LEGO1/lego/legoomni/include/legogamestate.h +++ b/LEGO1/lego/legoomni/include/legogamestate.h @@ -164,7 +164,7 @@ class LegoGameState { MxS16 GetCount() { return m_count; } // TODO: Not yet correct - // FUNCTION: BETA10 0x1002c54 + // FUNCTION: BETA10 0x1002c540 ScoreItem* GetScore(MxS32 p_index) { return p_index >= m_count ? NULL : &m_scores[p_index]; } MxS16 m_count; // 0x00 diff --git a/LEGO1/lego/legoomni/src/worlds/historybook.cpp b/LEGO1/lego/legoomni/src/worlds/historybook.cpp index d5743276d1..02bb542112 100644 --- a/LEGO1/lego/legoomni/src/worlds/historybook.cpp +++ b/LEGO1/lego/legoomni/src/worlds/historybook.cpp @@ -93,9 +93,10 @@ MxLong HistoryBook::Notify(MxParam& p_param) // FUNCTION: BETA10 0x1002b9b9 void HistoryBook::ReadyWorld() { - undefined2 dummy1 = 0x90, dummy2 = 0x79, dummy3 = 0xc8;//, dummy4 = 0x17, dummy5 = 0x1b; - + undefined2 dummy1 = 0x90, dummy2 = 0x79, dummy3 = 0xc8, dummy4 = 0x17, dummy5 = 0x1b; +#ifndef BETA10 LegoWorld::ReadyWorld(); +#endif GameState()->m_history.WriteScoreHistory(); char bitmap[] = "A_Bitmap"; @@ -152,17 +153,12 @@ void HistoryBook::ReadyWorld() m_scores[i]->Enable(TRUE); m_scores[i]->SetTickleState(MxPresenter::e_repeating); m_scores[i]->SetPosition(scoreX + 0xa1, scoreY); - - for (MxS16 letterIndex = 0; letterIndex < (MxS16) sizeOfArray(m_name[0]); letterIndex++, scoreX += 0x17) { - MxS16 letter = score->m_name.m_letters[letterIndex]; - - if (letter == -1) { - break; - } - - MxS16 j = letterIndex++; - - m_name[i][j] = m_alphabet[letter]->Clone(); +#ifdef BETA10 + for (MxS16 j = 0; score->m_name.m_letters[j] != -1; j++, scoreX += 0x17) { +#else + for (MxS16 j = 0; j < (MxS16) sizeOfArray(m_name[0]) && score->m_name.m_letters[j] != -1; j++, scoreX += 0x17) { +#endif + m_name[i][j] = m_alphabet[score->m_name.m_letters[j]]->Clone(); assert(m_name[i][j]); m_name[i][j]->Enable(TRUE); From f04f103136454d4b0da132579284f670ea7b2c32 Mon Sep 17 00:00:00 2001 From: jonschz Date: Fri, 24 Jan 2025 14:11:41 +0100 Subject: [PATCH 8/9] Cleanup --- LEGO1/lego/legoomni/src/worlds/historybook.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/LEGO1/lego/legoomni/src/worlds/historybook.cpp b/LEGO1/lego/legoomni/src/worlds/historybook.cpp index 02bb542112..cfb2fa1778 100644 --- a/LEGO1/lego/legoomni/src/worlds/historybook.cpp +++ b/LEGO1/lego/legoomni/src/worlds/historybook.cpp @@ -129,11 +129,10 @@ void HistoryBook::ReadyWorld() } for (MxS32 scoreState = 0, scoreboxX = 1; scoreState < 5; scoreState++, scoreboxX += 5) { - for (MxS32 scoreBoxColumn = 0, scoreboxY = 1; scoreBoxColumn < 5; scoreBoxColumn++, scoreboxY += 5) { MxU8 color = score->m_scores[scoreState][scoreBoxColumn]; - if (color) { + if (color > 0) { for (MxS32 lax = 0; lax < 4; lax++) { #ifdef BETA10 memset(m_scores[i]->GetBitmapStart(scoreboxX, scoreboxY + lax), scoreColors[color - 1], 4); @@ -142,7 +141,11 @@ void HistoryBook::ReadyWorld() memset(NULL, scoreColors[color - 1], 4); } else { - memset(m_scores[i]->GetBitmap()->GetStart(scoreboxX, lax + scoreboxY), scoreColors[color - 1], 4); + memset( + m_scores[i]->GetBitmap()->GetStart(scoreboxX, lax + scoreboxY), + scoreColors[color - 1], + 4 + ); } #endif } @@ -153,11 +156,13 @@ void HistoryBook::ReadyWorld() m_scores[i]->Enable(TRUE); m_scores[i]->SetTickleState(MxPresenter::e_repeating); m_scores[i]->SetPosition(scoreX + 0xa1, scoreY); + #ifdef BETA10 - for (MxS16 j = 0; score->m_name.m_letters[j] != -1; j++, scoreX += 0x17) { + for (MxS16 j = 0; score->m_name.m_letters[j] != -1; j++, scoreX += 0x17) #else - 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 + { m_name[i][j] = m_alphabet[score->m_name.m_letters[j]]->Clone(); assert(m_name[i][j]); From dd29668acc894a970c9fe7f9e2f998ddb73567f3 Mon Sep 17 00:00:00 2001 From: Christian Semmler Date: Fri, 24 Jan 2025 16:01:11 -0700 Subject: [PATCH 9/9] Match --- LEGO1/lego/legoomni/src/worlds/historybook.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/LEGO1/lego/legoomni/src/worlds/historybook.cpp b/LEGO1/lego/legoomni/src/worlds/historybook.cpp index cfb2fa1778..b3df73d571 100644 --- a/LEGO1/lego/legoomni/src/worlds/historybook.cpp +++ b/LEGO1/lego/legoomni/src/worlds/historybook.cpp @@ -103,9 +103,11 @@ void HistoryBook::ReadyWorld() MxS16 i; for (i = 0; i < 26; i++) { - m_alphabet[i] = (MxStillPresenter*) Find("MxStillPresenter", bitmap); - assert(m_alphabet[i]); - bitmap[0]++; + if (i < 26) { + m_alphabet[i] = (MxStillPresenter*) Find("MxStillPresenter", bitmap); + assert(m_alphabet[i]); + bitmap[0]++; + } } MxStillPresenter* scoreboxMaster = (MxStillPresenter*) Find("MxStillPresenter", "ScoreBox");