脫出加儂戰

From ZeldaMods (Breath of the Wild)
Revision as of 03:15, 11 May 2020 by Simple (talk | contribs) (Created page with "''LastBossIncompleteGanonGenerateFlag'' 這個 flag 的功能是記錄林克是不是在主殿內和災厄加儂戰鬥。")
Jump to navigation Jump to search
Other languages:

脫出加儂戰是一個程錯。林克拿到光之弓箭後,可以把光之弓箭帶出魔獸加儂所在的光牆內。由於遊戲仍然認為林克在和魔獸加儂對戰,光牆外的世界和平常的世界有些許差異。根據版本不同,具體的差異也各有不同。

這個條目記載了逃出光牆後外面世界會發生的事情。

影響

摩托車的檢查雖然不太一樣,但是可以很明顯看出來遊戲設計師先複製貼上 amiibo 的程式碼之後再稍做修改。

一旦遊戲到了對戰加儂的階段,玩家就不能再存檔,也不能用減號傳送。

這是因為 LastBossGanonBeastGenerateFlag 這個 flag。林克從城堡被薩爾達傳送到草原上跟魔獸加儂對戰時,遊戲會用這個 flag 召喚魔獸加儂出來,同時,遊戲會打開 SaveProhibition(不存擋)、WarpProhibition(不傳送)、 KillTimeProhibition(不消磨)、EnterDungeonProhibition(不進廟)。

這些禁止事項在遊戲裏被重複利用了好些次。例如,沃托里的賭博小遊戲在賭博開始跟結束時都會打開、關閉某些 flag。所以有玩家發現,離開光牆後只要去玩賭博小遊戲,小遊戲結束後這些限制也隨之解除。

載入畫面後的詭異動畫

Demo025_0 (which is played every time Link is spawned in the main world) checks the IsPlayed_Demo146_0 flag. If it is set, the player's Demo_AccelerateHorse action is called. This explains why Link does a strange looking animation whenever the player loads a save that was made after escaping Ganon.

血月

TimeWorldMgr 裏有提到,LastBossGanonBeastGenerateFlag 這個 flag 會阻止子夜的血月。不過這僅僅意味着血月不會自然出現,血月的計時器還是會繼續增加。

和其他禁止事項不同的是,遊戲裏沒有哪個機制會把 LastBossGanonBeastGenerateFlag 關掉,所以我們不能期待把它關掉後讓血月自然出現。不過,睡覺跟消磨時間後出現的血月(如果血月本該在當晚發生而林克直接睡到早晨的話)用的是另一套獨立的檢查系統,所以還是可以觸發。這部分八成是任天堂漏看了。

消失的 NPC、神廟、敵人

這個部分是大部分人都會立刻發現的:在脫出光牆後,一部份的神廟、希卡塔、NPC、敵人將不復存在。

之所以會只有「一部份」不見,是因為 Placement 的原始碼裏有一段奇怪的邏輯。

If:

  • [1.0.0-1.2.0] FirstInHyruleCastleBossRoom is set
  • [1.3.0+] FirstInHyruleCastleBossRoom or IsPlayed_Demo145_0 is set

而且一個「東西」

  • is not Enemy_GanonBeast and profile[1] name is Enemy, GelEnemy, SandWorm (sic), Prey, Dragon or Guardian, or contains NPC (e.g. NPC, DemoNPC)
  • or is called exactly Enemy_Guardian_A
  • or has Entrance or WarpPoint or Terminal in its unit config name

那就不生成這個東西。

如果一個這個東西跟別的東西綁定在一起的話,整組東西都不會生成。

解釋

之所以 NPC、大部分的敵人、神廟都會不見,是因為原始碼裏刻意把它們過濾掉了。

同時我們也可以看到為什麼希卡塔看起來和平常不一樣。希卡塔是跟 FldObj_DownloadTerminal_A_01(滴入地圖的東西)和 DgnObj_WarpPoint_A_01(地板上的藍色圓形傳送點)綁定的,而遊戲並不打算生成後兩種東西,從而排除了整個塔。

類似的,神廟的內部也通通不見了。這是因為整個神廟都跟坐鎮的導師綁定了,而導師是 ...... NPC。

有趣的地方來了。德谷多吊橋(台地西邊,石柱上有西諾克斯地方)雖然是地形的一部份卻不會生成。這是因為吊橋內部的名字叫 FldObj_RockBridgeGerudoEntrance_A_01,而有含有 Entrance 的東西都被當作神廟電梯一起禁止了。

另一方面,沙漠裏的拉吉克雖然是怪物卻會生成。這是因為拉吉克叫做 Sandworm,而禁止名單裏寫的是 SandWorm(注意大小寫)。

任天堂的補丁(補壞的)

FirstInHyruleCastleBossRoom is set when the player triggers the final boss sequence in the castle sanctum. On the other hand, IsPlayed_Demo145_0 is set after Calamity Ganon ("incomplete Ganon") dies.

So why does 1.3.0 check IsPlayed_Demo145_0 in addition to FirstInHyruleCastleBossRoom?

This is because Nintendo changed some save data in 1.2.0 in an attempt to patch a closely related glitch: since 1.2.0, the FirstInHyruleCastleBossRoom flag is not loaded from or written to save files anymore. Therefore, to ensure that FirstInHyruleCastleBossRoom always has the correct value, they must now rely on a different endgame flag, and they chose IsPlayed_Demo145_0 for this purpose.

Astute readers will notice that 1.2.0 is the version on which reloading a save causes NPCs, shrines and other excluded actors to reappear. This is simply because a save reload on 1.2.0 and any newer version causes FirstInHyruleCastleBossRoom to be reset to its default value (false), so on 1.2.0 none of that special spawning logic is used.

1.3.0 is the first version on which this trick doesn't work anymore because IsPlayed_Demo145_0 is always saved and loaded properly. Master Mode, Trial of the Sword, dying, killing Ganon, dying, etc. all have no effects. The only way to get out of this state is to reset the flag, and unfortunately, there is nothing the player can do to reset IsPlayed flags.

希卡石能力(amiibo 跟摩托車)

amiibo 跟摩托車能不能使用是以 IsPlayed_Demo 系列的 flag 來控制的。下面些介紹各種 Demo。(其中包括任天堂的官方日文名稱。)

  • Demo141_0: Hyrule Castle Citadel - Windblight Ganon Appears ハイラル城本丸・カースガノン(風)登場
  • Demo141_1: Hyrule Castle Citadel - Fireblight Ganon Appears ハイラル城本丸・カースガノン(火)登場
  • Demo141_2: Hyrule Castle Citadel - Thunderblight Ganon Appears ハイラル城本丸・カースガノン(雷)登場
  • Demo141_3: Hyrule Castle Citadel - Waterblight Ganon Appears ハイラル城本丸・カースガノン(水)登場
  • Demo142_0: Hyrule Castle Citadel - Ganon's Incomplete Form Appears ハイラル城本丸・不完全體ガノン登場(加儂破蛋而出)
  • Demo143_4: Hyrule Castle Citadel · Divine Beast Beam Bullet ハイラル城本丸・神獣ビーム着弾(四英傑攻擊加儂)
  • Demo145_0: Hyrule Castle Citadel · Ganon's Incomplete Form Dies ハイラル城本丸・不完全體ガノン死亡(主殿內的災厄加儂血條歸零)
  • Demo146_0: Hyrule Field - Beast Ganon Appears ハイラル平原・魔獣ガノン登場(魔獸加農出現在草原上)

amiibo 功能在 Demo146_0Demo141_{0,1,2,3}、'Demo142_0 中的任一個播放過後就不能使用。(簡而言之,一旦開始打加儂就不能用amiibo 補充道具了。)

摩托車的檢查雖然不太一樣,但是可以很明顯看出來遊戲設計師先複製貼上 amiibo 的程式碼之後再稍做修改。

  • 播放過 Demo146_0 後,任天堂允許玩家騎車(用意應該是取代馬)。
  • 如果只有 Demo141_{0,1,2,3}Demo142_0 播過,就不能騎車(主殿裏別騎車)。
  • 除此之外,林克在 main map 以外的地方都可以騎車,例如劍之試煉裏面。(注意我們在講的是脫出加儂戰之後再進入劍之試煉,不是說正規的劍之試煉裏可以騎車。)

EX 系列任務

如果 Demo146_0 (魔獸加儂)播過,遊戲就不會給你劍之試煉任務跟英傑之詩任務。任天堂在這兩個任務的 code 都放了檢查。

光之弓箭跟大師劍

LastBossGanonBeastGenerateFlag 出現在大師劍的原始碼裏。在魔獸加儂戰中,大師劍就會一直維持發光狀態(60 攻)。

神獸雷射光跟城堡周圍黑柱

IsPlayed_Demo145_0 的主要效果是,在開始打加儂後把神獸發射的雷射關掉。

IsPlayed_Demo147_0(薩爾達出現、封印加儂)之後會導致城堡旁的黑色柱子閃著藍色光(本來是紅色)。

加儂區

LastBossIncompleteGanonGenerateFlag 這個 flag 的功能是記錄林克是不是在主殿內和災厄加儂戰鬥。

This flag results in a strange side effect. Every frame, if this flag is set, and if Link's Y coordinate is lower than 170.0, Link is warped back to (-254.0, 191.0, -1026.0).

The Bird-Man minigame escape exploit

The Bird-Man minigame can also be used to escape Ganon. That exploit is the reason why keeping the Bow of Light and still being able to play the game normally was possible on 1.2.0.

The way it works is that you start the minigame and then trigger the Calamity Ganon cutscene by landing in the castle sanctum. As soon as the cutscene finishes, the minigame ends and Link has now successfully escaped Ganon, with all of the aforementioned endgame flags still set.

In versions up to 1.1.2, this causes serious breakage as most of those end-game flags are written to save files (including FirstInHyruleCastleBossRoom).

Someone made a video about it and Nintendo apparently thought the glitch was serious enough to warrant a special patch.

Nintendo's fix

The simple and easy fix would have been to just not spawn the Calamity trigger while the minigame is active, but that's not how they decided to patch it.

Because they knew about the effects of the FirstInHyruleCastleBossRoom flag, they changed GameData configuration to not save that flag, so NPCs, shrines, enemies and towers wouldn't disappear even after doing the glitch.

They also edited the birdman minigame event (MiniGame_HillTower_BirdMan) to always manually reset some effects of landing in the castle sanctum:

  • An event was added to the landing event to warp the player back to the tower (-1746.71, 329.065, -772.847)… except the player is already being warped to the same exact coordinates in the original code. They might have wanted to be _extra sure_ the warp would work.
  • When landing, the IsPlayed_Demo141_{0,1,2,3} and LastBossIncompleteGanonGenerateFlag flags are manually cleared. Yes, they forgot to clear any other flag such as IsPlayed_Demo145_0 that may have been set.
  • While the minigame is active, the FirstInHyruleCastleBossRoom flag is cleared every frame.

It's as hacky as it sounds, and unsurprisingly it led to the 1.2.0 spawn glitch and required them to make yet another patch in 1.3.0.

References

  1. There are different kinds of actors (entities) in BotW. Profiles are pretty much categories that allow Nintendo to reuse the same base code internally for different but similar actors.