Escape Ganon glitch

From ZeldaMods (Breath of the Wild)
Revision as of 17:17, 11 May 2020 by Leoetlino (talk | contribs)
Jump to navigation Jump to search
Other languages:

The Escape Ganon glitch is a glitch that lets Link keep the Bow of Light, but leaves the game in a strange state with many weird side effects. To make things even more confusing, the exact effects differ depending on the game version.

This article documents the effects of the glitch and attempts to explain some of the side effects.

Effects

Save, warp, pass time, shrine entering restrictions

It is well known that it is impossible to save or warp when fighting Calamity or Dark Beast Ganon. However, this state normally doesn't persist across save reloads. So why is saving or warping prohibited even after loading a save?

This is because of the LastBossGanonBeastGenerateFlag flag, which is set right before Link is warped to Hyrule Field to face Dark Beast Ganon. It is used to spawn Dark Beast Ganon (as the name indicates); however a side effect is that any time a save with this flag set is loaded, the game automatically sets the SaveProhibition, WarpProhibition, KillTimeProhibition and EnterDungeonProhibition flags. These flags do exactly what you'd expect: block saving, warping, passing time and entering shrines.

It is possible to get rid of these restrictions by starting any event that ends up calling the Common<EnableSaveAndWarp> event (or sets these flags manually). This is because the exact same flags are used throughout the game to prevent warping/saving/etc. Typically, players use the gambling minigame in Lurelin Village to re-enable saves, autosaves, warps, campfires, shrine terminals.

Strange animation right after loading screens

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.

Blood moons

As explained in the article on BotW's Time system and WorldMgr, LastBossGanonBeastGenerateFlag prevents the blood moon cutscene from being triggered at midnight. However, the blood moon timer still advances and blood moons are still scheduled as usual, which is why malice particles still appear before abruptly disappearing.

Unfortunately, nothing ever unsets the LastBossGanonBeastGenerateFlag flag so it is not possible to get blood moons to occur naturally. The only way to get a blood moon to trigger is to advance time manually by sleeping or waiting at a campfire, as none of the blood moon inhibiting flags are checked when the player does so. Probably an oversight.

Missing NPCs, shrines, enemies, etc.

This is the most noticeable effect. After performing the glitch, shrines, most NPCs and enemies and towers either only spawn partly or not at all.

This is explained by a quirk in the Placement code. The exact spawn logic is as follows:

If:

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

and if a map object:

  • 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

then it is not spawned.

Moreover, if that object belongs to a placement group (i.e. if it is linked to other map objects in the map unit), that entire group is not spawned.

Explanation

This explains why NPCs, most enemies and shrines do not spawn after escaping the battle -- they're specifically excluded.

This is also why towers look strange -- they are always tied to FldObj_DownloadTerminal_A_01 (Sheikah download terminal) and DgnObj_WarpPoint_A_01 (warp pad) objects, so the majority of the map objects that make up a Sheikah Tower end up being not spawned either. This is a side effect of removing shrines.

Similarly, shrine interiors are invisible because the entire shrine model is a single object that is linked to the shrine's Sheikah monk, who is an NPC.

Additionally, this reveals why the Digdogg Suspension Bridge is invisible after activating the final boss sequence: the map objects are internally called FldObj_RockBridgeGerudoEntrance_A_01, and because of Nintendo's stupidly broad object name blacklist, the bridge objects end up being excluded from spawning.

Also, the only reason why Moldugas spawn at all is because a Zelda developer made a typo. The profile for Moldugas is supposed to be Sandworm, not SandWorm!

Nintendo's broken patch

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.

Runes (amiibo, Master Cycle Zero)

Just like other parts of the game, the amiibo and Master Cycle Zero runes use IsPlayed_Demo flags to decide whether rune usage should be restricted. So let's start with a list of relevant Demo cutscenes and their descriptions (translated + Nintendo's internal official description in Japanese):

  • 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 ハイラル平原・魔獣ガノン登場

For the amiibo rune, if Demo146_0, Demo141_{0,1,2,3} or Demo142_0 have been played, the player cannot use amiibo.

The Master Cycle Zero checks are slightly different (and it's very obvious they copy-pasted the amiibo code…):

  • If Demo146_0 has been played, the player is explicitly allowed to use the motorcycle.
  • If Demo141_{0,1,2,3} or Demo142_0 have been played, they cannot use the motorcycle.
  • Otherwise, Link can use the motorcycle if he is not on the main map. So he can spawn it in the Trial of the Sword after escaping the Ganon fight.

EX Quests

If Demo146_0 has been played, the EX Trial of the Sword and Champion's Ballad quests will not start. Nintendo explicitly checks the flag in both cases.

Bow of Light and Master Sword

LastBossGanonBeastGenerateFlag also controls the Bow of Light static spawn. Additionally, the Master Sword will always be in its powered up form ("true form") as long as this flag is set.

Divine Beast lasers and ancient pillars

IsPlayed_Demo145_0 being set enables "final boss mode" in effect code. The only significant effect is that the divine beast lasers are disabled.

IsPlayed_Demo147_0 (sealing Ganon cutscene) makes malice disappear and the ancient pillars around Hyrule Castle glow blue.

Instant teleport back to Calamity

Similarly to LastBossGanonBeastGenerateFlag, LastBossIncompleteGanonGenerateFlag is set right before entering the Calamity Ganon fight to make him spawn and unset as soon as he's defeated.

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.