imported>Leoetlino |
imported>Leoetlino |
Line 1: |
Line 1: |
| {{stub}} | | {{stub}} |
| {{Subsystem infobox|name=WorldMgr|init_addr_switch150=00000071010F2920|is_name_official=1|description=Manages world state (time, blood moons, climates, weather, etc.)}} | | {{resloc|locations=[[Bootup.pack]]|path=Event/EventInfo.product.byml}} |
| 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.
| | <onlyinclude>'''EventInfo.product.sbyml''' is a [[Yaz0]]-compressed file that stores information about all game [[event]]s. It is used by the [[event manager]] to load events.</onlyinclude> |
|
| |
|
| Because of the massive amount of state to handle, functionality is split across the main WorldMgr and 9 sub-managers.
| | EventInfo is a machine generated file. It is not meant to be edited directly; much of the information it includes are either automatically generated or copied from event flows and other source-only files. |
|
| |
|
| == WorldMgr ==
| | [[Category:Content (BotW)]] |
| {{empty section}}
| | [[Category:Content (BotW, product)]] |
| | |
| == Sub-managers ==
| |
| Sub-managers are created in WorldMgr::init (0x71010F43C0) and inserted into a pointer array (@WorldMgr+0x5c0). All names below are unofficial.
| |
| | |
| {|class="wikitable"
| |
| |+ Sub-managers by ID
| |
| ! 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.
| |
| * Reload some internal state from GameDataMgr.
| |
| * If both [[Demo]]103_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 checks.
| |
| * Update time of day.
| |
| * 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.
| |
| * Update Blood Moon timer.
| |
| * Update Daytime, Night time, is morning, is noon, is evening flags.
| |
| * Update time division.
| |
| * Update "Bloody moon end reverse timer".
| |
| * Update GameDataMgr state (time, number of days, Blood Moon timers).
| |
| * Update Lord of the Mountain flags (in particular, determine if it should appear).
| |
| | |
| ==== Blood Moon ====
| |
| | |
| ==== Time division, IsMorning, IsNoon, etc. ====
| |
| | |
| ==== Lord of the Mountain ====
| |
| | |
| [[Category:Internals]]
| |
| [[Category:Subsystems (BotW)]] | |