时间

From ZeldaMods (Breath of the Wild)
Revision as of 19:14, 11 May 2020 by Simple (talk | contribs) (Created page with "下面這些東西會阻止血月。")
Jump to navigation Jump to search
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.

阻止血月的理由

下面这些东西会阻止血月。

  • 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.)
  • Vah Medoh battle
  • Vah Naboris battle
  • Vah Ruta battle
  • Some condition involving the Sky Manager

However, these do not prevent the Blood Moon timer from advancing, or the WM_BloodyDay flag from being set.

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.

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[1] if a Blood Moon was scheduled to happen and triggers the cutscene if needed.

Moon type

The moon type is calculated based on the number of in-game days (WM_NumberOfDays). The exact formula is (numberOfDays + x + 1) % 8[2], where x is equal to 1 if the current time is > 180.0 (noon) and % is the modulo operator.

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.

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
  • 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. Demo007_1
  2. 0x71010E8200 [nx-1.5.0 executable]