isle-portable/LEGO1/lego/legoomni/include/legogamestate.h

183 lines
4.5 KiB
C
Raw Normal View History

2023-04-27 22:19:39 -04:00
#ifndef LEGOGAMESTATE_H
#define LEGOGAMESTATE_H
#include "decomp.h"
#include "legobackgroundcolor.h"
#include "legofullscreenmovie.h"
#include "misc/legostorage.h"
2023-10-24 19:38:27 -04:00
#include "mxtypes.h"
#include "mxvariabletable.h"
class LegoState;
class MxVariable;
class MxString;
2023-10-24 19:38:27 -04:00
struct ColorStringStruct {
const char* m_targetName;
const char* m_colorName;
};
// SIZE 0x430
2023-10-24 19:38:27 -04:00
class LegoGameState {
2023-04-27 22:19:39 -04:00
public:
enum Act {
e_actNotFound = -1,
e_act1,
e_act2,
e_act3
};
enum Area {
e_noArea = 0,
e_previousArea = 0,
e_isle,
e_infomain,
e_infodoor,
e_unk4,
e_elevbott,
2024-02-24 08:55:00 -05:00
e_elevride,
e_elevride2,
e_elevopen,
e_seaview,
e_observe,
e_elevdown,
e_regbook,
e_infoscor,
e_jetrace,
2024-02-24 08:55:00 -05:00
e_jetrace2,
e_jetraceExterior,
e_unk17,
e_carrace,
2024-02-24 08:55:00 -05:00
e_carraceExterior,
e_unk20,
e_unk21,
2024-02-24 08:55:00 -05:00
e_pizzeriaExterior,
2024-02-24 08:55:00 -05:00
e_garageExterior = 25,
e_garage,
2024-02-24 08:55:00 -05:00
e_garadoor,
e_unk28,
e_hospitalExterior,
e_hospital,
e_unk31,
2024-02-24 08:55:00 -05:00
e_policeExterior,
e_unk33,
e_police,
e_polidoor,
e_copter,
e_dunecar,
e_jetski,
e_racecar,
e_act2main = 46,
e_act3script,
e_jukeboxw = 53,
2024-02-24 08:55:00 -05:00
e_unk54,
e_histbook = 56,
e_unk57,
e_unk58,
e_unk59,
e_unk60,
e_unk61,
e_unk64 = 64,
e_unk66 = 66
};
// SIZE 0x0c
struct ScoreName {
ScoreName* operator=(const ScoreName* p_other);
MxS16 m_letters[7]; // 0x00
};
// SIZE 0x2c
struct ScoreItem {
undefined2 m_unk0x00; // 0x00
MxU8 m_state[25]; // 0x02
ScoreName m_name; // 0x1c
undefined2 m_unk0x2a; // 0x2a
};
// SIZE 0x372
struct Scores {
void WriteScoreHistory();
void FUN_1003ccf0(LegoFile&);
inline ScoreItem* GetScore(MxS16 p_index) { return p_index >= m_count ? NULL : &m_scores[p_index]; }
MxS16 m_count; // 0x00
ScoreItem m_scores[20]; // 0x02
};
LegoGameState();
~LegoGameState();
MxResult Load(MxULong);
MxResult Save(MxULong);
void SerializePlayersInfo(MxS16);
void SerializeScoreHistory(MxS16 p_flags);
void SetSavePath(char*);
LegoState* GetState(const char* p_stateName);
LegoState* CreateState(const char* p_stateName);
2023-10-24 19:38:27 -04:00
void GetFileSavePath(MxString* p_outPath, MxULong p_slotn);
void StopArea(Area p_area);
void SwitchArea(Area p_area);
inline MxU8 GetUnknownC() { return m_unk0x0c; }
inline Act GetCurrentAct() { return m_currentAct; }
inline Act GetLoadedAct() { return m_loadedAct; }
inline Area GetCurrentArea() { return m_currentArea; }
inline Area GetPreviousArea() { return m_previousArea; }
inline MxU32 GetUnknown0x41c() { return m_unk0x41c; }
inline Area GetUnknown0x42c() { return m_unk0x42c; }
inline Scores* GetScores() { return &m_unk0xa6; }
inline void SetDirty(MxBool p_dirty) { m_isDirty = p_dirty; }
inline void SetCurrentArea(Area p_currentArea) { m_currentArea = p_currentArea; }
inline void SetPreviousArea(Area p_previousArea) { m_previousArea = p_previousArea; }
inline void SetUnknown0x0c(MxU8 p_unk0x0c) { m_unk0x0c = p_unk0x0c; }
inline void SetUnknown0x41c(undefined4 p_unk0x41c) { m_unk0x41c = p_unk0x41c; }
inline void SetUnknown0x42c(Area p_unk0x42c) { m_unk0x42c = p_unk0x42c; }
void SetCurrentAct(Act p_currentAct);
void FindLoadedAct();
void FUN_10039780(MxU8);
void FUN_10039940();
private:
2023-10-24 19:38:27 -04:00
void RegisterState(LegoState* p_state);
MxResult WriteVariable(LegoStorage* p_stream, MxVariableTable* p_from, const char* p_variableName);
MxResult WriteEndOfVariables(LegoStorage* p_stream);
MxS32 ReadVariable(LegoStorage* p_stream, MxVariableTable* p_to);
void SetROIHandlerFunction();
char* m_savePath; // 0x00
MxS16 m_stateCount; // 0x04
LegoState** m_stateArray; // 0x08
MxU8 m_unk0x0c; // 0x0c
Act m_currentAct; // 0x10
Act m_loadedAct; // 0x14
2023-10-24 19:38:27 -04:00
LegoBackgroundColor* m_backgroundColor; // 0x18
LegoBackgroundColor* m_tempBackgroundColor; // 0x1c
LegoFullScreenMovie* m_fullScreenMovie; // 0x20
MxU16 m_unk0x24; // 0x24
undefined m_unk0x26[128]; // 0x26
Scores m_unk0xa6; // 0xa6
undefined4 m_unk0x418; // 0x418
undefined4 m_unk0x41c; // 0x41c
MxBool m_isDirty; // 0x420
Area m_currentArea; // 0x424
Area m_previousArea; // 0x428
Area m_unk0x42c; // 0x42c
2023-04-27 22:19:39 -04:00
};
MxBool ROIHandlerFunction(char* p_input, char* p_output, MxU32 p_copyLen);
2023-04-27 22:19:39 -04:00
#endif // LEGOGAMESTATE_H