GameDataMgr: Difference between revisions
Jump to navigation
Jump to search
wip
imported>Leoetlino No edit summary |
imported>Leoetlino (wip) |
||
Line 6: | Line 6: | ||
Flag data is loaded from [[bgdata]] files and stored in [[TriggerParam]] objects. Transferring data from and to save files is done by interacting with the [[SaveSystem]] and [[SaveMgr]] subsystems. | Flag data is loaded from [[bgdata]] files and stored in [[TriggerParam]] objects. Transferring data from and to save files is done by interacting with the [[SaveSystem]] and [[SaveMgr]] subsystems. | ||
In debug versions, GameDataMgr is able to sync save data from and to a computer. | |||
== TriggerParams == | |||
There are at least two sets of TriggerParams at all times and up to four (param1, param, ???, GimmickResetBuffer). The exact purposes of each TriggerParam is currently unknown. | There are at least two sets of TriggerParams at all times and up to four (param1, param, ???, GimmickResetBuffer). The exact purposes of each TriggerParam is currently unknown. | ||
After all GameData flag info has been loaded into this->triggerParam from the GameData archive ([[gamedata.sarc]]), another TriggerParam instance called param1 (this->triggerParam1) is constructed and data is copied from this->triggerParam. The copy function also builds the lists of flags that need to be reset (with a non-zero ResetType) and of boolean flags with (initialValue >> 1) != 0. | |||
== Flags == | |||
== GameDataMgr::Flags == | |||
Stored at GameDataMgr+0xC18 on Switch 1.5.0. Most flags are still poorly understood. | |||
Flags are checked in the main update function (GameDataMgr::calc). Some flags are used to request actions such as resetting all flags to their initial value; these are automatically unset after GameDataMgr has processed the request. | |||
<source lang="c++"> | |||
enum GameDataMgr::Flags | |||
{ | |||
GameDataMgr::Flags_1 = 0x1, | |||
GameDataMgr::Flags_2 = 0x2, | |||
/// Causes GameDataMgr to call TriggerParam::resetToInitialValues(this->triggerParam1), | |||
/// clear some values of this->triggerParam and invoke reset callbacks | |||
GameDataMgr::Flags_NeedResetAllToInitial = 0x4, | |||
/// Causes GameDataMgr to call TriggerParam::reset(this->triggerParam1) (see below) | |||
GameDataMgr::Flags_NeedReset = 0x8, | |||
/// [Debug only] Creates a TriggerParam instance called "GimmickResetBuffer" (if needed) | |||
/// and copies data from param1. | |||
/// A pointer to the instance is stored in GameDataMgr. | |||
GameDataMgr::Flags_NeedGimmickReset = 0x10, | |||
/// If this->gimmickResetBufferParam is non-null, copy it to triggerParam and to triggerParam1 (params: 1, 0, 0). | |||
GameDataMgr::Flags_NeedCopyGimmickParam = 0x20, | |||
/// If this->gimmickResetBufferParam is non-null, copy it to triggerParam and to triggerParam1 (params: 1, 1, 0). | |||
GameDataMgr::Flags_40 = 0x40, | |||
GameDataMgr::Flags_80 = 0x80, | |||
GameDataMgr::Flags_100 = 0x100, | |||
GameDataMgr::Flags_200 = 0x200, | |||
GameDataMgr::Flags_400 = 0x400, | |||
GameDataMgr::Flags_IsChangedByDebugMaybe = 0x800, | |||
GameDataMgr::Flags_1000 = 0x1000, | |||
GameDataMgr::Flags_2000 = 0x2000, | |||
GameDataMgr::Flags_4000 = 0x4000, | |||
GameDataMgr::Flags_ChangeOnlyOnceMode = 0x8000, | |||
GameDataMgr::Flags_10000 = 0x10000, | |||
GameDataMgr::Flags_20000 = 0x20000, | |||
GameDataMgr::Flags_40000 = 0x40000, | |||
GameDataMgr::Flags_IsRestartFromGameOverMaybe = 0x80000, | |||
GameDataMgr::Flags_DoNotResetToInitialFromRadarMgr = 0x100000, | |||
}; | |||
</source> | |||
== Reset flags == | |||
Stored at GameDataMgr+0xC1C on Switch 1.5.0. | |||
<source lang="c++"> | |||
enum GameDataMgr::ResetFlags | |||
{ | |||
GameDataMgr::ResetFlags_1 = 0x1, | |||
GameDataMgr::ResetFlags_2 = 0x2, | |||
GameDataMgr::ResetFlags_4 = 0x4, | |||
GameDataMgr::ResetFlags_8 = 0x8, | |||
GameDataMgr::ResetFlags_10 = 0x10, | |||
}; | |||
</source> | |||
[[Category: Internals]] | [[Category: Internals]] | ||
[[Category: Subsystems (BotW)]] | [[Category: Subsystems (BotW)]] |