mirror of
https://github.com/isledecomp/isle.git
synced 2026-01-21 07:11:16 +00:00
One more function
This commit is contained in:
parent
20c7839865
commit
6e4a7e6cb9
@ -114,24 +114,91 @@ MxResult __stdcall WriteEndOfVariables(LegoStream *p_stream)
|
|||||||
return FAILURE;
|
return FAILURE;
|
||||||
}
|
}
|
||||||
|
|
||||||
struct SaveData3
|
struct LegoSaveDataEntry3
|
||||||
{
|
{
|
||||||
|
char *m_name;
|
||||||
|
void *m_pSomething1;
|
||||||
|
void *m_pSomething2;
|
||||||
|
int m_savePart1;
|
||||||
|
int m_savePart2;
|
||||||
|
MxU8 m_savePart3;
|
||||||
|
MxU8 padding1[3];
|
||||||
|
MxU8 unk1[24];
|
||||||
|
MxU8 m_frameOffsetInDwords;
|
||||||
|
int *m_pFrameData;
|
||||||
|
MxU8 m_currentFrame;
|
||||||
|
MxU8 padding2[3];
|
||||||
|
MxU8 unk2[8];
|
||||||
|
MxU8 m_savePart5;
|
||||||
|
MxU8 padding3[3];
|
||||||
|
MxU8 unk3[20];
|
||||||
|
MxU8 m_savePart6;
|
||||||
|
MxU8 padding4[3];
|
||||||
|
MxU8 unk4[44];
|
||||||
|
MxU8 m_savePart7;
|
||||||
|
MxU8 padding5[3];
|
||||||
|
MxU8 unk5[20];
|
||||||
|
MxU8 m_savePart8;
|
||||||
|
MxU8 padding6[3];
|
||||||
|
MxU8 unk6[68];
|
||||||
|
MxU8 m_savePart9;
|
||||||
|
MxU8 padding7[3];
|
||||||
|
MxU8 unk7[20];
|
||||||
|
MxU8 m_savePart10;
|
||||||
|
MxU8 padding8[3];
|
||||||
};
|
};
|
||||||
|
|
||||||
DECOMP_SIZE_ASSERT(SaveData3, 0x108);
|
DECOMP_SIZE_ASSERT(LegoSaveDataEntry3, 0x108);
|
||||||
|
|
||||||
MxResult WriteSaveData3(void* p_unusedThis, LegoStream* p_stream)
|
// OFFSET: LEGO1 0x10104f20
|
||||||
|
LegoSaveDataEntry3 g_saveData3[66];
|
||||||
|
|
||||||
|
// Some Mx singleton which is in 0x8C of LegoOmni
|
||||||
|
class UnknownWritingSaveData3 {
|
||||||
|
MxResult WriteSaveData3(LegoStream *p_stream);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Match except for swapped registers
|
||||||
|
// OFFSET: LEGO1 0x10083310
|
||||||
|
MxResult UnknownWritingSaveData3::WriteSaveData3(LegoStream *p_stream)
|
||||||
{
|
{
|
||||||
MxResult result = FAILURE;
|
MxResult result = FAILURE;
|
||||||
|
|
||||||
|
// This should probably be a for loop but I can't figure out how to
|
||||||
|
// make it match as a for loop.
|
||||||
|
LegoSaveDataEntry3 *entry = g_saveData3;
|
||||||
|
const LegoSaveDataEntry3 *end = &g_saveData3[66];
|
||||||
|
while (true)
|
||||||
|
{
|
||||||
|
if (p_stream->Write(&entry->m_savePart1, 4) != SUCCESS)
|
||||||
|
break;
|
||||||
|
if (p_stream->Write(&entry->m_savePart2, 4) != SUCCESS)
|
||||||
|
break;
|
||||||
|
if (p_stream->Write(&entry->m_savePart3, 1) != SUCCESS)
|
||||||
|
break;
|
||||||
|
if (p_stream->Write(&entry->m_currentFrame, 1) != SUCCESS)
|
||||||
|
break;
|
||||||
|
if (p_stream->Write(&entry->m_savePart5, 1) != SUCCESS)
|
||||||
|
break;
|
||||||
|
if (p_stream->Write(&entry->m_savePart6, 1) != SUCCESS)
|
||||||
|
break;
|
||||||
|
if (p_stream->Write(&entry->m_savePart7, 1) != SUCCESS)
|
||||||
|
break;
|
||||||
|
if (p_stream->Write(&entry->m_savePart8, 1) != SUCCESS)
|
||||||
|
break;
|
||||||
|
if (p_stream->Write(&entry->m_savePart9, 1) != SUCCESS)
|
||||||
|
break;
|
||||||
|
if (p_stream->Write(&entry->m_savePart10, 1) != SUCCESS)
|
||||||
|
break;
|
||||||
|
if (++entry >= end)
|
||||||
|
{
|
||||||
|
result = SUCCESS;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Not decomp accurate, but trying to work towards writing a functional
|
|
||||||
// save file.
|
|
||||||
// OFFSET: LEGO1 0x10039980 STUB
|
// OFFSET: LEGO1 0x10039980 STUB
|
||||||
MxResult LegoGameState::Save(MxULong p_slot)
|
MxResult LegoGameState::Save(MxULong p_slot)
|
||||||
{
|
{
|
||||||
@ -170,7 +237,6 @@ MxResult LegoGameState::Save(MxULong p_slot)
|
|||||||
|
|
||||||
// TODO: Calls down to more aggregate writing functions
|
// TODO: Calls down to more aggregate writing functions
|
||||||
|
|
||||||
printf("Debug|Saved as much as implemented so far.\n");
|
|
||||||
return SUCCESS;
|
return SUCCESS;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user