WorldMgr
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.) |
The World Manager (WorldMgr) is responsible for managing time, blood moons, climates, weather, fog, wind, lighting, procedural generation of clouds, whether the Lord of the Mountain appears, etc.
Subsystem | |
---|---|
Official name | Yes |
Description | Manages world state (time, blood moons, climates, weather, etc.) |
Init function |
Switch 1.5.0: 00000071010F2920 Wii U 1.5.0: ??? |
Debug only | No |
Because of the massive amount of state to handle, functionality is split across the main WorldMgr and 9 sub-managers.
WorldMgr
This section is empty. You can help by adding to it. |
Sub-managers
Sub-managers are created in WorldMgr::init (0x71010F43C0) and inserted into a pointer array (@WorldMgr+0x5c0). All names below are unofficial.
ID | Description |
---|---|
0 | TimeMgr |
1 | CloudPr? Handles cloud procedural generation. |
2 | ??? |
3 | Weather? Handles "rain splash" and climate weathers. |
4 | TemperatureMgr? (Reasonably sure about this one.) |
5 | ??? |
6 | Sky and fog? Holds the configuration for all EnvPalettes, EnvAttributes, WeatherInfluences, Remains palettes, Indoor palettes and dungeon fogs. |
7 | DofMgr? Holds depth of field related parameters. |
8 | ??? (contains a BaseProcLink, so it might have something to do with actors.) |
TimeMgr
TimeMgr handles everything to do with time, including Blood Moons and the Lord of the Mountain's apparition.
Internally, time of day is stored as a float in the [0.0, 360.0] range.
TimeMgr::init
- Time is set to 78.75 (05:15).
- Time for TotS environment is set to 78.75 (05:15) as well.
- "Bloody Moon end reserve timer" is set to 0.
TimeMgr::reset
This is called whenever a stage is unloaded (essentially every time the loading screen is shown).
- Blood Moon checks are delayed.
- The AnimalMaster_Appearance flag is cleared, meaning the Lord of the Mountain will not appear.
TimeMgr::calc
This is called every frame.
- If both Demo103_0 and Demo997_0 have not been played, time of day is reset to 78.75 (05:15).
- If AIDef:Action/AdvanceTime or anything else that changes time of day was called, the actual time is updated at this moment.
- Blood Moon schedule checks (see below).
- Update time of day: if Demo103_0 or Demo997_0 have been played, and if there is no active event (cutscene):
- Add (0.0083333 * elapsed frames) to the Time of Day timer. Effectively, this means that 1 in-game minute = 1 real-life second.
- If the timer is >= 360.0, which means that a day has passed, the game subtracts 360 from the timer and then performs blood moon schedule checks. See below.
- If FindDungeon_Activated is false (if the player hasn't received the The Isolated Plateau quest) and if the current time is >= 165.0 (11:00), the time is forcefully set to 11:00.
- The #Blood Moon timer is updated too.
- Update the #Day/night time flag, the #Time division, IsMorning, IsNoon, etc.
- Decrement the "Bloody Moon end reserve timer". If the new timer value is zero or negative, the WM_BloodyDay flag is cleared.
- Update #Lord of the Mountain flags.
Blood Moon
Day/night time flag
From 00:00 to 06:00 (closed interval) and from 18:00 to 00:00 (closed interval), WM_DaytimeFlag is set to false and WM_NighttimeFlag is true.
In any other case, WM_DaytimeFlag is set to true and WM_NighttimeFlag to false.
Time division, IsMorning, IsNoon, etc.
Start | End | Division | Flag |
---|---|---|---|
04:00 | 07:00 | 0 | WM_IsMorningA |
07:00 | 10:00 | 1 | WM_IsMorningB |
10:00 | 13:00 | 2 | WM_IsNoonA |
13:00 | 17:00 | 3 | WM_IsNoonB |
17:00 | 19:00 | 4 | WM_IsEveningA |
19:00 | 21:00 | 5 | WM_IsEveningB |
21:00 | 00:00 | 6 | WM_IsNightA |
00:00 | 04:00 | 7 | WM_IsNightB |
Note: all intervals include the start time and exclude the end time.