From 09c76008ad68712908083e354fc55c48d779e73f Mon Sep 17 00:00:00 2001 From: jonschz Date: Tue, 11 Jun 2024 22:17:22 +0200 Subject: [PATCH] review comments (final part) --- LEGO1/lego/legoomni/include/isle.h | 2 +- .../legoomni/include/legoanimationmanager.h | 2 +- LEGO1/lego/legoomni/include/legorace.h | 15 ++--- LEGO1/lego/legoomni/include/legostate.h | 5 +- LEGO1/lego/legoomni/include/pizza.h | 20 +++---- LEGO1/lego/legoomni/src/actors/ambulance.cpp | 50 +++++++--------- LEGO1/lego/legoomni/src/actors/pizzeria.cpp | 6 +- LEGO1/lego/legoomni/src/actors/towtrack.cpp | 59 +++++++------------ LEGO1/lego/legoomni/src/worlds/gasstation.cpp | 26 ++++---- LEGO1/lego/legoomni/src/worlds/hospital.cpp | 32 ++++------ LEGO1/lego/legoomni/src/worlds/isle.cpp | 8 +-- LEGO1/lego/legoomni/src/worlds/police.cpp | 5 +- LEGO1/lego/sources/misc/legostorage.h | 12 ++++ 13 files changed, 103 insertions(+), 139 deletions(-) diff --git a/LEGO1/lego/legoomni/include/isle.h b/LEGO1/lego/legoomni/include/isle.h index 223e0568..d1faaa16 100644 --- a/LEGO1/lego/legoomni/include/isle.h +++ b/LEGO1/lego/legoomni/include/isle.h @@ -88,7 +88,7 @@ class Act1State : public LegoState { return !strcmp(p_name, Act1State::ClassName()) || LegoState::IsA(p_name); } - MxBool SetFlag() override; // vtable+0x18 + MxBool SetFlag() override; // vtable+0x18 MxResult Serialize(LegoFile* p_file) override; // vtable+0x1c void FUN_10034660(); diff --git a/LEGO1/lego/legoomni/include/legoanimationmanager.h b/LEGO1/lego/legoomni/include/legoanimationmanager.h index 7b98aba7..5022b74a 100644 --- a/LEGO1/lego/legoomni/include/legoanimationmanager.h +++ b/LEGO1/lego/legoomni/include/legoanimationmanager.h @@ -68,7 +68,7 @@ class AnimState : public LegoState { return !strcmp(p_name, AnimState::ClassName()) || LegoState::IsA(p_name); } - MxBool SetFlag() override; // vtable+0x18 + MxBool SetFlag() override; // vtable+0x18 MxResult Serialize(LegoFile* p_file) override; // vtable+0x1c void FUN_100651d0(MxU32, AnimInfo*, MxU32&); diff --git a/LEGO1/lego/legoomni/include/legorace.h b/LEGO1/lego/legoomni/include/legorace.h index ccc4b3be..ba8ba20d 100644 --- a/LEGO1/lego/legoomni/include/legorace.h +++ b/LEGO1/lego/legoomni/include/legorace.h @@ -28,17 +28,14 @@ class RaceState : public LegoState { inline MxResult Serialize(LegoFile* p_file) { if (p_file->IsReadMode()) { - p_file->Read(&m_id, sizeof(m_id)); - p_file->Read(&m_unk0x02, sizeof(m_unk0x02)); - p_file->Read(&m_score, sizeof(m_score)); + ReadFromStorage(p_file, &m_id); + ReadFromStorage(p_file, &m_unk0x02); + ReadFromStorage(p_file, &m_score); } else if (p_file->IsWriteMode()) { - MxS8 id = m_id; - p_file->Write(&id, sizeof(id)); - MxS16 unk0x02 = m_unk0x02; - p_file->Write(&unk0x02, sizeof(unk0x02)); - MxS16 score = m_score; - p_file->Write(&score, sizeof(score)); + WriteToStorage(p_file, m_id); + WriteToStorage(p_file, m_unk0x02); + WriteToStorage(p_file, m_score); } return SUCCESS; diff --git a/LEGO1/lego/legoomni/include/legostate.h b/LEGO1/lego/legoomni/include/legostate.h index 20bc5f1b..3e2d77c7 100644 --- a/LEGO1/lego/legoomni/include/legostate.h +++ b/LEGO1/lego/legoomni/include/legostate.h @@ -60,14 +60,13 @@ class LegoState : public MxCore { inline MxResult ReadFromFile(LegoFile* p_file) { - p_file->Read(&m_nextIndex, sizeof(m_nextIndex)); + ReadFromStorage(p_file, &m_nextIndex); return SUCCESS; } inline MxResult WriteToFile(LegoFile* p_file) { - MxS16 write = m_nextIndex; - p_file->Write(&write, sizeof(write)); + WriteToStorage(p_file, m_nextIndex); return SUCCESS; } diff --git a/LEGO1/lego/legoomni/include/pizza.h b/LEGO1/lego/legoomni/include/pizza.h index db8cac0b..52699e7a 100644 --- a/LEGO1/lego/legoomni/include/pizza.h +++ b/LEGO1/lego/legoomni/include/pizza.h @@ -17,23 +17,19 @@ class PizzaMissionState : public LegoState { public: inline MxResult WriteToFile(LegoFile* p_file) { - MxS16 unk0x06 = m_unk0x06; - p_file->Write(&unk0x06, sizeof(unk0x06)); - MxS16 unk0x14 = m_unk0x14; - p_file->Write(&unk0x14, sizeof(unk0x14)); - MxS16 unk0x16 = m_unk0x16; - p_file->Write(&unk0x16, sizeof(unk0x16)); - MxS16 score = m_score; - p_file->Write(&score, sizeof(score)); + WriteToStorage(p_file, m_unk0x06); + WriteToStorage(p_file, m_unk0x14); + WriteToStorage(p_file, m_unk0x16); + WriteToStorage(p_file, m_score); return SUCCESS; } inline MxResult ReadFromFile(LegoFile* p_file) { - p_file->Read(&m_unk0x06, sizeof(m_unk0x06)); - p_file->Read(&m_unk0x14, sizeof(m_unk0x14)); - p_file->Read(&m_unk0x16, sizeof(m_unk0x16)); - p_file->Read(&m_score, sizeof(m_score)); + ReadFromStorage(p_file, &m_unk0x06); + ReadFromStorage(p_file, &m_unk0x14); + ReadFromStorage(p_file, &m_unk0x16); + ReadFromStorage(p_file, &m_score); return SUCCESS; } diff --git a/LEGO1/lego/legoomni/src/actors/ambulance.cpp b/LEGO1/lego/legoomni/src/actors/ambulance.cpp index f5be2c5e..0ccbcf5c 100644 --- a/LEGO1/lego/legoomni/src/actors/ambulance.cpp +++ b/LEGO1/lego/legoomni/src/actors/ambulance.cpp @@ -648,39 +648,29 @@ MxResult AmbulanceMissionState::Serialize(LegoFile* p_file) LegoState::Serialize(p_file); if (p_file->IsReadMode()) { - p_file->Read(&m_unk0x10, sizeof(m_unk0x10)); - p_file->Read(&m_unk0x12, sizeof(m_unk0x12)); - p_file->Read(&m_unk0x14, sizeof(m_unk0x14)); - p_file->Read(&m_unk0x16, sizeof(m_unk0x16)); - p_file->Read(&m_unk0x18, sizeof(m_unk0x18)); - p_file->Read(&m_score1, sizeof(m_score1)); - p_file->Read(&m_score2, sizeof(m_score2)); - p_file->Read(&m_score3, sizeof(m_score3)); - p_file->Read(&m_score4, sizeof(m_score4)); - p_file->Read(&m_score5, sizeof(m_score5)); + ReadFromStorage(p_file, &m_unk0x10); + ReadFromStorage(p_file, &m_unk0x12); + ReadFromStorage(p_file, &m_unk0x14); + ReadFromStorage(p_file, &m_unk0x16); + ReadFromStorage(p_file, &m_unk0x18); + ReadFromStorage(p_file, &m_score1); + ReadFromStorage(p_file, &m_score2); + ReadFromStorage(p_file, &m_score3); + ReadFromStorage(p_file, &m_score4); + ReadFromStorage(p_file, &m_score5); } else if (p_file->IsWriteMode()) { MxS16 write; - write = m_unk0x10; - p_file->Write(&write, sizeof(write)); - write = m_unk0x12; - p_file->Write(&write, sizeof(write)); - write = m_unk0x14; - p_file->Write(&write, sizeof(write)); - write = m_unk0x16; - p_file->Write(&write, sizeof(write)); - write = m_unk0x18; - p_file->Write(&write, sizeof(write)); - write = m_score1; - p_file->Write(&write, sizeof(write)); - write = m_score2; - p_file->Write(&write, sizeof(write)); - write = m_score3; - p_file->Write(&write, sizeof(write)); - write = m_score4; - p_file->Write(&write, sizeof(write)); - write = m_score5; - p_file->Write(&write, sizeof(write)); + WriteToStorage(p_file, m_unk0x10); + WriteToStorage(p_file, m_unk0x12); + WriteToStorage(p_file, m_unk0x14); + WriteToStorage(p_file, m_unk0x16); + WriteToStorage(p_file, m_unk0x18); + WriteToStorage(p_file, m_score1); + WriteToStorage(p_file, m_score2); + WriteToStorage(p_file, m_score3); + WriteToStorage(p_file, m_score4); + WriteToStorage(p_file, m_score5); } return SUCCESS; diff --git a/LEGO1/lego/legoomni/src/actors/pizzeria.cpp b/LEGO1/lego/legoomni/src/actors/pizzeria.cpp index 1b0525b1..bebdeb01 100644 --- a/LEGO1/lego/legoomni/src/actors/pizzeria.cpp +++ b/LEGO1/lego/legoomni/src/actors/pizzeria.cpp @@ -77,9 +77,13 @@ MxU32 PizzeriaState::FUN_10017d70() } // FUNCTION: LEGO1 0x10017da0 +// FUNCTION: BETA10 0x100efe33 MxResult PizzeriaState::Serialize(LegoFile* p_file) { - LegoState::Serialize(p_file); + if (p_file->IsWriteMode()) { + p_file->WriteString(ClassName()); + } + if (p_file->IsReadMode()) { for (MxS16 i = 0; i < 5; i++) { m_unk0x08[i].ReadFromFile(p_file); diff --git a/LEGO1/lego/legoomni/src/actors/towtrack.cpp b/LEGO1/lego/legoomni/src/actors/towtrack.cpp index 65899080..bf92ec79 100644 --- a/LEGO1/lego/legoomni/src/actors/towtrack.cpp +++ b/LEGO1/lego/legoomni/src/actors/towtrack.cpp @@ -163,47 +163,28 @@ MxResult TowTrackMissionState::Serialize(LegoFile* p_file) LegoState::Serialize(p_file); if (p_file->IsReadMode()) { - p_file->Read(&m_unk0x12, sizeof(m_unk0x12)); - p_file->Read(&m_unk0x14, sizeof(m_unk0x14)); - p_file->Read(&m_unk0x16, sizeof(m_unk0x16)); - p_file->Read(&m_unk0x18, sizeof(m_unk0x18)); - p_file->Read(&m_unk0x1a, sizeof(m_unk0x1a)); - p_file->Read(&m_score1, sizeof(m_score1)); - p_file->Read(&m_score2, sizeof(m_score2)); - p_file->Read(&m_score3, sizeof(m_score3)); - p_file->Read(&m_score4, sizeof(m_score4)); - p_file->Read(&m_score5, sizeof(m_score5)); + ReadFromStorage(p_file, &m_unk0x12); + ReadFromStorage(p_file, &m_unk0x14); + ReadFromStorage(p_file, &m_unk0x16); + ReadFromStorage(p_file, &m_unk0x18); + ReadFromStorage(p_file, &m_unk0x1a); + ReadFromStorage(p_file, &m_score1); + ReadFromStorage(p_file, &m_score2); + ReadFromStorage(p_file, &m_score3); + ReadFromStorage(p_file, &m_score4); + ReadFromStorage(p_file, &m_score5); } else if (p_file->IsWriteMode()) { - MxU16 write = m_unk0x12; - p_file->Write(&write, sizeof(m_unk0x12)); - - write = m_unk0x14; - p_file->Write(&write, sizeof(m_unk0x12)); - - write = m_unk0x16; - p_file->Write(&write, sizeof(m_unk0x12)); - - write = m_unk0x18; - p_file->Write(&write, sizeof(m_unk0x12)); - - write = m_unk0x1a; - p_file->Write(&write, sizeof(m_unk0x12)); - - write = m_score1; - p_file->Write(&write, sizeof(m_unk0x12)); - - write = m_score2; - p_file->Write(&write, sizeof(m_unk0x12)); - - write = m_score3; - p_file->Write(&write, sizeof(m_unk0x12)); - - write = m_score4; - p_file->Write(&write, sizeof(m_unk0x12)); - - write = m_score5; - p_file->Write(&write, sizeof(m_unk0x12)); + WriteToStorage(p_file, m_unk0x12); + WriteToStorage(p_file, m_unk0x14); + WriteToStorage(p_file, m_unk0x16); + WriteToStorage(p_file, m_unk0x18); + WriteToStorage(p_file, m_unk0x1a); + WriteToStorage(p_file, m_score1); + WriteToStorage(p_file, m_score2); + WriteToStorage(p_file, m_score3); + WriteToStorage(p_file, m_score4); + WriteToStorage(p_file, m_score5); } return SUCCESS; diff --git a/LEGO1/lego/legoomni/src/worlds/gasstation.cpp b/LEGO1/lego/legoomni/src/worlds/gasstation.cpp index 19998596..a25c2554 100644 --- a/LEGO1/lego/legoomni/src/worlds/gasstation.cpp +++ b/LEGO1/lego/legoomni/src/worlds/gasstation.cpp @@ -441,24 +441,18 @@ MxResult GasStationState::Serialize(LegoFile* p_file) LegoState::Serialize(p_file); if (p_file->IsWriteMode()) { - MxS16 write; - write = m_unk0x18; - p_file->Write(&write, sizeof(write)); - write = m_unk0x1a; - p_file->Write(&write, sizeof(write)); - write = m_unk0x1c; - p_file->Write(&write, sizeof(write)); - write = m_unk0x1e; - p_file->Write(&write, sizeof(write)); - write = m_unk0x20; - p_file->Write(&write, sizeof(write)); + WriteToStorage(p_file, m_unk0x18); + WriteToStorage(p_file, m_unk0x1a); + WriteToStorage(p_file, m_unk0x1c); + WriteToStorage(p_file, m_unk0x1e); + WriteToStorage(p_file, m_unk0x20); } else if (p_file->IsReadMode()) { - p_file->Read(&m_unk0x18, sizeof(m_unk0x18)); - p_file->Read(&m_unk0x1a, sizeof(m_unk0x1a)); - p_file->Read(&m_unk0x1c, sizeof(m_unk0x1c)); - p_file->Read(&m_unk0x1e, sizeof(m_unk0x1e)); - p_file->Read(&m_unk0x20, sizeof(m_unk0x20)); + ReadFromStorage(p_file, &m_unk0x18); + ReadFromStorage(p_file, &m_unk0x1a); + ReadFromStorage(p_file, &m_unk0x1c); + ReadFromStorage(p_file, &m_unk0x1e); + ReadFromStorage(p_file, &m_unk0x20); } return SUCCESS; diff --git a/LEGO1/lego/legoomni/src/worlds/hospital.cpp b/LEGO1/lego/legoomni/src/worlds/hospital.cpp index 9668a06e..2e384cd5 100644 --- a/LEGO1/lego/legoomni/src/worlds/hospital.cpp +++ b/LEGO1/lego/legoomni/src/worlds/hospital.cpp @@ -689,28 +689,20 @@ MxResult HospitalState::Serialize(LegoFile* p_file) LegoState::Serialize(p_file); if (p_file->IsWriteMode()) { - MxS16 write; - - write = m_unk0x0c; - p_file->Write(&write, sizeof(m_unk0x0c)); - write = m_unk0x0e; - p_file->Write(&write, sizeof(m_unk0x0e)); - write = m_unk0x10; - p_file->Write(&write, sizeof(m_unk0x10)); - write = m_unk0x12; - p_file->Write(&write, sizeof(m_unk0x12)); - write = m_unk0x14; - p_file->Write(&write, sizeof(m_unk0x14)); - write = m_unk0x16; - p_file->Write(&write, sizeof(m_unk0x16)); + WriteToStorage(p_file, m_unk0x0c); + WriteToStorage(p_file, m_unk0x0e); + WriteToStorage(p_file, m_unk0x10); + WriteToStorage(p_file, m_unk0x12); + WriteToStorage(p_file, m_unk0x14); + WriteToStorage(p_file, m_unk0x16); } else if (p_file->IsReadMode()) { - p_file->Read(&m_unk0x0c, sizeof(m_unk0x0c)); - p_file->Read(&m_unk0x0e, sizeof(m_unk0x0e)); - p_file->Read(&m_unk0x10, sizeof(m_unk0x10)); - p_file->Read(&m_unk0x12, sizeof(m_unk0x12)); - p_file->Read(&m_unk0x14, sizeof(m_unk0x14)); - p_file->Read(&m_unk0x16, sizeof(m_unk0x16)); + ReadFromStorage(p_file, &m_unk0x0c); + ReadFromStorage(p_file, &m_unk0x0e); + ReadFromStorage(p_file, &m_unk0x10); + ReadFromStorage(p_file, &m_unk0x12); + ReadFromStorage(p_file, &m_unk0x14); + ReadFromStorage(p_file, &m_unk0x16); } return SUCCESS; diff --git a/LEGO1/lego/legoomni/src/worlds/isle.cpp b/LEGO1/lego/legoomni/src/worlds/isle.cpp index 0a62ab1b..2cac6562 100644 --- a/LEGO1/lego/legoomni/src/worlds/isle.cpp +++ b/LEGO1/lego/legoomni/src/worlds/isle.cpp @@ -1390,8 +1390,8 @@ MxResult Act1State::Serialize(LegoFile* p_file) } } - p_file->Write(&m_unk0x010, sizeof(m_unk0x010)); - p_file->Write(&m_unk0x022, sizeof(m_unk0x022)); + WriteToStorage(p_file, m_unk0x010); + WriteToStorage(p_file, m_unk0x022); } else if (p_file->IsReadMode()) { if (m_unk0x108.GetName()->Compare("") != 0) { @@ -1444,8 +1444,8 @@ MxResult Act1State::Serialize(LegoFile* p_file) } } - p_file->Read(&m_unk0x010, sizeof(m_unk0x010)); - p_file->Read(&m_unk0x022, sizeof(m_unk0x022)); + ReadFromStorage(p_file, &m_unk0x010); + ReadFromStorage(p_file, &m_unk0x022); } // TODO diff --git a/LEGO1/lego/legoomni/src/worlds/police.cpp b/LEGO1/lego/legoomni/src/worlds/police.cpp index 788ac80e..e1d129e6 100644 --- a/LEGO1/lego/legoomni/src/worlds/police.cpp +++ b/LEGO1/lego/legoomni/src/worlds/police.cpp @@ -211,11 +211,10 @@ MxResult PoliceState::Serialize(LegoFile* p_file) LegoState::Serialize(p_file); if (p_file->IsReadMode()) { - p_file->Read(&m_policeScript, sizeof(m_policeScript)); + ReadFromStorage(p_file, &m_policeScript); } else { - PoliceScript::Script policeScript = m_policeScript; - p_file->Write(&policeScript, sizeof(m_policeScript)); + WriteToStorage(p_file, m_policeScript); } return SUCCESS; diff --git a/LEGO1/lego/sources/misc/legostorage.h b/LEGO1/lego/sources/misc/legostorage.h index 5934617b..e4513aa1 100644 --- a/LEGO1/lego/sources/misc/legostorage.h +++ b/LEGO1/lego/sources/misc/legostorage.h @@ -156,4 +156,16 @@ class LegoFile : public LegoStorage { FILE* m_file; // 0x08 }; +template +inline void ReadFromStorage(LegoStorage* p_storage, T* p_variable, LegoU32 p_size = sizeof(T)) +{ + p_storage->Read(p_variable, p_size); +} + +template +inline void WriteToStorage(LegoStorage* p_storage, T p_variable) +{ + p_storage->Write(&p_variable, sizeof(T)); +} + #endif // __LEGOSTORAGE_H