WorldMgr: Difference between revisions
mNo edit summary |
NiceneNerd (talk | contribs) Added Wii U init address |
||
| (7 intermediate revisions by 2 users not shown) | |||
| Line 1: | Line 1: | ||
<languages/> | <languages/> | ||
<!--T:1--> | <!--T:1--> | ||
{{Subsystem infobox|name=WorldMgr|init_addr_switch150=00000071010F2920|is_name_official=1|description= | {{Subsystem infobox|name=WorldMgr|init_addr_switch150=00000071010F2920|init_addr_wiiu150=03672220|is_name_official=1|description=Manages world state (time, blood moons, climates, weather, etc.)}} | ||
<translate> | <translate> | ||
| Line 12: | Line 12: | ||
== WorldMgr == <!--T:4--> | == WorldMgr == <!--T:4--> | ||
=== Sub-managers === | === Sub-managers === <!--T:42--> | ||
Sub-managers are created in WorldMgr::init (0x71010F43C0) and inserted into a pointer array (@WorldMgr+0x5c0). All names below are unofficial. | Sub-managers are created in WorldMgr::init (0x71010F43C0) and inserted into a pointer array (@WorldMgr+0x5c0). All names below are unofficial. | ||
</translate> | </translate> | ||
| Line 18: | Line 18: | ||
<!--T:5--> | <!--T:5--> | ||
{|class="wikitable" | {|class="wikitable" | ||
|+ <translate>Sub-managers by ID</translate> | |+ <translate><!--T:43--> Sub-managers by ID</translate> | ||
! <translate>ID</translate> !! <translate>Description</translate> | ! <translate><!--T:44--> ID</translate> !! <translate><!--T:45--> Description</translate> | ||
|- | |- | ||
| 0 || <translate>TimeMgr: Handles time, blood moons, Lord of the Mountain.</translate> | | 0 || <translate><!--T:46--> TimeMgr: Handles time, blood moons, Lord of the Mountain.</translate> | ||
|- | |- | ||
| 1 || <translate>CloudPrMgr: Handles cloud procedural generation.</translate> | | 1 || <translate><!--T:47--> CloudPrMgr: Handles cloud procedural generation.</translate> | ||
|- | |- | ||
| 2 || <translate>ShootingStarMgr: Manages shooting stars and (in 1.3.3+) special shooting stars for the Xenoblade 2 quest.</translate> | | 2 || <translate><!--T:48--> ShootingStarMgr: Manages shooting stars and (in 1.3.3+) special shooting stars for the Xenoblade 2 quest.</translate> | ||
|- | |- | ||
| 3 || <translate>WeatherMgr: Handles "rain splash" and climate weathers.</translate> | | 3 || <translate><!--T:49--> WeatherMgr: Handles "rain splash" and climate weathers.</translate> | ||
|- | |- | ||
| 4 || <translate>TempMgr: Handles world temperature{{check}}.</translate> | | 4 || <translate><!--T:50--> TempMgr: Handles world temperature{{check}}.</translate> | ||
|- | |- | ||
| 5 || ? | | 5 || ? | ||
|- | |- | ||
| 6 || <translate>SkyMgr: Handles sky and fog{{check}}. Holds the configuration for all EnvPalettes, EnvAttributes, WeatherInfluences, Remains palettes, Indoor palettes and dungeon fogs.</translate> | | 6 || <translate><!--T:51--> SkyMgr: Handles sky and fog{{check}}. Holds the configuration for all EnvPalettes, EnvAttributes, WeatherInfluences, Remains palettes, Indoor palettes and dungeon fogs.</translate> | ||
|- | |- | ||
| 7 || <translate>DofMgr: Handles depth of field{{check}}. Holds depth of field related parameters.</translate> | | 7 || <translate><!--T:52--> DofMgr: Handles depth of field{{check}}. Holds depth of field related parameters.</translate> | ||
|- | |- | ||
| 8 || ? | | 8 || ? | ||
| Line 49: | Line 49: | ||
<!--T:8--> | <!--T:8--> | ||
Internally, time of day is stored as a float in the [0.0, 360.0] range. | Internally, time of day is stored as a float in the [0.0, 360.0] range. | ||
0.0 = midnight = 360.0; 90 ≈ morning; 180.0 = noon; and so on. | |||
=== TimeMgr::init === <!--T:9--> | === TimeMgr::init === <!--T:9--> | ||
| Line 56: | Line 57: | ||
=== TimeMgr::reset === <!--T:10--> | === TimeMgr::reset === <!--T:10--> | ||
This is called whenever a stage is unloaded (essentially every time the loading screen is shown). | This is called whenever a stage is unloaded (essentially every time the loading screen is shown when loading a different kind of stage -- e.g. shrine → overworld, but not shrine → shrine or overworld → overworld). | ||
* Blood Moon checks are delayed. | * Blood Moon checks are delayed. | ||
* The AnimalMaster_Appearance flag is cleared, meaning the Lord of the Mountain will not appear. | * The AnimalMaster_Appearance flag is cleared, meaning the Lord of the Mountain will not appear. | ||
| Line 74: | Line 75: | ||
</translate> | </translate> | ||
{|class="wikitable" | {|class="wikitable" | ||
! <translate>Mode</translate> !! <translate>Description</translate> | ! <translate><!--T:53--> Mode</translate> !! <translate><!--T:54--> Description</translate> | ||
|- | |- | ||
| 0 || <translate> | | 0 || <translate> | ||
<!--T:55--> | |||
If Demo103_0 or Demo997_0 have been played, and if there is no active event (cutscene): | 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. | * Add (0.0083333 * elapsed frames) to the Time of Day timer. Effectively, this means that 1 in-game minute = 1 real-life second. | ||
| Line 84: | Line 86: | ||
</translate> | </translate> | ||
|- | |- | ||
| 1, 13, 35 || <translate>Freeze time to 04:00</translate> | | 1, 13, 35 || <translate><!--T:56--> Freeze time to 04:00</translate> | ||
|- | |- | ||
| 2, 14 || <translate>Freeze time to 05:00</translate> | | 2, 14 || <translate><!--T:57--> Freeze time to 05:00</translate> | ||
|- | |- | ||
| 3, 16, 36 || <translate>Freeze time to 07:00</translate> | | 3, 16, 36 || <translate><!--T:58--> Freeze time to 07:00</translate> | ||
|- | |- | ||
| 4, 19, 37 || <translate>Freeze time to 10:00</translate> | | 4, 19, 37 || <translate><!--T:59--> Freeze time to 10:00</translate> | ||
|- | |- | ||
| 5, 26, 39 || <translate>Freeze time to 17:00</translate> | | 5, 26, 39 || <translate><!--T:60--> Freeze time to 17:00</translate> | ||
|- | |- | ||
| 6, 28, 40 || <translate>Freeze time to 19:00</translate> | | 6, 28, 40 || <translate><!--T:61--> Freeze time to 19:00</translate> | ||
|- | |- | ||
| 7, 30, 41 || <translate>Freeze time to 21:00</translate> | | 7, 30, 41 || <translate><!--T:62--> Freeze time to 21:00</translate> | ||
|- | |- | ||
| 8, 11 || <translate>Freeze time to 02:00</translate> | | 8, 11 || <translate><!--T:63--> Freeze time to 02:00</translate> | ||
|- | |- | ||
| 9, 42 || <translate>Freeze time to 00:00</translate> | | 9, 42 || <translate><!--T:64--> Freeze time to 00:00</translate> | ||
|- | |- | ||
| 10 || <translate>Freeze time to 01:00</translate> | | 10 || <translate><!--T:65--> Freeze time to 01:00</translate> | ||
|- | |- | ||
| 12 || <translate>Freeze time to 03:00</translate> | | 12 || <translate><!--T:66--> Freeze time to 03:00</translate> | ||
|- | |- | ||
| 15 || <translate>Freeze time to 06:00</translate> | | 15 || <translate><!--T:67--> Freeze time to 06:00</translate> | ||
|- | |- | ||
| 17 || <translate>Freeze time to 08:00</translate> | | 17 || <translate><!--T:68--> Freeze time to 08:00</translate> | ||
|- | |- | ||
| 18 || <translate>Freeze time to 09:00</translate> | | 18 || <translate><!--T:69--> Freeze time to 09:00</translate> | ||
|- | |- | ||
| 20 || <translate>Freeze time to 11:00</translate> | | 20 || <translate><!--T:70--> Freeze time to 11:00</translate> | ||
|- | |- | ||
| 21 || <translate>Freeze time to 12:00</translate> | | 21 || <translate><!--T:71--> Freeze time to 12:00</translate> | ||
|- | |- | ||
| 22, 38 || <translate>Freeze time to 13:00</translate> | | 22, 38 || <translate><!--T:72--> Freeze time to 13:00</translate> | ||
|- | |- | ||
| 23 || <translate>Freeze time to 14:00</translate> | | 23 || <translate><!--T:73--> Freeze time to 14:00</translate> | ||
|- | |- | ||
| 24 || <translate>Freeze time to 15:00</translate> | | 24 || <translate><!--T:74--> Freeze time to 15:00</translate> | ||
|- | |- | ||
| 25 || <translate>Freeze time to 16:00</translate> | | 25 || <translate><!--T:75--> Freeze time to 16:00</translate> | ||
|- | |- | ||
| 27 || <translate>Freeze time to 18:00</translate> | | 27 || <translate><!--T:76--> Freeze time to 18:00</translate> | ||
|- | |- | ||
| 29 || <translate>Freeze time to 20:00</translate> | | 29 || <translate><!--T:77--> Freeze time to 20:00</translate> | ||
|- | |- | ||
| 31 || <translate>Freeze time to 22:00</translate> | | 31 || <translate><!--T:78--> Freeze time to 22:00</translate> | ||
|- | |- | ||
| 32 || <translate>Freeze time to 23:00</translate> | | 32 || <translate><!--T:79--> Freeze time to 23:00</translate> | ||
|- | |- | ||
| 34 ||<translate> | | 34 ||<translate> | ||
<!--T:80--> | |||
* Add (0.0083333 * elapsed frames) to the Time of Day timer. | * Add (0.0083333 * elapsed frames) to the Time of Day timer. | ||
* If the timer is >= 360.0, which means that a day has passed, the game subtracts 360 from the timer. | * If the timer is >= 360.0, which means that a day has passed, the game subtracts 360 from the timer. | ||
| Line 181: | Line 184: | ||
<!--T:23--> | <!--T:23--> | ||
Note: Vah Rudania is missing from the list. This is normal | Note: Vah Rudania is missing from the list. This is normal: blood moons cannot happen during the Vah Rudania battle sequence because the BloodyMoonProhibition flag is not set. | ||
=== Day/night time flag === <!--T:24--> | === Day/night time flag === <!--T:24--> | ||
| Line 192: | Line 195: | ||
=== Time division, IsMorning, IsNoon, etc. === <!--T:26--> | === Time division, IsMorning, IsNoon, etc. === <!--T:26--> | ||
{|class="wikitable" | {|class="wikitable" | ||
! <translate>Start</translate> !! <translate>End</translate> !! Division !! Time type (1) !! Time type (2) | ! <translate><!--T:81--> Start</translate> !! <translate><!--T:82--> End</translate> !! Division !! Time type (1) !! Time type (2) | ||
|- | |- | ||
| 04:00 || 05:00 || 0 || MorningA || Morning_A1 | | 04:00 || 05:00 || 0 || MorningA || Morning_A1 | ||
| Line 214: | Line 217: | ||
<translate> | <translate> | ||
<!--T:83--> | |||
Note: all intervals include the start time and exclude the end time. | Note: all intervals include the start time and exclude the end time. | ||
| Line 246: | Line 250: | ||
Otherwise, the game does nothing until the current hour matches the previously generated appearance hour, at which point it sets AnimalMaster_Appearance to true (which allows the LotM to spawn) and goes into state 2. | Otherwise, the game does nothing until the current hour matches the previously generated appearance hour, at which point it sets AnimalMaster_Appearance to true (which allows the LotM to spawn) and goes into state 2. | ||
====State 2==== <!--T:36--> | ====State 2 - Satori Mountain is glowing==== <!--T:36--> | ||
After one hour has elapsed, the current day of the week is stored and the state is set to 3. | After one hour has elapsed, the current day of the week is stored and the state is set to 3. | ||
====State 3==== <!--T:37--> | ====State 3 - Prepare to despawn==== <!--T:37--> | ||
After two week day changes, ''or'' [after the in-game day of the week changes and the current hour is >= the generated appearance hour], the LotM will disappear and the state will be set to 4. | After two week day changes, ''or'' [after the in-game day of the week changes and the current hour is >= the generated appearance hour], the LotM will disappear and the state will be set to 4. | ||
====State 4==== <!--T:38--> | ====State 4 - Despawned==== <!--T:38--> | ||
The game waits for the moon type to be 5, before going back to state 0. | The game waits for the moon type to be 5, before going back to state 0. | ||
| Line 260: | Line 264: | ||
</translate> | </translate> | ||
{|class="wikitable" | {|class="wikitable" | ||
! <translate>Value</translate> !! <translate>Name</translate> | ! <translate><!--T:84--> Value</translate> !! <translate><!--T:85--> Name</translate> | ||
|- | |- | ||
| 0 || Bluesky | | 0 || Bluesky | ||
| Line 282: | Line 286: | ||
<!--T:40--> | <!--T:40--> | ||
[[Category:Internals]] | [[Category:Internals{{#translation:}}]] | ||
[[Category:Subsystems (BotW)]] | [[Category:Subsystems (BotW){{#translation:}}]] | ||