WorldMgr
World Manager (WorldMgr) 是遊戲裡的一個子系統。 它控制時間、血月、氣候、天氣、霧、風、閃電、雲、山林之王的出現等等。
這個子系統很大/複雜,它的功能被切成九個部分。
WorldMgr
小主管們
小主管 (Sub-managers) 由 WorldMgr::init (0x71010F43C0) 生成, and inserted into a pointer array (@WorldMgr+0x5c0). (注意以下名稱不是官方名稱。)
ID | Description |
---|---|
0 | TimeMgr: 時間、血月、山林之王 |
1 | CloudPrMgr: 雲 |
2 | ShootingStarMgr: 流星跟異度神劍流星 (in 1.3.3+) |
3 | WeatherMgr: Handles "rain splash" and 氣候、天氣 |
4 | TempMgr: 溫度 [check]. |
5 | ? |
6 | SkyMgr: 天空、霧 [check]。Holds the configuration for all EnvPalettes, EnvAttributes, WeatherInfluences, Remains palettes, Indoor palettes and dungeon fogs. |
7 | DofMgr: Handles depth of field[check]. Holds depth of field related parameters. |
8 | ? |
氣候
WorldMgr 本身(而不是小主管)負責處理氣候那一類的事情。 氣候顯然是由玩家所在的位置決定的(在火山很熱、在山上很冷), 有趣的是,它是用攝影機所在的位置而不是林克所在的位置來決定氣候的。
TimeMgr
TimeMgr 管理所有跟時間有關的事情,例如血月何時出現,山林之王何時出現。 時間(小時跟分鐘)是一個 [0.0, 360.0] 範圍內的浮點數。 0.0 代表子夜,180.0 代表中午。
TimeMgr::init
(init 代表初始化設定)
- 時間浮點數令為 78.75 早上 05:15 的意思)。
- Time for TotS environment is set to 78.75 (05:15) as well.
- 血月計時器令為 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.
(跟山林之王 flag 會被設為 false,意思是不要出現。)
TimeMgr::calc
這個函數每幀呼叫一次。
- (If field 0x14A is set to 99, WM_BloodyDay is set to true. AIDef:Action/SetBloodyMoonEnv uses this to force a Blood Moon to be scheduled. This feature appears to be unused.)(好像是沒用到的功能。)
- 如果某兩個過場動畫 Demo103_0 and Demo997_0 還沒播過的話,時間會被固定在 78.75(早上 05:15)。
(那兩個過場動畫,前一個應該是林克走出復甦神廟環顧海拉魯,後一個不知道)
- 如果 AIDef:Action/AdvanceTime 或是其他什麼東西強制把時間定在某個值的話(例如在營火旁睡覺),那時間就會更新。
- #Midnight checks.