diff --git a/files.cmake b/files.cmake index 8c01f6ceda..259339c31c 100644 --- a/files.cmake +++ b/files.cmake @@ -1381,6 +1381,9 @@ set(DUSK_FILES src/dusk/OSThread.cpp src/dusk/OSMutex.cpp # Randomizer files + src/dusk/randomizer/game/flags.h + src/dusk/randomizer/game/stages.cpp + src/dusk/randomizer/game/stages.h src/dusk/randomizer/game/tools.cpp src/dusk/randomizer/game/tools.h src/dusk/randomizer/game/verify_item_functions.cpp diff --git a/include/d/d_com_inf_game.h b/include/d/d_com_inf_game.h index 782c6877e8..ecc4be6686 100644 --- a/include/d/d_com_inf_game.h +++ b/include/d/d_com_inf_game.h @@ -1432,6 +1432,12 @@ inline BOOL dComIfGs_isDarkClearLV(int i_no) { return g_dComIfG_gameInfo.info.getPlayer().getPlayerStatusB().isDarkClearLV(i_no); } +#if TARGET_PC +inline u8 dComIfGs_getDarkClearLV() { + return g_dComIfG_gameInfo.info.getPlayer().getPlayerStatusB().getDarkClearLV(); +} +#endif + inline void dComIfGs_onTransformLV(int i_no) { g_dComIfG_gameInfo.info.getPlayer().getPlayerStatusB().onTransformLV(i_no); } @@ -1509,6 +1515,12 @@ inline void dComIfGs_onRegionBit(int i_region) { g_dComIfG_gameInfo.info.getPlayer().getPlayerFieldLastStayInfo().onRegionBit(i_region); } +#if TARGET_PC +inline void dComIfGs_setRegionBit(u8 i_region) { + g_dComIfG_gameInfo.info.getPlayer().getPlayerFieldLastStayInfo().setRegionBit(i_region); +} +#endif + inline void dComIfGs_setPlayerFieldLastStayInfo(const char* i_stage, cXyz& i_pos, s16 i_angle, s8 i_point, u8 i_region) { g_dComIfG_gameInfo.info.getPlayer().getPlayerFieldLastStayInfo().set(i_stage, i_pos, i_angle, diff --git a/include/d/d_save.h b/include/d/d_save.h index 75149688e4..3f83f7aa74 100644 --- a/include/d/d_save.h +++ b/include/d/d_save.h @@ -203,6 +203,9 @@ public: void setTime(f32 i_time) { mTime = i_time; } u16 getDate() const { return mDate; } void setDate(u16 i_date) { mDate = i_date; } +#if TARGET_PC + u8 getDarkClearLV() const { return mDarkClearLevelFlag; } +#endif /* 0x00 */ BE(OSTime) mDateIpl; /* 0x08 */ u8 mTransformLevelFlag; @@ -276,6 +279,9 @@ public: bool isFieldDataExistFlag() const { return mFieldDataExistFlag ? true : false; } void offFieldDataExistFlag() { mFieldDataExistFlag = false; } void onFieldDataExistFlag() { mFieldDataExistFlag = true; } +#if TARGET_PC + void setRegionBit(u8 region) { mRegion |= region;} +#endif #if TARGET_PC /* 0x00 */ BE(Vec) mPos; diff --git a/src/d/d_com_inf_game.cpp b/src/d/d_com_inf_game.cpp index 6c69093e7e..07ddbc6ed9 100644 --- a/src/d/d_com_inf_game.cpp +++ b/src/d/d_com_inf_game.cpp @@ -30,6 +30,10 @@ #if TARGET_PC #include "dusk/randomizer/randomizer.hpp" #include "dusk/randomizer/utility/yaml.hpp" +#include "dusk/randomizer/game/tools.h" +#include "dusk/randomizer/game/stages.h" +#include "dusk/randomizer/game/flags.h" +#include "dusk/randomizer//game/verify_item_functions.h" #endif @@ -167,6 +171,580 @@ int dComIfG_play_c::getLayerNo_common_common(const char* i_stageName, int i_room layer = 14; } +#if TARGET_PC + // Special layer checks for randomizer + if (dComIfG_isRandomizer()) { + int stageID = getStageID(i_stageName); + bool condition = false; + bool darkIsClear = false; + + if (layer < 13) { + + switch(stageID) { + case Snowpeak_Ruins: { + if (dComIfGs_isEventBit(SNOWPEAK_RUINS_CLEARED)) { + layer = 3; + } + break; + } + case Snowpeak: { + if (dComIfGs_isEventBit(SNOWPEAK_RUINS_CLEARED) && (i_roomNo != 0)) { + layer = 3; + } + break; + } + case Faron_Woods: + case Faron_Woods_Interiors: { + if ((i_roomNo == 5) || (i_roomNo == 6)) { // North Faron or Mist Area + condition = dComIfGs_isEventBit(ORDON_DAY_2_OVER); // Talo Saved + if (condition) { + layer = 3; + } else { + layer = 1; + } + } + else { + condition = dComIfGs_isEventBit(ORDON_DAY_2_OVER); // Talo Saved + if (condition) { + condition = dComIfGs_isEventBit(FOREST_TEMPLE_CLEARED); // Forest Temple Completed + + if (condition) { + layer = 5; + } + } else { + layer = 1; + } + } + break; + } + + case Kakariko_Village: + { + condition = dComIfGs_isEventBit(WATCHED_CUTSCENE_AFTER_GORON_MINES); // Cutscene after GM Watched + if (condition == false) { + condition = dComIfGs_isEventBit(GORON_MINES_CLEARED); // Goron Mines Completed + if (condition == false) { + layer = 2; + + // If it is night, the layer is different. + dComIfG_get_timelayer(&layer); + } + else { + layer = 12; + } + } + else { + layer = 2; + dComIfG_get_timelayer(&layer); + } + + break; + } + case Kakariko_Graveyard: + { + condition = dComIfGs_isEventBit(GOT_ZORA_ARMOR_FROM_RUTELA); // Got Zora Armor from Rutela + if (condition == false) { + condition = dComIfGs_isEventBit(ZORA_ESCORT_CLEARED); // Zora Escort Cleared + + if (condition == false) { + layer = 2; + + // If it is night, the layer is different. + dComIfG_get_timelayer(&layer); + } + else { + layer = 4; + } + } + else { + layer = 2; + dComIfG_get_timelayer(&layer); + } + break; + } + + case Kakariko_Graveyard_Interiors: { + if (((i_roomNo == 1 && + (condition = dComIfGs_isEventBit(LAKEBED_TEMPLE_CLEARED), + condition != false)))) // Lakebed Completed + { + layer = 4; + dComIfG_get_timelayer(&layer); + } + else { + layer = 2; + dComIfG_get_timelayer(&layer); + } + break; + } + + case Kakariko_Village_Interiors: { + if (i_roomNo == 1) { // Lakebed Completed + layer = 4; + dComIfG_get_timelayer(&layer); + } + else if (i_roomNo == 3) { + layer = 2; + } + else { + layer = 2; + dComIfG_get_timelayer(&layer); + } + break; + } + + case Death_Mountain: { + condition = + dComIfGs_isEventBit(GORON_MINES_CLEARED); // Goron Mines Completed + + if (condition) { + layer = 2; + } + break; + } + + case Death_Mountain_Interiors: { + layer = 0; + break; + } + + case Lake_Hylia: { + if (i_roomNo == 1) { // Lanayru Spring + + condition = dComIfGs_isEventBit(LAKEBED_TEMPLE_CLEARED); // Lakebed Temple has been completed + if (condition) { + condition = dComIfGs_isEventBit(MIDNAS_DESPERATE_HOUR_STARTED); // MDH has been started + if (condition == false) { + layer = 9; + } + else { + layer = 2; + } + } + } + else { + condition = dComIfGs_isEventBit(SKY_CANNON_REPAIRED); // Sky Cannon Repaired + if (condition == false) { + condition = dComIfGs_isEventBit(WARPED_SKY_CANNON_TO_LAKE_HYLIA); // Sky Cannon Warped to Lake Hylia + + if (condition == false) { + layer = 2; + } + else { + layer = 1; + } + } + else { + layer = 3; + } + } + break; + } + + case Castle_Town_Interiors: + { + if (condition = dComIfGs_isEventBit(LAKEBED_TEMPLE_CLEARED),condition) { // Lakebed Temple Completed + layer = 2; + if (condition = dComIfGs_isEventBit(MIDNAS_DESPERATE_HOUR_COMPLETED),condition) { // MDH Completed + layer = 0; + } + } + if (i_roomNo == 5) { // Telma's Bar + layer = 4; + } + break; + } + + case Castle_Town: { + condition = dComIfGs_isEventBit(MIDNAS_DESPERATE_HOUR_COMPLETED); // MDH Completed + if (condition == false) { + condition = dComIfGs_isEventBit(LAKEBED_TEMPLE_CLEARED); // Lakebed Temple Completed + if (condition == false) { + if ((i_roomNo == 3) && + (condition = dComIfGs_isEventBit(ZORA_ESCORT_CLEARED),condition != false)) { // Zora Escort Cleared + layer = 1; + } + else if (i_roomNo == 4) { + layer = 1; + } + } + else { + layer = 2; + } + } + else { + if (((i_roomNo == 4) || (i_roomNo == 3)) || (i_roomNo == 1)) { + layer = 1; + } + else { + layer = 0; + } + } + + if (i_roomNo == 0) { + if (dComIfGs_getStartPoint() == 0xF) { + layer = 5; + } + } + break; + } + + case Zoras_Domain: { + layer = 0; + break; + } + + case Upper_Zoras_River: { + condition = dComIfGs_isEventBit(IZA_1_MINIGAME_UNLOCKED); // Iza 1 Unlocked + if (condition != false) + { + layer = 1; + } + break; + } + + case Gerudo_Desert: { + layer = 8; + + condition = dComIfGs_isEventBit(VISITED_DESERT_FOR_THE_FIRST_TIME); // Have been to desert + if (condition != false) { + layer = 0; + } + break; + } + + case Zoras_River: { + condition = dComIfGs_isEventBit(IZA_1_MINIGAME_DONE); // Iza 1 Minigame Completed + + if (condition == false) { + condition = dComIfGs_isEventBit(STARTED_IZA_1_MINIGAME); // Iza 1 Minigame Started + if (condition != false) { + layer = 2; + } + } + else { + layer = 1; + } + break; + } + + case Ordon_Village: { + if (i_roomNo == 0) { + if (!dKy_daynight_check()) { + layer = 0; + } + else { + layer = 5; + } + } + + else { + if (i_roomNo == 1) { + condition = + dComIfGs_isEventBit(ORDON_DAY_1_FINISHED); // Ordon Day 1 done + + if (condition) { + condition = dComIfGs_isEventBit(ORDON_DAY_2_OVER); // Talo Saved + if (condition) { + layer = 2; + } + else { + layer = 4; + } + } + else { + layer = 3; + } + } + } + break; + } + + case Ordon_Village_Interiors: + { + /* not used in randomizer anymore. keeping for documentation sake + if ( i_roomNo == 1 ) // Sera's Shop + { + condition = dComIfGs_isEventBit( + BOUGHT_SLINGSHOT_FROM_SERA ); // Bought slinghot from Sera + + if ( condition ) + { + layer = 2; + } + }*/ + if (i_roomNo == 2) { // Jaggle's House + + darkIsClear = dComIfGs_isDarkClearLV(0); + if (darkIsClear == false) { + condition = dComIfGs_isEventBit(FINISHED_SEWERS); // First Trip to Sewers done + if (condition != false) { + layer = 1; + } + } + else { + layer = 1; + } + } + /* not used in randomizer anymore. keeping for documentation sake + else + { + if ( i_roomNo == 5 ) // Rusl's House + { + darkIsClear = libtp::tp::d_save::isDarkClearLV( playerStatusBPtr, 0 ); + if ( darkIsClear != false ) + { + layer = 2; + } + } + }*/ + + break; + } + + case Ordon_Spring: { + condition = dComIfGs_isEventBit(ORDON_DAY_2_OVER); // Talo saved + if (condition) { + condition = + dComIfGs_isEventBit(FINISHED_SEWERS); // First trip to Sewers done + + if (condition) { + darkIsClear = dComIfGs_isDarkClearLV(0); + if (darkIsClear != false) { + layer = 2; + } + else { + layer = 4; + } + } + else { + layer = 0; + } + } + else { + condition = dComIfGs_isEventBit(TALO_CHASES_MONKEY); // Sword training done on Ordon Day 2 + if (condition) { + layer = 3; + } + else { + layer = 1; + } + } + + break; + } + + case Ordon_Ranch: { + condition = dComIfGs_isEventBit(ORDON_DAY_1_FINISHED); // Day 1 done + if (condition) { + condition = dComIfGs_isEventBit(ORDON_DAY_2_OVER); // Talo Saved + if (condition) { + condition = dComIfGs_isEventBit(WATCHED_CUTSCENE_AFTER_GOATS_2); // Saw CS after Goats 2 done + + if (condition) { + layer = 2; + dComIfG_get_timelayer(&layer); + } + else { + layer = 9; + } + } + else { + layer = 2; + } + } + else { + layer = 12; + } + break; + } + + case Hyrule_Field: { + // First 3 twilights are cleared + if ((dComIfGs_getDarkClearLV() & 0x7) == 0x7) { + if (dComIfGs_isEventBit(MIDNAS_DESPERATE_HOUR_COMPLETED)) { + layer = 6; + } + else if (dComIfGs_isEventBit(MIDNAS_DESPERATE_HOUR_STARTED)) { + layer = 4; + } + else { + layer = 0; + } + } + else { + layer = 0; + } + break; + } + + case Outside_Castle_Town: { + if (i_roomNo == 8) { + condition = dComIfGs_isEventBit(MIDNAS_DESPERATE_HOUR_COMPLETED); // MDH Completed + if (condition == false) { + condition = dComIfGs_isEventBit(MIDNAS_DESPERATE_HOUR_STARTED); // MDH State Activated + if (condition != false) { + layer = 4; + } + } + else { + layer = 6; + } + } + else { + if (i_roomNo == 0x10) { + condition = dComIfGs_isEventBit(GOT_WOOD_STATUE); // Wooden Statue Gotten + if (condition == false) { + condition = dComIfGs_isEventBit(TALKED_TO_LOUISE_ABOUT_THE_STOLEN_STATUE); // Talked to Louise after Medicine Scent + if (condition == false) { + condition = dComIfGs_isEventBit(MIDNAS_DESPERATE_HOUR_COMPLETED); // MDH Completed + if (condition == false) { + condition = dComIfGs_isEventBit(MIDNAS_DESPERATE_HOUR_STARTED); // MDH State Activated + if (condition != false) { + layer = 4; + } + else { + layer = 6; + } + } + else { + layer = 6; + } + } + else { + layer = 1; + } + } + else { + layer = 6; + } + } + else { + if (i_roomNo == 0x11) { + condition = dComIfGs_isEventBit(MIDNAS_DESPERATE_HOUR_COMPLETED); // MDH Completed + if (condition == false) { + condition = dComIfGs_isEventBit(MIDNAS_DESPERATE_HOUR_STARTED); // MDH State Activated + if (condition != false) { + layer = 4; + } + } + else { + layer = 0; + } + } + } + } + break; + } + + case Hidden_Village: { + condition = dComIfGs_isEventBit(GAVE_ILIA_THE_WOOD_STATUE); // Ilia shown the wooden statue + if (condition != false) { + condition = dComIfGs_isEventBit(GOT_ILIAS_CHARM); // Ilia shown Ilia's Charm + if (condition != false) { + layer = 1; + } + } + else { + layer = 1; + } + + break; + } + + case Castle_Town_Shops: { + if (i_roomNo == 5) { + layer = 0; + condition = dComIfGs_isEventBit(MIDNAS_DESPERATE_HOUR_STARTED); + if (condition) { + layer = 1; + condition = dComIfGs_isEventBit(MIDNAS_DESPERATE_HOUR_COMPLETED); + if (condition) { + layer = 0; + } + } + } + else { + condition = dComIfGs_isEventBit(MALO_MART_CASTLE_TOWN_BRANCH_IS_OPEN); // CT Shop is Malo Mart + + if (condition != false) { + layer = 1; + } + } + break; + } + + case Sacred_Grove: { + layer = 2; + break; + } + + case Bulblin_Camp: { + condition = dComIfGs_isEventBit(ESCAPED_BURNING_TENT_IN_BULBLIN_CAMP); // Escaped Burning Tent in Bulblin Camp + if (condition) { + if (i_roomNo == 3) // Other states for this room are very similar, but do not have the boar + // in the dzx. + { // Setting state 1 solves for any potential softlocks regarding the boar in that area. + layer = 1; + } + else { + layer = 3; + } + } + break; + } + + case Faron_Woods_Cave: { + condition = dComIfGs_isEventBit(ORDON_DAY_2_OVER); // Talo saved + if (condition != false) { + layer = 1; + } + break; + } + + case Hyrule_Castle_Sewers: { + condition = dComIfGs_isEventBit(FINISHED_SEWERS); // Sewers Finished + if (condition) { + layer = 13; + } + else { + layer = 14; + } + break; + } + + case Hyrule_Castle: { + if (((i_roomNo != 0xb) && (i_roomNo != 0xd)) && (i_roomNo != 0xe)) { + layer = 1; + } + break; + } + + case Fishing_Pond: + case Fishing_Pond_Interiors: { + switch (g_env_light.fishing_hole_season) { + case 1: + layer = 0; + break; + case 2: + layer = 1; + break; + case 3: + layer = 2; + break; + case 4: + layer = 3; + break; + } + break; + } + default: { + break; + } + } + } + } else +#endif if (layer < 13) { // Stage is Snowpeak Ruins or Snowpeak if (!strcmp(i_stageName, "D_MN11") || !strcmp(i_stageName, "F_SP114")) { @@ -2343,6 +2921,55 @@ void dComIfGs_setupRandomizerSave() { } } + // Other flags based on starting flags + if (dComIfGs_isEventBit(CLEARED_FARON_TWILIGHT)) + { + dComIfGs_onDarkClearLV(0); + dComIfGs_setLightDropNum(0, 0x10); + execItemGet(dItemNo_Randomizer_DROP_CONTAINER_e); + execItemGet(dItemNo_Randomizer_WEAR_KOKIRI_e); + } + + if (dComIfGs_isEventBit(CLEARED_ELDIN_TWILIGHT)) + { + dComIfGs_onDarkClearLV(1); + dComIfGs_setLightDropNum(1, 0x10); + execItemGet(dItemNo_Randomizer_DROP_CONTAINER02_e); + } + + if (dComIfGs_isEventBit(CLEARED_LANAYRU_TWILIGHT)) + { + dComIfGs_onDarkClearLV(2); + dComIfGs_setLightDropNum(2, 0x10); + execItemGet(dItemNo_Randomizer_DROP_CONTAINER03_e); + } + + // if (skipMinorCutscenes()) + // { + // dComIfGs_setAllLetterGet(); + // dComIfGs_setAllLetterRead(); + // } + + if (dComIfGs_isEventBit(MIDNAS_DESPERATE_HOUR_COMPLETED)) + { + if (dComIfGs_getDarkClearLV() == 0x7) + { + dComIfGs_onDarkClearLV(3); + dComIfGs_onTransformLV(3); + } + } + + if (world->Setting("Unlock Map Regions") == "On") + { + int mapBits = 0x20; + if (world->Setting("Snowpeak Does Not Require Reekfish Scent") == "On") {mapBits |= 0x40;} + if (dComIfGs_isEventBit(CLEARED_LANAYRU_TWILIGHT)) {mapBits |= 0x10;} + if (dComIfGs_isEventBit(CLEARED_ELDIN_TWILIGHT)) {mapBits |= 0x08;} + if (dComIfGs_isEventBit(CLEARED_FARON_TWILIGHT)) {mapBits |= 0x04;} + if (world->Setting("Skip Prologue") == "On") {mapBits |= 0x02;} + dComIfGs_setRegionBit(mapBits); + } + // Set starting inventory for (const auto& item: world->GetStartingItemPool()) { execItemGet(static_cast(item->GetID())); diff --git a/src/dusk/randomizer/game/flags.h b/src/dusk/randomizer/game/flags.h new file mode 100644 index 0000000000..2b46e54763 --- /dev/null +++ b/src/dusk/randomizer/game/flags.h @@ -0,0 +1,618 @@ +#pragma once + +enum EventFlags +{ + CHEESE_PUT_IN_SOUP = 0x0001, + PUMPKIN_PUT_IN_SOUP = 0x0002, + LOST_TO_GOR_CORON_IN_SUMO = 0x0004, + TALKED_TO_RENADO_AFTER_GORON_MINES = 0x0008, + YETO_TOOK_CHEESE = 0x0010, + YETO_TOOK_PUMPKIN = 0x0020, + MIDNA_TEXT_ABOUT_FINDING_GORGE_BRIDGE = 0x0080, + TALKED_TO_COLIN_OUTSIDE_LINKS_HOUSE = 0x104, + TALKED_TO_FADO_BEFORE_GOATS_1 = 0x110, + TOLD_YETA_ABOUT_CHEESE = 0x120, + TALKED_TO_YETO_IN_SPR_FOR_FIRST_TIME = 0x140, + CAN_FIGHT_TWILIGHT_BLOAT = 0x180, + TALKED_TO_SERA_BEFORE_CAT_RESCUED = 0x201, + TALKED_TO_COLIN_THROUGH_SPRING_GATE = 0x202, + FINISHED_SLINGSHOT_TRAINING = 0x220, + FINISHED_SWORD_TRAINING = 0x240, + FAILED_TO_CATCH_GOAT_AT_BO_HOUSE = 0x280, + GOT_FISHING_ROD_FROM_ULI = 0x301, + GAVE_WOODEN_SWORD_TO_TALO = 0x302, + BROUGHT_CRADLE_TO_ULI = 0x304, + TALKED_TO_KIDS_OUTSIDE_LINKS_HOUSE = 0x308, + JAGGLE_ASKED_TO_LOOK_UP_PILLAR = 0x310, + TALKED_TO_PERGIE = 0x340, + TALKED_TO_SQUIRREL_AFTER_FARON_TWILIGHT = 0x380, + TALKED_TO_ULI = 0x404, + ULI_RAN_DOWN_RIVER = 0x408, + TALKED_TO_ULI_BEFORE_GETTING_CRADLE = 0x410, + UNK_0420 = 0x420, + REFUSED_SWORD_TRAINING = 0x440, + TOLD_YETA_ABOUT_PUMPKIN = 0x480, + MIDNA_CHARGE_UNLOCKED = 0x501, + FINISHED_SEWERS = 0x502, + MIDNA_TEXT_AFTER_ENTERING_FARON_TWILIGHT = 0x504, + MET_ZELDA_IN_SEWERS = 0x508, + MIDNA_CUT_PRISON_CHAIN = 0x510, + WATCHED_SEWERS_INTRO_CUTSCENE = 0x520, + ESCAPED_CELL_IN_SEWERS = 0x540, + ENTERED_ORDON_SPRING_DAY_3 = 0x580, + EPONA_TAMED = 0x601, + FOREST_TEMPLE_CLEARED = 0x602, + MAP_WARPING_UNLOCKED = 0x604, + KING_BULBLIN_1_TRIGGER_ACTIVATED = 0x608, + CLEARED_FARON_TWILIGHT = 0x610, + WARPED_KAKARIKO_GORGE_BRIDGE_BACK = 0x620, + WATCHED_FARON_TWILIGHT_INTRO_CUTSCENE = 0x640, + WATCHED_FARONE_CUTSCENE_AFTER_OPENING_ORDON_SPRING_WARP = 0x680, + GORON_MINES_CLEARED = 0x701, + FIRST_TIME_TALKING_TO_GOR_CORON = 0x702, + WON_SUMO_AGAINST_GOR_CORON = 0x704, + CLEARED_ELDIN_TWILIGHT = 0x708, + WATCHED_ELDIN_TWILIGHT_SANCTUARY_CUTSCENE = 0x710, + TALKED_TO_BO_AFTER_TAMING_EPONA = 0x720, + STARTED_SUMO_AGAINST_GOR_CORON = 0x740, + WATCHED_COLIN_CUTSCENE_AFTER_KING_BULBLIN_1 = 0x780, + TALKED_WITH_TALO_TO_START_ARCHERY_MINIGAME = 0x801, + GOT_ZORA_ARMOR_FROM_RUTELA = 0x804, + ZORA_ESCORT_CLEARED = 0x810, + ENTERED_TELMAS_BAR_AFTER_LANAYRU_TWILIGHT = 0x820, + WAGON_ESCORT_STARTED = 0x840, + WARPED_METEOR_TO_ZORAS_DOMAIN = 0x880, + LISTENED_TO_IZA_SPIRIT_AFTER_KILLING_BUG_NEXT_TO_HER = 0x901, + STARTED_IZA_1_MINIGAME = 0x902, + LAKEBED_TEMPLE_CLEARED = 0x904, + BOUGHT_BARNES_BOMB_BAG = 0x908, + WON_ARCHERY_MINIGAME_IN_KAKARIKO_WITH_HAWKEYE = 0x910, + WON_ARCHERY_MINIGAME_IN_KAKARIKO_LEGITIMATELY = 0x920, + STARTED_ARCHERY_MINIGAME_IN_KAKARIKO = 0x940, + TALKED_TO_TALO_AFTER_WINNING_ARCHERY_MINIGAME_LEGITIMATELY = 0x980, + KING_BULBLIN_1_HIT_ONCE_DURING_PHASE_2 = 0xA01, + KING_BULBLIN_1_PHASE_1_DONE = 0xA02, + KING_BULBLIN_1_FIGHT_STARTED = 0xA04, + KING_BULBLIN_1_DEFEATED = 0xA08, + STARTED_KARGOROK_FLIGHT_UP_ZORAS_RIVER_DURING_TWILIGHT = 0xA10, + BRIDGE_OF_ELDIN_STOLEN = 0xA20, + THREW_FIRST_GORON_OFF_LEDGE_WHILE_SCALING_DMT = 0xA40, + LEFT_AFTER_AGREEING_TO_HELP_IZA_1 = 0xA80, + IZA_1_MINIGAME_DONE = 0xB01, + IZA_1_MINIGAME_UNLOCKED = 0xB02, + AGREED_TO_HELP_IZA = 0xB04, + LEFT_AFTER_AGREEING_TO_HELP_IZA = 0xB08, + GOT_SNOWPEAK_RUINS_MAP_FROM_YETA = 0xB10, + TALKED_TO_YETA_IN_SNOWPEAK_RUINS_FOR_THE_FIRST_TIME = 0xB20, + ESCAPED_BURNING_TENT_IN_BULBLIN_CAMP = 0xB40, + DECLINED_TO_HELP_IZA = 0xB80, + MIDNAS_DESPERATE_HOUR_STARTED = 0xC01, + CLEARED_LANAYRU_TWILIGHT = 0xC02, + TALKED_TO_KID_GORON_SHOP_IN_KAKARIKO_AT_NIGHT = 0xC04, + REMOVE_SWORD_SHIELD_FROM_WOLF_BACK = 0xC08, + MIDNA_ACCOMPANIES_WOLF = 0xC10, + TALKED_WITH_FARONE_AFTER_CLEARING_FOREST_TEMPLE = 0xC40, + MET_RUTELLA_AFTER_WARPING_METEOR_TO_ZORAS_DOMAIN = 0xC80, + ENTERED_ORDON_SHIELD_HOUSE_AS_WOLF_AT_NIGHT = 0xD01, + TALKED_TO_ONE_OF_THE_FROGS_OUTSIDE_RUSLS_HOUSE_AS_WOLF_AT_NIGHT = 0xD02, + TRANSFORMING_UNLOCKED = 0xD04, + TALKED_WITH_CLERK_AT_CASTLE_TOWN_MALO_MART = 0xD08, + TALKED_WITH_YETA_AFTER_GETTING_BEDROOM_KEY = 0xD10, + MIDNA_TEXT_AFTER_ORDON_SHIELD_OBTAINED = 0xD80, + START_ILIA_MEMORY_SIDEQUEST = 0xE01, + TWILIGHT_BLOAT_TEAR_APPEARS_ON_MAP = 0xE02, + MALO_TEXT_AFTER_LEAVING_SHOP_MENU = 0xE08, + LISTENED_TO_FYER_SPIRIT_IN_FILLED_LAKE_HYLIA_DURING_TWILIGHT = 0xE10, + TALKED_TO_RIGHT_GORON_IN_HOTSPRING_AFTER_KING_BULBLIN_1 = 0xE20, + TALKED_TO_SECOND_GORON_IN_DMT_AFTER_CLEARING_GORON_MINES = 0xE40, + TALKED_TO_BROWN_CUCOO_OUTSIDE_BOS_HOUSE_AS_WOLF_AT_NIGHT = 0xE80, + GOT_LANTERN_FROM_CORO = 0xF01, + IZA_TEXT_AFTER_IZA_1_DONE = 0xF02, + TALKED_WITH_FYER_AFTER_GOING_TO_DESERT = 0xF04, + WARPED_BRIDGE_OF_ELDIN_BACK = 0xF08, + FUNDED_CASTLE_TOWN_MALO_MART = 0xF10, + TALKED_WITH_DOCTOR_BEFORE_GIVING_INVOICE = 0xF20, + FORCED_TEXT_WHEN_ENTERING_DOCTORS_CLINIC_FOR_THE_FIRST_TIME = 0xF40, + GOT_RENADOS_LETTER = 0xF80, + SERAS_CAT_RETURNED_TO_SHOP = 0x1001, + ORDON_DAY_2_TALKED_TO_JAGGLE_ON_THE_PILLAR = 0x1002, + ORDON_DAY_2_L_TARGET_TALKED_TO_JAGGLE_ON_THE_PILLAR = 0x1004, + ORDON_DAY_2_TALKED_TO_COLIN_AFTER_FISHING_ROD = 0x1008, + WATCHED_START_OF_GAME_CUTSCENE = 0x1010, + ORDON_DAY_2_TALKED_TO_COLIN_BEFORE_FISHING_ROD = 0x1020, + ORDON_DAY_3_TALKED_TO_RUSL = 0x1040, + ORDON_DAY_3_TALKED_TO_PERGIE = 0x1080, + TALKED_TO_SERA_AFTER_GETTING_BOTTLE = 0x1101, + ORDON_DAY_3_TALKED_TO_ULI = 0x1102, + ORDON_DAY_2_STARTED_SWORD_TRAINING = 0x1104, + TALKED_TO_GOR_EBIZO_AFTER_COMPLETING_HOTSPRING_MINIGAME = 0x1108, + TALKED_WITH_YETA_AFTER_SHE_WALKS_UP_TO_BEDROOM = 0x1110, + HANCH_IS_ATTACKED_BY_BEES = 0x1120, + ORDON_DAY_2_TALKED_TO_JAGGLE_AFTER_CALLING_DOWN_EAGLE = 0x1140, + ORDON_DAY_2_TALKED_TO_HANCH_AFTER_TOUCHING_BEE_NEST = 0x1180, + SOUTH_FARON_WARP_FIGHT_STARTED = 0x1202, + ORDON_DAY_2_TALKED_TO_SERA_BEFORE_CAT_RETURNS = 0x1204, + TALKED_TO_SERA_AFTER_CAT_RETURNS = 0x1208, + HEARD_BO_TEXT_AFTER_SUMO_FIGHT = 0x1210, + TALK_TO_GORON_IN_FRONT_OF_DM_SHOP_AFTER_WINNING_GOR_CORON_SUMO_MATCH = 0x1302, + TALKED_TO_IZA_BEFORE_UZR_PORTAL = 0x1304, + WATCHED_CUTSCENE_AFTER_GORON_MINES = 0x1320, + LOST_SUMO_TO_GOR_CORON_TWICE = 0x1340, + TALKED_TO_FARONE_IN_FARON_TWILIGHT = 0x1380, + ORDON_DAY_3_COLIN_WENT_TO_SEE_ILIA_IN_ORDON_SPRING = 0x1402, + GOT_BOTTLE_FROM_SERA = 0x1408, + WATCHED_CUTSCENE_AFTER_GETTING_KNOCKED_OFF_DM_LEDGE_BY_GORON = 0x1410, + TALKED_WITH_YETA_AFTER_GIVING_CHEESE = 0x1420, + TALKED_WITH_YETA_AFTER_GIVING_PUMPKIN = 0x1440, + ENTERED_FYERS_CANON_FOR_THE_FIRST_TIME = 0x1480, + TALKED_TO_AGITHA_IN_HER_CASTLE_FOR_THE_FIRST_TIME = 0x1501, + TALKED_TO_HANCH_AFTER_HE_JUMPS_IN_THE_WATER_ORDON_DAY_2_OR_3 = 0x1502, + ORDON_DAY_2_JAGGLE_SCOLDS_YOU_FOR_BREAKING_ALL_THE_PUMPKINS_NEXT_TO_HIM = 0x1504, + HANCH_HIT_BEE_NEST_AND_DOVE_IN_WATER = 0x1508, + ORDON_DAY_2_TOUCHED_ORDON_HANGING_BEE_NEST = 0x1510, + ORDON_DAY_2_TOOK_DOWN_ORDON_BEE_NEST_WITH_HAWK = 0x1520, + WARPING_IN_LANAYRU_PROVINCE_DISABLED = 0x1540, + WATCHED_CUTSCENE_AFTER_GOATS_2 = 0x1580, + ORDON_DAY_2_DONE = 0x1601, + TOOK_DOWN_ORDON_BEE_NEST_WITH_SLINGSHOT = 0x1602, + GOT_A_LETTER_FROM_AGITHA = 0x1604, + ORDON_DAY_2_TALKED_TO_BO_AFTER_CATCHING_GOAT = 0x1620, + ORDON_DAY_2_CAUGHT_GOAT_IN_FRONT_OF_BOS_HOUSE = 0x1640, + HANCH_HIT_BEE_NEST_AND_DOVE_IN_WATER_TRIGGER = 0x1680, + TALKED_TO_FEMALE_OWNER_OF_GROCERY_STORE_IN_SOUTH_CASTLE_TOWN = 0x1701, + TALKED_TO_HYRULE_SOLDIER_IN_SOUTH_CASTLE_TOWN = 0x1702, + TALKED_TO_STALKER_OUTSIDE_AGITHAS_CASTLE = 0x1704, + ORDON_DAY_3_TALKED_TO_BO = 0x1710, + ORDON_DAY_2_TALKED_TO_HANCH_AFTER_TAKING_DOWN_BEE_NEST = 0x1780, + WATCHED_CUTSCENE_BETWEEN_RUSL_ULI_AFTER_ORDON_SHIELD = 0x1801, + CHECKED_TRILLS_MONEY_BOX = 0x1804, + CAUGHT_BY_RUSL_IN_ORDON_AS_WOLF_AT_NIGHT = 0x1808, + ORDON_DAY_2_TALO_RAN_AFTER_MONKEY_AFTER_SWORD_TRAINING = 0x1880, + WATCHED_ELDIN_SPIRIT_CUTSCENE_AFTER_OPENING_KAKARIKO_WARP = 0x1901, + SUCCESSFULLY_LISTENED_TO_BO_AND_JAGGLES_CONVERSATION_AS_WOLF = 0x1904, + COLIN_STOPPED_YOU_FROM_GETTING_ON_EPONA_ORDON_DAY_2 = 0x1908, + FAILED_TO_LISTEN_TO_BO_AND_JAGGLES_CONVERSATION_AS_WOLF = 0x1910, + SCARED_OFF_HANCH_AS_WOLF_AT_NIGHT = 0x1920, + HANCH_SPOTTED_YOU_AS_WOLF_AT_NIGHT = 0x1940, + TRIED_TO_ENTER_FARON_TWILIGHT_WITHOUT_SWORD_SHIELD = 0x1980, + TALKED_TO_ELDIN_SPIRIT_IN_ELDIN_TWILIGHT = 0x1A01, + LISTENED_TO_FIRST_GUARD_IN_SEWERS = 0x1A02, + BOUGHT_COROS_OIL_BOTTLE = 0x1A08, + TALKED_TO_CORO_AFTER_FARON_TWILIGHT = 0x1A10, + TALKED_TO_WHITE_CUCOO_NEAR_RUSLS_HOUSE_AS_WOLF_AT_NIGHT = 0x1A20, + TALKED_TO_SERAS_CAT_AS_WOLF_AT_NIGHT = 0x1A40, + TALKED_TO_MIDNA_AFTER_ESCAPING_CELL_IN_SEWERS = 0x1A80, + TRIED_TO_LEAVE_MIST_AREA_WITHOUT_PICKING_UP_LANTERN = 0x1B01, + LISTENED_TO_FIRST_GORON_SPIRIT_IN_DEATH_MOUNTAIN_TWILIGHT = 0x1B02, + PICKED_UP_LANTERN_AFTER_MONKEY_STEALING_SEQUENCE = 0x1B08, + MONKEY_DROPPED_YOUR_LANTERN = 0x1B10, + MONKEY_STOLE_YOUR_LANTERN = 0x1B20, + LISTENED_TO_CORO_SPIRIT_BEFORE_KILLING_BUGS_IN_HIS_HOUSE = 0x1B40, + TALKED_TO_MALO_AFTER_KING_BULBLIN_1 = 0x1C01, + SAW_MIDNA_TEXT_AFTER_TRYING_TO_WARP_AN_OBJECT_TO_THE_WRONG_PLACE = 0x1C02, + SACRED_GROVE_STATUE_PUZZLE_COMPLETED = 0x1C04, + WIN_SUMO_ROUND_1_AGAINST_BO = 0x1C10, + BO_TALKED_TO_YOU_AFTER_OPENING_IRON_BOOTS_CHEST = 0x1C20, + ACCEPTED_TO_KEEP_BOS_SECRET = 0x1C40, + LISTENED_TO_SECOND_GORON_SPIRIT_IN_DEATH_MOUNTAIN_TWILIGHT = 0x1C80, + MINI_MAP_RETRACTED = 0x1D01, + TALKED_TO_TALO_AFTER_KING_BULBLIN_1 = 0x1D02, + TALKED_TO_LUDA_AFTER_KING_BULBLIN_1 = 0x1D04, + TALKED_TO_DARBUS_AFTER_DEFEATING_FYRUS = 0x1D08, + TALKED_TO_BARNES_AFTER_GORON_MINES = 0x1D10, + TALKED_TO_BARNES_AFTER_KING_BULBLIN_1 = 0x1D20, + LISTENED_TO_FYER_SPIRIT_IN_DRAINED_LAKE_HYLIA_DURING_LANAYRU_TWILIGHT = 0x1D40, + TALKED_TO_SERA_A_SECOND_TIME_AFTER_FARON_TWILIGHT = 0x1E02, + TALKED_TO_SERA_AFTER_FARON_TWILIGHT = 0x1E04, + MIDNAS_DESPERATE_HOUR_COMPLETED = 0x1E08, + TALKED_TO_CORO_AFTER_FOREST_TEMPLE = 0x1E20, + TALK_TO_MALO_AFTER_FUNDRAISING_IS_OPEN = 0x1E40, + MALO_MART_FUNDRAISING_STARTS = 0x1E80, + HEARD_FORCED_MIDNA_TEXT_E3_2006_GORON_MINES = 0x1F04, + HEARD_MIDNA_TEXT_ONTOP_OF_MAGNET_SWITCH_E3_2006_GORON_MINES = 0x1F08, + FYRUS_IS_ON_THE_GROUND = 0x1F10, + KNOCKED_FYRUS_DOWN_FOR_THE_FIRST_TIME = 0x1F20, + FYRUS_IS_STUNNED = 0x1F40, + SHOT_FYRUS_EYE_FOR_THE_FIRST_TIME = 0x1F80, + TALKED_WITH_TELMA_AFTER_GETTING_MASTER_SWORD = 0x2001, + CITY_IN_THE_SKY_CLEARED = 0x2002, + TEMPLE_OF_TIME_CLEARED = 0x2004, + SNOWPEAK_RUINS_CLEARED = 0x2008, + ARBITERS_GROUNDS_CLEARED = 0x2010, + GOT_MASTER_SWORD = 0x2020, + WATCHED_TELMA_ILIA_SPIRIT_CUTSCENE_IN_THE_BAR_DURING_LANAYRU_TWILIGHT = 0x2101, + TALKED_TO_LOUISE_ABOUT_THE_STOLEN_STATUE = 0x2102, + GAVE_TELMA_RENADOS_LETTER = 0x2180, + TALKED_TO_PLUMM_AS_WOLF_FOR_THE_FIRST_TIME = 0x2201, + GOT_A_HIGH_SCORE_IN_PLUMMS_MINIGAME = 0x2202, + GOT_WOOD_STATUE = 0x2204, + TALKED_TO_YETO_ON_TOP_OF_THE_MOUNTAIN_AFTER_CLEARING_SPR = 0x2208, + MALO_MART_CASTLE_TOWN_BRANCH_IS_OPEN = 0x2210, + GOT_ILIAS_SCENT = 0x2220, + GOT_YOUTHS_SCENT = 0x2240, + GOT_ILIAS_CHARM = 0x2280, + CLEARED_STAR_2 = 0x2301, + STARTED_STAR_2 = 0x2302, + MAGIC_UNLOCKED = 0x2304, + CLEARED_STAR_1 = 0x2308, + ENTERED_STAR_FOR_THE_FIRST_TIME = 0x2310, + GAVE_ILIA_HER_CHARM = 0x2320, + GAVE_ILIA_THE_WOOD_STATUE = 0x2340, + WON_PLUMMS_HEART_PIECE = 0x2380, + TALKED_TO_SHAD_AFTER_FINISHING_CITY_IN_THE_SKY = 0x2401, + TALKED_TO_SHAD_FOR_A_SECOND_TIME_IN_TELMAS_BAR = 0x2402, + TALKED_TO_SHAD_IN_TELMAS_BAR = 0x2404, + TALKED_TO_AURU_IN_TELMAS_BAR = 0x2408, + TALKED_TO_CENTRAL_CASTLE_TOWN_SHOP_CLERK = 0x2410, + TALKED_TO_LOUISE_AFTER_BEING_THROWN_OUT_DURING_MDH = 0x2420, + WATCHED_LOUISE_CUTSCENE_DURING_MIDNAS_DESPERATE_HOUR = 0x2440, + DONATED_1000_RUPEES_TO_CHARLO = 0x2480, + WATCHED_CUTSCENE_WITH_YETO_ON_TOP_OF_MOUNTAIN = 0x2502, + TALKED_TO_YETO_ON_TOP_OF_MOUNTAIN_AS_WOLF = 0x2504, + GOT_AURUS_MEMO = 0x2510, + TALKED_TO_AURU_IN_LAKE_HYLIA = 0x2520, + SHAD_USED_COMPLETED_SKYBOOK = 0x2540, + SHAD_CASTS_UNFINISHED_SPELL_ON_STATUE = 0x2580, + SOL_FLAG_1 = 0x2601, + SOL_FLAG_2 = 0x2602, + PALACE_WEST_SOL_TAKEN_IN_PHANTOM_ZANT_ROOM = 0x2604, + SOL_FLAG_3 = 0x2608, + PALACE_WEST_SOL_TAKEN_OUT_PHANTOM_ZANT_ROOM = 0x2610, + PALACE_EAST_SOL_TAKEN_OUTSIDE = 0x2620, + PALACE_WEST_SOL_TAKEN_OUTSIDE = 0x2640, + SHOWED_AURUS_MEMO_TO_FYER = 0x2680, + TALKED_TO_UNDERWATER_ZORA_ABOUT_GORON_IN_THRONE_ROOM_AFTER_RELEASE = 0x2701, + TALKED_TO_UNDERWATER_ZORA_ABOUT_GORON_IN_THRONE_ROOM_BEFORE_RELEASE = 0x2702, + TALKED_TO_WEST_ZORA_IN_DOMAIN_THRONE_ROOM_AFTER_LANAYRU_TWILIGHT = 0x2704, + TALKED_TO_SWIMMING_ZORA_IN_ZORAS_DOMAIN_BEFORE_LAKEBED = 0x2708, + GAVE_INVOICE_TO_DOCTOR = 0x2710, + PALACE_EAST_SOL_TAKEN_IN_PHANTOM_ZANT_ROOM = 0x2720, + SOL_FLAG_4 = 0x2740, + PALACE_EAST_SOL_TAKEN_OUT_OF_PHANTOM_ZANT_ROOM = 0x2780, + SAW_ULI_TEXT_BEFORE_LEAVING_RUSLS_HOUSE = 0x2801, + TALKED_TO_ULI_A_SECOND_TIME_AFTER_FARON_TWILIGHT = 0x2802, + TALKED_TO_ULI_AFTER_FARON_TWILIGHT = 0x2804, + SAW_FORCED_ULI_TEXT_IN_RUSLS_HOUSE_AFTER_FARON_TWILIGHT = 0x2808, + TALKED_TO_JAGGLE_A_SECOND_TIME_AFTER_FARON_TWILIGHT = 0x2810, + TALKED_TO_JAGGLE_AFTER_FARON_TWILIGHT = 0x2820, + USED_OOCCOO_FOR_THE_FIRST_TIME = 0x2840, + HELM_SPLITTER_UNLOCKED = 0x2901, + BACKSLICE_UNLOCKED = 0x2902, + ENDING_BLOW_UNLOCKED = 0x2904, + SHIELD_ATTACK_UNLOCKED = 0x2908, + LISTENED_TO_LADY_SPIRITS_TALKING_IN_WEST_CASTLE_TOWN_DURING_TWILIGHT = 0x2910, + FREED_UNDERWATER_GORON_IN_ZORAS_DOMAIN = 0x2920, + GOT_ASHEIS_SKETCH = 0x2940, + TALKED_TO_ASHEI_IN_TELMAS_BAR = 0x2980, + TALKED_TO_ZORA_SOLDIER_NEAR_LAKEBED_ENTRANCE_AFTER_OPENING = 0x2A01, + TALKED_TO_ZORA_SOLDIER_NEAR_LAKEBED_ENTRANCE_BEFORE_OPENING = 0x2A02, + TALKED_TO_ASHEI_IN_TELMAS_BAR_AFTER_FINISHING_SPR = 0x2A04, + ORDON_DAY_2_LIT_COROS_POT = 0x2A10, + GREAT_SPIN_UNLOCKED = 0x2A20, + JUMP_STRIKE_UNLOCKED = 0x2A40, + MORTAL_DRAW_UNLOCKED = 0x2A80, + TALKED_TO_DOCTOR_AFTER_RESTORING_ILIAS_MEMORY = 0x2B02, + SHOWED_WOOD_STATUE_TO_DOCTOR = 0x2B04, + FIXED_THE_MIRROR_OF_TWILIGHT = 0x2B08, + TALKED_TO_LADIES_OUTSIDE_CENTRAL_CASTLE_TOWN_SHOP_BEFORE_MALO_MART = 0x2B10, + UNK_2B20 = 0x2B20, + TALKED_TO_GOR_CORON_AFTER_CLEARING_GORON_MINES = 0x2C01, + SAVED_MONKEY_IN_FARON_TWILIGHT = 0x2C02, + UNK_2C04 = 0x2C04, + TALKED_TO_RUSL_IN_TELMAS_BAR = 0x2C08, + RAISED_MIRROR_IN_MIRROR_CHAMBER = 0x2C10, + UNK_2C20 = 0x2C20, + UNK_2C40 = 0x2C40, + TALKED_TO_TELMA_AFTER_RECOVERING_ILIAS_MEMORY = 0x2C80, + TALKED_TO_DARBUS_AFTER_RESTORING_ILIAS_MEMORY = 0x2D01, + UNK_2D02 = 0x2D02, + UNK_2D04 = 0x2D04, + TALKED_TO_GORON_BY_BARNES_SHOP_AFTER_GORON_MINES = 0x2D08, + TALKED_TO_GORON_IN_KAKARIKO_HOTSPRING_AFTER_GORON_MINES = 0x2D10, + TALKED_TO_GORON_BY_KAKARIKO_WATCHTOWER_AFTER_GORON_MINES = 0x2D20, + TALKED_TO_GORON_IN_FRONT_OF_KAKARIKO_INN_AFTER_GORON_MINES = 0x2D40, + TALKED_TO_FIRST_GORON_ON_DEATH_MOUNTAIN_TRAIL_AFTER_GORON_MINES = 0x2D80, + TALKED_TO_ADULT_GORON_AFTER_OPENING_HOTSPRING_WATER_SHOP_IN_CASTLE_TOWN = 0x2E01, + TALKED_TO_AGITHA_FOR_THE_FIRST_TIME_OUTSIDE_SOUTH_CASTLE_TOWN = 0x2E02, + GAVE_ALL_24_GOLDEN_BUGS_TO_AGITHA = 0x2E04, + HIDDEN_VILLAGE_BARRIER_REMOVED = 0x2E08, + HELPED_OUTSIDE_SOUTH_CASTLE_TOWN_GORON = 0x2E10, + BRIDGE_REPAIR_FUNDRAISING_COMPLETED = 0x2E20, + TALKED_TO_GOR_EBIZO_IN_KAKARIKO = 0x2E40, + TALKED_TO_DARBUS_AFTER_CLEARING_GORON_MINES = 0x2E80, + TALKED_TO_GORON_OUTSIDE_SOUTH_CASTLE_TOWN = 0x2F01, + UNK_2F02 = 0x2F02, + GOT_MEDICINE_SCENT = 0x2F04, + TALKED_TO_BARNES_AFTER_UNLOCKING_BOMBLINGS = 0x2F08, + TALKED_TO_BARNES_AFTER_UNLOCKING_WATER_BOMBS = 0x2F10, + TALKED_TO_CHILD_GORON_BEFORE_OPENING_HOTSPRING_WATER_SHOP_IN_CASTLE_TOWN = 0x2F20, + TALKED_TO_CHILD_GORON_AFTER_OPENING_HOTSPRING_WATER_SHOP_IN_CASTLE_TOWN = 0x2F40, + TALKED_TO_GORON_OUTSIDE_EAST_CASTLE_TOWN = 0x2F80, + TALKED_TO_GOR_LIGGS_AFTER_UNK = 0x3001, + STARTED_HOTSPRING_WATER_MINIGAME = 0x3002, + TALKED_TO_GOR_LIGGS_IN_KAKARIKO_VILLAGE = 0x3004, + TALKED_TO_GOR_AMATO_IN_GORON_MINES = 0x3008, + UNK_3010 = 0x3010, + TALKED_TO_GORON_OUTSIDE_SOUTH_CASTLE_TOWN_AFTER_GIVING_WATER = 0x3020, + GAVE_HOTSPRING_WATER_TO_GORON_OUTSIDE_SOUTH_CASTLE_TOWN = 0x3040, + TALKED_TO_JOVANI_FOR_THE_FIRST_TIME_BEFORE_POE = 0x3080, + M_STAG_BEETLE_TURNED_IN = 0x3101, + F_BUTTERFLY_TURNED_IN = 0x3102, + M_BUTTERFLY_TURNED_IN = 0x3104, + F_BEETLE_TURNED_IN = 0x3108, + M_BEETLE_TURNED_IN = 0x3110, + WARPED_SKY_CANNON_TO_LAKE_HYLIA = 0x3120, + TALKED_TO_GOR_LIGGS_AFTER_TALKING_TO_GORON_OUTSIDE_EAST_CASTLE_TOWN = 0x3140, + TALKED_TO_GOR_LIGGS_AFTER_BRIDGE_HAS_BEEN_FIXED = 0x3180, + M_MANTIS_TURNED_IN = 0x3201, + F_PILLBUG_TURNED_IN = 0x3202, + M_PILLBUG_TURNED_IN = 0x3204, + F_PHASMID_TURNED_IN = 0x3208, + M_PHASMID_TURNED_IN = 0x3210, + F_GRASSHOPPER_TURNED_IN = 0x3220, + M_GRASSHOPPER_TURNED_IN = 0x3240, + F_STAG_BEETLE_TURNED_IN = 0x3280, + M_ANT_TURNED_IN = 0x3301, + F_DRAGONFLY_TURNED_IN = 0x3302, + M_DRAGONFLY_TURNED_IN = 0x3304, + F_SNAIL_TURNED_IN = 0x3308, + M_SNAIL_TURNED_IN = 0x3310, + F_LADYBUG_TURNED_IN = 0x3320, + M_LADYBUG_TURNED_IN = 0x3340, + F_MANTIS_TURNED_IN = 0x3380, + F_DAYFLY_TURNED_IN = 0x3420, + M_DAYFLY_TURNED_IN = 0x3440, + F_ANT_TURNED_IN = 0x3480, + TALKED_TO_GOR_LIGGS_IN_GORON_MINES = 0x3701, + TALKED_TO_GOR_EBIZO_IN_GORON_MINES = 0x3702, + TALKED_TO_POSTMAN_FOR_THE_FIRST_TIME = 0x3704, + TALKED_TO_GOR_LIGGS_AFTER_TALKING_TO_GORON_OUTSIDE_EAST_CASTLE_TOWN_BEFORE_FIXING_BRIDGE = 0x3710, + TEMP_USED_AFTER_PAYING_TO_FISH_WITH_HENA = 0x3801, + TALKED_TO_HENA_FOR_THE_FIRST_TIME = 0x3802, + ENTERED_HENAS_CABIN_FOR_THE_FIRST_TIME = 0x3804, + TALKED_TO_GENGLE_AFTER_COLLECTING_20_POE_SOULS = 0x3808, + TALKED_TO_JOVANI_AFTER_COLLECTING_60_POE_SOULS = 0x3820, + UNK_3840 = 0x3840, + TALKED_TO_JOVANI_AFTER_DEFEATING_THE_POE_IN_HIS_HOUSE = 0x3880, + WON_2ND_SUMO_ROUND_AGAINST_BO = 0x3901, + RELEASED_FIRST_CAUGHT_FISH_ORDON_DAY_2 = 0x3902, + BEAT_ROLLGOAL_1_8 = 0x3904, + CAUGHT_THE_FISHING_BOTTLE = 0x3908, + RESERVED_FOR_FISHING_1 = 0x3910, + CAUGHT_THE_SINKING_LURE = 0x3920, + WENT_FISHING_WITH_HENA_FOR_THE_FIRST_TIME = 0x3940, + TEMP_USED_AFTER_PAYING_TO_FISH_WITH_HENA_2 = 0x3980, + TALKED_WITH_RALIS_IN_KAKARIKO_GRAVEYARD = 0x3A01, + TALKED_TO_RALIS_IN_ZORAS_DOMAIN_THRONE_ROOM = 0x3A02, + HOWLED_AT_HIDDEN_VILLAGE_STONE = 0x3A04, + HOWLED_AT_SNOWPEAK_STONE = 0x3A08, + HOWLED_AT_LAKE_HYLIA_STONE = 0x3A10, + HOWLED_AT_SACRED_GROVE_OUTSIDE_STONE = 0x3A20, + HOWLED_AT_UPPER_ZORAS_RIVER_STONE = 0x3A40, + HOWLED_AT_DEATH_MOUNTAIN_STONE = 0x3A80, + TALKED_WITH_LUDA_AFTER_RALIS_RETURNS_TO_ZORAS_DOMAIN = 0x3B01, + TALKED_WITH_LUDA_WHILE_RALIS_IS_IN_KAKARIKO_GRAVEYARD = 0x3B02, + TALKED_TO_FYER_ABOUT_REPAIRING_THE_SKY_CANNON = 0x3B04, + SKY_CANNON_REPAIRED = 0x3B08, + WON_SNOWBOARD_RACE_AGAINST_YETA = 0x3B10, + TALKED_TO_YETA_AFTER_WINNING_RACE_AGAINST_YETO = 0x3B20, + WON_SNOWBOARD_RACE_AGAINST_YETO = 0x3B40, + GOT_CORAL_EARRING_FROM_RALIS = 0x3B80, + GOT_SKILL_FROM_BULBLIN_CAMP_WOLF = 0x3C01, + GOT_SKILL_FROM_SOUTH_CT_FIELD_WOLF = 0x3C02, + GOT_SKILL_FROM_WEST_CT_WOLF = 0x3C04, + GOT_SKILL_FROM_ORDON_WOLF = 0x3C08, + TALKED_TO_WHITE_CUCCOO_INSIDE_FENCES_NEXT_TO_BOS_HOUSE_AS_WOLF_AT_NIGHT = 0x3C20, + TALKED_TO_GORON_OUTSIDE_BARNES_SHOP_AFTER_UNLOCKING_BOMBLINGS = 0x3C40, + TALKED_TO_GORON_OUTSIDE_BARNES_SHOP_AFTER_UNLOCKING_WATER_BOMBS = 0x3C80, + ELDIN_SPRING_HAS_FARIES = 0x3D01, + FARON_SPRING_HAS_FARIES = 0x3D02, + ORDON_SPRING_HAS_FARIES = 0x3D04, + ENTER_RUSLS_HOUSE_AFTER_FARON_TWILIGHT = 0x3D08, + UNK_3D10 = 0x3D10, + GOT_SKILL_FROM_BARRIER_WOLF = 0x3D40, + GOT_SKILL_FROM_GRAVEYARD_WOLF = 0x3D80, + TALKED_WITH_COLIN_WHILE_RALIS_IS_IN_KAKARIKO_GRAVEYARD = 0x3E01, + CITY_OOCCOO_CS_WATCHED = 0x3E02, + FOUND_OOCCOO_FOR_THE_SECOND_TIME = 0x3E04, + FOUND_OOCCOO_FOR_THE_FIRST_TIME = 0x3E08, + OOCCOO_NOW_HAS_OOCCOO_JR_NEXT_TO_HER = 0x3E10, + OOCCOO_MET_BUT_DOESNT_HAVE_OOCCOO_JR_YET_UNSET_ONCE_JR_MET = 0x3E20, + SPRING_SPIRITS_CAN_GIVE_FARY_TEARS = 0x3E40, + LANAYRU_SPRING_HAS_FARIES = 0x3E80, + TALKED_TO_SERA_A_SECOND_TIME_AFTER_ELDIN_TWILIGHT = 0x3F01, + TALKED_TO_SERA_AFTER_ELDIN_TWILIGHT = 0x3F02, + TALKED_TO_JAGGLE_AFTER_ELDIN_TWILIGHT = 0x3F04, + TALKED_TO_ULI_AFTER_GM = 0x3F08, + TALKED_TO_ULI_A_SECOND_TIME_AFTER_ELDIN_TWILIGHT = 0x3F10, + TALKED_TO_ULI_AFTER_ELDIN_TWILIGHT = 0x3F20, + TALKED_WITH_COLIN_AFTER_RALIS_RETURNS_TO_ZORAS_DOMAIN = 0x3F40, + TALKED_TO_RUSL_IN_TELMAS_BAR_AFTER_FINISHING_TOT = 0x4001, + RUSL_IN_N_FARON_SUMMONS_GOLD_CUCCO = 0x4002, + DECLINED_TO_HELP_RUSL_IN_N_FARON_OFF_AFTER_SAYING_YES = 0x4004, + VISITED_DESERT_FOR_THE_FIRST_TIME = 0x4008, + TALKED_TO_ZORA_BOMB_SELLER_BY_LAKEBED_ENTRANCE_BEFORE_OPENING = 0x4010, + TALK_TO_HANCH_AFTER_ELDIN_TWILIGHT = 0x4020, + TALK_TO_HANCH_AFTER_FARON_TWILIGHT = 0x4040, + SAVED_MONKEY_FROM_PUPPETS = 0x4080, + TALKED_TO_UNDERWATER_GORON_IN_ZORAS_DOMAIN_AFTER_X_ = 0x4104, + TALK_TO_FADO_AFTER_FARON_TWILIGHT = 0x4108, + TALK_TO_FADO_AFTER_ELDIN_TWILIGHT = 0x4110, + TALK_TO_PERGIE_AFTER_FARON_TWILIGHT = 0x4140, + TALK_TO_PERGIE_AFTER_ELDIN_TWILIGHT = 0x4180, + WATCHED_POST_TOT_OOCCOO_CS = 0x4201, + TRIGGERED_MONKEY_PUPPET_SCENE = 0x4202, + WATCHED_CUTSCENE_WITH_RUSL_IN_N_FARON_AFTER_FINISHING_SPR = 0x4204, + BARRIER_GONE = 0x4208, + MIDNA_TEXT_AFTER_WARPING_BACK_TO_FARON_IN_ELDIN_TWILIGHT = 0x4220, + GOATS_3_DONE = 0x4240, + PALACE_WEST_WING_SOL_IN_WEST_SLOT = 0x4302, + SENSES_UNLOCKED = 0x4308, + LISTENED_TO_ADULT_SPIRITS_NEXT_TO_FOUNTAIN_IN_CASTLE_TOWN_TWILIGHT = 0x4310, + TALKED_TO_JAGGLE_ORDON_DAY_3 = 0x4320, + TALKED_TO_EAST_CT_GUARD = 0x4380, + PALACE_EAST_WING_SOL_IN_WEST_SLOT = 0x4408, + PALACE_WEST_WING_SOL_IN_EAST_SLOT = 0x4420, + POSTMAN_LEAVES_FOR_THE_FIRST_TIME_1 = 0x4504, + POSTMAN_LEAVES_FOR_THE_FIRST_TIME_2 = 0x4508, + ORDON_DAY_2_OVER = 0x4510, + LISTENED_TO_SOLDIER_SPIRITS_IN_TELMAS_BAR_DURING_TWILIGHT_1 = 0x4520, + TOOK_CRADLE_FROM_MONKEY_DAY_2 = 0x4601, + TALKED_TO_FADO_DAY_2 = 0x4602, + RODE_EPONA_BACK_TO_LINKS_HOUSE_ORDON_DAY_1 = 0x4610, + REFUSE_TO_GIVE_WOODEN_SWORD_SECOND_TIME_ORDON_DAY_3 = 0x4620, + REFUSE_TO_GIVE_WOODEN_SWORD_FIRST_TIME_ORDON_DAY_3 = 0x4640, + UNK_4680 = 0x4680, + TALKED_TO_BO_ORDON_DAY_1 = 0x4701, + TALKED_TO_RUSL_ORDON_DAY_1 = 0x4702, + TALKED_TO_ILIA_BEFORE_CALLING_EPONA_ORDON_DAY_1 = 0x4704, + TALKED_TO_ILIA_AFTER_CALLING_EPONA_ORDON_DAY_1 = 0x4708, + USED_HAWK_GRASS_FOR_THE_FIRST_TIME_ORDON_DAY_2 = 0x4710, + CALLED_EPONA_IN_ORDON_SPRING = 0x4720, + TALKED_TO_HANCH_BEFORE_BEE_ATTACK_ORDON_DAY_2 = 0x4740, + TALKED_TO_BETH_ORDON_DAY_3 = 0x4780, + TALKED_TO_BETH_DURING_TALO_RESCUE_SEQUENCE = 0x4801, + TALKED_TO_MALO_DURING_TALO_RESCUE_SEQUENCE = 0x4804, + TALKED_TO_SERA_ORDON_DAY_1 = 0x4810, + FAILED_TO_CATCH_GOAT_IN_FRONT_OF_BOS_HOUSE_ORDON_DAY_3 = 0x4820, + CAUGHT_GOAT_IN_FRONT_OF_BOS_HOUSE_ORDON_DAY_3 = 0x4840, + TALKED_TO_BO_AFTER_CATCHING_A_GOAT_ORDON_DAY_3 = 0x4880, + TALKED_TO_TALO_IN_CAGE_DAY_2 = 0x4901, + BOUGHT_SLINGSHOT_FROM_SERA = 0x4902, + TALKED_TO_BO_START_OF_DAY_2 = 0x4908, + TALKED_TO_BO_AFTER_CATCHING_GOAT_DAY_2 = 0x4910, + TALKED_TO_COLIN_DURING_TALO_RESCUE_SEQUENCE = 0x4920, + STARTED_SLINGSHOT_TUTORIAL = 0x4A02, + SACRED_GROVE_STATUES_SWITCHED = 0x4A08, + SAW_TALO_IN_CAGE_CUTSCENE_ORDON_DAY_2 = 0x4A10, + TALO_CHASES_MONKEY = 0x4A20, + ORDON_DAY_1_FINISHED = 0x4A40, + ZOOMED_IN_ON_FISH_TANK_HENAS_HUT = 0x4A80, + TALKED_TO_TALO_AFTER_GIVING_HIM_THE_WOODEN_SWORD_DAY_3 = 0x4B02, + TALKED_TO_LANAYRU_SPIRIT_IN_TWILIGHT = 0x4B04, + TALKED_TO_KIDS_AFTER_FINISHING_SLINGSHOT_TUTORIAL = 0x4B08, + TALKED_TO_KIDS_AFTER_HITTING_OBJECT_SLINGSHOT_TUTORIAL = 0x4B10, + TALKED_TO_KIDS_BEFORE_HITTING_OBJECT_SLINGSHOT_TUTORIAL = 0x4B20, + BROKE_A_PUMPKIN_FIRST_SLINGSHOT_TUTORIAL = 0x4B40, + BROKE_A_TARGET_FIRST_SLINGSHOT_TUTORIAL = 0x4B80, + RESCUED_TALO_AND_THE_MONKEY_ORDON_DAY_2 = 0x4C01, + TALKED_TO_HANCH_ORDON_DAY_3 = 0x4C04, + TALKED_TO_HANCH_AFTER_TALKING_TO_SERA_ORDON_DAY_2 = 0x4C08, + UNK_4C20 = 0x4C20, + TALKED_TO_ZORA_CLOSE_TO_FYER_LAKE_HYLIA_AFTER_LANAYRU_TWILIGHT = 0x4C40, + PUT_BEE_LARVA_IN_BOTTLE_ORDON_DAY_2 = 0x4C80, + ZOOMED_IN_ON_LURES_1_HENA = 0x4D01, + WATCHED_CUTSCENE_AFTER_BEING_CAPTURED_IN_FARON_TWILIGHT = 0x4D08, + TALKED_TO_GENGLE_AFTER_TALKING_TO_JOVANI_IN_THE_BAR = 0x4D10, + TALKED_TO_JOVANI_IN_BAR = 0x4D40, + GOT_BOTTLE_FROM_JOVANI = 0x4D80, + ZOOMED_IN_ON_BOOK_HENAS_HUT = 0x4E01, + ZOOMED_IN_ON_CARPET_HENAS_HUT = 0x4E02, + ZOOMED_IN_ON_JARS_HENAS_HUT = 0x4E04, + ZOOMED_IN_ON_HAT_HENAS_HUT = 0x4E08, + ZOOMED_IN_ON_CANOE_HENAS_HUT = 0x4E10, + HENA_BEAT_ROLLGOAL_1_8_FROG_LURE = 0x4E20, + HENA_ZOOMED_IN_ON_LURES_2 = 0x4E80, + HENA_ZOOMED_IN_ON_LINK_LOACH_PIC_2 = 0x4F01, + HENA_ZOOMED_IN_ON_LINK_LOACH_PIC_1 = 0x4F02, + COMPARE_HENA_AND_IZA_PICTURES_HENAS_HUT = 0x4F04, + ZOOMED_IN_ON_HENA_PICTURE_LEFT = 0x4F08, + ZOOMED_IN_ON_HENA_PICTURE_RIGHT = 0x4F10, + ZOOMED_IN_ON_IZA_PICTURE_HENAS_HUT = 0x4F20, + ZOOMED_IN_ON_CORO_PICTURE_HENAS_HUT = 0x4F40, + ZOOMED_IN_ON_FISHERMAN_PICTURE_HENAS_HUT = 0x4F80, + UNK_5001 = 0x5001, + CAUGHT_AN_ADULT_HYLIAN_LOACH = 0x5002, + CAUGHT_FIRST_FISH_WITH_HENA = 0x5004, + CAUGHT_AN_ORDON_CATFISH_NON_BOAT = 0x5008, + CAUGHT_A_BABY_HYLIAN_LOACH = 0x5010, + CAUGHT_A_HYLIAN_PIKE_NON_BOAT = 0x5020, + CAUGHT_A_HYRULE_BASS_NON_BOAT = 0x5040, + CAUGHT_A_GREENGILL = 0x5080, + ZOOMED_IN_ON_ROLLGOAL_HENAS_HUT = 0x5102, + HENA_TALKS_ABOUT_HARDER_ROLLGOAL_BEFORE_2_1 = 0x5108, + BEAT_ROLLGOAL_LEVEL_HENAS_HUT = 0x5110, + LISTENED_TO_TWO_ZORA_SPIRITS_IN_DRAINED_LAKE_HYLIA_TWILIGHT = 0x5120, + LISTENED_TO_LONE_ZORA_SPIRIT_IN_DRAINED_LAKE_HYLIA_TWILIGHT = 0x5140, + LISTENED_TO_SOLDIER_SPIRITS_IN_TELMAS_BAR_DURING_TWILIGHT_2 = 0x5180, + DANGORO_WENT_IN_A_BALL_FOR_THE_FIRST_TIME = 0x5204, + THREW_DANGORO_IN_LAVA_FOR_THE_FIRST_TIME = 0x5208, + FYRUS_GETS_UP_FIRST_TIME = 0x5210, + FYRUS_KNOCKED_DOWN_FIRST_TIME = 0x5220, + OOCCOO_SHOPKEEPER_OPENING_TEXT_READ = 0x5301, + TALKED_TO_GUY_OUTSIDE_CT_MALO_MART = 0x5308, + TALKED_TO_LADY_OUTSIDE_AGITHAS_CASTLE = 0x5401, + TALKED_TO_NPC_BY_SPRINGWATER = 0x5404, + TALKED_TO_NPC_BY_SPRINGWATER_SHOP_BEFORE_FIXING = 0x5408, + PALACE_OF_TWILIGHT_CLEARED = 0x5410, + UPDATE_SHARDS_TO_HAVE_AT_LEAST_ARBITERS_SHARD = 0x5420, + USED_SENSES_TO_SEE_STATUE_GHOST_IN_TEMPLE_OF_TIME_FIRST_ROOM = 0x5440, + UNK_5502 = 0x5502, + TALKED_TO_SOLDIER_IN_SOUTH_CASTLE_TOWN_BY_FLOWER_SHOP = 0x5504, + FIRST_FROG_LURE_FAIL_WITH_HENA = 0x5508, + TALKED_TO_JOVANI_AFTER_COLLECTING_20_POE_SOULS = 0x5510, + TALKED_TO_PLUMM_AS_HUMAN_AFTER_LANAYRU_TWILIGHT = 0x5520, + TALKED_WITH_CAT_AFTER_MIDNAS_DESPERATE_HOUR = 0x5601, + LISTENED_TO_IZA_SPIRIT_DURING_TWILIGHT_WHILE_DOMAIN_IS_STILL_FROZEN = 0x5604, + CAUGHT_A_REEKFISH = 0x5608, + TALKED_TO_THE_WEST_CT_DOG = 0x5710, + TALKED_WITH_BLACKWHITE_CAT_AFTER_SAVING_JOVANI = 0x5740, + TALKED_TO_SHOE_SHINER_IN_CENTRAL_CASTLE_TOWN = 0x5801, + TALKED_TO_RENADO_AFTER_RESTORING_ILIAS_MEMORY = 0x5804, + TALKED_TO_SOUTH_STARING_MAN_IN_EAST_CASTLE_TOWN = 0x5810, + TALKED_TO_NORTH_STARING_MAN_IN_EAST_CASTLE_TOWN = 0x5820, + TALKED_TO_FRUIT_SHOP_SELLER_IN_SOUTH_CASTLE_TOWN = 0x5840, + TALKED_TO_THE_CT_SHOE_SHINER = 0x5901, + IZA_2_MINIGAME_DONE = 0x5908, + UNK_5920 = 0x5920, + ENCOUNTER_POSTMAN_FOR_THE_FIRST_TIME = 0x5940, + TRIED_TO_ENTER_CENTRAL_CASTLE_TOWN_SHOP_WITH_DIRTY_SHOES = 0x5980, + AGREED_TO_DO_CAT_MINIGAME = 0x5B02, + TALKED_TO_HIDDEN_VILLAGE_CUCCO = 0x5B04, + CAT_MINIGAME_DONE = 0x5B08, + TALKED_TO_OWL_ORDON_WOLF_NIGHT = 0x5B10, + GENEROUS_WITH_TRILL_1 = 0x5C01, + TALKED_TO_SERA_ORDON_DAY_3 = 0x5C02, + CHEAP_WITH_TRILL_TEXT_AFTER_LEAVING = 0x5C04, + STOLE_FROM_TRILL_OR_TALKED_WITH_HIM_AS_WOLF = 0x5C08, + UNK_5C10 = 0x5C10, + TALKED_TO_IZA_SPIRIT_AFTER_MELTING_ZORAS_DOMAIN_TWILIGHT = 0x5C20, + SCOOPED_COROS_NASTY_SOUP = 0x5C80, + CAN_NOW_WARP_METEOR = 0x5D01, + GENEROUS_WITH_TRILL_2 = 0x5D02, + CHEAP_WITH_TRILL_TEXT_AFTER_PAYING = 0x5D04, + MIDNA_TEXT_AFTER_FROZEN_ZORAS_DOMAIN_TWILIGHT_INTRO_CS = 0x5D10, + MIDNA_TEXT_AFTER_TWILIGHT_KAGOROK_FLIGHT = 0x5D20, + MIDNA_TEXT_AFTER_LANDING_IN_LAKE_HYLIA_DURING_LANAYRU_TWILIGHT = 0x5D40, + ILIA_TEXT_AFTER_HORSE_CALL_CS = 0x5E04, + MIDNA_TEXT_AFTER_FOREST_TEMPLE_DONE = 0x5E10, + UNK_5E20 = 0x5E20, + FORCED_MIDNA_TEXT_AFTER_TOUCHING_FOG_IN_PALACE_OF_TWILIGHT = 0x5E40, + FORCED_MIDNA_TEXT_AFTER_LANDING_ON_THE_FLIGHT_BY_FOUL_PLATFORM = 0x5E80, + GOT_AN_APPLE_FROM_FRUIT_STAND_IN_SOUTH_CASTLE_TOWN = 0x5F02, + TALKED_TO_ZORA_BY_WATERFALL_IN_ZORAS_DOMAIN = 0x5F04, + FYER_REACTS_TO_SPECIAL_REPAIRS = 0x5F08, + WATCHED_FIRST_CANNON_CS_IN_BASEMENT = 0x5F10, + SHAD_LEAVES_SO_YOU_CAN_WARP = 0x5F20, + ANCIENT_SKYBOOK_FROM_IMPAZ = 0x5F80, + TALKED_TO_FYER_AFTER_LANAYRU_TWILIGHT = 0x6001, + ASKED_FYER_FOR_SPECIAL_REPAIRS_BEFORE_WARPING_THE_CANNON = 0x6002, + SHAD_COMES_BACK_AFTER_ALL_LETTERS_WERE_GOTTEN = 0x6004, + LAKE_HYLIA_SKY_LETTER = 0x6008, + BRIDGE_OF_ELDIN_SKY_LETTER = 0x6010, + GORGE_SKY_LETTER = 0x6020, + DESERT_SKY_LETTER = 0x6040, + FARON_SKY_LETTER = 0x6080, + BOUGHT_HYLIAN_SHIELD_AT_MALO_MART = 0x6102, + MIDNA_TEXT_AFTER_YOU_ENTERED_ELDIN_TWILIGHT = 0x6104, + TRILL_WILL_TRY_TO_KILL_YOU = 0x6110, + GOT_REEKFISH_SCENT = 0x6120, + REMOVE_MIDNA_FROM_Z = 0x6140, + TALKED_TO_LAZY_GORON = 0x6180, + AMPITHEATER_SKYLETTER = 0x6204, + STARTED_STAR_1 = 0x6208, + GOT_POE_SCENT = 0x6210, + GIRLS_IN_CASTLE_TOWN_START_CHASING_LINK = 0x6220, + TALKED_TO_COLIN_ORDON_DAY_1 = 0x6280, + HENA_BEAT_ROLLGOAL_8_8 = 0x6302 +}; diff --git a/src/dusk/randomizer/game/stages.cpp b/src/dusk/randomizer/game/stages.cpp new file mode 100644 index 0000000000..904cf5e70f --- /dev/null +++ b/src/dusk/randomizer/game/stages.cpp @@ -0,0 +1,82 @@ +#include "stages.h" + +const char allStages[78][8] = { + "D_MN01", // 0 + "D_MN01A", // 1 + "D_MN01B", // 2 + "D_MN04", // 3 + "D_MN04A", // 4 + "D_MN04B", // 5 + "D_MN05", // 6 + "D_MN05A", // 7 + "D_MN05B", // 8 + "D_MN06", // 9 + "D_MN06A", // 10 + "D_MN06B", // 11 + "D_MN07", // 12 + "D_MN07A", // 13 + "D_MN07B", // 14 + "D_MN08", // 15 + "D_MN08A", // 16 + "D_MN08B", // 17 + "D_MN08C", // 18 + "D_MN08D", // 19 + "D_MN09", // 20 + "D_MN09A", // 21 + "D_MN09B", // 22 + "D_MN09C", // 23 + "D_MN10", // 24 + "D_MN10A", // 25 + "D_MN10B", // 26 + "D_MN11", // 27 + "D_MN11A", // 28 + "D_MN11B", // 29 + "D_SB00", // 30 + "D_SB01", // 31 + "D_SB02", // 32 + "D_SB03", // 33 + "D_SB04", // 34 + "D_SB05", // 35 + "D_SB06", // 36 + "D_SB07", // 37 + "D_SB08", // 38 + "D_SB09", // 39 + "D_SB10", // 40 + "F_SP00", // 41 + "F_SP102", // 42 + "F_SP103", // 43 + "F_SP104", // 44 + "F_SP108", // 45 + "F_SP109", // 46 + "F_SP110", // 47 + "F_SP111", // 48 + "F_SP112", // 49 + "F_SP113", // 50 + "F_SP114", // 51 + "F_SP115", // 52 + "F_SP116", // 53 + "F_SP117", // 54 + "F_SP118", // 55 + "F_SP121", // 56 + "F_SP122", // 57 + "F_SP123", // 58 + "F_SP124", // 59 + "F_SP125", // 60 + "F_SP126", // 61 + "F_SP127", // 62 + "F_SP128", // 63 + "F_SP200", // 64 + "R_SP01", // 65 + "R_SP107", // 66 + "R_SP108", // 67 + "R_SP109", // 68 + "R_SP110", // 69 + "R_SP116", // 70 + "R_SP127", // 71 + "R_SP128", // 72 + "R_SP160", // 73 + "R_SP161", // 74 + "R_SP209", // 75 + "R_SP300", // 76 + "R_SP301" // 77 +}; \ No newline at end of file diff --git a/src/dusk/randomizer/game/stages.h b/src/dusk/randomizer/game/stages.h new file mode 100644 index 0000000000..607c4a7959 --- /dev/null +++ b/src/dusk/randomizer/game/stages.h @@ -0,0 +1,85 @@ +#pragma once + +enum StageIDs + { + Lakebed_Temple = 0x0, + Morpheel = 0x1, + Deku_Toad, + Goron_Mines, + Fyrus, + Dangoro, + Forest_Temple, + Diababa, + Ook, + Temple_of_Time, + Armogohma, + Darknut, + City_in_the_Sky, + Argorok, + Aeralfos, + Palace_of_Twilight, + Zant_Main_Room, + Phantom_Zant_1, + Phantom_Zant_2, + Zant_Fight, + Hyrule_Castle, + Ganondorf_Castle, + Ganondorf_Field, + Ganondorf_Defeated, + Arbiters_Grounds, + Stallord, + Death_Sword, + Snowpeak_Ruins, + Blizzeta, + Darkhammer, + Lanayru_Ice_Puzzle_Cave, + Cave_of_Ordeals, + Eldin_Long_Cave, + Lake_Hylia_Long_Cave, + Eldin_Goron_Stockcave, + Grotto_1, + Grotto_2, + Grotto_3, + Grotto_4, + Grotto_5, + Faron_Woods_Cave, + Ordon_Ranch, + Title_Screen, + Ordon_Village, + Ordon_Spring, + Faron_Woods, + Kakariko_Village, + Death_Mountain, + Kakariko_Graveyard, + Zoras_River, + Zoras_Domain, + Snowpeak, + Lake_Hylia, + Castle_Town, + Sacred_Grove, + Bulblin_Camp, + Hyrule_Field, + Outside_Castle_Town, + Bulblin_2, + Gerudo_Desert, + Mirror_Chamber, + Upper_Zoras_River, + Fishing_Pond, + Hidden_Village, + Hidden_Skill, + Ordon_Village_Interiors, + Hyrule_Castle_Sewers, + Faron_Woods_Interiors, + Kakariko_Village_Interiors, + Death_Mountain_Interiors, + Castle_Town_Interiors, + Fishing_Pond_Interiors, + Hidden_Village_Interiors, + Castle_Town_Shops, + Star_Game, + Kakariko_Graveyard_Interiors, + Light_Arrows_Cutscene, + Hyrule_Castle_Cutscenes + }; + +extern const char allStages[78][8]; diff --git a/src/dusk/randomizer/game/tools.cpp b/src/dusk/randomizer/game/tools.cpp index 991616c594..7edbc8eb5d 100644 --- a/src/dusk/randomizer/game/tools.cpp +++ b/src/dusk/randomizer/game/tools.cpp @@ -1,4 +1,5 @@ #include "tools.h" +#include "stages.h" #include "d/d_com_inf_game.h" #include "d/actor/d_a_alink.h" #include "d/d_item.h" @@ -91,4 +92,18 @@ int initCreatePlayerItem(u32 item, u32 flag, const cXyz* pos, int roomNo, const { u32 params = 0xFF0000 | ((flag & 0xFF) << 0x8) | (item & 0xFF); return fopAcM_create(539, params, pos, roomNo, angle, scale, -1); +} + +int getStageID(const char* stage) +{ + int loopCount = sizeof(allStages) / sizeof(allStages[0]); + for (int i = 0; i < loopCount; i++) + { + if (daAlink_c::checkStageName(allStages[i])) + { + return i; + } + } + // Didn't find the current stage for some reason + return -1; } \ No newline at end of file diff --git a/src/dusk/randomizer/game/tools.h b/src/dusk/randomizer/game/tools.h index a1f3e1851a..21c374918e 100644 --- a/src/dusk/randomizer/game/tools.h +++ b/src/dusk/randomizer/game/tools.h @@ -7,3 +7,4 @@ void checkTransformFromWolf(); u8 setNextWarashibeItem(); void offWarashibeItem(u8 item); int initCreatePlayerItem(u32 item, u32 flag, const cXyz* pos, int roomNo, const csXyz* angle, const cXyz* scale); +int getStageID(const char* stage);