mirror of
https://github.com/isledecomp/isle.git
synced 2025-10-26 01:44:19 +00:00
feat: Implement several ::Serialize functions (#1017)
* feat: Implement many ::Serialize functions * address review comments, part 1 [skip ci] * address review comments, part 2 [skip ci] * review comments (final part) * refactor: Remove Read/Write duplication * fix merge conflict * Match PizzeriaState::Serialize again * Remove unused variable, add LegoVehicleBuildState::Serialize * Implement AnimState::Serialize * fix: Conform with naming scheme * refactor: change names back * refactor: int to MxS32 --------- Co-authored-by: jonschz <jonschz@users.noreply.github.com>
This commit is contained in:
@@ -435,11 +435,27 @@ GasStationState::GasStationState()
|
||||
unk0x08[2] = -1;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10006300
|
||||
MxResult GasStationState::Serialize(LegoFile* p_legoFile)
|
||||
// FUNCTION: LEGO1 0x10006300
|
||||
MxResult GasStationState::Serialize(LegoFile* p_file)
|
||||
{
|
||||
// TODO
|
||||
return LegoState::Serialize(p_legoFile);
|
||||
LegoState::Serialize(p_file);
|
||||
|
||||
if (p_file->IsWriteMode()) {
|
||||
Write(p_file, m_unk0x18);
|
||||
Write(p_file, m_unk0x1a);
|
||||
Write(p_file, m_unk0x1c);
|
||||
Write(p_file, m_unk0x1e);
|
||||
Write(p_file, m_unk0x20);
|
||||
}
|
||||
else if (p_file->IsReadMode()) {
|
||||
Read(p_file, &m_unk0x18);
|
||||
Read(p_file, &m_unk0x1a);
|
||||
Read(p_file, &m_unk0x1c);
|
||||
Read(p_file, &m_unk0x1e);
|
||||
Read(p_file, &m_unk0x20);
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
// STUB: LEGO1 0x10006430
|
||||
|
||||
@@ -684,35 +684,25 @@ HospitalState::HospitalState()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10076530
|
||||
MxResult HospitalState::Serialize(LegoFile* p_legoFile)
|
||||
MxResult HospitalState::Serialize(LegoFile* p_file)
|
||||
{
|
||||
LegoState::Serialize(p_legoFile);
|
||||
LegoState::Serialize(p_file);
|
||||
|
||||
if (p_legoFile->IsWriteMode()) {
|
||||
// A write variable needs to be used here, otherwise
|
||||
// the compiler aggresively optimizes the function
|
||||
MxS16 write;
|
||||
|
||||
write = m_unk0x0c;
|
||||
p_legoFile->Write(&write, sizeof(m_unk0x0c));
|
||||
write = m_unk0x0e;
|
||||
p_legoFile->Write(&write, sizeof(m_unk0x0e));
|
||||
write = m_unk0x10;
|
||||
p_legoFile->Write(&write, sizeof(m_unk0x10));
|
||||
write = m_unk0x12;
|
||||
p_legoFile->Write(&write, sizeof(m_unk0x12));
|
||||
write = m_unk0x14;
|
||||
p_legoFile->Write(&write, sizeof(m_unk0x14));
|
||||
write = m_unk0x16;
|
||||
p_legoFile->Write(&write, sizeof(m_unk0x16));
|
||||
if (p_file->IsWriteMode()) {
|
||||
Write(p_file, m_unk0x0c);
|
||||
Write(p_file, m_unk0x0e);
|
||||
Write(p_file, m_unk0x10);
|
||||
Write(p_file, m_unk0x12);
|
||||
Write(p_file, m_unk0x14);
|
||||
Write(p_file, m_unk0x16);
|
||||
}
|
||||
else if (p_legoFile->IsReadMode()) {
|
||||
p_legoFile->Read(&m_unk0x0c, sizeof(m_unk0x0c));
|
||||
p_legoFile->Read(&m_unk0x0e, sizeof(m_unk0x0e));
|
||||
p_legoFile->Read(&m_unk0x10, sizeof(m_unk0x10));
|
||||
p_legoFile->Read(&m_unk0x12, sizeof(m_unk0x12));
|
||||
p_legoFile->Read(&m_unk0x14, sizeof(m_unk0x14));
|
||||
p_legoFile->Read(&m_unk0x16, sizeof(m_unk0x16));
|
||||
else if (p_file->IsReadMode()) {
|
||||
Read(p_file, &m_unk0x0c);
|
||||
Read(p_file, &m_unk0x0e);
|
||||
Read(p_file, &m_unk0x10);
|
||||
Read(p_file, &m_unk0x12);
|
||||
Read(p_file, &m_unk0x14);
|
||||
Read(p_file, &m_unk0x16);
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
|
||||
@@ -1314,138 +1314,138 @@ Act1State::Act1State() : m_unk0x00c(0), m_unk0x00e(0), m_unk0x008(NULL), m_unk0x
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x10033ac0
|
||||
MxResult Act1State::Serialize(LegoFile* p_legoFile)
|
||||
MxResult Act1State::Serialize(LegoFile* p_file)
|
||||
{
|
||||
LegoState::Serialize(p_legoFile);
|
||||
LegoState::Serialize(p_file);
|
||||
|
||||
m_unk0x024.Serialize(p_legoFile);
|
||||
m_unk0x070.Serialize(p_legoFile);
|
||||
m_unk0x0bc.Serialize(p_legoFile);
|
||||
m_unk0x108.Serialize(p_legoFile);
|
||||
m_unk0x164.Serialize(p_legoFile);
|
||||
m_unk0x1bc.Serialize(p_legoFile);
|
||||
m_unk0x210.Serialize(p_legoFile);
|
||||
m_unk0x024.Serialize(p_file);
|
||||
m_unk0x070.Serialize(p_file);
|
||||
m_unk0x0bc.Serialize(p_file);
|
||||
m_unk0x108.Serialize(p_file);
|
||||
m_unk0x164.Serialize(p_file);
|
||||
m_unk0x1bc.Serialize(p_file);
|
||||
m_unk0x210.Serialize(p_file);
|
||||
|
||||
if (p_legoFile->IsWriteMode()) {
|
||||
if (p_file->IsWriteMode()) {
|
||||
if (m_unk0x108.GetName()->Compare("") != 0) {
|
||||
if (m_unk0x154) {
|
||||
WriteNamedTexture(p_legoFile, m_unk0x154);
|
||||
WriteNamedTexture(p_file, m_unk0x154);
|
||||
}
|
||||
else {
|
||||
FUN_1003f540(p_legoFile, "chwind.gif");
|
||||
FUN_1003f540(p_file, "chwind.gif");
|
||||
}
|
||||
if (m_unk0x158) {
|
||||
WriteNamedTexture(p_legoFile, m_unk0x158);
|
||||
WriteNamedTexture(p_file, m_unk0x158);
|
||||
}
|
||||
else {
|
||||
FUN_1003f540(p_legoFile, "chjetl.gif");
|
||||
FUN_1003f540(p_file, "chjetl.gif");
|
||||
}
|
||||
if (m_unk0x15c) {
|
||||
WriteNamedTexture(p_legoFile, m_unk0x15c);
|
||||
WriteNamedTexture(p_file, m_unk0x15c);
|
||||
}
|
||||
else {
|
||||
FUN_1003f540(p_legoFile, "chjetr.gif");
|
||||
FUN_1003f540(p_file, "chjetr.gif");
|
||||
}
|
||||
}
|
||||
if (m_unk0x164.GetName()->Compare("") != 0) {
|
||||
if (m_unk0x1b0) {
|
||||
WriteNamedTexture(p_legoFile, m_unk0x1b0);
|
||||
WriteNamedTexture(p_file, m_unk0x1b0);
|
||||
}
|
||||
else {
|
||||
FUN_1003f540(p_legoFile, "jsfrnt.gif");
|
||||
FUN_1003f540(p_file, "jsfrnt.gif");
|
||||
}
|
||||
if (m_unk0x1b4) {
|
||||
WriteNamedTexture(p_legoFile, m_unk0x1b4);
|
||||
WriteNamedTexture(p_file, m_unk0x1b4);
|
||||
}
|
||||
else {
|
||||
FUN_1003f540(p_legoFile, "jswnsh.gif");
|
||||
FUN_1003f540(p_file, "jswnsh.gif");
|
||||
}
|
||||
}
|
||||
if (m_unk0x1bc.GetName()->Compare("") != 0) {
|
||||
if (m_unk0x208) {
|
||||
WriteNamedTexture(p_legoFile, m_unk0x208);
|
||||
WriteNamedTexture(p_file, m_unk0x208);
|
||||
}
|
||||
else {
|
||||
FUN_1003f540(p_legoFile, "dbfrfn.gif");
|
||||
FUN_1003f540(p_file, "dbfrfn.gif");
|
||||
}
|
||||
}
|
||||
if (m_unk0x210.GetName()->Compare("") != 0) {
|
||||
if (m_unk0x25c) {
|
||||
WriteNamedTexture(p_legoFile, m_unk0x25c);
|
||||
WriteNamedTexture(p_file, m_unk0x25c);
|
||||
}
|
||||
else {
|
||||
FUN_1003f540(p_legoFile, "rcfrnt.gif");
|
||||
FUN_1003f540(p_file, "rcfrnt.gif");
|
||||
}
|
||||
if (m_unk0x260) {
|
||||
WriteNamedTexture(p_legoFile, m_unk0x260);
|
||||
WriteNamedTexture(p_file, m_unk0x260);
|
||||
}
|
||||
else {
|
||||
FUN_1003f540(p_legoFile, "rcback.gif");
|
||||
FUN_1003f540(p_file, "rcback.gif");
|
||||
}
|
||||
if (m_unk0x264) {
|
||||
WriteNamedTexture(p_legoFile, m_unk0x264);
|
||||
WriteNamedTexture(p_file, m_unk0x264);
|
||||
}
|
||||
else {
|
||||
FUN_1003f540(p_legoFile, "rctail.gif");
|
||||
FUN_1003f540(p_file, "rctail.gif");
|
||||
}
|
||||
}
|
||||
|
||||
p_legoFile->Write(&m_unk0x010, sizeof(m_unk0x010));
|
||||
p_legoFile->Write(&m_unk0x022, sizeof(m_unk0x022));
|
||||
Write(p_file, m_unk0x010);
|
||||
Write(p_file, m_unk0x022);
|
||||
}
|
||||
else if (p_legoFile->IsReadMode()) {
|
||||
else if (p_file->IsReadMode()) {
|
||||
if (m_unk0x108.GetName()->Compare("") != 0) {
|
||||
m_unk0x154 = ReadNamedTexture(p_legoFile);
|
||||
m_unk0x154 = ReadNamedTexture(p_file);
|
||||
if (m_unk0x154 == NULL) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
m_unk0x158 = ReadNamedTexture(p_legoFile);
|
||||
m_unk0x158 = ReadNamedTexture(p_file);
|
||||
if (m_unk0x158 == NULL) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
m_unk0x15c = ReadNamedTexture(p_legoFile);
|
||||
m_unk0x15c = ReadNamedTexture(p_file);
|
||||
if (m_unk0x15c == NULL) {
|
||||
return FAILURE;
|
||||
}
|
||||
}
|
||||
if (m_unk0x164.GetName()->Compare("") != 0) {
|
||||
m_unk0x1b0 = ReadNamedTexture(p_legoFile);
|
||||
m_unk0x1b0 = ReadNamedTexture(p_file);
|
||||
if (m_unk0x1b0 == NULL) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
m_unk0x1b4 = ReadNamedTexture(p_legoFile);
|
||||
m_unk0x1b4 = ReadNamedTexture(p_file);
|
||||
if (m_unk0x1b4 == NULL) {
|
||||
return FAILURE;
|
||||
}
|
||||
}
|
||||
if (m_unk0x1bc.GetName()->Compare("") != 0) {
|
||||
m_unk0x208 = ReadNamedTexture(p_legoFile);
|
||||
m_unk0x208 = ReadNamedTexture(p_file);
|
||||
if (m_unk0x208 == NULL) {
|
||||
return FAILURE;
|
||||
}
|
||||
}
|
||||
if (m_unk0x210.GetName()->Compare("") != 0) {
|
||||
m_unk0x25c = ReadNamedTexture(p_legoFile);
|
||||
m_unk0x25c = ReadNamedTexture(p_file);
|
||||
if (m_unk0x25c == NULL) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
m_unk0x260 = ReadNamedTexture(p_legoFile);
|
||||
m_unk0x260 = ReadNamedTexture(p_file);
|
||||
if (m_unk0x260 == NULL) {
|
||||
return FAILURE;
|
||||
}
|
||||
|
||||
m_unk0x264 = ReadNamedTexture(p_legoFile);
|
||||
m_unk0x264 = ReadNamedTexture(p_file);
|
||||
if (m_unk0x264 == NULL) {
|
||||
return FAILURE;
|
||||
}
|
||||
}
|
||||
|
||||
p_legoFile->Read(&m_unk0x010, sizeof(m_unk0x010));
|
||||
p_legoFile->Read(&m_unk0x022, sizeof(m_unk0x022));
|
||||
Read(p_file, &m_unk0x010);
|
||||
Read(p_file, &m_unk0x022);
|
||||
}
|
||||
|
||||
// TODO
|
||||
|
||||
@@ -206,16 +206,15 @@ PoliceState::PoliceState()
|
||||
}
|
||||
|
||||
// FUNCTION: LEGO1 0x1005e990
|
||||
MxResult PoliceState::Serialize(LegoFile* p_legoFile)
|
||||
MxResult PoliceState::Serialize(LegoFile* p_file)
|
||||
{
|
||||
LegoState::Serialize(p_legoFile);
|
||||
LegoState::Serialize(p_file);
|
||||
|
||||
if (p_legoFile->IsReadMode()) {
|
||||
p_legoFile->Read(&m_policeScript, sizeof(m_policeScript));
|
||||
if (p_file->IsReadMode()) {
|
||||
Read(p_file, &m_policeScript);
|
||||
}
|
||||
else {
|
||||
PoliceScript::Script policeScript = m_policeScript;
|
||||
p_legoFile->Write(&policeScript, sizeof(m_policeScript));
|
||||
Write(p_file, m_policeScript);
|
||||
}
|
||||
|
||||
return SUCCESS;
|
||||
|
||||
Reference in New Issue
Block a user