826
edits
(Created page with "* '''更新時間''':有幾種更新的模式,大部分的時候是用模式 0。") |
(Updating to match new version of source page) |
||
(26 intermediate revisions by 3 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|is_name_official=1|description=Manages world state (time, blood moons, climates, weather, etc.)}} | ||
World Manager (WorldMgr) 是遊戲裡的一個子系統。 它控制時間、血月、氣候、天氣、霧、風、閃電、雲、山林霸主的出現等等。 | World Manager (WorldMgr) 是遊戲裡的一個子系統。 它控制時間、血月、氣候、天氣、霧、風、閃電、雲、山林霸主的出現等等。 | ||
Line 44: | Line 44: | ||
遊戲內時間(小時跟分鐘)是一個 [0.0, 360.0] 範圍內的浮點數。 0.0 跟 360 代表子夜,90 大約是早晨,180.0 代表正午,依此類推。 | 遊戲內時間(小時跟分鐘)是一個 [0.0, 360.0] 範圍內的浮點數。 0.0 跟 360 代表子夜,90 大約是早晨,180.0 代表正午,依此類推。 | ||
=== TimeMgr::init === | |||
(init 代表初始化設定) | (init 代表初始化設定) | ||
* 遊戲內時間令為 78.75,早上 05:15 的意思。 | * 遊戲內時間令為 78.75,早上 05:15 的意思。 | ||
* Time for TotS environment is set to 78.75 (05:15) as well. | * Time for TotS environment is set to 78.75 (05:15) as well. | ||
* "Bloody Moon end reserve timer" is set to 0.(這個計時器不是用來倒數血月何時出現的那個,下面會詳述。) | * "Bloody Moon end reserve timer" is set to 0.(這個計時器不是用來倒數血月何時出現的那個,下面會詳述。) | ||
<div class="mw-translate-fuzzy"> | |||
=== TimeMgr::reset === | |||
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). 意思是凡是讀檔就會呼叫這個函數。 | ||
* | * 血月相關檢查會被延後。 | ||
* | * 山林霸主的 flag 會被設為 false,意思是不要出現。 | ||
</div> | |||
=== TimeMgr::calc === | === TimeMgr::calc === | ||
Line 64: | Line 69: | ||
* '''更新時間''':有幾種更新的模式,大部分的時候是用模式 0。 | * '''更新時間''':有幾種更新的模式,大部分的時候是用模式 0。 | ||
{|class="wikitable" | {|class="wikitable" | ||
! 模式 !! | ! 模式 !! 更新方式 | ||
|- | |- | ||
| 0 || | | 0 || 如果 Demo103_0 或 Demo997_0 播過,而且不是在過場動畫裡的話: | ||
* | * 遊戲內時間(那個符點數)會增加「0.0083333 * 幀數」,本遊戲一秒三十幀,所以遊戲裡的一分鐘是現實生活中的一小時。 | ||
* | * 如果遊戲內時間 ≥ 360.0,也就是完整的一天已經過完了,那就減掉 360,然後執行子夜檢查(下面詳述)。 | ||
* 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. Effectively, this means that time will not get past 11:00 until the Great Plateau Tower is activated and the Old Man cutscene is triggered. | * 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. Effectively, this means that time will not get past 11:00 until the Great Plateau Tower is activated and the Old Man cutscene is triggered. 整句的意思是,遊戲從 5:15 開始跑,如果到 11:00 時玩家還沒啟動初始之塔而且爬下來的話,遊戲時間會固定在早上 11:00。 | ||
* | * 血月計時器也會增加(增加跟遊戲內時間相同的量)。 | ||
|- | |- | ||
| 1, 13, 35 || Freeze time to 04:00 | | 1, 13, 35 || Freeze time to 04:00 把時間固定在 04:00 | ||
|- | |- | ||
| 2, 14 || Freeze time to 05:00 | | 2, 14 || Freeze time to 05:00 | ||
Line 120: | Line 125: | ||
| 32 || Freeze time to 23:00 | | 32 || Freeze time to 23:00 | ||
|- | |- | ||
| 34 ||* | | 34 || | ||
* | * 遊戲內時間增加「0.0083333 * 幀數」。 | ||
* 如果遊戲內時間 >= 360.0, 也就是完整的一天已經過完了,那就減掉 360。 | |||
''' | '''附註''': 這個模式跟模式 0 不一樣的地方在於血月計時器既不更新也不檢查。 | ||
|} | |} | ||
* | * 更新 [[#日夜標籤]],更新 [[#晨午暮夜標籤]] | ||
* If the "Bloody Moon end reserve timer" is non zero, decrement it. If the new value is zero, the WM_BloodyDay flag is cleared. | * If the "Bloody Moon end reserve timer" is non zero, decrement it. If the new value is zero, the WM_BloodyDay flag is cleared.(這個計時器不是用來倒數血月何時出現的那個,下面詳述。) | ||
* | * 更新 [[#山林霸主]] flags. | ||
=== 子夜檢查 === | === 子夜檢查 === | ||
下面這些是子夜檢查的內容(就是每次時間從 360.0 變成 0.0 的時候做的事情)。 | 下面這些是子夜檢查的內容(就是每次時間從 360.0 變成 0.0 的時候做的事情)。 | ||
增加 | 增加 WM_NumberOfDays(總共過了幾個遊戲天)。 | ||
'''如果「血月該出現了」''': | |||
(如果 WM_BloodyDay 是 true)(可以看到東方有紅色滿月就是這個狀態,雙子驛站的西納巴岡會告訴你內心有股騷動。) | |||
* 如果沒辦法出現血月(下面有列原因),血月計時器會被設在 2880.0。 | |||
* 如果血月可以出現,播放 [https://eventviewer.zeldamods.org/viewer.html?data=/d/Demo011_0.json¶ms=1 Demo011_0](又到了紅月出現的時刻,林克你要小心), 然後血月計時器歸零。 | |||
''' | '''「好久沒有血月了」''': | ||
* 如果 FirstTouchdown flag is set(出台地了)而且血月計時器 > 2520.0 (遊戲內過了整整七天,營火快轉不算): | |||
* | ** WM_BloodyDay 設為 true,代表下個子夜檢查時就會執行上面的「血月該出現了」。 | ||
**WM_BloodyDay | ** 血月計時器歸零。 | ||
** | |||
* Otherwise, the "Bloody end reserve timer" is set to 150. This ensures that the WM_BloodyDay flag is cleared 5 in-game minutes (= 5 seconds in real life) after a Blood Moon occurs. | * Otherwise, the "Bloody end reserve timer" is set to 150. This ensures that the WM_BloodyDay flag is cleared 5 in-game minutes (= 5 seconds in real life) after a Blood Moon occurs. | ||
Line 156: | Line 165: | ||
* SkyMgr's field_2B4 is set to 15 and field_2B8 >= 1.0 | * SkyMgr's field_2B4 is set to 15 and field_2B8 >= 1.0 | ||
請注意:即使血月被阻止,血月計時器也不會歸零,還是會繼續增加。這些理由也不能阻止 WM_BloodyDay | 請注意:即使血月被阻止,血月計時器也不會歸零,還是會繼續增加。這些理由也不能阻止 WM_BloodyDay 被設成 true。 | ||
注意二:瓦‧魯達尼亞看似沒有在這個表裡,但是瓦‧魯達尼亞會去設 BloodyMoonProhibition,所以血月還是不會出現。 | |||
=== 日夜標籤 === | |||
這些標籤讓程式的其他部分可以用有語義的方式檢查現在是早上還是晚上等等。 | |||
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. | 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. | |||
In any other case, WM_DaytimeFlag is set to true and WM_NighttimeFlag to false. | In any other case, WM_DaytimeFlag is set to true and WM_NighttimeFlag to false. | ||
Line 167: | Line 181: | ||
=== Time division, IsMorning, IsNoon, etc. === <!--T:26--> | === Time division, IsMorning, IsNoon, etc. === <!--T:26--> | ||
{|class="wikitable" | {|class="wikitable" | ||
! | ! 自 !! 至 !! Division !! Time type (1) !! Time type (2) | ||
|- | |- | ||
| 04:00 || 05:00 || 0 || MorningA || Morning_A1 | | 04:00 || 05:00 || 0 || MorningA || Morning_A1 | ||
Line 188: | Line 202: | ||
|} | |} | ||
筆記:上述的時間區間左閉右開。 | |||
=== 月相 === | === 月相 === | ||
Line 200: | Line 214: | ||
山林霸主會在 AnimalMaster_Appearance flag 是 true 的時候出現。 山林霸主出不出現是由一個有限狀態自動機控制的。 | 山林霸主會在 AnimalMaster_Appearance flag 是 true 的時候出現。 山林霸主出不出現是由一個有限狀態自動機控制的。 | ||
再次強調:只要讀檔,山林霸主就會消失。 | |||
====State 0 沈默狀態==== | ====State 0 沈默狀態==== | ||
Line 219: | Line 233: | ||
====State 3 準備消失狀態==== | ====State 3 準備消失狀態==== | ||
「兩天之後」 or 「『過了一天』且『現在的小時 | 「兩天之後」 or 「『過了一天』且『現在的小時 ≥ 出現的小時』」,山林霸主消失。 (意思是山林霸主只會維持整整 24 遊戲內小時/現時分鐘。) | ||
====State 4 熄滅狀態==== | ====State 4 熄滅狀態==== | ||
等月相是 | 等月相是 5(眉月)的時候再進到 State 0. | ||
== WeatherMgr == | == WeatherMgr == | ||
Line 228: | Line 242: | ||
=== Weather types === | === Weather types === | ||
{|class="wikitable" | {|class="wikitable" | ||
! 值 !! | ! 值 !! 名 | ||
|- | |- | ||
| 0 || Bluesky | | 0 || Bluesky | ||
Line 250: | Line 264: | ||
<!--T:40--> | <!--T:40--> | ||
[[Category:Internals]] | [[Category:Internals{{#translation:}}]] | ||
[[Category:Subsystems (BotW)]] | [[Category:Subsystems (BotW){{#translation:}}]] |