summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlunarsoap5 <40438826+lunarsoap5@users.noreply.github.com>2020-06-09 11:12:45 -0500
committerGitHub <noreply@github.com>2020-06-09 11:12:45 -0500
commitfc17420e8e42d53dca2ee6667c8ecedc0db78002 (patch)
tree5b14f0d80f9c463fcdd350c81f4adb7e009998dc
parent36705be9553d7df974d88230e1537f284d0f463d (diff)
fixed some softlocks
-rw-r--r--include/HUDConsole.h3
-rw-r--r--include/customChecks.h106
-rw-r--r--include/defines.h9
-rw-r--r--include/game_patches.h42
-rw-r--r--include/item.h3
-rw-r--r--include/itemChecks.h4
-rw-r--r--include/items.h8
-rw-r--r--include/mod.h37
-rw-r--r--include/singleton.h3
-rw-r--r--include/tp.eu.lst9
-rw-r--r--include/tp.jp.lst9
-rw-r--r--include/tp.us.lst12
-rw-r--r--include/tp/d_a_alink.h7
-rw-r--r--include/tp/d_com_inf_game.h22
-rw-r--r--include/tp/d_map_path_dmap.h1
-rw-r--r--include/tp/d_stage.h29
-rw-r--r--include/tp/dzx.h47
-rw-r--r--source/chestRando.cpp330
-rw-r--r--source/game_patches.cpp545
-rw-r--r--source/itemChecks.cpp1117
-rw-r--r--source/keyPlacement.cpp4
-rw-r--r--source/mod.cpp364
-rw-r--r--source/singleton.cpp3
23 files changed, 1716 insertions, 998 deletions
diff --git a/include/HUDConsole.h b/include/HUDConsole.h
index 46fa93e..ff5e361 100644
--- a/include/HUDConsole.h
+++ b/include/HUDConsole.h
@@ -1,8 +1,9 @@
#pragma once
-#include "defines.h"
#include <tp/JFWSystem.h>
+#include "defines.h"
+
namespace mod
{
struct Option
diff --git a/include/customChecks.h b/include/customChecks.h
new file mode 100644
index 0000000..0f881cd
--- /dev/null
+++ b/include/customChecks.h
@@ -0,0 +1,106 @@
+#pragma once
+#include "defines.h"
+#include "tools.h"
+
+#include <tp/dzx.h>
+#include <tp/d_com_inf_game.h>
+
+struct customCheck
+{
+ char stage[8];
+ u8 room;
+
+ u8 chestType;
+
+ u8 saveFlag;
+ u8 itemID;
+
+ u32 X;
+ u32 Y;
+ u32 Z;
+
+ s32 Angle;
+
+ void(*overrides)();
+
+ bool(*requirement)();
+};
+
+namespace mod
+{
+ customCheck customChecks[37] = {
+ /*Ordon Shield*/
+ {"F_SP103", 0, 0, 0x74, 0x2A, 0x456C12A0, 0x43390000, 0x44405C5E, 0x5FA0, []() { gameInfo.localAreaNodes.unk_0[0x8] |= 0x1;/*remove ordon shield*/ }, []() { return (gameInfo.scratchPad.eventBits[0x5] & 0x7A) != 0;/*have sewers been done*/ } },
+ /*Ordon Sword*/
+ {"R_SP01", 4, 0, 0x70, 0x28, 0x439D0602, 0x0, 0xC26ABE99, 0xCC7D, []() { gameInfo.localAreaNodes.unk_0[0x8] |= 0x4;/*remove ordon sword*/ }, []() { return (gameInfo.scratchPad.eventBits[0x5] & 0x7A) != 0;/*have sewers been done*/ } },
+ /*Fishing rod*/
+ {"F_SP103", 0, 1, 0x68, 0x4A, 0xC3FEB5F1, 0x42960000, 0x4514FB40, 0x883A, []() { gameInfo.scratchPad.eventBits[0x3] |= 0x5;/*brought Cradle to Uli and got fishing rod*/ gameInfo.scratchPad.eventBits[0x46] |= 0x1;/*took cradle from monkey*/ }, []() { return (gameInfo.localAreaNodes.unk_0[0xC] & 0x2) != 0;/*is goats 1 done*/ } },
+ /*Sera Bottle*/
+ {"F_SP103", 0, 1, 0x7C, 0x65, 0x444C8DC3, 0x42AF0000, 0xC4CB2577, 0xA3E7, []() { gameInfo.scratchPad.eventBits[0x12] |= 0x8;/*can shop at Sera's shop*/ gameInfo.scratchPad.eventBits[0x14] |= 0x8;/*Sera Bottle gotten*/ }, []() { return (gameInfo.localAreaNodes.unk_0[0xC] & 0x2) != 0;/*is goats 1 done*/ } },
+ /*Slingshot*/
+ {"F_SP103", 0, 0, 0x78, 0x4B, 0xC3EDF8A9, 0x44CD922E, 0x45F31BF5, 0x7881, nullptr /*Flag is set in game_patches to avoid interaction with vanilla check*/, []() { return gameInfo.scratchPad.counters.rupees >= 30 && (gameInfo.localAreaNodes.unk_0[0xC] & 0x2) != 0;/*is goats 1 done*/ } },
+ /*Lantern*/
+ {"F_SP108", 0xFF, 1, 0xF8, 0x48, 0xC66D4C1B, 0x41C19A25, 0xC65D2696, 0x36EC, nullptr, []() { return true; } },
+ /*Zora Armor*/
+ {"F_SP111", 0, 1, 0x7C, 0x31, 0x46A85A96, 0x43FA0000, 0x43944190, 0xC270, []() { gameInfo.scratchPad.eventBits[0x8] |= 0x4;/*got zora armor from Rutela*/ }, []() { return true; } },
+ /*Coral Earring*/
+ {"F_SP111", 0, 1, 0x78, 0x3D, 0x46A81087, 0x43FA57D9, 0xC3BCEFAC, 0xC270, []() { gameInfo.scratchPad.eventBits[0x3B] |= 0x80;/*Got Coral Earring from Ralis*/ }, []() { return tools::checkItemFlag(ItemFlags::Asheis_Sketch); } },
+ /*Auru's Memo*/
+ {"F_SP115", 0, 1, 0x7C, 0x90, 0xC7E2E398, 0xC6770800, 0x47656746, 0x143D, []() { gameInfo.scratchPad.eventBits[0x25] |= 0x30;/*Auru Cutscene Complete + Auru's Memo gotten*/ }, []() { return gameInfo.scratchPad.allAreaNodes.Lakebed_Temple.dungeon.bossBeaten == 0b1; } },
+ /*Ashei's Sketch*/
+ {"F_SP114", 0, 1, 0x7C, 0x91, 0x46F71891, 0xC6502A32, 0xC6348FA6, 0x86E6, []() { gameInfo.scratchPad.eventBits[0x29] |= 0x40;/*Got Ashei's Sketch from Ashei*/ }, []() { return true; } },
+ /*Renardo's Letter*/
+ {"R_SP109", 0, 1, 0x68, 0x80, 0x43D3A702, 0x0, 0x43D5A60B, 0xC1FD, []() { gameInfo.scratchPad.eventBits[0xF] |= 0x80;/*Got Renardo's Letter from Renardo*/ }, []() { return gameInfo.scratchPad.allAreaNodes.Temple_of_Time.dungeon.bossBeaten == 0b1; } },
+ /*Invoice*/
+ {"R_SP116", 5, 1, 0x70, 0x81, 0x45282E22, 0xC48FC000, 0x453BED7D, 0x0000, []() { gameInfo.scratchPad.eventBits[0x21] |= 0x80;/*Got Invoice from Telma*/ }, []() { return tools::checkItemFlag(ItemFlags::Renardos_Letter); } },
+ /*Wooden Statue*/
+ {"F_SP122", 16, 1, 0x68, 0x82, 0xC7493734, 0xC5C3E9D7, 0x46F956C6, 0x7FE1, []() { gameInfo.scratchPad.eventBits[0x22] |= 0x80;/*Got Wooden Statue from wolves*/ }, []() { return tools::checkItemFlag(ItemFlags::Medicine_Scent); } },
+ /*Ilia's Charm*/
+ {"F_SP128", 0, 1, 0x64, 0x83, 0x44F7650C, 0x42D20705, 0xC4A1A68B, 0x4226, nullptr /*Flag is set in game_patches to avoid interaction with vanilla check*/, []() { return (gameInfo.localAreaNodes.unk_0[0x9] & 0x2) != 0; /*All Bublins dead in HV*/ } },
+ /*Horse Call*/
+ {"R_SP109", 0, 1, 0x74, 0x84, 0x43CDBCA1, 0x0, 0xC31EEBF3, 0xBDBE, []() { gameInfo.scratchPad.eventBits[0x23] |= 0x20;/*Got horse call from Illia*/ }, []() { return tools::checkItemFlag(ItemFlags::Ilias_Charm); } },
+ /*Fishing Hole Bottle*/
+ {"F_SP127", 0, 1, 0x7C, 0x60, 0x45B27147, 0x420C0000, 0x450F716A, 0x62E5, []() { gameInfo.scratchPad.eventBits[0x39] |= 0x8;/*Got fishing hole bottle*/ }, []() { return true; } },
+ /*Coro Key*/
+ {"F_SP108", 0xFF, 0, 0xF4, 0xFE, 0xC64BA600, 0x403DA884, 0xC663BC8E, 0x7A11, [](){ gameInfo.scratchPad.eventBits[0x1A] |= 0x10;/*Talked to Coro after Faron Twilight*/ gameInfo.localAreaNodes.unk_0[0xD] |= 0x4;/*got Coro key*/ }, [](){ return gameInfo.scratchPad.clearedTwilights.Faron == 0b1; } },
+ /*Gate Keys*/
+ {"F_SP121", 0xFF, 1, 0x7C, 0xF3, 0xC781DFDB, 0xC607B38E, 0x47897B50, 0xC0C9, nullptr, []() { return (gameInfo.scratchPad.eventBits[0x8] & 0x40) != 0;/*was escort started*/ } },
+ /*Camp Key*/
+ {"F_SP118", 1, 0, 0x7C, 0x20, 0x457F816B, 0x43820000, 0xC572F680, 0x0000, nullptr, []() { return true; } },
+ /*Jovani Poe*/
+ {"R_SP160", 5, 0, 0x7C, 0xE0, 0x45906531, 0xC2960000, 0x45229AEB, 0xC3C9, []() { gameInfo.localAreaNodes.unk_0[0x8] |= 0x80;/*killed poe*/ gameInfo.localAreaNodes.unk_0[0xF] |= 0x7;/*cs + open path to sewers*/ }, []() { return true; } },
+ /*Shadow Crystal*/
+ {"F_SP117", 1, 0, 0x7C, 0x32, 0xC36EB7DC, 0x44CB2000, 0xC5964574, 0x0000, []() { gameInfo.scratchPad.eventBits[0x10] |= 0x20;/*got master sword cs*/ }, []() { return true; } },
+ /*Master Sword*/
+ {"F_SP117", 1, 2, 0x78, 0x29, 0x4372ACFB, 0x44CB2000, 0xC5991A55, 0x0000, []() { gameInfo.scratchPad.eventBits[0x10] |= 0x20;/*got master sword cs*/ }, []() { return true; } },
+ /*Powered Dominion Rod*/
+ {"R_SP209", 7, 1, 0x70, 0x4C, 0xC3DB30E9, 0xC4408000, 0xC523C471, 0x3CF0, nullptr, []() { return tools::checkItemFlag(ItemFlags::Ancient_Sky_Book_empty); } },
+ /*Light Master Sword*/
+ {"F_SP125", 4, 1, 0x7C, 0x49, 0x44E0DBF7, 0x45898B09, 0xC6A4AAFA, 0x7DBC, nullptr, []() { return ((((gameInfo.scratchPad.eventBits[0x43] & 0x2) != 0) && ((gameInfo.scratchPad.eventBits[0x45] & 0x80) != 0)) || ((gameInfo.scratchPad.eventBits[0x44] & 0x28) != 0));/*both sols placed*/ } },
+ /*Ending Blow*/
+ {"F_SP108", 6, 2, 0xF0, 0xE1, 0xC71A5B41, 0x44898000, 0xC6E08544, 0x0000, nullptr, []() { return gameInfo.scratchPad.clearedTwilights.Faron == 0b1; } },
+ /*Shield Bash*/
+ {"F_SP104", 1, 2, 0x6C, 0xE2, 0xC4BB1F1C, 0x438C0000, 0xC613CAAA, 0x4138, []() { gameInfo.scratchPad.eventBits[0x3C] |= 0x8;/*Got skill from Ordon Wolf*/ }, []() { return (gameInfo.scratchPad.eventBits[0x3A] & 0x80) != 0;/*DMT howling stone done*/ } },
+ /*Back Slice*/
+ {"F_SP122", 8, 2, 0x78, 0xE3, 0xC78590C8, 0xC4834000, 0x45B7BC37, 0xC15B, []() { gameInfo.scratchPad.eventBits[0x3C] |= 0x4;/*Got skill from West CT Wolf*/ }, []() { return (gameInfo.scratchPad.eventBits[0x3A] & 0x40) != 0;/*UZR howling stone done*/ } },
+ /*Helm Splitter*/
+ {"F_SP122", 16, 2, 0x74, 0xE4, 0xC75990D6, 0xC5BEA000, 0x46C3B269, 0x0000, []() { gameInfo.scratchPad.eventBits[0x3C] |= 0x2;/*Got skill from South CT Wolf*/ }, []() { return (gameInfo.scratchPad.eventBits[0x3A] & 0x20) != 0;/*Faron howling stone done*/ } },
+ /*Mortal Draw*/
+ {"F_SP124", 0, 2, 0x78, 0xE5, 0xC53E0B78, 0x41C428F6, 0x46318C93, 0x4565, []() { gameInfo.scratchPad.eventBits[0x3C] |= 0x1;/*Got skill from Bublin Camp Wolf*/ }, []() { return (gameInfo.scratchPad.eventBits[0x3A] & 0x10) != 0;/*Lake Hylia howling stone done*/ } },
+ /*Jump Strike*/
+ {"F_SP111", 0, 2, 0x6C, 0xE6, 0x467D1395, 0x44034000, 0xC1F855A7, 0x3EE7, []() { gameInfo.scratchPad.eventBits[0x3D] |= 0x80;/*Got skill from Graveyard Wolf*/ }, []() { return (gameInfo.scratchPad.eventBits[0x3A] & 0x8) != 0;/*Snowpeak howling stone done*/ } },
+ /*Great Spin*/
+ {"F_SP116", 1, 2, 0x78, 0xE7, 0x42204113, 0x44480000, 0xC61FB41E, 0x0000, []() { gameInfo.scratchPad.eventBits[0x3D] |= 0x40;/*Got skill from Barrier Wolf*/ }, []() { return (gameInfo.scratchPad.eventBits[0x3A] & 0x4) != 0;/*Hidden Village howling stone done*/ } },
+ /*Youth's Scent*/
+ {"F_SP121", 0xFF, 0, 0x70, 0xB4, 0xC681A76B, 0xC5C99000, 0x4783ED29, 0xA6A9, []() { gameInfo.scratchPad.eventBits[0x22] |= 0x40;/*Got Youth's scent*/ gameInfo.localAreaNodes.unk_0[0x16] |= 0x4;/*Midna text after getting Youth's scent*/ gameInfo.localAreaNodes.unk_0[0x17] |= 0x40;/*got youth's scent cs*/ }, []() { return true; } },
+ /*Ilia's Scent*/
+ {"F_SP121", 0xFF, 0, 0x6C, 0xB0, 0xC5DD1EF2, 0x4529ED9A, 0xC73F5AD1, 0x71A6, nullptr, []() { return true; } },
+ /*Poe Scent*/
+ {"D_MN10", 0xFF, 0, 0x3C, 0xB2, 0xC1571A39, 0xC1200000, 0x4355109A, 0x0000, nullptr, []() { return true; } },
+ /*Reekfish Scent*/
+ {"F_SP113", 1, 0, 0x64, 0xB3, 0x456A7496, 0xC5BB109B, 0x464D4470, 0xD6E8, nullptr, []() { return tools::checkItemFlag(ItemFlags::Coral_Earring); } },
+ /*Medicine Scent*/
+ {"R_SP160", 2, 0, 0x74, 0xB5, 0x45EC0BF6, 0xC33E0000, 0xC4D9EA4C, 0xC26D, nullptr, []() { return true; } },
+ /*Snowpeak Map*/
+ {"D_MN11", 0xFF, 0, 0x74, 0x23, 0x447AF8E0, 0x00000000, 0xC42C93A9, 0xFEED, nullptr, []() { return true; } } };
+}; \ No newline at end of file
diff --git a/include/defines.h b/include/defines.h
index ea4231a..c2c72d9 100644
--- a/include/defines.h
+++ b/include/defines.h
@@ -26,13 +26,20 @@ typedef signed char s8;
(byte & 0b00000010 ? '1' : '0'), \
(byte & 0b00000001 ? '1' : '0')
+// Allows to transform data as bytes 1:1 from A<-->B and vice versa
+template <typename A, typename B>
+union typeTransform {
+ A a;
+ B b;
+};
+
// Array modification
#define MAX_LOAD_EVENTS 20 // eventListener
#define MAX_HUDCONSOLE_PAGES 12 // HUDConsole
// Mnemonics
#define AUTHOR "ZTPR"
-#define VERSION "v0.15b"
+#define VERSION "v0.15.2a"
#define RAND_SEED mod::tools::randomSeed
#define gameInfo tp::d_com_inf_game::dComIfG_gameInfo
#define getPlayerPos tp::d_map_path_dmap::getMapPlayerPos
diff --git a/include/game_patches.h b/include/game_patches.h
index edec8da..d3f10ae 100644
--- a/include/game_patches.h
+++ b/include/game_patches.h
@@ -59,18 +59,6 @@ namespace mod::game_patch
* and sets the flags accordingly
*/
void skipSewers();
-
- /**
- * Skips Midna's Desperate Hour
- * triggers the load to zelda's tower
- */
- void skipMDH();
-
- /**
- * Removes midna from preventing you from leaving faron
- * changes the state of faron from 0 to 2
- */
- void allowFaronEscape();
/**
* Adds the chests that disappear after KB3
@@ -127,7 +115,7 @@ namespace mod::game_patch
* Removes the locks from the 2 bulblin gates in HF
* change doesn't get saved so set it evry time you load into HF
*/
- void unlockHFGates();
+ void setFieldBits();
/**
* when spawning in goats 2, will warp you to Illia taking Epona CS
@@ -137,7 +125,7 @@ namespace mod::game_patch
/**
* opens the door the the master sword in sacred grove
*/
- void skipGrovePuzzle();
+ void setGroveFlags();
/**
* when you spawn into the Cart Escort, game will spawn you in Kakariko Afterwards
@@ -150,16 +138,6 @@ namespace mod::game_patch
void setLanayruWolf();
/**
- * sets the flag for KB1 to be complete
- */
- void skipKB1();
-
- /**
- * sets Faron state after warping from lanayru
- */
- void fixLanayruFaron();
-
- /**
* Fixes the cannon and puts it at lake hylia
*/
void earlyCiTS();
@@ -185,7 +163,17 @@ namespace mod::game_patch
void accessDesert();
/**
- * check whether you have MS before being allowed to enter the desert
- */
- void sellWaterBombs();
+ * skips midna text and story CS
+ */
+ void skipTextAndCS();
+
+ /**
+ * escort avalable at any time
+ */
+ void setEscortState();
+
+ /**
+ * skips the zant CS for MDH
+ */
+ void skipMDH();
} \ No newline at end of file
diff --git a/include/item.h b/include/item.h
index afbede2..02de5da 100644
--- a/include/item.h
+++ b/include/item.h
@@ -56,7 +56,8 @@ namespace mod::item
Bottle = 9,
Bug = 10,
PoeSoul = 11,
- Shop = 12
+ Shop = 12,
+ Skill = 13
};
/**
diff --git a/include/itemChecks.h b/include/itemChecks.h
index 37ad8f3..dff2ea6 100644
--- a/include/itemChecks.h
+++ b/include/itemChecks.h
@@ -5,6 +5,6 @@
namespace mod::item
{
- extern ItemCheck checks[492];
- extern u16 checkPriorityOrder[20];
+ extern ItemCheck checks[503];
+ extern u16 checkPriorityOrder[24];
} \ No newline at end of file
diff --git a/include/items.h b/include/items.h
index 15a08d6..85f9608 100644
--- a/include/items.h
+++ b/include/items.h
@@ -31,11 +31,11 @@ namespace mod::items
Water_Bombs_5 = 0x16,
Water_Bombs_10 = 0x17,
Water_Bombs_15 = 0x18,
- /*unused*/Water_Bombs_3 = 0x19,
+ Water_Bombs_3 = 0x19,
Bomblings_5 = 0x1A,
Bomblings_10 = 0x1B,
- /*unused*/Bomblings_3 = 0x1C,
- /*unused*/Bombling_1 = 0x1D,
+ Bomblings_3 = 0x1C,
+ Bombling_1 = 0x1D,
Fairy = 0x1E,
Recovery_Heart_x3 = 0x1F,
Small_Key = 0x20,
@@ -120,7 +120,7 @@ namespace mod::items
Lantern_Refill_Shop = 0x6F,
Bomb_Bag_Regular_Bombs = 0x70,
Bomb_Bag_Water_Bombs = 0x71,
- Bomb_Bag_Bombslings = 0x72,
+ Bomb_Bag_Bomblings = 0x72,
Fairy_Tears = 0x73,
Worm = 0x74,
Jovani_Bottle = 0x75,
diff --git a/include/mod.h b/include/mod.h
index 0f4d7e8..245350b 100644
--- a/include/mod.h
+++ b/include/mod.h
@@ -3,6 +3,7 @@
#include "defines.h"
#include <tp/d_com_inf_game.h>
#include <tp/DynamicLink.h>
+#include <tp/dzx.h>
#include "eventListener.h"
#include "chestRando.h"
#include "HUDConsole.h"
@@ -68,6 +69,10 @@ namespace mod
char currentPosY[30];
char currentPosZ[30];
+ char linkAngle[30];
+
+ u8 coordsAreInHex = 0;
+
// Replacment handler
s32 procItemCreateFunc(const float pos[3], s32 item, const char funcIdentifier[32]);
@@ -76,7 +81,7 @@ namespace mod
u32 skyAngle;
- u8 enableQuickTransform = 0;
+ u8 enableQuickTransform = 1;
u8 stage = 0;
u8 room = 0;
@@ -105,17 +110,6 @@ namespace mod
u8 greenBottom = 0;
u8 blueBottom = 0;
- u16 scoopResult;
- u16 checkResult;
- u16 itemsResult;
- u16 mapResult;
- u16 equipResult;
- u16 backResult;
- u16 zoomInResult;
- u16 zoomOutResult;
- u16 moveResult;
- u16 throwResult;
-
u8 bottle4Contents;
u8 bottleTrickOn = 0;
u8 allowBottleItemsShopAnytime = 1;
@@ -175,6 +169,16 @@ namespace mod
void fixYetaAndYeto();
/**
+ * fix problem where opening LBT boss door removes a key
+ */
+ void fixLBTBossDoor();
+
+ /**
+ * removes the empty skybook if you are in the sanctuary basement
+ */
+ void preventPoweringUpDomRod();
+
+ /**
* gives the unlocked scent that can be seen in the current area (defaults to most advanced one obtained)
*/
void giveAllScents();
@@ -191,9 +195,10 @@ namespace mod
bool isStageShop();
/**
- * fix problem where opening LBT boss door removes a key
+ * Inserts custom TRES Boxes if applicable to this stage+room
*/
- void fixLBTBossDoor();
+ void doCustomTRESActor(void* mStatus_roomControl);
+
// Private members
//private:
@@ -213,6 +218,8 @@ namespace mod
void (*item_func_UTUWA_HEART_trampoline)() = nullptr;
+ void(*actorCommonLayerInit_trampoline)(void* mStatus_roomControl, tp::d_stage::dzxChunkTypeInfo* chunkTypeInfo, int unk3, void* unk4) = nullptr;
+
// Item functions
s32 (*createItemForPresentDemo_trampoline)(const float pos[3], s32 item, u8 unk3, s32 unk4, s32 unk5, const float unk6[3], const float unk7[3]) = nullptr;
s32 (*createItemForTrBoxDemo_trampoline)(const float pos[3], s32 item, s32 unk3, s32 unk4, const float unk5[3], const float unk6[3]) = nullptr;
@@ -221,5 +228,7 @@ namespace mod
s32 (*createItemForDirectGet_trampoline)(const float pos[3], s32 item, s32 unk3, const float unk4[3], const float unk5[3], float unk6, float unk7) = nullptr;
s32(*createItemForSimpleDemo_trampoline)(const float pos[3], s32 item, s32 unk3, const float unk4[3], const float unk5[3], float unk6, float unk7) = nullptr;
s32(*createItem_trampoline)(const float pos[3], s32 item, s32 unk3, s32 unk4, const float unk5[3], const float unk6[3], s32 unk7) = nullptr;
+
+ void(*setItemBombNumCount_trampoline)(u32 unk1, u8 bagNb, short amount) = nullptr;
};
} \ No newline at end of file
diff --git a/include/singleton.h b/include/singleton.h
index def0afc..8b41568 100644
--- a/include/singleton.h
+++ b/include/singleton.h
@@ -25,8 +25,9 @@ namespace mod
u8 isEarlyDesertEnabled;
u8 isBossKeyseyEnabled;
u8 isSewerSkipEnabled;
- u8 isKB1Skipped;
u8 shuffledSkybook;
+ u8 isIntroSkipped;
+ u8 isTwilightSkipped;
private:
diff --git a/include/tp.eu.lst b/include/tp.eu.lst
index 6e3b41e..7a10dc1 100644
--- a/include/tp.eu.lst
+++ b/include/tp.eu.lst
@@ -1,5 +1,6 @@
// memory
80003458:memset
+80003540:memcpy
// m_Do_ext.o
// text
@@ -12,6 +13,11 @@
800351EC:getSave
80035220:putSave
+/ d_stage.o
+80025914:actorCommonLayerInit
+// data
+803F8034:mStatus_roomControl
+
// d_event.o
800428A8:defaultSkipStb
80042B04:skipper
@@ -35,6 +41,7 @@
// d_map_path_dmap.o
8003EF8C:getMapPlayerPos
+8003F050:getMapPlayerAngleY
// d_item.o
80097FBC:execItemGet
@@ -47,6 +54,7 @@
800BB6C4:checkHeavyStateOn
800C7A00:procCoMetamorphoseInit
8011A908:checkTreasureRupeeReturn
+803DEDF4:linkStatus
// data
8039038C:ladderVars
@@ -145,6 +153,7 @@
// d_com_inf_game.o
// data
80408160:dComIfG_gameInfo
+8002B414:setItemBombNumCount
// d_kankyo.o
// data
diff --git a/include/tp.jp.lst b/include/tp.jp.lst
index ccbc581..03875f5 100644
--- a/include/tp.jp.lst
+++ b/include/tp.jp.lst
@@ -1,5 +1,6 @@
// memory
80003458:memset
+80003540:memcpy
// m_Do_ext.o
// text
@@ -12,6 +13,11 @@
800350BC:getSave
800350F0:putSave
+// d_stage.o
+8002586C:actorCommonLayerInit
+// data
+803F01D4:mStatus_roomControl
+
// d_event.o
80042778:defaultSkipStb
800429D4:skipper
@@ -35,6 +41,7 @@
// d_map_path_dmap.o
8003EE5C:getMapPlayerPos
+8003EF20:getMapPlayerAngleY
// d_item.o
80097ECC:execItemGet
@@ -47,6 +54,7 @@
800BB4F0:checkHeavyStateOn
800C782C:procCoMetamorphoseInit
8011A734:checkTreasureRupeeReturn
+803D6F94:linkStatus
// data
80388C0C:ladderVars
@@ -145,6 +153,7 @@
// d_com_inf_game.o
// data
80400300:dComIfG_gameInfo
+8002B36C:setItemBombNumCount
// d_kankyo.o
// data
diff --git a/include/tp.us.lst b/include/tp.us.lst
index ea55d72..2827ba9 100644
--- a/include/tp.us.lst
+++ b/include/tp.us.lst
@@ -1,5 +1,6 @@
// memory
80003458:memset
+80003540:memcpy
// m_Do_ext.o
// text
@@ -12,6 +13,11 @@
800350BC:getSave
800350F0:putSave
+// d_stage.o
+8002586C:actorCommonLayerInit
+// data
+803F6094:mStatus_roomControl
+
// d_event.o
80042778:defaultSkipStb
800429D4:skipper
@@ -35,6 +41,7 @@
// d_map_path_dmap.o
8003EE5C:getMapPlayerPos
+8003EF20:getMapPlayerAngleY
// d_item.o
80097E8C:execItemGet
@@ -47,6 +54,7 @@
800BB4B8:checkHeavyStateOn
800C77F4:procCoMetamorphoseInit
8011A6FC:checkTreasureRupeeReturn
+803DCE54:linkStatus
// data
8038EB8C:ladderVars
@@ -145,6 +153,7 @@
// d_com_inf_game.o
// data
804061C0:dComIfG_gameInfo
+8002B36C:setItemBombNumCount
// d_kankyo.o
// data
@@ -165,3 +174,6 @@
//canwarp
804069B6:can_warp
+
+//resource.o
+802a9490:parseCharacter_1Byte \ No newline at end of file
diff --git a/include/tp/d_a_alink.h b/include/tp/d_a_alink.h
index 7abc9c8..7f687ad 100644
--- a/include/tp/d_a_alink.h
+++ b/include/tp/d_a_alink.h
@@ -28,6 +28,12 @@ namespace tp::d_a_alink
static_assert(sizeof(LadderVars) == 0x70);
+ struct LinkStatus
+ {
+ u8 unk_0[0xA2];
+ u8 status;
+ } __attribute__((__packed__));
+
extern "C"
{
bool checkStageName(const char* name); // Checks if dComIfG_gameInfo.currentStage is equal to name
@@ -38,5 +44,6 @@ namespace tp::d_a_alink
// Variables
extern LadderVars ladderVars;
+ extern LinkStatus* linkStatus;
}
} \ No newline at end of file
diff --git a/include/tp/d_com_inf_game.h b/include/tp/d_com_inf_game.h
index 5e0ac4f..59e3ec2 100644
--- a/include/tp/d_com_inf_game.h
+++ b/include/tp/d_com_inf_game.h
@@ -136,7 +136,7 @@ namespace tp::d_com_inf_game
Bomb_Bag_Regular_Bombs = 112,
Bomb_Bag_Water_Bombs = 113,
- Bomb_Bag_Bombslings = 114,
+ Bomb_Bag_Bomblings = 114,
Fairy_Tears = 115,
Worm = 116,
Jovani_Bottle = 117,
@@ -261,13 +261,13 @@ namespace tp::d_com_inf_game
Null_DF = 223,//now used for sky letter 1
Poe_Soul = 224,
- Null_E1 = 225,
- Null_E2 = 226,
- Null_E3 = 227,
- Null_E4 = 228,
- Null_E5 = 229,
- Null_E6 = 230,
- Null_E7 = 231,
+ Null_E1 = 225,//now used for ending blow
+ Null_E2 = 226,//now used for shield bash
+ Null_E3 = 227,//now used for back slice
+ Null_E4 = 228,//now used for helm splitter
+ Null_E5 = 229,//now used for mortal draw
+ Null_E6 = 230,//now used for jump strike
+ Null_E7 = 231,//now used for great spin
Null_E8 = 232,
Ancient_Sky_Book_empty = 233,
@@ -836,7 +836,9 @@ namespace tp::d_com_inf_game
u16 immediateControl; // 4edb - 4edc
u8 unk_00[0x4]; // 4edd - 4EE0
u8 nextEventID; // 4EE1
- u8 unk1A[0xD1];
+ u8 unk1A[0xCB];
+ u8 eventFlag;
+ u8 unkE7[0x5];
u8 currentEventID;
u8 unk_ec[0x14];
tp::evt_control::csFunc* onSkip; // if != 0 the function stored here will run, otherwise unskippable
@@ -942,9 +944,11 @@ namespace tp::d_com_inf_game
{
extern GameInfo dComIfG_gameInfo;
extern u8 current_state;
+ extern void setItemBombNumCount(u32 unk1, u8 bagNb, short amout);//amount will be the og (ex: if you can only have 5 more bombs and buy 10, it'll still ahow 10)
extern u8 next_state;
//extern char wallet_text[13];
//extern char wallet_description[96];
extern u8 can_warp;
+
}
} \ No newline at end of file
diff --git a/include/tp/d_map_path_dmap.h b/include/tp/d_map_path_dmap.h
index 9729b29..779a94f 100644
--- a/include/tp/d_map_path_dmap.h
+++ b/include/tp/d_map_path_dmap.h
@@ -7,5 +7,6 @@ namespace tp::d_map_path_dmap
extern "C"
{
void getMapPlayerPos(float posOut[3]);
+ u32 getMapPlayerAngleY();
}
} \ No newline at end of file
diff --git a/include/tp/d_stage.h b/include/tp/d_stage.h
new file mode 100644
index 0000000..a7a6c39
--- /dev/null
+++ b/include/tp/d_stage.h
@@ -0,0 +1,29 @@
+/** @file d_stage.h
+ * @brief Stage related functions and fields
+ *
+ * @author AECX
+ * @bug No known bugs.
+ */
+
+#pragma once
+
+#include "../defines.h"
+#include "dzx.h"
+
+namespace tp::d_stage
+{
+ extern "C"
+ {
+ void* mStatus_roomControl;
+
+ /**
+ * @brief Initialises Actors, can run multiple times per load
+ *
+ * @param mStatus_roomControl Pointer to roomControl data (unknown)
+ * @param chunkTypeInfo Pointer to dzxHeader
+ * @param unk3 unknown
+ * @param unk4 unknown
+ */
+ void actorCommonLayerInit(void* mStatus_roomControl, dzxChunkTypeInfo* chunkTypeInfo, int unk3, void* unk4);
+ }
+} // namespace tp::d_stage \ No newline at end of file
diff --git a/include/tp/dzx.h b/include/tp/dzx.h
new file mode 100644
index 0000000..6bf3fc2
--- /dev/null
+++ b/include/tp/dzx.h
@@ -0,0 +1,47 @@
+/** @file dzx.h
+ * @brief dzx related definitions
+ *
+ * @author AECX
+ * @bug No known bugs.
+ */
+#pragma once
+#include <string.h>
+
+#include "../defines.h"
+
+namespace tp::d_stage
+{
+ /**
+ * @brief Holds information about the given dzx Chunktype
+ *
+ * Example:
+ * TRES
+ * 0001
+ * 80401234 = 1 TRES Chunk at this address
+ */
+ struct dzxChunkTypeInfo
+ {
+ char tag[4];
+ u32 numChunks;
+ void* chunkDataPtr;
+ } __attribute__((__packed__));
+
+ struct TRES
+ {
+ char actorName[8];
+ u32 flags;
+
+ float X;
+ float Y;
+ float Z;
+
+ s32 angle;
+
+ u8 item;
+ u8 unk2[3]; // Seems to always be 0xFF
+
+ TRES() { memset(this, 0xFF, sizeof(TRES)); }
+ } __attribute__((__packed__));
+ static_assert(sizeof(TRES) == 0x20);
+
+} // namespace tp \ No newline at end of file
diff --git a/source/chestRando.cpp b/source/chestRando.cpp
index 1de5139..f063dbe 100644
--- a/source/chestRando.cpp
+++ b/source/chestRando.cpp
@@ -90,6 +90,30 @@ namespace mod
}
}
+ // Place items that unlock other locations before caring about remaining items
+ //useless
+ /*for(u16 i = 0; i < totalChecks; i++)
+ {
+ destCheck = &item::checks[i];
+ if(!destCheck->source)
+ {
+ // Free slot
+ if(item::getFlags(destCheck->itemID, 0) != 0)
+ {
+ // This would unlock new checks, so place it
+ if (destCheck->itemID == items::Item::Ordon_Shield || destCheck->itemID == items::Item::Wooden_Shield || destCheck->itemID == items::Item::Hylian_Shield)
+ {
+ sourceCheck = findSource(0xFF, 0x2, destCheck);//to prevent softlocking the game when you try to get ordon shield check
+ }
+ else
+ {
+ sourceCheck = findSource(0xFF, 0, destCheck);
+ }
+ placeCheck(sourceCheck, destCheck);
+ }
+ }
+ }*/
+
//do dungeon items
for (u16 i = 0; i <= totalChecks; i++)
{
@@ -162,29 +186,7 @@ namespace mod
}
}
- // Place items that unlock other locations before caring about remaining items
- //useless
- /*for(u16 i = 0; i < totalChecks; i++)
- {
- destCheck = &item::checks[i];
- if(!destCheck->source)
- {
- // Free slot
- if(item::getFlags(destCheck->itemID, 0) != 0)
- {
- // This would unlock new checks, so place it
- if (destCheck->itemID == items::Item::Ordon_Shield || destCheck->itemID == items::Item::Wooden_Shield || destCheck->itemID == items::Item::Hylian_Shield)
- {
- sourceCheck = findSource(0xFF, 0x2, destCheck);//to prevent softlocking the game when you try to get ordon shield check
- }
- else
- {
- sourceCheck = findSource(0xFF, 0, destCheck);
- }
- placeCheck(sourceCheck, destCheck);
- }
- }
- }*/
+
// Place remaining
for (u16 i = 0; i < totalChecks; i++)
@@ -310,7 +312,6 @@ namespace mod
case item::ItemType::Story:
if (check->itemID != items::Item::Aurus_Memo && check->itemID != items::Item::Asheis_Sketch)
{
- // Ilia quest
result = true;
}
break;
@@ -335,6 +336,10 @@ namespace mod
result = true;
}
break;
+
+ case item::ItemType::Skill:
+ result = true;
+ break;
}
switch (check->itemID)
@@ -342,19 +347,17 @@ namespace mod
/*case items::Item::Iron_Boots:
result = true;
break;*/
-
- case items::Item::Fishing_Rod:
- result = true;
+ case items::Item::Shadow_Crystal:
+ if (Singleton::getInstance()->isMDHSkipEnabled == 0)
+ {
+ result = true;
+ }
break;
- case items::Item::Master_Sword:
+ case items::Item::Fishing_Rod:
result = true;
break;
- case items::Item::Empty_Bottle:
- result = true;//fishing hole bottle
- break;
-
case items::Item::Ancient_Sky_Book_empty:
if (isProgressiveEnabled == 0)
{
@@ -429,112 +432,109 @@ namespace mod
{//set flag for having talked to Bo
gameInfo.scratchPad.eventBits[0x1C] |= 0x20;
}
- else if (item == items::Item::Poe_Soul)
+ else if (item == items::Item::Poe_Soul && gameInfo.scratchPad.poeCount >= 1)
{//decrease poe counter
gameInfo.scratchPad.poeCount--;
}
else if (item == items::Item::Vessel_Of_Light_Faron)
- {//set tear counter to 16
- if (isTwilightSkipEnabled == 1)
- {
- gameInfo.scratchPad.tearCounters.Faron = 16;
- gameInfo.localAreaNodes.unk_0[0xB] |= 0x4;//give N faron warp
- gameInfo.localAreaNodes.unk_0[0x8] = 0xFF;//give midna jumps in mist area
- gameInfo.localAreaNodes.unk_0[0xC] |= 0x80;//set flag for midna to think you followed the monkey in the mist
- gameInfo.scratchPad.eventBits[0x1B] = 0x78; //skip the monkey escort
- u16* tempAddress = reinterpret_cast<u16*>(&gameInfo.scratchPad.eventBits[0x29]);
- *tempAddress |= 0x400;//give ending blow
- gameInfo.localAreaNodes.unk_0[0x12] |= 0x4;//mark read the midna text when you warp to N Faron for bridge
- gameInfo.scratchPad.allAreaNodes.Hyrule_Field.unk_0[0xF] |= 0x2; //cutscene for Gorge Bridge Watched
- gameInfo.scratchPad.allAreaNodes.Hyrule_Field.unk_0[0x8] |= 0x1; //Midna text for warping the bridge
- gameInfo.scratchPad.allAreaNodes.Hyrule_Field.unk_0[0x9] |= 0x20; //give Gorge Warp
- if (gameInfo.scratchPad.eventBits[0x5] != 0xFF)
- {
- gameInfo.scratchPad.eventBits[0x5] = 0xFF; //Ensure Epona is Stolen
- }
- gameInfo.nextStageVars.triggerLoad |= 1;
- return item;
- }
- else
- {
- u16* tempAddress = reinterpret_cast<u16*>(&gameInfo.scratchPad.eventBits[0x29]);
- *tempAddress |= 0x400;//give ending blow
- gameInfo.localAreaNodes.unk_0[0x17] |= 0xC0;//kill bugs in Coro's house
- gameInfo.localAreaNodes.unk_0[0x12] |= 0x4;//mark read the midna text when you warp to N Faron for bridge
- gameInfo.localAreaNodes.unk_0[0xC] |= 0x80;//set flag for midna to think you followed the monkey in the mist
- gameInfo.scratchPad.eventBits[0x1B] = 0x78; //skip the monkey escort
- gameInfo.scratchPad.allAreaNodes.Hyrule_Field.unk_0[0xF] |= 0x2; //cutscene for Gorge Bridge Watched
- gameInfo.scratchPad.allAreaNodes.Hyrule_Field.unk_0[0x8] |= 0x1; //Midna text for warping the bridge
- gameInfo.scratchPad.allAreaNodes.Hyrule_Field.unk_0[0x9] |= 0x20; //give Gorge Warp
- if (gameInfo.scratchPad.eventBits[0x5] != 0xFF)
- {
- gameInfo.scratchPad.eventBits[0x5] = 0xFF; //Ensure Epona is Stolen
- }
- return item;
- }
- }
- else if (item == items::Item::Vessel_Of_Light_Eldin)
- {//set tear counter to 16
- if (isTwilightSkipEnabled == 1)
- {
- gameInfo.scratchPad.tearCounters.Eldin = 16;
- gameInfo.localAreaNodes.unk_0[0x9] |= 0x20;//give death mountain warp
- gameInfo.localAreaNodes.unk_0[0x14] |= 1;//give midna jumps for top of sanctuary
- tools::setItemFlag(ItemFlags::Vessel_Of_Light_Eldin);//set flag for vessel since we'll skip it by reloading
- gameInfo.scratchPad.eventBits[0x6] |= 0x1; //tame Epona
- if (Singleton::getInstance()->isKB1Skipped == 1)
+ {
+ tp::d_com_inf_game::ScratchPad* scratchPadPtr = &gameInfo.scratchPad;
+ u8* eventBitsPtr = &scratchPadPtr->eventBits[0];
+ tp::d_com_inf_game::AllAreaNodes* allAreaNodesPtr = &scratchPadPtr->allAreaNodes;
+ if (Singleton::getInstance()->isTwilightSkipped == 1)
+ {
+ //Set Faron Twilight Flags
+ scratchPadPtr->clearedTwilights.Faron = 0b1; //Clear Faron Twilight
+ tools::setItemFlag(ItemFlags::Vessel_Of_Light_Faron);
+ scratchPadPtr->tearCounters.Faron = 16;
+ eventBitsPtr[0x29] |= 0x4;//give ending blow
+ eventBitsPtr[0x5] = 0xFF; //Ensure Epona is Stolen, give Midna Charge
+ eventBitsPtr[0x6] |= 0x10; //Faron Twilight Progression flag
+
+ //Set Eldin Twilight Flags
+ scratchPadPtr->clearedTwilights.Eldin = 0b1; // Clear Eldin Twilight
+ tools::setItemFlag(ItemFlags::Vessel_Of_Light_Eldin);
+ eventBitsPtr[0x6] |= 0x1; //tame Epona
+ eventBitsPtr[0xA] |= 0x8; //Beat KB1
+ eventBitsPtr[0x14] |= 0x10; //Put Bo Outside
+ eventBitsPtr[0x7] = 0xD6; //skip Gor Coron Sumo and Enter Mines also Trigger KB1 and mark Post-KB1 CS as watched, Eldin Twilight Story Progression Flag
+
+ //Set Lanayru Twilight Flags
+ scratchPadPtr->clearedTwilights.Lanayru = 0b1; // Clear Lanayru Twilight
+ tools::setItemFlag(ItemFlags::Vessel_Of_Light_Lanayru);
+ allAreaNodesPtr->Hyrule_Field.unk_0[0xB] |= 0x80;//water on Field map
+ allAreaNodesPtr->Hyrule_Field.unk_0[0xF] |= 0x10;//open south CT Shortcut to Faron
+ eventBitsPtr[0x30] |= 0x40; //gave springwater to south CT goron
+ eventBitsPtr[0x8] |= 0x80; //ZD Thawed
+ eventBitsPtr[0xC] |= 0x2; //Lanayru Twilight Story Progression Flag
+
+ //Unlock Map Regions
+ scratchPadPtr->movingActors.exploredRegions.Snowpeak = 0b1;
+ scratchPadPtr->movingActors.exploredRegions.Desert = 0b1;
+ scratchPadPtr->movingActors.exploredRegions.Lanayru = 0b1;
+ scratchPadPtr->movingActors.exploredRegions.Eldin = 0b1;
+ scratchPadPtr->movingActors.exploredRegions.Faron = 0b1;
+ scratchPadPtr->movingActors.exploredRegions.Ordon = 0b1;
+
+ //Unlock Warps
+ allAreaNodesPtr->Ordon.unk_0[0xD] = 0x10; // give Ordon Spring Warp
+ gameInfo.localAreaNodes.unk_0[0x13] = 0x80;//give S faron warp
+ gameInfo.localAreaNodes.unk_0[0xB] = 0x4;//give N faron warp
+ allAreaNodesPtr->Eldin.unk_0[0x9] |= 0x20; // give Death Mountain Warp
+ allAreaNodesPtr->Eldin.unk_0[0x8] |= 0x80; // give Kakariko Warp
+ allAreaNodesPtr->Hyrule_Field.unk_0[0x17] = 0x8; //give Bridge of Eldin Warp
+ allAreaNodesPtr->Hyrule_Field.unk_0[0xB] |= 0x8;//give castle town warp
+ allAreaNodesPtr->Hyrule_Field.unk_0[0x9] |= 0x20; //give Gorge Warp
+ allAreaNodesPtr->Lanayru.unk_0[0xB] |= 0x4; // give Zora's Domain Warp
+ allAreaNodesPtr->Lanayru.unk_0[0xA] |= 0x4;//give lake hylia warp
+
+ tools::setItemFlag(ItemFlags::Heros_Clothes);
+
+ //Faron Escape
+ if (Singleton::getInstance()->isForestEscapeEnabled == 1)
{
- gameInfo.scratchPad.eventBits[0xA] |= 0x8; //Beat KB1
- gameInfo.scratchPad.eventBits[0x14] |= 0x10; //Put Bo Outside
- gameInfo.scratchPad.eventBits[0x7] = 0xCE; //skip Gor Coron Sumo and Enter Mines also Trigger KB1 and mark Post-KB1 CS as watched
+ eventBitsPtr[0x6] |= 0x26; //warp the kak bridge, give map warp, set Forest Temple Story Flag
}
else
{
- gameInfo.scratchPad.eventBits[0x7] = 0x46; //skip Gor Coron Sumo and Enter Mines also Trigger KB1 and mark Post-KB1 CS as watched
- }
- gameInfo.nextStageVars.triggerLoad |= 1;
- return item;
+ eventBitsPtr[0x6] |= 0x24; //warp the kak bridge, give map warp
+ }
+
+ gameInfo.nextStageVars.triggerLoad |= 1;
+ return item;
}
else
{
- gameInfo.scratchPad.eventBits[0x6] |= 0x1; //tame Epona
- if (Singleton::getInstance()->isKB1Skipped == 1)
+ //Faron Escape
+ if (Singleton::getInstance()->isForestEscapeEnabled == 1)
{
- gameInfo.scratchPad.eventBits[0xA] |= 0x8; //Beat KB1
- gameInfo.scratchPad.eventBits[0x14] |= 0x10; //Put Bo Outside
- gameInfo.scratchPad.eventBits[0x7] = 0xCE; //skip Gor Coron Sumo and Enter Mines also Trigger KB1 and mark Post-KB1 CS as watched
+ eventBitsPtr[0x6] |= 0x26; //warp the kak bridge, give map warp, set Forest Temple Story Flag
}
else
{
- gameInfo.scratchPad.eventBits[0x7] = 0x46; //skip Gor Coron Sumo and Enter Mines also Trigger KB1 and mark Post-KB1 CS as watched
+ eventBitsPtr[0x6] |= 0x24; //warp the kak bridge, give map warp
}
-
+ tools::setItemFlag(ItemFlags::Vessel_Of_Light_Faron);
return item;
}
+ tools::setItemFlag(ItemFlags::Vessel_Of_Light_Faron);
+ return item;
+ }
+ else if (item == items::Item::Vessel_Of_Light_Eldin)
+ {
+ tp::d_com_inf_game::ScratchPad* scratchPadPtr = &gameInfo.scratchPad;
+ u8* eventBitsPtr = &scratchPadPtr->eventBits[0];
+ tools::setItemFlag(ItemFlags::Vessel_Of_Light_Eldin);
+ eventBitsPtr[0x6] |= 0x1; //tame Epona
+ eventBitsPtr[0xA] |= 0x8; //Beat KB1
+ eventBitsPtr[0x14] |= 0x10; //Put Bo Outside
+ eventBitsPtr[0x7] = 0xD6; //skip Gor Coron Sumo and Enter Mines also Trigger KB1 and mark Post-KB1 CS as watched, Eldin Twilight Story Progression Flag
+ return item;
}
else if (item == items::Item::Vessel_Of_Light_Lanayru)
- {//set tear counter to 16
- if (isTwilightSkipEnabled == 1)
- {
- gameInfo.scratchPad.tearCounters.Lanayru = 16;
- gameInfo.localAreaNodes.unk_0[0xA] |= 0x4;//give lake hylia warp
- gameInfo.scratchPad.allAreaNodes.Hyrule_Field.unk_0[0xB] |= 0x8;//give castle town warp
- gameInfo.scratchPad.eventBits[0x40] |= 0x8; //have been to desert (prevents cannon warp crash)
- gameInfo.scratchPad.allAreaNodes.Gerudo_Desert.unk_0[0x13] |= 0x40;//watched the CS when entering the desert
- u16* secondTempAddress = reinterpret_cast<u16*>(&gameInfo.scratchPad.eventBits[0xF7]);
- *secondTempAddress |= 0x1F4;//make it so you only have to donate 500 Rupees to Charlo
- tools::setItemFlag(ItemFlags::Vessel_Of_Light_Lanayru);//set flag for vessel since we'll skip it by reloading
- gameInfo.nextStageVars.triggerLoad |= 1;
- return item;
- }
- else
- {
- gameInfo.scratchPad.eventBits[0x40] |= 0x8; //have been to desert (prevents cannon warp crash)
- gameInfo.scratchPad.allAreaNodes.Gerudo_Desert.unk_0[0x13] |= 0x40;//watched the CS when entering the desert
- u16* secondTempAddress = reinterpret_cast<u16*>(&gameInfo.scratchPad.eventBits[0xF7]);
- *secondTempAddress |= 0x1F4;//make it so you only have to donate 500 Rupees to Charlo
- return item;
- }
+ {
+ tools::setItemFlag(ItemFlags::Vessel_Of_Light_Lanayru);
+ return item;
}
else if (item == items::Item::Empty_Bomb_Bag)
{//set flag for Barne's bomb bag check
@@ -634,10 +634,14 @@ namespace mod
{
snprintf(lastDestInfo, 50, "%s->%d->%x", sourceCheck->destination->stage, sourceCheck->destination->room, sourceCheck->destination->itemID);
item = sourceCheck->destination->itemID;
- if (sourceCheck->type == item::ItemType::Bug || sourceCheck->type == item::ItemType::Shop || sourceCheck->itemID == items::Item::Heart_Container)
+ if (sourceCheck->type == item::ItemType::Bug || sourceCheck->itemID == items::Item::Heart_Container)
{
sourceCheck->destination = &item::checks[263];//green rupee
}
+ else if (sourceCheck->type == item::ItemType::Shop)
+ {
+ sourceCheck->destination = &item::checks[i];
+ }
else if (sourceCheck->itemID != items::Item::Big_Quiver && sourceCheck->itemID != items::Item::Giant_Quiver && // quiver checks called twice somehow
sourceCheck->type != item::ItemType::Dungeon && sourceCheck->type != item::ItemType::Gear && sourceCheck->type != item::ItemType::Equip) // some checks are called twice i don't wanna list them all, but dungeon items, gear, and equipable items only have one check each intheir stage
{
@@ -650,10 +654,22 @@ namespace mod
if (item == items::Item::Wooden_Sword && tools::checkItemFlag(ItemFlags::Wooden_Sword))
{
item = items::Item::Ordon_Sword;
+ gameInfo.scratchPad.equipedItems.sword = 0x28;
}
else if (item == items::Item::Ordon_Sword && !tools::checkItemFlag(ItemFlags::Wooden_Sword))
{
item = items::Item::Wooden_Sword;
+ gameInfo.scratchPad.equipedItems.sword = 0x3F;
+ }
+ else if (item == items::Item::Master_Sword && tools::checkItemFlag(ItemFlags::Master_Sword))
+ {//for when MS and light Ms are implemented
+ item = items::Item::Master_Sword_Light;
+ gameInfo.scratchPad.equipedItems.sword = 0x49;
+ }
+ else if (item == items::Item::Master_Sword_Light && !tools::checkItemFlag(ItemFlags::Master_Sword))
+ {//for when MS and light Ms are implemented
+ item = items::Item::Master_Sword;
+ gameInfo.scratchPad.equipedItems.sword = 0x29;
}
else if (item == items::Item::Clawshot && tools::checkItemFlag(ItemFlags::Clawshot))
{
@@ -741,10 +757,11 @@ namespace mod
}
else if (tools::checkItemFlag(ItemFlags::Null_DB))
{
- gameInfo.scratchPad.eventBits[0x25] |= 0x40; //Set the Owl Statue in Kak to be able to be moved
- gameInfo.scratchPad.eventBits[0x5F] |= 0x20; //Shad leaves so you can warp
+ gameInfo.scratchPad.eventBits[0x60] |= 0x4; //set shad to be back in the basement
if (Singleton::getInstance()->isCannonRepaired == 0)
{
+ gameInfo.scratchPad.eventBits[0x25] |= 0x40; //Set the Owl Statue in Kak to be able to be moved
+ gameInfo.scratchPad.eventBits[0x5F] |= 0x20; //Shad leaves so you can warp
gameInfo.scratchPad.eventBits[0x3B] |= 0x8; //repairs Cannon at lake
Singleton::getInstance()->isCannonRepaired = 1;
}
@@ -784,10 +801,11 @@ namespace mod
}
else if (tools::checkItemFlag(ItemFlags::Null_DB))
{
- gameInfo.scratchPad.eventBits[0x25] |= 0x40; //Set the Owl Statue in Kak to be able to be moved
- gameInfo.scratchPad.eventBits[0x5F] |= 0x20; //Shad leaves so you can warp
+ gameInfo.scratchPad.eventBits[0x60] |= 0x4; //set shad to be back in the basement
if (Singleton::getInstance()->isCannonRepaired == 0)
{
+ gameInfo.scratchPad.eventBits[0x25] |= 0x40; //Set the Owl Statue in Kak to be able to be moved
+ gameInfo.scratchPad.eventBits[0x5F] |= 0x20; //Shad leaves so you can warp
gameInfo.scratchPad.eventBits[0x3B] |= 0x8; //repairs Cannon at lake
Singleton::getInstance()->isCannonRepaired = 1;
}
@@ -906,21 +924,17 @@ namespace mod
tools::setItemFlag(ItemFlags::Key_Shard_3);//set this flag to show full key on the map
}
}
- else if (item == items::Item::Master_Sword && tools::checkItemFlag(ItemFlags::Master_Sword))
- {//for when MS and light Ms are implemented
- item = items::Item::Master_Sword_Light;
+ else if (item == items::Item::Dominion_Rod && tools::checkItemFlag(ItemFlags::Dominion_Rod))
+ {//for when powered dominion rod is implemented
+ item = items::Item::Dominion_Rod_Uncharged;
}
- else if (item == items::Item::Master_Sword_Light && !tools::checkItemFlag(ItemFlags::Master_Sword))
+ else if (item == items::Item::Dominion_Rod_Uncharged && !tools::checkItemFlag(ItemFlags::Dominion_Rod))
{//for when MS and light Ms are implemented
- item = items::Item::Master_Sword;
- }
- }
- if (item == items::Item::Dominion_Rod)
- {
item = items::Item::Dominion_Rod;
- gameInfo.scratchPad.eventBits[0x25] |= 0x80;//set flag to charge dominion rod
+ }
}
- else if (item == items::Item::Poe_Soul && gameInfo.scratchPad.poeCount < 60)
+
+ if (item == items::Item::Poe_Soul && gameInfo.scratchPad.poeCount < 60)
{//increase poe counter
gameInfo.scratchPad.poeCount++;
}
@@ -928,9 +942,57 @@ namespace mod
{//shadow crystal doesn't actually do anything so we have to do its functionnality ourselves
game_patch::giveMidnaTransform();
}
+ else if (item == items::Item::Ordon_Pumpkin)
+ {
+ gameInfo.scratchPad.allAreaNodes.Snowpeak_Ruins.unk_0[0x9] |= 0x4; //Unlock Lobby Courtyard Door
+ gameInfo.scratchPad.eventBits[0x4] |= 0x80; //Told Yeta About Pumpkin
+ gameInfo.scratchPad.eventBits[0x0] |= 0x22; //Yeto took pumpkin and put it in soup
+ }
+ else if (item == items::Item::Ordon_Goat_Cheese)
+ {
+ gameInfo.scratchPad.allAreaNodes.Snowpeak_Ruins.unk_0[0x9] |= 0x8; //Unlock West Wing Door
+ gameInfo.scratchPad.eventBits[0x1] |= 0x20; //Told Yeta About Cheese
+ gameInfo.scratchPad.eventBits[0x0] |= 0x11; //Yeto took Cheese and put it in soup
+ }
+ else if (item == 0xE1)
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x4;//give ending blow
+ }
+ else if (item == 0xE2)
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x8;//give shield attack
+ }
+ else if (item == 0xE3)
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x2;//give back slice
+ }
+ else if (item == 0xE4)
+ {
+ gameInfo.scratchPad.eventBits[0x29] |= 0x1;//give helm splitter
+ }
+ else if (item == 0xE5)
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x80;//give mortal draw
+ }
+ else if (item == 0xE6)
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x40;//give jump strike
+ }
+ else if (item == 0xE7)
+ {
+ gameInfo.scratchPad.eventBits[0x2A] |= 0x20;//give great spin
+ }
else if (item == items::Item::Bed_Key)
{
gameInfo.scratchPad.allAreaNodes.Snowpeak_Ruins.dungeon.bigKeyGotten = 0b1; //unlock Blizzetta Door
+ if (Singleton::getInstance()->isBossKeyseyEnabled == 1)
+ {
+ item = items::Item::Red_Rupee;
+ }
+ }
+ else if (item == items::Item::Big_Key && Singleton::getInstance()->isBossKeyseyEnabled == 1)
+ {
+ item = items::Item::Red_Rupee;
}
else if (!tools::checkItemFlag(ItemFlags::Slingshot) &&
(item == items::Item::Seeds_50))
diff --git a/source/game_patches.cpp b/source/game_patches.cpp
index b90991c..192a2e3 100644
--- a/source/game_patches.cpp
+++ b/source/game_patches.cpp
@@ -37,6 +37,7 @@ namespace mod::cutscene_skip
namespace mod::game_patch
{
+
void assemblyOverwrites()
{
// Default to US/JP
@@ -70,28 +71,31 @@ namespace mod::game_patch
{
// Adjust Link's climbing speeds
tp::d_a_alink::LadderVars* LadderVars = &tp::d_a_alink::ladderVars;
- LadderVars->ladderClimbInitSpeed = 1.8;
- LadderVars->ladderReachTopClimbUpSpeed = 1.765;
- LadderVars->ladderTopStartClimbDownSpeed = 1.8;
- LadderVars->ladderBottomGetOffSpeed = 1.8;
- LadderVars->ladderClimbSpeed = 1.575;
- LadderVars->wallClimbHorizontalSpeed = 2.0;
- LadderVars->wallClimbVerticalSpeed = 1.875;
+ LadderVars->ladderClimbInitSpeed = 1.8;
+ LadderVars->ladderReachTopClimbUpSpeed = 1.765;
+ LadderVars->ladderTopStartClimbDownSpeed = 1.8;
+ LadderVars->ladderBottomGetOffSpeed = 1.8;
+ LadderVars->ladderClimbSpeed = 1.575;
+ LadderVars->wallClimbHorizontalSpeed = 2.0;
+ LadderVars->wallClimbVerticalSpeed = 1.875;
}
void removeIBLimit()
{
- // li 0
- u32 li = 0x38600000;
- // b +4C
- u32 b = 0x4800004C;
+ if (!tp::d_a_alink::checkStageName("D_MN07A"))
+ {
+ // li 0
+ u32 li = 0x38600000;
+ // b +4C
+ u32 b = 0x4800004C;
- // CheckHeavyState overwrite
- u32 checkHeavyStateOnAddress = reinterpret_cast<u32>(&tp::d_a_alink::checkHeavyStateOn);
- *reinterpret_cast<u32*>(checkHeavyStateOnAddress + 0x84) = li;
+ // CheckHeavyState overwrite
+ u32 checkHeavyStateOnAddress = reinterpret_cast<u32>(&tp::d_a_alink::checkHeavyStateOn);
+ *reinterpret_cast<u32*>(checkHeavyStateOnAddress + 0x84) = li;
- u32 setStickDataAddress = reinterpret_cast<u32>(&tp::d_a_alink::setStickData);
- *reinterpret_cast<u32*>(setStickDataAddress + 0x5FC) = b;
+ u32 setStickDataAddress = reinterpret_cast<u32>(&tp::d_a_alink::setStickData);
+ *reinterpret_cast<u32*>(setStickDataAddress + 0x5FC) = b;
+ }
}
void increaseWalletSize()
@@ -135,58 +139,37 @@ namespace mod::game_patch
// We should be wolf
setFirstTimeWolf();
- // Set sewers flags (zelda cutscenes, unchained wolf link, bla)
+ // Set sewers flags (escaped cell cs, Midna intro cs, unchained wolf link, zelda cutscene, First trip to Sewers Done)
gameInfo.scratchPad.eventBits[0x05] |= 0x7A;
+
+ // Set more sewers flags (talk to midna after escaping cell in sewers, listened to first guard in sewers)
+ gameInfo.scratchPad.eventBits[0x1A] |= 0x82;
+
+ // Set more sewers flags (spawned into sewers twilight as wolf)
+ gameInfo.scratchPad.eventBits[0x4D] |= 0x8;
+
gameInfo.scratchPad.equipedItems.sword = 0x3F;
// Load back to Ordon Spring
tools::triggerSaveLoad(stage::allStages[Stage_Ordon_Spring], 0x1, 0x3, 0x4);
}
- }
-
- void skipMDH()
- {
- if (Singleton::getInstance()->isMDHSkipEnabled == 1)
- {
- strcpy(sysConsolePtr->consoleLine[20].line, "-> Skipping MDH");
-
-
- strncpy(gameInfo.nextStageVars.nextStage, stage::allStages[Stage_Hyrule_Castle_Sewers], sizeof(gameInfo.nextStageVars.nextStage) - 1);
- gameInfo.nextStageVars.nextRoom = 0x3;
- gameInfo.nextStageVars.nextSpawnPoint = 0x0;
- }
- }
-
-
- void allowFaronEscape()
- {
- if (Singleton::getInstance()->isForestEscapeEnabled == 1)
- {
- strcpy(sysConsolePtr->consoleLine[20].line, "state was not 0");
- if (gameInfo.nextStageVars.nextRoom != 5)
- {
- if (gameInfo.scratchPad.allAreaNodes.Forest_Temple.dungeon.bossBeaten == 0b1 || gameInfo.scratchPad.allAreaNodes.Snowpeak_Ruins.dungeon.bossBeaten == 0b1 || gameInfo.scratchPad.allAreaNodes.Lakebed_Temple.dungeon.bossBeaten == 0b1 ||
- gameInfo.scratchPad.tearCounters.Faron != 16 || (tp::d_com_inf_game::current_state == 0x65 && !tools::checkItemFlag(ItemFlags::Vessel_Of_Light_Faron)))
- {
- return;
- }
- else
- {
- strcpy(sysConsolePtr->consoleLine[20].line, "-> Allowing Faron Escape");
- // reload faron woods as state 2
- //tools::triggerSaveLoad(gameInfo.nextStageVars.nextStage, gameInfo.nextStageVars.nextRoom, gameInfo.nextStageVars.nextSpawnPoint, a); --obsolete code
- gameInfo.nextStageVars.nextState = 0x2;
- }
- }
- }
+ gameInfo.scratchPad.equipedItems.sword = 0x3F;
}
- void unlockHFGates()
+ void setFieldBits()
{
- if (Singleton::getInstance()->isGateUnlockEnabled == 1)
+ if ((Singleton::getInstance()->isGateUnlockEnabled == 1 && (gameInfo.localAreaNodes.unk_0[0x8] & 0x10) == 0) || tools::checkItemFlag(ItemFlags::Gate_Keys))
{
gameInfo.unk_979[0x7] |= 0x6;//2 = lanyru gate 4 = eldin gorge gate
}
+
+ //Skip MDH?
+ if (Singleton::getInstance()->isMDHSkipEnabled == 1 && gameInfo.scratchPad.clearedTwilights.Lanayru == 0b1)
+ {
+ //set MDH flags
+ gameInfo.scratchPad.eventBits[0xC] |= 0x1; //MDH Started
+ gameInfo.scratchPad.eventBits[0x1E] |= 0x8; //MDH Completed
+ }
}
void skipGoats()
@@ -237,7 +220,7 @@ namespace mod::game_patch
}
}
- void skipGrovePuzzle()
+ void setGroveFlags()
{
if (Singleton::getInstance()->isMSPuzzleSkipEnabled == 1 && (gameInfo.localAreaNodes.unk_0[0xB] & 0x4) == 0)
{
@@ -246,19 +229,20 @@ namespace mod::game_patch
}
}
- void unlockBossDoors()
+ void checkBossKeysey()
{
if (Singleton::getInstance()->isBossKeyseyEnabled == 1)
{
- gameInfo.scratchPad.allAreaNodes.Forest_Temple.dungeon.bigKeyGotten = 0b1; //unlock Diababa Door
- gameInfo.scratchPad.allAreaNodes.Goron_Mines.dungeon.bigKeyGotten = 0b1; //unlock Fryus Door
- gameInfo.scratchPad.allAreaNodes.Lakebed_Temple.dungeon.bigKeyGotten = 0b1; //unlock Morpheel Door
- gameInfo.scratchPad.allAreaNodes.Arbiters_Grounds.dungeon.bigKeyGotten = 0b1; //unlock Stallord Door
- gameInfo.scratchPad.allAreaNodes.Snowpeak_Ruins.dungeon.bigKeyGotten = 0b1; //unlock Blizzetta Door
- gameInfo.scratchPad.allAreaNodes.Temple_of_Time.dungeon.bigKeyGotten = 0b1; //unlock Armaghoma Door
- gameInfo.scratchPad.allAreaNodes.City_in_the_Sky.dungeon.bigKeyGotten = 0b1; //unlock Argorok Door
- gameInfo.scratchPad.allAreaNodes.Palace_of_Twilight.dungeon.bigKeyGotten = 0b1; //unlock Zant Door
- gameInfo.scratchPad.allAreaNodes.Hyrule_Castle.dungeon.bigKeyGotten = 0b1; //unlock Ganon Door
+ tp::d_com_inf_game::AllAreaNodes* dungeonAreaNodesPtr = &gameInfo.scratchPad.allAreaNodes;
+ dungeonAreaNodesPtr->Forest_Temple.dungeon.bigKeyGotten = 0b1; //unlock Diababa Door
+ dungeonAreaNodesPtr->Goron_Mines.dungeon.bigKeyGotten = 0b1; //unlock Fryus Door
+ dungeonAreaNodesPtr->Lakebed_Temple.dungeon.bigKeyGotten = 0b1; //unlock Morpheel Door
+ dungeonAreaNodesPtr->Arbiters_Grounds.dungeon.bigKeyGotten = 0b1; //unlock Stallord Door
+ dungeonAreaNodesPtr->Snowpeak_Ruins.dungeon.bigKeyGotten = 0b1; //unlock Blizzetta Door
+ dungeonAreaNodesPtr->Temple_of_Time.dungeon.bigKeyGotten = 0b1; //unlock Armaghoma Door
+ dungeonAreaNodesPtr->City_in_the_Sky.dungeon.bigKeyGotten = 0b1; //unlock Argorok Door
+ dungeonAreaNodesPtr->Palace_of_Twilight.dungeon.bigKeyGotten = 0b1; //unlock Zant Door
+ dungeonAreaNodesPtr->Hyrule_Castle.dungeon.bigKeyGotten = 0b1; //unlock Ganon Door
}
}
@@ -268,8 +252,8 @@ namespace mod::game_patch
if (Singleton::getInstance()->isMSPuzzleSkipEnabled == 1 && (gameInfo.localAreaNodes.unk_0[0xB] & 0x4) == 0)
{
//Forest Temple
- gameInfo.scratchPad.allAreaNodes.Forest_Temple.unk_0[0xA] |= 0x8; //unlock Second Monkey Door
- gameInfo.scratchPad.allAreaNodes.Forest_Temple.unk_0[0xB] |= 0x80; //unlock Gale Puzzle Monkey Door
+ allAreaNodesPtr->Forest_Temple.unk_0[0xA] |= 0x8; //unlock Second Monkey Door
+ allAreaNodesPtr->Forest_Temple.unk_0[0xB] |= 0x80; //unlock Gale Puzzle Monkey Door
//Goron Mines
@@ -294,36 +278,21 @@ namespace mod::game_patch
{
if (Singleton::getInstance()->isEarlyCiTSEnabled == 1)
{
- if (Singleton::getInstance()->isCannonRepaired == 0)
- {
- if (gameInfo.scratchPad.tearCounters.Lanayru == 16)
- {
- gameInfo.scratchPad.eventBits[0x3B] |= 0x8; //repairs Cannon at lake
- Singleton::getInstance()->isCannonRepaired = 1;
- }
- }
+ gameInfo.scratchPad.eventBits[0x3B] |= 0x8; //repairs Cannon at lake
}
}
void earlyDesert()
{
- if (Singleton::getInstance()->isEarlyDesertEnabled == 1 && gameInfo.scratchPad.eventBits[0x26] < 0x80 && tools::checkItemFlag(ItemFlags::Master_Sword))
+ if (Singleton::getInstance()->isEarlyDesertEnabled == 1 && gameInfo.scratchPad.eventBits[0x26] < 0x80 && tools::checkItemFlag(ItemFlags::Shadow_Crystal))
{
gameInfo.scratchPad.eventBits[0x26] |= 0x80; //Allow you to use the cannon in the desert
}
}
- void sellWaterBombs()
- {
- if (gameInfo.scratchPad.allAreaNodes.Lakebed_Temple.dungeon.bossBeaten == 0b1 && ((gameInfo.scratchPad.allAreaNodes.Eldin.unk_0[0x17] & 0x40) == 0))//Escort Not Completed before Beating Lakebed
- {
- gameInfo.scratchPad.allAreaNodes.Eldin.unk_0[0x17] |= 0x40;
- }
- }
-
void accessDesert()
{
- if (tools::checkItemFlag(ItemFlags::Master_Sword))
+ if (tools::checkItemFlag(ItemFlags::Shadow_Crystal))
{
return;
}
@@ -336,15 +305,28 @@ namespace mod::game_patch
}
}
-
void skipCartEscort()
{
if (Singleton::getInstance()->isCartEscortSkipEnabled == 1)
{
+ gameInfo.scratchPad.allAreaNodes.Eldin.unk_0[0x17] |= 0x40;//remove rock in graveyard
+ gameInfo.scratchPad.allAreaNodes.Eldin.unk_0[0x16] |= 0x40;//Barnes sells water bombs
+ gameInfo.scratchPad.eventBits[0x8] |= 0x40;//escort started
+ gameInfo.scratchPad.eventBits[0x8] |= 0x10;//escort finished
+ gameInfo.scratchPad.eventBits[0x8] |= 0x4;//got zora armor from Rutela
tools::triggerSaveLoad(stage::allStages[Stage_Kakariko_Interiors], 0x2, 0x3, 0xD);
}
}
+ void setEscortState()
+ {
+ if ((gameInfo.scratchPad.eventBits[0x8] & 0x40) == 0 && tools::checkItemFlag(ItemFlags::Heros_Bow) && tools::checkItemFlag(ItemFlags::Boomerang) && gameInfo.scratchPad.clearedTwilights.Lanayru == 0b1)
+ {
+ gameInfo.nextStageVars.nextState = 0x8;
+ gameInfo.nextStageVars.nextSpawnPoint = 0x14;
+ }
+ }
+
void setFirstTimeWolf()
{
strcpy(sysConsolePtr->consoleLine[20].line, "-> Set first time wolf");
@@ -356,7 +338,7 @@ namespace mod::game_patch
{
strcpy(sysConsolePtr->consoleLine[20].line, "-> Set wolf");
- if (gameInfo.scratchPad.form == 0 && !tools::checkItemFlag(ItemFlags::Master_Sword) && !tools::checkItemFlag(ItemFlags::Vessel_Of_Light_Lanayru))
+ if (gameInfo.scratchPad.form == 0 && !tools::checkItemFlag(ItemFlags::Shadow_Crystal) && !tools::checkItemFlag(ItemFlags::Vessel_Of_Light_Lanayru))
{
strncpy(gameInfo.nextStageVars.nextStage, stage::allStages[Stage_Hyrule_Field], sizeof(gameInfo.nextStageVars.nextStage) - 1);
@@ -367,37 +349,6 @@ namespace mod::game_patch
{
return;
}
- if (tp::d_com_inf_game::can_warp > 0xD4)
- {
- return;
- }
- else
- {
- tp::d_com_inf_game::can_warp = 0xD4;
- }
-
-
- }
-
- void fixLanayruFaron()
- {
- if (Singleton::getInstance()->isGateUnlockEnabled == 1)
- {
- strcpy(sysConsolePtr->consoleLine[20].line, "state was not 0");
- if (gameInfo.nextStageVars.nextRoom != 5)
- {
- if (gameInfo.scratchPad.allAreaNodes.Snowpeak_Ruins.dungeon.bossBeaten == 0b1 || gameInfo.scratchPad.allAreaNodes.Lakebed_Temple.dungeon.bossBeaten == 0b1 || gameInfo.scratchPad.tearCounters.Faron != 16 || (tp::d_com_inf_game::current_state == 0x65 && !tools::checkItemFlag(ItemFlags::Vessel_Of_Light_Faron)))
- {
- return;
- }
- else if (gameInfo.scratchPad.allAreaNodes.Forest_Temple.dungeon.bossBeaten == 0b1)
- {
- strcpy(sysConsolePtr->consoleLine[20].line, "-> Allowing Faron Escape");
- // reload faron woods as state 2
- gameInfo.nextStageVars.nextState = 0x2;
- }
- }
- }
}
void setHuman()
@@ -457,33 +408,23 @@ namespace mod::game_patch
gameInfo.scratchPad.eventBits[0xD] |= 0x4;
}
- void skipKB1()
- {
- strcpy(sysConsolePtr->consoleLine[20].line, "-> Skipping KB1");
-
- // Load back to Ordon Spring
- strncpy(gameInfo.nextStageVars.nextStage, stage::allStages[Stage_Title_Screen], sizeof(gameInfo.nextStageVars.nextStage) - 1);
- gameInfo.nextStageVars.nextRoom = 0x0;
- gameInfo.nextStageVars.nextSpawnPoint = 0x1;
- gameInfo.nextStageVars.nextState = 0x4;
- }
-
void handleMaloShop()
{
+ tp::d_com_inf_game::AreaNodes* maloLocalAreaNodesPtr = &gameInfo.localAreaNodes;
//hylian shield check
if ((gameInfo.scratchPad.eventBits[0xA] & 0x8) != 0)//KB1 done
{
if (!tools::checkItemFlag(ItemFlags::Null_D9))
{
strcpy(sysConsolePtr->consoleLine[20].line, "-> selling hylian shield");
- gameInfo.localAreaNodes.unk_0[0xC] &= ~0x2;//unset flag for hylian shield bought
- gameInfo.localAreaNodes.unk_0[0x13] |= 0x40;//set flag for hylian shield on counter
- gameInfo.localAreaNodes.unk_0[0x15] &= ~0x40;//unset flag for red potion on right
+ maloLocalAreaNodesPtr->unk_0[0xC] &= ~0x2;//unset flag for hylian shield bought
+ maloLocalAreaNodesPtr->unk_0[0x13] |= 0x40;//set flag for hylian shield on counter
+ maloLocalAreaNodesPtr->unk_0[0x15] &= ~0x40;//unset flag for red potion on right
}
else
{
- gameInfo.localAreaNodes.unk_0[0xC] |= 0x2;//set flag for hylian shield bought
- gameInfo.localAreaNodes.unk_0[0x13] &= ~0x40;//unset flag for hylian shield on counter
+ maloLocalAreaNodesPtr->unk_0[0xC] |= 0x2;//set flag for hylian shield bought
+ maloLocalAreaNodesPtr->unk_0[0x13] &= ~0x40;//unset flag for hylian shield on counter
}
}
@@ -493,30 +434,336 @@ namespace mod::game_patch
{
if (!tools::checkItemFlag(ItemFlags::Null_D8))
{
- gameInfo.localAreaNodes.unk_0[0xC] |= 0x40;//set flag for hawkeye on counter
- gameInfo.localAreaNodes.unk_0[0xC] &= ~0x20;//unset flag for arrows on counter (else causes crash)
- gameInfo.localAreaNodes.unk_0[0xD] &= ~0x8;//unset flag for hawkeye sold out
- gameInfo.localAreaNodes.unk_0[0x15] &= ~0x10;//unset flag for red potion on left
+ maloLocalAreaNodesPtr->unk_0[0xC] |= 0x40;//set flag for hawkeye on counter
+ maloLocalAreaNodesPtr->unk_0[0xC] &= ~0x20;//unset flag for arrows on counter (else causes crash)
+ maloLocalAreaNodesPtr->unk_0[0xD] &= ~0x8;//unset flag for hawkeye sold out
+ maloLocalAreaNodesPtr->unk_0[0x15] &= ~0x10;//unset flag for red potion on left
}
else
{
- gameInfo.localAreaNodes.unk_0[0xC] &= ~0x40;//unset flag for hawkeye on counter
+ maloLocalAreaNodesPtr->unk_0[0xC] &= ~0x40;//unset flag for hawkeye on counter
if (tools::checkItemFlag(ItemFlags::Null_D9))
{
- gameInfo.localAreaNodes.unk_0[0xC] |= 0x20;//set flag for arrows on counter
- gameInfo.localAreaNodes.unk_0[0x15] |= 0x40;//set flag for red potion on right
- gameInfo.localAreaNodes.unk_0[0x15] &= ~0x10;//unset flag for red potion on left
- gameInfo.localAreaNodes.unk_0[0xD] |= 0x8;//set flag for hawkeye sold out
+ maloLocalAreaNodesPtr->unk_0[0xC] |= 0x20;//set flag for arrows on counter
+ maloLocalAreaNodesPtr->unk_0[0x15] |= 0x40;//set flag for red potion on right
+ maloLocalAreaNodesPtr->unk_0[0x15] &= ~0x10;//unset flag for red potion on left
+ maloLocalAreaNodesPtr->unk_0[0xD] |= 0x8;//set flag for hawkeye sold out
}
else
{
- gameInfo.localAreaNodes.unk_0[0xC] &= ~0x20;//unset flag for arrows on counter
- gameInfo.localAreaNodes.unk_0[0x15] &= ~0x40;//unset flag for red potion on right
- gameInfo.localAreaNodes.unk_0[0x15] |= 0x10;//set flag for red potion on left
- gameInfo.localAreaNodes.unk_0[0xD] &= ~0x8;//unset flag for hawkeye sold out
+ maloLocalAreaNodesPtr->unk_0[0xC] &= ~0x20;//unset flag for arrows on counter
+ maloLocalAreaNodesPtr->unk_0[0x15] &= ~0x40;//unset flag for red potion on right
+ maloLocalAreaNodesPtr->unk_0[0x15] |= 0x10;//set flag for red potion on left
+ maloLocalAreaNodesPtr->unk_0[0xD] &= ~0x8;//unset flag for hawkeye sold out
}
}
}
}
+
+ void skipMDH()
+ {
+ if (Singleton::getInstance()->isMDHSkipEnabled == 1)
+ {
+ strncpy(gameInfo.nextStageVars.nextStage, stage::allStages[Stage_Lake_Hylia], sizeof(gameInfo.nextStageVars.nextStage) - 1);
+ gameInfo.nextStageVars.nextSpawnPoint = 0x7;
+ gameInfo.nextStageVars.nextRoom = 0x0;
+
+ }
+ }
+
+ void skipTextAndCS()
+ {
+ //Set Scratchpad Pointer
+ tp::d_com_inf_game::ScratchPad* scratchPadPtr = &gameInfo.scratchPad;
+
+ //Set Letters Pointer
+ tp::d_com_inf_game::Letters* LettersPtr = &scratchPadPtr->recivedLetters;
+ LettersPtr->From_Wife_of_Yeto = 0b1;
+ LettersPtr->Update = 0b1;
+ LettersPtr->Now_open_for_business = 0b1;
+ LettersPtr->Agithas_Dream = 0b1;
+ LettersPtr->Hey_kid = 0b1;
+ LettersPtr->Challenge_for_you = 0b1;
+ LettersPtr->They_came_so_quickly = 0b1;
+ LettersPtr->Heroes_come_together = 0b1;
+ LettersPtr->URGENT_Bomb_arrows = 0b1;
+ LettersPtr->Rare_item_in_stock = 0b1;
+ LettersPtr->Good_stuff_inside = 0b1;
+ LettersPtr->URGENT_NOTICE = 0b1;
+ LettersPtr->Post_office_notice = 0b1;
+ LettersPtr->Dear_Adventurer_1 = 0b1;
+ LettersPtr->Dear_Adventurer_2 = 0b1;
+ LettersPtr->About_Ilias_memory = 0b1;
+
+ //Set Event Bits
+ u8* eventBitsPtr = &scratchPadPtr->eventBits[0];
+ eventBitsPtr[0x1] |= 0x40; //talked to Yeto First Time
+ eventBitsPtr[0x3] |= 0x90; //Jaggle Calls out to link, talked to squirrel as wolf in Ordon
+ eventBitsPtr[0x5] |= 0x10; //unchain wolf link
+ eventBitsPtr[0x6] |= 0xC0; //CS after beating Ordon Shadow, cs after entering Faron twilight
+ eventBitsPtr[0xB] |= 0x20; //Talked to Yeta First Time
+ eventBitsPtr[0xC] |= 0x10; //Midna accompanies link
+ eventBitsPtr[0x10] |= 0x2; //Talked to Jaggle after climbing vines
+ eventBitsPtr[0x5E] |= 0x10; //Midna Text After Beating Forest Temple
+ eventBitsPtr[0x40] |= 0x8; //have been to desert (prevents cannon warp crash)
+ eventBitsPtr[0x1B] |= 0x78; //skip the monkey escort
+ eventBitsPtr[0x1D] = 0x40; //fight bublin after Fyer
+ eventBitsPtr[0x22] |= 0x1; //Plumm initial CS watched
+ eventBitsPtr[0x26] |= 0x2; //Talked to Yeto on Snowpeak
+ eventBitsPtr[0x37] |= 0x4; // Postman Twilight Text
+ eventBitsPtr[0x38] |= 0x6; //Enter Hena Cabin CS
+ eventBitsPtr[0x42] |= 0x1; //Watched post ToT Ooccoo CS
+ eventBitsPtr[0x45] |= 0x8; //Postman Letters Text
+ eventBitsPtr[0x4A] |= 0x10; //Talo Cage CS
+ eventBitsPtr[0x3E] |= 0x2; //city OoCCoo CS watched
+ eventBitsPtr[0x59] |= 0x40; // Postman Met
+ eventBitsPtr[0x5D] |= 0x40; //Midna text after Kagorok FLight
+
+ //Set Area Node Flags
+ tp::d_com_inf_game::AllAreaNodes* allAreaNodesPtr = &scratchPadPtr->allAreaNodes;
+
+ allAreaNodesPtr->Ordon.unk_0[0x9] |= 0xAA; //exit shield house CS watched, day 3 intro CS, bee nest CS, Ranch first time CS
+ allAreaNodesPtr->Ordon.unk_0[0xA] |= 0xF; //Ilia spring CS, Ordon Village CS
+ allAreaNodesPtr->Ordon.unk_0[0xD] |= 0x82; //Approach Faron Twilight CS, Shield house intro cs
+ allAreaNodesPtr->Ordon.unk_0[0xE] |= 0x84; //Midna CS after watching Bo and Jaggle Talk about shield, midna text leaving spring
+ allAreaNodesPtr->Ordon.unk_0[0xF] |= 0xC; //rusl talking to wife CS
+ allAreaNodesPtr->Ordon.unk_0[0x17] |= 0x80; //enter village as wolf CS
+
+ allAreaNodesPtr->Sewers.unk_0[0x8] |= 0x38; //wake up in Jail CS, text after first gate, text after rooftops
+ allAreaNodesPtr->Sewers.unk_0[0x9] |= 0x18; //midna cs after digging out, midna intro cs
+ allAreaNodesPtr->Sewers.unk_0[0xA] |= 0x41; //zelda tower intro cs, outside top door intro cs
+ allAreaNodesPtr->Sewers.unk_0[0xB] |= 0x38; //other side of fence cs, top of stairway cs watched, stairway intro cs
+ allAreaNodesPtr->Sewers.unk_0[0xF] |= 0x11; //midna cs after digging out watched, midna text when approaching first rooftop guard
+
+ allAreaNodesPtr->Eldin.unk_0[0x9] |= 0x40;//goron mines DM cs
+ allAreaNodesPtr->Eldin.unk_0[0x14] |= 1;//give midna jumps for top of sanctuary
+ allAreaNodesPtr->Eldin.unk_0[0x10] |= 0x10;//skip Graveyard CS
+ allAreaNodesPtr->Eldin.unk_0[0x11] |= 0x8;//midna text after meteor
+ allAreaNodesPtr->Eldin.unk_0[0x13] |= 0x20;//skip Kak CS
+
+ allAreaNodesPtr->Lanayru.unk_0[0xB] |= 0x81;//Zora domain frozen CS, talked to reluta
+ allAreaNodesPtr->Lanayru.unk_0[0xC] |= 0x1;//midna text after jumping to lake from bridge
+ allAreaNodesPtr->Lanayru.unk_0[0xE] |= 0x20;//midna text after kagorok CS trigger
+ allAreaNodesPtr->Lanayru.unk_0[0x12] |= 0x40;//midna text after frozen zd
+ allAreaNodesPtr->Lanayru.unk_0[0x16] |= 0x80;//watched Ooccoo CiTS CS
+
+ allAreaNodesPtr->Hyrule_Field.unk_0[0xB] |= 0x60; //cutscene before eldin twilight and Lanayru twilight
+ allAreaNodesPtr->Hyrule_Field.unk_0[0xD] |= 0x80; //midna text after warping gorge bridge
+ allAreaNodesPtr->Hyrule_Field.unk_0[0xF] |= 0xB; //cutscene for Gorge Bridge Watched, Ilia Scent CS, midna text after lanayru field cs
+ allAreaNodesPtr->Hyrule_Field.unk_0[0xE] |= 0x20; //cutscene for entering Field Watched
+ allAreaNodesPtr->Hyrule_Field.unk_0[0x8] |= 0x81; //Midna text for warping the bridge, lanayru field CS
+ allAreaNodesPtr->Hyrule_Field.unk_0[0x9] |= 0x1; //cs before kak
+ allAreaNodesPtr->Hyrule_Field.unk_0[0x16] |= 0x13; //midna text after entering eldin twilight, midna text after entering Lanayru twilight, midna text before eldin twilight, midna text after eldin twilight
+ allAreaNodesPtr->Hyrule_Field.unk_0[0x17] |= 0x10; //youth scent CS
+
+ allAreaNodesPtr->Sacred_Grove.unk_0[0x8] |= 0x38; //lost woods intro cs, human block cs, midna text after human block
+
+ allAreaNodesPtr->Snowpeak.unk_0[0x8] |= 0x4; //Mountiain top CS
+ allAreaNodesPtr->Snowpeak.unk_0[0xB] |= 0x3; //Snowpeak Entrance CS, midna text in front of SPR
+
+ allAreaNodesPtr->Castle_Town.unk_0[0xA] |= 0x4; //STAR Tent CS
+ allAreaNodesPtr->Castle_Town.unk_0[0xF] |= 0x4; //Jovani House CS
+
+ allAreaNodesPtr->Gerudo_Desert.unk_0[0x13] |= 0x40;//watched the CS when entering the desert
+ allAreaNodesPtr->Gerudo_Desert.unk_0[0xA] |= 0x10;//Mirror Chamber Intro CS
+
+ allAreaNodesPtr->Forest_Temple.unk_0[0x8] |= 0x61; //set Midna Text for Ook Bridge Broken, Boomerang, and freeing first monkey
+ allAreaNodesPtr->Forest_Temple.unk_0[0x9] |= 0x40; //Ook Bridge Broken
+ allAreaNodesPtr->Forest_Temple.unk_0[0xA] |= 0x3; //Boko bridge CS, one bridge CS
+ allAreaNodesPtr->Forest_Temple.unk_0[0xE] |= 0x22; //Worm Bridge CS, second monkey CS
+ allAreaNodesPtr->Forest_Temple.unk_0[0xF] |= 0xE; //Midna text for pre-diababa room and open room monkey, Big Baba CS
+ allAreaNodesPtr->Forest_Temple.unk_0[0x10] |= 0x14; //Midna text for compass, eat open area bridge CS
+ allAreaNodesPtr->Forest_Temple.unk_0[0x16] |= 0x2; //Entrance CS watched
+
+ allAreaNodesPtr->Goron_Mines.unk_0[0x8] |= 0x1F; //upper magnet CS, first room switch 3 cs, first room switch 2 cs, outside bridge cs, crystal switch bridge cs
+ allAreaNodesPtr->Goron_Mines.unk_0[0x9] |= 0x20; // bottom magnet cs
+ allAreaNodesPtr->Goron_Mines.unk_0[0xD] |= 0x80; //outside magnet cs
+ allAreaNodesPtr->Goron_Mines.unk_0[0xE] |= 0x30; //enter tall room cs
+ allAreaNodesPtr->Goron_Mines.unk_0[0xF] |= 0x20; //open room CS
+ allAreaNodesPtr->Goron_Mines.unk_0[0x10] |= 0xCC; //lava slug room cs, outside area beamos wall cs, second magnet in crystal switch cs, crystal switch room gate
+ allAreaNodesPtr->Goron_Mines.unk_0[0x11] |= 0xB8; //opening cs, first room gate cs, first room switch 1 cs, water room magnet cs
+ allAreaNodesPtr->Goron_Mines.unk_0[0x17] |= 0xF; //lava slug room cs watched, lava slug room flag, tall room CS flags
+
+ allAreaNodesPtr->Lakebed_Temple.unk_0[0x8] |= 0x2; //stalactite midna text
+ allAreaNodesPtr->Lakebed_Temple.unk_0[0xF] |= 0x3; //one gear room spinning cs, two gear room spinning cs
+ allAreaNodesPtr->Lakebed_Temple.unk_0[0x14] |= 0x7; //main room cs, front bridge cs, opening cs
+ allAreaNodesPtr->Lakebed_Temple.unk_0[0x15] |= 0x20; //staircase turn CS
+ allAreaNodesPtr->Lakebed_Temple.unk_0[0x16] |= 0x8; // chu worm cs watched
+
+ allAreaNodesPtr->Arbiters_Grounds.unk_0[0xB] |= 0x20; //spinner wall cs
+ allAreaNodesPtr->Arbiters_Grounds.unk_0[0xE] |= 0x10; //opening CS
+ allAreaNodesPtr->Arbiters_Grounds.unk_0[0x12] |= 0x8; //cs after raising rails
+
+ allAreaNodesPtr->Snowpeak_Ruins.unk_0[0x10] |= 0x30; //enter cannonball room cs, unlock door to yeto
+ allAreaNodesPtr->Snowpeak_Ruins.unk_0[0x14] |= 0x41; //entrance cs, midna text after bedroom key
+ allAreaNodesPtr->Snowpeak_Ruins.unk_0[0x15] |= 0x2A; //freezard tower cs, enter NE room cs watched, East Courtyard Dig CS
+ allAreaNodesPtr->Snowpeak_Ruins.unk_0[0x16] |= 0x28; //midna text after cheese and pumpkin
+
+ allAreaNodesPtr->Temple_of_Time.unk_0[0x8] |= 0x80; //Midna text about missing statue
+ allAreaNodesPtr->Temple_of_Time.unk_0[0x9] |= 0x3C; //scales cs, entrance cs, scales move cs
+ allAreaNodesPtr->Temple_of_Time.unk_0[0xA] |= 0x8; //statue move cs watched
+ allAreaNodesPtr->Temple_of_Time.unk_0[0xF] |= 0x8; //gate outside darknut cs
+ allAreaNodesPtr->Temple_of_Time.unk_0[0x12] |= 0xEE; //first room switch cs, 8f hall switch cs, before darknut gate open cs, elevator room switches cs, 3F hall switch cs, 2F hall switch cs
+ allAreaNodesPtr->Temple_of_Time.unk_0[0x14] |= 0x4; //darknut room gate open cs
+
+ allAreaNodesPtr->City_in_the_Sky.unk_0[0xC] |= 0xF; //fan tower cs, room before aerolfos, first room exit cs, entrance cs
+ allAreaNodesPtr->City_in_the_Sky.unk_0[0xD] |= 0x6; // west bridge extended cs, east bridge extended cs
+
+ allAreaNodesPtr->Palace_of_Twilight.unk_0[0x9] |= 0x4; //Phantom zant 1 cs watched
+ allAreaNodesPtr->Palace_of_Twilight.unk_0[0xB] |= 0x2; //Entrance CS watched
+ allAreaNodesPtr->Palace_of_Twilight.unk_0[0xC] |= 0x82; //Midna Text when west hand seals sol, Light Sword CS
+ allAreaNodesPtr->Palace_of_Twilight.unk_0[0xD] |= 0x1; //Midna text after forced transform
+ allAreaNodesPtr->Palace_of_Twilight.unk_0[0xE] |= 0xB0; //Midna text after west hand drops sol, midna text about transformed twili, midna text after post zant save
+ allAreaNodesPtr->Palace_of_Twilight.unk_0[0xF] |= 0xC0; //Midna text after light sword, midna text after west sol in slot
+ allAreaNodesPtr->Palace_of_Twilight.unk_0[0x12] |= 0x4; // midna text after re-entering west after sol stolen
+ allAreaNodesPtr->Palace_of_Twilight.unk_0[0x13] |= 0x2; //midna text after entrance cs
+ allAreaNodesPtr->Palace_of_Twilight.unk_0[0x16] |= 0x10; //watched EW 2nd room stairs CS
+
+ allAreaNodesPtr->Hyrule_Castle.unk_0[0x9] |= 0x1; //graveyard entrance cs
+ allAreaNodesPtr->Hyrule_Castle.unk_0[0x11] |= 0xC; //east wing cs
+ allAreaNodesPtr->Hyrule_Castle.unk_0[0xe] |= 0x1; //midna text after outside gale
+ allAreaNodesPtr->Hyrule_Castle.unk_0[0x10] |= 0x24; //entrance cs, chandelier room east cs watched
+ allAreaNodesPtr->Hyrule_Castle.unk_0[0x13] |= 0x40; // Darknuts room CS
+ allAreaNodesPtr->Hyrule_Castle.unk_0[0x14] |= 0xB; //Midna text post KB4, lizalfos Room CS, midna text after graveyard SK
+ allAreaNodesPtr->Hyrule_Castle.unk_0[0x16] |= 0x1; //lone darknut room se torch cs
+ allAreaNodesPtr->Hyrule_Castle.unk_0[0x17] |= 0x80; //lone darknut room me torch watched
+
+ //Set Local Area Node flags
+ tp::d_com_inf_game::AreaNodes* csLocalAreaNodesPtr = &gameInfo.localAreaNodes;
+ csLocalAreaNodesPtr->unk_0[0x8] = 0xFF;//give midna jumps in mist area
+ csLocalAreaNodesPtr->unk_0[0xC] |= 0x80;//set flag for midna to think you followed the monkey in the mist
+ csLocalAreaNodesPtr->unk_0[0x12] |= 0x4;//mark read the midna text when you warp to N Faron for bridge
+ csLocalAreaNodesPtr->unk_0[0xF] |= 0x8;//set flag for midna text after twilight
+ csLocalAreaNodesPtr->unk_0[0xE] |= 0x9;//cs after entering Faron,spring cs with spirit
+
+ //Apply Randomizer Options
+ checkBossKeysey();
+ earlyCiTS();
+ earlyDesert();
+
+ //Apply Overrides for custom chests
+ gameInfo.scratchPad.eventBits[0x22] |= 0x4;/*Got Ilia's Charm from Impaz*/
+ gameInfo.scratchPad.eventBits[0x49] |= 0x2;/*Bought Slingshot from Sera*/
+
+ if (Singleton::getInstance()->isIntroSkipped == 1)
+ {
+ //set Ordon Days 1,2, and 3 Flags
+ allAreaNodesPtr->Ordon.unk_0[0x3] |= 0x1; //Gave cradle to Uli, got Fishing Rod from uli
+ eventBitsPtr[0x4] |= 0x4; //Talked to Uli Day 1
+ allAreaNodesPtr->Ordon.unk_0[0x9] |= 0x40; //Goats 2 done
+ allAreaNodesPtr->Ordon.unk_0[0xC] |= 0x1A; //Day 2 CS watched, Goats 1 done, spawn wooden sword chest
+ eventBitsPtr[0x45] |= 0x10; //Saved Talo
+ eventBitsPtr[0x46] |= 0x11; //Came Back to Links House with Epona Day 1, took cradle from monkey
+ eventBitsPtr[0x47] |= 0x2F; //Called Epona and Talked to everyone
+ eventBitsPtr[0x48] |= 0x10; //Talked to Sera
+ eventBitsPtr[0x62] |= 0x80; //Talked to Colin Day 1
+ eventBitsPtr[0x4A] |= 0x60; //Day 1 done, sword training done
+
+ eventBitsPtr[0x2] |= 0x40; //Slingshot and Sword Training started
+ eventBitsPtr[0x10] |= 0x1; //Cat got Fish
+ eventBitsPtr[0x16] |= 0x1; //Day 2 done
+
+ allAreaNodesPtr->Ordon.unk_0[0xE] |= 0x2;//set flag for Fado text before goats
+ allAreaNodesPtr->Ordon.unk_0[0x9] |= 0x60;//set flag for day 3 intro cs and goats 2 done
+
+ tools::setItemFlag(ItemFlags::Heros_Clothes);
+
+
+
+ if (Singleton::getInstance()->isSewerSkipEnabled == 1)
+ {
+ // Set sewers flags (escaped cell cs, Midna intro cs, unchained wolf link, zelda cutscene, First trip to Sewers Done)
+ // Set more sewers flags (talk to midna after escaping cell in sewers, listened to first guard in sewers)
+ gameInfo.scratchPad.eventBits[0x1A] |= 0x82;
+
+ // Set more sewers flags (spawned into sewers twilight as wolf)
+ gameInfo.scratchPad.eventBits[0x4D] |= 0x8;
+
+ if (Singleton::getInstance()->isTwilightSkipped == 1)
+ {
+ //Set Faron Twilight Flags
+ scratchPadPtr->clearedTwilights.Faron = 0b1; //Clear Faron Twilight
+ tools::setItemFlag(ItemFlags::Vessel_Of_Light_Faron);
+ scratchPadPtr->tearCounters.Faron = 16;
+ eventBitsPtr[0x5] = 0xFF; //Ensure Epona is Stolen, give Midna Charge
+ eventBitsPtr[0x6] |= 0x10; //Faron Twilight Progression flag
+ tools::setItemFlag(ItemFlags::Heros_Clothes);
+
+ //Set Eldin Twilight Flags
+ scratchPadPtr->clearedTwilights.Eldin = 0b1; // Clear Eldin Twilight
+ tools::setItemFlag(ItemFlags::Vessel_Of_Light_Eldin);
+ eventBitsPtr[0x6] |= 0x1; //tame Epona
+ eventBitsPtr[0xA] |= 0x8; //Beat KB1
+ eventBitsPtr[0x14] |= 0x10; //Put Bo Outside
+ eventBitsPtr[0x7] = 0xD6; //skip Gor Coron Sumo and Enter Mines also Trigger KB1 and mark Post-KB1 CS as watched, Eldin Twilight Story Progression Flag
+
+ //Set Lanayru Twilight Flags
+ scratchPadPtr->clearedTwilights.Lanayru = 0b1; // Clear Lanayru Twilight
+ tools::setItemFlag(ItemFlags::Vessel_Of_Light_Lanayru);
+ allAreaNodesPtr->Hyrule_Field.unk_0[0xB] |= 0x80;//water on Field map
+ allAreaNodesPtr->Hyrule_Field.unk_0[0xF] |= 0x10;//open south CT Shortcut to Faron
+ eventBitsPtr[0x30] |= 0x40; //gave springwater to south CT goron
+ eventBitsPtr[0x8] |= 0x80; //ZD Thawed
+ eventBitsPtr[0xC] |= 0x2; //Lanayru Twilight Story Progression Flag
+
+
+ // Set sewers flags
+ giveMidna();
+ giveSense();
+
+ // Set sewers flags (zelda cutscenes, unchained wolf link, bla)
+ eventBitsPtr[0x05] |= 0x7A;
+
+ //Unlock Map Regions
+ scratchPadPtr->movingActors.exploredRegions.Snowpeak = 0b1;
+ scratchPadPtr->movingActors.exploredRegions.Desert = 0b1;
+ scratchPadPtr->movingActors.exploredRegions.Lanayru = 0b1;
+ scratchPadPtr->movingActors.exploredRegions.Eldin = 0b1;
+ scratchPadPtr->movingActors.exploredRegions.Faron = 0b1;
+ scratchPadPtr->movingActors.exploredRegions.Ordon = 0b1;
+
+ //Unlock Warps
+ allAreaNodesPtr->Ordon.unk_0[0xD] = 0x10; // give Ordon Spring Warp
+ gameInfo.localAreaNodes.unk_0[0x13] = 0x80;//give S faron warp
+ gameInfo.localAreaNodes.unk_0[0xB] = 0x4;//give N faron warp
+ allAreaNodesPtr->Eldin.unk_0[0x9] |= 0x20; // give Death Mountain Warp
+ allAreaNodesPtr->Eldin.unk_0[0x8] |= 0x80; // give Kakariko Warp
+ allAreaNodesPtr->Hyrule_Field.unk_0[0x17] = 0x8; //give Bridge of Eldin Warp
+ allAreaNodesPtr->Hyrule_Field.unk_0[0xB] |= 0x8;//give castle town warp
+ allAreaNodesPtr->Hyrule_Field.unk_0[0x9] |= 0x20; //give Gorge Warp
+ allAreaNodesPtr->Lanayru.unk_0[0xB] |= 0x4; // give Zora's Domain Warp
+ allAreaNodesPtr->Lanayru.unk_0[0xA] |= 0x4;//give lake hylia warp
+ }
+ }
+
+ //Set Other Flags
+ u16* secondTempAddress = reinterpret_cast<u16*>(&eventBitsPtr[0xF7]);
+ *secondTempAddress |= 0x1F4;//make it so you only have to donate 500 Rupees to Charlo
+ eventBitsPtr[0x20] |= 0x20; //MS Story Progression Flag
+
+
+ //Faron Escape
+ if (Singleton::getInstance()->isForestEscapeEnabled == 1)
+ {
+ eventBitsPtr[0x6] |= 0x26; //warp the kak bridge, give map warp, set Forest Temple Story Flag
+ }
+ else
+ {
+ eventBitsPtr[0x6] |= 0x24; //warp the kak bridge, give map warp
+ }
+
+ //Start Link in His House
+ strncpy(gameInfo.nextStageVars.nextStage, stage::allStages[Stage_Ordon_Interiors], sizeof(gameInfo.nextStageVars.nextStage) - 1);
+ gameInfo.nextStageVars.nextRoom = 0x4;
+ gameInfo.nextStageVars.nextSpawnPoint = 0x4;
+ }
+ else
+ {
+ //Set Other Flags
+ u16* secondTempAddress = reinterpret_cast<u16*>(&eventBitsPtr[0xF7]);
+ *secondTempAddress |= 0x1F4;//make it so you only have to donate 500 Rupees to Charlo
+ eventBitsPtr[0x20] |= 0x20; //MS Story Progression Flag
+ }
+ }
} \ No newline at end of file
diff --git a/source/itemChecks.cpp b/source/itemChecks.cpp
index c4dd9b9..ff0c8d2 100644
--- a/source/itemChecks.cpp
+++ b/source/itemChecks.cpp
@@ -6,552 +6,577 @@
namespace mod::item
{
- ItemCheck checks[492] = {
-/* 0 */{0x3F, 1, stage::allStages[65], 4, 0x0, 0x0, 0b000000000000000000000, -1.6259740, 0.0000000, -207.4881290, nullptr, nullptr}, //Wooden Sword Chest
-/* 1 */{0x03, 7, stage::allStages[40], 0, 0x1, 0xFF, 0b110000000000000000100, -3550.8691410, 4450.0000000, -694.8996580, nullptr, nullptr}, // South Faron Cave Small Chest
-/* 2 */{0xEE, 8, stage::allStages[45], 14, 0x1, 0xFF, 0b000000000000000000100, 1221.9044190, 50.0000000, -7.9423170, nullptr, nullptr}, //North Faron Cave Key Chest
-/* 3 */{0x21, 3, stage::allStages[45], 14, 0x1, 0xFF, 0b110000000000000000100, 1528.0000000, 250.0000000, -22.0000000, nullptr, nullptr}, //North Faron Cave Heart Piece Chest
-/* 4 */{0x03, 7, stage::allStages[45], 6, 0x1, 0xFF, 0b000000000000000000100, -38292.5312500, 400.0000000, -23129.9550780, nullptr, nullptr}, //Small Chest North of Trill
-/* 5 */{0xED, 7, stage::allStages[65], 7, 0x0, 0xFF, 0b110010000000000001000, 128.7043760, -1077.0000000, -607.5000000, nullptr, nullptr}, //Link's Basement Chest
-/* 6 */{0x03, 7, stage::allStages[6], 22, 0x1, 0xFF, 0b000000000000000000000, 900.0000000, 3110.0000000, 15825.0000000, nullptr, nullptr}, //FT Entrance Vine Chest
-/* 7 */{0x04, 7, stage::allStages[6], 0, 0x1, 0xFF, 0b100100000000000000000, 0.0000000, 2700.0000000, 5550.0000000, nullptr, nullptr}, //FT Central Chest Behind Stairs
-/* 8 */{0x23, 2, stage::allStages[6], 0, 0x1, 0x1, 0b110000000000000000000, 550.0000000, 3301.0095210, 5325.0000000, nullptr, nullptr}, //FT Map Chest
-/* 9 */{0x20, 8, stage::allStages[6], 9, 0x1, 0xFF, 0b110000000000000000000, 6908.0000000, 3580.2719730, -3305.0000000, nullptr, nullptr}, //FT Windless Bridge Chest
-/* 10 */{0x03, 7, stage::allStages[6], 2, 0x1, 0xFF, 0b110000000000000100000, 11559.7548830, 3152.0000000, 3761.2187500, nullptr, nullptr}, //FT Second Monkey Under Bridge Chest
-/* 11 */{0x20, 8, stage::allStages[6], 5, 0x1, 0xFF, 0b100000000000000100000, -9108.924805, 3302.0000000, 5547.310059, nullptr, nullptr}, //FT Totem Pole Chest
-/* 12 */{0x04, 7, stage::allStages[6], 5, 0x1, 0xFF, 0b100000000000000100000, -11721.1455080, 3750.0000000, 4717.8212890, nullptr, nullptr}, //FT West Tile Worm Small Chest
-/* 13 */{0x21, 3, stage::allStages[6], 3, 0x1, 0xFF, 0b110000000000000000000, -4000.0000000, 2955.5900880, 9075.0000000, nullptr, nullptr}, //FT Deku Like Heart Piece Chest
-/* 14 */{0x21, 3, stage::allStages[6], 5, 0x1, 0xFF, 0b110100000000000100000, -14275.0000000, 3402.7832030, 6150.0000000, nullptr, nullptr}, //FT West Tile Worm Heart Piece Chest
-/* 15 */{0x24, 2, stage::allStages[6], 0, 0x1, 0x1, 0b100100000000000000000, 0.0000000, 3150.0000000, 7125.0000000, nullptr, nullptr}, //FT Compass Chest
-/* 16 */{0x26, 2, stage::allStages[6], 1, 0x1, 0x1, 0b100100000000000000000, 9225.0009770, 3471.9599610, 8465.1347660, nullptr, nullptr}, //FT Big Key Chest
-/* 17 */{0x03, 7, stage::allStages[6], 1, 0x1, 0xFF, 0b000000000000000000000, 10261.0000000, 3175.0000000, 8295.0000000, nullptr, nullptr}, //FT East Water Cave Chest
-/* 18 */{0x20, 8, stage::allStages[6], 10, 0x2, 0xFF, 0b000100000010000000000, 1174.2510990, 5002.3901370, -9219.0937500, nullptr, nullptr}, //FT North Deku Like Chest
-/* 19 */{0x04, 7, stage::allStages[6], 11, 0x2, 0xFF, 0b100100000000000100000, 11183.0000000, 3806.5500490, -6305.0000000, nullptr, nullptr}, //FT East Tile Worm Chest
-/* 20 */{0x04, 7, stage::allStages[68], 2, 0x2, 0xFF, 0b000000000000000000000, -70.0000000, -6.0440000, -670.0000000, nullptr, nullptr}, //Kakariko Inn Small Chest
-/* 21 */{0x45, 0, stage::allStages[65], 0, 0x2, 0x2, 0b000000000000000000000, 320.8111880, 9.7100000, 1017.9390870, nullptr, nullptr}, //Iron Boots Chest
-/* 22 */{0x04, 7, stage::allStages[3], 1, 0x3, 0xFF, 0b001000000000000000000, 1050.0000000, -258.1840820, 13750.0000000, nullptr, nullptr}, //GM Entrance Small Chest
-/* 23 */{0x20, 8, stage::allStages[3], 3, 0x3, 0xFF, 0b001000000000000000000, 2700.0000000, -1378.3521730, 5175.0000000, nullptr, nullptr}, //GM Main Magnet Room Bottom Chest
-/* 24 */{0x23, 2, stage::allStages[3], 14, 0x3, 0x3, 0b001000000000000100000, -15984.1562500, -710.5994260, 1504.4143070, nullptr, nullptr}, //GM Map Chest
-/* 25 */{0x04, 7, stage::allStages[3], 14, 0x3, 0xFF, 0b001000000000000000000, -16176.0000000, -561.3822020, 895.0000000, nullptr, nullptr}, //GM Gor Amato Small Chest
-/* 26 */{0x21, 3, stage::allStages[3], 4, 0x3, 0xFF, 0b001000000000000000000, -5625.0000000, 448.7841190, 75.0000000, nullptr, nullptr}, //GM Magnet Maze Heart Piece Chest
-/* 27 */{0x20, 8, stage::allStages[3], 6, 0x3, 0xFF, 0b001000000000000000000, 1125.0000000, 600.0000000, -4725.0000000, nullptr, nullptr}, //GM Switch Room Underwater Chest
-/* 28 */{0x04, 7, stage::allStages[3], 6, 0x3, 0xFF, 0b001000000000000000000, 1000.0000000, 1650.0000000, -5650.0000000, nullptr, nullptr}, //GM Switch Room Small Chest
-/* 29 */{0x21, 3, stage::allStages[3], 6, 0x3, 0xFF, 0b001000000000000000000, -1350.0000000, 2350.0000000, -6200.0000000, nullptr, nullptr}, //GM After Switch Room Heart Piece Chest
-/* 30 */{0x20, 8, stage::allStages[3], 7, 0x3, 0xFF, 0b101000000000000100000, -1050.0000000, 2425.0000000, -14825.0000000, nullptr, nullptr}, //GM Outside Bemos Chest
-/* 31 */{0x03, 7, stage::allStages[3], 17, 0x3, 0xFF, 0b101000000000000100000, 13900.0000000, 2997.0900880, -17175.0000000, nullptr, nullptr}, //GM Gor Ebizo Small Chest
-/* 32 */{0x03, 7, stage::allStages[3], 9, 0x3, 0xFF, 0b101000000000000100000, 9950.0000000, 2475.0000000, -15375.0000000, nullptr, nullptr}, //GM Small Chest Before Dangoro
-/* 33 */{0x43, 0, stage::allStages[3], 11, 0x3, 0x3, 0b001000000000000000000, 7997.9995120, 2640.0000000, -5355.0000000, nullptr, nullptr}, //GM Bow Chest
-/* 34 */{0x24, 2, stage::allStages[3], 11, 0x4, 0x4, 0b101001000000000000000, 6488.3676760, 2640.0000000, -1673.5349120, nullptr, nullptr}, //GM Compass Chest
-/* 35 */{0x05, 7, stage::allStages[3], 16, 0x4, 0xFF, 0b101001000000000000000, 13975.0000000, 2476.4899900, -1675.0000000, nullptr, nullptr}, //GM Gor Liggs Small Chest
-/* 36 */{0x05, 7, stage::allStages[3], 3, 0x4, 0xFF, 0b101001000000000000000, 3625.0000000, 2637.8999020, 4050.0000000, nullptr, nullptr}, //GM Main Magnet Room Top Chest
-/* 37 */{0x05, 7, stage::allStages[3], 7, 0x4, 0xFF, 0b001000000000000000000, 2325.0000000, 1100.0000000, -17400.0000000, nullptr, nullptr}, //GM Outside Underwater Chest
-/* 38 */{0x21, 3, stage::allStages[46], 0, 0x5, 0xFF, 0b101000100000000000000, 1300.0000000, -1600.0000000, 16700.0000000, nullptr, nullptr}, //Eldin Spring Heart Piece Chest
-/* 39 */{0x05, 7, stage::allStages[48], 0, 0x2, 0xFF, 0b010000000000000000000, 16050.0000000, 200.0000000, 725.0000000, nullptr, nullptr}, //Kakariko Graveyard Lanturn Chest
-/* 40 */{0x05, 7, stage::allStages[68], 4, 0x3, 0xFF, 0b000000000000000000000, -887.4350590, 1000.0000000, -173.2907710, nullptr, nullptr}, //Kakariko Watchtower Chest
-/* 41 */{0x06, 7, stage::allStages[46], 0, 0x5, 0xFF, 0b000000101100000000000, -4027.7336430, 3200.0000000, -8970.9990230, nullptr, nullptr}, //Kakariko Watchtower Alcove Chest
-/* 42 */{0x21, 3, stage::allStages[56], 0, 0x5, 0xFF, 0b000000001000000000000, 11550.0000000, 2700.0000000, 24090.0000000, nullptr, nullptr}, //Eldin Bomb Rock Ledge Heart Piece Chest
-/* 43 */{0x03, 7, stage::allStages[50], 1, 0x5, 0xFF, 0b000000000000000000000, 2784.3178710, -4587.8901370, 10773.4140620, nullptr, nullptr}, //ZD Small Chest By Mother and Child Isles
-/* 44 */{0x04, 7, stage::allStages[50], 1, 0xFF, 0xFF, 0b000000000000000000000, 3810.8435060, -3535.5300290, 11344.8876950, nullptr, nullptr}, //ZD Small Chest Under Waterfall
-/* 45 */{0x06, 7, stage::allStages[52], 0, 0x5, 0xFF, 0b001000000000000000000, -97123.5468750, -19490.0000000, 58585.6992190, nullptr, nullptr}, //Lake Hylia Underwater Chest
-/* 46 */{0x0F, 5, stage::allStages[0], 0, 0x6, 0xFF, 0b000000000000001000000, -1707.6793210, 1250.0000000, 15388.9882810, nullptr, nullptr}, //LBT Lobby Left Chest
-/* 47 */{0x17, 5, stage::allStages[0], 0, 0x6, 0xFF, 0b000000000000001000000, -144.6737980, 1250.0000000, 16525.8710940, nullptr, nullptr}, //LBT Lobby Rear Chest
-/* 48 */{0x17, 5, stage::allStages[0], 1, 0x6, 0xFF, 0b100000001000001000000, 1417.5971680, 1813.6099850, 7807.2255860, nullptr, nullptr}, //LBT Stalactite Room Small Chest
-/* 49 */{0x0F, 5, stage::allStages[0], 3, 0x6, 0xFF, 0b000000000000001000000, 1629.5045170, 0.0000000, 2049.6350100, nullptr, nullptr}, //LBT Central Room Small Chest
-/* 50 */{0x23, 2, stage::allStages[0], 3, 0x6, 0x6, 0b000000000000001000000, 2010.5773930, 0.0000000, -1656.3415530, nullptr, nullptr}, //LBT Map Chest
-/* 51 */{0x20, 8, stage::allStages[0], 8, 0x6, 0xFF, 0b100000001000001000000, 12900.0000000, -600.0000000, 1850.0000000, nullptr, nullptr}, //LBT East Stalactite Room Chest
-/* 52 */{0x16, 5, stage::allStages[0], 7, 0x6, 0xFF, 0b000000000000001100000, 8779.1152340, 1500.0000000, 1667.6258540, nullptr, nullptr}, //LBT East Second Floor Southwest Chest
-/* 53 */{0x20, 8, stage::allStages[0], 7, 0x6, 0xFF, 0b100000001000001100000, 11550.8037110, 1500.0000000, 2866.6462400, nullptr, nullptr}, //LBT East Second Floor Southeast Chest
-/* 54 */{0x17, 5, stage::allStages[0], 10, 0x6, 0xFF, 0b000000000000001100000, 18228.3320310, 3995.0000000, -466.3260800, nullptr, nullptr}, //LBT East Water Supply Small Chest
-/* 55 */{0x20, 8, stage::allStages[0], 9, 0x6, 0xFF, 0b000000000000001000000, 13550.0000000, 10.0000000, -2500.0000000, nullptr, nullptr}, //LBT Before Deku Toad Chest
-/* 56 */{0x04, 7, stage::allStages[0], 9, 0x6, 0xFF, 0b101000000000001100000, 13193.2910160, -1189.3100590, -2433.4060060, nullptr, nullptr}, //LBT Before Deku Toad Underwater Left Chest
-/* 57 */{0x16, 5, stage::allStages[0], 9, 0x6, 0xFF, 0b101000000000001100000, 13757.0000000, -1275.3310550, -4783.1503910, nullptr, nullptr}, //LBT Before Deku Toad Underwater Right Chest
-/* 58 */{0x44, 0, stage::allStages[2], 51, 0x6, 0x6, 0b000000000000001000000, 0.0000000, 0.0000000, 0.0000000, nullptr, nullptr}, //LBT Clawshot Chest
-/* 59 */{0x21, 3, stage::allStages[0], 3, 0x7, 0xFF, 0b100000000010001000000, -0.8691990, 2100.0000000, 2.1099050, nullptr, nullptr}, //LBT Chandelier Heart Piece Chest
-/* 60 */{0x05, 7, stage::allStages[0], 10, 0x7, 0xFF, 0b100000000010001100000, 21000.0000000, 4170.0000000, 85.0000000, nullptr, nullptr}, //LBT Eas Water Supply Clawshot Chest
-/* 61 */{0x04, 7, stage::allStages[0], 3, 0x7, 0xFF, 0b000000000000001000000, 0.0000000, -940.0000000, -315.5000000, nullptr, nullptr}, //LBT Central Room Center Spire Chest
-/* 62 */{0x17, 5, stage::allStages[0], 12, 0x7, 0xFF, 0b000000000010001000000, -10687.0947270, -299.3999940, -1161.5905760, nullptr, nullptr}, //LBT West Lower Small Chest
-/* 63 */{0x17, 5, stage::allStages[0], 13, 0x7, 0xFF, 0b100000000010001000000, -20310.0000000, 4015.0000000, 460.0000000, nullptr, nullptr}, //LBT West Water Supply Small Chest
-/* 64 */{0x24, 2, stage::allStages[0], 13, 0x7, 0x7, 0b100000000010001000000, -23100.0000000, 4200.0000000, -85.0000000, nullptr, nullptr}, //LBT Compass Chest
-/* 65 */{0x04, 7, stage::allStages[0], 11, 0x7, 0xFF, 0b101000000000001000000, -14158.2880860, 700.0000000, 2868.1103520, nullptr, nullptr}, //LBT West Second Floor Southwest Underwater Chest
-/* 66 */{0x04, 7, stage::allStages[0], 12, 0x7, 0xFF, 0b100000000010001000000, -10180.6718750, 1500.0000000, -1939.7305910, nullptr, nullptr}, //LBT West Second Floor Central Small Chest
-/* 67 */{0x04, 7, stage::allStages[0], 11, 0x7, 0xFF, 0b000000000000001000000, -10950.0000000, 1450.0000000, 2590.0000000, nullptr, nullptr}, //LBT West Second Floor Northeast Chest
-/* 68 */{0x18, 5, stage::allStages[0], 11, 0x7, 0xFF, 0b100000000010001000000, -9270.0000000, 1450.0000000, -2100.0000000, nullptr, nullptr}, //LBT West Second Floor Southeast Chest
-/* 69 */{0x26, 2, stage::allStages[0], 6, 0x7, 0x7, 0b101000001010001000000, -16549.8789060, -1345.7093510, 2820.3918460, nullptr, nullptr}, //LBT Big Key Chest
-/* 70 */{0x16, 5, stage::allStages[0], 5, 0x7, 0xFF, 0b101000000010001000000, -18544.2207030, -200.0000000, 475.5745850, nullptr, nullptr}, //LBT Underwater Maze Small Chest
-/* 71 */{0x21, 3, stage::allStages[0], 8, 0x7, 0xFF, 0b100000000010001000000, 11356.2246090, -550.0000000, 4896.6640620, nullptr, nullptr}, //LBT East Stalactite Heart Piece Chest
-/* 72 */{0x21, 3, stage::allStages[36], 1, 0x12, 0xFF, 0b100000100000000000010, -211.8681490, -61.3470460, -2693.1110840, nullptr, nullptr}, // Grotto - Deku Baba Heart Piece Chest
-/* 73 */{0x06, 7, stage::allStages[35], 0, 0x8, 0xFF, 0b100000000010000000010, 28.7614960, 2.9684250, -455.4558110, nullptr, nullptr}, //Grotto - Helmasaur Chest
-/* 74 */{0x1A, 5, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, -655.6493530, 1069.5000000, -4819.0908200, nullptr, nullptr}, //Lake Lanturn Cave First Chest
-/* 75 */{0x03, 7, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, 682.1680300, 1069.5000000, -6179.2060550, nullptr, nullptr}, //Lake Lanturn Cave Second Chest
-/* 76 */{0x04, 7, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, 2067.4831540, 966.9400020, -7130.3203120, nullptr, nullptr}, //Lake Lanturn Cave Third Chest
-/* 77 */{0x0E, 5, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, 9980.4072270, 353.3800050, -7188.2241210, nullptr, nullptr}, //Lake Lanturn Cave Fourth Chest
-/* 78 */{0x04, 7, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, 8154.4853520, -721.9500120, -16215.0576170, nullptr, nullptr}, //Lake Lanturn Cave Fifth Chest
-/* 79 */{0x06, 7, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, 1585.2146000, -1584.6899410, -14877.4931640, nullptr, nullptr}, //Lake Lanturn Cave Sixth Chest
-/* 80 */{0x04, 7, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, 1678.4635010, -1586.6899410, -16192.1738280, nullptr, nullptr}, //Lake Lanturn Cave Seventh Chest
-/* 81 */{0x1A, 5, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, -642.0394290, -1703.1999510, -18994.8613280, nullptr, nullptr}, //Lake Lanturn Cave Eighth Chest
-/* 82 */{0x0E, 5, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, -7978.3588870, -2572.7099610, -16192.1738280, nullptr, nullptr}, //Lake Lanturn Cave Ninth Chest
-/* 83 */{0x05, 7, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, -9292.6113280, -2572.7099610, -17523.3867190, nullptr, nullptr}, //Lake Lanturn Cave Tenth Chest
-/* 84 */{0x1B, 5, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, 2974.3283690, -4197.5800780, -20501.6816410, nullptr, nullptr}, //Lake Lanturn Cave Eleventh Chest
-/* 85 */{0x05, 7, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, 1675.3985600, -4197.5800780, -21755.7343750, nullptr, nullptr}, //Lake Lanturn Cave Twelfth Chest
-/* 86 */{0x12, 5, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, 3981.5319820, -4081.0800780, -19125.3964840, nullptr, nullptr}, //Lake Lanturn Cave Thirtennth Chest
-/* 87 */{0x06, 7, stage::allStages[33], 0, 0x5, 0xFF, 0b110000001000000000000, 8324.2236330, -4070.1899410, -17814.0156250, nullptr, nullptr}, //Lake Lanturn Cave Fourteenth Chest
-/* 88 */{0x21, 3, stage::allStages[33], 0, 0x5, 0xFF, 0b110000001000000000000, 6582.5747070, -5144.5200200, -10032.9658200, nullptr, nullptr}, //Lake Lanturn Cave Heart Piece Chest
-/* 89 */{0x06, 7, stage::allStages[39], 4, 0x8, 0xFF, 0b000000000000000000010, -312.1882930, -27.1700000, -1501.0155030, nullptr, nullptr}, //Grotto - Water Toadpoli Chest
-/* 90 */{0x05, 7, stage::allStages[52], 0, 0x6, 0xFF, 0b001000000010000000000, -91673.9453120, -16547.1699220, 49208.8203120, nullptr, nullptr}, //Outside Lanayru Spring - Left Statue Small Chest
-/* 91 */{0x06, 7, stage::allStages[52], 0, 0x6, 0xFF, 0b001000000010000000000, -88884.070312, -16939.031250, 49405.648438, nullptr, nullptr}, //Outside Lanayru Spring - Right Statue Chest
-/* 92 */{0x02, 7, stage::allStages[52], 1, 0x5, 0xFF, 0b001000000000000000000, 593.5773930, -1276.7792970, 128.1360020, nullptr, nullptr}, //Lanayru Spring Underwater Left Chest
-/* 93 */{0x03, 7, stage::allStages[52], 1, 0x5, 0xFF, 0b001000000000000000000, -1262.2436520, -1380.8292240, 68.6994780, nullptr, nullptr}, //Lanayru Spring Underwater Right Chest
-/* 94 */{0x02, 7, stage::allStages[52], 1, 0x6, 0xFF, 0b000000000010000000000, -33.7100300, 1406.5571290, 4875.7338870, nullptr, nullptr}, //Lanayru Spring Southern Room Left Chest
-/* 95 */{0x0A, 5, stage::allStages[52], 1, 0x6, 0xFF, 0b000000000010000000000, 486.2900090, 1406.5479740, 4875.7338870, nullptr, nullptr}, //Lanayru Spring Southern Room Right Chest
-/* 96 */{0x21, 3, stage::allStages[52], 1, 0x6, 0xFF, 0b110000000010000000000, 224.6442720, 1406.5999760, 4862.4682620, nullptr, nullptr}, //Lanayru Spring Heart Piece Chest
-/* 97 */{0x06, 7, stage::allStages[52], 0, 0x6, 0xFF, 0b001000000000000000000, -102601.6640620, -16650.6562500, 43399.9570310, nullptr, nullptr}, //Isle of Riches Top Platform
-/* 98 */{0x21, 3, stage::allStages[52], 0, 0x6, 0xFF, 0b001000000000000000000, -102682.2031250, -17271.6835940, 43179.0781250, nullptr, nullptr}, //Isle of Riches 2nd Level
-/* 99 */{0x05, 7, stage::allStages[52], 0, 0x6, 0xFF, 0b001000000000000000000, -102990.2421880, -17760.8300780, 42850.2382810, nullptr, nullptr}, //Isle of Riches 3rd Level
-/* 100 */{0x04, 7, stage::allStages[52], 0, 0x6, 0xFF, 0b001000000000000000000, -103540.7812500, -18170.2578120, 42296.2421880, nullptr, nullptr}, //Isle of Riches 4th Level
-/* 101 */{0x03, 7, stage::allStages[52], 0, 0x6, 0xFF, 0b001000000000000000000, -104351.7031250, -18485.7714840, 41482.6367190, nullptr, nullptr}, //Isle of Riches 5th Level
-/* 102 */{ 0x06, 7, stage::allStages[39], 4, 0x8, 0xFF, 0b101000000000000000010, -371.4389950, -27.1700000, -1627.2565920, nullptr, nullptr }, //Grotto - Shell Blade Chest
-/* 103 */{0x05, 7, stage::allStages[50], 0, 0x6, 0xFF, 0b010000000000000000000, 200.0000000, -349.6226810, -1900.0000000, nullptr, nullptr}, //ZD Underwater Right Chest
-/* 104 */{0x05, 7, stage::allStages[50], 0, 0x6, 0xFF, 0b111100000000000000000, -200.0000000, -349.4964290, -1900.0000000, nullptr, nullptr}, //ZD Underwater Left Chest
-/* 105 */{ 0x05, 7, stage::allStages[38], 3, 0x8, 0xFF, 0b110000000000000000010, -1125.7841800, -133.9226530, -3012.3530270, nullptr, nullptr }, //Grotto - Skulltula Chest
-/* 106 */{0x06, 7, stage::allStages[56], 10, 0x6, 0xFF, 0b001000000000000000000, -46800.0000000, -4800.0000000, -22650.0000000, nullptr, nullptr}, //Behind Gate Underwater Chest
-/* 107 */{0x06, 7, stage::allStages[56], 13, 0x7, 0xFF, 0b000000000010000000000, -94100.0000000, -4420.0000000, 30009.9199220, nullptr, nullptr}, //Bridge Vines Chest
-/* 108 */{ 0x06, 7, stage::allStages[38], 3, 0x8, 0xFF, 0b110000000010000000010, -1061.2969970, -132.2552490, -3053.6071780, nullptr, nullptr }, //Grotto - Bubble Chest
-/* 109 */{0x05, 7, stage::allStages[56], 13, 0x7, 0xFF, 0b100000001010000000000, -80910.0000000, -6000.0000000, 64780.0000000, nullptr, nullptr}, //Outside Bubble Grotto Chest
-/* 110 */{0x06, 7, stage::allStages[56], 6, 0x7, 0xFF, 0b000000000010000000000, -46040.0000000, -9100.0000000, 80025.0000000, nullptr, nullptr}, //Faron Under Bridge Chest
-/* 111 */{ 0x04, 7, stage::allStages[36], 1, 0x8, 0xFF, 0b000000000000000000010, 578.9967040, -266.3237300, -2138.4619140, nullptr, nullptr }, //Grotto - Chu, Baba, and Keese Right Chest
-/* 112 */{ 0x03, 7, stage::allStages[36], 1, 0x8, 0xFF, 0b000000000000000000010, -281.6463620, -300.0000000, 910.2941280, nullptr, nullptr }, //Grotto - Chu, Baba, and Keese Rear Chest
-/* 113 */{ 0x04, 7, stage::allStages[36], 1, 0x8, 0xFF, 0b000000000000000000010, -754.0296020, -256.7704770, -3001.7814940, nullptr, nullptr }, //Grotto - Chu, Babe, and Keese Left Chest
-/* 114 */{0x21, 3, stage::allStages[47], 0, 0x4, 0xFF, 0b000000000000000000000, -1646.0109860, 379.2999880, 8487.9677730, nullptr, nullptr}, //Death Mountain Alcove Heart Piece Chest
-/* 115 */{0x05, 7, stage::allStages[3], 7, 0x7, 0xFF, 0b101000000010000000000, 2700.0000000, 4275.0000000, -19550.0000000, nullptr, nullptr}, //GM Outside Clawshot Chest
-/* 116 */{0x04, 7, stage::allStages[32], 0, 0x5, 0xFF, 0b000000001100000000000, -1056.4636230, 3145.5432130, -4376.8500980, nullptr, nullptr}, //Eldin Lantern Cave First Chest
-/* 117 */{0x21, 3, stage::allStages[32], 0, 0x5, 0xFF, 0b000000001100000000000, 6452.6201170, 4447.9018550, -6947.8505860, nullptr, nullptr}, //Eldin Lantern Cave Heart Piece Chest
-/* 118 */{0x05, 7, stage::allStages[32], 0, 0x5, 0xFF, 0b000000001100000000000, 7333.7602540, 4152.1391600, 1235.8031010, nullptr, nullptr}, //Eldin Lantern Cave Second Chest
-/* 119 */{ 0x06, 7, stage::allStages[57], 16, 0x8, 0xFF, 0b100000000010000000010, -53600.0000000, -3592.9699710, 23830.0000000, nullptr, nullptr }, //Castle Pillar Chest
-/* 120 */{ 0x06, 7, stage::allStages[39], 4, 0x8, 0xFF, 0b000000000000000000010, -240.3374330, -27.1700000, -1660.1081540, nullptr, nullptr }, //Grotto - Tetike Chest
-/* 121 */{ 0x05, 7, stage::allStages[35], 0, 0x8, 0xFF, 0b110000000000000000010, -1037.5682370, 1.0515240, -536.6557620, nullptr, nullptr }, //Grotto - Bombling Left Chest
-/* 122 */{ 0x05, 7, stage::allStages[35], 0, 0x8, 0xFF, 0b110000000000000000010, -193.2892910, 150.0000000, -1135.5745850, nullptr, nullptr }, //Grotto - Bombling Right Chest
-/* 123 */{ 0x05, 7, stage::allStages[39], 4, 0x8, 0xFF, 0b000000000000000000010, -251.5004430, -27.1700000, -1691.9121090, nullptr, nullptr }, //Grotto - Water Bomb Fish Chest
-/* 124 */{ 0x06, 7, stage::allStages[38], 3, 0x9, 0xFF, 0b000000000000000000010, -1066.0302730, -132.1377870, -3046.8808590, nullptr, nullptr }, //Grotto - Desert Skulltula Chest
-/* 125 */{ 0x04, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000010000000000, 51585.6210940, 1536.1500240, 58741.2500000, nullptr, nullptr }, //Desert Peahat Chest
-/* 126 */{ 0x04, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 51813.6796880, 171.0510250, 46656.2773440, nullptr, nullptr }, //East Canyon Chest
-/* 127 */{ 0x0E, 5, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 30472.5644530, 778.0640260, 50140.5703120, nullptr, nullptr }, //Desert Lone Small Chest
-/* 128 */{0x04, 7, stage::allStages[34], 10, 0x7, 0xFF, 0b000000000010000000000, 13825.0000000, 137.5000000, -34250.0000000, nullptr, nullptr}, //Eldin Stockcave Small Chest
-/* 129 */{0x06, 7, stage::allStages[34], 10, 0x7, 0xFF, 0b111000000010000000000, 9577.0000000, -2833.8898930, -33492.0000000, nullptr, nullptr}, //Eldin Stockcave Lanturn Chest
-/* 130 */{0x21, 3, stage::allStages[34], 10, 0x7, 0xFF, 0b101000000010000000000, 9515.7099610, -2850.0000000, -31912.3808590, nullptr, nullptr}, //Eldin Stockcave Heart Piece Chest
-/* 131 */{ 0x05, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000010000000000, -6940.8110350, 441.2112430, 48305.4023440, nullptr, nullptr },
-/* 132 */{ 0x06, 7, stage::allStages[37], 2, 0x9, 0xFF, 0b110000100010000000010, -128.8401180, 150.0000000, -1330.3356930, nullptr, nullptr },
-/* 133 */{ 0x04, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 9889.4482420, -732.8599850, 17813.8398440, nullptr, nullptr },
-/* 134 */{ 0x06, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 32741.2617190, 158.3099980, 68606.5468750, nullptr, nullptr },
-/* 135 */{ 0x04, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 3104.9711910, -732.8599850, 24575.0351560, nullptr, nullptr },
-/* 136 */{ 0x05, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 4945.0000000, -732.8599850, 25572.0000000, nullptr, nullptr },
-/* 137 */{ 0x0E, 5, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 1845.0000000, -732.8599850, 26130.0000000, nullptr, nullptr },
-/* 138 */{ 0x04, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, -6532.4062500, -732.8599850, 20852.4121090, nullptr, nullptr },
-/* 139 */{ 0x0E, 5, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 4681.0947270, -162.9400020, 12575.7626950, nullptr, nullptr },
-/* 140 */{ 0x0F, 5, stage::allStages[55], 1, 0x9, 0xFF, 0b000000000000000000000, 4761.6406250, 0.0000000, 1580.5701900, nullptr, nullptr },
-/* 141 */{ 0x05, 7, stage::allStages[55], 1, 0x9, 0xFF, 0b000000000000000000000, 2389.0454100, 260.0000000, -1473.3872070, nullptr, nullptr },
-/* 142 */{ 0x05, 7, stage::allStages[55], 3, 0x9, 0xFF, 0b010000000000000000000, 3633.6201170, 840.0000000, -12457.7001950, nullptr, nullptr },
-/* 143 */{ 0x20, 8, stage::allStages[24], 0, 0x9, 0xFF, 0b000000000000000000000, -3000.0000000, -19.0000000, 5600.0000000, nullptr, nullptr },
-/* 144 */{ 0x20, 8, stage::allStages[24], 15, 0x9, 0xFF, 0b000000000000000000000, 4125.0000000, -741.5800170, -2250.0000000, nullptr, nullptr },
-/* 145 */{ 0x21, 3, stage::allStages[24], 2, 0x9, 0xFF, 0b000000000000000000000, 1300.0000000, 62.5000000, -3012.5000000, nullptr, nullptr },
-/* 146 */{ 0x23, 2, stage::allStages[24], 2, 0x9, 0x9, 0b000000000000000000000, -1300.0000000, 50.0000000, -3012.5000000, nullptr, nullptr },
-/* 147 */{ 0x24, 2, stage::allStages[24], 4, 0x9, 0x9, 0b000000000000000100000, 9400.0000000, 990.0599980, 6100.0000000, nullptr, nullptr },
-/* 148 */{ 0x20, 8, stage::allStages[24], 4, 0x9, 0xFF, 0b000000000000000100000, 12275.0000000, 980.0000000, 4537.5000000, nullptr, nullptr },
-/* 149 */{ 0x20, 8, stage::allStages[24], 14, 0x9, 0xFF, 0b000000000000000100000, 4150.0000000, 825.0000000, 775.0000000, nullptr, nullptr },
-/* 150 */{ 0x04, 7, stage::allStages[24], 6, 0x9, 0xFF, 0b000000000000000000000, -4065.0000000, 150.0000000, -2660.0000000, nullptr, nullptr },
-/* 151 */{ 0x04, 7, stage::allStages[24], 6, 0x9, 0xFF, 0b000000000000000000000, -4450.0000000, 400.0000000, 1150.0000000, nullptr, nullptr },
-/* 152 */{ 0x0A, 5, stage::allStages[24], 7, 0x9, 0xFF, 0b000000100100000000000, -9975.0000000, 500.0000000, -600.0000000, nullptr, nullptr },
-/* 153 */{ 0x0A, 5, stage::allStages[24], 7, 0x9, 0xFF, 0b000000100100000000000, -8113.0000000, 500.0000000, -1382.0000000, nullptr, nullptr },
-/* 154 */{ 0x20, 8, stage::allStages[24], 16, 0x9, 0xFF, 0b000000000000000000000, 3970.0000000, -1050.0000000, -6080.0000000, nullptr, nullptr },
-/* 155 */{ 0x41, 0, stage::allStages[26], 51, 0x9, 0x9, 0b000100000010000000000, 0.0000000, 50.0000000, -6200.0000000, nullptr, nullptr },
-/* 156 */{ 0x0B, 5, stage::allStages[24], 13, 0x10, 0xFF, 0b000000000000100000000, -8331.4091800, -1800.0000000, -3677.7468260, nullptr, nullptr },
-/* 157 */{ 0x04, 7, stage::allStages[24], 13, 0x10, 0xFF, 0b000000000000100000000, -10212.5000000, -1840.0000000, -3725.0000000, nullptr, nullptr },
-/* 158 */{ 0x03, 7, stage::allStages[24], 13, 0x10, 0xFF, 0b000000000000100000000, -10812.5000000, -1825.0000000, -5712.5000000, nullptr, nullptr },
-/* 159 */{ 0x21, 3, stage::allStages[24], 13, 0x10, 0xFF, 0b000000000000100000000, -5475.0000000, -1325.0000000, -4875.0000000, nullptr, nullptr },
-/* 160 */{ 0x03, 7, stage::allStages[24], 13, 0x10, 0xFF, 0b000000000000100000000, -6225.0000000, -1125.0000000, -7275.0000000, nullptr, nullptr },
-/* 161 */{ 0x26, 2, stage::allStages[24], 9, 0x10, 0x10, 0b000000000000100000000, -3675.0000000, 500.0000000, -7250.0000000, nullptr, nullptr },
-/* 162 */{ 0x21, 3, stage::allStages[56], 11, 0x10, 0xFF, 0b000000000000100000000, -88260.0000000, 2950.0000000, -8150.0000000, nullptr, nullptr },
-/* 163 */{ 0x0A, 5, stage::allStages[36], 1, 0x10, 0xFF, 0b100000000000100000010, 464.9176030, -262.3106380, -709.6952510, nullptr, nullptr },
-/* 164 */{ 0x0A, 5, stage::allStages[36], 1, 0x10, 0xFF, 0b100000000000100000010, -1153.7760010, -255.8396450, -980.6660160, nullptr, nullptr },
-/* 165 */{ 0x21, 3, stage::allStages[36], 1, 0x10, 0xFF, 0b100000100000100000010, -211.8499450, -60.9387400, -2691.0991210, nullptr, nullptr },
-/* 166 */{ 0x06, 7, stage::allStages[57], 16, 0x10, 0xFF, 0b100000000010100000000, -51500.0000000, -5180.0000000, 25970.0000000, nullptr, nullptr },
-/* 167 */{ 0x05, 7, stage::allStages[35], 0, 0x8, 0xFF, 0b110000000000000000010, -277.2709660, 150.0000000, -1096.2886960, nullptr, nullptr },
-/* 168 */{0x04, 7, stage::allStages[45], 5, 0x1, 0xFF, 0b000000000000000000000, -25790.1093750, 330.0000000, -19842.9355470, nullptr, nullptr}, //Faron Mist Stump Chest
-/* 169 */{0x03, 7, stage::allStages[45], 5, 0x1, 0xFF, 0b000000000000000000000, -24845.1308590, -100.0000000, -26998.7226560, nullptr, nullptr}, //Faron Mist North Small Chest
-/* 170 */{0x05, 7, stage::allStages[45], 5, 0x1, 0xFF, 0b000000000000000000000, -25966.7851560, -83.1305240, -16071.9599610, nullptr, nullptr}, //Faron Mist East Chest
-/* 171 */{ 0x20, 8, stage::allStages[27], 4, 0x11, 0xFF, 0b000000000000000000000, -1500.0000000, -60.0000000, -4458.0000000, nullptr, nullptr },
-/* 172 */{ 0x04, 7, stage::allStages[27], 4, 0x11, 0xFF, 0b000000000000000000000, 1350.0000000, 50.0000000, -1400.0000000, nullptr, nullptr },
-/* 173 */{ 0xF4, 8, stage::allStages[27], 5, 0x11, 0x11, 0b000000000000000100000, 5300.0000000, 0.0000000, -5100.0000000, nullptr, nullptr },
-/* 174 */{ 0x20, 8, stage::allStages[27], 4, 0x11, 0xFF, 0b000000000000000000000, 1350.0000000, -40.0000000, -4150.0000000, nullptr, nullptr },
-/* 175 */{ 0x04, 7, stage::allStages[27], 8, 0x11, 0xFF, 0b000000100100000000000, -4355.0000000, 0.0000000, -2160.0000000, nullptr, nullptr },
-/* 176 */{ 0x24, 2, stage::allStages[27], 8, 0x11, 0x11, 0b000000100100000000000, -3510.0000000, 0.0000000, -1350.0000000, nullptr, nullptr },
-/* 177 */{ 0x0A, 5, stage::allStages[27], 4, 0x11, 0xFF, 0b000000100100000000000, 0.0000000, 0.0000000, -1250.0000000, nullptr, nullptr },
-/* 178 */{ 0xF5, 8, stage::allStages[29], 51, 0x12, 0x12, 0b000000000100000000000, 0.0000000, 0.0000000, -3196.0000000, nullptr, nullptr },
-/* 179 */{ 0x21, 3, stage::allStages[27], 7, 0x12, 0xFF, 0b000000000100000000000, -3600.0000000, 0.0000000, 1600.0000000, nullptr, nullptr },
-/* 180 */{ 0x20, 8, stage::allStages[27], 8, 0x12, 0xFF, 0b000000000100000000000, -4350.0000000, 950.0000000, -3850.0000000, nullptr, nullptr },
-/* 181 */{ 0x21, 3, stage::allStages[27], 0, 0x12, 0xFF, 0b000000000100000000000, 0.0000000, 1118.3201900, 4690.0000000, nullptr, nullptr },
-/* 182 */{ 0x04, 7, stage::allStages[27], 0, 0x12, 0xFF, 0b000000000100000000000, -900.0000000, -50.0000000, 5950.0000000, nullptr, nullptr },
-/* 183 */{ 0x03, 7, stage::allStages[27], 0, 0x12, 0xFF, 0b000000000100000000000, 930.0000000, -50.0000000, 5350.0000000, nullptr, nullptr },
-/* 184 */{ 0x20, 8, stage::allStages[27], 5, 0x12, 0xFF, 0b100000000110000000000, 4350.0000000, 953.0000000, -4900.0000000, nullptr, nullptr },
-/* 185 */{ 0x04, 7, stage::allStages[27], 9, 0x12, 0xFF, 0b000000000100000000000, -5347.3071290, -50.0000000, -6500.8867190, nullptr, nullptr },
-/* 186 */{ 0x0A, 5, stage::allStages[27], 9, 0x12, 0xFF, 0b000000100100000000000, -1818.3217770, 0.0000000, -7562.9838870, nullptr, nullptr },
-/* 187 */{ 0xF6, 2, stage::allStages[27], 11, 0x12, 0x12, 0b100000100100000000000, -4350.0000000, 1050.0000000, -8560.5742190, nullptr, nullptr },
-/* 188 */{ 0x06, 7, stage::allStages[51], 2, 0x12, 0xFF, 0b110000000100000000010, -6233.2583010, -1800.0000000, -9865.0205080, nullptr, nullptr },
-/* 189 */{ 0x06, 7, stage::allStages[38], 3, 0x12, 0xFF, 0b100000000100000000010, -810.7105710, -300.0000000, -2101.0502930, nullptr, nullptr },
-/* 190 */{ 0x21, 3, stage::allStages[30], 0, 0x12, 0xFF, 0b000000000100000000000, 0.0000000, 0.0000000, -7900.0000000, nullptr, nullptr },
-/* 191 */{ 0x0D, 5, stage::allStages[54], 3, 0x12, 0xFF, 0b110100000000000000000, -15394.4238280, 2300.0000000, 2483.9230960, nullptr, nullptr },
-/* 192 */{ 0x06, 7, stage::allStages[54], 3, 0x12, 0xFF, 0b000000000000100000000, -6840.3515620, 2000.0000000, 6329.0605470, nullptr, nullptr },
-/* 193 */{ 0x20, 8, stage::allStages[9], 0, 0x12, 0xFF, 0b110001000000000000000, 2500.0000000, 56.2500000, 368.7500000, nullptr, nullptr },
-/* 194 */{ 0x10, 5, stage::allStages[9], 1, 0x12, 0xFF, 0b000001000000000000000, -12.5000000, 1100.0000000, 8362.5000000, nullptr, nullptr },
-/* 195 */{ 0x04, 7, stage::allStages[9], 1, 0x12, 0xFF, 0b000001000000000000000, 5795.0000000, 2505.0000000, 4210.0000000, nullptr, nullptr },
-/* 196 */{ 0x23, 2, stage::allStages[9], 1, 0x12, 0x12, 0b000001000000000000000, 6925.0000000, 2325.0000000, 3400.0000000, nullptr, nullptr },
-/* 197 */{ 0x20, 8, stage::allStages[9], 3, 0x12, 0xFF, 0b100001000000100000000, -1737.5000000, 4500.0000000, 5812.5000000, nullptr, nullptr },
-/* 198 */{ 0x24, 2, stage::allStages[9], 4, 0x12, 0x12, 0b100001000000100000000, -3450.0000000, 4450.0000000, -5510.0000000, nullptr, nullptr },
-/* 199 */{ 0x05, 7, stage::allStages[9], 5, 0x12, 0xFF, 0b100001000000100000000, -30.0000000, 5750.0000000, -1515.0000000, nullptr, nullptr },
-/* 200 */{ 0x20, 8, stage::allStages[9], 7, 0x12, 0xFF, 0b100001000000100000000, 5319.0000000, 7550.0000000, 8592.7500000, nullptr, nullptr },
-/* 201 */{ 0x05, 7, stage::allStages[9], 7, 0x12, 0xFF, 0b100001000000100000000, 5300.0000000, 8100.0000000, -800.0000000, nullptr, nullptr },
-/* 202 */{ 0x46, 0, stage::allStages[11], 51, 0x12, 0x12, 0b100001000000100100000, 0.0000000, -350.0000000, -2400.0000000, nullptr, nullptr },
-/* 203 */{ 0x04, 7, stage::allStages[9], 5, 0x12, 0xFF, 0b100001000010100000000, 1195.0000000, 7400.0000000, 2350.0000000, nullptr, nullptr },
-/* 204 */{ 0x04, 7, stage::allStages[9], 6, 0x12, 0xFF, 0b100001000010100000000, 6135.0000000, 8000.0000000, 0.0000000, nullptr, nullptr },
-/* 205 */{ 0x26, 2, stage::allStages[9], 6, 0x12, 0x12, 0b100001000010100000000, 5350.0000000, 7400.0000000, 0.0000000, nullptr, nullptr },
-/* 206 */{ 0x21, 3, stage::allStages[9], 4, 0x13, 0xFF, 0b100001000000110000000, -8740.0000000, 5100.0000000, -4515.0000000, nullptr, nullptr },
-/* 207 */{ 0x04, 7, stage::allStages[9], 3, 0x12, 0xFF, 0b100001000000100000000, 0.0000000, 4850.0000000, 9200.0000000, nullptr, nullptr },
-/* 208 */{ 0x21, 3, stage::allStages[9], 3, 0x13, 0xFF, 0b100001000000110000000, 1740.0000000, 4500.0000000, 5815.0000000, nullptr, nullptr },
-/* 209 */{ 0x21, 3, stage::allStages[54], 2, 0x13, 0xFF, 0b100001000000010000000, 606.7956540, 1005.0000000, 8005.3901370, nullptr, nullptr },
-/* 210 */{ 0x04, 7, stage::allStages[53], 4, 0x13, 0xFF, 0b000000000000000000000, 6500.0000000, 426.0000000, -977.0000000, nullptr, nullptr },
-/* 211 */{ 0x21, 3, stage::allStages[56], 0, 0x13, 0xFF, 0b000000000000010000000, 31257.5957030, 900.0000000, -16115.4990230, nullptr, nullptr },
-/* 212 */{ 0x06, 7, stage::allStages[56], 3, 0x13, 0xFF, 0b000000000000010000000, -10245.4765620, -4400.0000000, 42817.0467500, nullptr, nullptr },
-/* 213 */{ 0x06, 7, stage::allStages[57], 8, 0x13, 0xFF, 0b000000000000010000000, -79819.4140620, -1301.2399900, 22400.6718750, nullptr, nullptr },
-/* 214 */{ 0x06, 7, stage::allStages[56], 13, 0x13, 0xFF, 0b100000000010010000000, -93284.5703120, -5000.0000000, 18235.7246090, nullptr, nullptr },
-/* 215 */{ 0x21, 3, stage::allStages[45], 5, 0x13, 0xFF, 0b100000100000010000000, -21012.1542970, 1350.0000000, -20630.3222660, nullptr, nullptr },
-/* 216 */{ 0x06, 7, stage::allStages[59], 0, 0x13, 0xFF, 0b000000000000010000000, 16263.9707030, 989.6500240, 60708.4648440, nullptr, nullptr },
-/* 217 */{ 0x18, 5, stage::allStages[12], 0, 0x14, 0xFF, 0b101000000010000000000, -1170.0834960, -755.0000000, 6670.0000000, nullptr, nullptr },
-/* 218 */{ 0x04, 7, stage::allStages[12], 0, 0x14, 0xFF, 0b101000000010000000000, 1170.0000000, -755.0000000, 6670.0000000, nullptr, nullptr },
-/* 219 */{ 0x20, 8, stage::allStages[12], 10, 0x14, 0xFF, 0b100000000010100000000, -14514.4443360, 0.0000000, -12000.8310550, nullptr, nullptr },
-/* 220 */{ 0x23, 2, stage::allStages[12], 5, 0x14, 0x14, 0b101000000010100000000, 17665.1347660, 0.0000000, -11924.1035160, nullptr, nullptr },
-/* 221 */{ 0x03, 7, stage::allStages[12], 7, 0x14, 0xFF, 0b101000000010100000000, 15824.6093750, -110.0000000, -9750.6855470, nullptr, nullptr },
-/* 222 */{ 0x04, 7, stage::allStages[12], 7, 0x14, 0xFF, 0b101000000010100000000, 17550.0000000, 1500.0000000, -7200.0000000, nullptr, nullptr },
-/* 223 */{ 0x05, 7, stage::allStages[12], 7, 0x14, 0xFF, 0b101000000010100000000, 13470.0000000, 1500.0000000, -7925.0000000, nullptr, nullptr },
-/* 224 */{ 0x47, 0, stage::allStages[14], 51, 0x14, 0x14, 0b101000000010100000000, -0.3629600, 600.0000000, 2279.7690430, nullptr, nullptr },
-/* 225 */{ 0x24, 2, stage::allStages[12], 4, 0x15, 0x15, 0b101000000001100000000, 10800.0000000, -1775.0000000, -11850.0000000, nullptr, nullptr },
-/* 226 */{ 0x0F, 5, stage::allStages[12], 10, 0x15, 0xFF, 0b100000000001100000000, -11099.1240230, -1500.0000000, -15658.8515620, nullptr, nullptr },
-/* 227 */{ 0x04, 7, stage::allStages[12], 10, 0x15, 0xFF, 0b100000000001100000000, -13458.7949220, 0.0000000, -13410.5566410, nullptr, nullptr },
-/* 228 */{ 0x0B, 5, stage::allStages[12], 10, 0x15, 0xFF, 0b100000000001100000000, -10742.9599610, 0.0000000, -15156.7197270, nullptr, nullptr },
-/* 229 */{ 0x03, 7, stage::allStages[12], 11, 0x15, 0xFF, 0b100000000001100000000, -15654.8398440, 2840.2299800, -18906.7890620, nullptr, nullptr },
-/* 230 */{ 0x0F, 5, stage::allStages[12], 11, 0x15, 0xFF, 0b100000000001100000000, -12630.1699220, 2430.8999020, -19611.4316410, nullptr, nullptr },
-/* 231 */{ 0x21, 3, stage::allStages[12], 11, 0x15, 0xFF, 0b100000000001100000000, -14567.1093750, 2281.0000000, -16989.0351560, nullptr, nullptr },
-/* 232 */{ 0x04, 7, stage::allStages[12], 12, 0x15, 0xFF, 0b100000000001100000000, -15782.7958980, 2980.0000000, -11466.6982420, nullptr, nullptr },
-/* 233 */{ 0x05, 7, stage::allStages[12], 12, 0x15, 0xFF, 0b100000000001100000000, -14270.5380860, 1982.1999510, -7411.9101560, nullptr, nullptr },
-/* 234 */{ 0x0A, 5, stage::allStages[12], 12, 0x15, 0xFF, 0b100000000001100000000, -12592.9677730, 2400.0000000, -13712.7675780, nullptr, nullptr },
-/* 235 */{ 0x21, 3, stage::allStages[12], 12, 0x15, 0xFF, 0b100000000001100000000, -11494.3183590, 3000.0000000, -9888.6738280, nullptr, nullptr },
-/* 236 */{ 0x04, 7, stage::allStages[12], 13, 0x15, 0xFF, 0b100000000001100000000, 75.2376170, 4500.0000000, -10853.4550780, nullptr, nullptr },
-/* 237 */{ 0x05, 7, stage::allStages[12], 13, 0x15, 0xFF, 0b100000000001100000000, 4010.3149410, 4500.0000000, -12451.9033200, nullptr, nullptr },
-/* 238 */{ 0x26, 2, stage::allStages[12], 2, 0x15, 0x15, 0b100000000001100000000, -1090.9830320, 4500.0000000, -12411.7617190, nullptr, nullptr },
-/* 239 */{ 0x04, 7, stage::allStages[12], 2, 0x15, 0xFF, 0b100000000001100000000, 11.8030090, 3000.0000000, -13501.7851560, nullptr, nullptr },
-/* 240 */{ 0x05, 7, stage::allStages[12], 14, 0x15, 0xFF, 0b100000000001100000000, 0.0000000, 894.4799800, -23853.0000000, nullptr, nullptr },
-/* 241 */{ 0x21, 3, stage::allStages[56], 3, 0x15, 0xFF, 0b000000000001000000000, -22100.0000000, -7176.0297850, 52140.0000000, nullptr, nullptr },
-/* 242 */{ 0x06, 7, stage::allStages[52], 1, 0x15, 0xFF, 0b000000000001000000000, -2816.4138180, 1305.0787350, -1395.7875980, nullptr, nullptr },
-/* 243 */{ 0x06, 7, stage::allStages[52], 1, 0x15, 0xFF, 0b000000000001000000000, 2798.9057620, 1322.1817720, -987.1356810, nullptr, nullptr },
-/* 244 */{ 0x06, 7, stage::allStages[57], 16, 0x15, 0xFF, 0b000000000001000000000, -57374.0820310, -9100.0000000, 29237.9062500, nullptr, nullptr },
-/* 245 */{ 0x20, 8, stage::allStages[15], 1, 0x15, 0xFF, 0b000000000000000000000, -3950.0000000, -1071.0000000, 1375.0000000, nullptr, nullptr },
-/* 246 */{ 0x20, 8, stage::allStages[15], 2, 0x15, 0xFF, 0b000000000010000100000, -3950.0000000, -1200.0000000, -5075.0000000, nullptr, nullptr },
-/* 247 */{ 0x24, 2, stage::allStages[15], 2, 0x15, 0x15, 0b000000000010000100000, -2700.0000000, -1196.0000000, -1661.0000000, nullptr, nullptr },
-/* 248 */{ 0x06, 7, stage::allStages[15], 2, 0x15, 0xFF, 0b000000000001000100000, -2400.0000000, -21.2500000, -1550.0000000, nullptr, nullptr },
-/* 249 */{ 0x21, 3, stage::allStages[15], 1, 0x15, 0xFF, 0b000000000010000000000, -6850.0000000, -771.2500000, 3200.0000000, nullptr, nullptr },
-/* 250 */{ 0x05, 7, stage::allStages[15], 4, 0x15, 0xFF, 0b000000000010000000000, 3250.0000000, -696.2500000, 1235.0000000, nullptr, nullptr },
-/* 251 */{ 0x20, 8, stage::allStages[15], 4, 0x15, 0xFF, 0b000000000010000000000, 4650.0000000, -696.2500000, 1235.0000000, nullptr, nullptr },
-/* 252 */{ 0x05, 7, stage::allStages[15], 5, 0x15, 0xFF, 0b000000000001000100000, 5700.0000000, 3.7500000, -4350.0000000, nullptr, nullptr },
-/* 253 */{ 0x05, 7, stage::allStages[15], 5, 0x15, 0xFF, 0b000000000001000100000, 2200.0000000, 3.7500000, -5100.0000000, nullptr, nullptr },
-/* 254 */{ 0x23, 2, stage::allStages[15], 5, 0x15, 0x15, 0b000000000001000100000, 2300.0000000, -396.2500000, -3300.0000000, nullptr, nullptr },
-/* 255 */{ 0x20, 8, stage::allStages[15], 5, 0x15, 0xFF, 0b000000000001000100000, 5600.0000000, -296.2500000, -3300.0000000, nullptr, nullptr },
-/* 256 */{ 0x21, 3, stage::allStages[15], 4, 0x15, 0xFF, 0b000000000001000000000, 5352.5000000, -171.2500000, 3500.0000000, nullptr, nullptr },
-/* 257 */{ 0x05, 7, stage::allStages[15], 4, 0x15, 0xFF, 0b000000000001000000000, 2547.5000000, -171.2500000, 3500.0000000, nullptr, nullptr },
-/* 258 */{0x20, 8, stage::allStages[15], 7, 0xFF, 0xFF, 0b000000000001000000000, 1500.0000000, 128.7500000, 6250.0000000, nullptr, nullptr}, //PoT Central First Room Chest
-/* 259 */{0x26, 2, stage::allStages[15], 11, 0xFF, 0xFF, 0b000000000001000100000, 0.0000000, 3130.0000000, -3600.0000000, nullptr, nullptr}, //PoT Big Key Chest
-/* 260 */{0x20, 8, stage::allStages[15], 11, 0xFF, 0xFF, 0b000000000001000100000, -2900.0000000, -71.2500000, -2055.0000000, nullptr, nullptr}, //PoT Central Outdoor Chest
-/* 261 */{0x20, 8, stage::allStages[15], 8, 0xFF, 0xFF, 0b000000000001000100000, -800.0000000, 1130.0000000, 1200.0000000, nullptr, nullptr}, //PoT Central Tower Chest
-/* 262 */{0x06, 7, stage::allStages[20], 9, 0xFF, 0xFF, 0b000000100000000000000, 4025.0000000, 152.0000000, -11735.0000000, nullptr, nullptr}, //HC Graveyard Grave Switch Room Right Chest
-/* 263 */{0x01, 7, stage::allStages[20], 9, 0xFF, 0xFF, 0b000000100000000000000, 3850.0000000, 152.0000000, -12725.0000000, nullptr, nullptr}, //HC Graveyard Grave Switch Room Front Left Small Chest
-/* 264 */{0x04, 7, stage::allStages[20], 9, 0xFF, 0xFF, 0b000000100000000000000, 4075.0000000, 150.0000000, -12725.0000000, nullptr, nullptr}, //HC Graveyard Grave Switch Room Back Left Small Chest
-/* 265 */{0x20, 8, stage::allStages[20], 9, 0xFF, 0xFF, 0b110000100000010000000, 375.0000000, 600.0000000, -6900.0000000, nullptr, nullptr}, //HC Graveyard Owl Statue Chest
-/* 266 */{0x23, 2, stage::allStages[20], 14, 0xFF, 0xFF, 0b000100000000000000000, 1210.0000000, 0.0000000, -7002.0000000, nullptr, nullptr}, //HC Map Chest
-/* 267 */{0x03, 7, stage::allStages[20], 14, 0xFF, 0xFF, 0b000100000000000000000, 4775.0000000, 1200.0000000, 3875.0000000, nullptr, nullptr}, //HC East Castle Balcony Chest
-/* 268 */{0x04, 7, stage::allStages[20], 13, 0xFF, 0xFF, 0b000000000000000000000, -6420.0000000, 30.0000000, -8017.8183590, nullptr, nullptr}, //HC West Courtyard Northern Small Chest
-/* 269 */{0x04, 7, stage::allStages[20], 13, 0xFF, 0xFF, 0b000000000000000000000, -6400.0000000, 350.0000000, 125.0000000, nullptr, nullptr}, //HC West Courtyard Central Small Chest
-/* 270 */{0x24, 2, stage::allStages[20], 1, 0xFF, 0xFF, 0b000000000010000100000, 2400.0000000, 1250.0000000, -875.0000000, nullptr, nullptr}, //HC Compass Chest
-/* 271 */{0x05, 7, stage::allStages[20], 2, 0xFF, 0xFF, 0b100100000010000000000, 25.0000000, 1875.0000000, -4975.0000000, nullptr, nullptr}, //HC Lantern Staircase Chest
-/* 272 */{0x05, 7, stage::allStages[20], 1, 0xFF, 0xFF, 0b100001000010000100000, -1225.0000000, 2000.0000000, 2125.0000000, nullptr, nullptr}, //HC Main Hall Southwest Chest
-/* 273 */{0x07, 7, stage::allStages[20], 1, 0xFF, 0xFF, 0b100001000010000100000, -2375.0000000, 1250.0000000, -900.0000000, nullptr, nullptr}, //HC Main Hall Northwest Chest
-/* 274 */{0x20, 8, stage::allStages[20], 15, 0xFF, 0xFF, 0b100100000010000000000, 8685.0000000, 2000.0000000, 8690.0000000, nullptr, nullptr}, //HC Southeast Balcony Tower Chest
-/* 275 */{0x26, 2, stage::allStages[20], 15, 0xFF, 0xFF, 0b100100000010000000000, -8700.0000000, 2000.0000000, 8700.0000000, nullptr, nullptr}, //HC Big Key Chest
-/* 276 */{0x02, 7, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 3350.0000000, 6150.0000000, 3675.0000000, nullptr, nullptr}, //HC Treasure Room First Chest
-/* 277 */{0x03, 7, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 3475.0000000, 6150.0000000, 3550.0000000, nullptr, nullptr}, //HC Treasure Room Second Chest
-/* 278 */{0x04, 7, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 3600.0000000, 6150.0000000, 3425.0000000, nullptr, nullptr}, //HC Treasure Room Third Chest
-/* 279 */{0x18, 5, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 3700.0000000, 6150.0000000, 3250.0000000, nullptr, nullptr}, //HC Treasure Room Fourth Chest
-/* 280 */{0x0F, 5, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 3700.0000000, 6150.0000000, 3075.0000000, nullptr, nullptr}, //HC Treasure Room Fifth Chest
-/* 281 */{0x0C, 5, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 3700.0000000, 6150.0000000, 2750.0000000, nullptr, nullptr}, //HC Treasure Room First Small Chest
-/* 282 */{0x01, 7, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 3700.0000000, 6150.0000000, 2525.0000000, nullptr, nullptr}, //HC Treasure Room Second Small Chest
-/* 283 */{0x10, 5, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 3700.0000000, 6150.0000000, 2300.0000000, nullptr, nullptr}, //HC Treasure Room Third Small Chest
-/* 284 */{0x05, 7, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 2650.0000000, 6150.0000000, 2125.0000000, nullptr, nullptr}, //HC Treasure Room Fourth Small Chest
-/* 285 */{0x1B, 5, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 2550.0000000, 6150.0000000, 2225.0000000, nullptr, nullptr}, //HC Treasure Room Fifth Small Chest
-/* 286 */{0x07, 7, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 2450.0000000, 6150.0000000, 2325.0000000, nullptr, nullptr}, //HC Treasure Room Sixth Small Chest
-/* 287 */{0x12, 5, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 2350.0000000, 6150.0000000, 2425.0000000, nullptr, nullptr}, //HC Treasure Room Seventh Small Chest
-/* 288 */{0x06, 7, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 2250.0000000, 6150.0000000, 2525.0000000, nullptr, nullptr}, //HC Treasure Room Eighth Small Chest
-/* 289 */{0x40, 0, stage::allStages[8], 2, 0x1, 0x1, 0b000000000000000000000, 205.3669740, 3901.0000000, -6120.5043950, nullptr, nullptr}, //FT Boomerang
-/* 290 */{ 0x42, 0, stage::allStages[29], 51, 0x11, 0x11, 0b000000100100000000000, -0.0000460, 47.0000000, -473.7650150, nullptr, nullptr }, //SPR Ball and Chain
-/* 291 */{0x2A, 1, stage::allStages[65], 2, 0x1, 0x2, 0b000000000000000000100, -1261.1306150, 450.0000000, 10.0000000, nullptr, nullptr}, //Ordon Shield
-/* 292 */{0x28, 1, stage::allStages[65], 5, 0x1, 0x7, 0b000000000000000000000, 128.0923770, 7.8601500, -167.8504940, nullptr, nullptr}, //Ordon Sword
-/* 293 */{0x4A, 0, stage::allStages[43], 0, 0x0, 0x0, 0b000000000000000000000, -3566.3000000, 579.2000000, 2977.2000000, nullptr, nullptr}, //Fishing Rod
-/* 294 */{0x65, 9, stage::allStages[65], 1, 0x0, 0xFF, 0b000000000000000000000, -55.0000000, 0.0000000, -156.0000000, nullptr, nullptr}, //Sera Bottle
-/* 295 */{0x4B, 12, stage::allStages[65], 1, 0x0, 0x0, 0b000000000000000000000, -55.0000000, 0.0000000, -156.0000000, nullptr, nullptr}, //Slingshot
-/* 296 */{0x48, 0, stage::allStages[45], 3, 0x0, 0x0, 0b100010000000000001000, -13659.0000000, 0.0000000, -14367.0000000, nullptr, nullptr}, //Lantern
-/* 297 */{0x2C, 12, stage::allStages[68], 3, 0x2, 0x2, 0b001000000000000000000, -500.0000000, 320.0000000, -695.0000000, nullptr, nullptr}, //Hylian Shield (Malo)
-/* 298 */{0x2B, 12, stage::allStages[68], 3, 0x2, 0xFF, 0b001000000000000000000, -500.0000000, 320.0000000, -695.0000000, nullptr, nullptr}, //Wooden Shield (Malo)
-/* 299 */{0x55, 1, stage::allStages[74], 7, 0x7, 0x7, 0b111111100010000000000, -4400.0000000, 0.0000000, 2500.0000000, nullptr, nullptr}, //Big Quiver
-/* 300 */{ 0x56, 1, stage::allStages[74], 7, 0x15, 0x15, 0b111111100001000000000, -4400.0000000, 0.0000000, 2500.0000000, nullptr, nullptr }, //Giant Quiver
-/* 301 */{0x2C, 12, stage::allStages[73], 4, 0x5, 0xFF, 0b111111100000000000000, -494.7930300, 100.0000000, 3701.0000000, nullptr, nullptr}, //Hylian Shield (Goron)
-/* 302 */{0x21, 3, stage::allStages[46], 0, 0x2, 0xFF, 0b111111100000000000000, -2010.0000000, 151.0000000, 7897.0000000, nullptr, nullptr}, //Kakariko Bomb Rock Spire Heart Piece
-/* 303 */{0x21, 3, stage::allStages[56], 6, 0x2, 0xFF, 0b110110000000000000000, -46688.0000000, -7953.0000000, 86307.0000000, nullptr, nullptr}, //Faron Tree Heart Piece
-/* 304 */{0x21, 3, stage::allStages[56], 3, 0x2, 0xFF, 0b110110000000000000000, -21270.0000000, -5620.0000000, 55553.0000000, nullptr, nullptr}, //Kakariko Gorge Spire Heart Piece
-/* 305 */{0x22, 3, stage::allStages[7], 50, 0x2, 0xFF, 0b110110000000000000000, 50.0000000, 3.0000000, 1703.0000000, nullptr, nullptr}, //Diababa Heart Container
-/* 306 */{0x21, 3, stage::allStages[41], 0, 0x2, 0xFF, 0b001000000000000000000, -4358.0000000, 15307.0000000, -19476.0000000, nullptr, nullptr}, //Herding Goats Heart Piece
-/* 307 */{0x22, 3, stage::allStages[4], 50, 0x4, 0xFF, 0b111111000000000000000, 203.0000000, 0.0000000, 830.0000000, nullptr, nullptr}, //Fyrus Heart Container
-/* 308 */{0x22, 3, stage::allStages[1], 50, 0x7, 0xFF, 0b111111010010001000000, -915.0000000, -23960.0000000, 8916.0000000, nullptr, nullptr}, //Morpheel Heart Container
-/* 309 */{ 0x22, 3, stage::allStages[25], 50, 0x10, 0xFF, 0b111111010010101000000, 85.0000000, 1799.0000000, -1264.0000000, nullptr, nullptr },
-/* 310 */{ 0x22, 3, stage::allStages[28], 50, 0x12, 0xFF, 0b111111010110101000000, 279.0000000, 43.0000000, -865.0000000, nullptr, nullptr },
-/* 311 */{ 0x22, 3, stage::allStages[10], 50, 0x13, 0xFF, 0b111111010110111000000, 900.0000000, 0.0000000, 0.0000000, nullptr, nullptr },
-/* 312 */{ 0x22, 3, stage::allStages[13], 50, 0x15, 0xFF, 0b111111010101111000000, 317.0000000, 0.0000000, 764.0000000, nullptr, nullptr },
-/* 313 */{0x22, 3, stage::allStages[16], 10, 0xFF, 0xFF, 0b111111010101111000000, -3.0000000, 2525.0000000, -14603.0000000, nullptr, nullptr}, //Zant Heart Container
-/* 314 */{0x31, 1, stage::allStages[48], 0, 0x5, 0x5, 0b111111100000000000000, 21364.0000000, 525.0000000, -50.0000000, nullptr, nullptr}, //Zora Armor
-/* 315 */{ 0x30, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr }, //Magic Armor
-/* 316 */{0x4F, 1, stage::allStages[52], 0, 0x5, 0xFF, 0b111111110000000000000, -77679.9375000, -18765.0000000, 40764.0000000, nullptr, nullptr}, //Giant Bomb Bag
-/* 317 */{ 0x3D, 0, stage::allStages[48], 0, 0xFF, 0x10, 0b111111010010101000000, 21070.0000000, 500.0000000, 181.0000000, nullptr, nullptr },
-/* 318 */{ 0x3E, 12, stage::allStages[68], 3, 0x4, 0x12, 0b111111000000000000000, -500.0000000, 320.0000000, -695.0000000, nullptr, nullptr }, //Hawkeye
-/* 319 */{0x51, 0, stage::allStages[50], 0, 0x5, 0xFF, 0b111111010000000000000, 44.0000000, -3854.0000000, -2626.0000000, nullptr, nullptr}, //Goron Bomb Bag
-/* 320 */{0x50, 0, stage::allStages[68], 1, 0x4, 0x4, 0b111111000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr}, //Barnes Bomb Bag
-/* 321 */{0x51, 0, stage::allStages[52], 0, 0x5, 0xFF, 0b111111100000000000000, -77680.0000000, -18765.0000000, 40764.0000000, nullptr, nullptr},//Iza Bomb Bag
-/* 322 */{ 0x90, 4, stage::allStages[52], 0, 0xFF, 0x8, 0b111111010010001000000, -116365.0000000, -13860.0000000, 58454.0000000, nullptr, nullptr },
-/* 323 */{ 0x91, 4, stage::allStages[51], 0, 0xFF, 0x10, 0b000000000000000000000, 31662.0000000, -13330.0000000, -11934.0000000, nullptr, nullptr },
-/* 324 */{ 0x80, 4, stage::allStages[46], 0, 0xFF, 0x13, 0b000000000000000000000, -344.0000000, 0.0000000, 234.0000000, nullptr, nullptr },
-/* 325 */{ 0x81, 4, stage::allStages[53], 5, 0xFF, 0x13, 0b000000000000000000000, 3505.0000000, -1150.0000000, 3388.0000000, nullptr, nullptr },
-/* 326 */{ 0x82, 4, stage::allStages[57], 16, 0xFF, 0x13, 0b000000000000000000000, -51480.0000000, -6425.0000000, 34034.0000000, nullptr, nullptr },
-/* 327 */{ 0x83, 4, stage::allStages[63], 0, 0xFF, 0x13, 0b000000000000000000000, 2360.0000000, 104.0000000, -1150.0000000, nullptr, nullptr },
-/* 328 */{ 0x84, 4, stage::allStages[68], 0, 0xFF, 0x13, 0b000000000000000000000, -386.0000000, 0.0000000, 393.0000000, nullptr, nullptr }, //Horse Call
-/* 329 */{0x9d, 9, stage::allStages[45], 4, 0x1, 0xFF, 0b000000000000000000000, -13659.433594, -0.454284, -14367.083008, nullptr, nullptr}, //Coro Bottle
-/* 330 */{0x75, 9, stage::allStages[73], 5, 0xFF, 0xFF, 0b000000000000000000000, 4250.363281, 134.492020, 1813.639648, nullptr, nullptr}, //Jovani Bottle
-/*TODO 331 not randomized*/{ 0x60, 9, stage::allStages[62], 0, 0x5, 0xFF, 0b000000000000000000000, -13659.0000000, 0.0000000, -14367.0000000, nullptr, nullptr },
-/* 332 */{0x2B, 12, stage::allStages[47], 3, 0x3, 0xFF, 0b001000000000000000000, -6545.0000000, -125.0000000, -2275.0000000, nullptr, nullptr}, //Wooden Shield (Goron)
-/* 333 */{0x21, 3, stage::allStages[46], 0, 0x4, 0xFF, 0b000001000000000000000, -900.000000, 0.780221, 6600.000000, nullptr, nullptr}, //Bow Shooting Game Heart Piece
-/* 334 */{0x21, 3, stage::allStages[53], 2, 0x5, 0xFF, 0b000000000000000000000, -4142.703125, 0.000000, -569.375000, nullptr, nullptr}, //Donation Heart Piece
-/* 335 */{ 0x21, 3, stage::allStages[62], 0, 0xFF, 0xFF, 0b101000000010000000000, -2678.128906, -167.094162, 2246.794186, nullptr, nullptr },
-/* 336 */{ 0x21, 3, stage::allStages[56], 0, 0x8, 0xFF, 0b000000000000000000000, -25148.583984, -200.000000, 9814.881836, nullptr, nullptr },
-/* 337 */{ 0x21, 3, stage::allStages[61], 0, 0x8, 0xFF, 0b000000000000000000000, 3618.216797, 232.476608, 541.905518, nullptr, nullptr },
-/* 338 */{ 0x21, 3, stage::allStages[55], 1, 0x8, 0xFF, 0b000000000000000000000, 4708.924805, 260.000000, -3120.967529, nullptr, nullptr },
-/* 339 */{ 0x23, 2, stage::allStages[27], 1, 0xFF, 0x11, 0b000000000000000000000, 293.920288, 0.000000, -337.167480, nullptr, nullptr }, // Yeta Map
-/* 340 */{ 0x21, 3, stage::allStages[51], 1, 0x12, 0xFF, 0b000000000000000000000, -71795.539062, -54450.000000, 56396.738281, nullptr, nullptr },
-/* 341 */{ 0x21, 3, stage::allStages[63], 0, 0x13, 0xFF, 0b000000000000000000010, 2200.000000, 104.574730, -1200.000000, nullptr, nullptr },
-/* 342 */{0x20, 8, stage::allStages[20], 13, 0xFF, 0xFF, 0b000000000000000000000, -7625.000000, 52.000000, -5525.000000, nullptr, nullptr}, //
-/* 343 */{0x20, 8, stage::allStages[6], 7, 0x1, 0xFF, 0b000000000000000000000, -5703.254883, 4372.640137, 11664.798828, nullptr, nullptr},
+ ItemCheck checks[503] = {
+ /* 0 */{0x3F, 1, stage::allStages[65], 4, 0x0, 0x0, 0b000000000000000000000, -1.6259740, 0.0000000, -207.4881290, nullptr, nullptr}, //Wooden Sword Chest
+ /* 1 */{0x03, 7, stage::allStages[40], 0, 0x1, 0xFF, 0b110000000000000000100, -3550.8691410, 4450.0000000, -694.8996580, nullptr, nullptr}, // South Faron Cave Small Chest
+ /* 2 */{0xEE, 8, stage::allStages[45], 14, 0x1, 0xFF, 0b000000000000000000100, 1221.9044190, 50.0000000, -7.9423170, nullptr, nullptr}, //North Faron Cave Key Chest
+ /* 3 */{0x21, 3, stage::allStages[45], 14, 0x1, 0xFF, 0b110000000000000000100, 1528.0000000, 250.0000000, -22.0000000, nullptr, nullptr}, //North Faron Cave Heart Piece Chest
+ /* 4 */{0x03, 7, stage::allStages[45], 6, 0x1, 0xFF, 0b000000000000000000100, -38292.5312500, 400.0000000, -23129.9550780, nullptr, nullptr}, //Small Chest North of Trill
+ /* 5 */{0xED, 7, stage::allStages[65], 7, 0x0, 0xFF, 0b110010000000000001000, 128.7043760, -1077.0000000, -607.5000000, nullptr, nullptr}, //Link's Basement Chest
+ /* 6 */{0x03, 7, stage::allStages[6], 22, 0x1, 0xFF, 0b000000000000000000000, 900.0000000, 3110.0000000, 15825.0000000, nullptr, nullptr}, //FT Entrance Vine Chest
+ /* 7 */{0x04, 7, stage::allStages[6], 0, 0x1, 0xFF, 0b100100000000000000000, 0.0000000, 2700.0000000, 5550.0000000, nullptr, nullptr}, //FT Central Chest Behind Stairs
+ /* 8 */{0x23, 2, stage::allStages[6], 0, 0x1, 0x1, 0b110000000000000000000, 550.0000000, 3301.0095210, 5325.0000000, nullptr, nullptr}, //FT Map Chest
+ /* 9 */{0x20, 8, stage::allStages[6], 9, 0x1, 0xFF, 0b110000000000000000000, 6908.0000000, 3580.2719730, -3305.0000000, nullptr, nullptr}, //FT Windless Bridge Chest
+ /* 10 */{0x03, 7, stage::allStages[6], 2, 0x1, 0xFF, 0b110000000000000100000, 11559.7548830, 3152.0000000, 3761.2187500, nullptr, nullptr}, //FT Second Monkey Under Bridge Chest
+ /* 11 */{0x20, 8, stage::allStages[6], 5, 0x1, 0xFF, 0b100000000000000100000, -9108.924805, 3302.0000000, 5547.310059, nullptr, nullptr}, //FT Totem Pole Chest
+ /* 12 */{0x04, 7, stage::allStages[6], 5, 0x1, 0xFF, 0b100000000000000100000, -11721.1455080, 3750.0000000, 4717.8212890, nullptr, nullptr}, //FT West Tile Worm Small Chest
+ /* 13 */{0x21, 3, stage::allStages[6], 3, 0x1, 0xFF, 0b110000000000000000000, -4000.0000000, 2955.5900880, 9075.0000000, nullptr, nullptr}, //FT Deku Like Heart Piece Chest
+ /* 14 */{0x21, 3, stage::allStages[6], 5, 0x1, 0xFF, 0b110100000000000100000, -14275.0000000, 3402.7832030, 6150.0000000, nullptr, nullptr}, //FT West Tile Worm Heart Piece Chest
+ /* 15 */{0x24, 2, stage::allStages[6], 0, 0x1, 0x1, 0b100100000000000000000, 0.0000000, 3150.0000000, 7125.0000000, nullptr, nullptr}, //FT Compass Chest
+ /* 16 */{0x26, 2, stage::allStages[6], 1, 0x1, 0x1, 0b100100000000000000000, 9225.0009770, 3471.9599610, 8465.1347660, nullptr, nullptr}, //FT Big Key Chest
+ /* 17 */{0x03, 7, stage::allStages[6], 1, 0x1, 0xFF, 0b000000000000000000000, 10261.0000000, 3175.0000000, 8295.0000000, nullptr, nullptr}, //FT East Water Cave Chest
+ /* 18 */{0x20, 8, stage::allStages[6], 10, 0x2, 0xFF, 0b000100000010000000000, 1174.2510990, 5002.3901370, -9219.0937500, nullptr, nullptr}, //FT North Deku Like Chest
+ /* 19 */{0x04, 7, stage::allStages[6], 11, 0x2, 0xFF, 0b100100000000000100000, 11183.0000000, 3806.5500490, -6305.0000000, nullptr, nullptr}, //FT East Tile Worm Chest
+ /* 20 */{0x04, 7, stage::allStages[68], 2, 0x2, 0xFF, 0b000000000000000000000, -70.0000000, -6.0440000, -670.0000000, nullptr, nullptr}, //Kakariko Inn Small Chest
+ /* 21 */{0x45, 0, stage::allStages[65], 0, 0x2, 0x2, 0b000000000000000000000, 320.8111880, 9.7100000, 1017.9390870, nullptr, nullptr}, //Iron Boots Chest
+ /* 22 */{0x04, 7, stage::allStages[3], 1, 0x3, 0xFF, 0b001000000000000000000, 1050.0000000, -258.1840820, 13750.0000000, nullptr, nullptr}, //GM Entrance Small Chest
+ /* 23 */{0x20, 8, stage::allStages[3], 3, 0x3, 0xFF, 0b001000000000000000000, 2700.0000000, -1378.3521730, 5175.0000000, nullptr, nullptr}, //GM Main Magnet Room Bottom Chest
+ /* 24 */{0x23, 2, stage::allStages[3], 14, 0x3, 0x3, 0b001000000000000100000, -15984.1562500, -710.5994260, 1504.4143070, nullptr, nullptr}, //GM Map Chest
+ /* 25 */{0x04, 7, stage::allStages[3], 14, 0x3, 0xFF, 0b001000000000000000000, -16176.0000000, -561.3822020, 895.0000000, nullptr, nullptr}, //GM Gor Amato Small Chest
+ /* 26 */{0x21, 3, stage::allStages[3], 4, 0x3, 0xFF, 0b001000000000000000000, -5625.0000000, 448.7841190, 75.0000000, nullptr, nullptr}, //GM Magnet Maze Heart Piece Chest
+ /* 27 */{0x20, 8, stage::allStages[3], 6, 0x3, 0xFF, 0b001000000000000000000, 1125.0000000, 600.0000000, -4725.0000000, nullptr, nullptr}, //GM Switch Room Underwater Chest
+ /* 28 */{0x04, 7, stage::allStages[3], 6, 0x3, 0xFF, 0b001000000000000000000, 1000.0000000, 1650.0000000, -5650.0000000, nullptr, nullptr}, //GM Switch Room Small Chest
+ /* 29 */{0x21, 3, stage::allStages[3], 6, 0x3, 0xFF, 0b001000000000000000000, -1350.0000000, 2350.0000000, -6200.0000000, nullptr, nullptr}, //GM After Switch Room Heart Piece Chest
+ /* 30 */{0x20, 8, stage::allStages[3], 7, 0x3, 0xFF, 0b101000000000000100000, -1050.0000000, 2425.0000000, -14825.0000000, nullptr, nullptr}, //GM Outside Bemos Chest
+ /* 31 */{0x03, 7, stage::allStages[3], 17, 0x3, 0xFF, 0b101000000000000100000, 13900.0000000, 2997.0900880, -17175.0000000, nullptr, nullptr}, //GM Gor Ebizo Small Chest
+ /* 32 */{0x03, 7, stage::allStages[3], 9, 0x3, 0xFF, 0b101000000000000100000, 9950.0000000, 2475.0000000, -15375.0000000, nullptr, nullptr}, //GM Small Chest Before Dangoro
+ /* 33 */{0x43, 0, stage::allStages[3], 11, 0x3, 0x3, 0b001000000000000000000, 7997.9995120, 2640.0000000, -5355.0000000, nullptr, nullptr}, //GM Bow Chest
+ /* 34 */{0x24, 2, stage::allStages[3], 11, 0x4, 0x4, 0b101001000000000000000, 6488.3676760, 2640.0000000, -1673.5349120, nullptr, nullptr}, //GM Compass Chest
+ /* 35 */{0x05, 7, stage::allStages[3], 16, 0x4, 0xFF, 0b101001000000000000000, 13975.0000000, 2476.4899900, -1675.0000000, nullptr, nullptr}, //GM Gor Liggs Small Chest
+ /* 36 */{0x05, 7, stage::allStages[3], 3, 0x4, 0xFF, 0b101001000000000000000, 3625.0000000, 2637.8999020, 4050.0000000, nullptr, nullptr}, //GM Main Magnet Room Top Chest
+ /* 37 */{0x05, 7, stage::allStages[3], 7, 0x4, 0xFF, 0b001000000000000000000, 2325.0000000, 1100.0000000, -17400.0000000, nullptr, nullptr}, //GM Outside Underwater Chest
+ /* 38 */{0x21, 3, stage::allStages[46], 0, 0x5, 0xFF, 0b101000100000000000000, 1300.0000000, -1600.0000000, 16700.0000000, nullptr, nullptr}, //Eldin Spring Heart Piece Chest
+ /* 39 */{0x05, 7, stage::allStages[48], 0, 0x2, 0xFF, 0b010000000000000000000, 16050.0000000, 200.0000000, 725.0000000, nullptr, nullptr}, //Kakariko Graveyard Lanturn Chest
+ /* 40 */{0x05, 7, stage::allStages[68], 4, 0x3, 0xFF, 0b000000000000000000000, -887.4350590, 1000.0000000, -173.2907710, nullptr, nullptr}, //Kakariko Watchtower Chest
+ /* 41 */{0x06, 7, stage::allStages[46], 0, 0x5, 0xFF, 0b000000101100000000000, -4027.7336430, 3200.0000000, -8970.9990230, nullptr, nullptr}, //Kakariko Watchtower Alcove Chest
+ /* 42 */{0x21, 3, stage::allStages[56], 0, 0x5, 0xFF, 0b000000001000000000000, 11550.0000000, 2700.0000000, 24090.0000000, nullptr, nullptr}, //Eldin Bomb Rock Ledge Heart Piece Chest
+ /* 43 */{0x03, 7, stage::allStages[50], 1, 0x5, 0xFF, 0b000000000000000000000, 2784.3178710, -4587.8901370, 10773.4140620, nullptr, nullptr}, //ZD Small Chest By Mother and Child Isles
+ /* 44 */{0x04, 7, stage::allStages[50], 1, 0xFF, 0xFF, 0b000000000000000000000, 3810.8435060, -3535.5300290, 11344.8876950, nullptr, nullptr}, //ZD Small Chest Under Waterfall
+ /* 45 */{0x06, 7, stage::allStages[52], 0, 0x5, 0xFF, 0b001000000000000000000, -97123.5468750, -19490.0000000, 58585.6992190, nullptr, nullptr}, //Lake Hylia Underwater Chest
+ /* 46 */{0x0F, 5, stage::allStages[0], 0, 0x6, 0xFF, 0b000000000000001000000, -1707.6793210, 1250.0000000, 15388.9882810, nullptr, nullptr}, //LBT Lobby Left Chest
+ /* 47 */{0x17, 5, stage::allStages[0], 0, 0x6, 0xFF, 0b000000000000001000000, -144.6737980, 1250.0000000, 16525.8710940, nullptr, nullptr}, //LBT Lobby Rear Chest
+ /* 48 */{0x17, 5, stage::allStages[0], 1, 0x6, 0xFF, 0b100000001000001000000, 1417.5971680, 1813.6099850, 7807.2255860, nullptr, nullptr}, //LBT Stalactite Room Small Chest
+ /* 49 */{0x0F, 5, stage::allStages[0], 3, 0x6, 0xFF, 0b000000000000001000000, 1629.5045170, 0.0000000, 2049.6350100, nullptr, nullptr}, //LBT Central Room Small Chest
+ /* 50 */{0x23, 2, stage::allStages[0], 3, 0x6, 0x6, 0b000000000000001000000, 2010.5773930, 0.0000000, -1656.3415530, nullptr, nullptr}, //LBT Map Chest
+ /* 51 */{0x20, 8, stage::allStages[0], 8, 0x6, 0xFF, 0b100000001000001000000, 12900.0000000, -600.0000000, 1850.0000000, nullptr, nullptr}, //LBT East Stalactite Room Chest
+ /* 52 */{0x16, 5, stage::allStages[0], 7, 0x6, 0xFF, 0b000000000000001100000, 8779.1152340, 1500.0000000, 1667.6258540, nullptr, nullptr}, //LBT East Second Floor Southwest Chest
+ /* 53 */{0x20, 8, stage::allStages[0], 7, 0x6, 0xFF, 0b100000001000001100000, 11550.8037110, 1500.0000000, 2866.6462400, nullptr, nullptr}, //LBT East Second Floor Southeast Chest
+ /* 54 */{0x17, 5, stage::allStages[0], 10, 0x6, 0xFF, 0b000000000000001100000, 18228.3320310, 3995.0000000, -466.3260800, nullptr, nullptr}, //LBT East Water Supply Small Chest
+ /* 55 */{0x20, 8, stage::allStages[0], 9, 0x6, 0xFF, 0b000000000000001000000, 13550.0000000, 10.0000000, -2500.0000000, nullptr, nullptr}, //LBT Before Deku Toad Chest
+ /* 56 */{0x04, 7, stage::allStages[0], 9, 0x6, 0xFF, 0b101000000000001100000, 13193.2910160, -1189.3100590, -2433.4060060, nullptr, nullptr}, //LBT Before Deku Toad Underwater Left Chest
+ /* 57 */{0x16, 5, stage::allStages[0], 9, 0x6, 0xFF, 0b101000000000001100000, 13757.0000000, -1275.3310550, -4783.1503910, nullptr, nullptr}, //LBT Before Deku Toad Underwater Right Chest
+ /* 58 */{0x44, 0, stage::allStages[2], 51, 0x6, 0x6, 0b000000000000001000000, 0.0000000, 0.0000000, 0.0000000, nullptr, nullptr}, //LBT Clawshot Chest
+ /* 59 */{0x21, 3, stage::allStages[0], 3, 0x7, 0xFF, 0b100000000010001000000, -0.8691990, 2100.0000000, 2.1099050, nullptr, nullptr}, //LBT Chandelier Heart Piece Chest
+ /* 60 */{0x05, 7, stage::allStages[0], 10, 0x7, 0xFF, 0b100000000010001100000, 21000.0000000, 4170.0000000, 85.0000000, nullptr, nullptr}, //LBT Eas Water Supply Clawshot Chest
+ /* 61 */{0x04, 7, stage::allStages[0], 3, 0x7, 0xFF, 0b000000000000001000000, 0.0000000, -940.0000000, -315.5000000, nullptr, nullptr}, //LBT Central Room Center Spire Chest
+ /* 62 */{0x17, 5, stage::allStages[0], 12, 0x7, 0xFF, 0b000000000010001000000, -10687.0947270, -299.3999940, -1161.5905760, nullptr, nullptr}, //LBT West Lower Small Chest
+ /* 63 */{0x17, 5, stage::allStages[0], 13, 0x7, 0xFF, 0b100000000010001000000, -20310.0000000, 4015.0000000, 460.0000000, nullptr, nullptr}, //LBT West Water Supply Small Chest
+ /* 64 */{0x24, 2, stage::allStages[0], 13, 0x7, 0x7, 0b100000000010001000000, -23100.0000000, 4200.0000000, -85.0000000, nullptr, nullptr}, //LBT Compass Chest
+ /* 65 */{0x04, 7, stage::allStages[0], 11, 0x7, 0xFF, 0b101000000000001000000, -14158.2880860, 700.0000000, 2868.1103520, nullptr, nullptr}, //LBT West Second Floor Southwest Underwater Chest
+ /* 66 */{0x04, 7, stage::allStages[0], 12, 0x7, 0xFF, 0b100000000010001000000, -10180.6718750, 1500.0000000, -1939.7305910, nullptr, nullptr}, //LBT West Second Floor Central Small Chest
+ /* 67 */{0x04, 7, stage::allStages[0], 11, 0x7, 0xFF, 0b000000000000001000000, -10950.0000000, 1450.0000000, 2590.0000000, nullptr, nullptr}, //LBT West Second Floor Northeast Chest
+ /* 68 */{0x18, 5, stage::allStages[0], 11, 0x7, 0xFF, 0b100000000010001000000, -9270.0000000, 1450.0000000, -2100.0000000, nullptr, nullptr}, //LBT West Second Floor Southeast Chest
+ /* 69 */{0x26, 2, stage::allStages[0], 6, 0x7, 0x7, 0b101000001010001000000, -16549.8789060, -1345.7093510, 2820.3918460, nullptr, nullptr}, //LBT Big Key Chest
+ /* 70 */{0x16, 5, stage::allStages[0], 5, 0x7, 0xFF, 0b101000000010001000000, -18544.2207030, -200.0000000, 475.5745850, nullptr, nullptr}, //LBT Underwater Maze Small Chest
+ /* 71 */{0x21, 3, stage::allStages[0], 8, 0x7, 0xFF, 0b100000000010001000000, 11356.2246090, -550.0000000, 4896.6640620, nullptr, nullptr}, //LBT East Stalactite Heart Piece Chest
+ /* 72 */{0x21, 3, stage::allStages[36], 1, 0x12, 0xFF, 0b100000100000000000010, -211.8681490, -61.3470460, -2693.1110840, nullptr, nullptr}, // Grotto - Deku Baba Heart Piece Chest
+ /* 73 */{0x06, 7, stage::allStages[35], 0, 0x8, 0xFF, 0b100000000010000000010, 28.7614960, 2.9684250, -455.4558110, nullptr, nullptr}, //Grotto - Helmasaur Chest
+ /* 74 */{0x1A, 5, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, -655.6493530, 1069.5000000, -4819.0908200, nullptr, nullptr}, //Lake Lanturn Cave First Chest
+ /* 75 */{0x03, 7, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, 682.1680300, 1069.5000000, -6179.2060550, nullptr, nullptr}, //Lake Lanturn Cave Second Chest
+ /* 76 */{0x04, 7, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, 2067.4831540, 966.9400020, -7130.3203120, nullptr, nullptr}, //Lake Lanturn Cave Third Chest
+ /* 77 */{0x0E, 5, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, 9980.4072270, 353.3800050, -7188.2241210, nullptr, nullptr}, //Lake Lanturn Cave Fourth Chest
+ /* 78 */{0x04, 7, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, 8154.4853520, -721.9500120, -16215.0576170, nullptr, nullptr}, //Lake Lanturn Cave Fifth Chest
+ /* 79 */{0x06, 7, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, 1585.2146000, -1584.6899410, -14877.4931640, nullptr, nullptr}, //Lake Lanturn Cave Sixth Chest
+ /* 80 */{0x04, 7, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, 1678.4635010, -1586.6899410, -16192.1738280, nullptr, nullptr}, //Lake Lanturn Cave Seventh Chest
+ /* 81 */{0x1A, 5, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, -642.0394290, -1703.1999510, -18994.8613280, nullptr, nullptr}, //Lake Lanturn Cave Eighth Chest
+ /* 82 */{0x0E, 5, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, -7978.3588870, -2572.7099610, -16192.1738280, nullptr, nullptr}, //Lake Lanturn Cave Ninth Chest
+ /* 83 */{0x05, 7, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, -9292.6113280, -2572.7099610, -17523.3867190, nullptr, nullptr}, //Lake Lanturn Cave Tenth Chest
+ /* 84 */{0x1B, 5, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, 2974.3283690, -4197.5800780, -20501.6816410, nullptr, nullptr}, //Lake Lanturn Cave Eleventh Chest
+ /* 85 */{0x05, 7, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, 1675.3985600, -4197.5800780, -21755.7343750, nullptr, nullptr}, //Lake Lanturn Cave Twelfth Chest
+ /* 86 */{0x12, 5, stage::allStages[33], 0, 0x5, 0xFF, 0b000000001100000000000, 3981.5319820, -4081.0800780, -19125.3964840, nullptr, nullptr}, //Lake Lanturn Cave Thirtennth Chest
+ /* 87 */{0x06, 7, stage::allStages[33], 0, 0x5, 0xFF, 0b110000001000000000000, 8324.2236330, -4070.1899410, -17814.0156250, nullptr, nullptr}, //Lake Lanturn Cave Fourteenth Chest
+ /* 88 */{0x21, 3, stage::allStages[33], 0, 0x5, 0xFF, 0b110000001000000000000, 6582.5747070, -5144.5200200, -10032.9658200, nullptr, nullptr}, //Lake Lanturn Cave Heart Piece Chest
+ /* 89 */{0x06, 7, stage::allStages[39], 4, 0x8, 0xFF, 0b000000000000000000010, -312.1882930, -27.1700000, -1501.0155030, nullptr, nullptr}, //Grotto - Water Toadpoli Chest
+ /* 90 */{0x05, 7, stage::allStages[52], 0, 0x6, 0xFF, 0b001000000010000000000, -91673.9453120, -16547.1699220, 49208.8203120, nullptr, nullptr}, //Outside Lanayru Spring - Left Statue Small Chest
+ /* 91 */{0x06, 7, stage::allStages[52], 0, 0x6, 0xFF, 0b001000000010000000000, -88884.070312, -16939.031250, 49405.648438, nullptr, nullptr}, //Outside Lanayru Spring - Right Statue Chest
+ /* 92 */{0x02, 7, stage::allStages[52], 1, 0x5, 0xFF, 0b001000000000000000000, 593.5773930, -1276.7792970, 128.1360020, nullptr, nullptr}, //Lanayru Spring Underwater Left Chest
+ /* 93 */{0x03, 7, stage::allStages[52], 1, 0x5, 0xFF, 0b001000000000000000000, -1262.2436520, -1380.8292240, 68.6994780, nullptr, nullptr}, //Lanayru Spring Underwater Right Chest
+ /* 94 */{0x02, 7, stage::allStages[52], 1, 0x6, 0xFF, 0b000000000010000000000, -33.7100300, 1406.5571290, 4875.7338870, nullptr, nullptr}, //Lanayru Spring Southern Room Left Chest
+ /* 95 */{0x0A, 5, stage::allStages[52], 1, 0x6, 0xFF, 0b000000000010000000000, 486.2900090, 1406.5479740, 4875.7338870, nullptr, nullptr}, //Lanayru Spring Southern Room Right Chest
+ /* 96 */{0x21, 3, stage::allStages[52], 1, 0x6, 0xFF, 0b110000000010000000000, 224.6442720, 1406.5999760, 4862.4682620, nullptr, nullptr}, //Lanayru Spring Heart Piece Chest
+ /* 97 */{0x06, 7, stage::allStages[52], 0, 0x6, 0xFF, 0b001000000000000000000, -102601.6640620, -16650.6562500, 43399.9570310, nullptr, nullptr}, //Isle of Riches Top Platform
+ /* 98 */{0x21, 3, stage::allStages[52], 0, 0x6, 0xFF, 0b001000000000000000000, -102682.2031250, -17271.6835940, 43179.0781250, nullptr, nullptr}, //Isle of Riches 2nd Level
+ /* 99 */{0x05, 7, stage::allStages[52], 0, 0x6, 0xFF, 0b001000000000000000000, -102990.2421880, -17760.8300780, 42850.2382810, nullptr, nullptr}, //Isle of Riches 3rd Level
+ /* 100 */{0x04, 7, stage::allStages[52], 0, 0x6, 0xFF, 0b001000000000000000000, -103540.7812500, -18170.2578120, 42296.2421880, nullptr, nullptr}, //Isle of Riches 4th Level
+ /* 101 */{0x03, 7, stage::allStages[52], 0, 0x6, 0xFF, 0b001000000000000000000, -104351.7031250, -18485.7714840, 41482.6367190, nullptr, nullptr}, //Isle of Riches 5th Level
+ /* 102 */{ 0x06, 7, stage::allStages[39], 4, 0x8, 0xFF, 0b101000000000000000010, -371.4389950, -27.1700000, -1627.2565920, nullptr, nullptr }, //Grotto - Shell Blade Chest
+ /* 103 */{0x05, 7, stage::allStages[50], 0, 0x6, 0xFF, 0b010000000000000000000, 200.0000000, -349.6226810, -1900.0000000, nullptr, nullptr}, //ZD Underwater Right Chest
+ /* 104 */{0x05, 7, stage::allStages[50], 0, 0x6, 0xFF, 0b111100000000000000000, -200.0000000, -349.4964290, -1900.0000000, nullptr, nullptr}, //ZD Underwater Left Chest
+ /* 105 */{ 0x05, 7, stage::allStages[38], 3, 0x8, 0xFF, 0b110000000000000000010, -1125.7841800, -133.9226530, -3012.3530270, nullptr, nullptr }, //Grotto - Skulltula Chest
+ /* 106 */{0x06, 7, stage::allStages[56], 10, 0x6, 0xFF, 0b001000000000000000000, -46800.0000000, -4800.0000000, -22650.0000000, nullptr, nullptr}, //Behind Gate Underwater Chest
+ /* 107 */{0x06, 7, stage::allStages[56], 13, 0x7, 0xFF, 0b000000000010000000000, -94100.0000000, -4420.0000000, 30009.9199220, nullptr, nullptr}, //Bridge Vines Chest
+ /* 108 */{ 0x06, 7, stage::allStages[38], 3, 0x8, 0xFF, 0b110000000010000000010, -1061.2969970, -132.2552490, -3053.6071780, nullptr, nullptr }, //Grotto - Bubble Chest
+ /* 109 */{0x05, 7, stage::allStages[56], 13, 0x7, 0xFF, 0b100000001010000000000, -80910.0000000, -6000.0000000, 64780.0000000, nullptr, nullptr}, //Outside Bubble Grotto Chest
+ /* 110 */{0x06, 7, stage::allStages[56], 6, 0x7, 0xFF, 0b000000000010000000000, -46040.0000000, -9100.0000000, 80025.0000000, nullptr, nullptr}, //Faron Under Bridge Chest
+ /* 111 */{ 0x04, 7, stage::allStages[36], 1, 0x8, 0xFF, 0b000000000000000000010, 578.9967040, -266.3237300, -2138.4619140, nullptr, nullptr }, //Grotto - Chu, Baba, and Keese Right Chest
+ /* 112 */{ 0x03, 7, stage::allStages[36], 1, 0x8, 0xFF, 0b000000000000000000010, -281.6463620, -300.0000000, 910.2941280, nullptr, nullptr }, //Grotto - Chu, Baba, and Keese Rear Chest
+ /* 113 */{ 0x04, 7, stage::allStages[36], 1, 0x8, 0xFF, 0b000000000000000000010, -754.0296020, -256.7704770, -3001.7814940, nullptr, nullptr }, //Grotto - Chu, Babe, and Keese Left Chest
+ /* 114 */{0x21, 3, stage::allStages[47], 0, 0x4, 0xFF, 0b000000000000000000000, -1646.0109860, 379.2999880, 8487.9677730, nullptr, nullptr}, //Death Mountain Alcove Heart Piece Chest
+ /* 115 */{0x05, 7, stage::allStages[3], 7, 0x7, 0xFF, 0b101000000010000000000, 2700.0000000, 4275.0000000, -19550.0000000, nullptr, nullptr}, //GM Outside Clawshot Chest
+ /* 116 */{0x04, 7, stage::allStages[32], 0, 0x5, 0xFF, 0b000000001100000000000, -1056.4636230, 3145.5432130, -4376.8500980, nullptr, nullptr}, //Eldin Lantern Cave First Chest
+ /* 117 */{0x21, 3, stage::allStages[32], 0, 0x5, 0xFF, 0b000000001100000000000, 6452.6201170, 4447.9018550, -6947.8505860, nullptr, nullptr}, //Eldin Lantern Cave Heart Piece Chest
+ /* 118 */{0x05, 7, stage::allStages[32], 0, 0x5, 0xFF, 0b000000001100000000000, 7333.7602540, 4152.1391600, 1235.8031010, nullptr, nullptr}, //Eldin Lantern Cave Second Chest
+ /* 119 */{ 0x06, 7, stage::allStages[57], 16, 0x8, 0xFF, 0b100000000010000000010, -53600.0000000, -3592.9699710, 23830.0000000, nullptr, nullptr }, //Castle Pillar Chest
+ /* 120 */{ 0x06, 7, stage::allStages[39], 4, 0x8, 0xFF, 0b000000000000000000010, -240.3374330, -27.1700000, -1660.1081540, nullptr, nullptr }, //Grotto - Tetike Chest
+ /* 121 */{ 0x05, 7, stage::allStages[35], 0, 0x8, 0xFF, 0b110000000000000000010, -1037.5682370, 1.0515240, -536.6557620, nullptr, nullptr }, //Grotto - Bombling Left Chest
+ /* 122 */{ 0x05, 7, stage::allStages[35], 0, 0x8, 0xFF, 0b110000000000000000010, -193.2892910, 150.0000000, -1135.5745850, nullptr, nullptr }, //Grotto - Bombling Right Chest
+ /* 123 */{ 0x05, 7, stage::allStages[39], 4, 0x8, 0xFF, 0b000000000000000000010, -251.5004430, -27.1700000, -1691.9121090, nullptr, nullptr }, //Grotto - Water Bomb Fish Chest
+ /* 124 */{ 0x06, 7, stage::allStages[38], 3, 0x9, 0xFF, 0b000000000000000000010, -1066.0302730, -132.1377870, -3046.8808590, nullptr, nullptr }, //Grotto - Desert Skulltula Chest
+ /* 125 */{ 0x04, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000010000000000, 51585.6210940, 1536.1500240, 58741.2500000, nullptr, nullptr }, //Desert Peahat Chest
+ /* 126 */{ 0x04, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 51813.6796880, 171.0510250, 46656.2773440, nullptr, nullptr }, //East Canyon Chest
+ /* 127 */{ 0x0E, 5, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 30472.5644530, 778.0640260, 50140.5703120, nullptr, nullptr }, //Desert Lone Small Chest
+ /* 128 */{0x04, 7, stage::allStages[34], 10, 0x7, 0xFF, 0b000000000010000000000, 13825.0000000, 137.5000000, -34250.0000000, nullptr, nullptr}, //Eldin Stockcave Small Chest
+ /* 129 */{0x06, 7, stage::allStages[34], 10, 0x7, 0xFF, 0b111000000010000000000, 9577.0000000, -2833.8898930, -33492.0000000, nullptr, nullptr}, //Eldin Stockcave Lanturn Chest
+ /* 130 */{0x21, 3, stage::allStages[34], 10, 0x7, 0xFF, 0b101000000010000000000, 9515.7099610, -2850.0000000, -31912.3808590, nullptr, nullptr}, //Eldin Stockcave Heart Piece Chest
+ /* 131 */{ 0x05, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000010000000000, -6940.8110350, 441.2112430, 48305.4023440, nullptr, nullptr },
+ /* 132 */{ 0x06, 7, stage::allStages[37], 2, 0x9, 0xFF, 0b110000100010000000010, -128.8401180, 150.0000000, -1330.3356930, nullptr, nullptr },
+ /* 133 */{ 0x04, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 9889.4482420, -732.8599850, 17813.8398440, nullptr, nullptr },
+ /* 134 */{ 0x06, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 32741.2617190, 158.3099980, 68606.5468750, nullptr, nullptr },
+ /* 135 */{ 0x04, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 3104.9711910, -732.8599850, 24575.0351560, nullptr, nullptr },
+ /* 136 */{ 0x05, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 4945.0000000, -732.8599850, 25572.0000000, nullptr, nullptr },
+ /* 137 */{ 0x0E, 5, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 1845.0000000, -732.8599850, 26130.0000000, nullptr, nullptr },
+ /* 138 */{ 0x04, 7, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, -6532.4062500, -732.8599850, 20852.4121090, nullptr, nullptr },
+ /* 139 */{ 0x0E, 5, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 4681.0947270, -162.9400020, 12575.7626950, nullptr, nullptr },
+ /* 140 */{ 0x0F, 5, stage::allStages[55], 1, 0x9, 0xFF, 0b000000000000000000000, 4761.6406250, 0.0000000, 1580.5701900, nullptr, nullptr },
+ /* 141 */{ 0x05, 7, stage::allStages[55], 1, 0x9, 0xFF, 0b000000000000000000000, 2389.0454100, 260.0000000, -1473.3872070, nullptr, nullptr },
+ /* 142 */{ 0x05, 7, stage::allStages[55], 3, 0x9, 0xFF, 0b010000000000000000000, 3633.6201170, 840.0000000, -12457.7001950, nullptr, nullptr },
+ /* 143 */{ 0x20, 8, stage::allStages[24], 0, 0x9, 0xFF, 0b000000000000000000000, -3000.0000000, -19.0000000, 5600.0000000, nullptr, nullptr },
+ /* 144 */{ 0x20, 8, stage::allStages[24], 15, 0x9, 0xFF, 0b000000000000000000000, 4125.0000000, -741.5800170, -2250.0000000, nullptr, nullptr },
+ /* 145 */{ 0x21, 3, stage::allStages[24], 2, 0x9, 0xFF, 0b000000000000000000000, 1300.0000000, 62.5000000, -3012.5000000, nullptr, nullptr },
+ /* 146 */{ 0x23, 2, stage::allStages[24], 2, 0x9, 0x9, 0b000000000000000000000, -1300.0000000, 50.0000000, -3012.5000000, nullptr, nullptr },
+ /* 147 */{ 0x24, 2, stage::allStages[24], 4, 0x9, 0x9, 0b000000000000000100000, 9400.0000000, 990.0599980, 6100.0000000, nullptr, nullptr },
+ /* 148 */{ 0x20, 8, stage::allStages[24], 4, 0x9, 0xFF, 0b000000000000000100000, 12275.0000000, 980.0000000, 4537.5000000, nullptr, nullptr },
+ /* 149 */{ 0x20, 8, stage::allStages[24], 14, 0x9, 0xFF, 0b000000000000000100000, 4150.0000000, 825.0000000, 775.0000000, nullptr, nullptr },
+ /* 150 */{ 0x04, 7, stage::allStages[24], 6, 0x9, 0xFF, 0b000000000000000000000, -4065.0000000, 150.0000000, -2660.0000000, nullptr, nullptr },
+ /* 151 */{ 0x04, 7, stage::allStages[24], 6, 0x9, 0xFF, 0b000000000000000000000, -4450.0000000, 400.0000000, 1150.0000000, nullptr, nullptr },
+ /* 152 */{ 0x0A, 5, stage::allStages[24], 7, 0x9, 0xFF, 0b000000100100000000000, -9975.0000000, 500.0000000, -600.0000000, nullptr, nullptr },
+ /* 153 */{ 0x0A, 5, stage::allStages[24], 7, 0x9, 0xFF, 0b000000100100000000000, -8113.0000000, 500.0000000, -1382.0000000, nullptr, nullptr },
+ /* 154 */{ 0x20, 8, stage::allStages[24], 16, 0x9, 0xFF, 0b000000000000000000000, 3970.0000000, -1050.0000000, -6080.0000000, nullptr, nullptr },
+ /* 155 */{ 0x41, 0, stage::allStages[26], 51, 0x9, 0x9, 0b000100000010000000000, 0.0000000, 50.0000000, -6200.0000000, nullptr, nullptr },
+ /* 156 */{ 0x0B, 5, stage::allStages[24], 13, 0x10, 0xFF, 0b000000000000100000000, -8331.4091800, -1800.0000000, -3677.7468260, nullptr, nullptr },
+ /* 157 */{ 0x04, 7, stage::allStages[24], 13, 0x10, 0xFF, 0b000000000000100000000, -10212.5000000, -1840.0000000, -3725.0000000, nullptr, nullptr },
+ /* 158 */{ 0x03, 7, stage::allStages[24], 13, 0x10, 0xFF, 0b000000000000100000000, -10812.5000000, -1825.0000000, -5712.5000000, nullptr, nullptr },
+ /* 159 */{ 0x21, 3, stage::allStages[24], 13, 0x10, 0xFF, 0b000000000000100000000, -5475.0000000, -1325.0000000, -4875.0000000, nullptr, nullptr },
+ /* 160 */{ 0x03, 7, stage::allStages[24], 13, 0x10, 0xFF, 0b000000000000100000000, -6225.0000000, -1125.0000000, -7275.0000000, nullptr, nullptr },
+ /* 161 */{ 0x26, 2, stage::allStages[24], 9, 0x10, 0x10, 0b000000000000100000000, -3675.0000000, 500.0000000, -7250.0000000, nullptr, nullptr },
+ /* 162 */{ 0x21, 3, stage::allStages[56], 11, 0x10, 0xFF, 0b000000000000100000000, -88260.0000000, 2950.0000000, -8150.0000000, nullptr, nullptr },
+ /* 163 */{ 0x0A, 5, stage::allStages[36], 1, 0x10, 0xFF, 0b100000000000100000010, 464.9176030, -262.3106380, -709.6952510, nullptr, nullptr },
+ /* 164 */{ 0x0A, 5, stage::allStages[36], 1, 0x10, 0xFF, 0b100000000000100000010, -1153.7760010, -255.8396450, -980.6660160, nullptr, nullptr },
+ /* 165 */{ 0x21, 3, stage::allStages[36], 1, 0x10, 0xFF, 0b100000100000100000010, -211.8499450, -60.9387400, -2691.0991210, nullptr, nullptr },
+ /* 166 */{ 0x06, 7, stage::allStages[57], 16, 0x10, 0xFF, 0b100000000010100000000, -51500.0000000, -5180.0000000, 25970.0000000, nullptr, nullptr },
+ /* 167 */{ 0x05, 7, stage::allStages[35], 0, 0x8, 0xFF, 0b110000000000000000010, -277.2709660, 150.0000000, -1096.2886960, nullptr, nullptr },
+ /* 168 */{0x04, 7, stage::allStages[45], 5, 0x1, 0xFF, 0b000000000000000000000, -25790.1093750, 330.0000000, -19842.9355470, nullptr, nullptr}, //Faron Mist Stump Chest
+ /* 169 */{0x03, 7, stage::allStages[45], 5, 0x1, 0xFF, 0b000000000000000000000, -24845.1308590, -100.0000000, -26998.7226560, nullptr, nullptr}, //Faron Mist North Small Chest
+ /* 170 */{0x05, 7, stage::allStages[45], 5, 0x1, 0xFF, 0b000000000000000000000, -25966.7851560, -83.1305240, -16071.9599610, nullptr, nullptr}, //Faron Mist East Chest
+ /* 171 */{ 0x20, 8, stage::allStages[27], 4, 0x11, 0xFF, 0b000000000000000000000, -1500.0000000, -60.0000000, -4458.0000000, nullptr, nullptr },
+ /* 172 */{ 0x04, 7, stage::allStages[27], 4, 0x11, 0xFF, 0b000000000000000000000, 1350.0000000, 50.0000000, -1400.0000000, nullptr, nullptr },
+ /* 173 */{ 0xF4, 8, stage::allStages[27], 5, 0x11, 0x11, 0b000000000000000100000, 5300.0000000, 0.0000000, -5100.0000000, nullptr, nullptr },
+ /* 174 */{ 0x20, 8, stage::allStages[27], 4, 0x11, 0xFF, 0b000000000000000000000, 1350.0000000, -40.0000000, -4150.0000000, nullptr, nullptr },
+ /* 175 */{ 0x04, 7, stage::allStages[27], 8, 0x11, 0xFF, 0b000000100100000000000, -4355.0000000, 0.0000000, -2160.0000000, nullptr, nullptr },
+ /* 176 */{ 0x24, 2, stage::allStages[27], 8, 0x11, 0x11, 0b000000100100000000000, -3510.0000000, 0.0000000, -1350.0000000, nullptr, nullptr },
+ /* 177 */{ 0x0A, 5, stage::allStages[27], 4, 0x11, 0xFF, 0b000000100100000000000, 0.0000000, 0.0000000, -1250.0000000, nullptr, nullptr },
+ /* 178 */{ 0xF5, 8, stage::allStages[29], 51, 0x12, 0x12, 0b000000000100000000000, 0.0000000, 0.0000000, -3196.0000000, nullptr, nullptr },
+ /* 179 */{ 0x21, 3, stage::allStages[27], 7, 0x12, 0xFF, 0b000000000100000000000, -3600.0000000, 0.0000000, 1600.0000000, nullptr, nullptr },
+ /* 180 */{ 0x20, 8, stage::allStages[27], 8, 0x12, 0xFF, 0b000000000100000000000, -4350.0000000, 950.0000000, -3850.0000000, nullptr, nullptr },
+ /* 181 */{ 0x21, 3, stage::allStages[27], 0, 0x12, 0xFF, 0b000000000100000000000, 0.0000000, 1118.3201900, 4690.0000000, nullptr, nullptr },
+ /* 182 */{ 0x04, 7, stage::allStages[27], 0, 0x12, 0xFF, 0b000000000100000000000, -900.0000000, -50.0000000, 5950.0000000, nullptr, nullptr },
+ /* 183 */{ 0x03, 7, stage::allStages[27], 0, 0x12, 0xFF, 0b000000000100000000000, 930.0000000, -50.0000000, 5350.0000000, nullptr, nullptr },
+ /* 184 */{ 0x20, 8, stage::allStages[27], 5, 0x12, 0xFF, 0b100000000110000000000, 4350.0000000, 953.0000000, -4900.0000000, nullptr, nullptr },
+ /* 185 */{ 0x04, 7, stage::allStages[27], 9, 0x12, 0xFF, 0b000000000100000000000, -5347.3071290, -50.0000000, -6500.8867190, nullptr, nullptr },
+ /* 186 */{ 0x0A, 5, stage::allStages[27], 9, 0x12, 0xFF, 0b000000100100000000000, -1818.3217770, 0.0000000, -7562.9838870, nullptr, nullptr },
+ /* 187 */{ 0xF6, 2, stage::allStages[27], 11, 0x12, 0x12, 0b100000100100000000000, -4350.0000000, 1050.0000000, -8560.5742190, nullptr, nullptr },
+ /* 188 */{ 0x06, 7, stage::allStages[51], 2, 0x12, 0xFF, 0b110000000100000000010, -6233.2583010, -1800.0000000, -9865.0205080, nullptr, nullptr },
+ /* 189 */{ 0x06, 7, stage::allStages[38], 3, 0x12, 0xFF, 0b100000000100000000010, -810.7105710, -300.0000000, -2101.0502930, nullptr, nullptr },
+ /* 190 */{ 0x21, 3, stage::allStages[30], 0, 0x12, 0xFF, 0b000000000100000000000, 0.0000000, 0.0000000, -7900.0000000, nullptr, nullptr },
+ /* 191 */{ 0x0D, 5, stage::allStages[54], 3, 0x12, 0xFF, 0b110100000000000000000, -15394.4238280, 2300.0000000, 2483.9230960, nullptr, nullptr },
+ /* 192 */{ 0x06, 7, stage::allStages[54], 3, 0x12, 0xFF, 0b000000000000100000000, -6840.3515620, 2000.0000000, 6329.0605470, nullptr, nullptr },
+ /* 193 */{ 0x20, 8, stage::allStages[9], 0, 0x12, 0xFF, 0b110001000000000000000, 2500.0000000, 56.2500000, 368.7500000, nullptr, nullptr },
+ /* 194 */{ 0x10, 5, stage::allStages[9], 1, 0x12, 0xFF, 0b000001000000000000000, -12.5000000, 1100.0000000, 8362.5000000, nullptr, nullptr },
+ /* 195 */{ 0x04, 7, stage::allStages[9], 1, 0x12, 0xFF, 0b000001000000000000000, 5795.0000000, 2505.0000000, 4210.0000000, nullptr, nullptr },
+ /* 196 */{ 0x23, 2, stage::allStages[9], 1, 0x12, 0x12, 0b000001000000000000000, 6925.0000000, 2325.0000000, 3400.0000000, nullptr, nullptr },
+ /* 197 */{ 0x20, 8, stage::allStages[9], 3, 0x12, 0xFF, 0b100001000000100000000, -1737.5000000, 4500.0000000, 5812.5000000, nullptr, nullptr },
+ /* 198 */{ 0x24, 2, stage::allStages[9], 4, 0x12, 0x12, 0b100001000000100000000, -3450.0000000, 4450.0000000, -5510.0000000, nullptr, nullptr },
+ /* 199 */{ 0x05, 7, stage::allStages[9], 5, 0x12, 0xFF, 0b100001000000100000000, -30.0000000, 5750.0000000, -1515.0000000, nullptr, nullptr },
+ /* 200 */{ 0x20, 8, stage::allStages[9], 7, 0x12, 0xFF, 0b100001000000100000000, 5319.0000000, 7550.0000000, 8592.7500000, nullptr, nullptr },
+ /* 201 */{ 0x05, 7, stage::allStages[9], 7, 0x12, 0xFF, 0b100001000000100000000, 5300.0000000, 8100.0000000, -800.0000000, nullptr, nullptr },
+ /* 202 */{ 0x46, 0, stage::allStages[11], 51, 0x12, 0x12, 0b100001000000100100000, 0.0000000, -350.0000000, -2400.0000000, nullptr, nullptr },
+ /* 203 */{ 0x04, 7, stage::allStages[9], 5, 0x12, 0xFF, 0b100001000010100000000, 1195.0000000, 7400.0000000, 2350.0000000, nullptr, nullptr },
+ /* 204 */{ 0x04, 7, stage::allStages[9], 6, 0x12, 0xFF, 0b100001000010100000000, 6135.0000000, 8000.0000000, 0.0000000, nullptr, nullptr },
+ /* 205 */{ 0x26, 2, stage::allStages[9], 6, 0x12, 0x12, 0b100001000010100000000, 5350.0000000, 7400.0000000, 0.0000000, nullptr, nullptr },
+ /* 206 */{ 0x21, 3, stage::allStages[9], 4, 0x13, 0xFF, 0b100001000000110000000, -8740.0000000, 5100.0000000, -4515.0000000, nullptr, nullptr },
+ /* 207 */{ 0x04, 7, stage::allStages[9], 3, 0x12, 0xFF, 0b100001000000100000000, 0.0000000, 4850.0000000, 9200.0000000, nullptr, nullptr },
+ /* 208 */{ 0x21, 3, stage::allStages[9], 3, 0x13, 0xFF, 0b100001000000110000000, 1740.0000000, 4500.0000000, 5815.0000000, nullptr, nullptr },
+ /* 209 */{ 0x21, 3, stage::allStages[54], 2, 0x13, 0xFF, 0b100001000000010000000, 606.7956540, 1005.0000000, 8005.3901370, nullptr, nullptr },
+ /* 210 */{ 0x04, 7, stage::allStages[53], 4, 0x13, 0xFF, 0b000000000000000000000, 6500.0000000, 426.0000000, -977.0000000, nullptr, nullptr },
+ /* 211 */{ 0x21, 3, stage::allStages[56], 0, 0x13, 0xFF, 0b000000000000010000000, 31257.5957030, 900.0000000, -16115.4990230, nullptr, nullptr },
+ /* 212 */{ 0x06, 7, stage::allStages[56], 3, 0x13, 0xFF, 0b000000000000010000000, -10245.4765620, -4400.0000000, 42817.0467500, nullptr, nullptr },
+ /* 213 */{ 0x06, 7, stage::allStages[57], 8, 0x13, 0xFF, 0b000000000000010000000, -79819.4140620, -1301.2399900, 22400.6718750, nullptr, nullptr },
+ /* 214 */{ 0x06, 7, stage::allStages[56], 13, 0x13, 0xFF, 0b100000000010010000000, -93284.5703120, -5000.0000000, 18235.7246090, nullptr, nullptr },
+ /* 215 */{ 0x21, 3, stage::allStages[45], 5, 0x13, 0xFF, 0b100000100000010000000, -21012.1542970, 1350.0000000, -20630.3222660, nullptr, nullptr },
+ /* 216 */{ 0x06, 7, stage::allStages[59], 0, 0x13, 0xFF, 0b000000000000010000000, 16263.9707030, 989.6500240, 60708.4648440, nullptr, nullptr },
+ /* 217 */{ 0x18, 5, stage::allStages[12], 0, 0x14, 0xFF, 0b101000000010000000000, -1170.0834960, -755.0000000, 6670.0000000, nullptr, nullptr },
+ /* 218 */{ 0x04, 7, stage::allStages[12], 0, 0x14, 0xFF, 0b101000000010000000000, 1170.0000000, -755.0000000, 6670.0000000, nullptr, nullptr },
+ /* 219 */{ 0x20, 8, stage::allStages[12], 10, 0x14, 0xFF, 0b100000000010100000000, -14514.4443360, 0.0000000, -12000.8310550, nullptr, nullptr },
+ /* 220 */{ 0x23, 2, stage::allStages[12], 5, 0x14, 0x14, 0b101000000010100000000, 17665.1347660, 0.0000000, -11924.1035160, nullptr, nullptr },
+ /* 221 */{ 0x03, 7, stage::allStages[12], 7, 0x14, 0xFF, 0b101000000010100000000, 15824.6093750, -110.0000000, -9750.6855470, nullptr, nullptr },
+ /* 222 */{ 0x04, 7, stage::allStages[12], 7, 0x14, 0xFF, 0b101000000010100000000, 17550.0000000, 1500.0000000, -7200.0000000, nullptr, nullptr },
+ /* 223 */{ 0x05, 7, stage::allStages[12], 7, 0x14, 0xFF, 0b101000000010100000000, 13470.0000000, 1500.0000000, -7925.0000000, nullptr, nullptr },
+ /* 224 */{ 0x47, 0, stage::allStages[14], 51, 0x14, 0x14, 0b101000000010100000000, -0.3629600, 600.0000000, 2279.7690430, nullptr, nullptr },
+ /* 225 */{ 0x24, 2, stage::allStages[12], 4, 0x15, 0x15, 0b101000000001100000000, 10800.0000000, -1775.0000000, -11850.0000000, nullptr, nullptr },
+ /* 226 */{ 0x0F, 5, stage::allStages[12], 10, 0x15, 0xFF, 0b100000000001100000000, -11099.1240230, -1500.0000000, -15658.8515620, nullptr, nullptr },
+ /* 227 */{ 0x04, 7, stage::allStages[12], 10, 0x15, 0xFF, 0b100000000001100000000, -13458.7949220, 0.0000000, -13410.5566410, nullptr, nullptr },
+ /* 228 */{ 0x0B, 5, stage::allStages[12], 10, 0x15, 0xFF, 0b100000000001100000000, -10742.9599610, 0.0000000, -15156.7197270, nullptr, nullptr },
+ /* 229 */{ 0x03, 7, stage::allStages[12], 11, 0x15, 0xFF, 0b100000000001100000000, -15654.8398440, 2840.2299800, -18906.7890620, nullptr, nullptr },
+ /* 230 */{ 0x0F, 5, stage::allStages[12], 11, 0x15, 0xFF, 0b100000000001100000000, -12630.1699220, 2430.8999020, -19611.4316410, nullptr, nullptr },
+ /* 231 */{ 0x21, 3, stage::allStages[12], 11, 0x15, 0xFF, 0b100000000001100000000, -14567.1093750, 2281.0000000, -16989.0351560, nullptr, nullptr },
+ /* 232 */{ 0x04, 7, stage::allStages[12], 12, 0x15, 0xFF, 0b100000000001100000000, -15782.7958980, 2980.0000000, -11466.6982420, nullptr, nullptr },
+ /* 233 */{ 0x05, 7, stage::allStages[12], 12, 0x15, 0xFF, 0b100000000001100000000, -14270.5380860, 1982.1999510, -7411.9101560, nullptr, nullptr },
+ /* 234 */{ 0x0A, 5, stage::allStages[12], 12, 0x15, 0xFF, 0b100000000001100000000, -12592.9677730, 2400.0000000, -13712.7675780, nullptr, nullptr },
+ /* 235 */{ 0x21, 3, stage::allStages[12], 12, 0x15, 0xFF, 0b100000000001100000000, -11494.3183590, 3000.0000000, -9888.6738280, nullptr, nullptr },
+ /* 236 */{ 0x04, 7, stage::allStages[12], 13, 0x15, 0xFF, 0b100000000001100000000, 75.2376170, 4500.0000000, -10853.4550780, nullptr, nullptr },
+ /* 237 */{ 0x05, 7, stage::allStages[12], 13, 0x15, 0xFF, 0b100000000001100000000, 4010.3149410, 4500.0000000, -12451.9033200, nullptr, nullptr },
+ /* 238 */{ 0x26, 2, stage::allStages[12], 2, 0x15, 0x15, 0b100000000001100000000, -1090.9830320, 4500.0000000, -12411.7617190, nullptr, nullptr },
+ /* 239 */{ 0x04, 7, stage::allStages[12], 2, 0x15, 0xFF, 0b100000000001100000000, 11.8030090, 3000.0000000, -13501.7851560, nullptr, nullptr },
+ /* 240 */{ 0x05, 7, stage::allStages[12], 14, 0x15, 0xFF, 0b100000000001100000000, 0.0000000, 894.4799800, -23853.0000000, nullptr, nullptr },
+ /* 241 */{ 0x21, 3, stage::allStages[56], 3, 0x15, 0xFF, 0b000000000001000000000, -22100.0000000, -7176.0297850, 52140.0000000, nullptr, nullptr },
+ /* 242 */{ 0x06, 7, stage::allStages[52], 1, 0x15, 0xFF, 0b000000000001000000000, -2816.4138180, 1305.0787350, -1395.7875980, nullptr, nullptr },
+ /* 243 */{ 0x06, 7, stage::allStages[52], 1, 0x15, 0xFF, 0b000000000001000000000, 2798.9057620, 1322.1817720, -987.1356810, nullptr, nullptr },
+ /* 244 */{ 0x06, 7, stage::allStages[57], 16, 0x15, 0xFF, 0b000000000001000000000, -57374.0820310, -9100.0000000, 29237.9062500, nullptr, nullptr },
+ /* 245 */{ 0x20, 8, stage::allStages[15], 1, 0x15, 0xFF, 0b000000000000000000000, -3950.0000000, -1071.0000000, 1375.0000000, nullptr, nullptr },
+ /* 246 */{ 0x20, 8, stage::allStages[15], 2, 0x15, 0xFF, 0b000000000010000100000, -3950.0000000, -1200.0000000, -5075.0000000, nullptr, nullptr },
+ /* 247 */{ 0x24, 2, stage::allStages[15], 2, 0x15, 0x15, 0b000000000010000100000, -2700.0000000, -1196.0000000, -1661.0000000, nullptr, nullptr },
+ /* 248 */{ 0x06, 7, stage::allStages[15], 2, 0x15, 0xFF, 0b000000000001000100000, -2400.0000000, -21.2500000, -1550.0000000, nullptr, nullptr },
+ /* 249 */{ 0x21, 3, stage::allStages[15], 1, 0x15, 0xFF, 0b000000000010000000000, -6850.0000000, -771.2500000, 3200.0000000, nullptr, nullptr },
+ /* 250 */{ 0x05, 7, stage::allStages[15], 4, 0x15, 0xFF, 0b000000000010000000000, 3250.0000000, -696.2500000, 1235.0000000, nullptr, nullptr },
+ /* 251 */{ 0x20, 8, stage::allStages[15], 4, 0x15, 0xFF, 0b000000000010000000000, 4650.0000000, -696.2500000, 1235.0000000, nullptr, nullptr },
+ /* 252 */{ 0x05, 7, stage::allStages[15], 5, 0x15, 0xFF, 0b000000000001000100000, 5700.0000000, 3.7500000, -4350.0000000, nullptr, nullptr },
+ /* 253 */{ 0x05, 7, stage::allStages[15], 5, 0x15, 0xFF, 0b000000000001000100000, 2200.0000000, 3.7500000, -5100.0000000, nullptr, nullptr },
+ /* 254 */{ 0x23, 2, stage::allStages[15], 5, 0x15, 0x15, 0b000000000001000100000, 2300.0000000, -396.2500000, -3300.0000000, nullptr, nullptr },
+ /* 255 */{ 0x20, 8, stage::allStages[15], 5, 0x15, 0xFF, 0b000000000001000100000, 5600.0000000, -296.2500000, -3300.0000000, nullptr, nullptr },
+ /* 256 */{ 0x21, 3, stage::allStages[15], 4, 0x15, 0xFF, 0b000000000001000000000, 5352.5000000, -171.2500000, 3500.0000000, nullptr, nullptr },
+ /* 257 */{ 0x05, 7, stage::allStages[15], 4, 0x15, 0xFF, 0b000000000001000000000, 2547.5000000, -171.2500000, 3500.0000000, nullptr, nullptr },
+ /* 258 */{0x20, 8, stage::allStages[15], 7, 0xFF, 0xFF, 0b000000000001000000000, 1500.0000000, 128.7500000, 6250.0000000, nullptr, nullptr}, //PoT Central First Room Chest
+ /* 259 */{0x26, 2, stage::allStages[15], 11, 0xFF, 0xFF, 0b000000000001000100000, 0.0000000, 3130.0000000, -3600.0000000, nullptr, nullptr}, //PoT Big Key Chest
+ /* 260 */{0x20, 8, stage::allStages[15], 11, 0xFF, 0xFF, 0b000000000001000100000, -2900.0000000, -71.2500000, -2055.0000000, nullptr, nullptr}, //PoT Central Outdoor Chest
+ /* 261 */{0x20, 8, stage::allStages[15], 8, 0xFF, 0xFF, 0b000000000001000100000, -800.0000000, 1130.0000000, 1200.0000000, nullptr, nullptr}, //PoT Central Tower Chest
+ /* 262 */{0x06, 7, stage::allStages[20], 9, 0xFF, 0xFF, 0b000000100000000000000, 4025.0000000, 152.0000000, -11735.0000000, nullptr, nullptr}, //HC Graveyard Grave Switch Room Right Chest
+ /* 263 */{0x01, 7, stage::allStages[20], 9, 0xFF, 0xFF, 0b000000100000000000000, 3850.0000000, 152.0000000, -12725.0000000, nullptr, nullptr}, //HC Graveyard Grave Switch Room Front Left Small Chest
+ /* 264 */{0x04, 7, stage::allStages[20], 9, 0xFF, 0xFF, 0b000000100000000000000, 4075.0000000, 150.0000000, -12725.0000000, nullptr, nullptr}, //HC Graveyard Grave Switch Room Back Left Small Chest
+ /* 265 */{0x20, 8, stage::allStages[20], 9, 0xFF, 0xFF, 0b110000100000010000000, 375.0000000, 600.0000000, -6900.0000000, nullptr, nullptr}, //HC Graveyard Owl Statue Chest
+ /* 266 */{0x23, 2, stage::allStages[20], 14, 0xFF, 0xFF, 0b000100000000000000000, 1210.0000000, 0.0000000, -7002.0000000, nullptr, nullptr}, //HC Map Chest
+ /* 267 */{0x03, 7, stage::allStages[20], 14, 0xFF, 0xFF, 0b000100000000000000000, 4775.0000000, 1200.0000000, 3875.0000000, nullptr, nullptr}, //HC East Castle Balcony Chest
+ /* 268 */{0x04, 7, stage::allStages[20], 13, 0xFF, 0xFF, 0b000000000000000000000, -6420.0000000, 30.0000000, -8017.8183590, nullptr, nullptr}, //HC West Courtyard Northern Small Chest
+ /* 269 */{0x04, 7, stage::allStages[20], 13, 0xFF, 0xFF, 0b000000000000000000000, -6400.0000000, 350.0000000, 125.0000000, nullptr, nullptr}, //HC West Courtyard Central Small Chest
+ /* 270 */{0x24, 2, stage::allStages[20], 1, 0xFF, 0xFF, 0b000000000010000100000, 2400.0000000, 1250.0000000, -875.0000000, nullptr, nullptr}, //HC Compass Chest
+ /* 271 */{0x05, 7, stage::allStages[20], 2, 0xFF, 0xFF, 0b100100000010000000000, 25.0000000, 1875.0000000, -4975.0000000, nullptr, nullptr}, //HC Lantern Staircase Chest
+ /* 272 */{0x05, 7, stage::allStages[20], 1, 0xFF, 0xFF, 0b100001000010000100000, -1225.0000000, 2000.0000000, 2125.0000000, nullptr, nullptr}, //HC Main Hall Southwest Chest
+ /* 273 */{0x07, 7, stage::allStages[20], 1, 0xFF, 0xFF, 0b100001000010000100000, -2375.0000000, 1250.0000000, -900.0000000, nullptr, nullptr}, //HC Main Hall Northwest Chest
+ /* 274 */{0x20, 8, stage::allStages[20], 15, 0xFF, 0xFF, 0b100100000010000000000, 8685.0000000, 2000.0000000, 8690.0000000, nullptr, nullptr}, //HC Southeast Balcony Tower Chest
+ /* 275 */{0x26, 2, stage::allStages[20], 15, 0xFF, 0xFF, 0b100100000010000000000, -8700.0000000, 2000.0000000, 8700.0000000, nullptr, nullptr}, //HC Big Key Chest
+ /* 276 */{0x02, 7, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 3350.0000000, 6150.0000000, 3675.0000000, nullptr, nullptr}, //HC Treasure Room First Chest
+ /* 277 */{0x03, 7, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 3475.0000000, 6150.0000000, 3550.0000000, nullptr, nullptr}, //HC Treasure Room Second Chest
+ /* 278 */{0x04, 7, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 3600.0000000, 6150.0000000, 3425.0000000, nullptr, nullptr}, //HC Treasure Room Third Chest
+ /* 279 */{0x18, 5, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 3700.0000000, 6150.0000000, 3250.0000000, nullptr, nullptr}, //HC Treasure Room Fourth Chest
+ /* 280 */{0x0F, 5, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 3700.0000000, 6150.0000000, 3075.0000000, nullptr, nullptr}, //HC Treasure Room Fifth Chest
+ /* 281 */{0x0C, 5, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 3700.0000000, 6150.0000000, 2750.0000000, nullptr, nullptr}, //HC Treasure Room First Small Chest
+ /* 282 */{0x01, 7, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 3700.0000000, 6150.0000000, 2525.0000000, nullptr, nullptr}, //HC Treasure Room Second Small Chest
+ /* 283 */{0x10, 5, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 3700.0000000, 6150.0000000, 2300.0000000, nullptr, nullptr}, //HC Treasure Room Third Small Chest
+ /* 284 */{0x05, 7, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 2650.0000000, 6150.0000000, 2125.0000000, nullptr, nullptr}, //HC Treasure Room Fourth Small Chest
+ /* 285 */{0x1B, 5, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 2550.0000000, 6150.0000000, 2225.0000000, nullptr, nullptr}, //HC Treasure Room Fifth Small Chest
+ /* 286 */{0x07, 7, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 2450.0000000, 6150.0000000, 2325.0000000, nullptr, nullptr}, //HC Treasure Room Sixth Small Chest
+ /* 287 */{0x12, 5, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 2350.0000000, 6150.0000000, 2425.0000000, nullptr, nullptr}, //HC Treasure Room Seventh Small Chest
+ /* 288 */{0x06, 7, stage::allStages[20], 8, 0xFF, 0xFF, 0b100100000001100100000, 2250.0000000, 6150.0000000, 2525.0000000, nullptr, nullptr}, //HC Treasure Room Eighth Small Chest
+ /* 289 */{0x40, 0, stage::allStages[8], 2, 0x1, 0x1, 0b000000000000000000000, 205.3669740, 3901.0000000, -6120.5043950, nullptr, nullptr}, //FT Boomerang
+ /* 290 */{ 0x42, 0, stage::allStages[29], 51, 0x11, 0x11, 0b000000100100000000000, -0.0000460, 47.0000000, -473.7650150, nullptr, nullptr }, //SPR Ball and Chain
+ /* 291 */{0x2A, 1, stage::allStages[43], 0, 0x1, 0x2, 0b000000000000000000100, 3845.178467, 185.000000, 697.817505, nullptr, nullptr}, //Ordon Shield
+ /* 292 */{ 0x28, 1, stage::allStages[65], 4, 0x1, 0x7, 0b000000000000000000000, 266.211700, 0.000000, -55.204613, nullptr, nullptr }, //Ordon Sword
+ /* 293 */{0x4A, 0, stage::allStages[43], 0, 0x0, 0x0, 0b000000000000000000000, -532.611450, 75.000000, 2287.597412, nullptr, nullptr}, //Fishing Rod
+ /* 294 */{0x65, 9, stage::allStages[43], 0, 0x0, 0xFF, 0b000000000000000000000, 739.763489, 87.500000, -1685.456421, nullptr, nullptr}, //Sera Bottle
+ /* 295 */{0x4B, 12, stage::allStages[43], 0, 0x0, 0x0, 0b000000000000000000000, -461.078217, 1618.401978, 7681.837891, nullptr, nullptr}, //Slingshot
+ /* 296 */{0x48, 0, stage::allStages[45], 4, 0x0, 0x0, 0b100010000000000001000, -15089.815430, 26.508539, -14135.130859, nullptr, nullptr}, //Lantern
+ /* 297 */{0x2C, 12, stage::allStages[68], 3, 0x2, 0x2, 0b001000000000000000000, -500.0000000, 320.0000000, -695.0000000, nullptr, nullptr}, //Hylian Shield (Malo)
+ /* 298 */{0x2B, 12, stage::allStages[68], 3, 0x2, 0xFF, 0b001000000000000000000, -500.0000000, 320.0000000, -695.0000000, nullptr, nullptr}, //Wooden Shield (Malo)
+ /* 299 */{0x55, 1, stage::allStages[74], 7, 0x7, 0x7, 0b111111100010000000000, -4400.0000000, 0.0000000, 2500.0000000, nullptr, nullptr}, //Big Quiver
+ /* 300 */{ 0x56, 1, stage::allStages[74], 7, 0x15, 0x15, 0b111111100001000000000, -4400.0000000, 0.0000000, 2500.0000000, nullptr, nullptr }, //Giant Quiver
+ /* 301 */{0x2C, 12, stage::allStages[73], 4, 0x5, 0xFF, 0b111111100000000000000, -494.7930300, 100.0000000, 3701.0000000, nullptr, nullptr}, //Hylian Shield (Goron)
+ /* 302 */{0x21, 3, stage::allStages[46], 0, 0x2, 0xFF, 0b111111100000000000000, -2010.0000000, 151.0000000, 7897.0000000, nullptr, nullptr}, //Kakariko Bomb Rock Spire Heart Piece
+ /* 303 */{0x21, 3, stage::allStages[56], 6, 0x2, 0xFF, 0b110110000000000000000, -46688.0000000, -7953.0000000, 86307.0000000, nullptr, nullptr}, //Faron Tree Heart Piece
+ /* 304 */{0x21, 3, stage::allStages[56], 3, 0x2, 0xFF, 0b110110000000000000000, -21270.0000000, -5620.0000000, 55553.0000000, nullptr, nullptr}, //Kakariko Gorge Spire Heart Piece
+ /* 305 */{0x22, 3, stage::allStages[7], 50, 0x2, 0xFF, 0b110110000000000000000, 50.0000000, 3.0000000, 1703.0000000, nullptr, nullptr}, //Diababa Heart Container
+ /* 306 */{0x21, 3, stage::allStages[41], 0, 0x2, 0xFF, 0b001000000000000000000, -4358.0000000, 15307.0000000, -19476.0000000, nullptr, nullptr}, //Herding Goats Heart Piece
+ /* 307 */{0x22, 3, stage::allStages[4], 50, 0x4, 0xFF, 0b111111000000000000000, 203.0000000, 0.0000000, 830.0000000, nullptr, nullptr}, //Fyrus Heart Container
+ /* 308 */{0x22, 3, stage::allStages[1], 50, 0x7, 0xFF, 0b111111010010001000000, -915.0000000, -23960.0000000, 8916.0000000, nullptr, nullptr}, //Morpheel Heart Container
+ /* 309 */{ 0x22, 3, stage::allStages[25], 50, 0x10, 0xFF, 0b111111010010101000000, 85.0000000, 1799.0000000, -1264.0000000, nullptr, nullptr },
+ /* 310 */{ 0x22, 3, stage::allStages[28], 50, 0x12, 0xFF, 0b111111010110101000000, 279.0000000, 43.0000000, -865.0000000, nullptr, nullptr },
+ /* 311 */{ 0x22, 3, stage::allStages[10], 50, 0x13, 0xFF, 0b111111010110111000000, 900.0000000, 0.0000000, 0.0000000, nullptr, nullptr },
+ /* 312 */{ 0x22, 3, stage::allStages[13], 50, 0x15, 0xFF, 0b111111010101111000000, 317.0000000, 0.0000000, 764.0000000, nullptr, nullptr },
+ /* 313 */{0x22, 3, stage::allStages[16], 10, 0xFF, 0xFF, 0b111111010101111000000, -3.0000000, 2525.0000000, -14603.0000000, nullptr, nullptr}, //Zant Heart Container
+ /* 314 */{0x31, 1, stage::allStages[48], 0, 0x5, 0x5, 0b111111100000000000000, 21450.962891, 500.000000, 305.869934, nullptr, nullptr}, //Zora Armor
+ /* 315 */{ 0x30, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr }, //Magic Armor
+ /* 316 */{0x4F, 1, stage::allStages[52], 0, 0x5, 0xFF, 0b111111110000000000000, -77679.9375000, -18765.0000000, 40764.0000000, nullptr, nullptr}, //Giant Bomb Bag
+ /* 317 */{ 0x3D, 0, stage::allStages[48], 0, 0x10, 0x10, 0b111111010010101000000, 21413.962891, 500.681793, -368.516510, nullptr, nullptr },
+ /* 318 */{ 0x3E, 12, stage::allStages[68], 3, 0x4, 0x12, 0b111111000000000000000, -500.0000000, 320.0000000, -695.0000000, nullptr, nullptr }, //Hawkeye
+ /* 319 */{0x51, 0, stage::allStages[50], 0, 0x5, 0xFF, 0b111111010000000000000, 44.0000000, -3854.0000000, -2626.0000000, nullptr, nullptr}, //Goron Bomb Bag
+ /* 320 */{0x50, 0, stage::allStages[68], 1, 0x4, 0x4, 0b111111000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr}, //Barnes Bomb Bag
+ /* 321 */{0x51, 0, stage::allStages[52], 0, 0x5, 0xFF, 0b111111100000000000000, -77680.0000000, -18765.0000000, 40764.0000000, nullptr, nullptr},//Iza Bomb Bag
+ /* 322 */{ 0x90, 4, stage::allStages[52], 0, 0x8, 0x8, 0b111111010010001000000, -116117.015625, -15810.000000, 58812.617188, nullptr, nullptr }, //Auru's Memo
+ /* 323 */{ 0x91, 4, stage::allStages[51], 0, 0x10, 0x10, 0b000000000000000000000, 31608.291016, -13330.000000, -11652.610352, nullptr, nullptr }, //Aeshi's Sketch
+ /* 324 */{ 0x80, 4, stage::allStages[46], 0, 0xFF, 0x13, 0b000000000000000000000, -324.903625, 0.000000, 435.528595, nullptr, nullptr }, //Renardo's Letter
+ /* 325 */{ 0x81, 4, stage::allStages[53], 5, 0xFF, 0x13, 0b000000000000000000000, 2694.345215, -1150.000000, 3105.746826, nullptr, nullptr }, //Invoice
+ /* 326 */{ 0x82, 4, stage::allStages[57], 16, 0xFF, 0x13, 0b000000000000000000000, -51514.375000, -6269.229980, 31816.427734, nullptr, nullptr }, //Wooden Statue
+ /* 327 */{ 0x83, 4, stage::allStages[63], 0, 0xFF, 0x13, 0b000000000000000000000, 2077.769775, 104.958275, -1301.828491, nullptr, nullptr }, //Ilia's Charm
+ /* 328 */{ 0x84, 4, stage::allStages[68], 0, 0xFF, 0x13, 0b000000000000000000000, 312.675079, 0.000000, -160.984177, nullptr, nullptr }, //Horse Call
+ /* 329 */{0x9d, 9, stage::allStages[45], 4, 0x1, 0xFF, 0b000000000000000000000, -13659.433594, -0.454284, -14367.083008, nullptr, nullptr}, //Coro Bottle
+ /* 330 */{0x75, 9, stage::allStages[73], 5, 0xFF, 0xFF, 0b000000000000000000000, 4250.363281, 134.492020, 1813.639648, nullptr, nullptr}, //Jovani Bottle
+ /* 331 */{ 0x60, 9, stage::allStages[62], 0, 0x5, 0x5, 0b000000000000000000000, 5772.262695, 35.000000, 2218.249512, nullptr, nullptr }, //Fishing Hole Bottle
+ /* 332 */{0x2B, 12, stage::allStages[47], 3, 0x3, 0xFF, 0b001000000000000000000, -6545.0000000, -125.0000000, -2275.0000000, nullptr, nullptr}, //Wooden Shield (Goron)
+ /* 333 */{0x21, 3, stage::allStages[46], 0, 0x4, 0xFF, 0b000001000000000000000, -900.000000, 0.780221, 6600.000000, nullptr, nullptr}, //Bow Shooting Game Heart Piece
+ /* 334 */{0x21, 3, stage::allStages[53], 2, 0x5, 0xFF, 0b000000000000000000000, -4142.703125, 0.000000, -569.375000, nullptr, nullptr}, //Donation Heart Piece
+ /* 335 */{ 0x21, 3, stage::allStages[62], 0, 0xFF, 0xFF, 0b101000000010000000000, -2678.128906, -167.094162, 2246.794186, nullptr, nullptr },
+ /* 336 */{ 0x21, 3, stage::allStages[56], 0, 0x8, 0xFF, 0b000000000000000000000, -25148.583984, -200.000000, 9814.881836, nullptr, nullptr },
+ /* 337 */{ 0x21, 3, stage::allStages[61], 0, 0x8, 0xFF, 0b000000000000000000000, 3618.216797, 232.476608, 541.905518, nullptr, nullptr },
+ /* 338 */{ 0x21, 3, stage::allStages[55], 1, 0x8, 0xFF, 0b000000000000000000000, 4708.924805, 260.000000, -3120.967529, nullptr, nullptr },
+ /* 339 */{ 0x23, 2, stage::allStages[27], 1, 0xFF, 0x11, 0b000000000000000000000, 293.920288, 0.000000, -337.167480, nullptr, nullptr }, // Yeta Map
+ /* 340 */{ 0x21, 3, stage::allStages[51], 1, 0x12, 0xFF, 0b000000000000000000000, -71795.539062, -54450.000000, 56396.738281, nullptr, nullptr },
+ /* 341 */{ 0x21, 3, stage::allStages[63], 0, 0x13, 0xFF, 0b000000000000000000010, 2200.000000, 104.574730, -1200.000000, nullptr, nullptr },
+ /* 342 */{0x20, 8, stage::allStages[20], 13, 0xFF, 0xFF, 0b000000000000000000000, -7625.000000, 52.000000, -5525.000000, nullptr, nullptr}, //
+ /* 343 */{0x20, 8, stage::allStages[6], 7, 0x1, 0xFF, 0b000000000000000000000, -5703.254883, 4372.640137, 11664.798828, nullptr, nullptr},
-//Ooccoo
-/* 344 */{ 0x33, 2, stage::allStages[6], 1, 0x1, 0x1, 0b000000000000000000000, 3775.943604, 3167.790039, 5428.488281, nullptr, nullptr },
-/* 345 */{ 0x33, 2, stage::allStages[3], 14, 0x3, 0x3, 0b000000000000000000000, -14154.718750, 190.286682, 2185.947510, nullptr, nullptr },
-/* 346 */{ 0x33, 2, stage::allStages[0], 2, 0x6, 0x6, 0b000000000000000000000, 2045.683228, 1500.000000, 1642.919189, nullptr, nullptr },
-/* 347 */{ 0x33, 2, stage::allStages[24], 10, 0x9, 0x9, 0b000000000000000000000, -667.577815, -2100.000000, 4029.893311, nullptr, nullptr },
-/* 348 */{ 0x33, 2, stage::allStages[27], 2, 0x11, 0x11, 0b000000000000000000000, 3742.823975, 0.000000, 1621.097900, nullptr, nullptr },
-/* 349 */{ 0x33, 2, stage::allStages[9], 0, 0x12, 0x12, 0b000000000000000000000, -28.417549, 725.000000, 3091.288574, nullptr, nullptr },
-/* 350 */{ 0x33, 2, stage::allStages[12], 16, 0x14, 0x14, 0b000000000000000000000, 6082.295898, 0.000000, 5896.656738, nullptr, nullptr },
-//overworld keys
-/* 351 */{ 0xfe, 8, stage::allStages[45], 4, 0xFF, 0xFF, 0b000000000000000000000, -13659.433594, -0.454284, -14367.083008, nullptr, nullptr },
-/* 352 */{ 0xf3, 4, stage::allStages[58], 13, 0x5, 0xFF, 0b000000000000000000000, -93334.218750, -5725.979980, 44504.023438, nullptr, nullptr },
-/* 353 */{ 0x20, 8, stage::allStages[55], 1, 0x9, 0xFF, 0b000000000000000000000, 4543.199219, 261.860168, -3035.944092, nullptr, nullptr },
-//goron mines key shards
-/* 354 */{ 0xf9, 2, stage::allStages[3], 14, 0x3, 0x3, 0b000000000000000000000, -15375.557617, -636.630005, 1595.673462, nullptr, nullptr },
-/* 355 */{ 0xfa, 2, stage::allStages[3], 17, 0x3, 0x3, 0b000000000000000000000, 13007.017578, 2924.530029, -17705.732422, nullptr, nullptr },
-/* 356 */{ 0xfd, 2, stage::allStages[3], 16, 0x4, 0x3, 0b000000000000000000000, 13055.647461, 2400.500000, -1660.316895, nullptr, nullptr },
-//bugs
-/* 357 */{ 0xc0, 10, stage::allStages[56], 6, 0x2, 0xFF, 0b000000000000000000000, -50212.730469, -8840.560547, 86352.757812, nullptr, nullptr },
-/* 358 */{ 0xc1, 10, stage::allStages[56], 6, 0x2, 0xFF, 0b000100000010000000000, -38651.949219, -9189.901367, 73707.671875, nullptr, nullptr },
-/* 359 */{ 0xca, 10, stage::allStages[56], 3, 0x2, 0xFF, 0b000000000000000000000, -9730.929688, -7200.000000, 57526.199219, nullptr, nullptr },
-/* 360 */{ 0xcb, 10, stage::allStages[56], 3, 0x2, 0xFF, 0b000000000000000000000, 562.488159, -6092.589844, 61677.734375, nullptr, nullptr },
-/* 361 */{ 0xd4, 10, stage::allStages[48], 0, 0x2, 0xFF, 0b000000000000000000000, 17085.654297, 557.072510, -850.370605, nullptr, nullptr },
-/* 362 */{ 0xd5, 10, stage::allStages[68], 6, 0x2, 0xFF, 0b000000000000000000000, 205.938171, 17.797655, 4.593423, nullptr, nullptr },
-/* 363 */{ 0xc6, 10, stage::allStages[56], 0, 0x2, 0xFF, 0b000000000000000000000, 19503.787109, 662.713684, 13563.345703, nullptr, nullptr },
-/* 364 */{ 0xc7, 10, stage::allStages[56], 0, 0x2, 0xFF, 0b000000000000000000000, -10765.343750, 80.466759, -9151.101562, nullptr, nullptr },
-/* 365 */{ 0xc8, 10, stage::allStages[56], 0, 0x2, 0xFF, 0b000100000010000000000, 34607.441406, -260.000000, -14273.162109, nullptr, nullptr },
-/* 366 */{ 0xc9, 10, stage::allStages[56], 0, 0x2, 0xFF, 0b000100000010000000000, 37897.406250, -260.000000, -40525.894531, nullptr, nullptr },
-/* 367 */{ 0xcc, 10, stage::allStages[56], 13, 0x5, 0xFF, 0b000100000010000000000, -93754.703125, -5925.377441, 31642.708984, nullptr, nullptr },
-/* 368 */{ 0xcd, 10, stage::allStages[56], 13, 0x5, 0xFF, 0b000100000010000000000, -88147.609375, -6854.451660, 58998.777344, nullptr, nullptr },
-/* 369 */{ 0xc2, 10, stage::allStages[57], 8, 0x5, 0xFF, 0b000000000000000000000, -75074.406250, -384.115967, 16053.256836, nullptr, nullptr },
-/* 370 */{ 0xc3, 10, stage::allStages[57], 8, 0x5, 0xFF, 0b000100000010000000000, -78787.265625, -1472.352661, 2016.588013, nullptr, nullptr },
-/* 371 */{ 0xce, 10, stage::allStages[57], 16, 0x5, 0xFF, 0b000000000000000000000, -45085.273438, 6042.771484, 29910.453125, nullptr, nullptr },
-/* 372 */{ 0xcf, 10, stage::allStages[57], 16, 0x5, 0xFF, 0b000000000000000000000, -54377.070312, -5460.576660, 27647.970703, nullptr, nullptr },
-/* 373 */{ 0xc4, 10, stage::allStages[56], 10, 0x5, 0xFF, 0b000000000000000000000, -62781.214844, -1350.003052, -33241.687500, nullptr, nullptr },
-/* 374 */{ 0xc5, 10, stage::allStages[56], 10, 0x5, 0xFF, 0b000000000000000000000, -48976.765625, -677.295044, -50834.683594, nullptr, nullptr },
-/* 375 */{ 0xd2, 10, stage::allStages[50], 1, 0x5, 0xFF, 0b000000000000000000000, 3540.047363, -5150.441895, 15789.274414, nullptr, nullptr },
-/* 376 */{ 0xd3, 10, stage::allStages[61], 1, 0x5, 0xFF, 0b000000000000000000000, 6013.379395, 445.474884, -224.899765, nullptr, nullptr },
-/* 377 */{ 0xd6, 10, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 28767.958984, 524.933899, 58604.546875, nullptr, nullptr },
-/* 378 */{ 0xd7, 10, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 11790.147461, 340.034332, 55725.250000, nullptr, nullptr },
-/* 379 */{ 0xd0, 10, stage::allStages[54], 1, 0x12, 0xFF, 0b000000000000000000000, 1304.371826, 1005.000000, 7306.179688, nullptr, nullptr },
-/* 380 */{ 0xd1, 10, stage::allStages[54], 2, 0x12, 0xFF, 0b000100000010000000000, 521.038208, 1000.000000, 5867.415527, nullptr, nullptr },
-//bug rewards
-/* 381 */{ 0x35, 1, stage::allStages[73], 3, 0xFF, 0x5, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 382 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 383 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 384 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 385 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 386 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 387 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 388 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 389 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 390 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 391 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 392 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 393 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 394 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 395 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 396 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 397 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 398 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 399 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 400 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 401 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 402 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 403 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-/* 404 */{ 0x36, 1, stage::allStages[73], 3, 0xFF, 0x12, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
-//poes
-/*#1*/{ 0xe0, 11, stage::allStages[24], 2, 0x9, 0xFF, 0b000000000000000000010, 105.801384, -19.549999, -741.391968, nullptr, nullptr },
-/*#2*/{ 0xe0, 11, stage::allStages[24], 3, 0x9, 0xFF, 0b100000000010000000010, 3606.844482, 150.030182, -5323.249512, nullptr, nullptr },
-/*#3*/{ 0xe0, 11, stage::allStages[24], 5, 0x9, 0xFF, 0b000000000000000000010, 5712.277344, 1050.019775, 4526.544922, nullptr, nullptr },
-/*#4*/{ 0xe0, 11, stage::allStages[24], 8, 0x9, 0xFF, 0b000000000000000000010, -4197.771973, 1040.154663, 4983.674805, nullptr, nullptr },
-/*#5*/{ 0xe0, 11, stage::allStages[73], 5, 0x8, 0xFF, 0b000000000000000000010, 4186.364746, -75.000000, 2795.808350, nullptr, nullptr },
-/*#6*/{ 0xe0, 11, stage::allStages[31], 16, 0x10, 0xFF, 0b100000000000100000010, 126.849854, -20000.000000, -337.206903, nullptr, nullptr },
-/*#7*/{ 0xe0, 11, stage::allStages[31], 32, 0x13, 0xFF, 0b100000000100110000010, 231.875824, -40000.000000, -216.2944296, nullptr, nullptr },
-/*#8*/{ 0xe0, 11, stage::allStages[31], 43, 0x15, 0xFF, 0b100000000101110000010, -4560.734375, -53750.000000, -825.646851, nullptr, nullptr },
-/*#9*/{ 0xe0, 11, stage::allStages[12], 12, 0x15, 0xFF, 0b100000000001000000010, -12660.987305, 1982.199951, -7632.476074, nullptr, nullptr },
-/*#10*/{ 0xe0, 11, stage::allStages[12], 13, 0x15, 0xFF, 0b100000000001000000010, 3916.892090, 4496.779785, -12149.609375, nullptr, nullptr },
-/*#11*/{ 0xe0, 11, stage::allStages[47], 0, 0x8, 0xFF, 0b000000000000000000010, -2502.529785, -1533.660522, 18041.601562, nullptr, nullptr },
-/*#12*/{ 0xe0, 11, stage::allStages[45], 11, 0x8, 0xFF, 0b000000000000000000010, -25786.427734, 300.000000, -20456.810547, nullptr, nullptr },
-/*#13*/{ 0xe0, 11, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000010, 66240.039062, 143.258804, 56904.339844, nullptr, nullptr },
-/*#14*/{ 0xe0, 11, stage::allStages[59], 0, 0x9, 0xFF, 0b100000000010000000010, -816.907959, 2496.226562, 57933.289062, nullptr, nullptr },
-/*#15*/{ 0xe0, 11, stage::allStages[59], 0, 0x9, 0xFF, 0b100000000010000000010, 26747.324219, -46.507732, 26175.406250, nullptr, nullptr },
-/*#16*/{ 0xe0, 11, stage::allStages[37], 2, 0x9, 0xFF, 0b100000000010000000010, -1026.819824, 1.152117, -161.420013, nullptr, nullptr },
-/*#17*/{ 0xe0, 11, stage::allStages[37], 2, 0x9, 0xFF, 0b100000000010000000010, -286.849121, 3.514773, -895.548218, nullptr, nullptr },
-/*#18*/{ 0xe0, 11, stage::allStages[59], 0, 0x9, 0xFF, 0b100000000010000000010, -2024.554443, 16.013172, 11583.281250, nullptr, nullptr },
-/*#19*/{ 0xe0, 11, stage::allStages[55], 1, 0x9, 0xFF, 0b000000000000000000010, 1812.931274, 0.000000, 1155.415161, nullptr, nullptr },
-/*#20*/{ 0xe0, 11, stage::allStages[55], 3, 0x9, 0xFF, 0b000000000000000000010, 283.265228, 840.000000, -12366.407227, nullptr, nullptr },
-/*#21*/{ 0xe0, 11, stage::allStages[48], 0, 0x8, 0xFF, 0b000000000000000000010, 12836.060547, 100.000000, 178.608246, nullptr, nullptr },
-/*#22*/{ 0xe0, 11, stage::allStages[48], 0, 0x8, 0xFF, 0b000000000000000000010, 14444.615234, 256.835815, -527.642578, nullptr, nullptr },
-/*#24*/{ 0xe0, 11, stage::allStages[63], 0, 0x13, 0xFF, 0b100000000000010000010, 1683.054077, 480.000000, -6715.406250, nullptr, nullptr },
-/*#24*/{ 0xe0, 11, stage::allStages[57], 8, 0x8, 0xFF, 0b000000000000000000010, -81042.460938, -1650.079956, 21720.513672, nullptr, nullptr },
-/*#25*/{ 0xe0, 11, stage::allStages[57], 17, 0x8, 0xFF, 0b000000000000000000010, -42291.773438, -1400.000000, 10844.620117, nullptr, nullptr },
-/*#26*/{ 0xe0, 11, stage::allStages[56], 3, 0x8, 0xFF, 0b000000000000000000010, -10858.849609, -5700.000000, 55509.773438, nullptr, nullptr },
-/*#27*/{ 0xe0, 11, stage::allStages[32], 0, 0x8, 0xFF, 0b110000000000000000010, 4567.875977, 5027.688477, -5207.911621, nullptr, nullptr },
-/*#28*/{ 0xe0, 11, stage::allStages[56], 6, 0x8, 0xFF, 0b000000000000000000010, -45153.691406, -8909.261719, 74205.156250, nullptr, nullptr },
-/*#29*/{ 0xe0, 11, stage::allStages[56], 10, 0x8, 0xFF, 0b110000000000000000010, -45192.148438, -2474.139893, -32984.613281, nullptr, nullptr },
-/*#30*/{ 0xe0, 11, stage::allStages[35], 0, 0x8, 0xFF, 0b110000000000000000010, 269.485474, 22.380699, -981.643372, nullptr, nullptr },
-/*#31*/{ 0xe0, 11, stage::allStages[35], 0, 0x8, 0xFF, 0b110000000000000000010, -236.254684, 150.000000, -1036.175781, nullptr, nullptr },
-/*#32*/{ 0xe0, 11, stage::allStages[57], 16, 0x8, 0xFF, 0b000000000000000000010, -53146.578125, -5153.850098, 25666.673828, nullptr, nullptr },
-/*#33*/{ 0xe0, 11, stage::allStages[56], 13, 0x8, 0xFF, 0b100000001010000000010, -81177.609375, -6000.000000, 65960.148438, nullptr, nullptr },
-/*#34*/{ 0xe0, 11, stage::allStages[46], 0, 0x8, 0xFF, 0b000000000000000000010, 3372.341553, 2300.000000, -3018.808594, nullptr, nullptr },
-/*#35*/{ 0xe0, 11, stage::allStages[46], 0, 0x8, 0xFF, 0b000000000000000000010, -1487.586548, 3848.365234, -5915.137207, nullptr, nullptr },
-/*#36*/{ 0xe0, 11, stage::allStages[52], 0, 0x8, 0xFF, 0b000000000000000000010, -74531.953125, -18336.878906, 47025.640625, nullptr, nullptr },
-/*#37*/{ 0xe0, 11, stage::allStages[52], 0, 0x8, 0xFF, 0b000000000000000000010, -96335.820312, -17510.320312, 62149.574219, nullptr, nullptr },
-/*#38*/{ 0xe0, 11, stage::allStages[52], 0, 0x8, 0xFF, 0b000000000000000000010, -115949.156250, -15840.000000, 59894.671875, nullptr, nullptr },
-/*#39*/{ 0xe0, 11, stage::allStages[52], 0, 0x8, 0xFF, 0b101000000000000000010, -104251.976562, -18469.791016, 42262.726562, nullptr, nullptr },
-/*#40*/{ 0xe0, 11, stage::allStages[52], 0, 0x8, 0xFF, 0b101000000000000000010, -115114.968750, -14096.000000, 25330.574219, nullptr, nullptr },
-/*#41*/{ 0xe0, 11, stage::allStages[33], 0, 0x8, 0xFF, 0b100000100000000000010, 8918.118164, 355.380005, -6922.565430, nullptr, nullptr },
-/*#42*/{ 0xe0, 11, stage::allStages[33], 0, 0x8, 0xFF, 0b110000000000000000010, 801.443970, -4197.580078, -20497.589844, nullptr, nullptr },
-/*#43*/{ 0xe0, 11, stage::allStages[33], 0, 0x8, 0xFF, 0b110000000000000000010, 6740.693848, -5139.174805, -10953.290039, nullptr, nullptr },
-/*#44*/{ 0xe0, 11, stage::allStages[54], 3, 0x12, 0xFF, 0b100000100000000000010, -5483.465332, 500.000000, 5302.014648, nullptr, nullptr },
-/*#45*/{ 0xe0, 11, stage::allStages[54], 1, 0x12, 0xFF, 0b000000000000000000010, 1214.411987, 1639.093384, -3631.436035, nullptr, nullptr },
-/*#46*/{ 0xe0, 11, stage::allStages[54], 3, 0x12, 0xFF, 0b000000000000000000010, -21789.335936, 2200.000000, 10000.409180, nullptr, nullptr },
-/*#47*/{ 0xe0, 11, stage::allStages[51], 0, 0x11, 0xFF, 0b100000000000000010010, 843.887695, -9361.725586, -21468.560547, nullptr, nullptr },
-/*#48*/{ 0xe0, 11, stage::allStages[51], 0, 0x11, 0xFF, 0b100000000000000010010, 7834.021484, -8356.457031, -18110.230469, nullptr, nullptr },
-/*#49*/{ 0xe0, 11, stage::allStages[51], 0, 0x11, 0xFF, 0b100000000000000010010, -4954.811035, -4714.479980, -18838.253906, nullptr, nullptr },
-/*#50*/{ 0xe0, 11, stage::allStages[51], 2, 0x12, 0xFF, 0b100000000100000000010, -6137.537598, -1800.000000, -10043.368164, nullptr, nullptr },
-/*#51*/{ 0xe0, 11, stage::allStages[51], 1, 0x11, 0xFF, 0b100000000000000010010, -69507.492188, -52429.000000, 62508.425781, nullptr, nullptr },
-/*#52*/{ 0xe0, 11, stage::allStages[27], 0, 0x11, 0xFF, 0b000000000000000000010, -238.949356, -2.310000, 2920.424072, nullptr, nullptr },
-/*#53*/{ 0xe0, 11, stage::allStages[27], 0, 0x12, 0xFF, 0b100000000100000000010, 533.658569, -84.440002, 5910.784180, nullptr, nullptr },
-/*#54*/{ 0xe0, 11, stage::allStages[27], 6, 0x12, 0xFF, 0b100000000100000000010, 4784.004395, 950.000000, 331.876648, nullptr, nullptr },
-/*#55*/{ 0xe0, 11, stage::allStages[9], 2, 0x13, 0xFF, 0b100000000000010000010, -3295.982178, 2750.000000, 11.354874, nullptr, nullptr },
-/*#56*/{ 0xe0, 11, stage::allStages[9], 5, 0x12, 0xFF, 0b100000000010100000010, 1861.281128, 7400.000000, -358.31518, nullptr, nullptr },
-/*#57*/{ 0xe0, 11, stage::allStages[54], 2, 0x13, 0xFF, 0b100000000000010000010, -1086.470947, 925.000000, 6306.895020, nullptr, nullptr },
-/*#58*/{ 0xe0, 11, stage::allStages[61], 0, 0x8, 0xFF, 0b000000000000000000010, 942.983948, 817.438049, 3387.270996, nullptr, nullptr },
-/*#59*/{ 0xe0, 11, stage::allStages[50], 0, 0x8, 0xFF, 0b000000000000000000010, 3444.790039, -4658.747559, 11720.103516, nullptr, nullptr },
-/*#60*/{ 0xe0, 11, stage::allStages[50], 0, 0x8, 0xFF, 0b000000000000000000010, 297.160065, -4608.964844, 7384.047852, nullptr, nullptr },
-/*60 poe reward*/{ 0x07, 7, stage::allStages[73], 5, 0x15, 0xFF, 0b000000000000000000000, 4250.363281, 134.492020, 1813.639648, nullptr, nullptr },
-//sky book quest
-/*empty*/{ 0xe9, 0, stage::allStages[72], 0, 0x13, 0x13, 0b000000000000010000000, -532.266479, 1.500000, -343.810791, nullptr, nullptr },
-/*faron*/{ 0xea, 0, stage::allStages[45], 8, 0x13, 0x13, 0b000000000000010000000, -17500.000000, -310.000000, -20950.000000, nullptr, nullptr },
-/*eldin gorge*/{ 0xea, 0, stage::allStages[56], 3, 0x13, 0x13, 0b000000000000010000000, -10195.000000, -4760.000000, 39363.000000, nullptr, nullptr },
-/*edin bridge*/{ 0xea, 0, stage::allStages[56], 0, 0x13, 0x13, 0b000000000000010000000, 33650.000000, -80.000000, -35970.000000, nullptr, nullptr },
-/*west castle*/{ 0xea, 0, stage::allStages[57], 8, 0x13, 0x13, 0b000000000000010000000, -81950.000000, -1300.000000, 20650.000000, nullptr, nullptr },
-/*hylia bridge*/{ 0xea, 0, stage::allStages[56], 13, 0x13, 0x13, 0b000000000000010000000, -94664.000000, -5040.000000, 18311.000000, nullptr, nullptr },
-/*desert*/{ 0xea, 0, stage::allStages[59], 0, 0x13, 0x13, 0b000000000000010000000, 15120.000000, 952.169983, 59670.000000, nullptr, nullptr },
-//shop items
-//Ordon
-{0x64, 12, stage::allStages[65], 1, 0x5, 0xFF, 0b000000000000000000000, -55.0000000, 0.0000000, -156.0000000, nullptr, nullptr},
-{0x66, 12, stage::allStages[65], 1, 0x1, 0xFF, 0b000000000000000000000, -55.0000000, 0.0000000, -156.0000000, nullptr, nullptr},
-{0x9e, 12, stage::allStages[65], 1, 0x5, 0xFF, 0b000000000000000000000, -55.0000000, 0.0000000, -156.0000000, nullptr, nullptr},
-//Coro
-/*auto gotten*///{0x66, 12, stage::allStages[45], 4, 0x1, 0xFF, 0b000000000000000000000, -13659.433594, -0.454284, -14367.083008, nullptr, nullptr},
-//Malo Kakariko
-/*auto gotten*///{0x0e, 12, stage::allStages[68], 3, 0x5, 0xFF, 0b001000000000000000000, -500.0000000, 320.0000000, -695.0000000, nullptr, nullptr},
-{0x61, 12, stage::allStages[68], 3, 0x5, 0xFF, 0b001000000000000000000, -500.0000000, 320.0000000, -695.0000000, nullptr, nullptr},
-//Goron Shop Death Mountain
-/*auto gotten*///{0x0e, 12, stage::allStages[47], 3, 0x5, 0xFF, 0b001000000000000000000, -6545.0000000, -125.0000000, -2275.0000000, nullptr, nullptr},
-{0x66, 12, stage::allStages[47], 3, 0x3, 0xFF, 0b001000000000000000000, -6545.0000000, -125.0000000, -2275.0000000, nullptr, nullptr},
-{0x64, 12, stage::allStages[47], 3, 0x5, 0xFF, 0b001000000000000000000, -6545.0000000, -125.0000000, -2275.0000000, nullptr, nullptr},
-//Barnes
-/*auto gotten*///{0x0b, 12, stage::allStages[68], 1, 0x4, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr},
-/*auto gotten*///{0x0c, 12, stage::allStages[68], 1, 0x4, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr},
-/*auto gotten*///{0x0d, 12, stage::allStages[68], 1, 0x4, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr},
-/*auto gotten*///{0x16, 12, stage::allStages[68], 1, 0x5, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr},
-/*auto gotten*///{0x17, 12, stage::allStages[68], 1, 0x5, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr},
-/*auto gotten*///{0x18, 12, stage::allStages[68], 1, 0x5, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr},
-/*auto gotten*///{0x1d, 12, stage::allStages[68], 1, 0x8, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr},
-/*auto gotten*///{0x1a, 12, stage::allStages[68], 1, 0x8, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr},
-/*auto gotten*///{0x1b, 12, stage::allStages[68], 1, 0x8, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr},
-//Goron Night Kakariko
-{0x63, 12, stage::allStages[46], 0, 0x5, 0xFF, 0b001000000000000000000, -1350.000000, 0.000000, -3070.000000, nullptr, nullptr},
-{0x61, 12, stage::allStages[46], 0, 0x5, 0xFF, 0b001000000000000000000, -1350.000000, 0.000000, -3070.000000, nullptr, nullptr},
-{0x66, 12, stage::allStages[46], 0, 0x4, 0xFF, 0b001000000000000000000, -1350.000000, 0.000000, -3070.000000, nullptr, nullptr},
-//Goron Merchants Castle Town
-{0x61, 12, stage::allStages[73], 4, 0x5, 0xFF, 0b111111100000000000000, -685.106323, 100.000000, 3819.986572, nullptr, nullptr},
-{0x66, 12, stage::allStages[73], 4, 0x5, 0xFF, 0b111111100000000000000, -801.576233, 1000.000000, 4318.003906, nullptr, nullptr},
-{0x10, 12, stage::allStages[53], 0, 0x5, 0xFF, 0b111111100000000000000, -169.985306, 1120.000000, 3406.518799, nullptr, nullptr},
-{ 0x6d, 12, stage::allStages[53], 3, 0x8, 0xFF, 0b111111100000000000000, 511.206268, -200.000000, 7069.889160, nullptr, nullptr },
-//Malo Castle Town
-/*auto gotten*///{0x0d, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr},
-/*auto gotten*///{0x18, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr},
-/*auto gotten*///{0x1b, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr},
-/*auto gotten*///{0x0e, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr},
-{ 0x61, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr },
-{ 0x63, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr },
-//City In The Sky
-/*auto gotten*///{0x10, 12, stage::allStages[12], 16, 0x14, 0xFF, 0b111111100000000000000, -187.485748, 140.000000, -327.944885, nullptr, nullptr},
-/*auto gotten*///{0x0d, 12, stage::allStages[12], 16, 0x14, 0xFF, 0b111111100000000000000, -187.485748, 140.000000, -327.944885, nullptr, nullptr},
-{ 0x66, 12, stage::allStages[12], 16, 0x14, 0xFF, 0b111111100000000000000, -187.485748, 140.000000, -327.944885, nullptr, nullptr },
-{ 0x61, 12, stage::allStages[12], 16, 0x14, 0xFF, 0b111111100000000000000, -187.485748, 140.000000, -327.944885, nullptr, nullptr },
-{ 0x63, 12, stage::allStages[12], 16, 0x14, 0xFF, 0b111111100000000000000, -187.485748, 140.000000, -327.944885, nullptr, nullptr },
-//Fairy Tear Cave Of Ordeals (includes spring warps)
-{ 0x73, 12, stage::allStages[31], 49, 0x15, 0xFF, 0b100000000101110000010, -7.837189, -61250.000000, -3557.497070, nullptr, nullptr }//,
-//Scoopables
-//Nasty Soup
-//{0x6a, 12, stage::allStages[45], 4, 0x5, 0xFF, 0b010000000000000000000, -13961.199219, 0.000000, -14341.190430, nullptr, nullptr},
-//Trill
-//{0x69, 12, stage::allStages[45], 6, 0x5, 0xFF, 0b000000000000000000000, -37251.628906, 350.000000, -19399.669922, nullptr, nullptr},
-//{0x68, 12, stage::allStages[45], 6, 0x1, 0xFF, 0b000000000000000000000, -37285.023438, 350.000000, -19244.654297, nullptr, nullptr},
-//Oil pots
-//{0x68, 12, stage::allStages[24], 0, 0x9, 0xFF, 0b000000000000000000000, 852.599731, 1.000000, 5601.884766, nullptr, nullptr},
-//{0x68, 12, stage::allStages[20], 9, 0xFF, 0xFF, 0b000000000000000000000, 4335.721191, 152.000000, -11863.983398, nullptr, nullptr},
-//{0x68, 12, stage::allStages[20], 2, 0xFF, 0xFF, 0b000000000000000000000, -1334.620239, 1250.000000, -3007.779053, nullptr, nullptr},
-//Yeto soup
-//{0x7f, 12, stage::allStages[27], 2, 0x11, 0xFF, 0b000000000000000000000, 3154.522705, 144.729996, 340.811127, nullptr, nullptr},
+ //Ooccoo
+ /* 344 */{ 0x33, 2, stage::allStages[6], 1, 0x1, 0x1, 0b000000000000000000000, 3775.943604, 3167.790039, 5428.488281, nullptr, nullptr },
+ /* 345 */{ 0x33, 2, stage::allStages[3], 14, 0x3, 0x3, 0b000000000000000000000, -14154.718750, 190.286682, 2185.947510, nullptr, nullptr },
+ /* 346 */{ 0x33, 2, stage::allStages[0], 2, 0x6, 0x6, 0b000000000000000000000, 2045.683228, 1500.000000, 1642.919189, nullptr, nullptr },
+ /* 347 */{ 0x33, 2, stage::allStages[24], 10, 0x9, 0x9, 0b000000000000000000000, -667.577815, -2100.000000, 4029.893311, nullptr, nullptr },
+ /* 348 */{ 0x33, 2, stage::allStages[27], 2, 0x11, 0x11, 0b000000000000000000000, 3742.823975, 0.000000, 1621.097900, nullptr, nullptr },
+ /* 349 */{ 0x33, 2, stage::allStages[9], 0, 0x12, 0x12, 0b000000000000000000000, -28.417549, 725.000000, 3091.288574, nullptr, nullptr },
+ /* 350 */{ 0x33, 2, stage::allStages[12], 16, 0x14, 0x14, 0b000000000000000000000, 6082.295898, 0.000000, 5896.656738, nullptr, nullptr },
+ //overworld keys
+ /* 351 */{ 0xfe, 8, stage::allStages[45], 4, 0xFF, 0xFF, 0b000000000000000000000, -13022.520508, -3.070827, -14673.488281, nullptr, nullptr },
+ /* 352 */{ 0xf3, 4, stage::allStages[58], 13, 0x5, 0xFF, 0b000000000000000000000, -93334.218750, -5725.979980, 44504.023438, nullptr, nullptr },
+ /* 353 */{ 0x20, 8, stage::allStages[55], 1, 0x9, 0xFF, 0b000000000000000000000, 4087.104248, 260.000000, -3795.968262, nullptr, nullptr },
+ //goron mines key shards
+ /* 354 */{ 0xf9, 2, stage::allStages[3], 14, 0x3, 0x3, 0b000000000000000000000, -15375.557617, -636.630005, 1595.673462, nullptr, nullptr },
+ /* 355 */{ 0xfa, 2, stage::allStages[3], 17, 0x3, 0x3, 0b000000000000000000000, 13007.017578, 2924.530029, -17705.732422, nullptr, nullptr },
+ /* 356 */{ 0xfd, 2, stage::allStages[3], 16, 0x4, 0x3, 0b000000000000000000000, 13055.647461, 2400.500000, -1660.316895, nullptr, nullptr },
+ //bugs
+ /* 357 */{ 0xc0, 10, stage::allStages[56], 6, 0x2, 0xFF, 0b000000000000000000000, -50212.730469, -8840.560547, 86352.757812, nullptr, nullptr },
+ /* 358 */{ 0xc1, 10, stage::allStages[56], 6, 0x2, 0xFF, 0b000100000010000000000, -38651.949219, -9189.901367, 73707.671875, nullptr, nullptr },
+ /* 359 */{ 0xca, 10, stage::allStages[56], 3, 0x2, 0xFF, 0b000000000000000000000, -9730.929688, -7200.000000, 57526.199219, nullptr, nullptr },
+ /* 360 */{ 0xcb, 10, stage::allStages[56], 3, 0x2, 0xFF, 0b000000000000000000000, 562.488159, -6092.589844, 61677.734375, nullptr, nullptr },
+ /* 361 */{ 0xd4, 10, stage::allStages[48], 0, 0x2, 0xFF, 0b000000000000000000000, 17085.654297, 557.072510, -850.370605, nullptr, nullptr },
+ /* 362 */{ 0xd5, 10, stage::allStages[68], 6, 0x2, 0xFF, 0b000000000000000000000, 205.938171, 17.797655, 4.593423, nullptr, nullptr },
+ /* 363 */{ 0xc6, 10, stage::allStages[56], 0, 0x2, 0xFF, 0b000000000000000000000, 19503.787109, 662.713684, 13563.345703, nullptr, nullptr },
+ /* 364 */{ 0xc7, 10, stage::allStages[56], 0, 0x2, 0xFF, 0b000000000000000000000, -10765.343750, 80.466759, -9151.101562, nullptr, nullptr },
+ /* 365 */{ 0xc8, 10, stage::allStages[56], 0, 0x2, 0xFF, 0b000100000010000000000, 34607.441406, -260.000000, -14273.162109, nullptr, nullptr },
+ /* 366 */{ 0xc9, 10, stage::allStages[56], 0, 0x2, 0xFF, 0b000100000010000000000, 37897.406250, -260.000000, -40525.894531, nullptr, nullptr },
+ /* 367 */{ 0xcc, 10, stage::allStages[56], 13, 0x5, 0xFF, 0b000100000010000000000, -93754.703125, -5925.377441, 31642.708984, nullptr, nullptr },
+ /* 368 */{ 0xcd, 10, stage::allStages[56], 13, 0x5, 0xFF, 0b000100000010000000000, -88147.609375, -6854.451660, 58998.777344, nullptr, nullptr },
+ /* 369 */{ 0xc2, 10, stage::allStages[57], 8, 0x5, 0xFF, 0b000000000000000000000, -75074.406250, -384.115967, 16053.256836, nullptr, nullptr },
+ /* 370 */{ 0xc3, 10, stage::allStages[57], 8, 0x5, 0xFF, 0b000100000010000000000, -78787.265625, -1472.352661, 2016.588013, nullptr, nullptr },
+ /* 371 */{ 0xce, 10, stage::allStages[57], 16, 0x5, 0xFF, 0b000000000000000000000, -45085.273438, 6042.771484, 29910.453125, nullptr, nullptr },
+ /* 372 */{ 0xcf, 10, stage::allStages[57], 16, 0x5, 0xFF, 0b000000000000000000000, -54377.070312, -5460.576660, 27647.970703, nullptr, nullptr },
+ /* 373 */{ 0xc4, 10, stage::allStages[56], 10, 0x5, 0xFF, 0b000000000000000000000, -62781.214844, -1350.003052, -33241.687500, nullptr, nullptr },
+ /* 374 */{ 0xc5, 10, stage::allStages[56], 10, 0x5, 0xFF, 0b000000000000000000000, -48976.765625, -677.295044, -50834.683594, nullptr, nullptr },
+ /* 375 */{ 0xd2, 10, stage::allStages[50], 1, 0x5, 0xFF, 0b000000000000000000000, 3540.047363, -5150.441895, 15789.274414, nullptr, nullptr },
+ /* 376 */{ 0xd3, 10, stage::allStages[61], 1, 0x5, 0xFF, 0b000000000000000000000, 6013.379395, 445.474884, -224.899765, nullptr, nullptr },
+ /* 377 */{ 0xd6, 10, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 28767.958984, 524.933899, 58604.546875, nullptr, nullptr },
+ /* 378 */{ 0xd7, 10, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000000, 11790.147461, 340.034332, 55725.250000, nullptr, nullptr },
+ /* 379 */{ 0xd0, 10, stage::allStages[54], 1, 0x12, 0xFF, 0b000000000000000000000, 1304.371826, 1005.000000, 7306.179688, nullptr, nullptr },
+ /* 380 */{ 0xd1, 10, stage::allStages[54], 2, 0x12, 0xFF, 0b000100000010000000000, 521.038208, 1000.000000, 5867.415527, nullptr, nullptr },
+ //bug rewards
+ /* 381 */{ 0x35, 1, stage::allStages[73], 3, 0xFF, 0x5, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 382 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 383 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 384 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 385 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 386 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 387 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 388 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 389 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 390 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 391 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 392 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 393 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 394 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 395 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 396 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 397 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 398 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 399 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 400 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 401 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 402 */{ 0x06, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 403 */{ 0x05, 7, stage::allStages[73], 3, 0xFF, 0xFF, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ /* 404 */{ 0x36, 1, stage::allStages[73], 3, 0xFF, 0x12, 0b000000000000000000000, -123.609940, 40.000000, 305.168640, nullptr, nullptr },
+ //poes
+ /*#1*/{ 0xe0, 11, stage::allStages[24], 2, 0x9, 0xFF, 0b000000000000000000010, 105.801384, -19.549999, -741.391968, nullptr, nullptr },
+ /*#2*/{ 0xe0, 11, stage::allStages[24], 3, 0x9, 0xFF, 0b100000000010000000010, 3606.844482, 150.030182, -5323.249512, nullptr, nullptr },
+ /*#3*/{ 0xe0, 11, stage::allStages[24], 5, 0x9, 0xFF, 0b000000000000000000010, 5712.277344, 1050.019775, 4526.544922, nullptr, nullptr },
+ /*#4*/{ 0xe0, 11, stage::allStages[24], 8, 0x9, 0xFF, 0b000000000000000000010, -4197.771973, 1040.154663, 4983.674805, nullptr, nullptr },
+ /*#5*/{ 0xe0, 11, stage::allStages[73], 5, 0x8, 0xFF, 0b000000000000000000010, 4529.513672, -75.000000, 2609.175049, nullptr, nullptr },
+ /*#6*/{ 0xe0, 11, stage::allStages[31], 16, 0x10, 0xFF, 0b100000000000100000010, 126.849854, -20000.000000, -337.206903, nullptr, nullptr },
+ /*#7*/{ 0xe0, 11, stage::allStages[31], 32, 0x13, 0xFF, 0b100000000100110000010, 231.875824, -40000.000000, -216.2944296, nullptr, nullptr },
+ /*#8*/{ 0xe0, 11, stage::allStages[31], 43, 0x15, 0xFF, 0b100000000101110000010, -4560.734375, -53750.000000, -825.646851, nullptr, nullptr },
+ /*#9*/{ 0xe0, 11, stage::allStages[12], 12, 0x15, 0xFF, 0b100000000001000000010, -12660.987305, 1982.199951, -7632.476074, nullptr, nullptr },
+ /*#10*/{ 0xe0, 11, stage::allStages[12], 13, 0x15, 0xFF, 0b100000000001000000010, 3916.892090, 4496.779785, -12149.609375, nullptr, nullptr },
+ /*#11*/{ 0xe0, 11, stage::allStages[47], 0, 0x8, 0xFF, 0b000000000000000000010, -2502.529785, -1533.660522, 18041.601562, nullptr, nullptr },
+ /*#12*/{ 0xe0, 11, stage::allStages[45], 11, 0x8, 0xFF, 0b000000000000000000010, -25786.427734, 300.000000, -20456.810547, nullptr, nullptr },
+ /*#13*/{ 0xe0, 11, stage::allStages[59], 0, 0x9, 0xFF, 0b000000000000000000010, 66240.039062, 143.258804, 56904.339844, nullptr, nullptr },
+ /*#14*/{ 0xe0, 11, stage::allStages[59], 0, 0x9, 0xFF, 0b100000000010000000010, -816.907959, 2496.226562, 57933.289062, nullptr, nullptr },
+ /*#15*/{ 0xe0, 11, stage::allStages[59], 0, 0x9, 0xFF, 0b100000000010000000010, 26747.324219, -46.507732, 26175.406250, nullptr, nullptr },
+ /*#16*/{ 0xe0, 11, stage::allStages[37], 2, 0x9, 0xFF, 0b100000000010000000010, -1026.819824, 1.152117, -161.420013, nullptr, nullptr },
+ /*#17*/{ 0xe0, 11, stage::allStages[37], 2, 0x9, 0xFF, 0b100000000010000000010, -286.849121, 3.514773, -895.548218, nullptr, nullptr },
+ /*#18*/{ 0xe0, 11, stage::allStages[59], 0, 0x9, 0xFF, 0b100000000010000000010, -2024.554443, 16.013172, 11583.281250, nullptr, nullptr },
+ /*#19*/{ 0xe0, 11, stage::allStages[55], 1, 0x9, 0xFF, 0b000000000000000000010, 1812.931274, 0.000000, 1155.415161, nullptr, nullptr },
+ /*#20*/{ 0xe0, 11, stage::allStages[55], 3, 0x9, 0xFF, 0b000000000000000000010, 283.265228, 840.000000, -12366.407227, nullptr, nullptr },
+ /*#21*/{ 0xe0, 11, stage::allStages[48], 0, 0x8, 0xFF, 0b000000000000000000010, 12836.060547, 100.000000, 178.608246, nullptr, nullptr },
+ /*#22*/{ 0xe0, 11, stage::allStages[48], 0, 0x8, 0xFF, 0b000000000000000000010, 14444.615234, 256.835815, -527.642578, nullptr, nullptr },
+ /*#24*/{ 0xe0, 11, stage::allStages[63], 0, 0x13, 0xFF, 0b100000000000010000010, 1683.054077, 480.000000, -6715.406250, nullptr, nullptr },
+ /*#24*/{ 0xe0, 11, stage::allStages[57], 8, 0x8, 0xFF, 0b000000000000000000010, -81042.460938, -1650.079956, 21720.513672, nullptr, nullptr },
+ /*#25*/{ 0xe0, 11, stage::allStages[57], 17, 0x8, 0xFF, 0b000000000000000000010, -42291.773438, -1400.000000, 10844.620117, nullptr, nullptr },
+ /*#26*/{ 0xe0, 11, stage::allStages[56], 3, 0x8, 0xFF, 0b000000000000000000010, -10858.849609, -5700.000000, 55509.773438, nullptr, nullptr },
+ /*#27*/{ 0xe0, 11, stage::allStages[32], 0, 0x8, 0xFF, 0b110000000000000000010, 4567.875977, 5027.688477, -5207.911621, nullptr, nullptr },
+ /*#28*/{ 0xe0, 11, stage::allStages[56], 6, 0x8, 0xFF, 0b000000000000000000010, -45153.691406, -8909.261719, 74205.156250, nullptr, nullptr },
+ /*#29*/{ 0xe0, 11, stage::allStages[56], 10, 0x8, 0xFF, 0b110000000000000000010, -45192.148438, -2474.139893, -32984.613281, nullptr, nullptr },
+ /*#30*/{ 0xe0, 11, stage::allStages[35], 0, 0x8, 0xFF, 0b110000000000000000010, 269.485474, 22.380699, -981.643372, nullptr, nullptr },
+ /*#31*/{ 0xe0, 11, stage::allStages[35], 0, 0x8, 0xFF, 0b110000000000000000010, -236.254684, 150.000000, -1036.175781, nullptr, nullptr },
+ /*#32*/{ 0xe0, 11, stage::allStages[57], 16, 0x8, 0xFF, 0b000000000000000000010, -53146.578125, -5153.850098, 25666.673828, nullptr, nullptr },
+ /*#33*/{ 0xe0, 11, stage::allStages[56], 13, 0x8, 0xFF, 0b100000001010000000010, -81177.609375, -6000.000000, 65960.148438, nullptr, nullptr },
+ /*#34*/{ 0xe0, 11, stage::allStages[46], 0, 0x8, 0xFF, 0b000000000000000000010, 3372.341553, 2300.000000, -3018.808594, nullptr, nullptr },
+ /*#35*/{ 0xe0, 11, stage::allStages[46], 0, 0x8, 0xFF, 0b000000000000000000010, -1487.586548, 3848.365234, -5915.137207, nullptr, nullptr },
+ /*#36*/{ 0xe0, 11, stage::allStages[52], 0, 0x8, 0xFF, 0b000000000000000000010, -74531.953125, -18336.878906, 47025.640625, nullptr, nullptr },
+ /*#37*/{ 0xe0, 11, stage::allStages[52], 0, 0x8, 0xFF, 0b000000000000000000010, -96335.820312, -17510.320312, 62149.574219, nullptr, nullptr },
+ /*#38*/{ 0xe0, 11, stage::allStages[52], 0, 0x8, 0xFF, 0b000000000000000000010, -115949.156250, -15840.000000, 59894.671875, nullptr, nullptr },
+ /*#39*/{ 0xe0, 11, stage::allStages[52], 0, 0x8, 0xFF, 0b101000000000000000010, -104251.976562, -18469.791016, 42262.726562, nullptr, nullptr },
+ /*#40*/{ 0xe0, 11, stage::allStages[52], 0, 0x8, 0xFF, 0b101000000000000000010, -115114.968750, -14096.000000, 25330.574219, nullptr, nullptr },
+ /*#41*/{ 0xe0, 11, stage::allStages[33], 0, 0x8, 0xFF, 0b100000100000000000010, 8918.118164, 355.380005, -6922.565430, nullptr, nullptr },
+ /*#42*/{ 0xe0, 11, stage::allStages[33], 0, 0x8, 0xFF, 0b110000000000000000010, 801.443970, -4197.580078, -20497.589844, nullptr, nullptr },
+ /*#43*/{ 0xe0, 11, stage::allStages[33], 0, 0x8, 0xFF, 0b110000000000000000010, 6740.693848, -5139.174805, -10953.290039, nullptr, nullptr },
+ /*#44*/{ 0xe0, 11, stage::allStages[54], 3, 0x12, 0xFF, 0b100000100000000000010, -5483.465332, 500.000000, 5302.014648, nullptr, nullptr },
+ /*#45*/{ 0xe0, 11, stage::allStages[54], 1, 0x12, 0xFF, 0b000000000000000000010, 1214.411987, 1639.093384, -3631.436035, nullptr, nullptr },
+ /*#46*/{ 0xe0, 11, stage::allStages[54], 3, 0x12, 0xFF, 0b000000000000000000010, -21789.335936, 2200.000000, 10000.409180, nullptr, nullptr },
+ /*#47*/{ 0xe0, 11, stage::allStages[51], 0, 0x11, 0xFF, 0b100000000000000010010, 843.887695, -9361.725586, -21468.560547, nullptr, nullptr },
+ /*#48*/{ 0xe0, 11, stage::allStages[51], 0, 0x11, 0xFF, 0b100000000000000010010, 7834.021484, -8356.457031, -18110.230469, nullptr, nullptr },
+ /*#49*/{ 0xe0, 11, stage::allStages[51], 0, 0x11, 0xFF, 0b100000000000000010010, -4954.811035, -4714.479980, -18838.253906, nullptr, nullptr },
+ /*#50*/{ 0xe0, 11, stage::allStages[51], 2, 0x12, 0xFF, 0b100000000100000000010, -6137.537598, -1800.000000, -10043.368164, nullptr, nullptr },
+ /*#51*/{ 0xe0, 11, stage::allStages[51], 1, 0x11, 0xFF, 0b100000000000000010010, -69507.492188, -52429.000000, 62508.425781, nullptr, nullptr },
+ /*#52*/{ 0xe0, 11, stage::allStages[27], 0, 0x11, 0xFF, 0b000000000000000000010, -238.949356, -2.310000, 2920.424072, nullptr, nullptr },
+ /*#53*/{ 0xe0, 11, stage::allStages[27], 0, 0x12, 0xFF, 0b100000000100000000010, 533.658569, -84.440002, 5910.784180, nullptr, nullptr },
+ /*#54*/{ 0xe0, 11, stage::allStages[27], 6, 0x12, 0xFF, 0b100000000100000000010, 4784.004395, 950.000000, 331.876648, nullptr, nullptr },
+ /*#55*/{ 0xe0, 11, stage::allStages[9], 2, 0x13, 0xFF, 0b100000000000010000010, -3295.982178, 2750.000000, 11.354874, nullptr, nullptr },
+ /*#56*/{ 0xe0, 11, stage::allStages[9], 5, 0x12, 0xFF, 0b100000000010100000010, 1861.281128, 7400.000000, -358.31518, nullptr, nullptr },
+ /*#57*/{ 0xe0, 11, stage::allStages[54], 2, 0x13, 0xFF, 0b100000000000010000010, -1086.470947, 925.000000, 6306.895020, nullptr, nullptr },
+ /*#58*/{ 0xe0, 11, stage::allStages[61], 0, 0x8, 0xFF, 0b000000000000000000010, 942.983948, 817.438049, 3387.270996, nullptr, nullptr },
+ /*#59*/{ 0xe0, 11, stage::allStages[50], 0, 0x8, 0xFF, 0b000000000000000000010, 3444.790039, -4658.747559, 11720.103516, nullptr, nullptr },
+ /*#60*/{ 0xe0, 11, stage::allStages[50], 0, 0x8, 0xFF, 0b000000000000000000010, 297.160065, -4608.964844, 7384.047852, nullptr, nullptr },
+ /*60 poe reward*/{ 0x07, 7, stage::allStages[73], 5, 0x15, 0xFF, 0b000000000000000000000, 4250.363281, 134.492020, 1813.639648, nullptr, nullptr },
+ //sky book quest
+ /*empty*/{ 0xe9, 0, stage::allStages[72], 0, 0x13, 0x13, 0b000000000000010000000, -532.266479, 1.500000, -343.810791, nullptr, nullptr },
+ /*faron*/{ 0xea, 0, stage::allStages[45], 8, 0x13, 0x13, 0b000000000000010000000, -17500.000000, -310.000000, -20950.000000, nullptr, nullptr },
+ /*eldin gorge*/{ 0xea, 0, stage::allStages[56], 3, 0x13, 0x13, 0b000000000000010000000, -10195.000000, -4760.000000, 39363.000000, nullptr, nullptr },
+ /*edin bridge*/{ 0xea, 0, stage::allStages[56], 0, 0x13, 0x13, 0b000000000000010000000, 33650.000000, -80.000000, -35970.000000, nullptr, nullptr },
+ /*west castle*/{ 0xea, 0, stage::allStages[57], 8, 0x13, 0x13, 0b000000000000010000000, -81950.000000, -1300.000000, 20650.000000, nullptr, nullptr },
+ /*hylia bridge*/{ 0xea, 0, stage::allStages[56], 13, 0x13, 0x13, 0b000000000000010000000, -94664.000000, -5040.000000, 18311.000000, nullptr, nullptr },
+ /*desert*/{ 0xea, 0, stage::allStages[59], 0, 0x13, 0x13, 0b000000000000010000000, 15120.000000, 952.169983, 59670.000000, nullptr, nullptr },
+ //shop items
+ //Ordon
+ {0x64, 12, stage::allStages[65], 1, 0x5, 0xFF, 0b000000000000000000000, -55.0000000, 0.0000000, -156.0000000, nullptr, nullptr},
+ {0x66, 12, stage::allStages[65], 1, 0x1, 0xFF, 0b000000000000000000000, -55.0000000, 0.0000000, -156.0000000, nullptr, nullptr},
+ {0x9e, 12, stage::allStages[65], 1, 0x5, 0xFF, 0b000000000000000000000, -55.0000000, 0.0000000, -156.0000000, nullptr, nullptr},
+ //Coro
+ /*auto gotten*///{0x66, 12, stage::allStages[45], 4, 0x1, 0xFF, 0b000000000000000000000, -13659.433594, -0.454284, -14367.083008, nullptr, nullptr},
+ //Malo Kakariko
+ /*auto gotten*///{0x0e, 12, stage::allStages[68], 3, 0x5, 0xFF, 0b001000000000000000000, -500.0000000, 320.0000000, -695.0000000, nullptr, nullptr},
+ {0x61, 12, stage::allStages[68], 3, 0x5, 0xFF, 0b001000000000000000000, -500.0000000, 320.0000000, -695.0000000, nullptr, nullptr},
+ //Goron Shop Death Mountain
+ /*auto gotten*///{0x0e, 12, stage::allStages[47], 3, 0x5, 0xFF, 0b001000000000000000000, -6545.0000000, -125.0000000, -2275.0000000, nullptr, nullptr},
+ {0x66, 12, stage::allStages[47], 3, 0x3, 0xFF, 0b001000000000000000000, -6545.0000000, -125.0000000, -2275.0000000, nullptr, nullptr},
+ {0x64, 12, stage::allStages[47], 3, 0x5, 0xFF, 0b001000000000000000000, -6545.0000000, -125.0000000, -2275.0000000, nullptr, nullptr},
+ //Barnes
+ /*auto gotten*///{0x0b, 12, stage::allStages[68], 1, 0x4, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr},
+ /*auto gotten*///{0x0c, 12, stage::allStages[68], 1, 0x4, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr},
+ /*auto gotten*///{0x0d, 12, stage::allStages[68], 1, 0x4, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr},
+ /*auto gotten*///{0x16, 12, stage::allStages[68], 1, 0x5, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr},
+ /*auto gotten*///{0x17, 12, stage::allStages[68], 1, 0x5, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr},
+ /*auto gotten*///{0x18, 12, stage::allStages[68], 1, 0x5, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr},
+ /*auto gotten*///{0x1d, 12, stage::allStages[68], 1, 0x8, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr},
+ /*auto gotten*///{0x1a, 12, stage::allStages[68], 1, 0x8, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr},
+ /*auto gotten*///{0x1b, 12, stage::allStages[68], 1, 0x8, 0xFF, 0b000000000000000000000, 800.0000000, 0.0000000, -300.0000000, nullptr, nullptr},
+ //Goron Night Kakariko
+ {0x63, 12, stage::allStages[46], 0, 0x5, 0xFF, 0b001000000000000000000, -1350.000000, 0.000000, -3070.000000, nullptr, nullptr},
+ {0x61, 12, stage::allStages[46], 0, 0x5, 0xFF, 0b001000000000000000000, -1350.000000, 0.000000, -3070.000000, nullptr, nullptr},
+ {0x66, 12, stage::allStages[46], 0, 0x4, 0xFF, 0b001000000000000000000, -1350.000000, 0.000000, -3070.000000, nullptr, nullptr},
+ //Goron Merchants Castle Town
+ {0x61, 12, stage::allStages[73], 4, 0x5, 0xFF, 0b111111100000000000000, -685.106323, 100.000000, 3819.986572, nullptr, nullptr},
+ {0x66, 12, stage::allStages[73], 4, 0x5, 0xFF, 0b111111100000000000000, -801.576233, 1000.000000, 4318.003906, nullptr, nullptr},
+ {0x10, 12, stage::allStages[53], 0, 0x5, 0xFF, 0b111111100000000000000, -169.985306, 1120.000000, 3406.518799, nullptr, nullptr},
+ { 0x6d, 12, stage::allStages[53], 3, 0x8, 0xFF, 0b111111100000000000000, 511.206268, -200.000000, 7069.889160, nullptr, nullptr },
+ //Malo Castle Town
+ /*auto gotten*///{0x0d, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr},
+ /*auto gotten*///{0x18, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr},
+ /*auto gotten*///{0x1b, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr},
+ /*auto gotten*///{0x0e, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr},
+ { 0x61, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr },
+ { 0x63, 12, stage::allStages[73], 0, 0x8, 0xFF, 0b111111100000000000000, 1557.0000000, -200.0000000, 3491.0000000, nullptr, nullptr },
+ //City In The Sky
+ /*auto gotten*///{0x10, 12, stage::allStages[12], 16, 0x14, 0xFF, 0b111111100000000000000, -187.485748, 140.000000, -327.944885, nullptr, nullptr},
+ /*auto gotten*///{0x0d, 12, stage::allStages[12], 16, 0x14, 0xFF, 0b111111100000000000000, -187.485748, 140.000000, -327.944885, nullptr, nullptr},
+ { 0x66, 12, stage::allStages[12], 16, 0x14, 0xFF, 0b111111100000000000000, -187.485748, 140.000000, -327.944885, nullptr, nullptr },
+ { 0x61, 12, stage::allStages[12], 16, 0x14, 0xFF, 0b111111100000000000000, -187.485748, 140.000000, -327.944885, nullptr, nullptr },
+ { 0x63, 12, stage::allStages[12], 16, 0x14, 0xFF, 0b111111100000000000000, -187.485748, 140.000000, -327.944885, nullptr, nullptr },
+ //Fairy Tear Cave Of Ordeals (includes spring warps)
+ { 0x73, 12, stage::allStages[31], 49, 0x15, 0xFF, 0b100000000101110000010, -7.837189, -61250.000000, -3557.497070, nullptr, nullptr },//,
+ //Scoopables
+ //Nasty Soup
+ //{0x6a, 12, stage::allStages[45], 4, 0x5, 0xFF, 0b010000000000000000000, -13961.199219, 0.000000, -14341.190430, nullptr, nullptr},
+ //Trill
+ //{0x69, 12, stage::allStages[45], 6, 0x5, 0xFF, 0b000000000000000000000, -37251.628906, 350.000000, -19399.669922, nullptr, nullptr},
+ //{0x68, 12, stage::allStages[45], 6, 0x1, 0xFF, 0b000000000000000000000, -37285.023438, 350.000000, -19244.654297, nullptr, nullptr},
+ //Oil pots
+ //{0x68, 12, stage::allStages[24], 0, 0x9, 0xFF, 0b000000000000000000000, 852.599731, 1.000000, 5601.884766, nullptr, nullptr},
+ //{0x68, 12, stage::allStages[20], 9, 0xFF, 0xFF, 0b000000000000000000000, 4335.721191, 152.000000, -11863.983398, nullptr, nullptr},
+ //{0x68, 12, stage::allStages[20], 2, 0xFF, 0xFF, 0b000000000000000000000, -1334.620239, 1250.000000, -3007.779053, nullptr, nullptr},
+ //Yeto soup
+ //{0x7f, 12, stage::allStages[27], 2, 0x11, 0xFF, 0b000000000000000000000, 3154.522705, 144.729996, 340.811127, nullptr, nullptr},
+
+ //Custom Chests
+ //Shadow Crystal
+ /*493*/{ 0x32, 0, stage::allStages[54], 1, 0x7, 0x7, 0b000000000000000000000, -235.256332, 1625.000000, -4709.996582, nullptr, nullptr },
+ //Master Sword
+ /*494*/{ 0x29, 0, stage::allStages[54], 1, 0x7, 0x7, 0b000000000000000000000, 246.137573, 1625.000000, -4787.551270, nullptr, nullptr },
+ //Dominion Rod Uncharged
+ /*495*/{ 0x4C, 0, stage::allStages[75], 7, 0x13, 0x13, 0b000000000000000000000, -339.546478, -770.000000, -2616.305908, nullptr, nullptr },
+ //Light Sword
+ /*496*/ { 0x49, 0, stage::allStages[60], 1, 0x15, 0x15, 0b000000000000000000000, 1801.005249, 4413.458984, -21176.376953, nullptr, nullptr },
+
+ //Ending Blow
+ /*497*/ { 0xE1, 13, stage::allStages[45], 6, 0xFF, 0xFF, 0b000000000000000000000, -39511.792969, 1100.000000, -28626.875000, nullptr, nullptr },
+ //Shield Bash
+ /*498*/ { 0xE2, 13, stage::allStages[44], 1, 0xFF, 0xFF, 0b000000000000000000000, -1385.184692, 280.000000, -9465.467773, nullptr, nullptr },
+ //Back Slice
+ /*499*/ { 0xE3, 13, stage::allStages[57], 8, 0xFF, 0xFF, 0b000000000000000000000, -68497.195312, -1050.000000, 5886.681152, nullptr, nullptr },
+ //Helm Splitter
+ /*500*/ { 0xE4, 13, stage::allStages[57], 16, 0xFF, 0xFF, 0b000000000000000000000, -55693.375000, -6100.000000, 25161.146484, nullptr, nullptr },
+ //Mortal Draw
+ /*501*/ { 0xE5, 13, stage::allStages[59], 0, 0xFF, 0xFF, 0b000000000000000000000, -2930.295898, 24.520000, 11344.983398, nullptr, nullptr },
+ //Jump Strike
+ /*502*/ { 0xE6, 13, stage::allStages[48], 0, 0xFF, 0xFF, 0b000000000000000000000, 16308.677734, 525.000000, -31.427549, nullptr, nullptr },
+ //Great Spin
+ /*503*/ { 0xE7, 13, stage::allStages[53], 1, 0xFF, 0xFF, 0b000000000000000000000, 43.525406, 800.000000, -10109.346680, nullptr, nullptr }
};
-
- u16 checkPriorityOrder[20] = {
+
+ u16 checkPriorityOrder[24] = {
293, //fishing rod
0, //wooden sword
295, //slingshot
@@ -565,12 +590,16 @@ namespace mod::item
320, //bomb bag
314, //zora armor
58, //clawshot
+ 493, //Shadow Crystal
+ 494, //Master Sword
322, //Auru memo
155, //spinner
323, //Ashei sketch
317, //coral earring
290, //ball and chain
202, //doninion rod
- 224 //double clawshot
+ 495, //Charged Dominion Rod
+ 224, //double clawshot
+ 496 //Light Sword
};
} \ No newline at end of file
diff --git a/source/keyPlacement.cpp b/source/keyPlacement.cpp
index 1e6ae56..114be0f 100644
--- a/source/keyPlacement.cpp
+++ b/source/keyPlacement.cpp
@@ -517,7 +517,7 @@ namespace mod::keyPlacement
274,//SE Balcony Tower Chest
275//big key
};
-
+
u16 F_keys[2]
{
2,//North Cave Key
@@ -565,5 +565,5 @@ namespace mod::keyPlacement
419,//poe 15
422//poe 18
};
-
+
} \ No newline at end of file
diff --git a/source/mod.cpp b/source/mod.cpp
index c3d0975..28afd4e 100644
--- a/source/mod.cpp
+++ b/source/mod.cpp
@@ -4,6 +4,7 @@
#include "systemConsole.h"
#include "patch.h"
#include "controller.h"
+#include "customChecks.h"
#include "tools.h"
#include "array.h"
#include "eventListener.h"
@@ -25,6 +26,8 @@
#include <tp/f_op_actor_mng.h>
#include <tp/d_a_alink.h>
#include <tp/d_save.h>
+#include <tp/d_stage.h>
+#include <tp/dzx.h>
#include <tp/JFWSystem.h>
#include <tp/d_kankyo.h>
#include <tp/d_msg_flow.h>
@@ -170,7 +173,7 @@ namespace mod
hudConsole->addOption(page, "MDH Skip?", &Singleton::getInstance()->isMDHSkipEnabled, 0x1);
hudConsole->addOption(page, "Faron Escape?", &Singleton::getInstance()->isForestEscapeEnabled, 0x1);
hudConsole->addOption(page, "Open HF gates?", &Singleton::getInstance()->isGateUnlockEnabled, 0x1);
- hudConsole->addOption(page, "Skip Twilight?", &chestRandomizer->isTwilightSkipEnabled, 0x1);
+ hudConsole->addOption(page, "Skip Twilight?", &Singleton::getInstance()->isTwilightSkipped, 0x1);
hudConsole->addOption(page, "Skip Goats?", &Singleton::getInstance()->isGoatSkipEnabled, 0x1);
hudConsole->addOption(page, "Skip MS Puzzle?", &Singleton::getInstance()->isMSPuzzleSkipEnabled, 0x1);
hudConsole->addOption(page, "Skip Escort?", &Singleton::getInstance()->isCartEscortSkipEnabled, 0x1);
@@ -190,15 +193,17 @@ namespace mod
hudConsole->addWatch(page, "CurrentPosX:", &currentPosX, 's', WatchInterpretation::_str);
hudConsole->addWatch(page, "CurrentPosY:", &currentPosY, 's', WatchInterpretation::_str);
hudConsole->addWatch(page, "CurrentPosZ:", &currentPosZ, 's', WatchInterpretation::_str);
+ hudConsole->addWatch(page, "CurrentAngle:", &linkAngle, 's', WatchInterpretation::_str);
hudConsole->addWatch(page, "Sky Angle:", &skyAngle, 's', WatchInterpretation::_str);
//Game info 2
page = hudConsole->addPage("Skips 2");
- hudConsole->addOption(page, "Skip KB1", &Singleton::getInstance()->isKB1Skipped, 0x1);
hudConsole->addOption(page, "Early CiTS?", &Singleton::getInstance()->isEarlyCiTSEnabled, 0x1);
hudConsole->addOption(page, "Early Desert?", &Singleton::getInstance()->isEarlyDesertEnabled, 0x1);
hudConsole->addOption(page, "Boss Keysey?", &Singleton::getInstance()->isBossKeyseyEnabled, 0x1);
hudConsole->addOption(page, "No Shop Bottl?", &allowBottleItemsShopAnytime, 0x1);
+ hudConsole->addOption(page, "Fast transform?", &enableQuickTransform, 0x1);
+ hudConsole->addOption(page, "Skip Intro?", &Singleton::getInstance()->isIntroSkipped, 0x1);
//color
/*page = hudConsole->addPage("Tunic Color1");
@@ -247,6 +252,7 @@ namespace mod
//event info
page = hudConsole->addPage("Event Info");
+ hudConsole->addOption(page, "Coords as hex?", &coordsAreInHex, 0x1);
hudConsole->addWatch(page, "CurrentEventID:", &gameInfo.eventSystem.currentEventID, 'x', WatchInterpretation::_u8);
hudConsole->addWatch(page, "NextEventID:", &gameInfo.eventSystem.nextEventID, 'x', WatchInterpretation::_u8);
@@ -424,23 +430,17 @@ namespace mod
// Kill spider at Link's house
eventListener->addLoadEvent(stage::allStages[Stage_Ordon_Village], 0x1, 0xFF, 0xFF, 0xFF, game_patch::killLinkHouseSpider, event::LoadEventAccuracy::Stage_Room);
- // Skip MDH when the load happens
- eventListener->addLoadEvent(stage::allStages[Stage_Castle_Town_Interiors], 0x6, 0xC, 0xFF, 0xFF, game_patch::skipMDH, event::LoadEventAccuracy::Stage_Room_Spawn);
-
- // Allow Faron Escape
- eventListener->addLoadEvent(stage::allStages[Stage_Faron_Woods], 0xFF, 0xFF, 0x0, 0xFF, game_patch::allowFaronEscape, event::LoadEventAccuracy::Stage_Room_Spawn);
-
//Set Bublin Camp State
eventListener->addLoadEvent(stage::allStages[Stage_Bublin_Camp], 0xFF, 0xFF, 0x1, 0xFF, game_patch::setBublinState, event::LoadEventAccuracy::Stage_Room_Spawn);
- //unlock HF gates
- eventListener->addLoadEvent(stage::allStages[Stage_Hyrule_Field], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::unlockHFGates, event::LoadEventAccuracy::Stage);
+ //unlock HF gates and check for MDH
+ eventListener->addLoadEvent(stage::allStages[Stage_Hyrule_Field], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::setFieldBits, event::LoadEventAccuracy::Stage);
//skip goats 2
eventListener->addLoadEvent(stage::allStages[Stage_Ordon_Ranch], 0x0, 0x3, 0xFF, 0xFF, game_patch::skipGoats, event::LoadEventAccuracy::Stage_Room_Spawn);
//skip MS Puzzle
- eventListener->addLoadEvent(stage::allStages[Stage_Sacred_Grove], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::skipGrovePuzzle, event::LoadEventAccuracy::Stage);
+ eventListener->addLoadEvent(stage::allStages[Stage_Sacred_Grove], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::setGroveFlags, event::LoadEventAccuracy::Stage);
//skip Cart Escort
eventListener->addLoadEvent(stage::allStages[Stage_Hyrule_Field], 0xC, 0x2, 0xFF, 0xFF, game_patch::skipCartEscort, event::LoadEventAccuracy::Stage_Room_Spawn);
@@ -448,28 +448,17 @@ namespace mod
//Fix Lanayru Softlock
eventListener->addLoadEvent(stage::allStages[Stage_Lake_Hylia], 0x0, 0x5, 0xE, 0xFF, game_patch::setLanayruWolf, event::LoadEventAccuracy::Stage_Room_Spawn);
- //Skip KB1
- eventListener->addLoadEvent(stage::allStages[Stage_Kakariko_Village], 0x0, 0x22, 0xA, 0xFF, game_patch::skipKB1, event::LoadEventAccuracy::Stage_Room_Spawn);
-
- //Set the state of Faron if the player decides to do lanayru twilight before faron
- eventListener->addLoadEvent(stage::allStages[Stage_Faron_Woods], 0xFF, 0xFF, 0x0, 0xFF, game_patch::fixLanayruFaron, event::LoadEventAccuracy::Stage_Room_Spawn);
-
- //Sets the flags to open up the game
- eventListener->addLoadEvent(stage::allStages[Stage_Ordon_Village], 0x1, 0x15, 0xFF, 0xFF, game_patch::unlockBossDoors, event::LoadEventAccuracy::Stage_Room);
-
- //early CiTS
- eventListener->addLoadEvent(stage::allStages[Stage_Lake_Hylia], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::earlyCiTS, event::LoadEventAccuracy::Stage_Room_Spawn);
-
- //early Desert
- eventListener->addLoadEvent(stage::allStages[Stage_Lake_Hylia], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::earlyDesert, event::LoadEventAccuracy::Stage_Room_Spawn);
-
//desert Access
eventListener->addLoadEvent(stage::allStages[Stage_Gerudo_Desert], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::accessDesert, event::LoadEventAccuracy::Stage_Room_Spawn);
+
+ //Skip Midna Text and CS's
+ eventListener->addLoadEvent(stage::allStages[Stage_Faron_Woods], 0x1, 0x15, 0xFF, 0xFF, game_patch::skipTextAndCS, event::LoadEventAccuracy::Stage_Room_Spawn_State);
+
+ //Allow Escort Any Time
+ eventListener->addLoadEvent(stage::allStages[Stage_Castle_Town_Interiors], 0x5, 0xFF, 0xFF, 0xFF, game_patch::setEscortState, event::LoadEventAccuracy::Stage_Room_Spawn);
- //sell water bombs if you skip the escort
- eventListener->addLoadEvent(stage::allStages[Stage_Kakariko_Village], 0xFF, 0xFF, 0xFF, 0xFF, game_patch::sellWaterBombs, event::LoadEventAccuracy::Stage_Room_Spawn);
-
-
+ //Skip MDH Trigger
+ eventListener->addLoadEvent(stage::allStages[Stage_Lake_Hylia], 0x1, 0x16, 0xFF, 0xFF, game_patch::skipMDH, event::LoadEventAccuracy::Stage_Room_Spawn);
// =================
@@ -483,6 +472,25 @@ namespace mod
}
);
+ // Hook actor init function to use as a timing for placing custom chests as this function only creates actors at
+ // specific times
+ actorCommonLayerInit_trampoline = patch::hookFunction(tp::d_stage::actorCommonLayerInit,
+ [](void* mStatus_roomControl, tp::d_stage::dzxChunkTypeInfo* chunkTypeInfo, int unk3, void* unk4)
+ {
+ // if unk4 is nullptr and unk3 is 0 it's probably ourselves calling this function
+ // Thus don't call it again to avoid an infinite loop!
+ if (unk3 != 0 && unk4)
+ {
+ // doCustomTRESActor will call this function with unk3=0 and unk4=nullptr
+ // So we only need to pass the status_roomControl (which should be static through LST anyway)
+ // to maintain consistency
+ global::modPtr->doCustomTRESActor(mStatus_roomControl);
+ }
+
+ return global::modPtr->actorCommonLayerInit_trampoline(mStatus_roomControl, chunkTypeInfo, unk3, unk4);
+ }
+ );
+
checkTreasureRupeeReturn_trampoline = patch::hookFunction(tp::d_a_alink::checkTreasureRupeeReturn,
[](void* unk1, s32 item)
{
@@ -494,6 +502,10 @@ namespace mod
[](const float pos[3], s32 item, u8 unk3, s32 unk4, s32 unk5, const float unk6[3], const float unk7[3])
{
// Call replacement function
+ /*char txt[50];
+ snprintf(txt, 50, "0 = %f 1 = %f 2 = %f", pos[0], pos[1], pos[2]);
+ strcpy(sysConsolePtr->consoleLine[20].line, txt);*/
+
item = global::modPtr->procItemCreateFunc(pos, item, "createItemForPresentDemo");
return global::modPtr->createItemForPresentDemo_trampoline(pos, item, unk3, unk4, unk5, unk6, unk7);
@@ -580,17 +592,127 @@ namespace mod
return global::modPtr->procItem_func_UTUWA_HEART();
}
);
+
+ setItemBombNumCount_trampoline = patch::hookFunction(tp::d_com_inf_game::setItemBombNumCount,
+ [](u32 unk1, u8 bagNb, short amount)
+ {
+ u8 bombtype = 0;
+ if (bagNb == 0)
+ {
+ bombtype = gameInfo.scratchPad.itemWheel.Bomb_Bag_1;
+ }
+ else if (bagNb == 1)
+ {
+ bombtype = gameInfo.scratchPad.itemWheel.Bomb_Bag_2;
+ }
+ else if (bagNb == 2)
+ {
+ bombtype = gameInfo.scratchPad.itemWheel.Bomb_Bag_3;
+ }
+ char txt[50];
+ snprintf(txt, 50, "bag = %x amount = %d type = %x", bagNb, amount, bombtype);
+ strcpy(sysConsolePtr->consoleLine[20].line, txt);
+
+ /*u8 itemID = 0x0;
+ if (bombtype == items::Item::Bomb_Bag_Regular_Bombs)
+ {
+ if (amount == 5)
+ {
+ itemID = items::Item::Bombs_5;
+ }
+ else if (amount == 10)
+ {
+ itemID = items::Item::Bombs_10;
+ }
+ else if (amount == 20)
+ {
+ itemID = items::Item::Bombs_20;
+ }
+ else if (amount == 30)
+ {
+ itemID = items::Item::Bombs_30;
+ }
+ }
+ else if (bombtype == items::Item::Bomb_Bag_Water_Bombs)
+ {
+ if (amount == 3)
+ {
+ itemID = items::Item::Water_Bombs_3;
+ }
+ else if (amount == 5)
+ {
+ itemID = items::Item::Water_Bombs_5;
+ }
+ else if (amount == 10)
+ {
+ itemID = items::Item::Water_Bombs_10;
+ }
+ else if (amount == 15)
+ {
+ itemID = items::Item::Water_Bombs_15;
+ }
+ }
+ else if (bombtype == items::Item::Bomb_Bag_Bomblings)
+ {
+ if (amount == 1)
+ {
+ itemID = items::Item::Bombling_1;
+ }
+ else if (amount == 3)
+ {
+ itemID = items::Item::Bomblings_3;
+ }
+ else if (amount == 5)
+ {
+ itemID = items::Item::Bomblings_5;
+ }
+ else if (amount == 10)
+ {
+ itemID = items::Item::Bomblings_10;
+ }
+ }
+
+
+ float linkPos[3];
+ getPlayerPos(linkPos);
+
+ const float zero[3] = {0.0f,0.0f,0.0f};
+
+ amount = 0;
+
+ tp::f_op_actor_mng::createItemForPresentDemo(linkPos, itemID, 0, -1, -1, zero, zero);*/
+
+ return global::modPtr->setItemBombNumCount_trampoline(unk1, bagNb, amount);
+ }
+ );
}
void Mod::procNewFrame()
{
- float linkPos[3];
- getPlayerPos(linkPos);
+ float linkPos[3];
+ getPlayerPos(linkPos);
+
+ if (coordsAreInHex == 1)
+ {
+ typeTransform<float, u32> x = { linkPos[0] };
+ typeTransform<float, u32> y = { linkPos[1] };
+ typeTransform<float, u32> z = { linkPos[2] };
+
+ snprintf(currentPosX, 30, "%04x", x.b);
+ snprintf(currentPosY, 30, "%04x", y.b);
+ snprintf(currentPosZ, 30, "%04x", z.b);
+
+ snprintf(linkAngle, 30, "%02x", static_cast<u16>(tp::d_map_path_dmap::getMapPlayerAngleY()));
+ }
+ else
+ {
+ snprintf(currentPosX, 30, "%f", linkPos[0]);
+ snprintf(currentPosY, 30, "%f", linkPos[1]);
+ snprintf(currentPosZ, 30, "%f", linkPos[2]);
+
+ snprintf(linkAngle, 30, "%d", static_cast<u16>(tp::d_map_path_dmap::getMapPlayerAngleY()));
+ }
- snprintf(currentPosX, 30, "%f", linkPos[0]);
- snprintf(currentPosY, 30, "%f", linkPos[1]);
- snprintf(currentPosZ, 30, "%f", linkPos[2]);
- skyAngle = (u32)gameInfo.scratchPad.skyAngle;
if (gameInfo.ColorPtr != nullptr)
{
@@ -642,72 +764,6 @@ namespace mod
}*/
}
- /*scoopResult = 0;scoopResult = 0;
- checkResult = 0;
- itemsResult = 0;
- mapResult = 0;
- equipResult = 0;
- backResult = 0;
- zoomInResult = 0;
- zoomOutResult = 0;
- moveResult = 0;
- throwResult = 0;
- for (u16 i = 0x0; i < 0xD3; i++)
- {
- if (gameInfo.unk_5de4[i] == 0x6C && scoopResult == 0)
- {
- scoopResult = i;
- }
- if (gameInfo.unk_5de4[i] == 0x4D && skipResult == 0)
- {
- skipResult = i;
- }
- if (gameInfo.unk_5de4[i] == 0x72 && actionResult == 0)
- {
- actionResult = i;
- }
- if (gameInfo.unk_5de4[i] == 0x60 && itemsResult == 0)
- {
- itemsResult = i;
- }
- if (gameInfo.unk_5de4[i] == 0x5F && mapResult == 0)
- {
- mapResult = i;
- }
- if ((gameInfo.unk_5de4[i] == 0x29 || gameInfo.unk_5de4[i] == 0x3D || gameInfo.unk_5de4[i] == 0x69) && zoomResult == 0)
- {
- zoomResult = i;
- }
- if ((gameInfo.unk_5de4[i] == 0x5E || gameInfo.unk_5de4[i] == 0x8 || gameInfo.unk_5de4[i] == 0x80) && checkResult == 0)
- {
- checkResult = i;
- }
- if (gameInfo.unk_5de4[i] == 0x54 && equipResult == 0)
- {
- equipResult = i;
- }
- if ((gameInfo.unk_5de4[i] == 0x12 || gameInfo.unk_5de4[i] == 0x6A) && backResult == 0)
- {
- backResult = i;
- }
- if (gameInfo.unk_5de4[i] == 0x7D && zoomInResult == 0)
- {
- zoomInResult = i;
- }
- if (gameInfo.unk_5de4[i] == 0x7E && zoomOutResult == 0)
- {
- zoomOutResult = i;
- }
- if (gameInfo.unk_5de4[i] == 0x78 && moveResult == 0)
- {
- moveResult = i;
- }
- if ((gameInfo.unk_5de4[i] == 0x13 || gameInfo.unk_5de4[i] == 0x50))
- {
- throwResult = i;
- }
- }*/
-
if (trigerLoadSave == 1) {
trigerLoadSave = 0;
tools::triggerSaveLoad(stage::allStages[stage], room, spawn, state);
@@ -747,7 +803,8 @@ namespace mod
// Toggle console
system_console::setState(!sysConsolePtr->consoleEnabled, 0);
}
- else if (enableQuickTransform == 1 && gameInfo.rButtonText == 0 && (gameInfo.bButtonText == 0x3 || gameInfo.bButtonText == 0x26) && ((gameInfo.scratchPad.eventBits[0xD] & 0x4) != 0) && controller::checkForButtonInputSingleFrame(controller::PadInputs::Button_R))
+ /*else if (enableQuickTransform == 1 && gameInfo.rButtonText == 0 && ((((gameInfo.aButtonText == 0x79 || gameInfo.aButtonText == 0x0 || gameInfo.aButtonText == 0x4) && gameInfo.eventSystem.eventFlag ==0) && tp::d_a_alink::linkStatus->status == 0x1) || gameInfo.aButtonText == 0x9) &&
+ (gameInfo.scratchPad.eventBits[0xD] & 0x4) != 0 && controller::checkForButtonInputSingleFrame(controller::PadInputs::Button_R))
{
// Make sure Link is actually loaded
tp::d_com_inf_game::LinkMapVars* linkMapPtr = gameInfo.linkMapPtr;
@@ -759,12 +816,12 @@ namespace mod
tp::d_a_alink::procCoMetamorphoseInit(linkMapPtr);
}
}
- }
+ }*/
if (sysConsolePtr->consoleEnabled)
{
if (controller::checkForButtonInputSingleFrame((controller::PadInputs::Button_R | controller::PadInputs::Button_Start)))
- {
+ {
chestRandomizer->generate();
}
@@ -864,8 +921,8 @@ namespace mod
tools::setCutscene(false, false);
if (frame_counter == num_frames)
{
- tools::setItemFlag(ItemFlags::Vessel_Of_Light_Faron);//set flag for vessel since we'll skip it by reloading
- gameInfo.scratchPad.eventBits[0x6] |= 0x24; //warp the kak bridge, give map warp
+ tools::setItemFlag(ItemFlags::Vessel_Of_Light_Faron);//set flag for vessel since we'll skip it by reloading
+ gameInfo.scratchPad.movingActors.exploredRegions.Eldin = 0b1; // Set Eldin Map Unlocked so we can warp there
tools::setCutscene(true, false);
}
else
@@ -955,6 +1012,8 @@ namespace mod
fixLBTBossDoor();
+ preventPoweringUpDomRod();
+
// Call original function
fapGm_Execute_trampoline();
}
@@ -1258,7 +1317,7 @@ namespace mod
{
float linkPos[3];
getPlayerPos(linkPos);
-
+
u8 hasEmptyBottleAlready = 1;
if (gameInfo.scratchPad.itemWheel.Bottle_1 != items::Item::Empty_Bottle && gameInfo.scratchPad.itemWheel.Bottle_2 != items::Item::Empty_Bottle &&
gameInfo.scratchPad.itemWheel.Bottle_3 != items::Item::Empty_Bottle && gameInfo.scratchPad.itemWheel.Bottle_4 != items::Item::Empty_Bottle)
@@ -1653,6 +1712,21 @@ namespace mod
}
}
+ void Mod::preventPoweringUpDomRod()
+ {
+ if (gameInfo.scratchPad.itemWheel.Sky_Book == 0xFF && tools::checkItemFlag(ItemFlags::Ancient_Sky_Book_empty) && !tools::checkItemFlag(ItemFlags::Ancient_Sky_Book_partly_filled))
+ {
+ gameInfo.scratchPad.itemWheel.Sky_Book = items::Item::Ancient_Sky_Book_empty;
+ }
+ if (tp::d_a_alink::checkStageName("R_SP209"))
+ {
+ if (gameInfo.scratchPad.itemWheel.Sky_Book == items::Item::Ancient_Sky_Book_empty)
+ {
+ gameInfo.scratchPad.itemWheel.Sky_Book = 0xFF;
+ }
+ }
+ }
+
bool Mod::isStageShop()
{
u8 totalShopStages = sizeof(stage::shopStages) / sizeof(stage::shopStages[0]);
@@ -1665,4 +1739,76 @@ namespace mod
}
return false;
}
-} \ No newline at end of file
+
+ void Mod::doCustomTRESActor(void* mStatus_roomControl)
+ {
+ tp::d_com_inf_game::GameInfo* pGameInfo = &tp::d_com_inf_game::dComIfG_gameInfo;
+
+ u32 numChecks = sizeof(customChecks) / sizeof(customChecks[0]);
+
+ // Count and temp array for the checks for this stage+room
+ u32 checkCount = 0;
+ customCheck* checks = new customCheck[5]; // Assume there's never more than 5 custom checks per stage+room
+
+ // Loop through checks and place if correct room and stage
+ for (u32 i = 0; i < numChecks; i++)
+ {
+ customCheck* check = &customChecks[i];
+
+ if (0 == strcmp(pGameInfo->nextStageVars.nextStage, check->stage) &&
+ (0xFF == check->room || pGameInfo->nextStageVars.nextRoom == check->room) && // 0xFF = no need to check for room
+ check->requirement())
+ {
+ checks[checkCount] = *check;
+ checkCount++;
+ }
+ }
+
+ if (checkCount > 0)
+ {
+ // Create required structs
+ tp::d_stage::TRES* TRES = new tp::d_stage::TRES[checkCount];
+ tp::d_stage::dzxChunkTypeInfo chunkInfo;
+ strcpy(chunkInfo.tag, "ACTR"); // has to be ACTR for the function we use
+ chunkInfo.numChunks = checkCount;
+ chunkInfo.chunkDataPtr = TRES;
+
+ // Populate TRES array with data
+ for (u32 i = 0; i < checkCount; i++)
+ {
+ customCheck check = checks[i];
+
+ if (check.overrides != nullptr)
+ {
+ check.overrides();
+ }
+
+ strcpy(TRES[i].actorName, "tboxA0\0");
+ TRES[i].flags = 0xFF0FF000 | (check.chestType << 20) | (check.saveFlag << 4);
+
+ // Translate hex to float (1:1)
+ typeTransform<u32, float> X, Y, Z;
+ X.a = check.X;
+ Y.a = check.Y;
+ Z.a = check.Z;
+
+ TRES[i].X = X.b;
+ TRES[i].Y = Y.b;
+ TRES[i].Z = Z.b;
+
+ TRES[i].angle = check.Angle;
+
+ TRES[i].item = check.itemID;
+ }
+
+ // Create the actors; last 2 params 0 and nullptr to avoid infinite loop! (identification for self-call inside the
+ // hook)
+ tp::d_stage::actorCommonLayerInit(mStatus_roomControl, &chunkInfo, 0, nullptr);
+
+ delete[] TRES;
+ }
+
+ delete[] checks;
+ return;
+ }
+} // namespace mod \ No newline at end of file
diff --git a/source/singleton.cpp b/source/singleton.cpp
index 351fd12..9a26fe8 100644
--- a/source/singleton.cpp
+++ b/source/singleton.cpp
@@ -30,5 +30,8 @@ namespace mod
isBossKeyseyEnabled = 0;
isSewerSkipEnabled = 1;
shuffledSkybook = 1;
+ isIntroSkipped = 1;
+ isTwilightSkipped = 1;
}
+
} \ No newline at end of file