GameDataMgr: Difference between revisions
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)]] |
Revision as of 18:53, 29 December 2018
Subsystem | |
---|---|
Official name | Yes |
Description | Manages game data flags |
Init function |
Switch 1.5.0: 0000007100DCE964 Wii U 1.5.0: ??? |
Debug only | No |
This article is a stub. You can help ZeldaMods (Breath of the Wild) by expanding it. (For a list of non-stub pages, see Project:Pages.) |
GameDataMgr holds the date of all game data flags and provides functions to get, set and reset them. It is also responsible for keeping track of "shop sold out" flags and resetting them regularly.
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.
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.
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,
};
Reset flags
Stored at GameDataMgr+0xC1C on Switch 1.5.0.
enum GameDataMgr::ResetFlags
{
GameDataMgr::ResetFlags_1 = 0x1,
GameDataMgr::ResetFlags_2 = 0x2,
GameDataMgr::ResetFlags_4 = 0x4,
GameDataMgr::ResetFlags_8 = 0x8,
GameDataMgr::ResetFlags_10 = 0x10,
};