Merge remote-tracking branch 'origin/develop' into move-soh-assets

This commit is contained in:
Adam Bird 2023-10-20 21:09:32 -04:00
commit 12c09ecc3d
313 changed files with 660 additions and 58366 deletions

View file

@ -1090,8 +1090,8 @@ s32 Health_ChangeBy(PlayState* play, s16 healthChange);
void Rupees_ChangeBy(s16 rupeeChange);
void Inventory_ChangeAmmo(s16 item, s16 ammoChange);
void Magic_Fill(PlayState* play);
void func_800876C8(PlayState* play);
s32 func_80087708(PlayState* play, s16 arg1, s16 arg2);
void Magic_Reset(PlayState* play);
s32 Magic_RequestChange(PlayState* play, s16 amount, s16 type);
void func_80088AA0(s16 seconds);
void func_80088AF0(PlayState* play);
void func_80088B34(s16 arg0);

View file

@ -292,11 +292,6 @@ extern GraphicsContext* __gfxCtx;
#define SEG_ADDR(seg, addr) (addr | (seg << 24) | 1)
// #endregion
// #region SOH [Enhancements]
#define CHECK_EQUIPMENT_AGE(i, j) (CVarGetInteger("gTimelessEquipment", 0) || (gEquipAgeReqs[i][j] == 9) || (gEquipAgeReqs[i][j] == ((void)0, gSaveContext.linkAge)))
#define CHECK_SLOT_AGE(slotIndex) (CVarGetInteger("gTimelessEquipment", 0) || (gSlotAgeReqs[slotIndex] == 9) || gSlotAgeReqs[slotIndex] == ((void)0, gSaveContext.linkAge))
#define CHECK_ITEM_AGE(itemIndex) (CVarGetInteger("gTimelessEquipment", 0) || (gItemAgeReqs[itemIndex] == 9) || (gItemAgeReqs[itemIndex] == gSaveContext.linkAge))
#define DPAD_ITEM(button) ((gSaveContext.buttonStatus[(button) + 5] != BTN_DISABLED) \
? gSaveContext.equips.buttonItems[(button) + 4] \
: ITEM_NONE)

View file

@ -8,301 +8,323 @@
#include <locale>
#include <filesystem>
#define SEQUENCE_MAP_ENTRY(sequenceId, label, sfxKey, category) \
{ sequenceId, { sequenceId, label, sfxKey, category } }
#define SEQUENCE_MAP_ENTRY(sequenceId, label, sfxKey, category, canBeReplaced, canBeUsedAsReplacement) \
{ sequenceId, { sequenceId, label, sfxKey, category, canBeReplaced, canBeUsedAsReplacement } }
AudioCollection::AudioCollection() {
// (originalSequenceId, label, sfxKey, category),
// (originalSequenceId, label, sfxKey, category, canBeReplaced, canBeUsedAsReplacement),
sequenceMap = {
SEQUENCE_MAP_ENTRY(NA_BGM_FIELD_LOGIC, "Hyrule Field", "NA_BGM_FIELD_LOGIC", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_DUNGEON, "Dodongo's Cavern", "NA_BGM_DUNGEON", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_KAKARIKO_ADULT, "Kakariko Village (Adult)", "NA_BGM_KAKARIKO_ADULT", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_ENEMY, "Battle", "NA_BGM_ENEMY", SEQ_BGM_BATTLE),
SEQUENCE_MAP_ENTRY(NA_BGM_BOSS, "Boss Battle", "NA_BGM_BOSS", SEQ_BGM_BATTLE),
SEQUENCE_MAP_ENTRY(NA_BGM_INSIDE_DEKU_TREE, "Inside the Deku Tree", "NA_BGM_INSIDE_DEKU_TREE", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_MARKET, "Market", "NA_BGM_MARKET", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_TITLE, "Title Theme", "NA_BGM_TITLE", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_LINK_HOUSE, "House", "NA_BGM_LINK_HOUSE", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_GAME_OVER, "Game Over", "NA_BGM_GAME_OVER", SEQ_FANFARE),
SEQUENCE_MAP_ENTRY(NA_BGM_BOSS_CLEAR, "Boss Clear", "NA_BGM_BOSS_CLEAR", SEQ_FANFARE),
SEQUENCE_MAP_ENTRY(NA_BGM_ITEM_GET, "Obtain Item", "NA_BGM_ITEM_GET", SEQ_FANFARE),
SEQUENCE_MAP_ENTRY(NA_BGM_OPENING_GANON, "Enter Ganondorf", "NA_BGM_OPENING_GANON", SEQ_FANFARE),
SEQUENCE_MAP_ENTRY(NA_BGM_HEART_GET, "Obtain Heart Container", "NA_BGM_HEART_GET", SEQ_FANFARE),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_LIGHT, "Prelude of Light", "NA_BGM_OCA_LIGHT", SEQ_OCARINA),
SEQUENCE_MAP_ENTRY(NA_BGM_JABU_JABU, "Inside Jabu-Jabu's Belly", "NA_BGM_JABU_JABU", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_KAKARIKO_KID, "Kakariko Village (Child)", "NA_BGM_KAKARIKO_KID", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_GREAT_FAIRY, "Great Fairy's Fountain", "NA_BGM_GREAT_FAIRY", SEQ_BGM_EVENT),
SEQUENCE_MAP_ENTRY(NA_BGM_ZELDA_THEME, "Zelda's Theme", "NA_BGM_ZELDA_THEME", SEQ_BGM_EVENT),
SEQUENCE_MAP_ENTRY(NA_BGM_FIRE_TEMPLE, "Fire Temple", "NA_BGM_FIRE_TEMPLE", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_OPEN_TRE_BOX, "Open Treasure Chest", "NA_BGM_OPEN_TRE_BOX", SEQ_FANFARE),
SEQUENCE_MAP_ENTRY(NA_BGM_FOREST_TEMPLE, "Forest Temple", "NA_BGM_FOREST_TEMPLE", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_COURTYARD, "Hyrule Castle Courtyard", "NA_BGM_COURTYARD", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_GANON_TOWER, "Ganondorf's Theme", "NA_BGM_GANON_TOWER", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_LONLON, "Lon Lon Ranch", "NA_BGM_LONLON", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_GORON_CITY, "Goron City", "NA_BGM_GORON_CITY", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_FIELD_MORNING, "Hyrule Field Morning Theme", "NA_BGM_FIELD_MORNING", SEQ_NOSHUFFLE),
SEQUENCE_MAP_ENTRY(NA_BGM_SPIRITUAL_STONE, "Spiritual Stone Get", "NA_BGM_SPIRITUAL_STONE", SEQ_FANFARE),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_BOLERO, "Bolero of Fire", "NA_BGM_OCA_BOLERO", SEQ_OCARINA),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_MINUET, "Minuet of Forest", "NA_BGM_OCA_MINUET", SEQ_OCARINA),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_SERENADE, "Serenade of Water", "NA_BGM_OCA_SERENADE", SEQ_OCARINA),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_REQUIEM, "Requiem of Spirit", "NA_BGM_OCA_REQUIEM", SEQ_OCARINA),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_NOCTURNE, "Nocturne of Shadow", "NA_BGM_OCA_NOCTURNE", SEQ_OCARINA),
SEQUENCE_MAP_ENTRY(NA_BGM_MINI_BOSS, "Mini-Boss Battle", "NA_BGM_MINI_BOSS", SEQ_BGM_BATTLE),
SEQUENCE_MAP_ENTRY(NA_BGM_SMALL_ITEM_GET, "Obtain Small Item", "NA_BGM_SMALL_ITEM_GET", SEQ_FANFARE),
SEQUENCE_MAP_ENTRY(NA_BGM_TEMPLE_OF_TIME, "Temple of Time", "NA_BGM_TEMPLE_OF_TIME", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_EVENT_CLEAR, "Escape from Lon Lon Ranch", "NA_BGM_EVENT_CLEAR", SEQ_FANFARE),
SEQUENCE_MAP_ENTRY(NA_BGM_KOKIRI, "Kokiri Forest", "NA_BGM_KOKIRI", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_FAIRY_GET, "Obtain Fairy Ocarina", "NA_BGM_OCA_FAIRY_GET", SEQ_FANFARE),
SEQUENCE_MAP_ENTRY(NA_BGM_SARIA_THEME, "Lost Woods", "NA_BGM_SARIA_THEME", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_SPIRIT_TEMPLE, "Spirit Temple", "NA_BGM_SPIRIT_TEMPLE", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_HORSE, "Horse Race", "NA_BGM_HORSE", SEQ_BGM_EVENT),
SEQUENCE_MAP_ENTRY(NA_BGM_HORSE_GOAL, "Horse Race Goal", "NA_BGM_HORSE_GOAL", SEQ_FANFARE),
SEQUENCE_MAP_ENTRY(NA_BGM_INGO, "Ingo's Theme", "NA_BGM_INGO", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_MEDALLION_GET, "Obtain Medallion", "NA_BGM_MEDALLION_GET", SEQ_FANFARE),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_SARIA, "Ocarina Saria's Song", "NA_BGM_OCA_SARIA", SEQ_OCARINA),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_EPONA, "Ocarina Epona's Song", "NA_BGM_OCA_EPONA", SEQ_OCARINA),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_ZELDA, "Ocarina Zelda's Lullaby", "NA_BGM_OCA_ZELDA", SEQ_OCARINA),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_SUNS, "Ocarina Sun's Song", "NA_BGM_OCA_SUNS", SEQ_OCARINA),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_TIME, "Ocarina Song of Time", "NA_BGM_OCA_TIME", SEQ_OCARINA),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_STORM, "Ocarina Song of Storms", "NA_BGM_OCA_STORM", SEQ_OCARINA),
SEQUENCE_MAP_ENTRY(NA_BGM_NAVI_OPENING, "Fairy Flying", "NA_BGM_NAVI_OPENING", SEQ_BGM_EVENT),
SEQUENCE_MAP_ENTRY(NA_BGM_DEKU_TREE_CS, "Deku Tree", "NA_BGM_DEKU_TREE_CS", SEQ_BGM_EVENT),
SEQUENCE_MAP_ENTRY(NA_BGM_WINDMILL, "Windmill Hut", "NA_BGM_WINDMILL", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_HYRULE_CS, "Legend of Hyrule", "NA_BGM_HYRULE_CS", SEQ_BGM_EVENT),
SEQUENCE_MAP_ENTRY(NA_BGM_MINI_GAME, "Shooting Gallery", "NA_BGM_MINI_GAME", SEQ_BGM_EVENT),
SEQUENCE_MAP_ENTRY(NA_BGM_SHEIK, "Sheik's Theme", "NA_BGM_SHEIK", SEQ_BGM_EVENT),
SEQUENCE_MAP_ENTRY(NA_BGM_ZORA_DOMAIN, "Zora's Domain", "NA_BGM_ZORA_DOMAIN", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_APPEAR, "Enter Zelda", "NA_BGM_APPEAR", SEQ_FANFARE),
SEQUENCE_MAP_ENTRY(NA_BGM_ADULT_LINK, "Goodbye to Zelda", "NA_BGM_ADULT_LINK", SEQ_BGM_EVENT),
SEQUENCE_MAP_ENTRY(NA_BGM_MASTER_SWORD, "Master Sword", "NA_BGM_MASTER_SWORD", SEQ_FANFARE),
SEQUENCE_MAP_ENTRY(NA_BGM_INTRO_GANON, "Ganon Intro", "NA_BGM_INTRO_GANON", SEQ_BGM_EVENT),
SEQUENCE_MAP_ENTRY(NA_BGM_SHOP, "Shop", "NA_BGM_SHOP", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_CHAMBER_OF_SAGES, "Chamber of the Sages", "NA_BGM_CHAMBER_OF_SAGES", SEQ_BGM_EVENT),
SEQUENCE_MAP_ENTRY(NA_BGM_FILE_SELECT, "File Select", "NA_BGM_FILE_SELECT", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_ICE_CAVERN, "Ice Cavern", "NA_BGM_ICE_CAVERN", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_DOOR_OF_TIME, "Open Door of Temple of Time", "NA_BGM_DOOR_OF_TIME", SEQ_BGM_EVENT),
SEQUENCE_MAP_ENTRY(NA_BGM_OWL, "Kaepora Gaebora's Theme", "NA_BGM_OWL", SEQ_BGM_EVENT),
SEQUENCE_MAP_ENTRY(NA_BGM_SHADOW_TEMPLE, "Shadow Temple", "NA_BGM_SHADOW_TEMPLE", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_WATER_TEMPLE, "Water Temple", "NA_BGM_WATER_TEMPLE", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_BRIDGE_TO_GANONS, "Ganon's Castle Bridge", "NA_BGM_BRIDGE_TO_GANONS", SEQ_BGM_EVENT),
SEQUENCE_MAP_ENTRY(NA_BGM_OCARINA_OF_TIME, "Ocarina of Time", "NA_BGM_OCARINA_OF_TIME", SEQ_FANFARE),
SEQUENCE_MAP_ENTRY(NA_BGM_GERUDO_VALLEY, "Gerudo Valley", "NA_BGM_GERUDO_VALLEY", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_POTION_SHOP, "Potion Shop", "NA_BGM_POTION_SHOP", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_KOTAKE_KOUME, "Kotake & Koume's Theme", "NA_BGM_KOTAKE_KOUME", SEQ_BGM_EVENT),
SEQUENCE_MAP_ENTRY(NA_BGM_ESCAPE, "Escape from Ganon's Castle", "NA_BGM_ESCAPE", SEQ_BGM_EVENT),
SEQUENCE_MAP_ENTRY(NA_BGM_UNDERGROUND, "Ganon's Castle Under Ground", "NA_BGM_UNDERGROUND", SEQ_BGM_WORLD),
SEQUENCE_MAP_ENTRY(NA_BGM_GANONDORF_BOSS, "Ganondorf Battle", "NA_BGM_GANONDORF_BOSS", SEQ_BGM_BATTLE),
SEQUENCE_MAP_ENTRY(NA_BGM_GANON_BOSS, "Ganon Battle", "NA_BGM_GANON_BOSS", SEQ_BGM_BATTLE),
SEQUENCE_MAP_ENTRY(NA_BGM_END_DEMO, "Seal of Six Sages", "NA_BGM_END_DEMO", SEQ_NOSHUFFLE),
SEQUENCE_MAP_ENTRY(NA_BGM_STAFF_1, "End Credits I", "NA_BGM_STAFF_1", SEQ_NOSHUFFLE),
SEQUENCE_MAP_ENTRY(NA_BGM_STAFF_2, "End Credits II", "NA_BGM_STAFF_2", SEQ_NOSHUFFLE),
SEQUENCE_MAP_ENTRY(NA_BGM_STAFF_3, "End Credits III", "NA_BGM_STAFF_3", SEQ_NOSHUFFLE),
SEQUENCE_MAP_ENTRY(NA_BGM_STAFF_4, "End Credits IV", "NA_BGM_STAFF_4", SEQ_NOSHUFFLE),
SEQUENCE_MAP_ENTRY(NA_BGM_FIRE_BOSS, "King Dodongo & Volvagia Boss Battle", "NA_BGM_FIRE_BOSS", SEQ_BGM_BATTLE),
SEQUENCE_MAP_ENTRY(NA_BGM_TIMED_MINI_GAME, "Mini-Game", "NA_BGM_TIMED_MINI_GAME", SEQ_BGM_EVENT),
SEQUENCE_MAP_ENTRY(INSTRUMENT_OFFSET + 1, "Ocarina", "OCARINA_INSTRUMENT_DEFAULT", SEQ_INSTRUMENT),
SEQUENCE_MAP_ENTRY(INSTRUMENT_OFFSET + 2, "Malon", "OCARINA_INSTRUMENT_MALON", SEQ_INSTRUMENT),
SEQUENCE_MAP_ENTRY(INSTRUMENT_OFFSET + 3, "Whistle", "OCARINA_INSTRUMENT_WHISTLE", SEQ_INSTRUMENT),
SEQUENCE_MAP_ENTRY(INSTRUMENT_OFFSET + 4, "Harp", "OCARINA_INSTRUMENT_HARP", SEQ_INSTRUMENT),
SEQUENCE_MAP_ENTRY(INSTRUMENT_OFFSET + 5, "Organ", "OCARINA_INSTRUMENT_GRIND_ORGAN", SEQ_INSTRUMENT),
SEQUENCE_MAP_ENTRY(INSTRUMENT_OFFSET + 6, "Flute", "OCARINA_INSTRUMENT_FLUTE", SEQ_INSTRUMENT),
SEQUENCE_MAP_ENTRY(NA_SE_EV_SMALL_DOG_BARK, "Bark", "NA_SE_EV_SMALL_DOG_BARK", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_AWA_BOUND, "Bomb Bounce", "NA_SE_EN_AWA_BOUND", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_SHADEST_TAIKO_LOW, "Bongo Bongo Low", "NA_SE_EN_SHADEST_TAIKO_LOW", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_NUTS_FAINT, "Business Scrub", "NA_SE_EN_NUTS_FAINT", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_SY_CARROT_RECOVER, "Carrot Refill", "NA_SE_SY_CARROT_RECOVER", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EV_CHICKEN_CRY_N, "Cluck", "NA_SE_EV_CHICKEN_CRY_N", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EV_BRIDGE_OPEN_STOP, "Drawbridge Set", "NA_SE_EV_BRIDGE_OPEN_STOP", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_KAICHO_CRY, "Guay", "NA_SE_EN_KAICHO_CRY", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_SY_HITPOINT_ALARM, "Low HP Beep", "NA_SE_SY_HITPOINT_ALARM", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_SY_HP_RECOVER, "HP Recover", "NA_SE_SY_HP_RECOVER", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EV_HORSE_RUN, "Horse Trot", "NA_SE_EV_HORSE_RUN", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_PL_WALK_HEAVYBOOTS, "Iron Boots", "NA_SE_PL_WALK_HEAVYBOOTS", SEQ_SFX),
//SEQUENCE_MAP_ENTRY(NA_SE_PL_HOBBERBOOTS_LV, "Hover Boots", "NA_SE_PL_HOBBERBOOTS_LV", SEQ_SFX), // Doesn't work due to SFX_FLAG
SEQUENCE_MAP_ENTRY(NA_SE_EV_COW_CRY, "Moo", "NA_SE_EV_COW_CRY", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EV_POT_BROKEN, "Pot Shattering", "NA_SE_EV_POT_BROKEN", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EV_FROG_CRY_0, "Ribbit", "NA_SE_EV_FROG_CRY_0", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EV_FIVE_COUNT_LUPY, "Rupee (Silver)", "NA_SE_EV_FIVE_COUNT_LUPY", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EV_FOOT_SWITCH, "Switch", "NA_SE_EV_FOOT_SWITCH", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_IT_WALL_HIT_SOFT, "Sword Bonk", "NA_SE_IT_WALL_HIT_SOFT", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_SY_METRONOME, "Tambourine", "NA_SE_SY_METRONOME", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_AMOS_VOICE, "Armos", "NA_SE_EN_AMOS_VOICE", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_REDEAD_AIM, "Redead Scream", "NA_SE_EN_REDEAD_AIM", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_STALKID_ATTACK, "Stalchild Attack", "NA_SE_EN_STALKID_ATTACK", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EV_CHICKEN_CRY_M, "Cockadoodiedoo", "NA_SE_EV_CHICKEN_CRY_M", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_SY_KINSTA_MARK_APPEAR, "Gold Skulltula Token", "NA_SE_SY_KINSTA_MARK_APPEAR", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_REDEAD_CRY, "Redead Moan", "NA_SE_EN_REDEAD_CRY", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EV_LIGHTNING, "Thunder", "NA_SE_EV_LIGHTNING", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_OC_ABYSS, "Cartoon Fall", "NA_SE_OC_ABYSS", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_FLAME_LAUGH, "Flare Dancer Laugh", "NA_SE_EN_FLAME_LAUGH", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_AWA_BREAK, "Shabom Pop", "NA_SE_EN_AWA_BREAK", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_SHADEST_TAIKO_HIGH, "Bongo Bongo High", "NA_SE_EN_SHADEST_TAIKO_HIGH", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EV_BOTTLE_CAP_OPEN, "Bottle Cork", "NA_SE_EV_BOTTLE_CAP_OPEN", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_IT_BOW_FLICK, "Bow Twang", "NA_SE_IT_BOW_FLICK", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_BUBLE_LAUGH, "Bubble Laugh", "NA_SE_EN_BUBLE_LAUGH", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_DEKU_JR_MOUTH, "Deku Baba", "NA_SE_EN_DEKU_JR_MOUTH", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EV_DOG_CRY_EVENING, "Dusk Howl", "NA_SE_EV_DOG_CRY_EVENING", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_FLAME_DAMAGE, "Flare Dancer Startled", "NA_SE_EN_FLAME_DAMAGE", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_GANON_AT_RETURN, "Ganondorf Teh!", "NA_SE_EN_GANON_AT_RETURN", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_GOMA_JR_CRY, "Gohma Larva Croak", "NA_SE_EN_GOMA_JR_CRY", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_GOLON_WAKE_UP, "Goron Wake", "NA_SE_EN_GOLON_WAKE_UP", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_SY_START_SHOT, "Gunshot", "NA_SE_SY_START_SHOT", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_IT_HAMMER_HIT, "Hammer Bonk", "NA_SE_IT_HAMMER_HIT", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_IRONNACK_SWING_AXE, "Iron Knuckle", "NA_SE_EN_IRONNACK_SWING_AXE", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_FANTOM_ST_LAUGH, "Phantom Ganon Laugh", "NA_SE_EN_FANTOM_ST_LAUGH", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EV_PLANT_BROKEN, "Plant Explode", "NA_SE_EV_PLANT_BROKEN", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_SY_GET_RUPY, "Rupee", "NA_SE_SY_GET_RUPY", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_NUTS_UP, "Scrub Emerge", "NA_SE_EN_NUTS_UP", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_AWA_BOUND, "Shabom Bounce", "NA_SE_EN_AWA_BOUND", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_SHELL_MOUTH, "Shellblade", "NA_SE_EN_SHELL_MOUTH", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_STALTU_DAMAGE, "Skulltula Damage", "NA_SE_EN_STALTU_DAMAGE", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EN_NUTS_THROW, "Spit Nut", "NA_SE_EN_NUTS_THROW", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_SY_LOCK_ON, "Target Enemy", "NA_SE_SY_LOCK_ON", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_SY_LOCK_ON_HUMAN, "Target Neutral", "NA_SE_SY_LOCK_ON_HUMAN", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_SY_FSEL_CURSOR, "File Select Cursor", "NA_SE_SY_FSEL_CURSOR", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_SY_FSEL_DECIDE_L, "File Select Choose", "NA_SE_SY_FSEL_DECIDE_L", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_SY_FSEL_CLOSE, "File Select Back", "NA_SE_SY_FSEL_CLOSE", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_IT_BOMB_EXPLOSION, "Bomb Explosion", "NA_SE_IT_BOMB_EXPLOSION", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_EV_CHICKEN_CRY_A, "Chicken Cry", "NA_SE_EV_CHICKEN_CRY_A", SEQ_SFX),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_SWORD_N, "Adult Link - Slash", "NA_SE_VO_LI_SWORD_N", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_SWORD_L, "Adult Link - Big Slash", "NA_SE_VO_LI_SWORD_L", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_LASH, "Adult Link - Hookshot Latch Yell", "NA_SE_VO_LI_LASH", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_HANG, "Adult Link - Dangling Gasp", "NA_SE_VO_LI_HANG", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_CLIMB_END, "Adult Link - Climb Edge", "NA_SE_VO_LI_CLIMB_END", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_DAMAGE_S, "Adult Link - Small Damage", "NA_SE_VO_LI_DAMAGE_S", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_FREEZE, "Adult Link - Freeze", "NA_SE_VO_LI_FREEZE", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_FALL_S, "Adult Link - Fall Gasp", "NA_SE_VO_LI_FALL_S", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_FALL_L, "Adult Link - Fall Scream", "NA_SE_VO_LI_FALL_L", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_BREATH_REST, "Adult Link - Low Health Sigh", "NA_SE_VO_LI_BREATH_REST", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_BREATH_DRINK, "Adult Link - Bottle Sigh", "NA_SE_VO_LI_BREATH_DRINK", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_DOWN, "Adult Link - Death", "NA_SE_VO_LI_DOWN", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_TAKEN_AWAY, "Adult Link - Taken away by Wallmaster","NA_SE_VO_LI_TAKEN_AWAY", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_HELD, "Adult Link - Grabbed by Wallmaster", "NA_SE_VO_LI_HELD", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_SNEEZE, "Adult Link - Sneeze", "NA_SE_VO_LI_SNEEZE", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_SWEAT, "Adult Link - Gasp (Hot Room)", "NA_SE_VO_LI_SWEAT", SEQ_VOICE),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_DRINK, "Adult Link - Drinking", "NA_SE_VO_LI_DRINK", SEQ_VOICE), // Doesn't work due to SFX_FLAG
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_RELAX, "Adult Link - Yawn", "NA_SE_VO_LI_RELAX", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_SWORD_PUTAWAY, "Adult Link - Yell (Sword Putaway)", "NA_SE_VO_LI_SWORD_PUTAWAY", SEQ_VOICE),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_GROAN, "Adult Link - Groan (Unused)", "NA_SE_VO_LI_GROAN", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_AUTO_JUMP, "Adult Link - Jump/Swing Bottle", "NA_SE_VO_LI_AUTOd_JUMP", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_MAGIC_NALE, "Adult Link - Use Nayru's Love", "NA_SE_VO_LI_MAGIC_NALE", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_SURPRISE, "Adult Link - Suprised Gasp", "NA_SE_VO_LI_SURPRISE", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_MAGIC_FROL, "Adult Link - Use Farore's Wind", "NA_SE_VO_LI_MAGIC_FROL", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_PUSH, "Adult Link - Push", "NA_SE_VO_LI_PUSH", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_HOOKSHOT_HANG, "Adult Link - Hookshot hang", "NA_SE_VO_LI_HOOKSHOT_HANG", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_LAND_DAMAGE_S, "Adult Link - Fall damage", "NA_SE_VO_LI_LAND_DAMAGE_S", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_NULL_0x1b, "Adult Link - Small grunt (unused?)", "NA_SE_VO_LI_NULL_0x1b", SEQ_VOICE), // Unused? But unique so keeping it
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_MAGIC_ATTACK, "Adult Link - Din's Fire", "NA_SE_VO_LI_MAGIC_ATTACK", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_BL_DOWN, "Adult Link - Scream (Nocturne?)", "NA_SE_VO_BL_DOWN", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_DEMO_DAMAGE, "Adult Link - Pained Land (Nocturne?)","NA_SE_VO_LI_DEMO_DAMAGE", SEQ_VOICE),
//SEQUENCE_MAP_ENTRY("Adult Link - Unused Sound 1?","NA_SE_VO_LI_ELECTRIC_SHOCK_LV", "NA_SE_VO_LI_ELECTRIC_SHOCK_LV", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_SWORD_N_KID, "Child Link - Slash", "NA_SE_VO_LI_SWORD_N_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_ROLLING_CUT_KID, "Child Link - Big Slash", "NA_SE_VO_LI_ROLLING_CUT_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_LASH_KID, "Child Link - Hootshot Latch", "NA_SE_VO_LI_LASH_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_HANG_KID, "Child Link - Dangling Gasp", "NA_SE_VO_LI_HANG_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_CLIMB_END_KID, "Child Link - Climb Edge", "NA_SE_VO_LI_CLIMB_END_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_DAMAGE_S_KID, "Child Link - Small Damage", "NA_SE_VO_LI_DAMAGE_S_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_FREEZE_KID, "Child Link - Freeze", "NA_SE_VO_LI_FREEZE_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_FALL_S_KID, "Child Link - Fall Gasp", "NA_SE_VO_LI_FALL_S_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_FALL_L_KID, "Child Link - Fall Scream", "NA_SE_VO_LI_FALL_L_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_BREATH_REST_KID, "Child Link - Low Health Sigh", "NA_SE_VO_LI_BREATH_REST_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_BREATH_DRINK_KID, "Child Link - Bottle Sigh", "NA_SE_VO_LI_BREATH_DRINK_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_DOWN_KID, "Child Link - Death", "NA_SE_VO_LI_DOWN_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_TAKEN_AWAY_KID, "Child Link - Taken away by Wallmaster","NA_SE_VO_LI_TAKEN_AWAY_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_HELD_KID, "Child Link - Grabbed by Wallmaster", "NA_SE_VO_LI_HELD_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_SNEEZE_KID, "Child Link - Sneeze", "NA_SE_VO_LI_SNEEZE_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_SWEAT_KID, "Child Link - Gasp (Hot Room)", "NA_SE_VO_LI_SWEAT_KID", SEQ_VOICE),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_DRINK_KID, "Child Link - Drinking", "NA_SE_VO_LI_DRINK_KID", SEQ_VOICE), // Doesn't work due to SFX_FLAG
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_RELAX_KID, "Child Link - Yawn", "NA_SE_VO_LI_RELAX_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_SWORD_PUTAWAY_KID,"Child Link - Yell (Sword Putaway)", "NA_SE_VO_LI_SWORD_PUTAWAY_KID", SEQ_VOICE),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_GROAN_KID, "Child Link - Groan (Unused)", "NA_SE_VO_LI_GROAN_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_AUTO_JUMP_KID, "Child Link - Jump/Swing Bottle", "NA_SE_VO_LI_AUTO_JUMP_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_MAGIC_NALE_KID, "Child Link - Use Nayru's Love", "NA_SE_VO_LI_MAGIC_NALE_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_SURPRISE_KID, "Child Link - Surprised Gasp", "NA_SE_VO_LI_SURPRISE_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_MAGIC_FROL_KID, "Child Link - Use Farore's Wind", "NA_SE_VO_LI_MAGIC_FROL_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_PUSH_KID, "Child Link - Push", "NA_SE_VO_LI_PUSH_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_HOOKSHOT_HANG_KID,"Child Link - Hookshot Hang", "NA_SE_VO_LI_HOOKSHOT_HANG_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_LAND_DAMAGE_S_KID,"Child Link - Fall Damage", "NA_SE_VO_LI_LAND_DAMAGE_S_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_NULL_0x1b_KID, "Child Link - Small Gasp (unused?)", "NA_SE_VO_LI_NULL_0x1b_KID", SEQ_VOICE), // Unused? But unique so keeping it
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_MAGIC_ATTACK_KID, "Child Link - Din's Fire", "NA_SE_VO_LI_MAGIC_ATTACK_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_BL_DOWN_KID, "Child Link - Scream (Nocturne?)", "NA_SE_VO_BL_DOWN_KID", SEQ_VOICE), // ...
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_DEMO_DAMAGE_KID, "Child Link - Scream 2 (Nocturne?)", "NA_SE_VO_LI_DEMO_DAMAGE_KID", SEQ_VOICE), // Unused, matches with adult nocturne stuff
//SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_ELECTRIC_SHOCK_LV_KID, "Child Link - Unused Sound 1?", "NA_SE_VO_LI_ELECTRIC_SHOCK_LV_KID", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_NAVY_ENEMY, "Navi - Unused Enemy Target", "NA_SE_VO_NAVY_ENEMY", SEQ_VOICE), // Has no sound but is played when targetting enemies, unsure to keep or not
SEQUENCE_MAP_ENTRY(NA_SE_VO_NAVY_HELLO, "Navi - Unused NPC Hello", "NA_SE_VO_NAVY_HELLO", SEQ_VOICE), // Has no sound but is played when targetting npcs, unsure to keep or not
SEQUENCE_MAP_ENTRY(NA_SE_VO_NAVY_HEAR, "Navi - Unused Other Target", "NA_SE_VO_NAVY_HEAR", SEQ_VOICE), // Has no sound but is played when targetting npcs, unsure to keep or not
SEQUENCE_MAP_ENTRY(NA_SE_VO_NAVY_CALL, "Navi - Look/Hey/Watchout (Target Enemy)","NA_SE_VO_NAVY_CALL", SEQ_VOICE), // Has no sound but is played when targetting signs and other things, unsure to keep or not
SEQUENCE_MAP_ENTRY(NA_SE_VO_NA_HELLO_3, "Navi - Hello", "NA_SE_VO_NA_HELLO_3", SEQ_VOICE),
// SEQ_BGM_WORLD
SEQUENCE_MAP_ENTRY(NA_BGM_FIELD_LOGIC, "Hyrule Field", "NA_BGM_FIELD_LOGIC", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_DUNGEON, "Dodongo's Cavern", "NA_BGM_DUNGEON", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_KAKARIKO_ADULT, "Kakariko Village (Adult)", "NA_BGM_KAKARIKO_ADULT", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_INSIDE_DEKU_TREE, "Inside the Deku Tree", "NA_BGM_INSIDE_DEKU_TREE", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_MARKET, "Market", "NA_BGM_MARKET", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_TITLE, "Title Theme", "NA_BGM_TITLE", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_LINK_HOUSE, "House", "NA_BGM_LINK_HOUSE", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_JABU_JABU, "Inside Jabu-Jabu's Belly", "NA_BGM_JABU_JABU", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_KAKARIKO_KID, "Kakariko Village (Child)", "NA_BGM_KAKARIKO_KID", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_FIRE_TEMPLE, "Fire Temple", "NA_BGM_FIRE_TEMPLE", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_FOREST_TEMPLE, "Forest Temple", "NA_BGM_FOREST_TEMPLE", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_COURTYARD, "Hyrule Castle Courtyard", "NA_BGM_COURTYARD", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_GANON_TOWER, "Ganondorf's Theme", "NA_BGM_GANON_TOWER", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_LONLON, "Lon Lon Ranch", "NA_BGM_LONLON", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_GORON_CITY, "Goron City", "NA_BGM_GORON_CITY", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_SARIA_THEME, "Lost Woods", "NA_BGM_SARIA_THEME", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_SPIRIT_TEMPLE, "Spirit Temple", "NA_BGM_SPIRIT_TEMPLE", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_INGO, "Ingo's Theme", "NA_BGM_INGO", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_KOKIRI, "Kokiri Forest", "NA_BGM_KOKIRI", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_TEMPLE_OF_TIME, "Temple of Time", "NA_BGM_TEMPLE_OF_TIME", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_WINDMILL, "Windmill Hut", "NA_BGM_WINDMILL", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_FILE_SELECT, "File Select", "NA_BGM_FILE_SELECT", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_ICE_CAVERN, "Ice Cavern", "NA_BGM_ICE_CAVERN", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_ZORA_DOMAIN, "Zora's Domain", "NA_BGM_ZORA_DOMAIN", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_SHOP, "Shop", "NA_BGM_SHOP", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_SHADOW_TEMPLE, "Shadow Temple", "NA_BGM_SHADOW_TEMPLE", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_WATER_TEMPLE, "Water Temple", "NA_BGM_WATER_TEMPLE", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_UNDERGROUND, "Ganon's Castle Under Ground", "NA_BGM_UNDERGROUND", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_GERUDO_VALLEY, "Gerudo Valley", "NA_BGM_GERUDO_VALLEY", SEQ_BGM_WORLD, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_POTION_SHOP, "Potion Shop", "NA_BGM_POTION_SHOP", SEQ_BGM_WORLD, true, true),
// SEQ_BGM_BATTLE
SEQUENCE_MAP_ENTRY(NA_BGM_ENEMY, "Battle", "NA_BGM_ENEMY", SEQ_BGM_BATTLE, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_BOSS, "Boss Battle", "NA_BGM_BOSS", SEQ_BGM_BATTLE, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_MINI_BOSS, "Mini-Boss Battle", "NA_BGM_MINI_BOSS", SEQ_BGM_BATTLE, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_GANONDORF_BOSS, "Ganondorf Battle", "NA_BGM_GANONDORF_BOSS", SEQ_BGM_BATTLE, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_GANON_BOSS, "Ganon Battle", "NA_BGM_GANON_BOSS", SEQ_BGM_BATTLE, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_FIRE_BOSS, "King Dodongo & Volvagia Boss Battle", "NA_BGM_FIRE_BOSS", SEQ_BGM_BATTLE, true, true),
// SEQ_BGM_FANFARE
SEQUENCE_MAP_ENTRY(NA_BGM_GAME_OVER, "Game Over", "NA_BGM_GAME_OVER", SEQ_FANFARE, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_BOSS_CLEAR, "Boss Clear", "NA_BGM_BOSS_CLEAR", SEQ_FANFARE, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_ITEM_GET, "Obtain Item", "NA_BGM_ITEM_GET", SEQ_FANFARE, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_OPENING_GANON, "Enter Ganondorf", "NA_BGM_OPENING_GANON", SEQ_FANFARE, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_HEART_GET, "Obtain Heart Container", "NA_BGM_HEART_GET", SEQ_FANFARE, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_OPEN_TRE_BOX, "Open Treasure Chest", "NA_BGM_OPEN_TRE_BOX", SEQ_FANFARE, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_SPIRITUAL_STONE, "Spiritual Stone Get", "NA_BGM_SPIRITUAL_STONE", SEQ_FANFARE, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_SMALL_ITEM_GET, "Obtain Small Item", "NA_BGM_SMALL_ITEM_GET", SEQ_FANFARE, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_EVENT_CLEAR, "Escape from Lon Lon Ranch", "NA_BGM_EVENT_CLEAR", SEQ_FANFARE, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_FAIRY_GET, "Obtain Fairy Ocarina", "NA_BGM_OCA_FAIRY_GET", SEQ_FANFARE, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_HORSE_GOAL, "Horse Race Goal", "NA_BGM_HORSE_GOAL", SEQ_FANFARE, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_MEDALLION_GET, "Obtain Medallion", "NA_BGM_MEDALLION_GET", SEQ_FANFARE, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_APPEAR, "Enter Zelda", "NA_BGM_APPEAR", SEQ_FANFARE, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_MASTER_SWORD, "Master Sword", "NA_BGM_MASTER_SWORD", SEQ_FANFARE, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_OCARINA_OF_TIME, "Ocarina of Time", "NA_BGM_OCARINA_OF_TIME", SEQ_FANFARE, true, true),
// SEQ_OCARINA
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_LIGHT, "Prelude of Light", "NA_BGM_OCA_LIGHT", SEQ_OCARINA, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_BOLERO, "Bolero of Fire", "NA_BGM_OCA_BOLERO", SEQ_OCARINA, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_MINUET, "Minuet of Forest", "NA_BGM_OCA_MINUET", SEQ_OCARINA, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_SERENADE, "Serenade of Water", "NA_BGM_OCA_SERENADE", SEQ_OCARINA, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_REQUIEM, "Requiem of Spirit", "NA_BGM_OCA_REQUIEM", SEQ_OCARINA, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_NOCTURNE, "Nocturne of Shadow", "NA_BGM_OCA_NOCTURNE", SEQ_OCARINA, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_SARIA, "Ocarina Saria's Song", "NA_BGM_OCA_SARIA", SEQ_OCARINA, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_EPONA, "Ocarina Epona's Song", "NA_BGM_OCA_EPONA", SEQ_OCARINA, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_ZELDA, "Ocarina Zelda's Lullaby", "NA_BGM_OCA_ZELDA", SEQ_OCARINA, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_SUNS, "Ocarina Sun's Song", "NA_BGM_OCA_SUNS", SEQ_OCARINA, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_TIME, "Ocarina Song of Time", "NA_BGM_OCA_TIME", SEQ_OCARINA, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_OCA_STORM, "Ocarina Song of Storms", "NA_BGM_OCA_STORM", SEQ_OCARINA, true, true),
// SEQ_BGM_EVENT
SEQUENCE_MAP_ENTRY(NA_BGM_GREAT_FAIRY, "Great Fairy's Fountain", "NA_BGM_GREAT_FAIRY", SEQ_BGM_EVENT, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_ZELDA_THEME, "Zelda's Theme", "NA_BGM_ZELDA_THEME", SEQ_BGM_EVENT, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_HORSE, "Horse Race", "NA_BGM_HORSE", SEQ_BGM_EVENT, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_NAVI_OPENING, "Fairy Flying", "NA_BGM_NAVI_OPENING", SEQ_BGM_EVENT, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_DEKU_TREE_CS, "Deku Tree", "NA_BGM_DEKU_TREE_CS", SEQ_BGM_EVENT, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_HYRULE_CS, "Legend of Hyrule", "NA_BGM_HYRULE_CS", SEQ_BGM_EVENT, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_MINI_GAME, "Shooting Gallery", "NA_BGM_MINI_GAME", SEQ_BGM_EVENT, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_SHEIK, "Sheik's Theme", "NA_BGM_SHEIK", SEQ_BGM_EVENT, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_ADULT_LINK, "Goodbye to Zelda", "NA_BGM_ADULT_LINK", SEQ_BGM_EVENT, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_INTRO_GANON, "Ganon Intro", "NA_BGM_INTRO_GANON", SEQ_BGM_EVENT, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_CHAMBER_OF_SAGES, "Chamber of the Sages", "NA_BGM_CHAMBER_OF_SAGES", SEQ_BGM_EVENT, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_DOOR_OF_TIME, "Open Door of Temple of Time", "NA_BGM_DOOR_OF_TIME", SEQ_BGM_EVENT, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_OWL, "Kaepora Gaebora's Theme", "NA_BGM_OWL", SEQ_BGM_EVENT, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_BRIDGE_TO_GANONS, "Ganon's Castle Bridge", "NA_BGM_BRIDGE_TO_GANONS", SEQ_BGM_EVENT, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_KOTAKE_KOUME, "Kotake & Koume's Theme", "NA_BGM_KOTAKE_KOUME", SEQ_BGM_EVENT, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_ESCAPE, "Escape from Ganon's Castle", "NA_BGM_ESCAPE", SEQ_BGM_EVENT, true, true),
SEQUENCE_MAP_ENTRY(NA_BGM_TIMED_MINI_GAME, "Mini-Game", "NA_BGM_TIMED_MINI_GAME", SEQ_BGM_EVENT, true, true),
// Previously SEQ_NOSHUFFLE
SEQUENCE_MAP_ENTRY(NA_BGM_FIELD_MORNING, "Hyrule Field Morning Theme", "NA_BGM_FIELD_MORNING", SEQ_BGM_EVENT, false, false), // Previously SEQ_UNUSED, so not shown anywhere?
SEQUENCE_MAP_ENTRY(NA_BGM_END_DEMO, "Seal of Six Sages", "NA_BGM_END_DEMO", SEQ_BGM_EVENT, false, false), // Previously SEQ_UNUSED, so not shown anywhere?
SEQUENCE_MAP_ENTRY(NA_BGM_STAFF_1, "End Credits I", "NA_BGM_STAFF_1", SEQ_BGM_EVENT, false, false), // Previously SEQ_UNUSED, so not shown anywhere?
SEQUENCE_MAP_ENTRY(NA_BGM_STAFF_2, "End Credits II", "NA_BGM_STAFF_2", SEQ_BGM_EVENT, false, false), // Previously SEQ_UNUSED, so not shown anywhere?
SEQUENCE_MAP_ENTRY(NA_BGM_STAFF_3, "End Credits III", "NA_BGM_STAFF_3", SEQ_BGM_EVENT, false, false), // Previously SEQ_UNUSED, so not shown anywhere?
SEQUENCE_MAP_ENTRY(NA_BGM_STAFF_4, "End Credits IV", "NA_BGM_STAFF_4", SEQ_BGM_EVENT, false, false), // Previously SEQ_UNUSED, so not shown anywhere?
// SEQ_INSTRUMENT
SEQUENCE_MAP_ENTRY(INSTRUMENT_OFFSET + 1, "Ocarina", "OCARINA_INSTRUMENT_DEFAULT", SEQ_INSTRUMENT, true, false),
SEQUENCE_MAP_ENTRY(INSTRUMENT_OFFSET + 2, "Malon", "OCARINA_INSTRUMENT_MALON", SEQ_INSTRUMENT, true, false),
SEQUENCE_MAP_ENTRY(INSTRUMENT_OFFSET + 3, "Whistle", "OCARINA_INSTRUMENT_WHISTLE", SEQ_INSTRUMENT, true, false),
SEQUENCE_MAP_ENTRY(INSTRUMENT_OFFSET + 4, "Harp", "OCARINA_INSTRUMENT_HARP", SEQ_INSTRUMENT, true, false),
SEQUENCE_MAP_ENTRY(INSTRUMENT_OFFSET + 5, "Organ", "OCARINA_INSTRUMENT_GRIND_ORGAN", SEQ_INSTRUMENT, true, false),
SEQUENCE_MAP_ENTRY(INSTRUMENT_OFFSET + 6, "Flute", "OCARINA_INSTRUMENT_FLUTE", SEQ_INSTRUMENT, true, false),
// SEQ_SFX
SEQUENCE_MAP_ENTRY(NA_SE_EV_SMALL_DOG_BARK, "Bark", "NA_SE_EV_SMALL_DOG_BARK", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_AWA_BOUND, "Bomb Bounce", "NA_SE_EN_AWA_BOUND", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_SHADEST_TAIKO_LOW, "Bongo Bongo Low", "NA_SE_EN_SHADEST_TAIKO_LOW", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_NUTS_FAINT, "Business Scrub", "NA_SE_EN_NUTS_FAINT", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_SY_CARROT_RECOVER, "Carrot Refill", "NA_SE_SY_CARROT_RECOVER", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EV_CHICKEN_CRY_N, "Cluck", "NA_SE_EV_CHICKEN_CRY_N", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EV_BRIDGE_OPEN_STOP, "Drawbridge Set", "NA_SE_EV_BRIDGE_OPEN_STOP", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_KAICHO_CRY, "Guay", "NA_SE_EN_KAICHO_CRY", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_SY_HITPOINT_ALARM, "Low HP Beep", "NA_SE_SY_HITPOINT_ALARM", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_SY_HP_RECOVER, "HP Recover", "NA_SE_SY_HP_RECOVER", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EV_HORSE_RUN, "Horse Trot", "NA_SE_EV_HORSE_RUN", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_PL_WALK_HEAVYBOOTS, "Iron Boots", "NA_SE_PL_WALK_HEAVYBOOTS", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_PL_HOBBERBOOTS_LV - SFX_FLAG, "Hover Boots", "NA_SE_PL_HOBBERBOOTS_LV", SEQ_SFX, true, false),
SEQUENCE_MAP_ENTRY(NA_SE_EV_COW_CRY, "Moo", "NA_SE_EV_COW_CRY", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EV_POT_BROKEN, "Pot Shattering", "NA_SE_EV_POT_BROKEN", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EV_FROG_CRY_0, "Ribbit", "NA_SE_EV_FROG_CRY_0", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EV_FIVE_COUNT_LUPY, "Rupee (Silver)", "NA_SE_EV_FIVE_COUNT_LUPY", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EV_FOOT_SWITCH, "Switch", "NA_SE_EV_FOOT_SWITCH", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_IT_WALL_HIT_SOFT, "Sword Bonk", "NA_SE_IT_WALL_HIT_SOFT", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_SY_METRONOME, "Tambourine", "NA_SE_SY_METRONOME", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_AMOS_VOICE, "Armos", "NA_SE_EN_AMOS_VOICE", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_REDEAD_AIM, "Redead Scream", "NA_SE_EN_REDEAD_AIM", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_STALKID_ATTACK, "Stalchild Attack", "NA_SE_EN_STALKID_ATTACK", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EV_CHICKEN_CRY_M, "Cockadoodiedoo", "NA_SE_EV_CHICKEN_CRY_M", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_SY_KINSTA_MARK_APPEAR, "Gold Skulltula Token", "NA_SE_SY_KINSTA_MARK_APPEAR", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_REDEAD_CRY, "Redead Moan", "NA_SE_EN_REDEAD_CRY", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EV_LIGHTNING, "Thunder", "NA_SE_EV_LIGHTNING", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_OC_ABYSS, "Cartoon Fall", "NA_SE_OC_ABYSS", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_FLAME_LAUGH, "Flare Dancer Laugh", "NA_SE_EN_FLAME_LAUGH", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_AWA_BREAK, "Shabom Pop", "NA_SE_EN_AWA_BREAK", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_SHADEST_TAIKO_HIGH, "Bongo Bongo High", "NA_SE_EN_SHADEST_TAIKO_HIGH", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EV_BOTTLE_CAP_OPEN, "Bottle Cork", "NA_SE_EV_BOTTLE_CAP_OPEN", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_IT_BOW_FLICK, "Bow Twang", "NA_SE_IT_BOW_FLICK", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_BUBLE_LAUGH, "Bubble Laugh", "NA_SE_EN_BUBLE_LAUGH", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_DEKU_JR_MOUTH, "Deku Baba", "NA_SE_EN_DEKU_JR_MOUTH", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EV_DOG_CRY_EVENING, "Dusk Howl", "NA_SE_EV_DOG_CRY_EVENING", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_FLAME_DAMAGE, "Flare Dancer Startled", "NA_SE_EN_FLAME_DAMAGE", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_GANON_AT_RETURN, "Ganondorf Teh!", "NA_SE_EN_GANON_AT_RETURN", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_GOMA_JR_CRY, "Gohma Larva Croak", "NA_SE_EN_GOMA_JR_CRY", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_GOLON_WAKE_UP, "Goron Wake", "NA_SE_EN_GOLON_WAKE_UP", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_SY_START_SHOT, "Gunshot", "NA_SE_SY_START_SHOT", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_IT_HAMMER_HIT, "Hammer Bonk", "NA_SE_IT_HAMMER_HIT", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_IRONNACK_SWING_AXE, "Iron Knuckle", "NA_SE_EN_IRONNACK_SWING_AXE", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_FANTOM_ST_LAUGH, "Phantom Ganon Laugh", "NA_SE_EN_FANTOM_ST_LAUGH", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EV_PLANT_BROKEN, "Plant Explode", "NA_SE_EV_PLANT_BROKEN", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_SY_GET_RUPY, "Rupee", "NA_SE_SY_GET_RUPY", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_NUTS_UP, "Scrub Emerge", "NA_SE_EN_NUTS_UP", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_AWA_BOUND, "Shabom Bounce", "NA_SE_EN_AWA_BOUND", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_SHELL_MOUTH, "Shellblade", "NA_SE_EN_SHELL_MOUTH", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_STALTU_DAMAGE, "Skulltula Damage", "NA_SE_EN_STALTU_DAMAGE", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EN_NUTS_THROW, "Spit Nut", "NA_SE_EN_NUTS_THROW", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_SY_LOCK_ON, "Target Enemy", "NA_SE_SY_LOCK_ON", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_SY_LOCK_ON_HUMAN, "Target Neutral", "NA_SE_SY_LOCK_ON_HUMAN", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_SY_FSEL_CURSOR, "File Select Cursor", "NA_SE_SY_FSEL_CURSOR", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_SY_FSEL_DECIDE_L, "File Select Choose", "NA_SE_SY_FSEL_DECIDE_L", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_SY_FSEL_CLOSE, "File Select Back", "NA_SE_SY_FSEL_CLOSE", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_IT_BOMB_EXPLOSION, "Bomb Explosion", "NA_SE_IT_BOMB_EXPLOSION", SEQ_SFX, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_EV_CHICKEN_CRY_A, "Chicken Cry", "NA_SE_EV_CHICKEN_CRY_A", SEQ_SFX, true, true),
// SEQ_VOICE
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_SWORD_N, "Adult Link - Slash", "NA_SE_VO_LI_SWORD_N", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_SWORD_L, "Adult Link - Big Slash", "NA_SE_VO_LI_SWORD_L", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_LASH, "Adult Link - Hookshot Latch Yell", "NA_SE_VO_LI_LASH", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_HANG, "Adult Link - Dangling Gasp", "NA_SE_VO_LI_HANG", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_CLIMB_END, "Adult Link - Climb Edge", "NA_SE_VO_LI_CLIMB_END", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_DAMAGE_S, "Adult Link - Small Damage", "NA_SE_VO_LI_DAMAGE_S", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_FREEZE, "Adult Link - Freeze", "NA_SE_VO_LI_FREEZE", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_FALL_S, "Adult Link - Fall Gasp", "NA_SE_VO_LI_FALL_S", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_FALL_L, "Adult Link - Fall Scream", "NA_SE_VO_LI_FALL_L", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_BREATH_REST, "Adult Link - Low Health Sigh", "NA_SE_VO_LI_BREATH_REST", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_BREATH_DRINK, "Adult Link - Bottle Sigh", "NA_SE_VO_LI_BREATH_DRINK", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_DOWN, "Adult Link - Death", "NA_SE_VO_LI_DOWN", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_TAKEN_AWAY, "Adult Link - Taken away by Wallmaster", "NA_SE_VO_LI_TAKEN_AWAY", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_HELD, "Adult Link - Grabbed by Wallmaster", "NA_SE_VO_LI_HELD", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_SNEEZE, "Adult Link - Sneeze", "NA_SE_VO_LI_SNEEZE", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_SWEAT, "Adult Link - Gasp (Hot Room)", "NA_SE_VO_LI_SWEAT", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_RELAX, "Adult Link - Yawn", "NA_SE_VO_LI_RELAX", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_SWORD_PUTAWAY, "Adult Link - Yell (Sword Putaway)", "NA_SE_VO_LI_SWORD_PUTAWAY", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_AUTO_JUMP, "Adult Link - Jump/Swing Bottle", "NA_SE_VO_LI_AUTOd_JUMP", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_MAGIC_NALE, "Adult Link - Use Nayru's Love", "NA_SE_VO_LI_MAGIC_NALE", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_SURPRISE, "Adult Link - Suprised Gasp", "NA_SE_VO_LI_SURPRISE", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_MAGIC_FROL, "Adult Link - Use Farore's Wind", "NA_SE_VO_LI_MAGIC_FROL", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_PUSH, "Adult Link - Push", "NA_SE_VO_LI_PUSH", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_HOOKSHOT_HANG, "Adult Link - Hookshot hang", "NA_SE_VO_LI_HOOKSHOT_HANG", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_LAND_DAMAGE_S, "Adult Link - Fall damage", "NA_SE_VO_LI_LAND_DAMAGE_S", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_NULL_0x1b, "Adult Link - Small grunt (unused?)", "NA_SE_VO_LI_NULL_0x1b", SEQ_VOICE, true, true), // Unused? But unique so keeping it
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_MAGIC_ATTACK, "Adult Link - Din's Fire", "NA_SE_VO_LI_MAGIC_ATTACK", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_BL_DOWN, "Adult Link - Scream (Nocturne?)", "NA_SE_VO_BL_DOWN", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_DEMO_DAMAGE, "Adult Link - Pained Land (Nocturne?)", "NA_SE_VO_LI_DEMO_DAMAGE", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_SWORD_N_KID, "Child Link - Slash", "NA_SE_VO_LI_SWORD_N_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_ROLLING_CUT_KID, "Child Link - Big Slash", "NA_SE_VO_LI_ROLLING_CUT_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_LASH_KID, "Child Link - Hootshot Latch", "NA_SE_VO_LI_LASH_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_HANG_KID, "Child Link - Dangling Gasp", "NA_SE_VO_LI_HANG_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_CLIMB_END_KID, "Child Link - Climb Edge", "NA_SE_VO_LI_CLIMB_END_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_DAMAGE_S_KID, "Child Link - Small Damage", "NA_SE_VO_LI_DAMAGE_S_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_FREEZE_KID, "Child Link - Freeze", "NA_SE_VO_LI_FREEZE_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_FALL_S_KID, "Child Link - Fall Gasp", "NA_SE_VO_LI_FALL_S_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_FALL_L_KID, "Child Link - Fall Scream", "NA_SE_VO_LI_FALL_L_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_BREATH_REST_KID, "Child Link - Low Health Sigh", "NA_SE_VO_LI_BREATH_REST_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_BREATH_DRINK_KID, "Child Link - Bottle Sigh", "NA_SE_VO_LI_BREATH_DRINK_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_DOWN_KID, "Child Link - Death", "NA_SE_VO_LI_DOWN_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_TAKEN_AWAY_KID, "Child Link - Taken away by Wallmaster", "NA_SE_VO_LI_TAKEN_AWAY_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_HELD_KID, "Child Link - Grabbed by Wallmaster", "NA_SE_VO_LI_HELD_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_SNEEZE_KID, "Child Link - Sneeze", "NA_SE_VO_LI_SNEEZE_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_SWEAT_KID, "Child Link - Gasp (Hot Room)", "NA_SE_VO_LI_SWEAT_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_RELAX_KID, "Child Link - Yawn", "NA_SE_VO_LI_RELAX_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_SWORD_PUTAWAY_KID, "Child Link - Yell (Sword Putaway)", "NA_SE_VO_LI_SWORD_PUTAWAY_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_AUTO_JUMP_KID, "Child Link - Jump/Swing Bottle", "NA_SE_VO_LI_AUTO_JUMP_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_MAGIC_NALE_KID, "Child Link - Use Nayru's Love", "NA_SE_VO_LI_MAGIC_NALE_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_SURPRISE_KID, "Child Link - Surprised Gasp", "NA_SE_VO_LI_SURPRISE_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_MAGIC_FROL_KID, "Child Link - Use Farore's Wind", "NA_SE_VO_LI_MAGIC_FROL_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_PUSH_KID, "Child Link - Push", "NA_SE_VO_LI_PUSH_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_HOOKSHOT_HANG_KID, "Child Link - Hookshot Hang", "NA_SE_VO_LI_HOOKSHOT_HANG_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_LAND_DAMAGE_S_KID, "Child Link - Fall Damage", "NA_SE_VO_LI_LAND_DAMAGE_S_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_NULL_0x1b_KID, "Child Link - Small Gasp (unused?)", "NA_SE_VO_LI_NULL_0x1b_KID", SEQ_VOICE, true, true), // Unused? But unique so keeping it
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_MAGIC_ATTACK_KID, "Child Link - Din's Fire", "NA_SE_VO_LI_MAGIC_ATTACK_KID", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_BL_DOWN_KID, "Child Link - Scream (Nocturne?)", "NA_SE_VO_BL_DOWN_KID", SEQ_VOICE, true, true), // ...
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_DEMO_DAMAGE_KID, "Child Link - Scream 2 (Nocturne?)", "NA_SE_VO_LI_DEMO_DAMAGE_KID", SEQ_VOICE, true, true), // Unused, matches with adult nocturne stuff
SEQUENCE_MAP_ENTRY(NA_SE_VO_NAVY_ENEMY, "Navi - Unused Enemy Target", "NA_SE_VO_NAVY_ENEMY", SEQ_VOICE, true, true), // Has no sound but is played when targetting enemies, unsure to keep or not
SEQUENCE_MAP_ENTRY(NA_SE_VO_NAVY_HELLO, "Navi - Unused NPC Hello", "NA_SE_VO_NAVY_HELLO", SEQ_VOICE, true, true), // Has no sound but is played when targetting npcs, unsure to keep or not
SEQUENCE_MAP_ENTRY(NA_SE_VO_NAVY_HEAR, "Navi - Unused Other Target", "NA_SE_VO_NAVY_HEAR", SEQ_VOICE, true, true), // Has no sound but is played when targetting npcs, unsure to keep or not
SEQUENCE_MAP_ENTRY(NA_SE_VO_NAVY_CALL, "Navi - Look/Hey/Watchout (Target Enemy)", "NA_SE_VO_NAVY_CALL", SEQ_VOICE, true, true), // Has no sound but is played when targetting signs and other things, unsure to keep or not
SEQUENCE_MAP_ENTRY(NA_SE_VO_NA_HELLO_3, "Navi - Hello", "NA_SE_VO_NA_HELLO_3", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_TA_SLEEP, "Talon - Snore", "NA_SE_VO_TA_SLEEP", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_TA_SURPRISE, "Talon - Surprised", "NA_SE_VO_TA_SURPRISE", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_TA_CRY_0, "Talon - Hmm", "NA_SE_VO_TA_CRY_0", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_TA_CRY_1, "Talon - Scream", "NA_SE_VO_TA_CRY_1", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_IN_CRY_0, "Ingo - WAAAH!", "NA_SE_VO_IN_CRY_0", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_IN_LOST, "Ingo - KAAAAH! (Lost)", "NA_SE_VO_IN_LOST", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_IN_LASH_0, "Ingo - Heyeah (Horse 1)", "NA_SE_VO_IN_LASH_0", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_IN_LASH_1, "Ingo - Ha (Horse 2)", "NA_SE_VO_IN_LASH_1", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_FR_LAUGH_0, "Great Fairy - Big Laugh", "NA_SE_VO_FR_LAUGH_0", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_FR_SMILE_0, "Great Fairy - Small Laugh", "NA_SE_VO_FR_SMILE_0", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_NB_AGONY, "Nabooru - Pained Gasp", "NA_SE_VO_NB_AGONY", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_NB_CRY_0, "Nabooru - Scream", "NA_SE_VO_NB_CRY_0", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_NB_NOTICE, "Nabooru - Hmm?", "NA_SE_VO_NB_NOTICE", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_NA_HELLO_0, "Navi - Watchout!", "NA_SE_VO_NA_HELLO_0", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_NA_HELLO_1, "Navi - Look!", "NA_SE_VO_NA_HELLO_1", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_NA_HELLO_2, "Navi - Hey! (C-up Sound)", "NA_SE_VO_NA_HELLO_2", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_RT_CRASH, "Ruto - Crash", "NA_SE_VO_RT_CRASH", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_RT_DISCOVER, "Ruto - Found", "NA_SE_VO_RT_DISCOVER", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_RT_FALL, "Ruto - Fall", "NA_SE_VO_RT_FALL", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_RT_LAUGH_0, "Ruto - Giggle", "NA_SE_VO_RT_LAUGH_0", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_RT_LIFT, "Ruto - Lifted/Navi - Intro Bonk", "NA_SE_VO_RT_LIFT", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_RT_THROW, "Ruto - Thrown", "NA_SE_VO_RT_THROW", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_RT_UNBALLANCE, "Ruto - Held Tantrum", "NA_SE_VO_RT_UNBALLANCE", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_ST_DAMAGE, "Cursed Man - Scream", "NA_SE_VO_ST_DAMAGE", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_ST_ATTACK, "Cursed Man - Gasp", "NA_SE_VO_ST_ATTACK", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z0_HURRY, "Child Zelda - Hurry", "NA_SE_VO_Z0_HURRY", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z0_MEET, "Child Zelda - Meeting Link Gasp", "NA_SE_VO_Z0_MEET", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z0_QUESTION, "Child Zelda - Question", "NA_SE_VO_Z0_QUESTION", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z0_SIGH_0, "Child Zelda - Sigh", "NA_SE_VO_Z0_SIGH_0", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z0_SMILE_0, "Child Zelda - Laugh", "NA_SE_VO_Z0_SMILE_0", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z0_SURPRISE, "Child Zelda - Sees Ganon Gasp", "NA_SE_VO_Z0_SURPRISE", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z0_THROW, "Child Zelda - Throws Ocarina", "NA_SE_VO_Z0_THROW", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_SK_CRY_0, "Sheik - Pained Gasp (Nocturne)", "NA_SE_VO_SK_CRY_0", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_SK_CRY_1, "Sheik - Pained Scream (Nocturne)", "NA_SE_VO_SK_CRY_1", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_SK_CRASH, "Sheik - Pained Landing (Nocturne)", "NA_SE_VO_SK_CRASH", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_SK_LAUGH, "Navi - Listen!", "NA_SE_VO_SK_LAUGH", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_SK_SHOUT, "Sheik - Shout (Throwing Deku Nut)", "NA_SE_VO_SK_SHOUT", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z1_CRY_0, "Adult Zelda - Scream 1", "NA_SE_VO_Z1_CRY_0", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z1_CRY_1, "Adult Zelda - Scream 2", "NA_SE_VO_Z1_CRY_1", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z1_OPENDOOR, "Adult Zelda - Open Seseme Magic Gasp", "NA_SE_VO_Z1_OPENDOOR", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z1_SURPRISE, "Adult Zelda - Gasp", "NA_SE_VO_Z1_SURPRISE", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z1_PAIN, "Adult Zelda - Pained Gasp", "NA_SE_VO_Z1_PAIN", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_KZ_MOVE, "King Zora - Mweep!", "NA_SE_VO_KZ_MOVE", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_NB_LAUGH, "Navi - Hello!", "NA_SE_VO_NB_LAUGH", SEQ_VOICE, true, true),
SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_DRINK - SFX_FLAG, "Adult Link - Drinking", "NA_SE_VO_LI_DRINK", SEQ_VOICE, true, false),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_DRINK, "Adult Link - Drinking", "NA_SE_VO_LI_DRINK", SEQ_VOICE, true, false), // Doesn't work due to SFX_FLAG
//SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_DRINK_KID, "Child Link - Drinking", "NA_SE_VO_LI_DRINK_KID", SEQ_VOICE, true, false), // Doesn't work due to SFX_FLAG
//SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_GROAN, "Adult Link - Groan (Unused)", "NA_SE_VO_LI_GROAN", SEQ_VOICE, true, false),
//SEQUENCE_MAP_ENTRY("Adult Link - Unused Sound 1?","NA_SE_VO_LI_ELECTRIC_SHOCK_LV", "NA_SE_VO_LI_ELECTRIC_SHOCK_LV", SEQ_VOICE, true, false),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_GROAN_KID, "Child Link - Groan (Unused)", "NA_SE_VO_LI_GROAN_KID", SEQ_VOICE, true, false),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_ELECTRIC_SHOCK_LV_KID, "Child Link - Unused Sound 1?", "NA_SE_VO_LI_ELECTRIC_SHOCK_LV_KID", SEQ_VOICE, true, false),
// Following group of Dummies are all duplicate entries for Navi saying Look/Hey/Watchout
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x45, "NA_SE_VO_DUMMY_0x45", "NA_SE_VO_DUMMY_0x45", SEQ_VOICE),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x46, "NA_SE_VO_DUMMY_0x46", "NA_SE_VO_DUMMY_0x46", SEQ_VOICE),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x47, "NA_SE_VO_DUMMY_0x47", "NA_SE_VO_DUMMY_0x47", SEQ_VOICE),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x48, "NA_SE_VO_DUMMY_0x48", "NA_SE_VO_DUMMY_0x48", SEQ_VOICE),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x49, "NA_SE_VO_DUMMY_0x49", "NA_SE_VO_DUMMY_0x49", SEQ_VOICE),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x4a "NA_SE_VO_DUMMY_0x4a", "NA_SE_VO_DUMMY_0x4a", SEQ_VOICE),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x4b, "NA_SE_VO_DUMMY_0x4b", "NA_SE_VO_DUMMY_0x4b", SEQ_VOICE),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x4c, "NA_SE_VO_DUMMY_0x4c", "NA_SE_VO_DUMMY_0x4c", SEQ_VOICE),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x4d, "NA_SE_VO_DUMMY_0x4d", "NA_SE_VO_DUMMY_0x4d", SEQ_VOICE),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x4e, "NA_SE_VO_DUMMY_0x4e", "NA_SE_VO_DUMMY_0x4e", SEQ_VOICE),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x4f, "NA_SE_VO_DUMMY_0x4f", "NA_SE_VO_DUMMY_0x4f", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_TA_SLEEP, "Talon - Snore", "NA_SE_VO_TA_SLEEP", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_TA_SURPRISE, "Talon - Surprised", "NA_SE_VO_TA_SURPRISE", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_TA_CRY_0, "Talon - Hmm", "NA_SE_VO_TA_CRY_0", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_TA_CRY_1, "Talon - Scream", "NA_SE_VO_TA_CRY_1", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_IN_CRY_0, "Ingo - WAAAH!", "NA_SE_VO_IN_CRY_0", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_IN_LOST, "Ingo - KAAAAH! (Lost)", "NA_SE_VO_IN_LOST", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_IN_LASH_0, "Ingo - Heyeah (Horse 1)", "NA_SE_VO_IN_LASH_0", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_IN_LASH_1, "Ingo - Ha (Horse 2)", "NA_SE_VO_IN_LASH_1", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_FR_LAUGH_0, "Great Fairy - Big Laugh", "NA_SE_VO_FR_LAUGH_0", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_FR_SMILE_0, "Great Fairy - Small Laugh", "NA_SE_VO_FR_SMILE_0", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_NB_AGONY, "Nabooru - Pained Gasp", "NA_SE_VO_NB_AGONY", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_NB_CRY_0, "Nabooru - Scream", "NA_SE_VO_NB_CRY_0", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_NB_NOTICE, "Nabooru - Hmm?", "NA_SE_VO_NB_NOTICE", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_NA_HELLO_0, "Navi - Watchout!", "NA_SE_VO_NA_HELLO_0", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_NA_HELLO_1, "Navi - Look!", "NA_SE_VO_NA_HELLO_1", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_NA_HELLO_2, "Navi - Hey! (C-up Sound)", "NA_SE_VO_NA_HELLO_2", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_RT_CRASH, "Ruto - Crash", "NA_SE_VO_RT_CRASH", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_RT_DISCOVER, "Ruto - Found", "NA_SE_VO_RT_DISCOVER", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_RT_FALL, "Ruto - Fall", "NA_SE_VO_RT_FALL", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_RT_LAUGH_0, "Ruto - Giggle", "NA_SE_VO_RT_LAUGH_0", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_RT_LIFT, "Ruto - Lifted/Navi - Intro Bonk", "NA_SE_VO_RT_LIFT", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_RT_THROW, "Ruto - Thrown", "NA_SE_VO_RT_THROW", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_RT_UNBALLANCE, "Ruto - Held Tantrum", "NA_SE_VO_RT_UNBALLANCE", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_ST_DAMAGE, "Cursed Man - Scream", "NA_SE_VO_ST_DAMAGE", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_ST_ATTACK, "Cursed Man - Gasp", "NA_SE_VO_ST_ATTACK", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z0_HURRY, "Child Zelda - Hurry", "NA_SE_VO_Z0_HURRY", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z0_MEET, "Child Zelda - Meeting Link Gasp", "NA_SE_VO_Z0_MEET", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z0_QUESTION, "Child Zelda - Question", "NA_SE_VO_Z0_QUESTION", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z0_SIGH_0, "Child Zelda - Sigh", "NA_SE_VO_Z0_SIGH_0", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z0_SMILE_0, "Child Zelda - Laugh", "NA_SE_VO_Z0_SMILE_0", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z0_SURPRISE, "Child Zelda - Sees Ganon Gasp", "NA_SE_VO_Z0_SURPRISE", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z0_THROW, "Child Zelda - Throws Ocarina", "NA_SE_VO_Z0_THROW", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_SK_CRY_0, "Sheik - Pained Gasp (Nocturne)", "NA_SE_VO_SK_CRY_0", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_SK_CRY_1, "Sheik - Pained Scream (Nocturne)", "NA_SE_VO_SK_CRY_1", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_SK_CRASH, "Sheik - Pained Landing (Nocturne)", "NA_SE_VO_SK_CRASH", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_SK_LAUGH, "Navi - Listen!", "NA_SE_VO_SK_LAUGH", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_SK_SHOUT, "Sheik - Shout (Throwing Deku Nut)", "NA_SE_VO_SK_SHOUT", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z1_CRY_0, "Adult Zelda - Scream 1", "NA_SE_VO_Z1_CRY_0", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z1_CRY_1, "Adult Zelda - Scream 2", "NA_SE_VO_Z1_CRY_1", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z1_OPENDOOR, "Adult Zelda - Open Seseme Magic Gasp","NA_SE_VO_Z1_OPENDOOR", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z1_SURPRISE, "Adult Zelda - Gasp", "NA_SE_VO_Z1_SURPRISE", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_Z1_PAIN, "Adult Zelda - Pained Gasp", "NA_SE_VO_Z1_PAIN", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_KZ_MOVE, "King Zora - Mweep!", "NA_SE_VO_KZ_MOVE", SEQ_VOICE),
SEQUENCE_MAP_ENTRY(NA_SE_VO_NB_LAUGH, "Navi - Hello!", "NA_SE_VO_NB_LAUGH", SEQ_VOICE),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_IN_LAUGH, "NA_SE_VO_IN_LAUGH", "NA_SE_VO_IN_LAUGH", SEQ_VOICE), // Crashes
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x7d, "NA_SE_VO_DUMMY_0x7d", "NA_SE_VO_DUMMY_0x7d", SEQ_VOICE), // Unused weird Child Link sound
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x7e, "NA_SE_VO_DUMMY_0x7e", "NA_SE_VO_DUMMY_0x7e", SEQ_VOICE), // Unused weird Child Link sound
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x7f, "NA_SE_VO_DUMMY_0x7f", "NA_SE_VO_DUMMY_0x7f", SEQ_VOICE), // Unused weird Child Link sound
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x80, "NA_SE_VO_DUMMY_0x80", "NA_SE_VO_DUMMY_0x80", SEQ_VOICE), // Unused and empty
//SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_AUTO_JUMP_DARKLINK,"NA_SE_VO_LI_AUTO_JUMP_DARKLINK", "NA_SE_VO_LI_AUTO_JUMP_DARKLINK", SEQ_VOICE), // Implies Dark Link but isn't used in anything
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x82_YOBI, "NA_SE_VO_DUMMY_0x82_YOBI", "NA_SE_VO_DUMMY_0x82_YOBI", SEQ_VOICE), // Rest are unused and empty
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x83_YOBI, "NA_SE_VO_DUMMY_0x83_YOBI", "NA_SE_VO_DUMMY_0x83_YOBI", SEQ_VOICE), // ..
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x84_YOBI, "NA_SE_VO_DUMMY_0x84_YOBI", "NA_SE_VO_DUMMY_0x84_YOBI", SEQ_VOICE), // ..
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x85_YOBI, "NA_SE_VO_DUMMY_0x85_YOBI", "NA_SE_VO_DUMMY_0x85_YOBI", SEQ_VOICE), // ..
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x86_YOBI, "NA_SE_VO_DUMMY_0x86_YOBI", "NA_SE_VO_DUMMY_0x86_YOBI", SEQ_VOICE), // ..
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x87_YOBI, "NA_SE_VO_DUMMY_0x87_YOBI", "NA_SE_VO_DUMMY_0x87_YOBI", SEQ_VOICE), // ..
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x88_YOBI, "NA_SE_VO_DUMMY_0x88_YOBI", "NA_SE_VO_DUMMY_0x88_YOBI", SEQ_VOICE), // ..
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x89_YOBI, "NA_SE_VO_DUMMY_0x89_YOBI", "NA_SE_VO_DUMMY_0x89_YOBI", SEQ_VOICE), // ..
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x45, "NA_SE_VO_DUMMY_0x45", "NA_SE_VO_DUMMY_0x45", SEQ_VOICE, true, false),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x46, "NA_SE_VO_DUMMY_0x46", "NA_SE_VO_DUMMY_0x46", SEQ_VOICE, true, false),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x47, "NA_SE_VO_DUMMY_0x47", "NA_SE_VO_DUMMY_0x47", SEQ_VOICE, true, false),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x48, "NA_SE_VO_DUMMY_0x48", "NA_SE_VO_DUMMY_0x48", SEQ_VOICE, true, false),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x49, "NA_SE_VO_DUMMY_0x49", "NA_SE_VO_DUMMY_0x49", SEQ_VOICE, true, false),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x4a "NA_SE_VO_DUMMY_0x4a", "NA_SE_VO_DUMMY_0x4a", SEQ_VOICE, true, false),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x4b, "NA_SE_VO_DUMMY_0x4b", "NA_SE_VO_DUMMY_0x4b", SEQ_VOICE, true, false),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x4c, "NA_SE_VO_DUMMY_0x4c", "NA_SE_VO_DUMMY_0x4c", SEQ_VOICE, true, false),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x4d, "NA_SE_VO_DUMMY_0x4d", "NA_SE_VO_DUMMY_0x4d", SEQ_VOICE, true, false),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x4e, "NA_SE_VO_DUMMY_0x4e", "NA_SE_VO_DUMMY_0x4e", SEQ_VOICE, true, false),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x4f, "NA_SE_VO_DUMMY_0x4f", "NA_SE_VO_DUMMY_0x4f", SEQ_VOICE, true, false),
//SEQUENCE_MAP_ENTRY(NA_SE_VO_IN_LAUGH, "NA_SE_VO_IN_LAUGH", "NA_SE_VO_IN_LAUGH", SEQ_VOICE, true, false), // Crashes
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x7d, "NA_SE_VO_DUMMY_0x7d", "NA_SE_VO_DUMMY_0x7d", SEQ_VOICE, true, false), // Unused weird Child Link sound
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x7e, "NA_SE_VO_DUMMY_0x7e", "NA_SE_VO_DUMMY_0x7e", SEQ_VOICE, true, false), // Unused weird Child Link sound
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x7f, "NA_SE_VO_DUMMY_0x7f", "NA_SE_VO_DUMMY_0x7f", SEQ_VOICE, true, false), // Unused weird Child Link sound
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x80, "NA_SE_VO_DUMMY_0x80", "NA_SE_VO_DUMMY_0x80", SEQ_VOICE, true, false), // Unused and empty
//SEQUENCE_MAP_ENTRY(NA_SE_VO_LI_AUTO_JUMP_DARKLINK,"NA_SE_VO_LI_AUTO_JUMP_DARKLINK", "NA_SE_VO_LI_AUTO_JUMP_DARKLINK", SEQ_VOICE, true, false), // Implies Dark Link but isn't used in anything
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x82_YOBI, "NA_SE_VO_DUMMY_0x82_YOBI", "NA_SE_VO_DUMMY_0x82_YOBI", SEQ_VOICE, true, false), // Rest are unused and empty
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x83_YOBI, "NA_SE_VO_DUMMY_0x83_YOBI", "NA_SE_VO_DUMMY_0x83_YOBI", SEQ_VOICE, true, false), // ..
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x84_YOBI, "NA_SE_VO_DUMMY_0x84_YOBI", "NA_SE_VO_DUMMY_0x84_YOBI", SEQ_VOICE, true, false), // ..
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x85_YOBI, "NA_SE_VO_DUMMY_0x85_YOBI", "NA_SE_VO_DUMMY_0x85_YOBI", SEQ_VOICE, true, false), // ..
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x86_YOBI, "NA_SE_VO_DUMMY_0x86_YOBI", "NA_SE_VO_DUMMY_0x86_YOBI", SEQ_VOICE, true, false), // ..
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x87_YOBI, "NA_SE_VO_DUMMY_0x87_YOBI", "NA_SE_VO_DUMMY_0x87_YOBI", SEQ_VOICE, true, false), // ..
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x88_YOBI, "NA_SE_VO_DUMMY_0x88_YOBI", "NA_SE_VO_DUMMY_0x88_YOBI", SEQ_VOICE, true, false), // ..
//SEQUENCE_MAP_ENTRY(NA_SE_VO_DUMMY_0x89_YOBI, "NA_SE_VO_DUMMY_0x89_YOBI", "NA_SE_VO_DUMMY_0x89_YOBI", SEQ_VOICE, true, false), // ..
};
}
@ -331,7 +353,7 @@ void AudioCollection::AddToCollection(char* otrPath, uint16_t seqNum) {
SequenceInfo info = {seqNum,
sequenceName,
StringHelper::Replace(StringHelper::Replace(StringHelper::Replace(sequenceName, " ", "_"), "~", "-"),".", ""),
type};
type, false, false};
sequenceMap.emplace(seqNum, info);
}
@ -379,12 +401,10 @@ void AudioCollection::InitializeShufflePool() {
for (auto& [seqId, seqInfo] : sequenceMap) {
const std::string cvarKey = "gAudioEditor.Excluded." + seqInfo.sfxKey;
if (CVarGetInteger(cvarKey.c_str(), 0)) {
if (CVarGetInteger(cvarKey.c_str(), 0) && !seqInfo.canBeUsedAsReplacement) {
excludedSequences.insert(&seqInfo);
} else {
if (seqInfo.category != SEQ_NOSHUFFLE) {
includedSequences.insert(&seqInfo);
}
includedSequences.insert(&seqInfo);
}
}

View file

@ -25,6 +25,8 @@ struct SequenceInfo {
std::string label;
std::string sfxKey;
SeqType category;
bool canBeReplaced;
bool canBeUsedAsReplacement;
};
class AudioCollection {

View file

@ -27,7 +27,7 @@ s8 reverbAdd = 0;
#define SEQ_COUNT_BGM_EVENT 17
#define SEQ_COUNT_INSTRUMENT 6
#define SEQ_COUNT_SFX 57
#define SEQ_COUNT_VOICE 107
#define SEQ_COUNT_VOICE 108
size_t AuthenticCountBySequenceType(SeqType type) {
switch (type) {
@ -97,7 +97,7 @@ void RandomizeGroup(SeqType type) {
// don't randomize locked entries
if ((seqData.category & type) && CVarGetInteger(cvarLockKey.c_str(), 0) == 0) {
// Only save authentic sequence CVars
if (((seqData.category & SEQ_BGM_CUSTOM) || seqData.category == SEQ_FANFARE) && seqData.sequenceId >= MAX_AUTHENTIC_SEQID) {
if ((((seqData.category & SEQ_BGM_CUSTOM) || seqData.category == SEQ_FANFARE) && seqData.sequenceId >= MAX_AUTHENTIC_SEQID) || seqData.canBeReplaced == false) {
continue;
}
const int randomValue = values.back();
@ -194,10 +194,11 @@ void Draw_SfxTab(const std::string& tabId, SeqType type) {
continue;
}
// Do not display custom sequences in the list
if (((seqData.category & SEQ_BGM_CUSTOM) || seqData.category == SEQ_FANFARE) && defaultValue >= MAX_AUTHENTIC_SEQID) {
if ((((seqData.category & SEQ_BGM_CUSTOM) || seqData.category == SEQ_FANFARE) && defaultValue >= MAX_AUTHENTIC_SEQID) || seqData.canBeReplaced == false) {
continue;
}
const std::string initialSfxKey = seqData.sfxKey;
const std::string cvarKey = AudioCollection::Instance->GetCvarKey(seqData.sfxKey);
const std::string cvarLockKey = AudioCollection::Instance->GetCvarLockKey(seqData.sfxKey);
const std::string hiddenKey = "##" + cvarKey;
@ -215,7 +216,8 @@ void Draw_SfxTab(const std::string& tabId, SeqType type) {
const int initialValue = map.contains(currentValue) ? currentValue : defaultValue;
if (ImGui::BeginCombo(hiddenKey.c_str(), map.at(initialValue).label.c_str())) {
for (const auto& [value, seqData] : map) {
if (~(seqData.category) & type) {
// If excluded as a replacement sequence, don't show in other dropdowns except the effect's own dropdown.
if (~(seqData.category) & type || (!seqData.canBeUsedAsReplacement && initialSfxKey != seqData.sfxKey)) {
continue;
}

View file

@ -167,6 +167,7 @@ const std::vector<const char*> enhancementsCvars = {
"gBombchusOOB",
"gQuickPutaway",
"gGsCutscene",
"gRestoreRBAValues",
"gSkipSaveConfirmation",
"gAutosave",
"gDisableCritWiggle",

View file

@ -121,7 +121,8 @@ namespace Logic {
//Greg
bool Greg = false;
bool GregInLogic = false;
bool GregInBridgeLogic = false;
bool GregInLacsLogic = false;
//Progressive Items
uint8_t ProgressiveBulletBag = 0;
@ -607,22 +608,23 @@ namespace Logic {
DungeonCount = (DekuTreeClear ? 1:0) + (DodongosCavernClear ? 1:0) + (JabuJabusBellyClear ? 1:0) + (ForestTempleClear ? 1:0) + (FireTempleClear ? 1:0) + (WaterTempleClear ? 1:0) + (SpiritTempleClear ? 1:0) + (ShadowTempleClear ? 1:0);
HasAllStones = StoneCount == 3;
HasAllMedallions = MedallionCount == 6;
GregInLogic = BridgeRewardOptions.Is(BRIDGE_OPTION_GREG) || LACSRewardOptions.Is(LACS_OPTION_GREG);
GregInBridgeLogic = BridgeRewardOptions.Is(BRIDGE_OPTION_GREG);
GregInLacsLogic = LACSRewardOptions.Is(LACS_OPTION_GREG);
CanBuildRainbowBridge = Bridge.Is(RAINBOWBRIDGE_OPEN) ||
(Bridge.Is(RAINBOWBRIDGE_VANILLA) && ShadowMedallion && SpiritMedallion && LightArrows) ||
(Bridge.Is(RAINBOWBRIDGE_STONES) && StoneCount + (Greg && GregInLogic ? 1 : 0) >= BridgeStoneCount.Value<uint8_t>()) ||
(Bridge.Is(RAINBOWBRIDGE_MEDALLIONS) && MedallionCount + (Greg && GregInLogic ? 1 : 0) >= BridgeMedallionCount.Value<uint8_t>()) ||
(Bridge.Is(RAINBOWBRIDGE_REWARDS) && StoneCount + MedallionCount + (Greg && GregInLogic ? 1 : 0) >= BridgeRewardCount.Value<uint8_t>()) ||
(Bridge.Is(RAINBOWBRIDGE_DUNGEONS) && DungeonCount + (Greg && GregInLogic ? 1 : 0) >= BridgeDungeonCount.Value<uint8_t>()) ||
(Bridge.Is(RAINBOWBRIDGE_STONES) && StoneCount + (Greg && GregInBridgeLogic ? 1 : 0) >= BridgeStoneCount.Value<uint8_t>()) ||
(Bridge.Is(RAINBOWBRIDGE_MEDALLIONS) && MedallionCount + (Greg && GregInBridgeLogic ? 1 : 0) >= BridgeMedallionCount.Value<uint8_t>()) ||
(Bridge.Is(RAINBOWBRIDGE_REWARDS) && StoneCount + MedallionCount + (Greg && GregInBridgeLogic ? 1 : 0) >= BridgeRewardCount.Value<uint8_t>()) ||
(Bridge.Is(RAINBOWBRIDGE_DUNGEONS) && DungeonCount + (Greg && GregInBridgeLogic ? 1 : 0) >= BridgeDungeonCount.Value<uint8_t>()) ||
(Bridge.Is(RAINBOWBRIDGE_TOKENS) && GoldSkulltulaTokens >= BridgeTokenCount.Value<uint8_t>()) ||
(Bridge.Is(RAINBOWBRIDGE_GREG) && Greg);
CanTriggerLACS = (LACSCondition == LACSCONDITION_VANILLA && ShadowMedallion && SpiritMedallion) ||
(LACSCondition == LACSCONDITION_STONES && StoneCount + (Greg && GregInLogic ? 1 : 0) >= LACSStoneCount.Value<uint8_t>()) ||
(LACSCondition == LACSCONDITION_MEDALLIONS && MedallionCount + (Greg && GregInLogic ? 1 : 0) >= LACSMedallionCount.Value<uint8_t>()) ||
(LACSCondition == LACSCONDITION_REWARDS && StoneCount + MedallionCount + (Greg && GregInLogic ? 1 : 0) >= LACSRewardCount.Value<uint8_t>()) ||
(LACSCondition == LACSCONDITION_DUNGEONS && DungeonCount + (Greg && GregInLogic ? 1 : 0) >= LACSDungeonCount.Value<uint8_t>()) ||
(LACSCondition == LACSCONDITION_STONES && StoneCount + (Greg && GregInLacsLogic ? 1 : 0) >= LACSStoneCount.Value<uint8_t>()) ||
(LACSCondition == LACSCONDITION_MEDALLIONS && MedallionCount + (Greg && GregInLacsLogic ? 1 : 0) >= LACSMedallionCount.Value<uint8_t>()) ||
(LACSCondition == LACSCONDITION_REWARDS && StoneCount + MedallionCount + (Greg && GregInLacsLogic ? 1 : 0) >= LACSRewardCount.Value<uint8_t>()) ||
(LACSCondition == LACSCONDITION_DUNGEONS && DungeonCount + (Greg && GregInLacsLogic ? 1 : 0) >= LACSDungeonCount.Value<uint8_t>()) ||
(LACSCondition == LACSCONDITION_TOKENS && GoldSkulltulaTokens >= LACSTokenCount.Value<uint8_t>());
CanCompleteTriforce = TriforcePieces >= TriforceHuntRequired.Value<uint8_t>();
}
@ -835,6 +837,8 @@ namespace Logic {
//Greg
Greg = false;
GregInBridgeLogic = false;
GregInLacsLogic = false;
//Progressive Items
ProgressiveBulletBag = 0;

View file

@ -115,6 +115,8 @@ extern bool LightTrialClear;
//Greg
extern bool Greg;
extern bool GregInBridgeLogic;
extern bool GregInLacsLogic;
// Progression Items
extern uint8_t ProgressiveBulletBag;

View file

@ -1067,6 +1067,8 @@ void DrawEnhancementsMenu() {
UIWidgets::PaddedEnhancementCheckbox("Restore old Gold Skulltula cutscene", "gGsCutscene", true, false);
UIWidgets::PaddedEnhancementCheckbox("Quick Bongo Kill", "gQuickBongoKill", true, false);
UIWidgets::Tooltip("Restore a bug from NTSC 1.0 that allows bypassing Bongo Bongo's intro cutscene to quickly kill him");
UIWidgets::PaddedEnhancementCheckbox("Original RBA Values", "gRestoreRBAValues", true, false);
UIWidgets::Tooltip("Restores the original outcomes when performing Reverse Bottle Adventure.");
ImGui::EndMenu();
}

View file

@ -65,8 +65,10 @@ int main(int argc, char** argv)
CrashHandlerRegisterCallback(CrashHandler_PrintSohData);
BootCommands_Init();
Heaps_Alloc();
Main(0);
DeinitOTR();
Heaps_Free();
return 0;
}
@ -87,7 +89,6 @@ void Main(void* arg) {
PreNmiBuff_Init(gAppNmiBufferPtr);
Fault_Init();
SysCfb_Init(0);
Heaps_Alloc();
sysHeap = (uintptr_t)gSystemHeap;
fb = SysCfb_GetFbPtr(0);
gSystemHeapSize = 1024 * 1024 * 4;
@ -156,6 +157,4 @@ void Main(void* arg) {
osDestroyThread(&sGraphThread);
func_800FBFD8();
osSyncPrintf("mainproc 実行終了\n"); // "End of execution"
Heaps_Free();
}

View file

@ -2451,7 +2451,7 @@ void func_80030488(PlayState* play) {
void Actor_DisableLens(PlayState* play) {
if (play->actorCtx.lensActive) {
play->actorCtx.lensActive = false;
func_800876C8(play);
Magic_Reset(play);
}
}

View file

@ -15,7 +15,7 @@ void KaleidoSetup_Update(PlayState* play) {
if (pauseCtx->state == 0 && pauseCtx->debugState == 0 && play->gameOverCtx.state == GAMEOVER_INACTIVE &&
play->sceneLoadFlag == 0 && play->transitionMode == 0 && gSaveContext.cutsceneIndex < 0xFFF0 &&
gSaveContext.nextCutsceneIndex < 0xFFF0 && !Play_InCsMode(play) &&
play->shootingGalleryStatus <= 1 && gSaveContext.magicState != 8 && gSaveContext.magicState != 9 &&
play->shootingGalleryStatus <= 1 && gSaveContext.magicState != MAGIC_STATE_STEP_CAPACITY && gSaveContext.magicState != MAGIC_STATE_FILL &&
(play->sceneNum != SCENE_BOMBCHU_BOWLING_ALLEY || !Flags_GetSwitch(play, 0x38))) {
u8 easyPauseBufferEnabled = CVarGetInteger("gCheatEasyPauseBufferEnabled", 0);

View file

@ -2196,14 +2196,14 @@ u8 Item_Give(PlayState* play, u8 item) {
}
return Return_Item(item, MOD_NONE, item);
} else if (item == ITEM_MAGIC_SMALL) {
if (gSaveContext.magicState != 10) {
if (gSaveContext.magicState != MAGIC_STATE_ADD) {
if (play != NULL) {
Magic_Fill(play);
}
}
if (play != NULL) {
func_80087708(play, 12, 5);
Magic_RequestChange(play, 12, MAGIC_ADD);
}
if (!Flags_GetInfTable(INFTABLE_198)) {
@ -2213,13 +2213,13 @@ u8 Item_Give(PlayState* play, u8 item) {
return Return_Item(item, MOD_NONE, item);
} else if (item == ITEM_MAGIC_LARGE) {
if (gSaveContext.magicState != 10) {
if (gSaveContext.magicState != MAGIC_STATE_ADD) {
if (play != NULL) {
Magic_Fill(play);
}
}
if (play != NULL) {
func_80087708(play, 24, 5);
Magic_RequestChange(play, 24, MAGIC_ADD);
}
if (!Flags_GetInfTable(INFTABLE_198)) {
@ -2328,7 +2328,7 @@ u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) {
slot = SLOT(item);
if (item == RG_MAGIC_SINGLE) {
gSaveContext.isMagicAcquired = true;
gSaveContext.magicFillTarget = 0x30;
gSaveContext.magicFillTarget = MAGIC_NORMAL_METER;
Magic_Fill(play);
return Return_Item_Entry(giEntry, RG_NONE);
} else if (item == RG_MAGIC_DOUBLE) {
@ -2336,7 +2336,7 @@ u16 Randomizer_Item_Give(PlayState* play, GetItemEntry giEntry) {
gSaveContext.isMagicAcquired = true;
}
gSaveContext.isDoubleMagicAcquired = true;
gSaveContext.magicFillTarget = 0x60;
gSaveContext.magicFillTarget = MAGIC_DOUBLE_METER;
gSaveContext.magicLevel = 0;
Magic_Fill(play);
return Return_Item_Entry(giEntry, RG_NONE);
@ -2782,6 +2782,13 @@ s32 Inventory_HasSpecificBottle(u8 bottleItem) {
}
}
void byteSwapInventory() {
gSaveContext.inventory.equipment = BE16SWAP(gSaveContext.inventory.equipment);
gSaveContext.inventory.upgrades = BE32SWAP(gSaveContext.inventory.upgrades);
gSaveContext.inventory.questItems = BE32SWAP(gSaveContext.inventory.questItems);
gSaveContext.inventory.gsTokens = BE16SWAP(gSaveContext.inventory.gsTokens);
}
void Inventory_UpdateBottleItem(PlayState* play, u8 item, u8 button) {
osSyncPrintf("item_no=%x, c_no=%x, Pt=%x Item_Register=%x\n", item, button,
gSaveContext.equips.cButtonSlots[button - 1],
@ -2793,7 +2800,14 @@ void Inventory_UpdateBottleItem(PlayState* play, u8 item, u8 button) {
item = ITEM_MILK_HALF;
}
gSaveContext.inventory.items[gSaveContext.equips.cButtonSlots[button - 1]] = item;
if (CVarGetInteger("gRestoreRBAValues",0)) {
byteSwapInventory();
gSaveContext.inventory.items[gSaveContext.equips.cButtonSlots[button - 1]] = item;
byteSwapInventory();
} else {
gSaveContext.inventory.items[gSaveContext.equips.cButtonSlots[button - 1]] = item;
}
gSaveContext.equips.buttonItems[button] = item;
Interface_LoadItemIcon1(play, button);
@ -3126,96 +3140,96 @@ void Inventory_ChangeAmmo(s16 item, s16 ammoChange) {
void Magic_Fill(PlayState* play) {
if (gSaveContext.isMagicAcquired) {
gSaveContext.prevMagicState = gSaveContext.magicState;
gSaveContext.magicFillTarget = (gSaveContext.isDoubleMagicAcquired + 1) * 0x30;
gSaveContext.magicState = 9;
gSaveContext.magicFillTarget = (gSaveContext.isDoubleMagicAcquired + 1) * MAGIC_NORMAL_METER;
gSaveContext.magicState = MAGIC_STATE_FILL;
}
}
void func_800876C8(PlayState* play) {
if ((gSaveContext.magicState != 8) && (gSaveContext.magicState != 9)) {
if (gSaveContext.magicState == 10) {
void Magic_Reset(PlayState* play) {
if ((gSaveContext.magicState != MAGIC_STATE_STEP_CAPACITY) && (gSaveContext.magicState != MAGIC_STATE_FILL)) {
if (gSaveContext.magicState == MAGIC_STATE_ADD) {
gSaveContext.prevMagicState = gSaveContext.magicState;
}
gSaveContext.magicState = 5;
gSaveContext.magicState = MAGIC_STATE_RESET;
}
}
s32 func_80087708(PlayState* play, s16 arg1, s16 arg2) {
s32 Magic_RequestChange(PlayState* play, s16 amount, s16 type) {
if (!gSaveContext.isMagicAcquired) {
return 0;
return false;
}
if ((arg2 != 5) && (gSaveContext.magic - arg1) < 0) {
if ((type != 5) && (gSaveContext.magic - amount) < 0) {
if (gSaveContext.magicCapacity != 0) {
Audio_PlaySoundGeneral(NA_SE_SY_ERROR, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
}
return 0;
return false;
}
switch (arg2) {
case 0:
case 2:
if ((gSaveContext.magicState == 0) || (gSaveContext.magicState == 7)) {
if (gSaveContext.magicState == 7) {
switch (type) {
case MAGIC_CONSUME_NOW:
case MAGIC_CONSUME_NOW_ALT:
if ((gSaveContext.magicState == MAGIC_STATE_IDLE) || (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS)) {
if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) {
play->actorCtx.lensActive = false;
}
gSaveContext.magicTarget = gSaveContext.magic - arg1;
gSaveContext.magicState = 1;
gSaveContext.magicTarget = gSaveContext.magic - amount;
gSaveContext.magicState = MAGIC_STATE_CONSUME_SETUP;
return 1;
} else {
Audio_PlaySoundGeneral(NA_SE_SY_ERROR, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
return 0;
return false;
}
case 1:
if ((gSaveContext.magicState == 0) || (gSaveContext.magicState == 7)) {
if (gSaveContext.magicState == 7) {
case MAGIC_CONSUME_WAIT_NO_PREVIEW:
if ((gSaveContext.magicState == MAGIC_STATE_IDLE) || (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS)) {
if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) {
play->actorCtx.lensActive = false;
}
gSaveContext.magicTarget = gSaveContext.magic - arg1;
gSaveContext.magicState = 6;
return 1;
gSaveContext.magicTarget = gSaveContext.magic - amount;
gSaveContext.magicState = MAGIC_STATE_METER_FLASH_3;
return true;
} else {
Audio_PlaySoundGeneral(NA_SE_SY_ERROR, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
return 0;
return false;
}
case 3:
if (gSaveContext.magicState == 0) {
case MAGIC_CONSUME_LENS:
if (gSaveContext.magicState == MAGIC_STATE_IDLE) {
if (gSaveContext.magic != 0) {
play->interfaceCtx.unk_230 = 80;
gSaveContext.magicState = 7;
return 1;
gSaveContext.magicState = MAGIC_STATE_CONSUME_LENS;
return true;
} else {
return 0;
return false;
}
} else {
if (gSaveContext.magicState == 7) {
return 1;
if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) {
return true;
} else {
return 0;
return false;
}
}
case 4:
if ((gSaveContext.magicState == 0) || (gSaveContext.magicState == 7)) {
if (gSaveContext.magicState == 7) {
case MAGIC_CONSUME_WAIT_PREVIEW:
if ((gSaveContext.magicState == MAGIC_STATE_IDLE) || (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS)) {
if (gSaveContext.magicState == MAGIC_STATE_CONSUME_LENS) {
play->actorCtx.lensActive = false;
}
gSaveContext.magicTarget = gSaveContext.magic - arg1;
gSaveContext.magicState = 4;
return 1;
gSaveContext.magicTarget = gSaveContext.magic - amount;
gSaveContext.magicState = MAGIC_STATE_METER_FLASH_2;
return true;
} else {
Audio_PlaySoundGeneral(NA_SE_SY_ERROR, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
return 0;
return false;
}
case 5:
case MAGIC_ADD:
if (gSaveContext.magicCapacity >= gSaveContext.magic) {
gSaveContext.magicTarget = gSaveContext.magic + arg1;
gSaveContext.magicTarget = gSaveContext.magic + amount;
if (gSaveContext.magicTarget >= gSaveContext.magicCapacity) {
gSaveContext.magicTarget = gSaveContext.magicCapacity;
}
gSaveContext.magicState = 10;
return 1;
gSaveContext.magicState = MAGIC_STATE_ADD;
return true;
}
break;
}
@ -3264,8 +3278,8 @@ void Interface_UpdateMagicBar(PlayState* play) {
s16 temp;
switch (gSaveContext.magicState) {
case 8:
temp = gSaveContext.magicLevel * 0x30;
case MAGIC_STATE_STEP_CAPACITY:
temp = gSaveContext.magicLevel * MAGIC_NORMAL_METER;
if (gSaveContext.magicCapacity != temp) {
if (gSaveContext.magicCapacity < temp) {
gSaveContext.magicCapacity += 8;
@ -3279,11 +3293,11 @@ void Interface_UpdateMagicBar(PlayState* play) {
}
}
} else {
gSaveContext.magicState = 9;
gSaveContext.magicState = MAGIC_STATE_FILL;
}
break;
case 9:
case MAGIC_STATE_FILL:
gSaveContext.magic += 4;
if (gSaveContext.gameMode == 0 && gSaveContext.sceneSetupIndex < 4) {
@ -3300,32 +3314,32 @@ void Interface_UpdateMagicBar(PlayState* play) {
}
break;
case 1:
case MAGIC_STATE_CONSUME_SETUP:
sMagicBorderRatio = 2;
gSaveContext.magicState = 2;
gSaveContext.magicState = MAGIC_STATE_CONSUME;
break;
case 2:
case MAGIC_STATE_CONSUME:
gSaveContext.magic -= 2;
if (gSaveContext.magic <= 0) {
gSaveContext.magic = 0;
gSaveContext.magicState = 3;
gSaveContext.magicState = MAGIC_STATE_METER_FLASH_1;
if (CVarGetInteger("gCosmetics.Consumable_MagicBorder.Changed", 0)) {
sMagicBorder = CVarGetColor24("gCosmetics.Consumable_MagicBorder.Value", sMagicBorder_ori);
} else {
sMagicBorder = sMagicBorder_ori;
}
} else if (gSaveContext.magic == gSaveContext.magicTarget) {
gSaveContext.magicState = 3;
gSaveContext.magicState = MAGIC_STATE_METER_FLASH_1;
if (CVarGetInteger("gCosmetics.Consumable_MagicBorder.Changed", 0)) {
sMagicBorder = CVarGetColor24("gCosmetics.Consumable_MagicBorder.Value", sMagicBorder_ori);
} else {
sMagicBorder = sMagicBorder_ori;
}
}
case 3:
case 4:
case 6:
case MAGIC_STATE_METER_FLASH_1:
case MAGIC_STATE_METER_FLASH_2:
case MAGIC_STATE_METER_FLASH_3:
temp = sMagicBorderIndexes[sMagicBorderStep];
borderChangeR = ABS(sMagicBorder.r - sMagicBorderColors[temp][0]) / sMagicBorderRatio;
borderChangeG = ABS(sMagicBorder.g - sMagicBorderColors[temp][1]) / sMagicBorderRatio;
@ -3362,16 +3376,16 @@ void Interface_UpdateMagicBar(PlayState* play) {
}
break;
case 5:
case MAGIC_STATE_RESET:
if (CVarGetInteger("gCosmetics.Consumable_MagicBorder.Changed", 0)) {
sMagicBorder = CVarGetColor24("gCosmetics.Consumable_MagicBorder.Value", sMagicBorder_ori);
} else {
sMagicBorder = sMagicBorder_ori;
}
gSaveContext.magicState = 0;
gSaveContext.magicState = MAGIC_STATE_IDLE;
break;
case 7:
case MAGIC_STATE_CONSUME_LENS:
if ((play->pauseCtx.state == 0) && (play->pauseCtx.debugState == 0) &&
(msgCtx->msgMode == MSGMODE_NONE) && (play->gameOverCtx.state == GAMEOVER_INACTIVE) &&
(play->sceneLoadFlag == 0) && (play->transitionMode == 0) && !Play_InCsMode(play)) {
@ -3388,7 +3402,7 @@ void Interface_UpdateMagicBar(PlayState* play) {
play->actorCtx.lensActive = false;
Audio_PlaySoundGeneral(NA_SE_SY_GLASSMODE_OFF, &D_801333D4, 4, &D_801333E0, &D_801333E0,
&D_801333E8);
gSaveContext.magicState = 0;
gSaveContext.magicState = MAGIC_STATE_IDLE;
if (CVarGetInteger("gCosmetics.Consumable_MagicBorder.Changed", 0)) {
sMagicBorder = CVarGetColor24("gCosmetics.Consumable_MagicBorder.Value", sMagicBorder_ori);
} else {
@ -3440,7 +3454,7 @@ void Interface_UpdateMagicBar(PlayState* play) {
}
break;
case 10:
case MAGIC_STATE_ADD:
gSaveContext.magic += 4;
Audio_PlaySoundGeneral(NA_SE_SY_GAUGE_UP - SFX_FLAG, &D_801333D4, 4, &D_801333E0, &D_801333E0, &D_801333E8);
if (gSaveContext.magic >= gSaveContext.magicTarget) {
@ -3451,7 +3465,7 @@ void Interface_UpdateMagicBar(PlayState* play) {
break;
default:
gSaveContext.magicState = 0;
gSaveContext.magicState = MAGIC_STATE_IDLE;
break;
}
}
@ -3584,7 +3598,7 @@ void Interface_DrawMagicBar(PlayState* play) {
ENVIRONMENT, TEXEL0, ENVIRONMENT, 0, 0, 0, PRIMITIVE);
gDPSetEnvColor(OVERLAY_DISP++, 0, 0, 0, 255);
if (gSaveContext.magicState == 4) {
if (gSaveContext.magicState == MAGIC_STATE_METER_FLASH_2) {
// Yellow part of the bar indicating the amount of magic to be subtracted
gDPSetPrimColor(OVERLAY_DISP++, 0, 0, magicbar_yellow.r, magicbar_yellow.g, magicbar_yellow.b, interfaceCtx->magicAlpha);
@ -5231,7 +5245,7 @@ void Interface_Draw(PlayState* play) {
Interface_DrawLineupTick(play);
}
if (fullUi || gSaveContext.magicState > 0) {
if (fullUi || gSaveContext.magicState > MAGIC_STATE_IDLE) {
Interface_DrawMagicBar(play);
}
@ -6527,7 +6541,7 @@ void Interface_Update(PlayState* play) {
((play->csCtx.state == CS_STATE_IDLE) || !Player_InCsMode(play))) {
if ((gSaveContext.isMagicAcquired != 0) && (gSaveContext.magicLevel == 0)) {
gSaveContext.magicLevel = gSaveContext.isDoubleMagicAcquired + 1;
gSaveContext.magicState = 8;
gSaveContext.magicState = MAGIC_STATE_STEP_CAPACITY;
osSyncPrintf(VT_FGCOL(YELLOW));
osSyncPrintf("魔法スター─────ト!!!!!!!!!\n"); // "Magic Start!!!!!!!!!"
osSyncPrintf("MAGIC_MAX=%d\n", gSaveContext.magicLevel);

View file

@ -9,6 +9,7 @@
#include "soh/Enhancements/game-interactor/GameInteractor.h"
#include "soh/Enhancements/randomizer/randomizer_entrance.h"
#include <overlays/actors/ovl_En_Niw/z_en_niw.h>
#include <overlays/misc/ovl_kaleido_scope/z_kaleido_scope.h>
#include "soh/Enhancements/enhancementTypes.h"
#include "soh/Enhancements/game-interactor/GameInteractor_Hooks.h"
@ -545,7 +546,7 @@ void Play_Init(GameState* thisx) {
if (gSaveContext.gameMode != 0 || gSaveContext.cutsceneIndex >= 0xFFF0) {
gSaveContext.nayrusLoveTimer = 0;
func_800876C8(play);
Magic_Reset(play);
gSaveContext.sceneSetupIndex = (gSaveContext.cutsceneIndex & 0xF) + 4;
} else if (!LINK_IS_ADULT && IS_DAY) {
gSaveContext.sceneSetupIndex = 0;
@ -654,12 +655,12 @@ void Play_Init(GameState* thisx) {
Fault_AddClient(&D_801614B8, ZeldaArena_Display, NULL, NULL);
// In order to keep bunny hood equipped on first load, we need to pre-set the age reqs for the item and slot
if ((CVarGetInteger("gMMBunnyHood", BUNNY_HOOD_VANILLA) != BUNNY_HOOD_VANILLA && CVarGetInteger("gAdultBunnyHood", 0)) || CVarGetInteger("gTimelessEquipment", 0)) {
gItemAgeReqs[ITEM_MASK_BUNNY] = 9;
gItemAgeReqs[ITEM_MASK_BUNNY] = AGE_REQ_NONE;
if(INV_CONTENT(ITEM_TRADE_CHILD) == ITEM_MASK_BUNNY)
gSlotAgeReqs[SLOT_TRADE_CHILD] = 9;
gSlotAgeReqs[SLOT_TRADE_CHILD] = AGE_REQ_NONE;
}
else {
gItemAgeReqs[ITEM_MASK_BUNNY] = gSlotAgeReqs[SLOT_TRADE_CHILD] = 1;
gItemAgeReqs[ITEM_MASK_BUNNY] = gSlotAgeReqs[SLOT_TRADE_CHILD] = AGE_REQ_CHILD;
}
func_800304DC(play, &play->actorCtx, play->linkActorEntry);

View file

@ -342,7 +342,7 @@ uint8_t Player_IsCustomLinkModel() {
s32 Player_InBlockingCsMode(PlayState* play, Player* this) {
return (this->stateFlags1 & 0x20000080) || (this->csMode != 0) || (play->sceneLoadFlag == 0x14) ||
(this->stateFlags1 & 1) || (this->stateFlags3 & 0x80) ||
((gSaveContext.magicState != 0) && (Player_ActionToMagicSpell(this, this->itemAction) >= 0));
((gSaveContext.magicState != MAGIC_STATE_IDLE) && (Player_ActionToMagicSpell(this, this->itemAction) >= 0));
}
s32 Player_InCsMode(PlayState* play) {

View file

@ -55,7 +55,7 @@ void ArrowFire_Init(Actor* thisx, PlayState* play) {
}
void ArrowFire_Destroy(Actor* thisx, PlayState* play) {
func_800876C8(play);
Magic_Reset(play);
LOG_STRING("消滅"); // "Disappearance"
}

View file

@ -56,7 +56,7 @@ void ArrowIce_Init(Actor* thisx, PlayState* play) {
}
void ArrowIce_Destroy(Actor* thisx, PlayState* play) {
func_800876C8(play);
Magic_Reset(play);
LOG_STRING("消滅"); // "Disappearance"
}

View file

@ -56,7 +56,7 @@ void ArrowLight_Init(Actor* thisx, PlayState* play) {
}
void ArrowLight_Destroy(Actor* thisx, PlayState* play) {
func_800876C8(play);
Magic_Reset(play);
LOG_STRING("消滅"); // "Disappearance"
}

View file

@ -741,7 +741,7 @@ void BgDyYoseizo_Give_Reward(BgDyYoseizo* this, PlayState* play) {
switch (actionIndex) {
case FAIRY_UPGRADE_MAGIC:
gSaveContext.isMagicAcquired = true;
gSaveContext.magicFillTarget = 0x30;
gSaveContext.magicFillTarget = MAGIC_NORMAL_METER;
Interface_ChangeAlpha(9);
break;
case FAIRY_UPGRADE_DOUBLE_MAGIC:
@ -749,7 +749,7 @@ void BgDyYoseizo_Give_Reward(BgDyYoseizo* this, PlayState* play) {
gSaveContext.isMagicAcquired = true;
}
gSaveContext.isDoubleMagicAcquired = true;
gSaveContext.magicFillTarget = 0x60;
gSaveContext.magicFillTarget = MAGIC_DOUBLE_METER;
gSaveContext.magicLevel = 0;
Interface_ChangeAlpha(9);
break;

View file

@ -85,9 +85,9 @@ void EnMThunder_Init(Actor* thisx, PlayState* play2) {
this->unk_1CA = 0;
if (player->stateFlags2 & 0x20000) {
if (!gSaveContext.isMagicAcquired || gSaveContext.magicState ||
if (!gSaveContext.isMagicAcquired || (gSaveContext.magicState != MAGIC_STATE_IDLE) ||
(((this->actor.params & 0xFF00) >> 8) &&
!(func_80087708(play, (this->actor.params & 0xFF00) >> 8, 0)))) {
!(Magic_RequestChange(play, (this->actor.params & 0xFF00) >> 8, MAGIC_CONSUME_NOW)))) {
Audio_PlaySoundGeneral(NA_SE_IT_ROLLING_CUT, &player->actor.projectedPos, 4, &D_801333E0, &D_801333E0,
&D_801333E8);
Audio_PlaySoundGeneral(NA_SE_IT_SWORD_SWING_HARD, &player->actor.projectedPos, 4, &D_801333E0, &D_801333E0,
@ -116,7 +116,7 @@ void EnMThunder_Destroy(Actor* thisx, PlayState* play) {
EnMThunder* this = (EnMThunder*)thisx;
if (this->unk_1CA != 0) {
func_800876C8(play);
Magic_Reset(play);
}
Collider_DestroyCylinder(play, &this->collider);
@ -158,8 +158,8 @@ void func_80A9F408(EnMThunder* this, PlayState* play) {
if (this->unk_1CA == 0) {
if (player->unk_858 >= 0.1f) {
if ((gSaveContext.magicState) || (((this->actor.params & 0xFF00) >> 8) &&
!(func_80087708(play, (this->actor.params & 0xFF00) >> 8, 4)))) {
if ((gSaveContext.magicState != MAGIC_STATE_IDLE) || (((this->actor.params & 0xFF00) >> 8) &&
!(Magic_RequestChange(play, (this->actor.params & 0xFF00) >> 8, MAGIC_CONSUME_WAIT_PREVIEW)))) {
func_80A9F350(this, play);
func_80A9EFE0(this, func_80A9F350);
this->unk_1C8 = 0;
@ -193,7 +193,7 @@ void func_80A9F408(EnMThunder* this, PlayState* play) {
} else {
player->stateFlags2 &= ~0x20000;
if ((this->actor.params & 0xFF00) >> 8) {
gSaveContext.magicState = 1;
gSaveContext.magicState = MAGIC_STATE_CONSUME_SETUP;
}
if (player->unk_858 < 0.85f) {
this->collider.info.toucher.dmgFlags = D_80AA044C[this->unk_1C7];

View file

@ -195,7 +195,7 @@ void UseBow(Actor* thisx, PlayState* play, u8 started, u8 arrowType) {
} else if (started == 0) {
if (this->itemTimer <= 0) {
if (AMMO(ITEM_BOW) > 0) {
if (arrowType >= 1 && !func_80087708(play, magicArrowCosts[arrowType], 0)) {
if (arrowType >= 1 && !Magic_RequestChange(play, magicArrowCosts[arrowType], MAGIC_CONSUME_NOW)) {
func_80078884(NA_SE_SY_ERROR);
this->canMove = 1;
return;
@ -455,7 +455,7 @@ void UseSpell(Actor* thisx, PlayState* play, u8 started, u8 spellType) {
if (started == 0 && this->usedSpell != 0) {
this->itemTimer = 10;
gSaveContext.magicState = 5;
gSaveContext.magicState = MAGIC_STATE_RESET;
switch (this->usedSpell) {
case 1:
@ -487,7 +487,7 @@ void UseSpell(Actor* thisx, PlayState* play, u8 started, u8 spellType) {
break;
}
gSaveContext.magicState = 3;
gSaveContext.magicState = MAGIC_STATE_METER_FLASH_1;
this->magicTimer--;
if (this->magicTimer <= 0) {
gSaveContext.magic--;
@ -497,7 +497,7 @@ void UseSpell(Actor* thisx, PlayState* play, u8 started, u8 spellType) {
this->itemTimer = 10;
this->usedSpell = 0;
gSaveContext.magicState = 5;
gSaveContext.magicState = MAGIC_STATE_RESET;
}
}
}

View file

@ -568,7 +568,7 @@ void EnTorch2_Update(Actor* thisx, PlayState* play2) {
// Causes Dark Link to shield in place when Link is using magic attacks other than the spin attack
if ((gSaveContext.magicState == 3) && (player->meleeWeaponState == 0 || (player->meleeWeaponAnimation < SPIN_ATTACK_1H) ||
if ((gSaveContext.magicState == MAGIC_STATE_METER_FLASH_1) && (player->meleeWeaponState == 0 || (player->meleeWeaponAnimation < SPIN_ATTACK_1H) ||
(player->meleeWeaponAnimation > BIG_SPIN_2H))) {
sStickTilt = 0.0f;
input->cur.stick_x = 0;

View file

@ -1810,7 +1810,7 @@ void func_80B5772C(EnZl3* this, PlayState* play) {
}
void func_80B57754(EnZl3* this, PlayState* play) {
if (gSaveContext.magicState == 0) {
if (gSaveContext.magicState == MAGIC_STATE_IDLE) {
Actor_Spawn(&play->actorCtx, play, ACTOR_OCEFF_WIPE4, this->actor.world.pos.x,
this->actor.world.pos.y, this->actor.world.pos.z, 0, 0, 0, 1, true);
func_80B56DA4(this);

View file

@ -65,7 +65,7 @@ void MagicDark_Init(Actor* thisx, PlayState* play) {
void MagicDark_Destroy(Actor* thisx, PlayState* play) {
if (gSaveContext.nayrusLoveTimer == 0) {
func_800876C8(play);
Magic_Reset(play);
}
}

View file

@ -93,7 +93,7 @@ void MagicFire_Init(Actor* thisx, PlayState* play) {
}
void MagicFire_Destroy(Actor* thisx, PlayState* play) {
func_800876C8(play);
Magic_Reset(play);
}
void MagicFire_UpdateBeforeCast(Actor* thisx, PlayState* play) {

View file

@ -70,7 +70,7 @@ void MagicWind_Init(Actor* thisx, PlayState* play) {
void MagicWind_Destroy(Actor* thisx, PlayState* play) {
MagicWind* this = (MagicWind*)thisx;
SkelCurve_Destroy(play, &this->skelCurve);
func_800876C8(play);
Magic_Reset(play);
// "wipe out"
LOG_STRING("消滅");
}

View file

@ -70,7 +70,7 @@ void OceffSpot_Destroy(Actor* thisx, PlayState* play) {
LightContext_RemoveLight(play, &play->lightCtx, this->lightNode1);
LightContext_RemoveLight(play, &play->lightCtx, this->lightNode2);
func_800876C8(play);
Magic_Reset(play);
if ((gSaveContext.nayrusLoveTimer != 0) && (play->actorCtx.actorLists[ACTORCAT_PLAYER].length != 0)) {
player->stateFlags3 |= PLAYER_STATE3_RESTORE_NAYRUS_LOVE;
}

View file

@ -60,7 +60,7 @@ void OceffStorm_Destroy(Actor* thisx, PlayState* play) {
OceffStorm* this = (OceffStorm*)thisx;
Player* player = GET_PLAYER(play);
func_800876C8(play);
Magic_Reset(play);
if (gSaveContext.nayrusLoveTimer != 0) {
player->stateFlags3 |= PLAYER_STATE3_RESTORE_NAYRUS_LOVE;
}

View file

@ -40,7 +40,7 @@ void OceffWipe_Destroy(Actor* thisx, PlayState* play) {
OceffWipe* this = (OceffWipe*)thisx;
Player* player = GET_PLAYER(play);
func_800876C8(play);
Magic_Reset(play);
if (gSaveContext.nayrusLoveTimer != 0) {
player->stateFlags3 |= PLAYER_STATE3_RESTORE_NAYRUS_LOVE;
}

View file

@ -40,7 +40,7 @@ void OceffWipe2_Destroy(Actor* thisx, PlayState* play) {
OceffWipe2* this = (OceffWipe2*)thisx;
Player* player = GET_PLAYER(play);
func_800876C8(play);
Magic_Reset(play);
if (gSaveContext.nayrusLoveTimer != 0) {
player->stateFlags3 |= PLAYER_STATE3_RESTORE_NAYRUS_LOVE;
}

View file

@ -43,7 +43,7 @@ void OceffWipe3_Destroy(Actor* thisx, PlayState* play) {
OceffWipe3* this = (OceffWipe3*)thisx;
Player* player = GET_PLAYER(play);
func_800876C8(play);
Magic_Reset(play);
if (gSaveContext.nayrusLoveTimer != 0) {
player->stateFlags3 |= PLAYER_STATE3_RESTORE_NAYRUS_LOVE;
}

View file

@ -39,7 +39,7 @@ void OceffWipe4_Init(Actor* thisx, PlayState* play) {
void OceffWipe4_Destroy(Actor* thisx, PlayState* play) {
OceffWipe4* this = (OceffWipe4*)thisx;
func_800876C8(play);
Magic_Reset(play);
}
void OceffWipe4_Update(Actor* thisx, PlayState* play) {

View file

@ -17,6 +17,7 @@
#include "overlays/actors/ovl_En_Fish/z_en_fish.h"
#include "overlays/actors/ovl_En_Horse/z_en_horse.h"
#include "overlays/effects/ovl_Effect_Ss_Fhg_Flash/z_eff_ss_fhg_flash.h"
#include "overlays/misc/ovl_kaleido_scope/z_kaleido_scope.h"
#include "objects/gameplay_keep/gameplay_keep.h"
#include "objects/object_link_child/object_link_child.h"
#include "textures/icon_item_24_static/icon_item_24_static.h"
@ -2224,7 +2225,7 @@ s32 func_8083442C(Player* this, PlayState* play) {
s32 magicArrowType;
if ((this->heldItemAction >= PLAYER_IA_BOW_FIRE) && (this->heldItemAction <= PLAYER_IA_BOW_0E) &&
(gSaveContext.magicState != 0)) {
(gSaveContext.magicState != MAGIC_STATE_IDLE)) {
func_80078884(NA_SE_SY_ERROR);
} else {
func_80833638(this, func_808351D4);
@ -2240,7 +2241,7 @@ s32 func_8083442C(Player* this, PlayState* play) {
if (this->unk_860 >= 0) {
if ((magicArrowType >= 0) && (magicArrowType <= 2) &&
!func_80087708(play, sMagicArrowCosts[magicArrowType], 0)) {
!Magic_RequestChange(play, sMagicArrowCosts[magicArrowType], MAGIC_CONSUME_NOW)) {
arrowType = ARROW_NORMAL;
}
@ -2979,7 +2980,7 @@ void func_80835F44(PlayState* play, Player* this, s32 item) {
}
if (actionParam == PLAYER_IA_LENS_OF_TRUTH) {
if (func_80087708(play, 0, 3)) {
if (Magic_RequestChange(play, 0, MAGIC_CONSUME_LENS)) {
if (play->actorCtx.lensActive) {
Actor_DisableLens(play);
} else {
@ -3004,7 +3005,7 @@ void func_80835F44(PlayState* play, Player* this, s32 item) {
temp = Player_ActionToMagicSpell(this, actionParam);
if (temp >= 0) {
if (((actionParam == PLAYER_IA_FARORES_WIND) && (gSaveContext.respawn[RESPAWN_MODE_TOP].data > 0)) ||
((gSaveContext.magicCapacity != 0) && (gSaveContext.magicState == 0) &&
((gSaveContext.magicCapacity != 0) && (gSaveContext.magicState == MAGIC_STATE_IDLE) &&
(gSaveContext.magic >= sMagicSpellCosts[temp]))) {
this->itemAction = actionParam;
this->unk_6AD = 4;
@ -4981,7 +4982,7 @@ void func_8083AF44(PlayState* play, Player* this, s32 magicSpell) {
func_80835DE4(play, this, func_808507F4, 0);
this->unk_84F = magicSpell - 3;
func_80087708(play, sMagicSpellCosts[magicSpell], 4);
Magic_RequestChange(play, sMagicSpellCosts[magicSpell], MAGIC_CONSUME_WAIT_PREVIEW);
u8 isFastFarores = CVarGetInteger("gFastFarores", 0) && this->itemAction == PLAYER_IA_FARORES_WIND;
@ -9740,7 +9741,7 @@ void Player_Init(Actor* thisx, PlayState* play2) {
}
if (gSaveContext.nayrusLoveTimer != 0) {
gSaveContext.magicState = 3;
gSaveContext.magicState = MAGIC_STATE_METER_FLASH_1;
func_80846A00(play, this, 1);
this->stateFlags3 &= ~PLAYER_STATE3_RESTORE_NAYRUS_LOVE;
}
@ -10666,8 +10667,8 @@ void Player_UpdateCommon(Player* this, PlayState* play, Input* input) {
func_80848C74(play, this);
}
if ((this->stateFlags3 & PLAYER_STATE3_RESTORE_NAYRUS_LOVE) && (gSaveContext.nayrusLoveTimer != 0) && (gSaveContext.magicState == 0)) {
gSaveContext.magicState = 3;
if ((this->stateFlags3 & PLAYER_STATE3_RESTORE_NAYRUS_LOVE) && (gSaveContext.nayrusLoveTimer != 0) && (gSaveContext.magicState == MAGIC_STATE_IDLE)) {
gSaveContext.magicState = MAGIC_STATE_METER_FLASH_1;
func_80846A00(play, this, 1);
this->stateFlags3 &= ~PLAYER_STATE3_RESTORE_NAYRUS_LOVE;
}
@ -11373,7 +11374,7 @@ void Player_Destroy(Actor* thisx, PlayState* play) {
Collider_DestroyQuad(play, &this->meleeWeaponQuads[1]);
Collider_DestroyQuad(play, &this->shieldQuad);
func_800876C8(play);
Magic_Reset(play);
gSaveContext.linkAge = play->linkAgeOnLoad;
@ -12715,8 +12716,7 @@ s32 func_8084DFF4(PlayState* play, Player* this) {
equipItem = giEntry.itemId;
equipNow = CVarGetInteger("gAskToEquip", 0) && giEntry.modIndex == MOD_NONE &&
equipItem >= ITEM_SWORD_KOKIRI && equipItem <= ITEM_TUNIC_ZORA &&
((gItemAgeReqs[equipItem] == 9 || gItemAgeReqs[equipItem] == gSaveContext.linkAge) ||
CVarGetInteger("gTimelessEquipment", 0));
CHECK_AGE_REQ_ITEM(equipItem);
Message_StartTextbox(play, giEntry.textId, &this->actor);
// RANDOTODO: Macro this boolean check.
@ -13098,39 +13098,39 @@ void func_8084EAC0(Player* this, PlayState* play) {
}
if (CVarGetInteger("gBlueManaPercentRestore", 0)) {
if (gSaveContext.magicState != 10) {
if (gSaveContext.magicState != MAGIC_STATE_ADD) {
Magic_Fill(play);
}
func_80087708(play,
Magic_RequestChange(play,
(gSaveContext.magicLevel * 48 * CVarGetInteger("gBluePotionMana", 100) / 100 + 15) /
16 * 16,
5);
MAGIC_ADD);
} else {
if (gSaveContext.magicState != 10) {
if (gSaveContext.magicState != MAGIC_STATE_ADD) {
Magic_Fill(play);
}
func_80087708(play, CVarGetInteger("gBluePotionMana", 100), 5);
Magic_RequestChange(play, CVarGetInteger("gBluePotionMana", 100), MAGIC_ADD);
;
}
} else if (CVarGetInteger("gGreenPotionEffect", 0) &&
this->itemAction == PLAYER_IA_BOTTLE_POTION_GREEN) {
if (CVarGetInteger("gGreenPercentRestore", 0)) {
if (gSaveContext.magicState != 10) {
if (gSaveContext.magicState != MAGIC_STATE_ADD) {
Magic_Fill(play);
}
func_80087708(play,
Magic_RequestChange(play,
(gSaveContext.magicLevel * 48 * CVarGetInteger("gGreenPotionMana", 100) / 100 + 15) /
16 * 16,
5);
MAGIC_ADD);
} else {
if (gSaveContext.magicState != 10) {
if (gSaveContext.magicState != MAGIC_STATE_ADD) {
Magic_Fill(play);
}
func_80087708(play, CVarGetInteger("gGreenPotionMana", 100), 5);
Magic_RequestChange(play, CVarGetInteger("gGreenPotionMana", 100), MAGIC_ADD);
;
}
} else if (CVarGetInteger("gMilkEffect", 0) && (this->itemAction == PLAYER_IA_BOTTLE_MILK_FULL ||
@ -13174,7 +13174,7 @@ void func_8084EAC0(Player* this, PlayState* play) {
func_8083C0E8(this, play);
func_8005B1A4(Play_GetCamera(play, 0));
} else if (this->unk_850 == 1) {
if ((gSaveContext.healthAccumulator == 0) && (gSaveContext.magicState != 9)) {
if ((gSaveContext.healthAccumulator == 0) && (gSaveContext.magicState != MAGIC_STATE_FILL)) {
func_80832B78(play, this, &gPlayerAnim_link_bottle_drink_demo_end);
this->unk_850 = 2;
Player_UpdateBottleHeld(play, this, ITEM_BOTTLE, PLAYER_IA_BOTTLE);
@ -13933,7 +13933,7 @@ void func_808507F4(Player* this, PlayState* play) {
u8 isFastFarores = CVarGetInteger("gFastFarores", 0) && this->itemAction == PLAYER_IA_FARORES_WIND;
if (LinkAnimation_Update(play, &this->skelAnime)) {
if (this->unk_84F < 0) {
if ((this->itemAction == PLAYER_IA_NAYRUS_LOVE) || isFastFarores || (gSaveContext.magicState == 0)) {
if ((this->itemAction == PLAYER_IA_NAYRUS_LOVE) || isFastFarores || (gSaveContext.magicState == MAGIC_STATE_IDLE)) {
func_80839FFC(this, play);
func_8005B1A4(Play_GetCamera(play, 0));
}
@ -13944,10 +13944,10 @@ void func_808507F4(Player* this, PlayState* play) {
if (func_80846A00(play, this, this->unk_84F) != NULL) {
this->stateFlags1 |= PLAYER_STATE1_IN_ITEM_CS | PLAYER_STATE1_IN_CUTSCENE;
if ((this->unk_84F != 0) || (gSaveContext.respawn[RESPAWN_MODE_TOP].data <= 0)) {
gSaveContext.magicState = 1;
gSaveContext.magicState = MAGIC_STATE_CONSUME_SETUP;
}
} else {
func_800876C8(play);
Magic_Reset(play);
}
} else {
LinkAnimation_PlayLoopSetSpeed(play, &this->skelAnime, D_80854A64[this->unk_84F], 0.83f * (isFastFarores ? 2 : 1));

View file

@ -2987,8 +2987,8 @@ void FileChoose_LoadGame(GameState* thisx) {
gSaveContext.unk_13EE = 0x32;
gSaveContext.nayrusLoveTimer = 0;
gSaveContext.healthAccumulator = 0;
gSaveContext.magicState = 0;
gSaveContext.prevMagicState = 0;
gSaveContext.magicState = MAGIC_STATE_IDLE;
gSaveContext.prevMagicState = MAGIC_STATE_IDLE;
gSaveContext.forcedSeqId = NA_BGM_GENERAL_SFX;
gSaveContext.skyboxTime = 0;
gSaveContext.nextTransitionType = 0xFF;

View file

@ -476,7 +476,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
osSyncPrintf("kscope->select_name[Display_Equipment] = %d\n", pauseCtx->cursorItem[PAUSE_EQUIP]);
if (!(CHECK_EQUIPMENT_AGE(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP]))) {
if (!(CHECK_AGE_REQ_EQUIP(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP]))) {
pauseCtx->nameColorSet = 1;
}
@ -511,7 +511,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
(pauseCtx->unk_1E4 == 0) && CHECK_BTN_ANY(input->press.button, buttonsToCheck) &&
(pauseCtx->cursorX[PAUSE_EQUIP] != 0)) {
if (CHECK_EQUIPMENT_AGE(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP])) {
if (CHECK_AGE_REQ_EQUIP(pauseCtx->cursorY[PAUSE_EQUIP], pauseCtx->cursorX[PAUSE_EQUIP])) {
if (CHECK_BTN_ALL(input->press.button, BTN_A)) {
// Allow Link to remove his equipment from the equipment subscreen by toggling on/off
@ -643,7 +643,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
for (k = 0, temp = rowStart + 1, bit = rowStart, j = point; k < 3; k++, bit++, j += 4, temp++) {
if ((gBitFlags[bit] & gSaveContext.inventory.equipment) && (pauseCtx->cursorSpecialPos == 0)) {
if (CHECK_EQUIPMENT_AGE(i, k + 1)) {
if (CHECK_AGE_REQ_EQUIP(i, k + 1)) {
if (temp == cursorSlot) {
pauseCtx->equipVtx[j].v.ob[0] = pauseCtx->equipVtx[j + 2].v.ob[0] =
pauseCtx->equipVtx[j].v.ob[0] - 2;
@ -702,7 +702,7 @@ void KaleidoScope_DrawEquipment(PlayState* play) {
for (k = 0, bit = rowStart, point = 4; k < 3; k++, point += 4, temp++, bit++) {
int itemId = ITEM_SWORD_KOKIRI + temp;
bool age_restricted = !CHECK_ITEM_AGE(itemId);
bool age_restricted = !CHECK_AGE_REQ_ITEM(itemId);
if (age_restricted) {
gDPSetGrayscaleColor(POLY_KAL_DISP++, 109, 109, 109, 255);
gSPGrayscale(POLY_KAL_DISP++, true);

View file

@ -33,7 +33,7 @@ void KaleidoScope_DrawAmmoCount(PauseContext* pauseCtx, GraphicsContext* gfxCtx,
gDPPipeSync(POLY_KAL_DISP++);
if (!CHECK_SLOT_AGE(SLOT(item))) {
if (!CHECK_AGE_REQ_SLOT(SLOT(item))) {
gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 100, 100, 100, pauseCtx->alpha);
} else {
gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, 255, 255, 255, pauseCtx->alpha);
@ -490,7 +490,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
pauseCtx->cursorItem[PAUSE_ITEM] = cursorItem;
pauseCtx->cursorSlot[PAUSE_ITEM] = cursorSlot;
if (!CHECK_SLOT_AGE(cursorSlot)) {
if (!CHECK_AGE_REQ_SLOT(cursorSlot)) {
pauseCtx->nameColorSet = 1;
}
@ -540,8 +540,8 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
gSlotAgeReqs[SLOT_TRADE_CHILD] = gItemAgeReqs[ITEM_MASK_BUNNY] =
((((CVarGetInteger("gMMBunnyHood", BUNNY_HOOD_VANILLA) != BUNNY_HOOD_VANILLA) && CVarGetInteger("gAdultBunnyHood", 0)) || CVarGetInteger("gTimelessEquipment", 0)) &&
INV_CONTENT(ITEM_TRADE_CHILD) == ITEM_MASK_BUNNY)
? 9
: 1;
? AGE_REQ_NONE
: AGE_REQ_CHILD;
}
if (IS_RANDO && Randomizer_GetSettingValue(RSK_SHUFFLE_ADULT_TRADE) &&
cursorSlot == SLOT_TRADE_ADULT && CHECK_BTN_ALL(input->press.button, BTN_A)) {
@ -566,7 +566,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
buttonsToCheck |= BTN_DUP | BTN_DDOWN | BTN_DLEFT | BTN_DRIGHT;
}
if (CHECK_BTN_ANY(input->press.button, buttonsToCheck)) {
if (CHECK_SLOT_AGE(cursorSlot) &&
if (CHECK_AGE_REQ_SLOT(cursorSlot) &&
(cursorItem != ITEM_SOLD_OUT) && (cursorItem != ITEM_NONE)) {
KaleidoScope_SetupItemEquip(play, cursorItem, cursorSlot,
pauseCtx->itemVtx[index].v.ob[0] * 10,
@ -618,7 +618,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
if (gSaveContext.inventory.items[i] != ITEM_NONE) {
if ((pauseCtx->unk_1E4 == 0) && (pauseCtx->pageIndex == PAUSE_ITEM) && (pauseCtx->cursorSpecialPos == 0)) {
if (CHECK_SLOT_AGE(i)) {
if (CHECK_AGE_REQ_SLOT(i)) {
if ((sEquipState == 2) && (i == 3)) {
gDPSetPrimColor(POLY_KAL_DISP++, 0, 0, magicArrowEffectsR[pauseCtx->equipTargetItem - 0xBF],
magicArrowEffectsG[pauseCtx->equipTargetItem - 0xBF],
@ -653,7 +653,7 @@ void KaleidoScope_DrawItemSelect(PlayState* play) {
gSPVertex(POLY_KAL_DISP++, &pauseCtx->itemVtx[j + 0], 4, 0);
int itemId = gSaveContext.inventory.items[i];
bool not_acquired = !CHECK_ITEM_AGE(itemId);
bool not_acquired = !CHECK_AGE_REQ_ITEM(itemId);
if (not_acquired) {
gDPSetGrayscaleColor(POLY_KAL_DISP++, 109, 109, 109, 255);
gSPGrayscale(POLY_KAL_DISP++, true);

View file

@ -8,9 +8,19 @@ extern u8 gAmmoItems[];
extern s16 D_8082AAEC[];
extern s16 D_8082AB2C[];
extern u8 gEquipAgeReqs[][4];
extern u8 gSlotAgeReqs[];
extern u8 gItemAgeReqs[];
extern u8 gAreaGsFlags[];
extern bool gSelectingMask;
#define AGE_REQ_ADULT LINK_AGE_ADULT
#define AGE_REQ_CHILD LINK_AGE_CHILD
#define AGE_REQ_NONE 9
#define CHECK_AGE_REQ_EQUIP(i, j) (CVarGetInteger("gTimelessEquipment", 0) || (gEquipAgeReqs[i][j] == AGE_REQ_NONE) || (gEquipAgeReqs[i][j] == ((void)0, gSaveContext.linkAge)))
#define CHECK_AGE_REQ_SLOT(slotIndex) (CVarGetInteger("gTimelessEquipment", 0) || (gSlotAgeReqs[slotIndex] == AGE_REQ_NONE) || gSlotAgeReqs[slotIndex] == ((void)0, gSaveContext.linkAge))
#define CHECK_AGE_REQ_ITEM(itemIndex) (CVarGetInteger("gTimelessEquipment", 0) || (gItemAgeReqs[itemIndex] == AGE_REQ_NONE) || (gItemAgeReqs[itemIndex] == gSaveContext.linkAge))
void KaleidoScope_DrawQuestStatus(PlayState* play, GraphicsContext* gfxCtx);
s32 KaleidoScope_UpdateQuestStatusPoint(PauseContext* pauseCtx, s32 point);
void KaleidoScope_DrawDebugEditor(PlayState* play);

View file

@ -734,20 +734,147 @@ static u16 D_8082ABEC[] = {
};
u8 gSlotAgeReqs[] = {
1, 9, 9, 0, 0, 9, 1, 9, 9, 0, 0, 9, 1, 9, 1, 0, 0, 9, 9, 9, 9, 9, 0, 1,
AGE_REQ_CHILD, // SLOT_DEKU_STICK
AGE_REQ_NONE, // SLOT_DEKU_NUT
AGE_REQ_NONE, // SLOT_BOMB
AGE_REQ_ADULT, // SLOT_BOW
AGE_REQ_ADULT, // SLOT_ARROW_FIRE
AGE_REQ_NONE, // SLOT_DINS_FIRE
AGE_REQ_CHILD, // SLOT_SLINGSHOT
AGE_REQ_NONE, // SLOT_OCARINA
AGE_REQ_NONE, // SLOT_BOMBCHU
AGE_REQ_ADULT, // SLOT_HOOKSHOT
AGE_REQ_ADULT, // SLOT_ARROW_ICE
AGE_REQ_NONE, // SLOT_FARORES_WIND
AGE_REQ_CHILD, // SLOT_BOOMERANG
AGE_REQ_NONE, // SLOT_LENS_OF_TRUTH
AGE_REQ_CHILD, // SLOT_MAGIC_BEAN
AGE_REQ_ADULT, // SLOT_HAMMER
AGE_REQ_ADULT, // SLOT_ARROW_LIGHT
AGE_REQ_NONE, // SLOT_NAYRUS_LOVE
AGE_REQ_NONE, // SLOT_BOTTLE_1
AGE_REQ_NONE, // SLOT_BOTTLE_2
AGE_REQ_NONE, // SLOT_BOTTLE_3
AGE_REQ_NONE, // SLOT_BOTTLE_4
AGE_REQ_ADULT, // SLOT_TRADE_ADULT
AGE_REQ_CHILD, // SLOT_TRADE_CHILD
};
u8 gEquipAgeReqs[][4] = {
{ 0, 1, 0, 0 },
{ 9, 1, 9, 0 },
{ 0, 9, 0, 0 },
{ 9, 9, 0, 0 },
{
AGE_REQ_ADULT, // 0 UPG_QUIVER
AGE_REQ_CHILD, // EQUIP_TYPE_SWORD EQUIP_VALUE_SWORD_KOKIRI
AGE_REQ_ADULT, // EQUIP_TYPE_SWORD EQUIP_VALUE_SWORD_MASTER
AGE_REQ_ADULT // EQUIP_TYPE_SWORD EQUIP_VALUE_SWORD_BIGGORON
},
{
AGE_REQ_NONE, // 0 UPG_BOMB_BAG
AGE_REQ_CHILD, // EQUIP_TYPE_SHIELD EQUIP_VALUE_SHIELD_DEKU
AGE_REQ_NONE, // EQUIP_TYPE_SHIELD EQUIP_VALUE_SHIELD_HYLIAN
AGE_REQ_ADULT // EQUIP_TYPE_SHIELD EQUIP_VALUE_SHIELD_MIRROR
},
{
AGE_REQ_ADULT, // 0 UPG_STRENGTH
AGE_REQ_NONE, // EQUIP_TYPE_TUNIC EQUIP_VALUE_TUNIC_KOKIRI
AGE_REQ_ADULT, // EQUIP_TYPE_TUNIC EQUIP_VALUE_TUNIC_GORON
AGE_REQ_ADULT // EQUIP_TYPE_TUNIC EQUIP_VALUE_TUNIC_ZORA
},
{
AGE_REQ_NONE, // 0 UPG_SCALE
AGE_REQ_NONE, // EQUIP_TYPE_BOOTS EQUIP_VALUE_BOOTS_KOKIRI
AGE_REQ_ADULT, // EQUIP_TYPE_BOOTS EQUIP_VALUE_BOOTS_IRON
AGE_REQ_ADULT // EQUIP_TYPE_BOOTS EQUIP_VALUE_BOOTS_HOVER
},
};
u8 gItemAgeReqs[] = {
1, 9, 9, 0, 0, 9, 1, 9, 9, 9, 0, 0, 0, 9, 1, 9, 1, 0, 0, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
9, 9, 9, 9, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1, 0, 0, 1, 9, 0, 9, 0, 0, 9, 0, 0, 1, 1, 1, 0, 0, 0, 9, 9, 9, 1, 0, 0, 9, 9, 0,
AGE_REQ_CHILD, // ITEM_DEKU_STICK
AGE_REQ_NONE, // ITEM_DEKU_NUT
AGE_REQ_NONE, // ITEM_BOMB
AGE_REQ_ADULT, // ITEM_BOW
AGE_REQ_ADULT, // ITEM_ARROW_FIRE
AGE_REQ_NONE, // ITEM_DINS_FIRE
AGE_REQ_CHILD, // ITEM_SLINGSHOT
AGE_REQ_NONE, // ITEM_OCARINA_FAIRY
AGE_REQ_NONE, // ITEM_OCARINA_OF_TIME
AGE_REQ_NONE, // ITEM_BOMBCHU
AGE_REQ_ADULT, // ITEM_HOOKSHOT
AGE_REQ_ADULT, // ITEM_LONGSHOT
AGE_REQ_ADULT, // ITEM_ARROW_ICE
AGE_REQ_NONE, // ITEM_FARORES_WIND
AGE_REQ_CHILD, // ITEM_BOOMERANG
AGE_REQ_NONE, // ITEM_LENS_OF_TRUTH
AGE_REQ_CHILD, // ITEM_MAGIC_BEAN
AGE_REQ_ADULT, // ITEM_HAMMER
AGE_REQ_ADULT, // ITEM_ARROW_LIGHT
AGE_REQ_NONE, // ITEM_NAYRUS_LOVE
AGE_REQ_NONE, // ITEM_BOTTLE_EMPTY
AGE_REQ_NONE, // ITEM_BOTTLE_POTION_RED
AGE_REQ_NONE, // ITEM_BOTTLE_POTION_GREEN
AGE_REQ_NONE, // ITEM_BOTTLE_POTION_BLUE
AGE_REQ_NONE, // ITEM_BOTTLE_FAIRY
AGE_REQ_NONE, // ITEM_BOTTLE_FISH
AGE_REQ_NONE, // ITEM_BOTTLE_MILK_FULL
AGE_REQ_NONE, // ITEM_BOTTLE_RUTOS_LETTER
AGE_REQ_NONE, // ITEM_BOTTLE_BLUE_FIRE
AGE_REQ_NONE, // ITEM_BOTTLE_BUG
AGE_REQ_NONE, // ITEM_BOTTLE_BIG_POE
AGE_REQ_NONE, // ITEM_BOTTLE_MILK_HALF
AGE_REQ_NONE, // ITEM_BOTTLE_POE
AGE_REQ_CHILD, // ITEM_WEIRD_EGG
AGE_REQ_CHILD, // ITEM_CHICKEN
AGE_REQ_CHILD, // ITEM_ZELDAS_LETTER
AGE_REQ_CHILD, // ITEM_MASK_KEATON
AGE_REQ_CHILD, // ITEM_MASK_SKULL
AGE_REQ_CHILD, // ITEM_MASK_SPOOKY
AGE_REQ_CHILD, // ITEM_MASK_BUNNY_HOOD
AGE_REQ_CHILD, // ITEM_MASK_GORON
AGE_REQ_CHILD, // ITEM_MASK_ZORA
AGE_REQ_CHILD, // ITEM_MASK_GERUDO
AGE_REQ_CHILD, // ITEM_MASK_TRUTH
AGE_REQ_CHILD, // ITEM_SOLD_OUT
AGE_REQ_ADULT, // ITEM_POCKET_EGG
AGE_REQ_ADULT, // ITEM_POCKET_CUCCO
AGE_REQ_ADULT, // ITEM_COJIRO
AGE_REQ_ADULT, // ITEM_ODD_MUSHROOM
AGE_REQ_ADULT, // ITEM_ODD_POTION
AGE_REQ_ADULT, // ITEM_POACHERS_SAW
AGE_REQ_ADULT, // ITEM_BROKEN_GORONS_SWORD
AGE_REQ_ADULT, // ITEM_PRESCRIPTION
AGE_REQ_ADULT, // ITEM_EYEBALL_FROG
AGE_REQ_ADULT, // ITEM_EYE_DROPS
AGE_REQ_ADULT, // ITEM_CLAIM_CHECK
AGE_REQ_ADULT, // ITEM_BOW_FIRE
AGE_REQ_ADULT, // ITEM_BOW_ICE
AGE_REQ_ADULT, // ITEM_BOW_LIGHT
AGE_REQ_CHILD, // ITEM_SWORD_KOKIRI
AGE_REQ_ADULT, // ITEM_SWORD_MASTER
AGE_REQ_ADULT, // ITEM_SWORD_BIGGORON
AGE_REQ_CHILD, // ITEM_SHIELD_DEKU
AGE_REQ_NONE, // ITEM_SHIELD_HYLIAN
AGE_REQ_ADULT, // ITEM_SHIELD_MIRROR
AGE_REQ_NONE, // ITEM_TUNIC_KOKIRI
AGE_REQ_ADULT, // ITEM_TUNIC_GORON
AGE_REQ_ADULT, // ITEM_TUNIC_ZORA
AGE_REQ_NONE, // ITEM_BOOTS_KOKIRI
AGE_REQ_ADULT, // ITEM_BOOTS_IRON
AGE_REQ_ADULT, // ITEM_BOOTS_HOVER
AGE_REQ_CHILD, // ITEM_BULLET_BAG_30
AGE_REQ_CHILD, // ITEM_BULLET_BAG_40
AGE_REQ_CHILD, // ITEM_BULLET_BAG_50
AGE_REQ_ADULT, // ITEM_QUIVER_30
AGE_REQ_ADULT, // ITEM_QUIVER_40
AGE_REQ_ADULT, // ITEM_QUIVER_50
AGE_REQ_NONE, // ITEM_BOMB_BAG_20
AGE_REQ_NONE, // ITEM_BOMB_BAG_30
AGE_REQ_NONE, // ITEM_BOMB_BAG_40
AGE_REQ_CHILD, // ITEM_STRENGTH_GORONS_BRACELET
AGE_REQ_ADULT, // ITEM_STRENGTH_SILVER_GAUNTLETS
AGE_REQ_ADULT, // ITEM_STRENGTH_GOLD_GAUNTLETS
AGE_REQ_NONE, // ITEM_SCALE_SILVER
AGE_REQ_NONE, // ITEM_SCALE_GOLDEN
AGE_REQ_ADULT, // ITEM_GIANTS_KNIFE
};
u8 gAreaGsFlags[] = {
@ -4167,8 +4294,8 @@ void KaleidoScope_Update(PlayState* play)
gSaveContext.health = CVarGetInteger("gFullHealthSpawn", 0) ? gSaveContext.healthCapacity : 0x30;
Audio_QueueSeqCmd(0xF << 28 | SEQ_PLAYER_BGM_MAIN << 24 | 0xA);
gSaveContext.healthAccumulator = 0;
gSaveContext.magicState = 0;
gSaveContext.prevMagicState = 0;
gSaveContext.magicState = MAGIC_STATE_IDLE;
gSaveContext.prevMagicState = MAGIC_STATE_IDLE;
osSyncPrintf(VT_FGCOL(YELLOW));
osSyncPrintf("MAGIC_NOW=%d ", gSaveContext.magic);
osSyncPrintf("Z_MAGIC_NOW_NOW=%d → ", gSaveContext.magicFillTarget);