Time/zh: Difference between revisions

From ZeldaMods (Breath of the Wild)
Jump to navigation Jump to search
No edit summary
No edit summary
 
(44 intermediate revisions by the same user not shown)
Line 7: Line 7:
=== 關於時鐘 ===
=== 關於時鐘 ===


出復甦神廟後,時間從早上 05:15 開始流動,直到早上 11:00 停下來。啟動初始之塔後時間從 11:00 開始繼續流動,並且遊戲會讓你在右下角看到時間。
出復甦神廟後,時鐘從早上 05:15 開始流動,直到早上 11:00 停下來。啟動初始之塔後,時鐘從 11:00 開始繼續流動,並且遊戲會讓你在右下角看到時鐘。


不過呢
不過呢


* 如果你不是用正常方法走出復甦神廟的,那時間就會永遠固定在早上 05:15。
* 如果林克不是用正常方法走出復甦神廟的,那時鐘就會永遠固定在早上 05:15。
* 如果你是正常走出復甦神廟,但是沒開初始之塔(但是你居然可以拿到滑翔傘之類的),那時間就會固定在早上 11:00  
* 如果林克正常走出復甦神廟,但是沒接到「封鎖的台地」任務(但是這樣居然可以拿到滑翔傘之類的),那時鐘就會固定在早上 11:00  


=== 關於定期血月 ===
=== 關於定期血月 ===
Line 18: Line 18:
如果 WM_BloodyDay 是 true,血月會在當晚的子夜發生。沒有任何方法可以強迫遊戲把 WM_BloodyDay 設成 true,只能等。
如果 WM_BloodyDay 是 true,血月會在當晚的子夜發生。沒有任何方法可以強迫遊戲把 WM_BloodyDay 設成 true,只能等。


WM_BloodyDay 設成 true 的條件是林克離開了台地,而且遊戲已經過了七天。消磨時間不會加速這個計時器。
WM_BloodyDay 設成 true 的條件是林克離開了台地,而且遊戲已經過了七天。


The Blood Moon timer starts ticking as soon as Link has left the Shrine of Resurrection normally. Any time spent in a state where even the main game timer is paused does not count. However, you do not necessarily need to be in the open world: time spent in shrines, divine beasts, etc. does count.
七天是從林克離開復甦神廟開始算的。用營火消磨時間和睡覺都不會加速這個計時器,在暫停選單裡度過的時間也不能算。除此之外,不管是在草原還是在神廟裡、神獸裡,計時器都會繼續流動。


Passing time at a campfire or sleeping repeatedly does not help trigger a Blood Moon at all. Quite the opposite, as the timer does not advance during cutscenes.
因為睡覺並不會把計時器往前撥八小時,同時睡覺之後的載入畫面算是暫停畫面的一種,所以睡覺只會拖延你看到血月的時間。


== Details ==
== 一些細節 ==


Internally, time of day is stored as a float in the [0.0, 360.0] range. 0.0 is 00:00 and 359.x is 23:59.
時鐘上的時間(小時:分鐘)是一個 [0.0, 360.0] 範圍內的福點數。0.0 代表子夜十二點,1.0 代表凌晨 00 點 04 分,依此類推,359.0 代表深夜 23 點 56 分。


When the game starts, time is set to 78.75 (05:15) and the '''Bloody Moon end reserve timer''' is set to 0. If you have an existing save file, the game timer is reloaded from your save.
遊戲開始時,時鐘會定在 78.75,換算得早上 05 15 分。載入之前的存檔時,時鐘會定在存檔裡的時間。


=== Every game tick ===
=== 每次滴答 ===


If the Shrine of Resurrection exit cutscene (Demo103_0) hasn't played, time is reset to 78.75. This means that if you manage to clip out of the Shrine of Resurrection and skip that cutscene, the game clock will be stuck at 05:15.
如果過場動畫 Demo103_0(走出復甦神廟,環顧四周,看向老人)還沒有播放過,那時鐘就會一直被重置在  78.75。也就是說,如果你用望遠鏡穿牆穿出復甦神廟的話,時鐘就不會流動。


Otherwise, if there is no active event/cutscene:
假設你看過那個過場動畫的話,


* The game timer is incremented by 0.0083333 × elapsed frames. Effectively, this means that 1 in-game minute = 1 real-life second.
* 時鐘往前撥 0.0083333 × 幀數。本遊戲一秒 30 幀,所以現實生活中的 24 分鐘 = 24 × 60 × 30 幀 = 時鐘往前撥 0.0083333 × 24 × 60 × 30 = 時鐘往前撥 360 = 遊戲內一天。
* If Link 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.
* 如果林克還沒從初始之塔爬下來,而且時鐘超過 165.0 (早上 11:00),那時鐘會被重置成 165.0。
* If the timer reaches 360.0 (midnight), the game performs special checks. See the next section.
* 如果時鐘走到 360.0,遊戲會做一些子夜檢查,下面會講到。
* A value called the '''blood moon timer''' is also incremented by 0.0083333 × elapsed frames.
* '''血月計時器''' 往前流動 0.0083333 × 幀數。.


Afterwards, if the "Bloody Moon end reserve timer" is non zero, it is decremented. If the new value is zero, the WM_BloodyDay flag is cleared.
之後,如果 "Bloody Moon end reserve timer" 的值非零的話(代表血月出現在正頭上),遊戲會把它減一。如果減了之後變成零,遊戲會把 WM_BloodyDay 關掉(血月出現過後不會再下個子夜出現)。


=== Every time the timer reaches 360.0 (midnight) ===
=== 360.0 檢查(子夜檢查) ===


First, WM_NumberOfDays is incremented. This has an effect on the moon cycle.
WM_NumberOfDays 加一。這個數字是用來計算月相的。


'''If a Blood Moon is scheduled:'''
'''如果血月該出現了'''


If Blood Moons are "prohibited" (see below for a full list of conditions), the timer is set to 2880.0 and nothing happens. Otherwise, the Blood Moon cutscene ([https://eventviewer.zeldamods.org/viewer.html?data=/d/Demo011_0.json&params=1 Demo011_0]) is triggered and the timer is reset to 0.0.
如果血月該出現了但是被什麼東西阻止了(下面有解釋什麼會阻止血月),那血月計時器會被設在 2880.0,其他什麼事情都不會發生。如果沒有理由不出血月的話,遊戲會播放  [https://eventviewer.zeldamods.org/viewer.html?data=/d/Demo011_0.json&params=1 Demo011_0] (又到了紅月出現的時刻,林克你要小心),播完之後血月計時器歸零。


The game then determines whether to '''schedule a Blood Moon''' or not:
那麼什麼時候算是'''血月該出現了'''呢?


If the player has left the Great Plateau and if the Blood Moon timer is > 2520.0 (7 in-game days):
簡單來說就是玩家離開了初始台地,而且血月計時器超過 2520.0 了(七個遊戲天)。


* The WM_BloodyDay flag is set to true, which means that a Blood Moon is scheduled for the next night.
* 這時,WM_BloodyDay flag 會被設成 true,代表下個子夜理論上就會有血月出現。
* The Blood Moon timer is reset to 0.0.
* 血月計時器會歸零。


Otherwise, the "Bloody end reserve timer" is set to 150. This ensures that WM_BloodyDay 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 WM_BloodyDay is cleared 5 in-game minutes (= 5 seconds in real life) after a Blood Moon occurs.


=== Blood Moon inhibitors ===
=== 阻止血月的理由 ===


If any of the following conditions are true, the Blood Moon cutscene will not be triggered.
下面這些東西會阻止血月。


* Link is not in the main overworld (e.g. in a shrine or divine beast)
* 林克不在主世界裡(在神獸裡或神廟裡)
* Link is in Hyrule Castle (i.e. the Hyrule Castle 3D minimap is visible)
* 林克在城堡裡
* Link is fighting Dark Beast Ganon
* 林克在草原上對戰魔獸加儂
* The BloodyMoonProhibition flag is set: Blood moons are prohibited by an event (cutscene, minigame, etc.)
* BloodyMoonProhibition 是 true,可能的理由是你在過場動畫裡或是在小遊戲裡。
* Vah Medoh battle
* 在射瓦‧梅德防護罩
* Vah Naboris battle
* 在射瓦‧娜波力斯的腳
* Vah Ruta battle
* 在射瓦‧露塔的肩膀
* Some condition involving the Sky Manager
* 某個跟 Sky Manager 有關的條件


However, these do not prevent the Blood Moon timer from advancing, or the WM_BloodyDay flag from being set.
請注意:即使血月被阻止,血月計時器也不會歸零,還是會繼續增加。這些理由也不能阻止 WM_BloodyDay 被設成 true。


Note: Vah Rudania is missing from the list. This is normal and blood moons still cannot happen during the Vah Rudania battle sequence because the BloodyMoonProhibition flag is set during it.
注意二:瓦‧魯達尼亞看似沒有在這個表裡,但是瓦‧魯達尼亞會去設 BloodyMoonProhibition,所以血月還是不會出現。


=== Special case: passing time at a campfire or sleeping ===
=== 特殊情況:睡旅館跟消磨時間 ===


When you pass time at a campfire or sleep, the time is instantly set to the destination time. The game never speeds up or slows down the flow of time.
當你在旅館(或驛站,或德庫樹長老的肚子裡)睡覺,或用營火消磨時間時,時鐘會被快轉到你指定的時間。但是其他像血月計時器之類的計時器並不會跟著轉。(調整微波爐的時鐘不會讓食物更快好。)


If the time change causes the clock to cross midnight, the game sets a special flag that causes the Time Manager to run the "handle new day" function once, even if it's not midnight. The game also explicitly checks<ref>[https://eventviewer.zeldamods.org/viewer.html?data=/d/Demo007_1.json&params=1&node=Event53 Demo007_1]</ref> if a Blood Moon was scheduled to happen and triggers the cutscene if needed.
如果你的睡覺是有過夜的,那麼遊戲會呼叫 "handle new day" 新的一天函數。這個函數會檢查你是不是睡過某個血月了,是的話,它會補給你林克林克你要小心。


=== Moon type ===
=== 月相 ===


The moon type is calculated based on the number of in-game days (WM_NumberOfDays). The exact formula is <code>(numberOfDays + x + 1) % 8</code><ref>{{addr|a=0x71010E8200|ver=nx-1.5.0}}</ref>, where x is equal to 1 if the current time is > 180.0 (noon) and % is the modulo operator.
月相取決於你在遊戲裡活了幾天 (WM_NumberOfDays)。精確的式子是 <code>(numberOfDays + x + 1) % 8</code><ref>0x71010E8200</ref>,這裡的 x 在下午的時候是 1,上午的時候是 0。 百分號是模運算(除以八的餘數)。 也就是說,每過一次正午月相就前進一格。


If a moon type was set manually (for instance using [[AIDef:Action/EventSetMoonType]]), that value will be used as the moon type. It is unclear whether the game ever sets the moon type manually.
月相也可以直接用遊戲底層的函數指定(例如這個函數 [[AIDef:Action/EventSetMoonType]]),不過我們沒看到任何可以強制指定月相的例子。(通常就是一路睡到想要的月相。)


The moon schedule has nothing to do with the blood moon schedule.
月相跟血月無關。血月可能會出現在本應不是滿月的子夜,血月之後的隔天也不一定是十六夜。


==== Moon phases ====
==== 月相的喚法 ====


Here are the possible values and associated phases:
雙子驛站的西納巴岡會告訴你今晚會有血月,或是今晚的月相。


* 0: Full Moon or Blood Moon or on a Bloody Day after 04:00
* 0: Full Moon or Blood Moon or on a Bloody Day after 04:00 滿月
* 1: Waning gibbous
* 1: Waning gibbous 十六夜
* 2: Third quarter
* 2: Third quarter 下弦月
* 3: "26th-day"
* 3: "26th-day" 殘月
* 4: New moon
* 4: New moon 新月
* 5: Waxing crescent
* 5: Waxing crescent 眉月
* 6: "Seven-day"
* 6: "Seven-day" 上弦月
* 7: "13-day"
* 7: "13-day" 十三夜


== References ==
== References ==

Latest revision as of 18:42, 5 August 2020

Other languages:

這個條目描述曠野之息裡的時間是如何運作的。

總結

關於時鐘

出復甦神廟後,時鐘從早上 05:15 開始流動,直到早上 11:00 停下來。啟動初始之塔後,時鐘從 11:00 開始繼續流動,並且遊戲會讓你在右下角看到時鐘。

不過呢

  • 如果林克不是用正常方法走出復甦神廟的,那時鐘就會永遠固定在早上 05:15。
  • 如果林克正常走出復甦神廟,但是沒接到「封鎖的台地」任務(但是這樣居然可以拿到滑翔傘之類的),那時鐘就會固定在早上 11:00

關於定期血月

如果 WM_BloodyDay 是 true,血月會在當晚的子夜發生。沒有任何方法可以強迫遊戲把 WM_BloodyDay 設成 true,只能等。

WM_BloodyDay 設成 true 的條件是林克離開了台地,而且遊戲已經過了七天。

七天是從林克離開復甦神廟開始算的。用營火消磨時間和睡覺都不會加速這個計時器,在暫停選單裡度過的時間也不能算。除此之外,不管是在草原還是在神廟裡、神獸裡,計時器都會繼續流動。

因為睡覺並不會把計時器往前撥八小時,同時睡覺之後的載入畫面算是暫停畫面的一種,所以睡覺只會拖延你看到血月的時間。

一些細節

時鐘上的時間(小時:分鐘)是一個 [0.0, 360.0] 範圍內的福點數。0.0 代表子夜十二點,1.0 代表凌晨 00 點 04 分,依此類推,359.0 代表深夜 23 點 56 分。

遊戲開始時,時鐘會定在 78.75,換算得早上 05 點 15 分。載入之前的存檔時,時鐘會定在存檔裡的時間。

每次滴答

如果過場動畫 Demo103_0(走出復甦神廟,環顧四周,看向老人)還沒有播放過,那時鐘就會一直被重置在 78.75。也就是說,如果你用望遠鏡穿牆穿出復甦神廟的話,時鐘就不會流動。

假設你看過那個過場動畫的話,

  • 時鐘往前撥 0.0083333 × 幀數。本遊戲一秒 30 幀,所以現實生活中的 24 分鐘 = 24 × 60 × 30 幀 = 時鐘往前撥 0.0083333 × 24 × 60 × 30 = 時鐘往前撥 360 = 遊戲內一天。
  • 如果林克還沒從初始之塔爬下來,而且時鐘超過 165.0 (早上 11:00),那時鐘會被重置成 165.0。
  • 如果時鐘走到 360.0,遊戲會做一些子夜檢查,下面會講到。
  • 血月計時器 往前流動 0.0083333 × 幀數。.

之後,如果 "Bloody Moon end reserve timer" 的值非零的話(代表血月出現在正頭上),遊戲會把它減一。如果減了之後變成零,遊戲會把 WM_BloodyDay 關掉(血月出現過後不會再下個子夜出現)。

360.0 檢查(子夜檢查)

WM_NumberOfDays 加一。這個數字是用來計算月相的。

如果血月該出現了

如果血月該出現了但是被什麼東西阻止了(下面有解釋什麼會阻止血月),那血月計時器會被設在 2880.0,其他什麼事情都不會發生。如果沒有理由不出血月的話,遊戲會播放 Demo011_0 (又到了紅月出現的時刻,林克你要小心),播完之後血月計時器歸零。

那麼什麼時候算是血月該出現了呢?

簡單來說就是玩家離開了初始台地,而且血月計時器超過 2520.0 了(七個遊戲天)。

  • 這時,WM_BloodyDay flag 會被設成 true,代表下個子夜理論上就會有血月出現。
  • 血月計時器會歸零。

Otherwise, the "Bloody end reserve timer" is set to 150. This ensures that WM_BloodyDay is cleared 5 in-game minutes (= 5 seconds in real life) after a Blood Moon occurs.

阻止血月的理由

下面這些東西會阻止血月。

  • 林克不在主世界裡(在神獸裡或神廟裡)
  • 林克在城堡裡
  • 林克在草原上對戰魔獸加儂
  • BloodyMoonProhibition 是 true,可能的理由是你在過場動畫裡或是在小遊戲裡。
  • 在射瓦‧梅德防護罩
  • 在射瓦‧娜波力斯的腳
  • 在射瓦‧露塔的肩膀
  • 某個跟 Sky Manager 有關的條件

請注意:即使血月被阻止,血月計時器也不會歸零,還是會繼續增加。這些理由也不能阻止 WM_BloodyDay 被設成 true。

注意二:瓦‧魯達尼亞看似沒有在這個表裡,但是瓦‧魯達尼亞會去設 BloodyMoonProhibition,所以血月還是不會出現。

特殊情況:睡旅館跟消磨時間

當你在旅館(或驛站,或德庫樹長老的肚子裡)睡覺,或用營火消磨時間時,時鐘會被快轉到你指定的時間。但是其他像血月計時器之類的計時器並不會跟著轉。(調整微波爐的時鐘不會讓食物更快好。)

如果你的睡覺是有過夜的,那麼遊戲會呼叫 "handle new day" 新的一天函數。這個函數會檢查你是不是睡過某個血月了,是的話,它會補給你林克林克你要小心。

月相

月相取決於你在遊戲裡活了幾天 (WM_NumberOfDays)。精確的式子是 (numberOfDays + x + 1) % 8[1],這裡的 x 在下午的時候是 1,上午的時候是 0。 百分號是模運算(除以八的餘數)。 也就是說,每過一次正午月相就前進一格。

月相也可以直接用遊戲底層的函數指定(例如這個函數 AIDef:Action/EventSetMoonType),不過我們沒看到任何可以強制指定月相的例子。(通常就是一路睡到想要的月相。)

月相跟血月無關。血月可能會出現在本應不是滿月的子夜,血月之後的隔天也不一定是十六夜。

月相的喚法

雙子驛站的西納巴岡會告訴你今晚會有血月,或是今晚的月相。

  • 0: Full Moon or Blood Moon or on a Bloody Day after 04:00 滿月
  • 1: Waning gibbous 十六夜
  • 2: Third quarter 下弦月
  • 3: "26th-day" 殘月
  • 4: New moon 新月
  • 5: Waxing crescent 眉月
  • 6: "Seven-day" 上弦月
  • 7: "13-day" 十三夜

References

  • For more technical details, read the article on the WorldMgr. Sections of that article were extracted from it and simplified here.
  1. 0x71010E8200