Author Topic: Mt. Nibel wrong warp  (Read 6862 times)

petfriendamy

  • *
  • Posts: 25
    • View Profile
Mt. Nibel wrong warp
« on: 2021-12-12 18:20:23 »
I did a lot of research into this wrong warp, so I might as well share some of my notes here!

If the notes below seem a bit dense, I also made a video about it, which you can find here:
https://www.youtube.com/watch?v=gHIQ5zFcAEE

Here is a spreadsheet of all the encounters on the world map, and what the corresponding fields are when you wrong warp:
https://docs.google.com/spreadsheets/d/1WDEoa8fpGJcrhYOwpKGqa-SWPZZpx9cpg4rHYt4QKJQ/edit



* The warp relies on the "no rewards" flag used during the Nibelheim flashback. This flag is hardcoded to send you directly to the field module instead of your previous module, resulting in erroneous behavior on the world map. (Shoutout to mav for this find!)

* Interestingly, the above glitch was SPECIFICALLY introduced in the PC port, because cheating in the battle flag on the world map does not result in a wrong warp on PSX. Whether this glitch still exists on PS4 and other console ports is unknown, but I would guess that it is since they were based on the PC version.

* That said, the reason we're able to do the warp in PC speedruns (and not HD consoles) is because of the PC port's quirk of not clearing memory after a game over. This, combined with skips like photo skip, allows us to game over during the Nibelheim flashback and bring the battle flag to the world map.

* However, the game over is NOT required for the actual wrong warp glitch. You simply need the "no rewards" flag on the world map, which can be done simply by exiting and entering Mt. Nibel with a GameMoment value less than 385 (which is impossible without glitches).

* Entering a field at any point will reset the battle flags back to default. For this reason, you MUST stay on the world map in order to do the warp!

* If you game overed in Mt. Nibel with the flag, the entire Mt. Nibel field stays in memory. Winning a battle on the world map will load that field in the EXACT STATE it was in when you entered the first battle, including battle flags. In order to keep these battle flags, you must IMMEDIATELY exit to the world map, without passing through any other fields.

* Exiting to the world map unloads the field from memory, forcing the field module to load a new field the next time it is called. (This is based on observation, since I couldn't find the actual code to prove this)

* The game stores the current ID of whatever's being loaded (including both battle and field IDs) at the memory address 0xCC0D8A (LoadingID). When you enter a battle, it first copies this value to 0xCC15D0 (FieldID), then updates (LoadingID) with the new battle ID. (FieldID) is what is referenced in the wrong warp glitch.

* In short, to wrong warp to places besides Mt. Nibel, you must:
  • Be on the world map with the "no rewards" battle flag
  • No fields must be in memory from a previous game over
  • Run away from a battle with an ID matching the field you want to warp to
  • Enter another battle, which sets 0xCC15D0 to the right value
  • Win that battle

NG+ STUFF:

* The warp also references player coordinates stored at 0xCC0D8C (TempCoords). If these are set to zero, the game places us at wherever the field's default location is (idk how this is decided). If they AREN'T zero, the game instead attempts to place us at (TempCoords), which usually softlocks or crashes the game.

* (TempCoords) are set upon entering a field, using the coordinates defined by the field jump. When entering the world map, (TempCoords) are set to 0.

* When you open the menu on a field, the game stores the player's current coordinates at 0xDC08D2 (PrevCoords). It also does this when you exit to the world map for some reason. Either way, these coordinates are copied to the savemap when you save.

* When you load a save, the game:
  • Copies the saved coordinates to (PrevCoords)
  • Copies those coordinates to (TempCoords)
  • Sends those to the player object (if on a field)
  • Zeroes out (PrevCoords)
* This is why you need to save twice to prevent crashing in NG+!

* Certain fields, like the debug lobby (startmap), have code that place the player somewhere specific on entry, negating any crash potential.