diff --git a/Makefile b/Makefile index 2876bff1..d2caa70d 100644 --- a/Makefile +++ b/Makefile @@ -59,6 +59,7 @@ CFLAGS := -g -Wall -O2 -mword-relocations \ CFLAGS += $(INCLUDE) -D__3DS__ CXXFLAGS := $(CFLAGS) -fno-exceptions -fno-var-tracking-assignments -std=gnu++17 -Wreorder +CXXFLAGS += -Wno-psabi ASFLAGS := -g $(ARCH) LDFLAGS = -specs=3dsx.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) @@ -245,6 +246,11 @@ $(OUTPUT).elf : $(OFILES) @echo $(notdir $<) @$(bin2o) +#--------------------------------------------------------------------------------- +%.jsonc.o %_jsonc.h : %.jsonc + @echo $(notdir $<) + @$(bin2o) + #--------------------------------------------------------------------------------- .PRECIOUS : %.t3x #--------------------------------------------------------------------------------- diff --git a/data/description_table.jsonc b/data/description_table.jsonc new file mode 100644 index 00000000..ee45ecd8 --- /dev/null +++ b/data/description_table.jsonc @@ -0,0 +1,2187 @@ +{ + /*------------------------------ + | MENU DESCRIPTIONS | *SCREEN WIDTH* + ------------------------------*/ /*--------------------------------------------------*/ + "menuOpenSettingsDesc": [ "Depending on the enabled glitches and item place-", + "ments, some of these may be logically bypassed.", // + "For example, bomb hovering to Ganon's Castle." ], // + "menuGlitchOptionsDesc": [ "These are only taken into account when logic is", // + "set to Glitched." ], // + "menuPersonalizationDesc": [ "These options do not affect seed generation." ], // + "menuIngameDefaultsDesc": [ "These options decide what the ingame options are",// + "set to when creating a save file. The new ingame",// + "options can be changed in the Custom Info Menu." ], + + /*------------------------------ + | PRESET DESCRIPTIONS | *SCREEN WIDTH* + ------------------------------*/ /*--------------------------------------------------*/ + "presetNintendedDesc": [ "Locks the world in a state as intended by the", // + "developers. Start as child and work your way", // + "towards Ganon in a classical way." ], // + "presetAllsanityDesc": [ "ANYTHING ANYWHERE! Both items and entrances." ], // + "presetRacingDesc": [ "Community racing settings." ], // + "presetVanillaDesc": [ "Experience a regular playthrough but with all of",// + "the randomizer's improvements.", // + "", // + "Enable entrance shuffle for an extra challenge!" ], + "presetFullChaosDesc": [ "The hardest and craziest settings possible.", // + "Closes everything as much as possible.", // + "No logic. Anything anywhere.", // + "Full entrance shuffle.", // + "One-hit KO. Max ice traps." ], // + + //Setting descriptions are mostly copied from OoT Randomizer tooltips with minor edits + + /*------------------------------ + | RANDOMIZE SETTINGS | *SCREEN WIDTH* + ------------------------------*/ /*--------------------------------------------------*/ + "openRandomize": [ "Randomize all Open Settings." ], // + "worldRandomize": [ "Randomize all World Settings except for MQ", // + "dungeons." ], // + "shuffleRandomize": [ "Randomize all Shuffle Settings." ], // + "dungeonRandomize": [ "Randomize all Dungeon Shuffle Settings." ], // + // + /*------------------------------ // + | LOGIC | // + ------------------------------*/ // + "logicGlitchless": [ "No glitches are required, but may require some", // + "minor tricks. Add minor tricks to consider for", // + "logic in Logical Tricks." ], // + "logicGlitched": [ "The glitches you enable at the set difficulty", // + "or below may be required.", // + "", // + "WIP feature. Allows glitch logic for the entire", // + "overworld and the following vanilla dungeons:", // + "Deku Tree, Dodongo's Cavern, Jabu Jabu, and", // + "Forest, Water, and Fire Temple." ], // + "logicNoLogic": [ "Maximize randomization, All locations are", // + "considered available. MAY BE IMPOSSIBLE TO BEAT." ], + "logicVanilla": [ "For those who want to play the game normally but",// + "with the improvements of the randomizer. All", // + "locations will contain their vanilla items. This",// + "supercedes all item shuffle, logic, hint, and", // + "item pool settings. You can still use non-vanilla", + "world settings such as adult start or entrance", // + "shuffle, but the game may require glitches to", // + "complete if you do." ], // + /*------------------------------ // + | FOREST | // + ------------------------------*/ // + "forestOpen": [ "Mido no longer blocks the path to the Deku Tree,",// + "and the Kokiri boy no longer blocks the path out",// + "of the forest." ], // + "forestClosed": [ "Beating Deku Tree is logically required to leave",// + "the forest area (Kokiri Forest/Lost Woods/Sacred",// + "Forest Meadow/Deku Tree), while the Kokiri Sword",// + "and a Deku Shield are required to access the Deku", + "Tree. Items needed for this will be guaranteed", // + "inside the forest area. This setting is", // + "incompatible with starting as adult." ], // + "forestClosedDeku": [ "The Kokiri boy no longer blocks the path out of", // + "the forest, but Mido still blocks the path to the", + "Deku Tree, requiring Kokiri Sword and Deku Shield", + "to access the Deku Tree." ], // + /*------------------------------ // + | KAKARIKO GATE | // + ------------------------------*/ // + "kakGateOpen": [ "The gate is always open instead of needing", // + "Zelda's Letter. The Happy Mask Shop opens upon", // + "obtaining Zelda's Letter without needing to show",// + "it to the guard." ], // + "kakGateClosed": [ "The gate and the Happy Mask Shop both remain", // + "closed until showing Zelda's Letter to the guard",// + "in Kakariko." ], // + /*------------------------------ // + | DOOR OF TIME | // + ------------------------------*/ // + "doorOfTimeOpen": [ "The Door of Time starts opened instead of needing", + "to play the Song of Time." ], // + "doorOfTimeClosed": [ "Only an Ocarina and the Song of Time need to be", // + "found to open the Door of Time." ], // + "doorOfTimeIntended": [ "The Ocarina of Time, the Song of Time, and", // + "all Spiritual Stones need to be found to", // + "open the Door of Time." ], // + /*------------------------------ // + | ZORA'S FOUNTAIN | // + ------------------------------*/ // + "fountainNormal": [ "King Zora obstructs the way to Zora's Fountain.", // + "Ruto's Letter must be shown as child in order to",// + "move him for both eras." ], // + "fountainAdult": [ "King Zora is always moved in the adult era. This",// + "means Ruto's Letter is only required to access", // + "Zora's Fountain as child." ], // + "fountainOpen": [ "King Zora starts as moved in both the child and", // + "adult eras. This also removes Ruto's Letter from",// + "the pool since it can't be used." ], // + /*------------------------------ // + | JABU-JABU | // + ------------------------------*/ // + "jabuJabuCloseDesc": [ "Jabu-Jabu's mouth stays closed until a fish is", // + "fed." ], // + "jabuJabuOpenDesc": [ "Jabu-Jabu's mouth is always open." ], // + /*------------------------------ // + | GERUDO FORTRESS | // + ------------------------------*/ // + "gerudoNormal": [ "All 4 carpenters can be rescued." ], // + "gerudoFast": [ "Only the bottom left carpenter must be rescued." ], + "gerudoOpen": [ "The carpenters are rescued from the start of the",// + "game, and if Shuffle Gerudo Card is disabled,", // + "the player starts with the Gerudo Card in the", // + "inventory allowing access to Gerudo Training", // + "Grounds." ], // + /*------------------------------ // + | RAINBOW BRIDGE | // + ------------------------------*/ // + "bridgeOpen": [ "The Rainbow Bridge is always present." ], // + "bridgeVanilla": [ "The Rainbow Bridge requires Shadow and Spirit", // + "Medallions as well as Light Arrows." ], // + "bridgeStones": [ "The Rainbow Bridge requires collecting a", // + "configurable number of Spiritual Stones." ], // + "bridgeMedallions": [ "The Rainbow Bridge requires collecting a", // + "configurable number of Medallions." ], // + "bridgeRewards": [ "The Rainbow Bridge requires collecting a", // + "configurable number of Dungeon Rewards." ], // + "bridgeDungeons": [ "The Rainbow Bridge requires completing a", // + "configurable number of Dungeons.", // + "", // + "Dungeons are considered complete when Link steps",// + "into the blue warp at the end of them." ], // + "bridgeTokens": [ "The Rainbow Bridge requires collecting a", // + "configurable number of Gold Skulltula Tokens." ], // + "bridgeHearts": [ "The Rainbow Bridge requires collecting a", // + "configurable number of Hearts." ], // + /*------------------------------ // + | BRIDGE CONDITIONS | // + ------------------------------*/ // + "bridgeStoneCountDesc": [ "Set the number of Spiritual Stones required to", // + "spawn the Rainbow Bridge." ], // + "bridgeMedallionCountDesc": [ "Set the number of Medallions required to spawn the", + "Rainbow Bridge." ], // + "bridgeRewardCountDesc": [ "Set the number of Dungeon Rewards (Spiritual", // + "Stones and Medallions) required to spawn the", // + "Rainbow Bridge." ], // + "bridgeDungeonCountDesc": [ "Set the number of completed dungeons required to",// + "spawn the Rainbow Bridge." ], // + "bridgeTokenCountDesc": [ "Set the number of Gold Skulltula Tokens required",// + "to spawn the Rainbow Bridge." ], // + "bridgeHeartCountDesc": [ "Set the number of Hearts required to spawn the", // + "Rainbow Bridge." ], // + /*------------------------------ // + | RANDOM GANONS TRIALS | // + ------------------------------*/ // + "randomGanonsTrialsDesc": [ "Sets a random number of required trials to enter",// + "Ganon's Tower." ], // + /*------------------------------ // + | GANON'S TRIAL COUNT | // + ------------------------------*/ // + "ganonsTrialCountDesc": [ "Set the number of trials required to enter", // + "Ganon's Tower. Trials will be randomly selected." ], + /*------------------------------ // + | STARTING AGE | // + ------------------------------*/ // + "ageDesc": [ "Choose which age Link will start as.", // + "", // + "Only the child option is compatible with Closed", // + "Forest.", // + "", // + "Child will also be forced if Door of Time is set",// + "to intended and ocarinas are unshuffled unless you", + "start with an ocarina already in your inventory." ], + /*------------------------------ // + | SHUFFLE ENTRANCES | // + ------------------------------*/ // + "shuffleEntrancesDesc": [ "Shuffle where the entrances between areas lead to.", + "If turned on, select which kinds of entrances you", + "want shuffled in the options below. Note that some", + "types of entrances can have wildly varying", // + "generation times." ], // + // + /*------------------------------ // + | DUNGEON ENTRANCES | // + ------------------------------*/ // + "dungeonEntrancesDesc": [ "Shuffle the pool of dungeon entrances, including",// + "Bottom of the Well, Ice Cavern, and Gerudo", // + "Training Grounds. Shuffling Ganon's Castle can", // + "be enabled separately.", // + "", // + "Additionally, the entrances of Deku Tree, Fire", // + "Temple, Bottom of the Well and Gerudo Training", // + "Ground are opened for both adult and child." ], // + /*------------------------------ // + | BOSS ENTRANCES | // + ------------------------------*/ // + "bossEntrancesDesc": [ "Shuffle the pool of dungeon boss entrances.", // + "This affects the boss rooms of all stone and", // + "medallion dungeons.", // + "", // + "Child and adult boss rooms can be shuffled", // + "separately.", // + "Child may be expected to defeat Phantom Ganon", // + "and/or Bongo Bongo." ], // + /*------------------------------ // + | OVERWORLD ENTRANCES | // + ------------------------------*/ // + "overworldEntrancesDesc": [ "Shuffle the pool of Overworld entrances, which", // + "corresponds to almost all loading zones between", // + "Overworld areas.", // + "", // + "Some entrances are unshuffled to avoid issues:", // + "- Hyrule Castle Courtyard and Garden entrance", // + "- Both Market Back Alley entrances", // + "- Gerudo Valley to Lake Hylia (unless entrances", // + " are decoupled)" ], // + /*------------------------------ // + | INTERIOR ENTRANCES | // + ------------------------------*/ // + "interiorEntrancesOff": [ "Interior entrances will not be shuffled." ], // + "interiorEntrancesSimple": [ "Shuffle the pool of interior entrances which", // + "contains most Houses and all Great Fairies." ], // + "interiorEntrancesAll": [ "An extended version of 'Simple' with some extra", // + "places:", // + "- Windmill", // + "- Link's House", // + "- Temple of Time", // + "- Kakariko Potion Shop." ], // + /*------------------------------ // + | GROTTO ENTRANCES | // + ------------------------------*/ // + "grottoEntrancesDesc": [ "Shuffle the pool of grotto entrances, including", // + "all graves, small Fairy Fountains and the Lost", // + "Woods Stage." ], // + /*------------------------------ // + | OWL DROPS | // + ------------------------------*/ // + "owlDropsDesc": [ "Randomize where Kaepora Gaebora (the Owl) drops", // + "you at when you talk to him at Lake Hylia or at", // + "the top of Death Mountain Trail." ], // + /*------------------------------ // + | WARP SONGS | // + ------------------------------*/ // + "warpSongsDesc": [ "Randomize where each of the 6 warp songs leads to." ], + // + /*------------------------------ // + | OVERWORLD SPAWNS | // + ------------------------------*/ // + "overworldSpawnsDesc": [ "Randomize where you start as Child or Adult when",// + "loading a save in the Overworld. This means you", // + "may not necessarily spawn inside Link's House or",// + "Temple of Time.", // + "", // + "This stays consistent after saving and loading the", + "game again." ], // + /*------------------------------ // + | MIXED ENTRANCE POOLS | // + ------------------------------*/ // + "mixedPoolsDesc": [ "Shuffle entrances into a mixed pool instead of", // + "separate ones. For example, enabling the settings", + "to shuffle grotto, dungeon, and overworld", // + "entrances and selecting grotto and dungeon", // + "entrances here will allow a dungeon to be inside a", + "grotto or vice versa, while overworld entrances", // + "are shuffled in their own separate pool and", // + "indoors stay vanilla." ], // + "mixDungeonsDesc": [ "Dungeon entrances will be part of the mixed pool." ], + "mixOverworldDesc": [ "Overworld entrances will be part of the mixed", // + "pool." ], // + "mixInteriorsDesc": [ "Interior entrances will be part of the mixed pool." ], + "mixGrottosDesc": [ "Grotto entrances will be part of the mixed pool." ], + /*------------------------------ // + | DECOUPLED ENTRANCES | // + ------------------------------*/ // + "decoupledEntrancesDesc": [ "Decouple entrances when shuffling them. This means", + "you are no longer guaranteed to end up back where ", + "you came from when you go back through an", // + "entrance. This also adds the one-way entrance from", + "Gerudo Valley to Lake Hylia in the pool of", // + "overworld entrances when they are shuffled.", // + "Boss entrances are currently excluded from this", // + "and remain coupled regardless." ], // + /*------------------------------ // + | BOMBCHUS IN LOGIC | // + ------------------------------*/ // + "bombchuLogicDesc": [ "Bombchus are properly considered in logic.", // + "They can be replenished in shops, or through", // + "bombchu drops, if those are enabled.", // + "", // + "Bombchu Bowling is opened by bombchus." ], // + /*------------------------------ // + | AMMO DROPS | // + ------------------------------*/ // + "defaultAmmoDropsDesc": [ "Bombs, arrows, seeds, nuts, sticks and", // + "magic jars appear as normal." ], // + "bombchuDropsDesc": [ "Bombs, arrows, seeds, nuts, sticks and", // + "magic jars appear as normal.", // + "Bombchus can sometimes replace bomb drops." ], // + "noAmmoDropsDesc": [ "All ammo drops will be replaced by blue rupees,", // + "except for Deku Sticks.", // + "Ammo upgrades will only refill ammo by 10 units." ], + /*------------------------------ // + | HEART DROPS AND REFILLS | // + ------------------------------*/ // + "defaultHeartDropsDesc": [ "Heart drops will appear as normal.", // + "Health upgrades fully heal Link when picked up.", // + "Fairies heal Link as normal." ], // + "noHeartDropsDesc": [ "Heart drops will be replaced by green rupees.", // + "Health upgrades fully heal Link when picked up.", // + "Fairies heal Link as normal." ], // + "noHeartRefillDesc": [ "Heart drops will appear as normal.", // + "Health upgrades don't heal Link when picked up.", // + "Fairies heal Link by only 3 hearts." ], // + "scarceHeartsDesc": [ "Heart drops will be replaced by green rupees.", // + "Health upgrades don't heal Link when picked up.", // + "Fairies heal Link by only 3 hearts." ], // + /*------------------------------ // + | MQ DUNGEON COUNT | // + ------------------------------*/ // + "mqDungeonCountDesc": [ "Specify the number of Master Quest dungeons to", // + "appear in the game. Which dungeons become Master", + "Quest will be chosen at random." ], // + /*------------------------------ // + | SET MQ DUNGEONS | // + ------------------------------*/ // + "setDungeonTypesDesc": [ "If set, you can choose specific dungeons to be", // + "vanilla, MQ, or random" ], // + /*------------------------------ // + | TRIFORCE HUNT | // + ------------------------------*/ // + "triforceHuntDesc": [ "Pieces of the Triforce have been scattered around", + "the world. Find some of them to beat the game.", // + "", // + "Game is saved on completion, and Ganon's Castle", // + "key is given if beating the game again is desired." ], + "triforcePiecesTotalDesc": [ "Set the total number of pieces that will appear", // + "in the world.", // + "", // + "Hold A to scroll faster." ], // + "triforcePiecesRequiredDesc": [ "Set the number of pieces required to beat the", // + "game.", // + "", // + "Hold A to scroll faster." ], // + /*------------------------------ // + | ENEMY RANDOMIZER | // + ------------------------------*/ // + "enemizerDesc": [ "Randomize most enemies in the game.", // + "", // + "WARNING: Incompatible with Master Quest Logic." ],// + "enemizerListDesc": [ "Scroll to open the Enemy List." ], // + "enemyRandomizedDesc": [ "This enemy will be included in the pool of", // + "random enemies." ], // + "enemyVanillaDesc": [ "This enemy will be excluded from the random pool,", + "but it will appear at its vanilla locations." ], // + "enemyRemovedDesc": [ "This enemy will be excluded from the random pool,", + "and it won't appear at randomized locations.", // + "", // + "Exception: if all possible options for a location", + "are removed, that location will revert to using", // + "its vanilla enemy." ], // + /*------------------------------ // + | SHUFFLE DUNGEON REWARDS | // + ------------------------------*/ // + "shuffleRewardsEndOfDungeon": [ "Medallions and Spiritual Stones will be given as",// + "rewards for beating dungeons.", // + "", // + "This setting will force Link's Pocket to be a", // + "Medallion or Spiritual Stone." ], // + "shuffleRewardsAnyDungeon": [ "Medallions and Spiritual Stones can only appear", // + "inside of dungeons." ], // + "shuffleRewardsOverworld": [ "Medallions and Spiritual Stones can only appear", // + "outside of dungeons." ], // + "shuffleRewardsAnywhere": [ "Medallions and Spiritual Stones can appear", // + "anywhere." ], // + /*------------------------------ // + | LINK'S POCKET | // + ------------------------------*/ // + "linksPocketDungeonReward": [ "Link will start with a Dungeon Reward in his", // + "inventory." ], // + "linksPocketAdvancement": [ "Link will receive a random advancement item at the", + "beginning of the playthrough." ], // + "linksPocketAnything": [ "Link will receive a random item from the item pool", + "at the beginning of the playthrough." ], // + "linksPocketNothing": [ "Link will start with a very useful green rupee." ], + /*------------------------------ // + | SONG SHUFFLE | // + ------------------------------*/ // + "songsSongLocations": [ "Songs will only appear at locations that normally", + "teach songs." ], // + "songsDungeonRewards": [ "Songs appear at the end of dungeons. For major", // + "dungeons, they will be at the boss heart container", + "location. The remaining 4 songs are placed at:", // + "- Zelda's Lullaby Location", // + "- Ice Cavern's Serenade of Water Location", // + "- Bottom of the Well's Lens of Truth Location", // + "- Gerudo Training Ground's Ice Arrow Location" ], // + "songsAllLocations": [ "Songs can appear in any location." ], // + // + /*------------------------------ // + | SHOPSANITY | // + ------------------------------*/ // + "shopsOff": [ "All shop items will be the same as vanilla." ], // + "shopsZero": [ "Vanilla shop items will be shuffled among", // + "different shops." ], // + "shopsOne": [ "Vanilla shop items will be shuffled among", // + "different shops, and each shop will contain", // + "one non-vanilla shop item." ], // + "shopsTwo": [ "Vanilla shop items will be shuffled among", // + "different shops, and each shop will contain", // + "two non-vanilla shop items." ], // + "shopsThree": [ "Vanilla shop items will be shuffled among", // + "different shops, and each shop will contain", // + "three non-vanilla shop items." ], // + "shopsFour": [ "Vanilla shop items will be shuffled among", // + "different shops, and each shop will contain", // + "four non-vanilla shop items." ], // + "shopsRandom": [ "Vanilla shop items will be shuffled among", // + "different shops, and each shop will contain", // + "1-4 non-vanilla shop items." ], // + "shopPriceRandom": [ "Prices of shuffled shop items are random", // + "varying between 0 and 295 rupees." ], // + "shopPriceAffordable": [ "Prices of shuffled shop items are 10 rupees." ], // + "shopPriceChild": [ "Prices of shuffled shop items are random", // + "varying between 0 and 99 rupees." ], // + "shopPriceAdult": [ "Prices of shuffled shop items are random", // + "varying between 0 and 200 rupees." ], // + "shopPriceGiant": [ "Prices of shuffled shop items are random", // + "varying between 0 and 500 rupees." ], // + "shopPriceTycoon": [ "Prices of shuffled shop items are random", // + "varying between 0 and 999 rupees." ], // + /*------------------------------ // + | TOKENSANITY | // + ------------------------------*/ // + "tokensOff": [ "GS locations will not be shuffled." ], // + "tokensDungeon": [ "This only shuffles the GS locations that are", // + "within dungeons, increasing the value of most", // + "dungeons and making internal dungeon exploration",// + "more diverse." ], // + "tokensOverworld": [ "This only shuffles the GS locations that are", // + "outside of dungeons." ], // + "tokensAllTokens": [ "Effectively adds 100 new locations for items to", // + "appear." ], // + // + /*------------------------------ // + | SCRUB SHUFFLE | // + ------------------------------*/ // + "scrubsOff": [ "Only the 3 Scrubs that give one-time items in the", + "vanilla game (PoH, Deku Nut capacity, and Deku", // + "Stick capacity) will have random items." ], // + "scrubsAffordable": [ "All Scrub prices will be reduced to 10 rupees each" ], + "scrubsExpensive": [ "All Scrub prices will be their vanilla prices.", // + "This will require spending over 1000 rupees on", // + "Scrubs." ], // + "scrubsRandomPrices": [ "All Scrub prices will be between 0-95 rupees. This", + "will on average be very, very expensive overall." ], + /*------------------------------ // + | SHUFFLE COWS | // + ------------------------------*/ // + "shuffleCowsDesc": [ "Enabling this will let cows give you items upon", // + "performing Epona's song in front of them. There", // + "are 9 cows, and an extra in MQ Jabu." ], // + // + /*------------------------------ // + | SHUFFLE KOKIRI SWORD | // + ------------------------------*/ // + "kokiriSwordDesc": [ "Enabling this shuffles the Kokiri Sword into the",// + "item pool.", // + "", // + "This will require extensive use of sticks until", // + "the sword is found." ], // + /*------------------------------ // + | SHUFFLE MASTER SWORD | // + ------------------------------*/ // + "masterSwordDesc": [ "Enabling this shuffles the Master Sword into the",// + "item pool.", // + "", // + "Adult Link will start with a second free item", // + "instead of the Master Sword. If you haven't found", + "the Master Sword before facing Ganon, you won't", // + "receive it during the fight." ], // + /*------------------------------ // + | SHUFFLE OCARINAS | // + ------------------------------*/ // + "ocarinasDesc": [ "Enabling this shuffles the Fairy Ocarina and the",// + "Ocarina of Time into the item pool.", // + "", // + "This will require finding an Ocarina before being", + "able to play songs." ], // + /*------------------------------ // + | SHUFFLE WEIRD EGG | // + ------------------------------*/ // + "weirdEggDesc": [ "Enabling this shuffles the Weird Egg from Malon", // + "into the item pool.", // + "This will require finding the Weird Egg to talk to", + "Zelda in Hyrule Castle, which in turn locks", // + "rewards from Impa, Saria, Malon, and Talon." ], // + /*------------------------------ // + | SHUFFLE ZELDAS LETTER | // + ------------------------------*/ // + "zeldasLetterDesc": [ "Enabling this shuffles Zelda's Letter into the", // + "item pool.", // + "This will require finding the letter to open the",// + "Happy Mask Shop and the gate in Kakariko if it is", + "set to closed." ], // + /*------------------------------ // + | SHUFFLE GERUDO TOKEN | // + ------------------------------*/ // + "gerudoTokenDesc": [ "Enabling this shuffles the Gerudo Token into the",// + "item pool.", // + "", // + "The Gerudo Token is required to enter the Gerudo",// + "Training Ground." ], // + /*------------------------------ // + | SHUFFLE MAGIC BEANS | // + ------------------------------*/ // + "magicBeansDesc": [ "Enabling this adds a pack of 10 beans to the item", + "pool and changes the Magic Bean Salesman to sell a", + "random item at a price of 60 rupees." ], // + /*------------------------------ // + | SHUFFLE FROG SONG RUPEES | // + ------------------------------*/ // + "frogSongRupeesDesc": [ "Enabling this adds 5 Purple Rupees to the item", // + "pool and shuffles the rewards from playing Zelda's", + "Lullaby, Epona's Song, Saria's Song, Sun's Song,",// + "and Song of Time to the frogs in Zora's River." ],// + /*------------------------------ // + | SHUFFLE MERCHANTS | // + ------------------------------*/ // + "merchantsDesc": [ "Enabling this changes Medigoron, Granny and the", // + "Carpet Salesman to sell a random item once at a", // + "high price (100 for Granny, 200 for the others).",// + "", // + "A Giant's Knife and a pack of Bombchus will be", // + "added to the item pool, and one of the bottles", // + "will contain a Blue Potion." ], // + "merchantsHintsDesc": [ "These hints will make the merchants tell you", // + "which item they're selling.", // + "", // + "The Hint Clarity setting will affect how they", // + "refer to the item." ], // + /*------------------------------ // + | SHUFFLE ADULT TRADE | // + ------------------------------*/ // + "adultTradeDesc": [ "Enabling this adds all of the adult trade quest", // + "items to the pool, each of which can be traded", // + "for a unique reward. You will be able to choose", // + "which of your owned adult trade items is visible",// + "in the inventory by selecting the item and using",// + "the L and R buttons. If disabled, only the Claim",// + "Check will be found in the pool." ], // + /*------------------------------ // + | SHUFFLE CHEST MINIGAME | // + ------------------------------*/ // + "chestMinigameDesc": [ "The 5 key chests in the Treasure Chest Shop will",// + "be randomized, and the 6 keys will be added to the", + "pool. The rupee chests will be replaced by traps.", + "Also, the shop owner is on vacation, so he can't",// + "close any chests or doors once you leave.", // + "", // + "If you choose the \"pack\" option, you will get", // + "all the keys at once, in a single item." ], // + /*------------------------------ // + | SHUFFLE ENEMY SOULS | // + ------------------------------*/ // + "enemySoulDesc": [ "Enemies will be invincible until you find their", // + "\"soul\".", // + "Each enemy type will have a soul added into the", // + "item pool.", // + "", // + "You can exclude some enemies by adding their", // + "souls in the Starting Inventory.", // + "", // + "WARNING: Incompatible with Master Quest Logic." ],// + /*------------------------------ // + | SHUFFLE OCARINA BUTTONS | // + ------------------------------*/ // + "ocarinaButtonsDesc": [ "Enabling this locks all Ocarina inputs, and adds",// + "5 new items to find that each unlock one of the 5", + "Ocarina notes.", // + "", // + "They can also be added to the Starting Inventory." ], + /*------------------------------ // + | SHUFFLE FREESTANDING RUPEES | // + ------------------------------*/ // + "shuffleRupeesDesc": [ "Shuffles all freestanding visible rupees", // + "that are placed in the world without player", // + "intervention. So it does include Rupees that are",// + "placed in other objects like boulders, but it", // + "doesn't include Wonder Items or Rupees that spawn", + "from the Goron City spinning pot or the pots in", // + "Shadow Temple." ], // + /*------------------------------ // + | MAPS AND COMPASSES | // + ------------------------------*/ // + "mapCompassStartWith": [ "Maps and Compasses are given to you from the", // + "start. This will add a small amount of money and",// + "refill items to the pool." ], // + "mapCompassVanilla": [ "Maps and Compasses will appear in their vanilla", // + "locations." ], // + "mapCompassOwnDungeon": [ "Maps and Compasses can only appear in their", // + "respective dungeon." ], // + "mapCompassAnyDungeon": [ "Maps and Compasses can only appear in a dungeon,",// + "but not necessarily the dungeon they are for." ], // + "mapCompassOverworld": [ "Maps and Compasses can only appear outside of", // + "dungeons." ], // + "mapCompassAnywhere": [ "Maps and Compasses can appear anywhere in the", // + "world." ], // + /*------------------------------ // + | SMALL KEYS | // + ------------------------------*/ // + "smallKeyStartWith": [ "Small Keys are given to you from the start so you", + "won't have to worry about locked doors. An easier", + "mode." ], // + "smallKeyVanilla": [ "Small Keys will appear in their vanilla locations.", + "You start with 3 keys in Spirit Temple MQ because", + "the vanilla key layout is not beatable in logic." ], + "smallKeyOwnDungeon": [ "Small Keys can only appear in their respective", // + "dungeon. If Fire Temple is not a Master Quest", // + "dungeon, the door to the Boss Key chest will be", // + "unlocked." ], // + "smallKeyAnyDungeon": [ "Small Keys can only appear inside of any dungeon,", + "but won't necessarily be in the dungeon that the",// + "key is for. A difficult mode since it is more", // + "likely to need to enter a dungeon multiple times." ], + "smallKeyOverworld": [ "Small Keys can only appear outside of dungeons.", // + "You may need to enter a dungeon multiple times to", + "gain items to access the overworld locations with", + "the keys required to finish a dungeon." ], // + "smallKeyAnywhere": [ "Small Keys can appear anywhere in the world. A", // + "difficult mode since it is more likely to need to", + "enter a dungeon multiple times." ], // + /*------------------------------ // + | GERUDO FORTRESS KEYS | // + ------------------------------*/ // + "gerudoKeysVanilla": [ "Gerudo Fortress Keys will appear in their vanilla", + "location, dropping from fighting Gerudo guards", // + "that attack when trying to free the jailed", // + "carpenters." ], // + "gerudoKeysAnyDungeon": [ "Gerudo Fortress Keys can only appear inside of", // + "dungeons." ], // + "gerudoKeysOverworld": [ "Gerudo Fortress Keys can only appear outside of", // + "dungeons." ], // + "gerudoKeysAnywhere": [ "Gerudo Fortress Keys can appear anywhere in the", // + "world." ], // + /*------------------------------ // + | Key Rings | // + ------------------------------*/ // + "keyRingDesc": [ "Selected key ring dungeons will have all of their", + "keys found at once in a ring rather than", // + "individually.", // + "", // + "For example, instead of shuffling 5 Forest Temple", + "small keys into the pool, you will find a single",// + "key ring which will give you all 5 keys at once." ], + /*------------------------------ // + | BOSS KEYS | // + ------------------------------*/ // + "bossKeyStartWith": [ "Boss Keys are given to you from the start so you",// + "won't have to worry about boss doors. An easier", // + "mode." ], // + "bossKeyVanilla": [ "Boss Keys will appear in their vanilla locations." ], + "bossKeyOwnDungeon": [ "Boss Keys can only appear in their respective", // + "dungeon." ], // + "bossKeyAnyDungeon": [ "Boss Keys can only appear inside of any dungeon,",// + "but won't necessarily be in the dungeon that the",// + "key is for. A difficult mode since it is more", // + "likely to need to enter a dungeon multiple times." ], + "bossKeyOverworld": [ "Boss Keys can only appear outside of dungeons.", // + "You may need to enter a dungeon without the boss",// + "key to get items required to find the key in the",// + "overworld." ], // + "bossKeyAnywhere": [ "Boss Keys can appear anywhere in the world. A", // + "difficult mode since it is more likely to need to", + "enter a dungeon multiple times." ], // + /*------------------------------ // + | GANON'S CASTLE BOSS KEY | // + ------------------------------*/ // + "ganonKeyStartWith": [ "Ganon's Castle Boss Key is given to you from the",// + "start and you don't have to worry about finding it" ], + "ganonKeyVanilla": [ "Ganon's Castle Boss Key will appear in the vanilla", + "location." ], // + "ganonKeyOwnDungeon": [ "Ganon's Castle Boss Key can only appear inside", // + "Ganon's Castle." ], // + "ganonKeyAnyDungeon": [ "Ganon's Castle Boss Key can only appear inside of", + "a dungeon, but not necessarily Ganon's Castle." ],// + "ganonKeyOverworld": [ "Ganon's Castle Boss Key can only appear outside of", + "dungeons." ], // + "ganonKeyAnywhere": [ "Ganon's Castle Boss Key can appear anywhere in the", + "world." ], // + "ganonKeyLACS": [ "These settings put the boss key on the Light Arrow", + "Cutscene location, from Zelda in Temple of Time as", + "adult, with differing requirements." ], // + /*------------------------------ // + | LACS CONDITIONS | // + ------------------------------*/ // + "lacsMedallionCountDesc": [ "Set the number of Medallions required to trigger",// + "the Light Arrow Cutscene." ], // + "lacsStoneCountDesc": [ "Set the number of Spiritual Stones required to", // + "trigger the Light Arrow Cutscene." ], // + "lacsRewardCountDesc": [ "Set the number of Dungeon Rewards (Spiritual", // + "Stones and Medallions) required to trigger the", // + "Light Arrow Cutscene." ], // + "lacsDungeonCountDesc": [ "Set the number of completed dungeons required to",// + "trigger the Light Arrow Cutscene.", // + "", // + "Dungeons are considered complete when Link steps",// + "into the blue warp at the end of them." ], // + "lacsTokenCountDesc": [ "Set the number of Gold Skulltula Tokens required",// + "to trigger the Light Arrow Cutscene." ], // + "lacsHeartCountDesc": [ "Set the number of Hearts required to trigger the",// + "Light Arrow Cutscene." ], // + /*------------------------------ // + | SKIP CHILD STEALTH | // + ------------------------------*/ // + "childStealthDesc": [ "The crawlspace into Hyrule Castle goes straight to", + "Zelda, skipping the guards." ], // + /*------------------------------ // + | SKIP TOWER ESCAPE | // + ------------------------------*/ // + "skipTowerEscapeDesc": [ "The tower escape sequence between Ganondorf and", // + "Ganon will be skipped." ], // + /*------------------------------ // + | SKIP EPONA RACE | // + ------------------------------*/ // + "skipEponaRaceDesc": [ "Epona can be summoned with Epona's Song without", // + "needing to race Ingo." ], // + /*------------------------------ // + | SKIP MINIGAME PHASES | // + ------------------------------*/ // + "skipMinigamePhasesDesc": [ "Completing the second objective in the Dampe Race", + "and Gerudo Archery on the first attempt will give", + "both rewards at once for that minigame." ], // + /*------------------------------ // + | FREE SCARECROW | // + ------------------------------*/ // + "freeScarecrowDesc": [ "Pulling out the Ocarina near a spot at which", // + "Pierre can spawn will do so, without needing", // + "the song." ], // + /*------------------------------ // + | FOUR POES CUTSCENE | // + ------------------------------*/ // + "fourPoesDesc": [ "The cutscene with the 4 poes in Forest Temple will", + "be skipped. If the cutscene is not skipped, it can", + "be exploited to reach the basement early." ], // + /*------------------------------ // + | LAKE HYLIA OWL | // + ------------------------------*/ // + "lakeHyliaOwlDesc": [ "The owl flight cutscene in Lake Hylia will be", // + "skipped. This cutscene lets you see what item", // + "is on top of the laboratory roof." ], // + /*------------------------------ // + | BIG POE TARGET COUNT | // + ------------------------------*/ // + "bigPoeTargetCountDesc": [ "The Poe buyer will give a reward for turning in", // + "the chosen number of Big Poes." ], // + /*------------------------------ // + | NUM REQUIRED CUCCOS | // + ------------------------------*/ // + "numRequiredCuccosDesc": [ "The cucco lady will give a reward for returning", // + "this many of her cuccos to the pen." ], // + /*------------------------------ // + | KING ZORA SPEED | // + -------------------------------*/ // + "kingZoraSpeedFast": [ "King Zora will move out of the way in 1 shuffle" ], + // + "kingZoraSpeedVanilla": [ "King Zora will move out of the way in 26 shuffles" ], + // + "kingZoraSpeedRandom": [ "King Zora will move out of the way in 1 to 128", // + "shuffles, with lower numbers being more common" ],// + "kingZoraSpeedCustom": [ "Set the exact number of shuffles King Zora will", // + "take to move out of the way." ], // + /*------------------------------ // + | COMPLETE MASK QUEST | // + ------------------------------*/ // + "completeMaskDesc": [ "Once the happy mask shop is opened, all masks", // + "will be available to be borrowed." ], // + /*------------------------------ // + | QUICK TEXT | // + ------------------------------*/ // + "quickTextDesc0": [ "Quick text will be unchanged, requiring", // + "frame-perfect inputs like in the vanilla game." ],// + "quickTextDesc1": [ "Every text box will be completable by pressing B",// + "at any point while it's scrolling." ], // + "quickTextDesc2": [ "Every text box will auto-complete instantly.", // + "No scrolling allowed!" ], // + "quickTextDesc3": [ "Holding B will advance and close text boxes", // + "automatically, except for choice selections." ], // + /*------------------------------ // + | SKIP SONG REPLAYS | // + ------------------------------*/ // + "skipSongReplaysDesc": [ "The automatic replay after you play a song will", // + "be skipped.", // + "You can choose to keep the sfx anyway, but you", // + "will have control of Link during it." ], // + /*------------------------------ // + | KEEP FW WARP POINT | // + ------------------------------*/ // + "keepFWWarpPointDesc": [ "The Farore's Wind warp point will stay active", // + "after having been warped to. The old point will", // + "need to be dispelled before setting a new one." ],// + /*------------------------------ // + | FAST BUNNY HOOD | // + ------------------------------*/ // + "fastBunnyHoodDesc": [ "The Bunny Hood mask behaves like it does in", // + "Majora's Mask and makes you run 50% faster." ], // + /*------------------------------ // + | RACING | // + ------------------------------*/ // + "racingDesc": [ "Overrides personalization options that could", // + "affect how fast a seed is beaten." ], // + // + /*------------------------------ // + | GOSSIP STONE HINTS | // + ------------------------------*/ // + "gossipStonesHintsDesc": [ "Gossip Stones can be made to give hints about", // + "where items can be found.", // + "Different settings can be chosen to decide which",// + "item is needed to speak to Gossip Stones. Choosing", + "to stick with the Mask of Truth will make the", // + "hints very difficult to obtain.", // + "Hints for 'on the way of the hero' are locations",// + "that contain items that are required to beat the",// + "game." ], // + // + /*------------------------------ // + | HINT CLARITY | // + ------------------------------*/ // + "obscureHintsDesc": [ "Sets the difficulty of hints.", // + "Obscure: Hints are unique for each thing, but", // + "the writing may be confusing.", // + "E.g. Kokiri Sword > a butter knife" ], // + "ambiguousHintsDesc": [ "Sets the difficulty of hints.", // + "Ambiguous: Hints are clearly written, but may", // + "refer to more than one thing.", // + "E.g. Kokiri Sword > a sword" ], // + "clearHintsDesc": [ "Sets the difficulty of hints.", // + "Clear: Hints are clearly written and are unique", // + "for each thing.", // + "E.g. Kokiri Sword > the Kokiri Sword" ], // + /*------------------------------ // + | HINT DISTRIBUTION | // + ------------------------------*/ // + "uselessHintsDesc": [ "Only junk hints." ], // + "balancedHintsDesc": [ "Recommended hint spread." ], // + "strongHintsDesc": [ "More useful hints." ], // + "veryStrongHintsDesc": [ "Many powerful hints." ], // + "playthroughHintsDesc": [ "The playthrough locations will be hinted at what",// + "they contain and in what general area they are.", // + "", // + "Not compatible with No Logic." ], // + // + /*------------------------------ // + | BONUS GOSSIP HINTS | // + ------------------------------*/ // + "bonusGossipHintsDesc": [ "Adds Sun's Song and warp songs to gossip stone", // + "hints after all playthrough hints have been set." ], + // + /*------------------------------ // + | MISCELLANEOUS HINTS | // + ------------------------------*/ // + "miscHintsDesc": [ "Toggle some specific hints at locations other", // + "than Gossip Stones." ], // + "totAltarHintsDesc": [ "The Temple of Time altar will reveal the locations", + "of the Spiritual Stones as child and the", // + "Medallions as adult, but only if Compasses Show", // + "Rewards is disabled.", // + "", // + "It will also always reveal the requirements for", // + "the Door of Time as child, and for Ganon Boss Key", + "and Rainbow Bridge as adult." ], // + "ganonHintsDesc": [ "Talking to Ganondorf in his boss room will tell", // + "you the location of the Light Arrows and, if it", // + "was shuffled, the Master Sword.", // + "", // + "When trials are on, Sheik will appear to relay", // + "these hints in Ganon's Castle." ], // + "dampeHintDesc": [ "Reading Dampe's diary will reveal the location", // + "of a single progressive hookshot." ], // + "skulltulaHintDesc": [ "Talking to a cursed House of Skulltula resident", // + "will tell you the reward they will give you for", // + "removing their curse." ], // + "fishingHintsDesc": [ "The aquarium at the fishing pond will show what", // + "reward you can win as your current age." ], // + /*------------------------------ // + | MAP AND COMPASS GIVES INFO | // + ------------------------------*/ // + "compassesShowRewardsDesc": [ "Obtaining a dungeon compass will hint at the", // + "location of a Spiritual Stone or Medallion.", // + "", // + "If rewards are at the end of dungeons, the compass", + "for dungeon X will show what reward is at X.", // + "Otherwise, it will show the area for the reward", // + "that, in the vanilla game, is located at X.", // + "", // + "These hints will appear in the Gear menu on the", // + "empty reward slots." ], // + "compassesShowWotHDesc": [ "The in-game menu will reveal whether each", // + "dungeon is on the Way of the Hero, a barren", // + "location, or neither, if the compass for that", // + "dungeon has been collected." ], // + "mapsShowDungeonModesDesc": [ "If any Master Quest dungeons will be randomly", // + "shuffled, the in-game menu will reveal whether", // + "it is in its Vanilla or Master Quest form, if", // + "the map for the dungeon has been collected.", // + "Ganon's Castle and Gerudo Training Grounds are", // + "always revealed, as they do not have maps." ], // + /*------------------------------ // + | DAMAGE MULTIPLIER | // + ------------------------------*/ // + "damageMultiDesc": [ "Changes the amount of damage taken.", // + "", // + "If set to OHKO, Link will die in one hit." ], // + /*------------------------------ // + | BONK DAMAGE | // + ------------------------------*/ // + "bonkDamageDesc": [ "Choose how many Hearts of damage you'll take when", + "hitting a wall or object during a roll.", // + "", // + "Damage is unaffected by the damage multiplier", // + "setting, but it will respect Nayru's Love and", // + "Double Defense." ], // + /*------------------------------ // + | PERMADEATH | // + ------------------------------*/ // + "permadeathDesc": [ "Dying deletes your save file and kicks you back", // + "out to the main menu." ], // + /*------------------------------ // + | GLOOM MODE | // + ------------------------------*/ // + "gloomModeOffDesc": [ "Enabling this setting will make your hearts", // + "permanently disappear on various conditions." ], // + "gloomModeDeathDesc": [ "Delete 1 heart when getting a Game Over.", // + "", // + "The Permadeath setting, if enabled, will be", // + "changed to take effect when you lose all hearts." ], + "gloomModeDamageDesc": [ "Delete 1 heart when losing health for any reason,", + "except continuous elemental damage from being", // + "burned or frozen.", // + "", // + "Double Defense will require 2 hits per heart." ], // + "gloomModeCollisionDesc": [ "Delete 1 heart not only when losing health, but", // + "also when any collision is detected: getting hit",// + "during invincibility frames or blocking an attack", + "with your shield count as collisions.", // + "", // + "Double Defense will require 2 hits per heart.", // + "", // + "WARNING: THE GAME MAY BE IMPOSSIBLE TO BEAT", // + "because you can still be expected to use a shield", + "(for example to reflect Twinrova's attacks)." ], // + "gloomModeEmptyDesc": [ "Hearts will be deleted when they become empty." ],// + /*------------------------------ // + | STARTING TIME | // + ------------------------------*/ // + "startingTimeDesc": [ "Change up Link's sleep routine." ], // + // + /*------------------------------ // + | ALL LOCATIONS REACHABLE | // + ------------------------------*/ // + "locationsReachableDesc": [ "When this options is enabled, the randomizer will", + "guarantee that every item is obtainable and every", + "location is reachable. When disabled, only", // + "required items and locations to beat the game", // + "will be guaranteed reachable." ], // + /*------------------------------ // + | NIGHT GS EXPECT SUNS | // + ------------------------------*/ // + "nightGSDesc": [ "GS Tokens that can only be obtained during the", // + "night expect you to have Sun's Song to collect", // + "them. This prevents needing to wait until night", // + "for some locations." ], // + // + /*------------------------------ // + | CHEST ANIMATIONS | // + ------------------------------*/ // + "chestAnimDesc": [ "Choose if you want the slow animation to play", // + "if a chest contains a major item." ], // + // + /*------------------------------ // + | CHEST APPEARANCE | // + ------------------------------*/ // + "chestVanillaDesc": [ "Chests will appear as they do in the base game." ], + "chestTextureDesc": [ "Chest texture will reflect its contents", // + "regardless of size.", // + "", // + "Major Items -> Gilded Chests", // + "Boss Keys -> Fancy Chests", // + "Small Keys -> Silver Chests", // + "Hearts -> Heart Chests", // + "Gold Skulltula Tokens -> Webbed Chests", // + "Everything else -> Wooden Chests" ], // + "chestSizeTextureDesc": [ "In addition to the texture change, major items", // + "and boss keys will be in big chests, and", // + "everything else will be in small chests." ], // + "chestClassicDesc": [ "This is the behavior of CSMC in previous", // + "versions of the randomizer.", // + "", // + "Major Items -> Big Wooden Chests", // + "Lesser Items -> Small Wooden Chests", // + "Boss Keys -> Big Fancy Chests", // + "Small Keys -> Small Fancy Chests" ], // + "chestAgonyDesc": [ "The Chest Appearance Mod will only apply", // + "after obtaining the Shard of Agony." ], // + // + /*------------------------------ // + | EXTRA SHIELDS | // + ------------------------------*/ // + "extraShieldsDesc": [ "Allow keeping more than 1 Deku and Hylian shield",// + "in the inventory, so if you lose one you can then", + "re-equip it immediately. The shield count will be", + "displayed next to the item name.\n", // + "You can choose if extra shields should only be", // + "obtainable from randomized items or if they should", + "also be repeatedly buyable from shops." ], // + /*------------------------------ // + | INGAME SPOILERS | // + ------------------------------*/ // + "ingameSpoilersShowDesc": [ "Every spoiler is shown. Visibility can be toggled", + "from the in-game options menu." ], // + "ingameSpoilersHideDesc": [ "Hides the spheres page and only shows a", // + "location's item after it has been found." ], // + // + /*------------------------------ // + | MENU OPENING BUTTON | // + ------------------------------*/ // + "menuButtonDesc": [ "Choose which button will bring up the Custom", // + "Information Menu." ], // + // + /*------------------------------ // + | ARROW SWITCHING BUTTON | // + ------------------------------*/ // + "arrowSwitchDesc": [ "Choose how you want to cycle through the arrow", // + "types while you're aiming the bow.", // + "The touch screen option refers to the middle part", + "of the screen where the map is displayed." ], // + // + /*------------------------------ // + | START WITH CONSUMABLES | // + ------------------------------*/ // + "startWithConsumablesDesc": [ "Start the game with maxed out Deku Sticks and Deku", + "Nuts." ], // + // + /*------------------------------ // + | START WITH MAX RUPEES | // + ------------------------------*/ // + "startWithMaxRupeesDesc": [ "Start the game with a full wallet.", // + "Wallet upgrades will also fill the wallet." ], // + /*------------------------------ // + | STARTING HEALTH | // + ------------------------------*/ // + "startingHealthDesc": [ "If you start with 0 hearts, Link will be instantly", + "KO'd not only by any damage source, but also by", // + "recovery hearts and fairies. Sometimes guards too.", + "You can safely pick up Heart Pieces and Containers", + "though, and the effects will end when you obtain",// + "at least one heart." ], // + // + /*------------------------------ // + | STARTING BUNNY HOOD | // + ------------------------------*/ // + "startingBunnyHoodDesc": [ "NOTE: Staring with the bunny hood is experimental.", + "Currently the bunny hood will get overwriten when ", + "you obtain the Weird Egg and you will need to get ", + "it again afterwards." ], // + // + /*------------------------------ // + | ITEM POOL | // + ------------------------------*/ // + "itemPoolPlentiful": [ "Extra major items are added to the pool." ], // + "itemPoolBalanced": [ "Original item pool." ], // + "itemPoolScarce": [ "Some excess items are removed, including health", // + "upgrades." ], // + "itemPoolMinimal": [ "Most excess items are removed." ], // + // + /*------------------------------ // + | ICE TRAPS | // + ------------------------------*/ // + "iceTrapsOff": [ "All Ice Traps are removed." ], // + "iceTrapsNormal": [ "Only Ice Traps from the base item pool are placed." ], + "iceTrapsExtra": [ "Chance to add extra Ice Traps when junk items are", + "added to the itempool." ], // + "iceTrapsMayhem": [ "All added junk items will be Ice Traps." ], // + "iceTrapsOnslaught": [ "All junk items will be replaced by Ice Traps, even", + "those in the base pool." ], // + /*------------------------------ // + | REMOVE DOUBLE DEFENSE | // + ------------------------------*/ // + "removeDDDesc": [ "If set the double defense item will be removed", // + "from the item pool for balanced and plentiful." ],// + /*------------------------------ // + | PROGRESSSIVE GORON SOWRD | // + ------------------------------*/ // + "progGoronSword": [ "Giant's Knife will always be found", // + "before Biggoron's Sword. Medigoron only starts", // + "selling new knives once the Giant's Knife", // + "has been found and broken." ], // + /*------------------------------ // + | USE FARORE'S WIND ANYWHERE | // + ------------------------------*/ // + "faroresWindAnywhereDesc": [ "Farore's Wind can be used outside of dungeons." ],// + // + /*------------------------------ // + | LIFT AGE RESTRICTIONS | // + ------------------------------*/ // + "ageRestrictionsDesc": [ "Remove age restrictions for inventory items.", // + "Select \"Choose\" to open the list of individual",// + "options.", // + "", // + "Most of the items won't appear correctly when", // + "used as the wrong version of Link, but they'll be", + "fully functional otherwise." ], // + // + /*------------------------------ // + | AGE RESTRICTIONS IN LOGIC | // + ------------------------------*/ // + "ageItemsInLogicDesc": [ "Using items as the wrong age may be required to", // + "beat the seed." ], // + /*------------------------------ // + | ENABLE ADULT DEKU STICK | // + ------------------------------*/ // + "adultStickDesc": [ "Adult Link can wield a Deku Stick.", // + "It will look like the N64 Deku Stick, but with a",// + "simpler texture." ], // + // + /*------------------------------ // + | ENABLE ADULT BOOMERANG | // + ------------------------------*/ // + "adultBoomerangDesc": [ "Adult Link can throw the boomerang." ], // + // + /*------------------------------ // + | ENABLE CHILD HAMMER | // + ------------------------------*/ // + "childHammerDesc": [ "Child Link can swing the Megaton Hammer." ], // + // + /*------------------------------ // + | ENABLE ADULT SLINGSHOT | // + ------------------------------*/ // + "adultSlingshotDesc": [ "Adult Link can use the Slingshot (but it looks", // + "like the Bow)." ], // + // + /*------------------------------ // + | ENABLE CHILD BOW | // + ------------------------------*/ // + "childBowDesc": [ "Child Link can use the Bow. It will look like the", + "Slingshot, but will shoot arrows." ], // + // + /*------------------------------ // + | ENABLE CHILD HOOKSHOT | // + ------------------------------*/ // + "childHookshotDesc": [ "Child Link can use the Hookshot/Longshot.", // + "The hook will look like a small bomb." ], // + /*------------------------------ // + | ENABLE CHILD IRON BOOTS | // + ------------------------------*/ // + "childIronBootsDesc": [ "Child Link can equip the Iron Boots." ], // + // + /*------------------------------ // + | ENABLE CHILD HOVER BOOTS | // + ------------------------------*/ // + "childHoverBootsDesc": [ "Child Link can equip the Hover Boots." ], // + // + /*------------------------------ // + | ENABLE ADULT MASKS | // + ------------------------------*/ // + "adultMasksDesc": [ "Adult Link can equip masks.", // + "", // + "This setting will not change the logic." ], // + // + /*------------------------------ // + | ENABLE ADULT KOKIRI SWORD | // + ------------------------------*/ // + "adultKokiriSwordDesc": [ "Adult Link can equip the Kokiri Sword." ], // + // + /*------------------------------ // + | ENABLE CHILD MASTER SWORD | // + ------------------------------*/ // + "childMasterSwordDesc": [ "Child Link can equip the Master Sword." ], // + // + /*------------------------------ // + | ENABLE CHILD BIGGORON SWORD | // + ------------------------------*/ // + "childBiggoronSwordDesc": [ "Child Link can equip the Biggoron Sword and the", // + "Giant's Knife." ], // + // + /*------------------------------ // + | ENABLE ADULT DEKU SHIELD | // + ------------------------------*/ // + "adultDekuShieldDesc": [ "Adult Link can equip the Deku Shield." ], // + // + /*------------------------------ // + | ENABLE CHILD MIRROR SHIELD | // + ------------------------------*/ // + "childMirrorShieldDesc": [ "Child Link can equip the Mirror Shield." ], // + // + /*------------------------------ // + | ENABLE CHILD GORON TUNIC | // + ------------------------------*/ // + "childGoronTunicDesc": [ "Child Link can equip the Goron Tunic." ], // + // + /*------------------------------ // + | ENABLE CHILD ZORA TUNIC | // + ------------------------------*/ // + "childZoraTunicDesc": [ "Child Link can equip the Zora Tunic." ], // + // + /*------------------------------ // + | RESTORE ISG | // + ------------------------------*/ // + "restoreISGdesc": [ "The Infinite Sword Glitch will work like in OoT.",// + "", // + "Specifically, interrupting a crouch stab will", // + "activate the glitch, and putting away or pulling",// + "out items will not cancel it." ], // + /*------------------------------ // + | GK DURABILITY | // + ------------------------------*/ // + "gkDurabilityVanilla": [ "The durability will always be set to 8." ], // + "gkDurabilityRandomRisk": [ "Each Giant's Knife will get a random durability", // + "between 1 and 128, with low being more common,", // + "and with an average of 15." ], // + "gkDurabilityRandomSafe": [ "Each Giant's Knife will get a random durability", // + "between 10 and 50, with an average of 30." ], // + // + /*------------------------------ // + | RUPEES AS AMMO | // + ------------------------------*/ // + "retroAmmoDesc": [ "If you run out of ammo or magic, you'll use", // + "rupees instead." ], // + /*------------------------------ // + | MULTIPLAYER | // + ------------------------------*/ // + "mp_EnabledDesc": [ "Enables multiplayer.", // + "Other players will always be seen and heard", // + "regardless of the other settings." ], // + "mp_SharedProgressDesc": [ "Progress and certain actors will be synced between", + "everyone in the network that has this option on,",// + "the same seed hash, and the same sync id." ], // + "mp_SyncIdDesc": [ "Limits shared progress to only sync with other", // + "players that have the same sync ID. This is only",// + "necessary to set if multiple groups of players", // + "play on the same seed hash, but only want to share", + "their progress with certan people.", // + "For example, when doing a 2v2 race.", // + "", // + "Does not affect seed generation." ], // + "mp_SharedHealthDesc": [ "Syncs health when shared progress is on,", // + "otherwise just shares the damage and recovery." ],// + "mp_SharedRupeesDesc": [ "Syncs rupees when shared progress is on,", // + "otherwise just shares the gain and loss." ], // + "mp_SharedAmmoDesc": [ "Syncs ammo when shared progress is on,", // + "otherwise just shares the gain and loss." ], // + // + /*------------------------------ // + | INGAME DEFAULTS | // + ------------------------------*/ // + "naviNotificationsDesc": [ "Adjust how much Navi should bother you.", // + "Silenced prevents it completely, while Constant", // + "can be used to allow repeated attempts at related", + "glitches without having to reload the save." ], // + "ignoreMaskReactionDesc": [ "Causes NPCs to respond normally when wearing", // + "masks. Does not apply to trade quest dialouges." ], + // + /*------------------------------ // + | NAVI & TRAIL COLORS | // + ------------------------------*/ // + "naviColorsDesc": [ "Inner color is for the main light orb, outer color", + "is for the aura.", // + "", // + "The Rainbow option will make the color change", // + "continuously in a 3 seconds loop." ], // + "necessarySimpleModeDesc": [ "For boomerang and sword trails, OoT3D uses a", // + "special texture that doesn't support every color.", + "", // + "Unsupported colors will always use the plain", // + "texture from OoT instead:", // + "- Black and Purple sword trails", // + "- White, Black and Purple boomerang trails", // + "- Random or Custom colors without at least one", // + " maxed out RGB component." ], // + "alwaysSimpleModeDesc": [ "All boomerang and sword trails will use the plain", + "texture from OoT, regardless of what color is", // + "chosen." ], // + // + /*------------------------------ // + | COLORED KEYS | // + ------------------------------*/ // + "coloredKeysDesc": [ "If set, small key models will be colored", // + "differently depending on which dungeon they can be", + "used in. Forest Temple keys are green. Fire Temple", + "keys are red. etc." ], // + "coloredBossKeysDesc": [ "If set, boss key models will be colored", // + "differently depending on which dungeon they can be", + "used in. The Forest Temple boss key is green. The ", + "Fire Temple boss key is red. etc." ], // + /*------------------------------ // + | MIRROR WORLD | // + ------------------------------*/ // + "mirrorWorldOffDesc": [ "The world will not be mirrored." ], // + "mirrorWorldOnDesc": [ "The world will be mirrored." ], // + "mirrorWorldSceneDesc": [ "Some regions will be mirrored while others won't." ], + "mirrorWorldEntranceDesc": [ "Different entrances to the same region will alter", + "whether it is mirrored or not." ], // + "mirrorWorldRandomDesc": [ "Whether the world is mirrored may change after", // + "every loading zone inconsistently." ], // + /*------------------------------ // + | SOLD OUT COSMETIC SHOP MODEL | // + ------------------------------*/ // + "betaSoldOutDesc": [ "The game contains an unused model for sold out", // + "items in shops. It's a remade version of the N64",// + "model, spelling \"Sold Out\" in English.", // + "", // + "This setting enables its use in shops." ], // + /*------------------------------ // + | SOULLESS ENEMIES LOOK | // + ------------------------------*/ // + "soullessVanillaDesc": [ "Soulless enemies will appear normal." ], // + "soullessTexturelessDesc": [ "Soulless enemies will appear with no textures and", + "a shaded selectable color applied to their bodies." ], + "soullessGrayscaleDesc": [ "Soulless enemies will appear in black and white." ], + "soullessPurpleFlamesDesc": [ "Soulless enemies will appear with purple flames", // + "around them, and their bodies will be invisible." ], + "soullessFlashingDesc": [ "Soulless enemies will flash between visible and", // + "invisible on every frame." ], // + /*------------------------------ // + | SHUFFLE MUSIC | // + ------------------------------*/ // + "musicRandoDesc": [ "Randomize the music in the game." ], // + "shuffleBGMDesc": [ "Shuffle background music.", // + "Mixed allows any BGM to appear anywhere.", // + "The group categories are Area Themes, Event Music,", + "and Battle Themes.", // + "\"Own\" is for Custom Music, limiting the original", + "music to only appear at its original place." ], // + "shuffleMelodiesDesc": [ "Shuffle played-once music.", // + "Mixed allows any melody to appear anywhere.", // + "The group categories are Fanfares,", // + "and Ocarina Songs.", // + "\"Own\" is for Custom Music, limiting the original", + "music to only appear at its original place." ], // + "customMusicDesc": [ "Add custom music to the pool. The sound archive", // + "has to be placed in the Custom Music folder." ], // + "customMusicOnlyDesc": [ "Excludes the game's original music from the pool.", + "If there's not enough custom music, the original",// + "song will be used." ], // + /*------------------------------ // + | SHUFFLE SFX | // + ------------------------------*/ // + "shuffleSFXOff": [ "Sound effects will stay vanilla." ], // + "shuffleSFXAll": [ "All sound effects will be shuffled." ], // + "shuffleSFXSceneSpecific": [ "All sound effects will be shuffled, but will also", + "be different in each scene." ], // + "shuffleSFXChaos": [ "Each sound effect will become random about", // + "every second." ], // + "shuffleSFXCategorically": [ "Sound effects will be shuffled in categories.", // + "", // + "The sound may get annoying fast when disabled." ],// + /*------------------------------ // + | OCARINA INSTRUMENT | // + ------------------------------*/ // + "ocarinaInstrDesc": [ "Change the instrument used when playing the", // + "ocarina." ], // + "ocarinaInstrRandomDesc": [ "A random instrument from the list will be chosen." ], + "ocarinaInstrSceneDesc": [ "The instrument will be different in each scene." ], + /*------------------------------ // + | RANDOM TRAP DAMAGE TYPE | // + ------------------------------*/ // + "randomTrapDmgDesc": [ "All traps will be the base game ice trap" ], // + // + "basicTrapDmgDesc": [ "All alternative traps will cause a small damage", // + "and no other negative effects" ], // + // + "advancedTrapDmgDesc": [ "Choose which advanced traps may appear from the", // + "list below" ], // + // + "fireTrapDesc": [ "This trap will set you on fire, burning your", // + "Deku Shield if it's equipped." ], // + // + "antiFairyTrapDesc": [ "This dangerous fairy will inflict up to 8 hearts",// + "of damage, but it usually doesn't kill you if you", + "have less than that." ], // + // + "rupoorTrapDesc": [ "This rupee will make you poor instead of rich" ], // + "rupoorTrapSeverityDesc": [ "Rupees lost when getting a rupoor" ], // + "curseTrapsDesc": [ "Some traps will apply status effects for 1 minute." ], + "screenTrapsDesc": [ "Extra curses are added that rotate the screen." ],// + // + /*------------------------------ // + | EXTRA ARROW EFFECTS | // + ------------------------------*/ // + "extraArrowEffectsDesc": [ "Ice Arrows will act like blue fire, melting red", // + "ice and breaking mud walls in Dodongo's Cavern.", // + "", // + "Light Arrows will activate Sun Switches like in", // + "Majora's Mask." ], // + // + /*------------------------------ // + | HYPER ACTORS | // + ------------------------------*/ // + "hyperActorsDesc": [ "Powers up the selected actors, allowing them to", // + "move and act twice as fast!" ], // + // + "hyperBossesDesc": [ "Affects all of the main bosses, including both", // + "Ganon phases." ], // + // + "hyperMiddleBossesDesc": [ "Affects all middle bosses, like Dark Link and", // + "Dead Hand. This also includes Iron Knuckles and", // + "Stalfos." ], // + // + "hyperEnemiesDesc": [ "Affects all regular enemies." ], // + // + /*------------------------------ // + | FREE CAMERA | // + ------------------------------*/ // + "freeCamDesc": [ "Use the C-stick to control the camera on new 3DS",// + "systems and Citra.", // + "", // + "Go to Personalization Settings > Ingame Defaults",// + "for camera control options." ], // + // + /*------------------------------ // + | RANDOM GS LOCATIONS | // + ------------------------------*/ // + "randomGsLocationsDesc": [ "Moves Gold Skulltulas to different locations", // + "around the same area as the original.", // + "The age they appear in is always the same as the",// + "original. If it hides during the night mostly", // + "depends on if the sun can reach it.", // + "They will never be in generic areas, such as", // + "Business Scrub grottos, Fairy Fountains, etc.", // + "Some new locations are only available with certain", + "settings enabled, like tricks and glitches.", // + "WIP feature. Most dungeon locations are the same." ], + // + "gsLocGuaranteeNewDesc": [ "Excludes the original location from the Gold", // + "Skulltula's available locations pool.", // + "", // + "If no new locations are available, the original", // + "will be used regardless." ], // + // + /*------------------------------ // + | RANDOM SONG NOTES | // + ------------------------------*/ // + "randomSongNotesDesc": [ "Randomize the notes for each ocarina song.", // + "Regular songs will be 3 notes repeated twice.", // + "Warp songs will be between 5 and 8 notes." ], // + //--------------// + /*------------------------------ // + | DETAILED LOGIC EXPLANATIONS | // + ------------------------------*/ // + "ToggleLogicNoneDesc": [ "Disables all the Detailed Logic tricks." ], // + "ToggleLogicNoviceDesc": [ "Enables only the easier Detailed Logic tricks" ], // + "ToggleLogicIntermediateDesc": [ "Enables all but the harder Detailed Logic tricks." ], + "ToggleLogicExpertDesc": [ "Enables all the Detailed Logic tricks." ], // + // + "LogicGrottosWithoutAgonyDesc": [ "Difficulty: Novice", // + "Grottos can be accessed without Shard of Agony,", // + "simply by knowing where they are located." ], // + "LogicVisibleCollisionDesc": [ "Difficulty: Novice", // + "The closed Kakariko Village Gate can be crossed", // + "when coming from Death Mountain Trail.", // + "Useful for Entrance Randomiser." ], // + "LogicFewerTunicRequirementsDesc": [ "Difficulty: Novice", // + "Allows the following possible without Tunics:", // + "- Enter Water Temple.", // + "- Enter Fire Temple. Only the first floor", // + " is accessible, and not Volvagia.", // + "- Zora's Fountain Bottom Freestanding PoH.", // + "- Gerudo Training Grounds Underwater Silver Rupee", + "Chest. May need to make multiple trips." ], // + "LogicLostWoodsGSBeanDesc": [ "Difficulty: Novice", // + "You can collect the token with a precise Hookshot", + "use, as long as you can kill the Skulltula first.", + "It can be killed using Longshot, Bow, Bombchus", // + "or Din's Fire." ], // + "LogicLabDivingDesc": [ "Difficulty: Novice", // + "Remove the Iron Boots in the midst of Hookshotting", + "the underwater crate" ], // + "LogicLabWallGSDesc": [ "Difficulty: Intermediate", // + "The jump slash to actually collect the token is", // + "somewhat precise" ], // + "LogicGraveyardPoHDesc": [ "Difficulty: Novice", // + "Using a precise moving setup you can obtain the", // + "Piece of Heart by having the Boomerang interact", // + "with it along the return path." ], // + "LogicChildDampeRacePoHDesc": [ "Difficulty: Intermediate", // + "It is possible to complete the second dampe race",// + "as child in under a minute, but it is a strict", // + "time limit." ], // + "LogicGVHammerChestDesc": [ "Difficulty: Novice", // + "The chest can be reached by sidehopping between", // + "the wall and the east most hammer rock." ], // + "LogicGerudoKitchenDesc": [ "Difficulty: Intermediate", // + "The logic normally guarantees one of Bow,", // + "Hookshot, or Hover Boots." ], // + "LogicGerudoChildClimbDesc": [ "Difficulty: Intermediate", // + "A precise jump allows child to climb the ledge", // + "after the kitchen room." ], // + "LogicLensWastelandDesc": [ "Difficulty: Expert", // + "By memorizing the path, you can travel through the", + "Wasteland without using the Lens of Truth to see",// + "the Poe. The equivalent trick for going in reverse", + "through the Wasteland is \"Reverse Wasteland\"." ], + "LogicReverseWastelandDesc": [ "Difficulty: Expert", // + "By memorizing the path, you can travel through the", + "Wasteland in reverse." ], // + "LogicColossusGSDesc": [ "Difficulty: Expert", // + "Somewhat precise. If you kill enough Leevers you",// + "can get enough of a break to take some time to aim", + "more carefully." ], // + "LogicOutsideGanonsGSDesc": [ "Difficulty: Intermediate", // + "Can be killed with a precise sidehop jumpslash", // + "from the top of the broken arch." ], // + "LogicManOnRoofDesc": [ "Difficulty: Novice", // + "Can be reached by side-hopping off the watchtower." ], + "LogicWindmillPoHHookshotDesc": [ "Difficulty: Novice", // + "Adult Link can reach the upper area of the windmill", + "using the hookshot and a midair jump slash." ], // + "LogicDMTBombableDesc": [ "Difficulty: Expert", // + "Child Link can blow up the wall using a nearby", // + "bomb flower. You must backwalk with the flower and", + "then quickly throw it toward the wall." ], // + "LogicDMTSoilGSDesc": [ "Difficulty: Intermediate", // + "Bugs will go into the soft soil even while the", // + "boulder is still blocking the entrance if dropped", + "from above. Then, using a precise moving setup you", + "can kill the Gold Skulltula and obtain the token by", + "having the Boomerang collect it while returning." ], + "LogicDMTSummitHoverDesc": [ "Difficulty: Intermediate", // + "By rolling around the lower boulder with hover", // + "boots and grabbing the ledge with the higher", // + "boulder near the wall, you'll be able to grab the", + "ledge above it to reach the summit." ], // + "LogicDMCPlatformJumpDesc": [ "Difficulty: Novice", // + "Adult can reach these rupees by jumping down from", + "the upper part of DMC, without scarecrow/longshot." ], + "LogicLinkGoronDinsDesc": [ "Difficulty: Intermediate", // + "The timing is quite awkward." ], // + "LogicGoronCityLeftMostDesc": [ "Difficulty: Novice", // + "A precise backwalk starting from on top of the", // + "crate and ending with a precisely-timed backflip",// + "can reach this chest without needing either the", // + "Hammer or Silver Gauntlets." ], // + "LogicGoronCityPotDesc": [ "Difficulty: Expert", // + "A Bombchu can be used to stop the spinning pot,", // + "but it can be quite finicky to get it to work." ],// + "LogicGoronCityPotWithStrengthDesc": [ "Difficulty: Intermediate", // + "Allows for stopping the Goron City Spinning Pot", // + "using a bomb flower alone, requiring strength in",// + "lieu of inventory explosives." ], // + "LogicChildRollingWithStrengthDesc": [ "Difficulty: Expert", // + "Use the bombflower on the stairs or near", // + "Medigoron. Timing is tight, especially without", // + "backwalking." ], // + "LogicCraterUpperToLowerDesc": [ "Difficulty: Intermediate", // + "With the Hammer, you can jump slash the rock twice", + "in the same jump in order to destroy it before you", + "fall into the lava." ], // + "LogicCraterBeanPoHWithHoversDesc": [ "Difficulty: Expert", // + "Hover from the base of the bridge near Goron City", + "and walk up the very steep slope." ], // + "LogicBiggoronBoleroDesc": [ "Difficulty: Intermediate", // + "Playing a warp song normally causes a trade item",// + "to spoil immediately, however, it is possible use", + "Bolero to reach Biggoron and still deliver the Eye", + "Drops before they spoil. If you do not wear the", // + "Goron Tunic, the heat timer inside the crater will", + "override the trade item's timer. When you exit to", + "Death Mountain Trail you will have one second to",// + "show the Eye Drops before they expire." ], // + "LogicZoraRiverLowerDesc": [ "Difficulty: Novice", // + "Adult can reach this PoH with a precise jump, no",// + "Hover Boots required." ], // + "LogicZoraRiverUpperDesc": [ "Difficulty: Novice", // + "Adult can reach this PoH with a precise jump, no",// + "Hover Boots required." ], // + "LogicZoraRiverRupeesJumpDesc": [ "Difficulty: Novice", // + "Adult can reach these rupees by jumping down from", + "the lullaby platform no Iron Boots required." ], // + "LogicZFGreatFairyDesc": [ "Difficulty: Novice", // + "Destroying the boulders blocking the hidden area",// + "with silver gauntlets and hammer lets you pass", // + "under the wall to the great fairy fountain." ], // + "LogicDekuB1WebsWithBowDesc": [ "Difficulty: Novice", // + "All spider web walls in the Deku Tree basement can", + "be burnt as adult with just a bow by shooting", // + "through torches. This trick only applies to the", // + "circular web leading to Gohma ], the two vertical", + "webs are always in logic. Backflip onto the chest", + "near the torch at the bottom of the vine wall.", // + "With precise positioning you can shoot through the", + "torch to the right edge of the circular web." ], // + "LogicDekuB1SkipDesc": [ "Difficulty: Intermediate", // + "A precise jump can be used to skip needing to use", + "the Slingshot to go around B1 of the Deku Tree. If", + "used with the \"Closed Forest\" setting, a", // + "Slingshot will not be guaranteed to exist", // + "somewhere inside the Forest. This trick applies to", + "both Vanilla and Master Quest." ], // + "LogicDekuBasementGSDesc": [ "Difficulty: Intermediate", // + "Can be defeated by doing a precise jump slash." ],// + "LogicDCStaircaseDesc": [ "Difficulty: Intermediate", // + "The Bow can be used to knock down the stairs with", + "two well-timed shots." ], // + "LogicDCJumpDesc": [ "Difficulty: Novice", // + "Jump is adult only." ], // + "LogicDCSlingshotSkipDesc": [ "Difficulty: Expert", // + "With precise platforming, child can cross the", // + "platforms while the flame circles are there. When", + "enabling this trick, it's recommended that you", // + "also enable the Adult variant: \"Dodongo's Cavern", + "Spike Trap Room Jump without Hover Boots\"." ], // + "LogicDCScarecrowGSDesc": [ "Difficulty: Intermediate", // + "You can jump off an Armos Statue to reach the", // + "alcove with the Gold Skulltula. It takes quite a",// + "long time to pull the statue the entire way. The",// + "jump to the alcove can be a bit picky when done", // + "as child." ], // + "LogicJabuBossGSAdultDesc": [ "Difficulty: Intermediate", // + "You can easily get over to the door to the near", // + "boss area early with Hover Boots. The tricky part", + "is getting through the door without being able to", + "use a box to keep the switch pressed. One way is",// + "to quickly roll from the switch and open the door", + "before it closes." ], // + "LogicJabuScrubJumpDiveDesc": [ "Difficulty: Novice", // + "Standing above the underwater tunnel leading to", // + "the scrub, jump down and swim through the tunnel.", + "This allows adult to access the scrub with no", // + "Scale or Iron Boots." ], // + "LogicForestOutsideBackdoorDesc": [ "Difficulty: Intermediate", // + "With a precise jump slash from above, you can", // + "reach the backdoor to the west courtyard without",// + "Hover Boots. Applies to both Vanilla and Master", // + "Quest." ], // + "LogicForestDoorFrameDesc": [ "Difficulty: Intermediate", // + "A precise Hover Boots movement from the upper", // + "balconies in this courtyard can be used to get on", + "top of the door frame. Applies to both Vanilla and", + "Master Quest. In Vanilla, from on top the door", // + "frame you can summon Pierre, allowing you to", // + "access the falling ceiling room early. In Master",// + "Quest, this allows you to obtain the GS on the", // + "door frame as adult without Hookshot or Song of", // + "Time." ], // + "LogicForestOutdoorEastGSDesc": [ "Difficulty: Novice", // + "Precise Boomerang throws can allow child to kill",// + "the Skulltula and collect the token." ], // + "LogicFireBossDoorJumpDesc": [ "Difficulty: Intermediate", // + "The Fire Temple Boss Door can be reached with a", // + "precise jump. You must be touching the side wall",// + "of the room so that Link will grab the ledge from", + "farther away than is normally possible." ], // + "LogicFireStrengthDesc": [ "Difficulty: Expert", // + "A precise jump can be used to skip pushing the", // + "block. This also allows child to reach the block." ], + "LogicFireScarecrowDesc": [ "Difficulty: Novice", // + "Also known as \"Pixelshot\". The Longshot can", // + "reach the target on the elevator itself, allowing", + "you to skip needing to spawn the scarecrow." ], // + "LogicFireFlameMazeDesc": [ "Difficulty: Expert", // + "If you move quickly you can sneak past the edge of", + "a flame wall before it can rise up to block you.",// + "To do it without taking damage is more precise.", // + "Allows you to progress without needing either a", // + "Small Key or Hover Boots." ], // + "LogicFireSongOfTimeDesc": [ "Difficulty: Intermediate", // + "A precise jump can be used to reach this room." ],// + "LogicWaterTempleTorchLongshotDesc": [ "Difficulty: Novice", // + "Stand on the eastern side of the central pillar", // + "and longshot the torches on the bottom level.", // + "Swim through the corridor and float up to the top", + "level. This allows access to this area and lower",// + "water levels without Iron Boots. The majority of",// + "the tricks that allow you to skip Iron Boots in", // + "the Water Temple are not going to be relevant", // + "unless this trick is first enabled." ], // + "LogicWaterTempleUpperBoostDesc": [ "Difficulty: Expert", // + "Stand on the corner closest to the upper ledge", // + "where you play Zelda's Lullaby to raise the water", + "and put a bomb down behind you. Hold forward when", + "the bomb explodes and Link should jump just far", // + "enough to grab the ledge." ], // + "LogicWaterCentralBowDesc": [ "Difficulty: Intermediate", // + "A very precise Bow shot can hit the eye switch", // + "from the floor above. Then, you can jump down into", + "the hallway and make through it before the gate", // + "closes. It can also be done as child, using the", // + "Slingshot instead of the Bow." ], // + "LogicWaterCentralGSFWDesc": [ "Difficulty: Novice", // + "If you set Farore's Wind inside the central pillar", + "and then return to that warp point after raising",// + "the water to the highest level, you can obtain", // + "this Skulltula Token with Hookshot or Boomerang." ], + "LogicWaterCrackedWallNothingDesc": [ "Difficulty: Expert", // + "A precise jump slash (among other methods) will", // + "get you to the cracked wall without needing the", // + "Hover Boots or to raise the water to the middle", // + "level. This trick supersedes \"Water Temple", // + "Cracked Wall with Hover Boots\"." ], // + "LogicWaterCrackedWallHoversDesc": [ "Difficulty: Expert", // + "With a midair side-hop while wearing the Hover", // + "Boots, you can reach the cracked wall without", // + "needing to raise the water up to the middle level." ], + "LogicWaterBossKeyRegionDesc": [ "Difficulty: Intermediate", // + "With precise Hover Boots movement it is possible",// + "to reach the boss key chest's region without", // + "needing the Longshot. It is not necessary to take", + "damage from the spikes. The Gold Skulltula Token",// + "in the following room can also be obtained with", // + "just the Hover Boots." ], // + "LogicWaterBKJumpDiveDesc": [ "Difficulty: Intermediate", // + "Stand on the very edge of the raised corridor", // + "leading from the push block room to the rolling", // + "boulder corridor. Face the gold skulltula on the",// + "waterfall and jump over the boulder corridor floor", + "into the pool of water, swimming right once", // + "underwater. This allows access to the boss key", // + "room without Iron boots." ], // + "LogicWaterNorthBasementLedgeJumpDesc": [ "Difficulty: Novice", // + "In the northern basement there's a ledge from", // + "where, in vanilla Water Temple, boulders roll out", + "into the room. Normally to jump directly to this",// + "ledge logically requires the Hover Boots, but with", + "precise jump, it can be done without them. This", // + "trick applies to both Vanilla and Master Quest." ], + "LogicWaterDragonAdultDesc": [ "Difficulty: Expert", // + "Normally you need both Hookshot and Iron Boots to", + "hit the switch and swim through the tunnel to get", + "to the chest. But by hitting the switch from dry",// + "land, using one of Bombchus, Hookshot, or Bow, it", + "is possible to skip one or both of those", // + "requirements. After the gate has been opened, a", // + "well-timed dive with at least the Silver Scale", // + "could be used to swim through the tunnel." ], // + "LogicWaterDragonJumpDiveDesc": [ "Difficulty: Expert", // + "If you come into the dragon statue room from the",// + "serpent river, you can jump down from above and", // + "get into the tunnel without needing either Iron", // + "Boots or a Scale. This trick applies to both", // + "Vanilla and Master Quest. In Vanilla, you must", // + "shoot the switch from above with the Bow, and then", + "quickly get through the tunnel before the gate", // + "closes." ], // + "LogicWaterRiverGSDesc": [ "Difficulty: Novice", // + "Standing on the exposed ground toward the end of",// + "the river, a precise Longshot use can obtain the",// + "token." ], // + "LogicWaterFallingPlatformGSDesc": [ "Difficulty: Intermediate", // + "If you stand on the very edge of the platform,", // + "this Gold Skulltula can be obtained with only the", + "Hookshot." ], // + "LogicSpiritLowerAdultSwitchDesc": [ "Difficulty: Novice", // + "A bomb can be used to hit the switch on the", // + "ceiling, but it must be thrown from a particular",// + "distance away and with precise timing." ], // + "LogicSpiritChildBombchuDesc": [ "Difficulty: Intermediate", // + "A carefully-timed Bombchu can hit the switch." ], // + "LogicSpiritWallDesc": [ "Difficulty: Expert", // + "The logic normally guarantees a way of dealing", // + "with both the Beamos and the Walltula before", // + "climbing the wall." ], // + "LogicSpiritLobbyGSDesc": [ "Difficulty: Intermediate", // + "Standing on the highest part of the arm of the", // + "statue, a precise Boomerang throw can kill and", // + "obtain this Gold Skulltula. You must throw the", // + "Boomerang slightly off to the side so that it", // + "curves into the Skulltula, as aiming directly at",// + "it will clank off of the wall in front." ], // + "LogicSpiritMapChestDesc": [ "Difficulty: Intermediate", // + "To get a line of sight from the upper torch to the", + "map chest torches, you must pull an Armos statue",// + "all the way up the stairs." ], // + "LogicSpiritSunChestDesc": [ "Difficulty: Expert", // + "Using the blocks in the room as platforms you can", + "get lines of sight to all three torches. The timer", + "on the torches is quite short so you must move", // + "quickly in order to light all three." ], // + "LogicShadowFireArrowEntryDesc": [ "Difficulty: Expert", // + "It is possible to light all of the torches to open", + "the Shadow Temple entrance with just Fire Arrows,", + "but you must be very quick, precise, and strategic", + "with how you take your shots." ], // + "LogicShadowUmbrellaDesc": [ "Difficulty: Expert", // + "A very precise Hover Boots movement from off of", // + "the lower chest can get you on top of the crushing", + "spikes without needing to pull the block. Applies", + "to both Vanilla and Master Quest." ], // + "LogicShadowFreestandingKeyDesc": [ "Difficulty: Intermediate", // + "Release the Bombchu with good timing so that it", // + "explodes near the bottom of the pot." ], // + "LogicShadowStatueDesc": [ "Difficulty: Novice", // + "By sending a Bombchu around the edge of the gorge,", + "you can knock down the statue without needing a", // + "Bow. Applies in both vanilla and MQ Shadow." ], // + "LogicShadowBongoDesc": [ "Difficulty Expert", // + "Using precise sword slashes, Bongo Bongo can be", // + "defeated without using projectiles.", // + "This trick is much more difficult when done with",// + "Kokiri Sword vs Master Sword or Biggorron Sword.",// + "Useful for Boss Entrance Randomizer." ], // + "LogicChildDeadhandDesc": [ "Difficulty: Novice", // + "Requires 10 stick slashes." ], // + "LogicGtgWithoutHookshotDesc": [ "Difficulty: Expert", // + "The final silver rupee on the ceiling can be", // + "reached by being pulled up into it by the", // + "Wallmaster.", // + "Then, you must also reach the exit of the room", // + "without the use of the Hookshot. If you move", // + "quickly, you can sneak past the edge of a", // + "flame wall before it can rise up to block you.", // + "To do so without taking damage is more precise" ],// + "LogicGtgFakeWallDesc": [ "Difficulty: Novice", // + "A precise Hover Boots use from the top of the", // + "chest can allow you to grab the ledge without", // + "needing the usual requirements." ], // + "LogicLensSpiritDesc": [ "Difficulty: Novice", // + "Removes the requirements for the Lens of Truth in", + "Spirit Temple." ], // + "LogicLensShadowDesc": [ "Difficulty: Novice", // + "Removes the requirements for the Lens of Truth in", + "Shadow Temple before the invisible moving platform" ], + "LogicLensShadowBackDesc": [ "Difficulty: Intermediate", // + "Removes the requirements for the Lens of Truth in", + "Shadow Temple beyond the invisible moving platform" ], + "LogicLensBotwDesc": [ "Difficulty: Intermediate", // + "Removes the requirements for the Lens of Truth in", + "Bottom of the Well." ], // + "LogicLensGtgDesc": [ "Difficulty: Novice", // + "Removes the requirements for the Lens of Truth in", + "Gerudo Training Grounds." ], // + "LogicLensCastleDesc": [ "Difficulty: Intermediate", // + "Removes the requirements for the Lens of Truth in", + "Ganon's Castle." ], // + "LogicLensJabuMQDesc": [ "Difficulty: Novice", // + "Removes the requirements for the Lens of Truth in", + "Jabu Jabu's Belly MQ." ], // + "LogicLensSpiritMQDesc": [ "Difficulty: Novice", // + "Removes the requirements for the Lens of Truth in", + "Spirit Temple MQ." ], // + "LogicLensShadowMQDesc": [ "Difficulty: Novice", // + "Removes the requirements for the Lens of Truth in", + "Shadow Temple MQ before the invisible moving ", // + "platform" ], // + "LogicLensShadowMQBackDesc": [ "Difficulty: Intermediate", // + "Removes the requirements for the Lens of Truth in", + "Shadow Temple MQ beyond the invisible moving ", // + "platform" ], // + "LogicLensBotwMQDesc": [ "Difficulty: Novice", // + "Removes the requirements for the Lens of Truth in", + "Bottom of the Well MQ." ], // + "LogicLensGtgMQDesc": [ "Difficulty: Novice", // + "Removes the requirements for the Lens of Truth in", + "Gerudo Training Grounds MQ." ], // + "LogicLensCastleMQDesc": [ "Difficulty: Intermediate", // + "Removes the requirements for the Lens of Truth in", + "Ganon's Castle MQ." ], // + "LogicSpiritTrialHookshotDesc": [ "Difficulty: Intermediate", // + "A precise jump off of an Armos can collect the", // + "highest rupee." ], // + // + "LogicFlamingChestsDesc": [ "Difficulty: Novice", // + "The chests encircled in flames in Gerudo Training", + "Grounds and in Spirit Temple can be opened by", // + "running into the flames while Link is invincible",// + "after taking damage." ], // + // + /*------------------------------ // + | GLITCHES | // + ------------------------------*/ // + "ToggleAllGlitchesDesc": [ "Set all glitches to the selected difficulty, or", // + "the closest available below." ], // + /* Restricted Items */ // + "GlitchRestrictedItemsDescDisabled": [ "Swapping an item that can normally be used in an",// + "area with one that would be dimmed will let you", // + "use that item for 1 frame after closing your", // + "inventory. This can be useful on its own or in", // + "combination with other glitches." ], // + "GlitchRestrictedItemsDescNovice": [ "You may be required to use restricted items." ], // + /* Super Stab */ // + "GlitchSuperStabDescDisabled": [ "Forcing sticks to unequip during a crouch stab by", + "breaking it and moving them in your inventory has", + "the effect of hitting all spherical collision." ],// + "GlitchSuperStabDescNovice": [ "You may be expected to hit switches or kill gold",// + "skulltulas with a super stab." ], // + /* ISG */ // + "GlitchISGDescDisabled": [ "Shortened to ISG, allows Link's melee weapon to", // + "be in a constant swinging state. Simply touching",// + "objects with this causes them to get hit.", // + "Putting away the weapon while ISG is on hits", // + "any object with a spherical hitbox,", // + "such as small skulltulas. It is initiated by", // + "interrupting a crouch stab." ], // + "GlitchISGDescNovice": [ "ISG may be required to kill certain enemies,", // + "or to Bomb Hover when enabled." ], // + "GlitchISGDescIntermediate": [ "You may be required to use a bomb to activate ISG." ], + "GlitchISGDescAdvanced": [ "You may be required to use a bomb to activate ISG", + "repeatedly or while under attack." ], // + /* Hover */ // + "GlitchHoverDescDisabled": [ "Hovering allows Link to consecutively backflip", // + "in the air without falling. By shielding", // + "damage with ISG on, Link will stay in midair.", // + "While bombs aren't always required, this option", // + "will always expect them to be used.", // + "", // + "Requires ISG to be enabled." ], // + "GlitchHoverDescNovice": [ "Only bombchus are required for hovering." ], // + "GlitchHoverDescIntermediate": [ "Some hovers may require that you start from flat",// + "terrain, which requires somewhat precise timing." ], + "GlitchHoverDescAdvanced": [ "Usage of regular bombs will now also be expected,", + "which may require consecutive precise timings." ],// + /* Bomb OI */ // + "GlitchBombOIDescDisabled": [ "Allowing a bomb to explode in Link's hands while",// + "moving and then attempting to pull out a cutscene", + "item on a specific frame will cause Link to play",// + "an invisible ocarina instead.", // + "This will only work if bombs are not dimmed on the", + "frame you use the cutscene item." ], // + "GlitchBombOIDescNovice": [ "You may be expected to use ocarina items with a", // + "bomb to play warp songs." ], // + "GlitchBombOIDescIntermediate": [ "You may be expected to use ocarina items with a", // + "bomb to play the ocarina where Link's position", // + "matters." ], // + "GlitchBombOIDescAdvanced": [ "You may be expected to use restricted items to use", + "the cutscene item or to make the bombs usable on",// + "the correct frame." ], // + "GlitchBombOIDescExpert": [ "You may be expected to use restricted items to", // + "perform ocarina items where Link's position isn't", + "particularly lenient" ], // + /* Hover Boost */ // + "GlitchHoverBoostDescDisabled": [ "Equipping hover boots when Link takes damage will", + "cause him to keep the high knockback speed and", // + "lets him traverse large gaps.", // + "If performed at the edge of a platform Link will",// + "instead perform a mega jump which has less range",// + "but more height than a hover boost." ], // + "GlitchHoverBoostDescNovice": [ "Hover boosts that do not need the maximum speed", // + "may be required." ], // + "GlitchHoverBoostDescIntermediate": [ "Hover boosts that do need the maximum speed may be", + "required." ], // + "GlitchHoverBoostDescAdvanced": [ "Hover boosts that use more complex movement during", + "the hover may be required." ], // + /* Super Slide */ // + "GlitchSuperSlideDescDisabled": [ "Holding the circle pad just outside the dead zone", + "will cause Link to turn on the spot which locks", // + "his speed. This can be used to preserve high", // + "speeds indefinitely." ], // + "GlitchSuperSlideDescNovice": [ "Forward extended super slides (FESSes) where Link", + "is damaged by an explosion may be required." ], // + "GlitchSuperSlideDescIntermediate": [ "Hammer extended super slides where the recoil from", + "a hammer crouch stab is used may be required." ], // + "GlitchSuperSlideDescAdvanced": [ "Hyper Extended Super Slides (HESSes) and", // + "damageless FESSes where Link rolls into a bomb may", + "be required." ], // + "GlitchSuperSlideDescExpert": [ "HESSes with more precise movement may be required." ], + /* Megaflip */ // + "GlitchMegaflipDescDisabled": [ "A backflip or sidehop with high speed from an", // + "attack hitting your shield during i-frames. This",// + "is normally achieved by rolling into an explosion.", + "Equipping hover boots to preserve the high speed",// + "when landing is known as a hoverflip." ], // + "GlitchMegaflipDescNovice": [ "You may be expected to perform megaflips on flat",// + "ground with bombs." ], // + "GlitchMegaflipDescIntermediate": [ "You may be expected to perform megaflips in small", + "areas, distance megaflips, or hoverflips with a", // + "bomb." ], // + "GlitchMegaflipDescAdvanced": [ "You may be expected to perform hoverflips with", // + "difficult midair movement, or distance megaflips",// + "under time pressure with a bomb.", // + "", // + "Additionally, you may be expected to perform", // + "novice megaflips with a bombchu" ], // + "GlitchMegaflipDescExpert": [ "You may be expected to perform intermediate", // + "megaflips with a bombchu." ], // + "GlitchMegaflipDescHero": [ "You may be expected to perform any megaflip with a", + "bombchu." ], // + /* A-Slide */ // + "GlitchASlideDescDisabled": [ "An A-slide is performed the same as a megaflip", // + "except without pressing the A button at the end.",// + "This causes child Link's collision to glitch below", + "the ground and lets him bypass certain actors." ],// + "GlitchASlideDescNovice": [ "You may be expected to perform A-slides to pass", // + "actors you can't press A to interact with." ], // + "GlitchASlideDescIntermediate": [ "You may be expected to perform A-slides quickly or", + "around actors that can be interacted with." ], // + "GlitchASlideDescAdvanced": [ "You may be expected to perform novice A-slides", // + "with a bombchu." ], // + "GlitchASlideDescExpert": [ "You may be expected to perform intermediate", // + "A-slides with a bombchu." ], // + /* Hammer Slide */ // + "GlitchHammerSlideDescDisabled": [ "Equipping hover boots after a hammer crouch stab",// + "against a wall preserves the recoil speed which", // + "allows Link to cross larger gaps than usual." ], // + "GlitchHammerSlideDescNovice": [ "Simple hammer slides may be required" ], // + "GlitchHammerSlideDescIntermediate": [ "Hammer slides which require good movement and high", + "speed may be required." ], // + /* Ledge Cancel */ // + "GlitchLedgeCancelDescDisabled": [ "Climbing a short ledge and shielding damage will",// + "prevent the ledge climbing state from ending.", // + "This state allows Link to walk through some actors", + "such as boulders and NPCs." ], // + "GlitchLedgeCancelDescNovice": [ "You may be expected to perform ledge cancels using", + "bombs as a damage source." ], // + "GlitchLedgeCancelDescIntermediate": [ "You may be expected to perform ledge cancels in", // + "places with little room." ], // + "GlitchLedgeCancelDescAdvanced": [ "You may be expected to perform ledge cancels using", + "bombchus as a damage source." ], // + /* Action Swap */ // + "GlitchActionSwapDescDisabled": [ "Action swap allows Link to switch between 2 held",// + "items without the put away/equip animations.", // + "This can be exploited to produce various effects." ], + "GlitchActionSwapDescNovice": [ "You may be expected to use shallow water to set up", + "action swap." ], // + "GlitchActionSwapDescAdvanced": [ "You may be expected to use bombchus to set up", // + "action swap." ], // + /* QPA */ // + "GlitchQPADescDisabled": [ "Certain events can cancel putting away an item", // + "which later lets Link put it away without an", // + "animation. This can be used with sticks to access", + "a glitched damage value with the properties of", // + "hammer and fire arrows, or with a bottle to store", + "a cutscene for ocarina items." ], // + "GlitchQPADescNovice": [ "You may be expected to get QPA using the boots", // + "animation to delay putting away the item and a", // + "bomb." ], // + "GlitchQPADescIntermediate": [ "You may be expected to get QPA using only a bomb." ], + "GlitchQPADescAdvanced": [ "You may be expected to get QPA using a ledge grab", + "to interrupt putting away the item." ], // + "GlitchQPADescExpert": [ "You may be expected to get QPA from enemy attacks." ], + /* Hookshot Clip */ // + "GlitchHookshotClipDescDisabled": [ "Hookshot Clipping allows Link to hookshot through", + "certain walls, which is useful if a valid", // + "target is on the other side." ], // + "GlitchHookshotClipDescNovice": [ "Basic Hookshot Clipping may be required." ], // + "GlitchHookshotClipDescIntermediate": [ "Hookshot clips with precise angles and poor", // + "visibility may be required." ], // + /* Hookshot Jump: Bonk */ // + "GlitchHookshotJump_BonkDescDisabled": [ "A Hookshot Jump is an umbrella term for techniques", + "that launch Link into the sky using the Hookshot",// + "in various ways, sometimes together with", // + "other items. The bonk method only requires the", // + "Hookshot itself." ], // + "GlitchHookshotJump_BonkDescNovice": [ "Simple hookshot jumps against large flat walls of", + "hookshottable surfaces may be required." ], // + "GlitchHookshotJump_BonkDescIntermediate": [ "Less lenient hookshot jumps may be required." ], // + "GlitchHookshotJump_BonkDescAdvanced": [ "Hookshot jumps with precise midair movement may be", + "required." ], // + /* Hookshot Jump: Boots */ // + "GlitchHookshotJump_BootsDescDisabled": [ "This Hookshot Jump technique is one of the easier", + "ones, and require any pair of boots." ], // + "GlitchHookshotJump_BootsDescNovice": [ "Only relatively short Hookshot Jumps with boots", // + "may be required." ], // + "GlitchHookshotJump_BootsDescIntermediate": [ "Higher Hookshot Jumps with boots, where you look",// + "further up or downwards may be required." ], // + "GlitchHookshotJump_BootsDescAdvanced": [ "Hookshot jumps that require a lot of height and", // + "precise midair movement may be required." ], // + /* Cutscene Dives */ // + "GlitchCutsceneDiveDescDisabled": [ "Water physics won't effect Link if he enters the",// + "water while a cutscene is playing, allowing him", // + "to sink to the bottom." ], // + "GlitchCutsceneDiveDescNovice": [ "Attempting to use Farore's Wind (when it's already", + "set) with another magic item active prevents the",// + "water from clearing the FW cutscene until the", // + "other effect ends.", // + "You may be expected to use Nayru's Love as the", // + "other magic effect." ], // + "GlitchCutsceneDiveDescIntermediate": [ "You can catch something in a bottle while standing", + "over water using the hover boots to fall through",// + "the water during the catching cutscene." ], // + "GlitchCutsceneDiveDescAdvanced": [ "You may be expected to use magic arrows to perform", + "Farore's Wind cutscene dives." ], // + /* Navi Dive: Stick */ // + "GlitchNaviDive_StickDescDisabled": [ "A Navi dive is a type of cutscene dive achieved by", + "falling off a ledge while talking to Navi. While",// + "the usual method for achieving this is a TSC, it",// + "is also possible to perform using a jump attack", // + "with deku sticks." ], // + "GlitchNaviDive_StickDescNovice": [ "You may be expected to enter BotW with a stick", // + "Navi dive." ], // + "GlitchNaviDive_StickDescIntermediate": [ "You may be expected to use the LH to ZD shortcut",// + "with a stick Navi dive." ], // + "GlitchNaviDive_StickDescAdvanced": [ "You may be expected to use the LW to ZR shortcut",// + "with a stick Navi dive." ], // + /* TSC */ // + "GlitchTripleSlashClipDescDisabled": [ "When doing a three-slash-combo with either the", // + "Kokiri Sword or the Master Sword and put it away,", + "Link will be placed back a small distance.", // + "If, while slashing, you use the recoil of hitting", + "a wall and then put away the sword, Link may clip", + "into a wall behind him if angled correctly." ], // + "GlitchTripleSlashClipDescNovice": [ "Basic Triple Slash Clipping may be required." ], // + "GlitchTripleSlashClipDescIntermediate": [ "Some more complex OoB movement may be required." ], + "GlitchTripleSlashClipDescAdvanced": [ "Very precise OoB movement may be required." ], // + "GlitchTripleSlashClipDescExpert": [ "Very precise TSCs may be required." ], // + /* Ledge Clip */ // + "GlitchLedgeClipDescDisabled": [ "A Ledge Clip allows Link to fall through a floor",// + "or pass through an object by facing a wall", // + "and dropping down to the left in various ways.", // + "These only work as an adult." ], // + "GlitchLedgeClipDescNovice": [ "Basic Ledge Clips may be required.", // + "Some require that you let go of the ledge with", // + "a specific timing." ], // + "GlitchLedgeClipDescIntermediate": [ "Certain harder clips may also be required." ], // + "GlitchLedgeClipDescAdvanced": [ "Ledge clips with complex OoB movement may be", // + "required." ], // + /* Seam Walk */ // + "GlitchSeamWalkDescDisabled": [ "Where 2 walls come together they form a seam that", + "Link can stand on. It is possible to use these to", + "gain height and reach normally inaccessible areas.", + "Additionally these seams can reach far above the",// + "walls that form them, creating invisible seams." ], + "GlitchSeamWalkDescNovice": [ "Short seam walks up visible walls with ISG may be", + "required." ], // + "GlitchSeamWalkDescIntermediate": [ "Short seam walks up visible walls without ISG or",// + "longer seam walks with ISG may be required." ], // + "GlitchSeamWalkDescAdvanced": [ "Longer seam walks without ISG may be required." ],// + "GlitchSeamWalkDescExpert": [ "Very precise seam walks may be required." ], // + "GlitchSeamWalkDescHero": [ "Crossing Gerudo Valley as child by walking up a", // + "wall with the cucco may be required." ], // + /* Misc Glitches */ // + "GlitchWWTEscapeDesc": [ "Using deku nuts and the crawlspace to let you", // + "move while reading the nearby sign, you can walk",// + "through the Kokiri guarding the exit. This only", // + "affects logic with shuffled entrances." ], // + "GlitchGVTentAsChildDesc": [ "The loading zone for the carpenters' tent exists",// + "in the child map despite the tent being removed.",// + "", // + "With this setting enabled you may be expected to",// + "use that loading zone." ], // + "GlitchGFGuardSneakDesc": [ "By using the bow, hookshot, or boomerang while", // + "looking up and targeting the Fortress wall, you", // + "can walk past the guard on the slope without", // + "being caught." ], // + "GlitchItemlessWastelandDesc": [ "By starting a backwalk and then targeting every", // + "other frame Link will maintain backwalk speed", // + "over the quicksand in the haunted wasteland which", + "lets him cross with no items." ], // + "GlitchOccamsStatueDesc": [ "With some precise movement through loading zones",// + "in Darunia's room, it is possible to unload the", // + "collision of the statue blocking the way to DMC." ], + "GlitchZDOoBJumpSlashDesc": [ "Jump slashing the wall next to the pillar above", // + "the ZD to LH shortcut as adult will let you clip",// + "through. From here you can either jump to the shop", + "loading zone or fall OoB a little bit and swim", // + "into the shortcut loading zone." ], // + "GlitchJabuStickRecoilDesc": [ "Child can enter Jabu without a fish in a bottle", // + "using the recoil from breaking a deku stick while", + "sidehopping next to the loading zone." ], // + "GlitchJabuAdultDesc": [ "Adult can enter Jabu by walking over a specific", // + "section of ice on the side near ice cavern." ], // + "GlitchBlueFireWallDesc": [ "Pouring blue fire on certain destructable walls", // + "will cause them to break." ], // + "GlitchClassicHalfieDesc": [ "Dying during a jump attack towards a ledge just", // + "too high to climb will put Link on top of the", // + "ledge. Combined with a fairy this lets Link climb", + "ledges such as the one to the switch in DC." ], // + "GlitchModernHalfieDesc": [ "Using a bomb flower and a twisted backflip, it is", + "possible to access the switch in DC with only a", // + "deku shield and the goron bracelet." ], // + "GlitchJabuSwitchDesc": [ "Using a cutscene item the frame you land on the", // + "blue switches in Jabu Jabu's Belly will make them", + "stay held for a while after you step off them." ],// + "GlitchForestBKSkipDesc": [ "Using the hookshot or bow to shorten a backflip", // + "it is possible to land on the other side of the", // + "railing in the north of the lobby and get clipped", + "out of bounds. From here it is possible to jump", // + "into the boss loading zone." ], // + "GlitchFireGrunzClipDesc": [ "Grabbing a ledge in a corner partially clips Link", + "through the wall. A bomb can be used to push Link", + "fully through the wall to get out of bounds. This", + "can be used in the fire temple along with hover", // + "boots to skip hammer in the first room." ] // +} \ No newline at end of file diff --git a/data/item_table.jsonc b/data/item_table.jsonc new file mode 100644 index 00000000..e319187e --- /dev/null +++ b/data/item_table.jsonc @@ -0,0 +1,322 @@ +{ + // ItemType GetItemID ItemClass logic HintKey Name + "NONE": { "ItemType": "ITEMTYPE_EVENT", "GetItemID": "GI_RUPEE_GREEN", "ItemClass": "ITEMCLASS_JUNK", "LogicVar": "noVariable", "HintKey": "NONE", "Name": { "NAenglish_": "No Item", "NAfrench_": "Rien", "NAspanish_": "Sin Objeto", "EURitalian_": "Nessun Oggetto", "EURgerman_": "Nichts" }}, + "KOKIRI_SWORD": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_SWORD_KOKIRI", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "KokiriSword", "HintKey": "KOKIRI_SWORD", "Name": { "NAenglish_": "Kokiri Sword", "NAfrench_": "Épée Kokiri", "NAspanish_": "Espada Kokiri", "EURitalian_": "Spada dei Kokiri", "EURgerman_": "Kokiri-Schwert" }}, + "MASTER_SWORD": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_SWORD_MASTER", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "MasterSword", "HintKey": "MASTER_SWORD", "Name": { "NAenglish_": "Master Sword", "NAfrench_": "Épée maîtresse", "NAspanish_": "Espada Maestra", "EURenglish_": "Master Sword", "EURfrench_": "Épée de légende", "EURspanish_": "Espada Maestra", "EURitalian_": "Spada suprema", "EURgerman_": "Master-Schwert" }}, + "GIANTS_KNIFE": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_SWORD_KNIFE", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "GIANTS_KNIFE", "Name": { "NAenglish_": "Giant's Knife", "NAfrench_": "Lame de géant", "NAspanish_": "Daga gigante", "EURitalian_": "Spada del gigante", "EURgerman_": "Langschwert" }}, + "BIGGORON_SWORD": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_SWORD_BGS", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BiggoronSword", "HintKey": "BIGGORON_SWORD", "Name": { "NAenglish_": "Biggoron's Sword", "NAfrench_": "Épée de Grogoron", "NAspanish_": "Espada de Biggoron", "EURenglish_": "Biggoron's Sword", "EURfrench_": "Épée de Biggoron", "EURspanish_": "Espada de Biggoron", "EURitalian_": "Spada di Grande Goron", "EURgerman_": "Biggoron-Schwert" }}, + "DEKU_SHIELD": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_SHIELD_DEKU", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "DEKU_SHIELD", "Name": { "NAenglish_": "Deku Shield", "NAfrench_": "Bouclier Mojo", "NAspanish_": "Escudo deku", "EURitalian_": "Scudo Deku", "EURgerman_": "Deku-Schild" }}, + "HYLIAN_SHIELD": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_SHIELD_HYLIAN", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "HYLIAN_SHIELD", "Name": { "NAenglish_": "Hylian Shield", "NAfrench_": "Bouclier Hylien", "NAspanish_": "Escudo hyliano", "EURitalian_": "Scudo Hylia", "EURgerman_": "Hylia-Schild" }}, + "MIRROR_SHIELD": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_SHIELD_MIRROR", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "MirrorShield", "HintKey": "MIRROR_SHIELD", "Name": { "NAenglish_": "Mirror Shield", "NAfrench_": "Bouclier miroir", "NAspanish_": "Escudo espejo", "EURitalian_": "Scudo specchio", "EURgerman_": "Spiegel-Schild" }}, + "GORON_TUNIC": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_TUNIC_GORON", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "GoronTunic", "HintKey": "GORON_TUNIC", "Name": { "NAenglish_": "Goron Tunic", "NAfrench_": "Tunique Goron", "NAspanish_": "Sayo goron", "EURitalian_": "Veste dei Goron", "EURgerman_": "Goronen-Rüstung" }}, + "ZORA_TUNIC": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_TUNIC_ZORA", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ZoraTunic", "HintKey": "ZORA_TUNIC", "Name": { "NAenglish_": "Zora Tunic", "NAfrench_": "Tunique Zora", "NAspanish_": "Sayo zora", "EURitalian_": "Veste degli Zora", "EURgerman_": "Zora-Rüstung" }}, + "IRON_BOOTS": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_BOOTS_IRON", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "IronBoots", "HintKey": "IRON_BOOTS", "Name": { "NAenglish_": "Iron Boots", "NAfrench_": "Bottes de plomb", "NAspanish_": "Botas de hierro", "EURitalian_": "Stivali di ferro", "EURgerman_": "Eisenstiefel" }}, + "HOVER_BOOTS": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_BOOTS_HOVER", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "HoverBoots", "HintKey": "HOVER_BOOTS", "Name": { "NAenglish_": "Hover Boots", "NAfrench_": "Bottes des airs", "NAspanish_": "Botas voladoras", "EURitalian_": "Stivali alati", "EURgerman_": "Gleitstiefel" }}, + + "BOOMERANG": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_BOOMERANG", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Boomerang", "HintKey": "BOOMERANG", "Name": { "NAenglish_": "Boomerang", "NAfrench_": "Boomerang", "NAspanish_": "Búmeran", "EURitalian_": "Boomerang", "EURgerman_": "Bumerang" }}, + "LENS_OF_TRUTH": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_LENS", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "LensOfTruth", "HintKey": "LENS_OF_TRUTH", "Name": { "NAenglish_": "Lens of Truth", "NAfrench_": "Loupe de vérité", "NAspanish_": "Lupa de la Verdad", "EURenglish_": "Lens of Truth", "EURfrench_": "Monocle de vérité", "EURspanish_": "Lupa de la Verdad", "EURitalian_": "Lente della verità", "EURgerman_": "Auge der Wahrheit" }}, + "MEGATON_HAMMER": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_HAMMER", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Hammer", "HintKey": "MEGATON_HAMMER", "Name": { "NAenglish_": "Megaton Hammer", "NAfrench_": "Masse des titans", "NAspanish_": "Martillo Megatón", "EURitalian_": "Martello megaton", "EURgerman_": "Stahlhammer" }}, + "SHARD_OF_AGONY": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_STONE_OF_AGONY", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ShardOfAgony", "HintKey": "SHARD_OF_AGONY", "Name": { "NAenglish_": "Shard of Agony", "NAfrench_": "Fragment de souffrance", "NAspanish_": "Piedra de la Agonía", "EURenglish_": "Shard of Agony", "EURfrench_": "Pierre de souffrance", "EURspanish_": "Piedra de la Agonía", "EURitalian_": "Cristallo sonoro", "EURgerman_": "Stein des Wissens" }}, + "DINS_FIRE": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_DINS_FIRE", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "DinsFire", "HintKey": "DINS_FIRE", "Name": { "NAenglish_": "Din's Fire", "NAfrench_": "Feu de Din", "NAspanish_": "Fuego de Din", "EURitalian_": "Fuoco di Din", "EURgerman_": "Dins Feuerinferno" }}, + "FARORES_WIND": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_FARORES_WIND", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "FaroresWind", "HintKey": "FARORES_WIND", "Name": { "NAenglish_": "Farore's Wind", "NAfrench_": "Vent de Farore", "NAspanish_": "Viento de Farore", "EURitalian_": "Vento di Farore", "EURgerman_": "Farores Donnersturm" }}, + "NAYRUS_LOVE": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_NAYRUS_LOVE", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "NayrusLove", "HintKey": "NAYRUS_LOVE", "Name": { "NAenglish_": "Nayru's Love", "NAfrench_": "Amour de Nayru", "NAspanish_": "Amor de Nayru", "EURitalian_": "Amore di Nayru", "EURgerman_": "Nayrus Umarmung" }}, + "FIRE_ARROWS": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_ARROW_FIRE", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "FireArrows", "HintKey": "FIRE_ARROWS", "Name": { "NAenglish_": "Fire Arrow", "NAfrench_": "Flèche de feu", "NAspanish_": "Flecha de fuego", "EURitalian_": "Freccia di fuoco", "EURgerman_": "Feuer-Pfeile" }}, + "ICE_ARROWS": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_ARROW_ICE", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "IceArrows", "HintKey": "ICE_ARROWS", "Name": { "NAenglish_": "Ice Arrow", "NAfrench_": "Flèche de glace", "NAspanish_": "Flecha de hielo", "EURitalian_": "Freccia di ghiaccio", "EURgerman_": "Eis-Pfeile" }}, + "LIGHT_ARROWS": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_ARROW_LIGHT", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "LightArrows", "HintKey": "LIGHT_ARROWS", "Name": { "NAenglish_": "Light Arrow", "NAfrench_": "Flèche de lumière", "NAspanish_": "Flecha de luz", "EURitalian_": "Freccia di luce", "EURgerman_": "Licht-Pfeile" }}, + "GERUDO_TOKEN": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_GERUDO_CARD", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "GerudoToken", "HintKey": "GERUDO_TOKEN", "Name": { "NAenglish_": "Gerudo Token", "NAfrench_": "Carte Gerudo", "NAspanish_": "Pase de socio gerudo", "EURitalian_": "Gerudo Card", "EURgerman_": "Gerudo-Pass" }}, + "MAGIC_BEAN": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_BEAN", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "MagicBean", "HintKey": "MAGIC_BEAN", "Name": { "NAenglish_": "Magic Bean", "NAfrench_": "Haricot magique", "NAspanish_": "Habichuelas mágicas", "EURitalian_": "Fagioli magici", "EURgerman_": "Wundererbse" }}, + "MAGIC_BEAN_PACK": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0xC9", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "MagicBeanPack", "HintKey": "MAGIC_BEAN_PACK", "Name": { "NAenglish_": "Magic Bean Pack", "NAfrench_": "Paquet de haricots magiques", "NAspanish_": "Lote de habichuelas mágicas", "EURitalian_": "Pacco di fagioli magici", "EURgerman_": "Wundererbsen-Bündel" }}, + "DOUBLE_DEFENSE": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0xB8", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "DoubleDefense", "HintKey": "DOUBLE_DEFENSE", "Name": { "NAenglish_": "Double Defense", "NAfrench_": "Double défence", "NAspanish_": "Doble poder defensivo", "EURitalian_": "Doppia difesa", "EURgerman_": "Doppelte Abwehrkraft" }}, + + "WEIRD_EGG": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_WEIRD_EGG", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "WeirdEgg", "HintKey": "WEIRD_EGG", "Name": { "NAenglish_": "Weird Egg", "NAfrench_": "Œuf curieux", "NAspanish_": "Huevo extraño", "EURitalian_": "Uovo misterioso", "EURgerman_": "Seltsames Ei" }}, +// "CUCCO": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_CUCCO", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Cucco", "HintKey": "CUCCO", "Name": { "NAenglish_": "Cucco", "NAfrench_": "Poulette", "NAspanish_": "Cuco", "EURenglish_": "Cucco", "EURfrench_": "Cocotte", "EURspanish_": "Cuco", "EURitalian_": "Coccò", "EURgerman_": "Huhn" }}, + "ZELDAS_LETTER": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_LETTER_ZELDA", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ZeldasLetter", "HintKey": "ZELDAS_LETTER", "Name": { "NAenglish_": "Zelda's Letter", "NAfrench_": "Lettre de Zelda", "NAspanish_": "Carta de Zelda", "EURitalian_": "Lettera di Zelda", "EURgerman_": "Zeldas Brief" }}, +// "KEATON_MASK": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_MASK_KEATON", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "KeatonMask", "HintKey": "KEATON_MASK", "Name": { "NAenglish_": "Keaton Mask", "NAfrench_": "Masque Keaton", "NAspanish_": "Máscara de Keaton", "EURenglish_": "Keaton Mask", "EURfrench_": "Masque de renard", "EURspanish_": "Máscara de Keaton", "EURitalian_": "Maschera Keaton", "EURgerman_": "Fuchs-Maske" }}, +// "SKULL_MASK": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_MASK_SKULL", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SkullMask", "HintKey": "SKULL_MASK", "Name": { "NAenglish_": "Skull Mask", "NAfrench_": "Masque de mort", "NAspanish_": "Máscara de calavera", "EURitalian_": "Maschera Teschio", "EURgerman_": "Schädel-Maske" }}, +// "SPOOKY_MASK": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_MASK_SPOOKY", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SpookyMask", "HintKey": "SPOOKY_MASK", "Name": { "NAenglish_": "Spooky Mask", "NAfrench_": "Masque épeurant", "NAspanish_": "Máscara tenebrosa", "EURenglish_": "Spooky Mask", "EURfrench_": "Masque d'effroi", "EURspanish_": "Máscara tenebrosa", "EURitalian_": "Maschera spaventosa", "EURgerman_": "Geister-Maske" }}, +// "BUNNY_HOOD": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_MASK_BUNNY", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BunnyHood", "HintKey": "BUNNY_HOOD", "Name": { "NAenglish_": "Bunny Hood", "NAfrench_": "Oreilles de lapin", "NAspanish_": "Capucha de conejo", "EURenglish_": "Bunny Hood", "EURfrench_": "Masque de lapin", "EURspanish_": "Capucha de conejo", "EURitalian_": "Orecchie da coniglio", "EURgerman_": "Hasenohren" }}, +// "GORON_MASK": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_MASK_GORON", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "GoronMask", "HintKey": "GORON_MASK", "Name": { "NAenglish_": "Goron Mask", "NAfrench_": "Masque Goron", "NAspanish_": "Máscara Goron", "EURenglish_": "Goron Mask", "EURfrench_": "Masque de Goron", "EURspanish_": "Máscara Goron", "EURitalian_": "Maschera Goron", "EURgerman_": "Goronen-Maske" }}, +// "ZORA_MASK": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_MASK_ZORA", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ZoraMask", "HintKey": "ZORA_MASK", "Name": { "NAenglish_": "Zora Mask", "NAfrench_": "Masque Zora", "NAspanish_": "Máscara Zora", "EURenglish_": "Zora Mask", "EURfrench_": "Masque de Zora", "EURspanish_": "Máscara Zora", "EURitalian_": "Maschera Zora", "EURgerman_": "Zora-Maske" }}, +// "GERUDO_MASK": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_MASK_GERUDO", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "GerudoMask", "HintKey": "GERUDO_MASK", "Name": { "NAenglish_": "Gerudo Mask", "NAfrench_": "Masque Gerudo", "NAspanish_": "Máscara Gerudo", "EURenglish_": "Gerudo Mask", "EURfrench_": "Masque de Gerudo", "EURspanish_": "Máscara Gerudo", "EURitalian_": "Maschera Gerudo", "EURgerman_": "Gerudo-Maske" }}, +// "MASK_OF_TRUTH": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_MASK_MASK", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "MaskofTruth", "HintKey": "MASK_OF_TRUTH", "Name": { "NAenglish_": "Mask of Truth", "NAfrench_": "Masque de vérité", "NAspanish_": "Máscara de la Verdad", "EURitalian_": "Maschera della verità", "EURgerman_": "Maske des Wissens" }}, + "POCKET_EGG": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_POCKET_EGG", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "PocketEgg", "HintKey": "POCKET_EGG", "Name": { "NAenglish_": "Pocket Egg", "NAfrench_": "Œuf de poche", "NAspanish_": "Huevo de bolsillo", "EURitalian_": "Uovo tascabile", "EURgerman_": "Ei" }}, +// "POCKET_CUCCO": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_POCKET_CUCCO", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "PocketCucco", "HintKey": "POCKET_CUCCO", "Name": { "NAenglish_": "Pocket Cucco", "NAfrench_": "Poulette de poche", "NAspanish_": "Cuco de bolsillo", "EURenglish_": "Pocket Cucco", "EURfrench_": "Cocotte de poche", "EURspanish_": "Cuco de bolsillo", "EURitalian_": "Coccò tascabile", "EURgerman_": "Kiki" }}, + "COJIRO": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_COJIRO", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Cojiro", "HintKey": "COJIRO", "Name": { "NAenglish_": "Cojiro", "NAfrench_": "P'tit Poulet", "NAspanish_": "Cojiro", "EURitalian_": "Coblù", "EURgerman_": "Henni" }}, + "ODD_MUSHROOM": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_ODD_MUSHROOM", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "OddMushroom", "HintKey": "ODD_MUSHROOM", "Name": { "NAenglish_": "Odd Mushroom", "NAfrench_": "Champignon étrange", "NAspanish_": "Champiñón extraño", "EURenglish_": "Odd Mushroom", "EURfrench_": "Champignon suspect", "EURspanish_": "Champiñón extraño", "EURitalian_": "Fungo strano", "EURgerman_": "Schimmelpilz" }}, + "ODD_POULTICE": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_ODD_POTION", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "OddPoultice", "HintKey": "ODD_POULTICE", "Name": { "NAenglish_": "Odd Poultice", "NAfrench_": "Mixture étrange", "NAspanish_": "Medicina rara", "EURenglish_": "Odd Poultice", "EURfrench_": "Mixture suspecte", "EURspanish_": "Medicina rara", "EURitalian_": "Medicina strana", "EURgerman_": "Moderpackung" }}, + "POACHERS_SAW": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_SAW", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "PoachersSaw", "HintKey": "POACHERS_SAW", "Name": { "NAenglish_": "Poacher's Saw", "NAfrench_": "Scie du chasseur", "NAspanish_": "Sierra del furtivo", "EURitalian_": "Sega del bracconiere", "EURgerman_": "Säge" }}, + "BROKEN_SWORD": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_SWORD_BROKEN", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BrokenSword", "HintKey": "BROKEN_SWORD", "Name": { "NAenglish_": "Broken Goron's Sword", "NAfrench_": "Épée Goron brisée", "NAspanish_": "Espada goron rota", "EURitalian_": "Spada rotta dei Goron", "EURgerman_": "Zerbrochenes Goronen-Schwert" }}, + "PRESCRIPTION": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_PERSCRIPTION", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Prescription", "HintKey": "PRESCRIPTION", "Name": { "NAenglish_": "Prescription", "NAfrench_": "Ordonnance", "NAspanish_": "Receta", "EURitalian_": "Ricetta", "EURgerman_": "Rezept" }}, + "EYEBALL_FROG": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_FROG", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "EyeballFrog", "HintKey": "EYEBALL_FROG", "Name": { "NAenglish_": "Eyeball Frog", "NAfrench_": "Crapaud-qui-louche", "NAspanish_": "Rana de ojos saltones", "EURitalian_": "Rana occhiuta", "EURgerman_": "Glotzfrosch" }}, + "EYEDROPS": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_EYEDROPS", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Eyedrops", "HintKey": "EYEDROPS", "Name": { "NAenglish_": "World's Finest Eyedrops", "NAfrench_": "Supergouttes", "NAspanish_": "Supergotas oculares", "EURenglish_": "World's Finest Eyedrops", "EURfrench_": "Super gouttes", "EURspanish_": "Supergotas oculares", "EURitalian_": "Miglior collirio del mondo", "EURgerman_": "Augentropfen" }}, + "CLAIM_CHECK": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_CLAIM_CHECK", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ClaimCheck", "HintKey": "CLAIM_CHECK", "Name": { "NAenglish_": "Claim Check", "NAfrench_": "Certificat", "NAspanish_": "Recibo", "EURitalian_": "Buono", "EURgerman_": "Zertifikat" }}, + + "GOLD_SKULLTULA_TOKEN": { "ItemType": "ITEMTYPE_TOKEN", "GetItemID": "GI_SKULL_TOKEN", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "GoldSkulltulaTokens", "HintKey": "GOLD_SKULLTULA_TOKEN", "Name": { "NAenglish_": "Gold Skulltula Token", "NAfrench_": "Jeton de Skulltula dorée", "NAspanish_": "Símbolo de skulltula dorada", "EURenglish_": "Gold Skulltula Token", "EURfrench_": "Crâne d'or", "EURspanish_": "Símbolo de skulltula dorada", "EURitalian_": "Teschio d'oro", "EURgerman_": "Skulltula-Symbol" }}, + + // Progression Items + "PROGRESSIVE_HOOKSHOT": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x80", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveHookshot", "HintKey": "PROGRESSIVE_HOOKSHOT", "Name": { "NAenglish_": "Progressive Hookshot", "NAfrench_": "Grappin (prog.)", "NAspanish_": "Gancho progresivo", "EURitalian_": "Arpione progressivo", "EURgerman_": "Fanghaken Aufwertung" }}, + "PROGRESSIVE_STRENGTH": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x81", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveStrength", "HintKey": "PROGRESSIVE_STRENGTH", "Name": { "NAenglish_": "Progressive Strength Upgrade", "NAfrench_": "Amélioration de force (prog.)", "NAspanish_": "Fuerza progresiva", "EURitalian_": "Potenziamento di forza progressivo", "EURgerman_": "Stärke Aufwertung" }}, + "PROGRESSIVE_BOMB_BAG": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x82", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveBombBag", "HintKey": "PROGRESSIVE_BOMB_BAG", "Name": { "NAenglish_": "Progressive Bomb Bag", "NAfrench_": "Sac de bombes (prog.)", "NAspanish_": "Saco de bombas progresivo", "EURitalian_": "Portabombe progressivo", "EURgerman_": "Bombentaschen Aufwertung" }}, + "PROGRESSIVE_BOW": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x83", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveBow", "HintKey": "PROGRESSIVE_BOW", "Name": { "NAenglish_": "Progressive Bow", "NAfrench_": "Arc (prog.)", "NAspanish_": "Arco progresivo", "EURitalian_": "Arco progressivo", "EURgerman_": "Bogen Aufwertung" }}, + "PROGRESSIVE_SLINGSHOT": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x84", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveBulletBag", "HintKey": "PROGRESSIVE_SLINGSHOT", "Name": { "NAenglish_": "Progressive Slingshot", "NAfrench_": "Lance-pierre (prog.)", "NAspanish_": "Resortera progresiva", "EURitalian_": "Fionda progressiva", "EURgerman_": "Schleuder Aufwertung" }}, + "PROGRESSIVE_WALLET": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x85", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveWallet", "HintKey": "PROGRESSIVE_WALLET", "Name": { "NAenglish_": "Progressive Wallet", "NAfrench_": "Bourse (prog.)", "NAspanish_": "Bolsa de rupias progresiva", "EURitalian_": "Portarupie progressivo", "EURgerman_": "Geldbörsen Aufwertung" }}, + "PROGRESSIVE_SCALE": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x86", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveScale", "HintKey": "PROGRESSIVE_SCALE", "Name": { "NAenglish_": "Progressive Scale", "NAfrench_": "Écaille (prog.)", "NAspanish_": "Escama progresiva", "EURitalian_": "Squama progressiva", "EURgerman_": "Zora-Schuppen Aufwertung" }}, + "PROGRESSIVE_NUT_UPGRADE": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x87", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "PROGRESSIVE_NUT_UPGRADE", "Name": { "NAenglish_": "Progressive Nut Capacity", "NAfrench_": "Capacité de noix (prog.)", "NAspanish_": "Capacidad de nueces deku progresiva", "EURitalian_": "Espansione per noci Deku progressiva", "EURgerman_": "Nuss-Kapazität Aufwertung" }}, + "PROGRESSIVE_STICK_UPGRADE": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x88", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "PROGRESSIVE_STICK_UPGRADE", "Name": { "NAenglish_": "Progressive Stick Capacity", "NAfrench_": "Capacité de bâtons (prog.)", "NAspanish_": "Capacidad de palos deku progresiva", "EURitalian_": "Espansione per rami Deku progressiva", "EURgerman_": "Stab-Kapazität Aufwertung" }}, + "PROGRESSIVE_BOMBCHUS": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x89", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Bombchus", "HintKey": "PROGRESSIVE_BOMBCHUS", "Name": { "NAenglish_": "Progressive Bombchu", "NAfrench_": "Bombchus (prog.)", "NAspanish_": "Bombchus progresivos", "EURenglish_": "Progressive Bombchu", "EURfrench_": "Missiles teigneux (prog.)", "EURspanish_": "Bombchus progresivos", "EURitalian_": "Radiomine progressive", "EURgerman_": "Krabbelminen Aufwertung" }}, + "PROGRESSIVE_MAGIC_METER": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x8A", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveMagic", "HintKey": "PROGRESSIVE_MAGIC_METER", "Name": { "NAenglish_": "Progressive Magic Meter", "NAfrench_": "Jauge de magie (prog.)", "NAspanish_": "Poder mágico progresivo", "EURitalian_": "Barra della magia progressiva", "EURgerman_": "Magische Kraft Aufwertung" }}, + "PROGRESSIVE_OCARINA": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x8B", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveOcarina", "HintKey": "PROGRESSIVE_OCARINA", "Name": { "NAenglish_": "Progressive Ocarina", "NAfrench_": "Ocarina (prog.)", "NAspanish_": "Ocarina progresiva", "EURitalian_": "Ocarina progressiva", "EURgerman_": "Okarina Aufwertung" }}, + "PROGRESSIVE_GORONSWORD": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0xD4", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveGiantKnife", "HintKey": "PROGRESSIVE_GORONSWORD", "Name": { "NAenglish_": "Progressive Goron Sword", "NAfrench_": "Épée Goron (prog.)", "NAspanish_": "Espada Goron progresiva", "EURitalian_": "Spada Goron progressiva", "EURgerman_": "Goronen-Schwert Aufwertung" }}, + + // Bottles + "EMPTY_BOTTLE": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x0F", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Bottles", "HintKey": "EMPTY_BOTTLE", "Name": { "NAenglish_": "Empty Bottle", "NAfrench_": "Flacon vide", "NAspanish_": "Botella vacía", "EURitalian_": "Ampolla", "EURgerman_": "Leere Flasche" }}, + "BOTTLE_WITH_RED_POTION": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x8C", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Bottles", "HintKey": "BOTTLE_WITH_RED_POTION", "Name": { "NAenglish_": "Bottle with Red Potion", "NAfrench_": "Flacon de potion rouge", "NAspanish_": "Botella de poción roja", "EURitalian_": "Ampolla di pozione vita", "EURgerman_": "Flasche (Rotes Elixier)" }}, + "BOTTLE_WITH_MILK": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x14", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Bottles", "HintKey": "BOTTLE_WITH_MILK", "Name": { "NAenglish_": "Bottle with Milk", "NAfrench_": "Flacon de lait", "NAspanish_": "Botella de leche Lon Lon", "EURitalian_": "Ampolla di latte Lon Lon", "EURgerman_": "Flasche (Lon Lon-Milch)" }}, + "BOTTLE_WITH_GREEN_POTION": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x8D", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Bottles", "HintKey": "BOTTLE_WITH_GREEN_POTION", "Name": { "NAenglish_": "Bottle with Green Potion", "NAfrench_": "Flacon de potion verte", "NAspanish_": "Botella de poción verde", "EURitalian_": "Ampolla di pozione magica", "EURgerman_": "Flasche (Grünes Elixier)" }}, + "BOTTLE_WITH_BLUE_POTION": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x8E", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Bottles", "HintKey": "BOTTLE_WITH_BLUE_POTION", "Name": { "NAenglish_": "Bottle with Blue Potion", "NAfrench_": "Flacon de potion bleue", "NAspanish_": "Botella de poción azul", "EURitalian_": "Ampolla di pozione curatutto", "EURgerman_": "Flasche (Blaues Elixier)" }}, + "BOTTLE_WITH_FAIRY": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x8F", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Bottles", "HintKey": "BOTTLE_WITH_FAIRY", "Name": { "NAenglish_": "Bottle with Fairy", "NAfrench_": "Fée en flacon", "NAspanish_": "Hada en una botella", "EURitalian_": "Fata in un'ampolla", "EURgerman_": "Flasche (Fee)" }}, + "BOTTLE_WITH_FISH": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x90", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Bottles", "HintKey": "BOTTLE_WITH_FISH", "Name": { "NAenglish_": "Bottle with Fish", "NAfrench_": "Flacon avec un poisson", "NAspanish_": "Pez en una botella", "EURitalian_": "Pesce in un'ampolla", "EURgerman_": "Flasche (Fisch)" }}, + "BOTTLE_WITH_BLUE_FIRE": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x91", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Bottles", "HintKey": "BOTTLE_WITH_BLUE_FIRE", "Name": { "NAenglish_": "Bottle with Blue Fire", "NAfrench_": "Flacon de flamme bleue", "NAspanish_": "Botella de fuego azul", "EURitalian_": "Ampolla di fuoco blu", "EURgerman_": "Flasche (Blaues Feuer)" }}, + "BOTTLE_WITH_BUGS": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x92", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Bottles", "HintKey": "BOTTLE_WITH_BUGS", "Name": { "NAenglish_": "Bottle with Bugs", "NAfrench_": "Insecte en flacon", "NAspanish_": "Insecto en una botella", "EURitalian_": "Insetto in un'ampolla", "EURgerman_": "Flasche (Käfer)" }}, + "BOTTLE_WITH_POE": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x94", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Bottles", "HintKey": "BOTTLE_WITH_POE", "Name": { "NAenglish_": "Bottle with Poe", "NAfrench_": "Esprit en flacon", "NAspanish_": "Poe en una botella", "EURenglish_": "Bottle with Poe", "EURfrench_": "Spectre en flacon", "EURspanish_": "Poe en una botella", "EURitalian_": "Poo in un'ampolla", "EURgerman_": "Flasche (Irrlicht)" }}, + + // Special bottles that can't immediately dump contents + "RUTOS_LETTER": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x15", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "RutosLetter", "HintKey": "RUTOS_LETTER", "Name": { "NAenglish_": "Bottle with Ruto's Letter", "NAfrench_": "Flacon avec une lettre", "NAspanish_": "Carta de Ruto", "EURitalian_": "Lettera in un'ampolla", "EURgerman_": "Flasche (Rutos Brief)" }}, + "BOTTLE_WITH_BIG_POE": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x93", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BottleWithBigPoe", "HintKey": "BOTTLE_WITH_BIG_POE", "Name": { "NAenglish_": "Bottle with Big Poe", "NAfrench_": "Grand esprit en flacon", "NAspanish_": "Gran Poe en una botella", "EURenglish_": "Bottle with Big Poe", "EURfrench_": "Âme en flacon", "EURspanish_": "Gran Poe en una botella", "EURitalian_": "Grande Poo in un'ampolla", "EURgerman_": "Flasche (Nachtschwärmer)" }}, + + // Songs + "ZELDAS_LULLABY": { "ItemType": "ITEMTYPE_SONG", "GetItemID": "0xC1", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ZeldasLullaby_item", "HintKey": "ZELDAS_LULLABY", "Name": { "NAenglish_": "Zelda's Lullaby", "NAfrench_": "Berceuse de Zelda", "NAspanish_": "Nana de Zelda", "EURitalian_": "Ninna nanna di Zelda", "EURgerman_": "Zeldas Wiegenlied" }}, + "EPONAS_SONG": { "ItemType": "ITEMTYPE_SONG", "GetItemID": "0xC2", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "EponasSong_item", "HintKey": "EPONAS_SONG", "Name": { "NAenglish_": "Epona's Song", "NAfrench_": "Chant d'Épona", "NAspanish_": "Canción de Epona", "EURitalian_": "Canzone di Epona", "EURgerman_": "Eponas Lied" }}, + "SARIAS_SONG": { "ItemType": "ITEMTYPE_SONG", "GetItemID": "0xC3", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SariasSong_item", "HintKey": "SARIAS_SONG", "Name": { "NAenglish_": "Saria's Song", "NAfrench_": "Chant de Saria", "NAspanish_": "Canción de Saria", "EURitalian_": "Canzone di Saria", "EURgerman_": "Salias Lied" }}, + "SUNS_SONG": { "ItemType": "ITEMTYPE_SONG", "GetItemID": "0xC4", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SunsSong_item", "HintKey": "SUNS_SONG", "Name": { "NAenglish_": "Sun's Song", "NAfrench_": "Chant du soleil", "NAspanish_": "Canción del Sol", "EURitalian_": "Canto del sole", "EURgerman_": "Hymne der Sonne" }}, + "SONG_OF_TIME": { "ItemType": "ITEMTYPE_SONG", "GetItemID": "0xC5", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SongOfTime_item", "HintKey": "SONG_OF_TIME", "Name": { "NAenglish_": "Song of Time", "NAfrench_": "Chant du temps", "NAspanish_": "Canción del tiempo", "EURitalian_": "Canzone del tempo", "EURgerman_": "Hymne der Zeit" }}, + "SONG_OF_STORMS": { "ItemType": "ITEMTYPE_SONG", "GetItemID": "0xC6", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SongOfStorms_item", "HintKey": "SONG_OF_STORMS", "Name": { "NAenglish_": "Song of Storms", "NAfrench_": "Chant des tempêtes", "NAspanish_": "Canción de la tormenta", "EURitalian_": "Canzone della tempesta", "EURgerman_": "Hymne des Sturms" }}, + "MINUET_OF_FOREST": { "ItemType": "ITEMTYPE_SONG", "GetItemID": "0xBB", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "MinuetOfForest_item", "HintKey": "MINUET_OF_FOREST", "Name": { "NAenglish_": "Minuet of Forest", "NAfrench_": "Menuet de la forêt", "NAspanish_": "Minueto del bosque", "EURitalian_": "Minuetto della foresta", "EURgerman_": "Menuett des Waldes" }}, + "BOLERO_OF_FIRE": { "ItemType": "ITEMTYPE_SONG", "GetItemID": "0xBC", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BoleroOfFire_item", "HintKey": "BOLERO_OF_FIRE", "Name": { "NAenglish_": "Bolero of Fire", "NAfrench_": "Boléro du feu", "NAspanish_": "Bolero del fuego", "EURitalian_": "Bolero del fuoco", "EURgerman_": "Bolero des Feuers" }}, + "SERENADE_OF_WATER": { "ItemType": "ITEMTYPE_SONG", "GetItemID": "0xBD", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SerenadeOfWater_item", "HintKey": "SERENADE_OF_WATER", "Name": { "NAenglish_": "Serenade of Water", "NAfrench_": "Sérénade de l'eau", "NAspanish_": "Serenata del agua", "EURitalian_": "Serenata dell'acqua", "EURgerman_": "Serenade des Wassers" }}, + "REQUIEM_OF_SPIRIT": { "ItemType": "ITEMTYPE_SONG", "GetItemID": "0xBE", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "RequiemOfSpirit_item", "HintKey": "REQUIEM_OF_SPIRIT", "Name": { "NAenglish_": "Requiem of Spirit", "NAfrench_": "Requiem des esprits", "NAspanish_": "Réquiem del espíritu", "EURitalian_": "Requiem dello spirito", "EURgerman_": "Requiem der Geister" }}, + "NOCTURNE_OF_SHADOW": { "ItemType": "ITEMTYPE_SONG", "GetItemID": "0xBF", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "NocturneOfShadow_item", "HintKey": "NOCTURNE_OF_SHADOW", "Name": { "NAenglish_": "Nocturne of Shadow", "NAfrench_": "Nocturne de l'ombre", "NAspanish_": "Nocturno de la sombra", "EURitalian_": "Notturno delle ombre", "EURgerman_": "Nocturne des Schattens" }}, + "PRELUDE_OF_LIGHT": { "ItemType": "ITEMTYPE_SONG", "GetItemID": "0xC0", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "PreludeOfLight_item", "HintKey": "PRELUDE_OF_LIGHT", "Name": { "NAenglish_": "Prelude of Light", "NAfrench_": "Prélude de la lumière", "NAspanish_": "Preludio de la luz", "EURitalian_": "Preludio della luce", "EURgerman_": "Kantate des Lichts" }}, + + // Maps and Compasses + "DEKU_TREE_MAP": { "ItemType": "ITEMTYPE_MAP", "GetItemID": "0xA5", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "DEKU_TREE_MAP", "Name": { "NAenglish_": "Great Deku Tree Map", "NAfrench_": "Carte de l'arbre Mojo", "NAspanish_": "Mapa del Gran Árbol Deku", "EURitalian_": "Mappa del Grande Albero Deku", "EURgerman_": "Labyrinth-Karte des Deku-Baumes" }}, + "DODONGOS_CAVERN_MAP": { "ItemType": "ITEMTYPE_MAP", "GetItemID": "0xA6", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "DODONGOS_CAVERN_MAP", "Name": { "NAenglish_": "Dodongo's Cavern Map", "NAfrench_": "Carte de la grotte Dodongo", "NAspanish_": "Mapa de la Cueva de los Dodongos", "EURitalian_": "Mappa della caverna dei Dodongo", "EURgerman_": "Labyrinth-Karte von Dodongos Höhle" }}, + "JABU_JABUS_BELLY_MAP": { "ItemType": "ITEMTYPE_MAP", "GetItemID": "0xA7", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "JABU_JABUS_BELLY_MAP", "Name": { "NAenglish_": "Jabu-Jabu's Belly Map", "NAfrench_": "Carte de Jabu-Jabu", "NAspanish_": "Mapa de la tripa de Jabu-Jabu", "EURitalian_": "Mappa della pancia di Jabu Jabu", "EURgerman_": "Labyrinth-Karte von Jabu-Jabus Bauch" }}, + "FOREST_TEMPLE_MAP": { "ItemType": "ITEMTYPE_MAP", "GetItemID": "0xA8", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "FOREST_TEMPLE_MAP", "Name": { "NAenglish_": "Forest Temple Map", "NAfrench_": "Carte du temple de la forêt", "NAspanish_": "Mapa del Templo del Bosque", "EURitalian_": "Mappa del Santuario della Foresta", "EURgerman_": "Labyrinth-Karte des Waldtempels" }}, + "FIRE_TEMPLE_MAP": { "ItemType": "ITEMTYPE_MAP", "GetItemID": "0xA9", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "FIRE_TEMPLE_MAP", "Name": { "NAenglish_": "Fire Temple Map", "NAfrench_": "Carte du temple du feu", "NAspanish_": "Mapa del Templo del Fuego", "EURitalian_": "Mappa del Santuario del Fuoco", "EURgerman_": "Labyrinth-Karte des Feuertempels" }}, + "WATER_TEMPLE_MAP": { "ItemType": "ITEMTYPE_MAP", "GetItemID": "0xAA", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "WATER_TEMPLE_MAP", "Name": { "NAenglish_": "Water Temple Map", "NAfrench_": "Carte du temple de l'eau", "NAspanish_": "Mapa del Templo del Agua", "EURitalian_": "Mappa del Santuario dell'Acqua", "EURgerman_": "Labyrinth-Karte des Wassertempels" }}, + "SPIRIT_TEMPLE_MAP": { "ItemType": "ITEMTYPE_MAP", "GetItemID": "0xAB", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "SPIRIT_TEMPLE_MAP", "Name": { "NAenglish_": "Spirit Temple Map", "NAfrench_": "Carte du temple de l'esprit", "NAspanish_": "Mapa del Templo del Espíritu", "EURitalian_": "Mappa del Santuario dello Spirito", "EURgerman_": "Labyrinth-Karte des Geistertempels" }}, + "SHADOW_TEMPLE_MAP": { "ItemType": "ITEMTYPE_MAP", "GetItemID": "0xAC", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "SHADOW_TEMPLE_MAP", "Name": { "NAenglish_": "Shadow Temple Map", "NAfrench_": "Carte du temple de l'ombre", "NAspanish_": "Mapa del Templo de la Sombra", "EURitalian_": "Mappa del Santuario dell'Ombra", "EURgerman_": "Labyrinth-Karte des Schattentempels" }}, + "BOTTOM_OF_THE_WELL_MAP": { "ItemType": "ITEMTYPE_MAP", "GetItemID": "0xAD", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "BOTTOM_OF_THE_WELL_MAP", "Name": { "NAenglish_": "Bottom of the Well Map", "NAfrench_": "Carte du fond du puits", "NAspanish_": "Mapa del fondo del pozo", "EURitalian_": "Mappa del fondo del pozzo", "EURgerman_": "Labyrinth-Karte vom Grund des Brunnens" }}, + "ICE_CAVERN_MAP": { "ItemType": "ITEMTYPE_MAP", "GetItemID": "0xAE", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "ICE_CAVERN_MAP", "Name": { "NAenglish_": "Ice Cavern Map", "NAfrench_": "Carte de la caverne polaire", "NAspanish_": "Mapa de la caverna de hielo", "EURitalian_": "Mappa della caverna di ghiaccio", "EURgerman_": "Labyrinth-Karte der Eishöhle" }}, + + "DEKU_TREE_COMPASS": { "ItemType": "ITEMTYPE_COMPASS", "GetItemID": "0x9B", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "DEKU_TREE_COMPASS", "Name": { "NAenglish_": "Great Deku Tree Compass", "NAfrench_": "Boussole de l'arbre Mojo", "NAspanish_": "Brújula del Gran Árbol Deku", "EURitalian_": "Bussola del Grande Albero Deku", "EURgerman_": "Kompass des Deku-Baumes" }}, + "DODONGOS_CAVERN_COMPASS": { "ItemType": "ITEMTYPE_COMPASS", "GetItemID": "0x9C", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "DODONGOS_CAVERN_COMPASS", "Name": { "NAenglish_": "Dodongo's Cavern Compass", "NAfrench_": "Boussole de la grotte Dodongo", "NAspanish_": "Brújula de la Cueva de los Dodongos", "EURitalian_": "Bussola della caverna dei Dodongo", "EURgerman_": "Kompass von Dodongos Höhle" }}, + "JABU_JABUS_BELLY_COMPASS": { "ItemType": "ITEMTYPE_COMPASS", "GetItemID": "0x9D", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "JABU_JABUS_BELLY_COMPASS", "Name": { "NAenglish_": "Jabu-Jabu's Belly Compass", "NAfrench_": "Boussole de Jabu-Jabu", "NAspanish_": "Brújula de la tripa de Jabu-Jabu", "EURitalian_": "Bussola della pancia di Jabu Jabu", "EURgerman_": "Kompass von Jabu-Jabus Bauch" }}, + "FOREST_TEMPLE_COMPASS": { "ItemType": "ITEMTYPE_COMPASS", "GetItemID": "0x9E", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "FOREST_TEMPLE_COMPASS", "Name": { "NAenglish_": "Forest Temple Compass", "NAfrench_": "Boussole du temple de la forêt", "NAspanish_": "Brújula del Templo del Bosque", "EURitalian_": "Bussola del Santuario della Foresta", "EURgerman_": "Kompass des Waldtempels" }}, + "FIRE_TEMPLE_COMPASS": { "ItemType": "ITEMTYPE_COMPASS", "GetItemID": "0x9F", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "FIRE_TEMPLE_COMPASS", "Name": { "NAenglish_": "Fire Temple Compass", "NAfrench_": "Boussole du temple du feu", "NAspanish_": "Brújula del Templo del Fuego", "EURitalian_": "Bussola del Santuario del Fuoco", "EURgerman_": "Kompass des Feuertempels" }}, + "WATER_TEMPLE_COMPASS": { "ItemType": "ITEMTYPE_COMPASS", "GetItemID": "0xA0", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "WATER_TEMPLE_COMPASS", "Name": { "NAenglish_": "Water Temple Compass", "NAfrench_": "Boussole du temple de l'eau", "NAspanish_": "Brújula del Templo del Agua", "EURitalian_": "Bussola del Santuario dell'Acqua", "EURgerman_": "Kompass des Wassertempels" }}, + "SPIRIT_TEMPLE_COMPASS": { "ItemType": "ITEMTYPE_COMPASS", "GetItemID": "0xA1", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "SPIRIT_TEMPLE_COMPASS", "Name": { "NAenglish_": "Spirit Temple Compass", "NAfrench_": "Boussole du temple de l'esprit", "NAspanish_": "Brújula del Templo del Espíritu", "EURitalian_": "Bussola del Santuario dello Spirito", "EURgerman_": "Kompass des Geistertempels" }}, + "SHADOW_TEMPLE_COMPASS": { "ItemType": "ITEMTYPE_COMPASS", "GetItemID": "0xA2", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "SHADOW_TEMPLE_COMPASS", "Name": { "NAenglish_": "Shadow Temple Compass", "NAfrench_": "Boussole du temple de l'ombre", "NAspanish_": "Brújula del Templo de las Sombras", "EURitalian_": "Bussola del Santuario dell'Ombra", "EURgerman_": "Kompass des Schattentempels" }}, + "BOTTOM_OF_THE_WELL_COMPASS": { "ItemType": "ITEMTYPE_COMPASS", "GetItemID": "0xA3", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "BOTTOM_OF_THE_WELL_COMPASS", "Name": { "NAenglish_": "Bottom of the Well Compass", "NAfrench_": "Boussole du fond du puits", "NAspanish_": "Brújula del fondo del pozo", "EURitalian_": "Bussola del fondo del pozzo", "EURgerman_": "Kompass vom Grund des Brunnens" }}, + "ICE_CAVERN_COMPASS": { "ItemType": "ITEMTYPE_COMPASS", "GetItemID": "0xA4", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "ICE_CAVERN_COMPASS", "Name": { "NAenglish_": "Ice Cavern Compass", "NAfrench_": "Boussole de la caverne polaire", "NAspanish_": "Brújula de la caverna de hielo", "EURitalian_": "Bussola della caverna di ghiaccio", "EURgerman_": "Kompass der Eishöhle" }}, + + // Boss Keys + "FOREST_TEMPLE_BOSS_KEY": { "ItemType": "ITEMTYPE_BOSSKEY", "GetItemID": "0x95", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BossKeyForestTemple", "HintKey": "FOREST_TEMPLE_BOSS_KEY", "Name": { "NAenglish_": "Forest Temple Big Key", "NAfrench_": "Grande clé du temple de la forêt", "NAspanish_": "Gran llave del Templo del Bosque", "EURenglish_": "Forest Temple Big Key", "EURfrench_": "Clé d'or du temple de la forêt", "EURspanish_": "Gran llave del Templo del Bosque", "EURitalian_": "Grande chiave del Santuario della Foresta","EURgerman_": "Master-Schlüssel des Waldtempels" }}, + "FIRE_TEMPLE_BOSS_KEY": { "ItemType": "ITEMTYPE_BOSSKEY", "GetItemID": "0x96", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BossKeyFireTemple", "HintKey": "FIRE_TEMPLE_BOSS_KEY", "Name": { "NAenglish_": "Fire Temple Big Key", "NAfrench_": "Grande clé du temple du feu", "NAspanish_": "Gran llave del Templo del Fuego", "EURenglish_": "Fire Temple Big Key", "EURfrench_": "Clé d'or du temple du feu", "EURspanish_": "Gran llave del Templo del Fuego", "EURitalian_": "Grande chiave del Santuario del Fuoco", "EURgerman_": "Master-Schlüssel des Feuertempels" }}, + "WATER_TEMPLE_BOSS_KEY": { "ItemType": "ITEMTYPE_BOSSKEY", "GetItemID": "0x97", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BossKeyWaterTemple", "HintKey": "WATER_TEMPLE_BOSS_KEY", "Name": { "NAenglish_": "Water Temple Big Key", "NAfrench_": "Grande clé du temple de l'eau", "NAspanish_": "Gran llave del Templo del Agua", "EURenglish_": "Water Temple Big Key", "EURfrench_": "Clé d'or du temple de l'eau", "EURspanish_": "Gran llave del Templo del Agua", "EURitalian_": "Grande chiave del Santuario dell'Acqua", "EURgerman_": "Master-Schlüssel des Wassertempels" }}, + "SPIRIT_TEMPLE_BOSS_KEY": { "ItemType": "ITEMTYPE_BOSSKEY", "GetItemID": "0x98", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BossKeySpiritTemple", "HintKey": "SPIRIT_TEMPLE_BOSS_KEY", "Name": { "NAenglish_": "Spirit Temple Big Key", "NAfrench_": "Grande clé du temple de l'esprit", "NAspanish_": "Gran llave del Templo del Espíritu", "EURenglish_": "Spirit Temple Big Key", "EURfrench_": "Clé d'or du temple de l'esprit", "EURspanish_": "Gran llave del Templo del Espíritu", "EURitalian_": "Grande chiave del Santuario dello Spirito","EURgerman_": "Master-Schlüssel des Geistertempels" }}, + "SHADOW_TEMPLE_BOSS_KEY": { "ItemType": "ITEMTYPE_BOSSKEY", "GetItemID": "0x99", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BossKeyShadowTemple", "HintKey": "SHADOW_TEMPLE_BOSS_KEY", "Name": { "NAenglish_": "Shadow Temple Big Key", "NAfrench_": "Grande clé du temple de l'ombre", "NAspanish_": "Gran llave del Templo de las Sombras", "EURenglish_": "Shadow Temple Big Key", "EURfrench_": "Clé d'or du temple de l'ombre", "EURspanish_": "Gran llave del Templo de las Sombras", "EURitalian_": "Grande chiave del Santuario dell'Ombra", "EURgerman_": "Master-Schlüssel des Schattentempels" }}, + "GANONS_CASTLE_BOSS_KEY": { "ItemType": "ITEMTYPE_BOSSKEY", "GetItemID": "0x9A", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BossKeyGanonsCastle", "HintKey": "GANONS_CASTLE_BOSS_KEY", "Name": { "NAenglish_": "Ganon's Castle Big Key", "NAfrench_": "Grande clé du château de Ganon", "NAspanish_": "Gran llave del Castillo de Ganon", "EURenglish_": "Ganon's Castle Big Key", "EURfrench_": "Clé d'or du château de Ganon", "EURspanish_": "Gran llave del Castillo de Ganon", "EURitalian_": "Grande chiave del castello di Ganon", "EURgerman_": "Master-Schlüssel von Ganons Schloss" }}, + + // Small Keys + "FOREST_TEMPLE_SMALL_KEY": { "ItemType": "ITEMTYPE_SMALLKEY", "GetItemID": "0xAF", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ForestTempleKeys", "HintKey": "FOREST_TEMPLE_SMALL_KEY", "Name": { "NAenglish_": "Forest Temple Small Key", "NAfrench_": "Petite clé du temple de la forêt", "NAspanish_": "Llave del Templo del Bosque", "EURitalian_": "Chiave del Santuario della Foresta", "EURgerman_": "Kleiner Schlüssel des Waldtempels" }}, + "FIRE_TEMPLE_SMALL_KEY": { "ItemType": "ITEMTYPE_SMALLKEY", "GetItemID": "0xB0", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "FireTempleKeys", "HintKey": "FIRE_TEMPLE_SMALL_KEY", "Name": { "NAenglish_": "Fire Temple Small Key", "NAfrench_": "Petite clé du temple du feu", "NAspanish_": "Llave del Templo del Fuego", "EURitalian_": "Chiave del Santuario del Fuoco", "EURgerman_": "Kleiner Schlüssel des Feuertempels" }}, + "WATER_TEMPLE_SMALL_KEY": { "ItemType": "ITEMTYPE_SMALLKEY", "GetItemID": "0xB1", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "WaterTempleKeys", "HintKey": "WATER_TEMPLE_SMALL_KEY", "Name": { "NAenglish_": "Water Temple Small Key", "NAfrench_": "Petite clé du temple de l'eau", "NAspanish_": "Llave del Templo del Agua", "EURitalian_": "Chiave del Santuario dell'Acqua", "EURgerman_": "Kleiner Schlüssel des Wassertempels" }}, + "SPIRIT_TEMPLE_SMALL_KEY": { "ItemType": "ITEMTYPE_SMALLKEY", "GetItemID": "0xB2", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SpiritTempleKeys", "HintKey": "SPIRIT_TEMPLE_SMALL_KEY", "Name": { "NAenglish_": "Spirit Temple Small Key", "NAfrench_": "Petite clé du temple de l'esprit", "NAspanish_": "Llave del Templo del Espíritu", "EURitalian_": "Chiave del Santuario dello Spirito", "EURgerman_": "Kleiner Schlüssel des Geistertempels" }}, + "SHADOW_TEMPLE_SMALL_KEY": { "ItemType": "ITEMTYPE_SMALLKEY", "GetItemID": "0xB3", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ShadowTempleKeys", "HintKey": "SHADOW_TEMPLE_SMALL_KEY", "Name": { "NAenglish_": "Shadow Temple Small Key", "NAfrench_": "Petite clé du temple de l'ombre", "NAspanish_": "Llave del Templo de las Sombras", "EURitalian_": "Chiave del Santuario dell'Ombra", "EURgerman_": "Kleiner Schlüssel des Schattentempels" }}, + "BOTTOM_OF_THE_WELL_SMALL_KEY": { "ItemType": "ITEMTYPE_SMALLKEY", "GetItemID": "0xB4", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BottomOfTheWellKeys", "HintKey": "BOTTOM_OF_THE_WELL_SMALL_KEY", "Name": { "NAenglish_": "Bottom of the Well Small Key", "NAfrench_": "Petite clé du fond du puits", "NAspanish_": "Llave del fondo del pozo", "EURitalian_": "Chiave del fondo del pozzo", "EURgerman_": "Kleiner Schlüssel vom Grund des Brunnens" }}, + "GERUDO_TRAINING_GROUNDS_SMALL_KEY":{"ItemType": "ITEMTYPE_SMALLKEY", "GetItemID": "0xB5", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "GerudoTrainingGroundsKeys", "HintKey": "GERUDO_TRAINING_GROUNDS_SMALL_KEY", "Name": { "NAenglish_": "Training Grounds Small Key", "NAfrench_": "Petite clé du gymnase Gerudo", "NAspanish_": "Llave del Centro de Instrucción", "EURitalian_": "Chiave della zona di addestramento", "EURgerman_": "Kleiner Schlüssel der Gerudo Trainingsarena" }}, + "GERUDO_FORTRESS_SMALL_KEY": { "ItemType": "ITEMTYPE_FORTRESS_SMALLKEY", "GetItemID": "0xB6", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "GerudoFortressKeys", "HintKey": "GERUDO_FORTRESS_SMALL_KEY", "Name": { "NAenglish_": "Gerudo Fortress Small Key", "NAfrench_": "Petite clé du repaire Gerudo", "NAspanish_": "Llave de la Fortaleza Gerudo", "EURitalian_": "Chiave della fortezza Gerudo", "EURgerman_": "Kleiner Schlüssel des Diebesverstecks" }}, + "GANONS_CASTLE_SMALL_KEY": { "ItemType": "ITEMTYPE_SMALLKEY", "GetItemID": "0xB7", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "GanonsCastleKeys", "HintKey": "GANONS_CASTLE_SMALL_KEY", "Name": { "NAenglish_": "Ganon's Castle Small Key", "NAfrench_": "Petite clé du château de Ganon", "NAspanish_": "Llave del Castillo de Ganon", "EURitalian_": "Chiave del castello di Ganon", "EURgerman_": "Kleiner Schlüssel von Ganons Schloss" }}, + "TREASURE_GAME_SMALL_KEY": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0xDE", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "TreasureGameKeys", "HintKey": "TREASURE_GAME_SMALL_KEY", "Name": { "NAenglish_": "Chest Game Small Key", "NAfrench_": "Clé de la chasse aux trésors", "NAspanish_": "Llave del Cofre del Tesoro", "EURitalian_": "Chiave della sala della fortuna", "EURgerman_": "Kleiner Schlüssel der Truhenlotterie" }}, + + // Key Rings + "FOREST_TEMPLE_KEY_RING": { "ItemType": "ITEMTYPE_SMALLKEY", "GetItemID": "0xD5", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ForestTempleKeys", "HintKey": "FOREST_TEMPLE_KEY_RING", "Name": { "NAenglish_": "Forest Temple Key Ring", "NAfrench_": "Trousseau du temple de la forêt", "NAspanish_": "Llavero del Templo del Bosque", "EURitalian_": "Chiavi del Santuario della Foresta", "EURgerman_": "Schlüsselbund des Waldtempels" }}, + "FIRE_TEMPLE_KEY_RING": { "ItemType": "ITEMTYPE_SMALLKEY", "GetItemID": "0xD6", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "FireTempleKeys", "HintKey": "FIRE_TEMPLE_KEY_RING", "Name": { "NAenglish_": "Fire Temple Key Ring", "NAfrench_": "Trousseau du temple du feu", "NAspanish_": "Llavero del Templo del Fuego", "EURitalian_": "Chiavi del Santuario del Fuoco", "EURgerman_": "Schlüsselbund des Feuertempels" }}, + "WATER_TEMPLE_KEY_RING": { "ItemType": "ITEMTYPE_SMALLKEY", "GetItemID": "0xD7", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "WaterTempleKeys", "HintKey": "WATER_TEMPLE_KEY_RING", "Name": { "NAenglish_": "Water Temple Key Ring", "NAfrench_": "Trousseau du temple de l'eau", "NAspanish_": "Llavero del Templo del Agua", "EURitalian_": "Chiavi del Santuario dell'Acqua", "EURgerman_": "Schlüsselbund des Wassertempels" }}, + "SPIRIT_TEMPLE_KEY_RING": { "ItemType": "ITEMTYPE_SMALLKEY", "GetItemID": "0xD8", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SpiritTempleKeys", "HintKey": "SPIRIT_TEMPLE_KEY_RING", "Name": { "NAenglish_": "Spirit Temple Key Ring", "NAfrench_": "Trousseau du temple de l'esprit", "NAspanish_": "Llavero del Templo del Espíritu", "EURitalian_": "Chiavi del Santuario dello Spirito", "EURgerman_": "Schlüsselbund des Geistertempels" }}, + "SHADOW_TEMPLE_KEY_RING": { "ItemType": "ITEMTYPE_SMALLKEY", "GetItemID": "0xD9", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ShadowTempleKeys", "HintKey": "SHADOW_TEMPLE_KEY_RING", "Name": { "NAenglish_": "Shadow Temple Key Ring", "NAfrench_": "Trousseau du temple de l'ombre", "NAspanish_": "Llavero del Templo de las Sombras", "EURitalian_": "Chiavi del Santuario dell'Ombra", "EURgerman_": "Schlüsselbund des Schattentempels" }}, + "BOTTOM_OF_THE_WELL_KEY_RING": { "ItemType": "ITEMTYPE_SMALLKEY", "GetItemID": "0xDA", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BottomOfTheWellKeys", "HintKey": "BOTTOM_OF_THE_WELL_KEY_RING", "Name": { "NAenglish_": "Bottom of the Well Key Ring", "NAfrench_": "Trousseau du fond du puits", "NAspanish_": "Llavero del fondo del pozo", "EURitalian_": "Chiavi del fondo del pozzo", "EURgerman_": "Schlüsselbund vom Grund des Brunnens" }}, + "GERUDO_TRAINING_GROUNDS_KEY_RING":{ "ItemType": "ITEMTYPE_SMALLKEY", "GetItemID": "0xDB", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "GerudoTrainingGroundsKeys", "HintKey": "GERUDO_TRAINING_GROUNDS_KEY_RING", "Name": { "NAenglish_": "Training Grounds Key Ring", "NAfrench_": "Trousseau du gymnase Gerudo", "NAspanish_": "Llavero del Centro de Instrucción", "EURitalian_": "Chiavi della zona di addestramento", "EURgerman_": "Schlüsselbund der Gerudo Trainingsarena" }}, + "GERUDO_FORTRESS_KEY_RING": { "ItemType": "ITEMTYPE_FORTRESS_SMALLKEY", "GetItemID": "0xDC", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "GerudoFortressKeys", "HintKey": "GERUDO_FORTRESS_KEY_RING", "Name": { "NAenglish_": "Gerudo Fortress Key Ring", "NAfrench_": "Trousseau du repaire Gerudo", "NAspanish_": "Llavero de la Fortaleza Gerudo", "EURitalian_": "Chiavi della fortezza Gerudo", "EURgerman_": "Schlüsselbund des Diebesverstecks" }}, + "GANONS_CASTLE_KEY_RING": { "ItemType": "ITEMTYPE_SMALLKEY", "GetItemID": "0xDD", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "GanonsCastleKeys", "HintKey": "GANONS_CASTLE_KEY_RING", "Name": { "NAenglish_": "Ganon's Castle Key Ring", "NAfrench_": "Trousseau du château de Ganon", "NAspanish_": "Llavero del Castillo de Ganon", "EURitalian_": "Chiavi del castello di Ganon", "EURgerman_": "Schlüsselbund von Ganons Schloss" }}, + + // Stones and Medallions + "KOKIRI_EMERALD": { "ItemType": "ITEMTYPE_DUNGEONREWARD", "GetItemID": "0xCB", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "KokiriEmerald", "HintKey": "KOKIRI_EMERALD", "Name": { "NAenglish_": "Kokiri's Emerald", "NAfrench_": "Émeraude Kokiri", "NAspanish_": "Esmeralda de los Kokiri", "EURitalian_": "Smeraldo dei Kokiri", "EURgerman_": "Kokiri-Smaragd" }}, + "GORON_RUBY": { "ItemType": "ITEMTYPE_DUNGEONREWARD", "GetItemID": "0xCC", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "GoronRuby", "HintKey": "GORON_RUBY", "Name": { "NAenglish_": "Goron's Ruby", "NAfrench_": "Rubis Goron", "NAspanish_": "Rubí de los Goron", "EURitalian_": "Rubino dei Goron", "EURgerman_": "Goronen-Rubin" }}, + "ZORA_SAPPHIRE": { "ItemType": "ITEMTYPE_DUNGEONREWARD", "GetItemID": "0xCD", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ZoraSapphire", "HintKey": "ZORA_SAPPHIRE", "Name": { "NAenglish_": "Zora's Sapphire", "NAfrench_": "Saphir Zora", "NAspanish_": "Zafiro de los Zora", "EURitalian_": "Zaffiro degli Zora", "EURgerman_": "Zora-Saphir" }}, + "FOREST_MEDALLION": { "ItemType": "ITEMTYPE_DUNGEONREWARD", "GetItemID": "0xCE", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ForestMedallion", "HintKey": "FOREST_MEDALLION", "Name": { "NAenglish_": "Forest Medallion", "NAfrench_": "Médaillon de la forêt", "NAspanish_": "Medallón del Bosque", "EURitalian_": "Medaglione della Foresta", "EURgerman_": "Amulett des Waldes" }}, + "FIRE_MEDALLION": { "ItemType": "ITEMTYPE_DUNGEONREWARD", "GetItemID": "0xCF", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "FireMedallion", "HintKey": "FIRE_MEDALLION", "Name": { "NAenglish_": "Fire Medallion", "NAfrench_": "Médaillon du feu", "NAspanish_": "Medallón del Fuego", "EURitalian_": "Medaglione del Fuoco", "EURgerman_": "Amulett des Feuers" }}, + "WATER_MEDALLION": { "ItemType": "ITEMTYPE_DUNGEONREWARD", "GetItemID": "0xD0", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "WaterMedallion", "HintKey": "WATER_MEDALLION", "Name": { "NAenglish_": "Water Medallion", "NAfrench_": "Médaillon de l'eau", "NAspanish_": "Medallón del Agua", "EURitalian_": "Medaglione dell'Acqua", "EURgerman_": "Amulett des Wassers" }}, + "SPIRIT_MEDALLION": { "ItemType": "ITEMTYPE_DUNGEONREWARD", "GetItemID": "0xD1", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SpiritMedallion", "HintKey": "SPIRIT_MEDALLION", "Name": { "NAenglish_": "Spirit Medallion", "NAfrench_": "Médaillon de l'esprit", "NAspanish_": "Medallón del Espíritu", "EURitalian_": "Medaglione dello Spirito", "EURgerman_": "Amulett der Geister" }}, + "SHADOW_MEDALLION": { "ItemType": "ITEMTYPE_DUNGEONREWARD", "GetItemID": "0xD2", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ShadowMedallion", "HintKey": "SHADOW_MEDALLION", "Name": { "NAenglish_": "Shadow Medallion", "NAfrench_": "Médaillon de l'ombre", "NAspanish_": "Medallón de la Sombra", "EURitalian_": "Medaglione dell'Ombra", "EURgerman_": "Amulett des Schattens" }}, + "LIGHT_MEDALLION": { "ItemType": "ITEMTYPE_DUNGEONREWARD", "GetItemID": "0xD3", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "LightMedallion", "HintKey": "LIGHT_MEDALLION", "Name": { "NAenglish_": "Light Medallion", "NAfrench_": "Médaillon de la lumière", "NAspanish_": "Medallón de la Luz", "EURitalian_": "Medaglione della Luce", "EURgerman_": "Amulett des Lichts" }}, + + // Generic Items + "RECOVERY_HEART": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_HEART", "ItemClass": "ITEMCLASS_JUNK", "LogicVar": "noVariable", "HintKey": "RECOVERY_HEART", "Name": { "NAenglish_": "Recovery Heart", "NAfrench_": "Cœur d'énergie", "NAspanish_": "Corazón", "EURitalian_": "Cuore", "EURgerman_": "Herz" }}, + "GREEN_RUPEE": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_RUPEE_GREEN", "ItemClass": "ITEMCLASS_JUNK", "LogicVar": "noVariable", "HintKey": "GREEN_RUPEE", "Name": { "NAenglish_": "Green Rupee", "NAfrench_": "Rubis vert", "NAspanish_": "Rupia verde", "EURitalian_": "Rupia verde", "EURgerman_": "Rubin" }}, + "BLUE_RUPEE": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_RUPEE_BLUE", "ItemClass": "ITEMCLASS_JUNK", "LogicVar": "noVariable", "HintKey": "BLUE_RUPEE", "Name": { "NAenglish_": "Blue Rupee", "NAfrench_": "Rubis bleu", "NAspanish_": "Rupia azul", "EURitalian_": "Rupia blu", "EURgerman_": "5 Rubine" }}, + "RED_RUPEE": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_RUPEE_RED", "ItemClass": "ITEMCLASS_JUNK", "LogicVar": "noVariable", "HintKey": "RED_RUPEE", "Name": { "NAenglish_": "Red Rupee", "NAfrench_": "Rubis rouge", "NAspanish_": "Rupia roja", "EURitalian_": "Rupia rossa", "EURgerman_": "20 Rubine" }}, + "PURPLE_RUPEE": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_RUPEE_PURPLE", "ItemClass": "ITEMCLASS_JUNK", "LogicVar": "noVariable", "HintKey": "PURPLE_RUPEE", "Name": { "NAenglish_": "Purple Rupee", "NAfrench_": "Rubis mauve", "NAspanish_": "Rupia morada", "EURenglish_": "Purple Rupee", "EURfrench_": "Rubis pourpre", "EURspanish_": "Rupia morada", "EURitalian_": "Rupia viola", "EURgerman_": "50 Rubine" }}, + "HUGE_RUPEE": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_RUPEE_GOLD", "ItemClass": "ITEMCLASS_JUNK", "LogicVar": "noVariable", "HintKey": "HUGE_RUPEE", "Name": { "NAenglish_": "Huge Rupee", "NAfrench_": "Énorme rubis", "NAspanish_": "Rupia gigante", "EURitalian_": "Rupia gigante", "EURgerman_": "200 Rubine" }}, + "PIECE_OF_HEART": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_HEART_PIECE", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "PieceOfHeart", "HintKey": "PIECE_OF_HEART", "Name": { "NAenglish_": "Piece of Heart", "NAfrench_": "Quart de cœur", "NAspanish_": "Pieza de corazón", "EURitalian_": "Frammento di cuore", "EURgerman_": "Herzteil" }}, + "HEART_CONTAINER": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_HEART_CONTAINER_2", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "HeartContainer", "HintKey": "HEART_CONTAINER", "Name": { "NAenglish_": "Heart Container", "NAfrench_": "Réceptacle de cœur", "NAspanish_": "Contenedor de corazón", "EURitalian_": "Portacuori", "EURgerman_": "Herzcontainer" }}, + "ICE_TRAP": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_ICE_TRAP", "ItemClass": "ITEMCLASS_JUNK", "LogicVar": "noVariable", "HintKey": "ICE_TRAP", "Name": { "NAenglish_": "Ice Trap", "NAfrench_": "Piège de glace", "NAspanish_": "Trampa de hielo", "EURitalian_": "Trappola", "EURgerman_": "Eisfalle" }}, + "MILK": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_MILK", "ItemClass": "ITEMCLASS_JUNK", "LogicVar": "noVariable", "HintKey": "NONE", "Name": { "NAenglish_": "Milk", "NAfrench_": "Lait", "NAspanish_": "Leche Lon Lon", "EURitalian_": "Latte Lon Lon", "EURgerman_": "Lon Lon-Milch" }}, + + // Refills + "BOMBS_5": { "ItemType": "ITEMTYPE_REFILL", "GetItemID": "GI_BOMBS_5", "ItemClass": "ITEMCLASS_JUNK", "LogicVar": "noVariable", "HintKey": "BOMBS_5", "Name": { "NAenglish_": "Bombs (5)", "NAfrench_": "Bombes (5)", "NAspanish_": "Bombas (5)", "EURitalian_": "5 bombe", "EURgerman_": "Bomben (5 Stück)" }}, + "BOMBS_10": { "ItemType": "ITEMTYPE_REFILL", "GetItemID": "GI_BOMBS_10", "ItemClass": "ITEMCLASS_JUNK", "LogicVar": "noVariable", "HintKey": "BOMBS_10", "Name": { "NAenglish_": "Bombs (10)", "NAfrench_": "Bombes (10)", "NAspanish_": "Bombas (10)", "EURitalian_": "10 bombe", "EURgerman_": "Bomben (10 Stück)" }}, + "BOMBS_20": { "ItemType": "ITEMTYPE_REFILL", "GetItemID": "GI_BOMBS_20", "ItemClass": "ITEMCLASS_JUNK", "LogicVar": "noVariable", "HintKey": "BOMBS_20", "Name": { "NAenglish_": "Bombs (20)", "NAfrench_": "Bombes (20)", "NAspanish_": "Bombas (20)", "EURitalian_": "20 bombe", "EURgerman_": "Bomben (20 Stück)" }}, + "BOMBCHU_5": { "ItemType": "ITEMTYPE_REFILL", "GetItemID": "GI_BOMBCHUS_5", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Bombchus5", "HintKey": "BOMBCHU_5", "Name": { "NAenglish_": "Bombchus (5)", "NAfrench_": "Bombchus (5)", "NAspanish_": "Bombchus (5)", "EURenglish_": "Bombchus (5)", "EURfrench_": "Missiles teigneux (5)", "EURspanish_": "Bombchus (5)", "EURitalian_": "5 radiomine", "EURgerman_": "Krabbelminen (5 Stück)" }}, + "BOMBCHU_10": { "ItemType": "ITEMTYPE_REFILL", "GetItemID": "GI_BOMBCHUS_10", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Bombchus10", "HintKey": "BOMBCHU_10", "Name": { "NAenglish_": "Bombchus (10)", "NAfrench_": "Bombchus (10)", "NAspanish_": "Bombchus (10)", "EURenglish_": "Bombchus (10)", "EURfrench_": "Missiles teigneux (10)", "EURspanish_": "Bombchus (10)", "EURitalian_": "10 radiomine", "EURgerman_": "Krabbelminen (10 Stück)" }}, + "BOMBCHU_20": { "ItemType": "ITEMTYPE_REFILL", "GetItemID": "GI_BOMBCHUS_20", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Bombchus20", "HintKey": "BOMBCHU_20", "Name": { "NAenglish_": "Bombchus (20)", "NAfrench_": "Bombchus (20)", "NAspanish_": "Bombchus (20)", "EURenglish_": "Bombchus (20)", "EURfrench_": "Missiles teigneux (20)", "EURspanish_": "Bombchus (20)", "EURitalian_": "20 radiomine", "EURgerman_": "Krabbelminen (20 Stück)" }}, + "BOMBCHU_DROP": { "ItemType": "ITEMTYPE_DROP", "GetItemID": "GI_BOMBCHUS_10", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BombchuDrop", "HintKey": "NONE", "Name": { "NAenglish_": "Bombchu Drop", "NAfrench_": "Bombchus", "NAspanish_": "Bombchus", "EURenglish_": "Bombchu Drop", "EURfrench_": "Missiles teigneux", "EURspanish_": "Bombchus", "EURitalian_": "Drop di radiomine", "EURgerman_": "Krabbelminen" }}, + "ARROWS_5": { "ItemType": "ITEMTYPE_REFILL", "GetItemID": "GI_ARROWS_SMALL", "ItemClass": "ITEMCLASS_JUNK", "LogicVar": "noVariable", "HintKey": "ARROWS_5", "Name": { "NAenglish_": "Arrows (5)", "NAfrench_": "Flèches (5)", "NAspanish_": "Flechas (5)", "EURitalian_": "5 frecce", "EURgerman_": "Pfeile (5 Stück)" }}, + "ARROWS_10": { "ItemType": "ITEMTYPE_REFILL", "GetItemID": "GI_ARROWS_MEDIUM", "ItemClass": "ITEMCLASS_JUNK", "LogicVar": "noVariable", "HintKey": "ARROWS_10", "Name": { "NAenglish_": "Arrows (10)", "NAfrench_": "Flèches (10)", "NAspanish_": "Flechas (10)", "EURitalian_": "10 frecce", "EURgerman_": "Pfeile (10 Stück)" }}, + "ARROWS_30": { "ItemType": "ITEMTYPE_REFILL", "GetItemID": "GI_ARROWS_LARGE", "ItemClass": "ITEMCLASS_JUNK", "LogicVar": "noVariable", "HintKey": "ARROWS_30", "Name": { "NAenglish_": "Arrows (30)", "NAfrench_": "Flèches (30)", "NAspanish_": "Flechas (30)", "EURitalian_": "30 frecce", "EURgerman_": "Pfeile (30 Stück)" }}, + "DEKU_NUTS_5": { "ItemType": "ITEMTYPE_REFILL", "GetItemID": "GI_NUTS_5", "ItemClass": "ITEMCLASS_JUNK", "LogicVar": "noVariable", "HintKey": "DEKU_NUTS_5", "Name": { "NAenglish_": "Deku Nuts (5)", "NAfrench_": "Noix Mojo (5)", "NAspanish_": "Nueces deku (5)", "EURitalian_": "5 noci Deku", "EURgerman_": "Deku-Nüsse (5 Stück)" }}, + "DEKU_NUTS_10": { "ItemType": "ITEMTYPE_REFILL", "GetItemID": "GI_NUTS_10", "ItemClass": "ITEMCLASS_JUNK", "LogicVar": "noVariable", "HintKey": "DEKU_NUTS_10", "Name": { "NAenglish_": "Deku Nuts (10)", "NAfrench_": "Noix Mojo (10)", "NAspanish_": "Nueces deku (10)", "EURitalian_": "10 noci Deku", "EURgerman_": "Deku-Nüsse (10 Stück)" }}, + "DEKU_SEEDS_30": { "ItemType": "ITEMTYPE_REFILL", "GetItemID": "GI_SEEDS_30", "ItemClass": "ITEMCLASS_JUNK", "LogicVar": "noVariable", "HintKey": "DEKU_SEEDS_30", "Name": { "NAenglish_": "Deku Seeds (30)", "NAfrench_": "Graines Mojo (30)", "NAspanish_": "Semillas deku (30)", "EURitalian_": "30 semi Deku", "EURgerman_": "Deku-Kerne (30 Stück)" }}, + "DEKU_STICK_1": { "ItemType": "ITEMTYPE_REFILL", "GetItemID": "GI_STICKS_1", "ItemClass": "ITEMCLASS_JUNK", "LogicVar": "noVariable", "HintKey": "DEKU_STICK_1", "Name": { "NAenglish_": "Deku Stick (1)", "NAfrench_": "Bâton Mojo (1)", "NAspanish_": "Palo deku (1)", "EURitalian_": "1 ramo Deku", "EURgerman_": "Deku-Stab (1 Stück)" }}, + "RED_POTION_REFILL": { "ItemType": "ITEMTYPE_REFILL", "GetItemID": "GI_POTION_RED", "ItemClass": "ITEMCLASS_JUNK", "LogicVar": "noVariable", "HintKey": "NONE", "Name": { "NAenglish_": "Red Potion Refill", "NAfrench_": "Potion rouge", "NAspanish_": "Recarga de poción roja", "EURitalian_": "Dose di pozione vita", "EURgerman_": "Rotes Elixier" }}, + "GREEN_POTION_REFILL": { "ItemType": "ITEMTYPE_REFILL", "GetItemID": "GI_POTION_GREEN", "ItemClass": "ITEMCLASS_JUNK", "LogicVar": "noVariable", "HintKey": "NONE", "Name": { "NAenglish_": "Green Potion Refill", "NAfrench_": "Potion verte", "NAspanish_": "Recarga de poción verde", "EURitalian_": "Dose di pozione magica", "EURgerman_": "Grünes Elixier" }}, + "BLUE_POTION_REFILL": { "ItemType": "ITEMTYPE_REFILL", "GetItemID": "GI_POTION_BLUE", "ItemClass": "ITEMCLASS_JUNK", "LogicVar": "noVariable", "HintKey": "NONE", "Name": { "NAenglish_": "Blue Potion Refill", "NAfrench_": "Potion bleue", "NAspanish_": "Recarga de poción azul", "EURitalian_": "Dose di pozione curatutto", "EURgerman_": "Blaues Elixier" }}, + + //Treasure Game + "TREASURE_GAME_HEART": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_HEART_PIECE_WIN", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "PieceOfHeart", "HintKey": "TREASURE_GAME_HEART", "Name": { "NAenglish_": "Piece of Heart (Treasure Chest Minigame)", "NAfrench_": "Quart de cœur (Chasse aux trésors)", "NAspanish_": "Pieza de corazón (Cofre del Tesoro)", "EURitalian_": "Frammento di cuore (sala della fortuna)", "EURgerman_": "Herzteil (Truhenlotterie)" }}, + "TREASURE_GAME_GREEN_RUPEE": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_RUPEE_GREEN_LOSE", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "TREASURE_GAME_GREEN_RUPEE", "Name": { "NAenglish_": "Green Rupee (Treasure Chest Minigame)", "NAfrench_": "Rubis vert (Chasse aux trésors)", "NAspanish_": "Rupia Verde (Cofre del Tesoro)", "EURitalian_": "Rupia verde (sala della fortuna)", "EURgerman_": "Rubin (Truhenlotterie)" }}, + + //Shop Items price + "BUY_DEKU_NUT_5": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x00", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Nuts", "HintKey": "DEKU_NUTS_5", "price": 15, "Name": { "NAenglish_": "Buy Deku Nut (5)", "NAfrench_": "Acheter: Noix Mojo (5)", "NAspanish_": "Comprar nueces deku (5)", "EURitalian_": "5 noci Deku in vendita", "EURgerman_": "Deku-Nüsse (5 Stück)" }}, + "BUY_ARROWS_30": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x01", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BuyArrow", "HintKey": "ARROWS_30", "price": 60, "Name": { "NAenglish_": "Buy Arrows (30)", "NAfrench_": "Acheter: Flèches (30)", "NAspanish_": "Comprar flechas (30)", "EURitalian_": "30 frecce in vendita", "EURgerman_": "Pfeile (30 Stück)" }}, + "BUY_ARROWS_50": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x02", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BuyArrow", "HintKey": "ARROWS_30", "price": 90, "Name": { "NAenglish_": "Buy Arrows (50)", "NAfrench_": "Acheter: Flèches (50)", "NAspanish_": "Comprar flechas (50)", "EURitalian_": "50 frecce in vendita", "EURgerman_": "Pfeile (50 Stück)" }}, + "BUY_BOMBS_525": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x03", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BuyBomb", "HintKey": "BOMBS_5", "price": 25, "Name": { "NAenglish_": "Buy Bombs (5) [25]", "NAfrench_": "Acheter: Bombes (5) [25]", "NAspanish_": "Comprar bombas (5) [25]", "EURitalian_": "5 bombe in vendita [25]", "EURgerman_": "Bomben (5 Stück) [25]" }}, + "BUY_DEKU_NUT_10": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x04", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Nuts", "HintKey": "DEKU_NUTS_10", "price": 30, "Name": { "NAenglish_": "Buy Deku Nut (10)", "NAfrench_": "Acheter: Noix Mojo (10)", "NAspanish_": "Comprar Nueces deku (10)", "EURitalian_": "10 noci Deku in vendita", "EURgerman_": "Deku-Nüsse (10 Stück)" }}, + "BUY_DEKU_STICK_1": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x05", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "Sticks", "HintKey": "DEKU_STICK_1", "price": 10, "Name": { "NAenglish_": "Buy Deku Stick (1)", "NAfrench_": "Acheter: Bâton Mojo (1)", "NAspanish_": "Comprar palos deku (1)", "EURitalian_": "1 ramo Deku in vendita", "EURgerman_": "Deku-Stab (1 Stück)" }}, + "BUY_BOMBS_10": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x06", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BuyBomb", "HintKey": "BOMBS_10", "price": 50, "Name": { "NAenglish_": "Buy Bombs (10)", "NAfrench_": "Acheter: Bombes (10)", "NAspanish_": "Comprar Bombas (10)", "EURitalian_": "10 bombe in vendita", "EURgerman_": "Bomben (10 Stück)" }}, + "BUY_FISH": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x07", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "FishAccess", "HintKey": "BOTTLE_WITH_FISH", "price": 200, "Name": { "NAenglish_": "Buy Fish", "NAfrench_": "Acheter: Poisson", "NAspanish_": "Comprar pez", "EURitalian_": "Pesce in vendita", "EURgerman_": "Fisch" }}, + "BUY_RED_POTION_30": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x08", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "BOTTLE_WITH_RED_POTION", "price": 30, "Name": { "NAenglish_": "Buy Red Potion [30]", "NAfrench_": "Acheter: Potion rouge [30]", "NAspanish_": "Comprar poción roja [30]", "EURitalian_": "Pozione vita in vendita [30]", "EURgerman_": "Rotes Elixier [30]" }}, + "BUY_GREEN_POTION": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x09", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BuyGPotion", "HintKey": "BOTTLE_WITH_GREEN_POTION", "price": 30, "Name": { "NAenglish_": "Buy Green Potion", "NAfrench_": "Acheter: Potion verte", "NAspanish_": "Comprar poción verde", "EURitalian_": "Pozione magica in vendita", "EURgerman_": "Grünes Elixier" }}, + "BUY_BLUE_POTION": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x0A", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BuyBPotion", "HintKey": "BOTTLE_WITH_BLUE_POTION", "price": 100, "Name": { "NAenglish_": "Buy Blue Potion", "NAfrench_": "Acheter: Potion bleue", "NAspanish_": "Comprar poción azul", "EURitalian_": "Pozione curatutto in vendita", "EURgerman_": "Blaues Elixier" }}, + "BUY_HYLIAN_SHIELD": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x0C", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "HylianShield", "HintKey": "HYLIAN_SHIELD", "price": 80, "Name": { "NAenglish_": "Buy Hylian Shield", "NAfrench_": "Acheter: Bouclier Hylien", "NAspanish_": "Comprar escudo hyliano", "EURitalian_": "Scudo Hylia in vendita", "EURgerman_": "Hylia-Schild" }}, + "BUY_DEKU_SHIELD": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x0D", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "DekuShield", "HintKey": "DEKU_SHIELD", "price": 40, "Name": { "NAenglish_": "Buy Deku Shield", "NAfrench_": "Acheter: Bouclier Mojo", "NAspanish_": "Comprar escudo deku", "EURitalian_": "Scudo Deku in vendita", "EURgerman_": "Deku-Schild" }}, + "BUY_GORON_TUNIC": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x0E", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "GoronTunic", "HintKey": "GORON_TUNIC", "price": 200, "Name": { "NAenglish_": "Buy Goron Tunic", "NAfrench_": "Acheter: Tunique Goron", "NAspanish_": "Comprar sayo goron", "EURitalian_": "Veste dei Goron in vendita", "EURgerman_": "Goronen-Rüstung" }}, + "BUY_ZORA_TUNIC": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x0F", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ZoraTunic", "HintKey": "ZORA_TUNIC", "price": 300, "Name": { "NAenglish_": "Buy Zora Tunic", "NAfrench_": "Acheter: Tunique Zora", "NAspanish_": "Comprar sayo zora", "EURitalian_": "Veste degli Zora in vendita", "EURgerman_": "Zora-Rüstung" }}, + "BUY_HEART": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x10", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "RECOVERY_HEART", "price": 10, "Name": { "NAenglish_": "Buy Heart", "NAfrench_": "Acheter: Coeur d'énergie", "NAspanish_": "Comprar corazón", "EURitalian_": "Cuore in vendita", "EURgerman_": "Herz" }}, + "BUY_BOMBCHU_10": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x15", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BuyBombchus10", "HintKey": "BOMBCHU_10", "price": 99, "Name": { "NAenglish_": "Buy Bombchu (10)", "NAfrench_": "Acheter: Bombchus (10)", "NAspanish_": "Comprar bombchus (10)", "EURenglish_": "Buy Bombchu (10)", "EURfrench_": "Acheter: Missiles teigneux (10)", "EURspanish_": "Comprar bombchus (10)", "EURitalian_": "10 radiomine in vendita", "EURgerman_": "Krabbelminen (10 Stück)" }}, + "BUY_BOMBCHU_20": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x16", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BuyBombchus20", "HintKey": "BOMBCHU_20", "price": 180, "Name": { "NAenglish_": "Buy Bombchu (20)", "NAfrench_": "Acheter: Bombchus (20)", "NAspanish_": "Comprar bombchus (20)", "EURenglish_": "Buy Bombchu (20)", "EURfrench_": "Acheter: Missiles teigneux (20)", "EURspanish_": "Comprar bombchus (20)", "EURitalian_": "20 radiomine in vendita", "EURgerman_": "Krabbelminen (20 Stück)" }}, + "BUY_BOMBCHU_5": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x18", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BuyBombchus5", "HintKey": "BOMBCHU_5", "price": 60, "Name": { "NAenglish_": "Buy Bombchu (5)", "NAfrench_": "Acheter: Bombchus (5)", "NAspanish_": "Comprar bombchus (5)", "EURenglish_": "Buy Bombchu (5)", "EURfrench_": "Acheter: Missiles teigneux (5)", "EURspanish_": "Comprar bombchus (5)", "EURitalian_": "5 radiomine in vendita", "EURgerman_": "Krabbelminen (5 Stück)" }}, + "BUY_DEKU_SEEDS_30": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x1D", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BuySeed", "HintKey": "DEKU_SEEDS_30", "price": 30, "Name": { "NAenglish_": "Buy Deku Seeds (30)", "NAfrench_": "Acheter: Graines Mojo (30)", "NAspanish_": "Comprar semillas deku (30)", "EURitalian_": "30 semi Deku in vendita", "EURgerman_": "Deku-Kerne (30 Stück)" }}, + "SOLD_OUT": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x26", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "NONE", "price": 0, "Name": { "NAenglish_": "Sold Out", "NAfrench_": "Vendu", "NAspanish_": "Vendido", "EURitalian_": "Venduto", "EURgerman_": "Das haben wir nicht auf Lager." }}, + "BUY_BLUE_FIRE": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x27", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BlueFireAccess", "HintKey": "BOTTLE_WITH_BLUE_FIRE", "price": 300, "Name": { "NAenglish_": "Buy Blue Fire", "NAfrench_": "Acheter: Flamme bleue", "NAspanish_": "Comprar fuego azul", "EURitalian_": "Fuoco blu in vendita", "EURgerman_": "Blaues Feuer" }}, + "BUY_BOTTLE_BUG": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x28", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BugsAccess", "HintKey": "BOTTLE_WITH_BUGS", "price": 50, "Name": { "NAenglish_": "Buy Bottle Bug", "NAfrench_": "Acheter: Insectes en flacon", "NAspanish_": "Comprar bichos", "EURitalian_": "Insetto in vendita", "EURgerman_": "Käfer" }}, + "BUY_POE": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x2A", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "BOTTLE_WITH_BIG_POE", "price": 30, "Name": { "NAenglish_": "Buy Poe", "NAfrench_": "Acheter: Esprit", "NAspanish_": "Comprar Poe", "EURitalian_": "Poo in vendita", "EURgerman_": "Irrlicht" }}, + "BUY_FAIRYS_SPIRIT": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x2B", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "FairyAccess", "HintKey": "BOTTLE_WITH_FAIRY", "price": 50, "Name": { "NAenglish_": "Buy Fairy's Spirit", "NAfrench_": "Acheter: Fée", "NAspanish_": "Comprar hada", "EURitalian_": "Fata in vendita", "EURgerman_": "Fee" }}, + "BUY_ARROWS_10": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x2C", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BuyArrow", "HintKey": "ARROWS_10", "price": 20, "Name": { "NAenglish_": "Buy Arrows (10)", "NAfrench_": "Acheter: Flèches (10)", "NAspanish_": "Comprar flechas (10)", "EURitalian_": "10 frecce in vendita", "EURgerman_": "Pfeile (10 Stück)" }}, + "BUY_BOMBS_20": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x2D", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BuyBomb", "HintKey": "BOMBS_20", "price": 80, "Name": { "NAenglish_": "Buy Bombs (20)", "NAfrench_": "Acheter: Bombes (20)", "NAspanish_": "Comprar bombas (20)", "EURitalian_": "20 bombe in vendita", "EURgerman_": "Bomben (20 Stück)" }}, + "BUY_BOMBS_30": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x2E", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BuyBomb", "HintKey": "BOMBS_20", "price": 120, "Name": { "NAenglish_": "Buy Bombs (30)", "NAfrench_": "Acheter: Bombes (30)", "NAspanish_": "Comprar bombas (30)", "EURitalian_": "30 bombe in vendita", "EURgerman_": "Bomben (30 Stück)" }}, + "BUY_BOMBS_535": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x2F", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "BuyBomb", "HintKey": "BOMBS_5", "price": 35, "Name": { "NAenglish_": "Buy Bombs (5) [35]", "NAfrench_": "Acheter: Bombes (5) [35]", "NAspanish_": "Comprar bombas (5) [35]", "EURitalian_": "5 bombe in vendita [35]", "EURgerman_": "Bomben (5 Stück) [35]" }}, + "BUY_RED_POTION_40": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x30", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "BOTTLE_WITH_RED_POTION", "price": 40, "Name": { "NAenglish_": "Buy Red Potion [40]", "NAfrench_": "Acheter: Potion rouge [40]", "NAspanish_": "Comprar poción roja [40]", "EURitalian_": "Pozione vita in vendita [40]", "EURgerman_": "Rotes Elixier [40]" }}, + "BUY_RED_POTION_50": { "ItemType": "ITEMTYPE_SHOP", "GetItemID": "0x31", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "BOTTLE_WITH_RED_POTION", "price": 50, "Name": { "NAenglish_": "Buy Red Potion [50]", "NAfrench_": "Acheter: Potion rouge [50]", "NAspanish_": "Comprar poción roja [50]", "EURitalian_": "Pozione vita in vendita [50]", "EURgerman_": "Rotes Elixier [50]" }}, + + // Enemy souls + "SOUL_ITEM_POE": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_POE", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulPoe", "HintKey": "SOUL_ITEM_POE", "Name": { "NAenglish_": "Poe Soul", "NAfrench_": "Essence d'Esprit", "NAspanish_": "Alma de Poe", "EURitalian_": "Anima di Poo", "EURgerman_": "Seele von Irrlichtern" }}, + "SOUL_ITEM_OCTOROK": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_OCTOROK", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulOctorok", "HintKey": "SOUL_ITEM_OCTOROK", "Name": { "NAenglish_": "Octorok Soul", "NAfrench_": "Essence d'Octorok", "NAspanish_": "Alma de Octorok", "EURitalian_": "Anima di Octorok", "EURgerman_": "Seele von Oktorok" }}, + "SOUL_ITEM_KEESE": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_KEESE", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulKeese", "HintKey": "SOUL_ITEM_KEESE", "Name": { "NAenglish_": "Keese Soul", "NAfrench_": "Essence de chauve-souris", "NAspanish_": "Alma de Keese", "EURitalian_": "Anima di Pipistrello", "EURgerman_": "Seele von Flederbeißern" }}, + "SOUL_ITEM_TEKTITE": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_TEKTITE", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulTektite", "HintKey": "SOUL_ITEM_TEKTITE", "Name": { "NAenglish_": "Tektite Soul", "NAfrench_": "Essence d'Araknon", "NAspanish_": "Alma de Tektite", "EURitalian_": "Anima di Tektite", "EURgerman_": "Seele von Arachnos" }}, + "SOUL_ITEM_LEEVER": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_LEEVER", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulLeever", "HintKey": "SOUL_ITEM_LEEVER", "Name": { "NAenglish_": "Leever Soul", "NAfrench_": "Essence de Leever", "NAspanish_": "Alma de Leever", "EURitalian_": "Anima di Leever", "EURgerman_": "Seele von Sandkillern" }}, + "SOUL_ITEM_PEAHAT": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_PEAHAT", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulPeahat", "HintKey": "SOUL_ITEM_PEAHAT", "Name": { "NAenglish_": "Peahat Soul", "NAfrench_": "Essence de Poislico", "NAspanish_": "Alma de Peahat", "EURenglish_": "Peahat Soul", "EURfrench_": "Essence de Peahat", "EURspanish_": "Alma de Peahat", "EURitalian_": "Anima di Bulbocottero", "EURgerman_": "Seele von Killeranas" }}, + "SOUL_ITEM_LIZALFOS": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_LIZALFOS", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulLizalfosDinolfos", "HintKey": "SOUL_ITEM_LIZALFOS", "Name": { "NAenglish_": "Lizalfos and Dinolfos Soul", "NAfrench_": "Essences de Lézalfos et de Dinolfos", "NAspanish_": "Alma de Lizalfos y Dinolfos", "EURitalian_": "Anima di Lizalfos e Dinolfos", "EURgerman_": "Seele von Echsalfos und Dinodorus" }}, + "SOUL_ITEM_SHABOM": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_SHABOM", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulShabom", "HintKey": "SOUL_ITEM_SHABOM", "Name": { "NAenglish_": "Shabom Soul", "NAfrench_": "Essence de Bulld'O", "NAspanish_": "Alma de Shabom", "EURitalian_": "Anima di Shabom", "EURgerman_": "Seele von Blubberblasen" }}, + "SOUL_ITEM_BIRI_BARI": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_BIRI_BARI", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulBiriBari", "HintKey": "SOUL_ITEM_BIRI_BARI", "Name": { "NAenglish_": "Biri and Bari Soul", "NAfrench_": "Essence de Biri et de Bari", "NAspanish_": "Alma de Biri y Bari", "EURitalian_": "Anima di Cnidiri e Cnidari", "EURgerman_": "Seele von Zappelquallen" }}, + "SOUL_ITEM_TAILPASARAN": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_TAILPASARAN", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulTailpasaran", "HintKey": "SOUL_ITEM_TAILPASARAN", "Name": { "NAenglish_": "Tailpasaran Soul", "NAfrench_": "Essence de Téniachoc", "NAspanish_": "Alma de Tailpasaran", "EURenglish_": "Tailpasaran Soul", "EURfrench_": "Essence de Tailpasaran", "EURspanish_": "Alma de Tailpasaran", "EURitalian_": "Anima di Trivolt", "EURgerman_": "Seele von Zangengreifern" }}, + "SOUL_ITEM_SKULLTULA": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_SKULLTULA", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulSkulltula", "HintKey": "SOUL_ITEM_SKULLTULA", "Name": { "NAenglish_": "Skulltula Soul", "NAfrench_": "Essence de Skulltula", "NAspanish_": "Alma de Skulltula", "EURitalian_": "Anima di Aracnula", "EURgerman_": "Seele von Skulltulas" }}, + "SOUL_ITEM_TORCH_SLUG": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_TORCH_SLUG", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulTorchSlug", "HintKey": "SOUL_ITEM_TORCH_SLUG", "Name": { "NAenglish_": "Torch Slug Soul", "NAfrench_": "Essence de Feu Visqueux", "NAspanish_": "Alma de Llamababa", "EURitalian_": "Anima di Lumaca di lava", "EURgerman_": "Seele von Lavaschleimen" }}, + "SOUL_ITEM_STINGER": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_STINGER", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulStinger", "HintKey": "SOUL_ITEM_STINGER", "Name": { "NAenglish_": "Stinger Soul", "NAfrench_": "Essence de Manta", "NAspanish_": "Alma de Stinger", "EURitalian_": "Anima di Trigone volante", "EURgerman_": "Seele von Elektromantas" }}, + "SOUL_ITEM_MOBLIN": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_MOBLIN", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulMoblin", "HintKey": "SOUL_ITEM_MOBLIN", "Name": { "NAenglish_": "Moblin Soul", "NAfrench_": "Essence de Moblin", "NAspanish_": "Alma de Moblin", "EURitalian_": "Anima di Grublin", "EURgerman_": "Seele von Moblin" }}, + "SOUL_ITEM_ARMOS": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_ARMOS", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulArmos", "HintKey": "SOUL_ITEM_ARMOS", "Name": { "NAenglish_": "Armos Soul", "NAfrench_": "Essence d'Armos", "NAspanish_": "Alma de Armos", "EURitalian_": "Anima di Armos", "EURgerman_": "Seele von Armos-Rittern" }}, + "SOUL_ITEM_DEKU_BABA": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_DEKU_BABA", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulDekuBaba", "HintKey": "SOUL_ITEM_DEKU_BABA", "Name": { "NAenglish_": "Deku Baba Soul", "NAfrench_": "Essence de Baba Mojo", "NAspanish_": "Alma de Baba Deku", "EURitalian_": "Anima di Deku Baba", "EURgerman_": "Seele von Dekuranhas" }}, + "SOUL_ITEM_BUBBLE": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_BUBBLE", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulBubble", "HintKey": "SOUL_ITEM_BUBBLE", "Name": { "NAenglish_": "Bubble Soul", "NAfrench_": "Essence de Tetdoss", "NAspanish_": "Alma de Bubble", "EURitalian_": "Anima di Nembo", "EURgerman_": "Seele von Totenschädeln" }}, + "SOUL_ITEM_FLYING_TRAP": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_FLYING_TRAP", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulFlyingTrap", "HintKey": "SOUL_ITEM_FLYING_TRAP", "Name": { "NAenglish_": "Flying Pot and Tile Soul", "NAfrench_": "Essences de jarres et de dalles volantes", "NAspanish_": "Alma de Jarrones y Baldosas voladoras", "EURitalian_": "Anima di Vasi e Piastrelle volanti", "EURgerman_": "Seele von fliegenden Krügen und Fliesen" }}, + "SOUL_ITEM_BEAMOS": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_BEAMOS", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulBeamos", "HintKey": "SOUL_ITEM_BEAMOS", "Name": { "NAenglish_": "Beamos Soul", "NAfrench_": "Essence de Sentinelle", "NAspanish_": "Alma de Beamos", "EURitalian_": "Anima di Laseros", "EURgerman_": "Seele von Strahlzyklopen" }}, + "SOUL_ITEM_WALLMASTER": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_WALLMASTER", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulWallmaster", "HintKey": "SOUL_ITEM_WALLMASTER", "Name": { "NAenglish_": "Wallmaster and Floormaster Soul", "NAfrench_": "Essences de Main du mal et de Grossbaffe", "NAspanish_": "Alma de Wallmaster y Floormaster", "EURenglish_": "Wallmaster and Floormaster Soul", "EURfrench_": "Essences de La Main et de Grossbaffe", "EURspanish_": "Alma de Wallmaster y Floormaster", "EURitalian_": "Anima di Mano Diabolica e Mano Rapace", "EURgerman_": "Seele von Todesgrapschern und Terrorgrapschern" }}, + "SOUL_ITEM_REDEAD_GIBDO": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_REDEAD_GIBDO", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulRedeadGibdo", "HintKey": "SOUL_ITEM_REDEAD_GIBDO", "Name": { "NAenglish_": "ReDead and Gibdo Soul", "NAfrench_": "Essences de Remort et de Gibdo", "NAspanish_": "Alma de ReDead y Gibdo", "EURenglish_": "ReDead and Gibdo Soul", "EURfrench_": "Essences d'Effroi et de Gibdo", "EURspanish_": "Alma de ReDead y Gibdo", "EURitalian_": "Anima di Zombie e Ghibdo", "EURgerman_": "Seele von Zombies und Wickel-Zombies" }}, + "SOUL_ITEM_SHELL_BLADE": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_SHELL_BLADE", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulShellBlade", "HintKey": "SOUL_ITEM_SHELL_BLADE", "Name": { "NAenglish_": "Shell Blade Soul", "NAfrench_": "Essence de Coquillos", "NAspanish_": "Alma de Moluscuchilla", "EURitalian_": "Anima di Ostrice", "EURgerman_": "Seele von Killermuscheln" }}, + "SOUL_ITEM_LIKE_LIKE": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_LIKE_LIKE", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulLikeLike", "HintKey": "SOUL_ITEM_LIKE_LIKE", "Name": { "NAenglish_": "Like Like Soul", "NAfrench_": "Essence de Like Like", "NAspanish_": "Alma de Like Like", "EURitalian_": "Anima di Like Like", "EURgerman_": "Seele von Raubschleimen" }}, + "SOUL_ITEM_TENTACLE": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_TENTACLE", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulParasiticTentacle", "HintKey": "SOUL_ITEM_TENTACLE", "Name": { "NAenglish_": "Parasitic Tentacle Soul", "NAfrench_": "Essence de Tentacule Parasite", "NAspanish_": "Alma de Tentáculo Parásito", "EURitalian_": "Anima di Tentacolo", "EURgerman_": "Seele von Parasiten-Tentakeln" }}, + "SOUL_ITEM_ANUBIS": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_ANUBIS", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulAnubis", "HintKey": "SOUL_ITEM_ANUBIS", "Name": { "NAenglish_": "Anubis Soul", "NAfrench_": "Essence d'Anubis", "NAspanish_": "Alma de Anubis", "EURitalian_": "Anima di Anubi", "EURgerman_": "Seele von Anubis" }}, + "SOUL_ITEM_SPIKE": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_SPIKE", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulSpike", "HintKey": "SOUL_ITEM_SPIKE", "Name": { "NAenglish_": "Spike Soul", "NAfrench_": "Essence de Hérisson métallique", "NAspanish_": "Alma de Erizo Metálico", "EURenglish_": "Spike Soul", "EURfrench_": "Essence de Spike", "EURspanish_": "Alma de Erizo Metálico", "EURitalian_": "Anima di Riccio di Ferro", "EURgerman_": "Seele von Stachelsteinen" }}, + "SOUL_ITEM_SKULL_KID": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_SKULL_KID", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulSkullKid", "HintKey": "SOUL_ITEM_SKULL_KID", "Name": { "NAenglish_": "Skull Kid Soul", "NAfrench_": "Essence de Skull Kid", "NAspanish_": "Alma de Skull Kid", "EURitalian_": "Anima di Bimbo Perduto", "EURgerman_": "Seele von Horror-Kid" }}, + "SOUL_ITEM_FREEZARD": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_FREEZARD", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulFreezard", "HintKey": "SOUL_ITEM_FREEZARD", "Name": { "NAenglish_": "Freezard Soul", "NAfrench_": "Essence de Glazzard", "NAspanish_": "Alma de Freezard", "EURenglish_": "Freezard Soul", "EURfrench_": "Essence de Freezard", "EURspanish_": "Alma de Freezard", "EURitalian_": "Anima di Freezard", "EURgerman_": "Seele von Frostechsen" }}, + "SOUL_ITEM_DEKU_SCRUB": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_DEKU_SCRUB", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulDekuScrub", "HintKey": "SOUL_ITEM_DEKU_SCRUB", "Name": { "NAenglish_": "Deku Scrub Soul", "NAfrench_": "Essence de Peste Mojo", "NAspanish_": "Alma de Matorral Deku", "EURitalian_": "Anima di Cespuglio Deku", "EURgerman_": "Seele von Laubkerlen" }}, + "SOUL_ITEM_WOLFOS": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_WOLFOS", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulWolfos", "HintKey": "SOUL_ITEM_WOLFOS", "Name": { "NAenglish_": "Wolfos Soul", "NAfrench_": "Essence de Loufos", "NAspanish_": "Alma de Wolfos", "EURenglish_": "Wolfos Soul", "EURfrench_": "Essence de Wolfos", "EURspanish_": "Alma de Wolfos", "EURitalian_": "Anima di Lupo", "EURgerman_": "Seele von Wolfos" }}, + "SOUL_ITEM_STALCHILD": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_STALCHILD", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulStalchild", "HintKey": "SOUL_ITEM_STALCHILD", "Name": { "NAenglish_": "Stalchild Soul", "NAfrench_": "Essence de Sakdoss", "NAspanish_": "Alma de Stalchild", "EURitalian_": "Anima di Stalfosso", "EURgerman_": "Seele von Knochengängern" }}, + "SOUL_ITEM_GUAY": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_GUAY", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulGuay", "HintKey": "SOUL_ITEM_GUAY", "Name": { "NAenglish_": "Guay Soul", "NAfrench_": "Essence de Toukor", "NAspanish_": "Alma de Guay", "EURitalian_": "Anima di Corvacchia", "EURgerman_": "Seele von Wüstenkrähen" }}, + "SOUL_ITEM_DOOR_MIMIC": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_DOOR_MIMIC", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulDoorMimic", "HintKey": "SOUL_ITEM_DOOR_MIMIC", "Name": { "NAenglish_": "Door Mimic Soul", "NAfrench_": "Essence de Simili-Porte", "NAspanish_": "Alma de Puerta Falsa", "EURitalian_": "Anima di Porta Falsa", "EURgerman_": "Seele von Türmimics" }}, + "SOUL_ITEM_STALFOS": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_STALFOS", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulStalfos", "HintKey": "SOUL_ITEM_STALFOS", "Name": { "NAenglish_": "Stalfos Soul", "NAfrench_": "Essence de Stalfos", "NAspanish_": "Alma de Stalfos", "EURitalian_": "Anima di Stalfos", "EURgerman_": "Seele von Stalfos" }}, + "SOUL_ITEM_DARK_LINK": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_DARK_LINK", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulDarkLink", "HintKey": "SOUL_ITEM_DARK_LINK", "Name": { "NAenglish_": "Dark Link Soul", "NAfrench_": "Essence de Link noir", "NAspanish_": "Alma de Link Oscuro", "EURitalian_": "Anima di Link Oscuro", "EURgerman_": "Seele von schwarzen Link" }}, + "SOUL_ITEM_FLARE_DANCER": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_FLARE_DANCER", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulFlareDancer", "HintKey": "SOUL_ITEM_FLARE_DANCER", "Name": { "NAenglish_": "Flare Dancer Soul", "NAfrench_": "Essence de Danse-Flamme", "NAspanish_": "Alma de Bailafuego", "EURitalian_": "Anima di Fiammerino", "EURgerman_": "Seele von Flammenderwischen" }}, + "SOUL_ITEM_DEAD_HAND": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_DEAD_HAND", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulDeadHand", "HintKey": "SOUL_ITEM_DEAD_HAND", "Name": { "NAenglish_": "Dead Hand Soul", "NAfrench_": "Essence de Main mortelle", "NAspanish_": "Alma de Mano Muerta", "EURenglish_": "Dead Hand Soul", "EURfrench_": "Essence de Poigneur", "EURspanish_": "Alma de Mano Muerta", "EURitalian_": "Anima di Smaniosso", "EURgerman_": "Seele von Hirnsaugern" }}, + "SOUL_ITEM_GERUDO": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_GERUDO", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulGerudo", "HintKey": "SOUL_ITEM_GERUDO", "Name": { "NAenglish_": "Gerudo and Iron Knuckle Soul", "NAfrench_": "Essence de Voleuse Gerudo et Poing de fer", "NAspanish_": "Alma de Gerudo y Nudillo de hierro", "EURenglish_": "Gerudo and Iron Knuckle Soul", "EURfrench_": "Essence de Voleuse Gerudo et Hache-Viande", "EURspanish_": "Alma de Gerudo y Nudillo de hierro", "EURitalian_": "Anima di Gerudo e Guerriero d'acciaio", "EURgerman_": "Seele von Gerudos und Eisenprinzen" }}, + "SOUL_ITEM_GOHMA": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_GOHMA", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulGohma", "HintKey": "SOUL_ITEM_GOHMA", "Name": { "NAenglish_": "Gohma Soul", "NAfrench_": "Essence de Gohma", "NAspanish_": "Alma de Gohma", "EURitalian_": "Anima di Gohma", "EURgerman_": "Seele von Gohma" }}, + "SOUL_ITEM_DODONGO": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_DODONGO", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulDodongo", "HintKey": "SOUL_ITEM_DODONGO", "Name": { "NAenglish_": "Dodongo Soul", "NAfrench_": "Essence de Dodongo", "NAspanish_": "Alma de Dodongo", "EURitalian_": "Anima di Dodongo", "EURgerman_": "Seele von Dodongos" }}, + "SOUL_ITEM_BARINADE": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_BARINADE", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulBarinade", "HintKey": "SOUL_ITEM_BARINADE", "Name": { "NAenglish_": "Barinade Soul", "NAfrench_": "Essence de Barinade", "NAspanish_": "Alma de Barinade", "EURitalian_": "Anima di Cnidade", "EURgerman_": "Seele von Barinade" }}, + "SOUL_ITEM_PHANTOM_GANON": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_PHANTOM_GANON","ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulPhantomGanon", "HintKey": "SOUL_ITEM_PHANTOM_GANON", "Name": { "NAenglish_": "Phantom Ganon Soul", "NAfrench_": "Essence de Ganon Spectral", "NAspanish_": "Alma de Ganon Fantasma", "EURitalian_": "Anima di Spettro Ganon", "EURgerman_": "Seele von Phantom-Ganon" }}, + "SOUL_ITEM_VOLVAGIA": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_VOLVAGIA", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulVolvagia", "HintKey": "SOUL_ITEM_VOLVAGIA", "Name": { "NAenglish_": "Volvagia Soul", "NAfrench_": "Essence de Volcania", "NAspanish_": "Alma de Volvagia", "EURitalian_": "Anima di Varubaja", "EURgerman_": "Seele von Volvagia" }}, + "SOUL_ITEM_MORPHA": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_MORPHA", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulMorpha", "HintKey": "SOUL_ITEM_MORPHA", "Name": { "NAenglish_": "Morpha Soul", "NAfrench_": "Essence de Morpha", "NAspanish_": "Alma de Morpha", "EURitalian_": "Anima di Morpha", "EURgerman_": "Seele von Morpha" }}, + "SOUL_ITEM_BONGO_BONGO": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_BONGO_BONGO", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulBongoBongo", "HintKey": "SOUL_ITEM_BONGO_BONGO", "Name": { "NAenglish_": "Bongo Bongo Soul", "NAfrench_": "Essence de Bongo Bongo", "NAspanish_": "Alma de Bongo Bongo", "EURitalian_": "Anima di Bongo Bongo", "EURgerman_": "Seele von Bongo Bongo" }}, + "SOUL_ITEM_TWINROVA": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_TWINROVA", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulTwinrova", "HintKey": "SOUL_ITEM_TWINROVA", "Name": { "NAenglish_": "Twinrova Soul", "NAfrench_": "Essence de Birova", "NAspanish_": "Alma de Birova", "EURenglish_": "Twinrova Soul", "EURfrench_": "Essence de Twinrova", "EURspanish_": "Alma de Birova", "EURitalian_": "Anima di Duerova", "EURgerman_": "Seele von Twinrova" }}, + "SOUL_ITEM_GANON": { "ItemType": "ITEMTYPE_ENEMY_SOUL", "GetItemID": "GI_SOUL_GANON", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "SoulGanon", "HintKey": "SOUL_ITEM_GANON", "Name": { "NAenglish_": "Ganon Soul", "NAfrench_": "Essence de Ganon", "NAspanish_": "Alma de Ganon", "EURitalian_": "Anima di Ganon", "EURgerman_": "Seele von Ganon" }}, + + // Ocarina Note Buttons + "OCA_BUTTON_ITEM_L": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_OCARINA_BUTTON_L", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "OcarinaButtonL", "HintKey": "OCA_BUTTON_ITEM_L", "Name": { "NAenglish_": "Ocarina L Button", "NAfrench_": "Bouton L de l'ocarina", "NAspanish_": "Botón L de la ocarina", "EURitalian_": "Pulsante L dell'ocarina", "EURgerman_": "Ocarina L-Knopf" }}, + "OCA_BUTTON_ITEM_R": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_OCARINA_BUTTON_R", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "OcarinaButtonR", "HintKey": "OCA_BUTTON_ITEM_R", "Name": { "NAenglish_": "Ocarina R Button", "NAfrench_": "Bouton R de l'ocarina", "NAspanish_": "Botón R de la ocarina", "EURitalian_": "Pulsante R dell'ocarina", "EURgerman_": "Ocarina R-Knopf" }}, + "OCA_BUTTON_ITEM_X": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_OCARINA_BUTTON_X", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "OcarinaButtonX", "HintKey": "OCA_BUTTON_ITEM_X", "Name": { "NAenglish_": "Ocarina X Button", "NAfrench_": "Bouton X de l'ocarina", "NAspanish_": "Botón X de la ocarina", "EURitalian_": "Pulsante X dell'ocarina", "EURgerman_": "Ocarina X-Knopf" }}, + "OCA_BUTTON_ITEM_Y": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_OCARINA_BUTTON_Y", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "OcarinaButtonY", "HintKey": "OCA_BUTTON_ITEM_Y", "Name": { "NAenglish_": "Ocarina Y Button", "NAfrench_": "Bouton Y de l'ocarina", "NAspanish_": "Botón Y de la ocarina", "EURitalian_": "Pulsante Y dell'ocarina", "EURgerman_": "Ocarina Y-Knopf" }}, + "OCA_BUTTON_ITEM_A": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_OCARINA_BUTTON_A", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "OcarinaButtonA", "HintKey": "OCA_BUTTON_ITEM_A", "Name": { "NAenglish_": "Ocarina A Button", "NAfrench_": "Bouton A de l'ocarina", "NAspanish_": "Botón A de la ocarina", "EURitalian_": "Pulsante A dell'ocarina", "EURgerman_": "Ocarina A-Knopf" }}, + + "TRIFORCE_PIECE": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "GI_TRIFORCE_PIECE", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "TriforcePieces", "HintKey": "TRIFORCE_PIECE", "Name": { "NAenglish_": "Triforce Piece", "NAfrench_": "Fragment de la Triforce", "NAspanish_": "Fragmento de la Trifuerza", "EURitalian_": "Frammento di Triforza", "EURgerman_": "Triforce-Splitter" }}, + + "TRIFORCE": { "ItemType": "ITEMTYPE_EVENT", "GetItemID": "GI_RUPEE_RED_LOSE", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "NONE", "Name": { "NAenglish_": "Triforce", "NAfrench_": "Triforce", "NAspanish_": "Trifuerza", "EURitalian_": "Triforza", "EURgerman_": "Triforce" }}, + "HINT": { "ItemType": "ITEMTYPE_EVENT", "GetItemID": "GI_RUPEE_BLUE_LOSE", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "NONE", "Name": { "NAenglish_": "Hint", "NAfrench_": "Indice", "NAspanish_": "Pista", "EURitalian_": "Indizio", "EURgerman_": "Hinweis" }} + +// "HOOKSHOT": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x80", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveHookshot", "HintKey": "HOOKSHOT", "Name": { "NAenglish_": "Hookshot", "NAfrench_": "Grappin", "NAspanish_": "Gancho", "EURitalian_": "Arpione", "EURgerman_": "Fanghaken" }}, +// "LONGSHOT": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x80", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveHookshot", "HintKey": "LONGSHOT", "Name": { "NAenglish_": "Longshot", "NAfrench_": "Supergrappin", "NAspanish_": "Supergancho", "EURenglish_": "Longshot", "EURfrench_": "Super grappin", "EURspanish_": "Supergancho", "EURitalian_": "Super arpione", "EURgerman_": "Enterhaken" }}, +// "FAIRY_OCARINA": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x8B", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveOcarina", "HintKey": "FAIRY_OCARINA", "Name": { "NAenglish_": "Fairy Ocarina", "NAfrench_": "Ocarina des fées", "NAspanish_": "Ocarina de las Hadas", "EURitalian_": "Ocarina magica", "EURgerman_": "Feen-Okarina" }}, +// "OCARINA_OF_TIME": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x8B", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveOcarina", "HintKey": "OCARINA_OF_TIME", "Name": { "NAenglish_": "Ocarina of Time", "NAfrench_": "Ocarina du temps", "NAspanish_": "Ocarina del Tiempo", "EURitalian_": "Ocarina del Tempo", "EURgerman_": "Okarina der Zeit" }}, +// "BOMB_BAG": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x82", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveBombBag", "HintKey": "BOMB_BAG", "Name": { "NAenglish_": "Bomb Bag", "NAfrench_": "Sac de bombes", "NAspanish_": "Saco de bombas", "EURitalian_": "Portabombe (20 bombe)", "EURgerman_": "Bombentasche" }}, +// "BIG_BOMB_BAG": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x82", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveBombBag", "HintKey": "BIG_BOMB_BAG", "Name": { "NAenglish_": "Big Bomb Bag", "NAfrench_": "Grand sac de bombes", "NAspanish_": "Saco de bombas grande", "EURitalian_": "Portabombe grande (30 bombe)", "EURgerman_": "Große Bombentasche" }}, +// "BIGGEST_BOMB_BAG": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x82", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveBombBag", "HintKey": "BIGGEST_BOMB_BAG", "Name": { "NAenglish_": "Biggest Bomb Bag", "NAfrench_": "Énorme sac de bombes", "NAspanish_": "Saco de bombas gigante", "EURitalian_": "Mega portabombe (40 bombe)", "EURgerman_": "Riesen-Bombentasche" }}, +// "FAIRY_BOW": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x83", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveBow", "HintKey": "FAIRY_BOW", "Name": { "NAenglish_": "Fairy Bow", "NAfrench_": "Arc des fées", "NAspanish_": "Arco de las Hadas", "EURitalian_": "Arco magico", "EURgerman_": "Feen-Bogen" }}, +// "BIG_QUIVER": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x83", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveBow", "HintKey": "BIG_QUIVER", "Name": { "NAenglish_": "Big Quiver", "NAfrench_": "Grand carquois", "NAspanish_": "Carcaj grande", "EURitalian_": "Faretra grande (40 frecce)", "EURgerman_": "Großer Köcher" }}, +// "BIGGEST_QUIVER": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x83", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveBow", "HintKey": "BIGGEST_QUIVER", "Name": { "NAenglish_": "Biggest Quiver", "NAfrench_": "Énorme carquois", "NAspanish_": "Carcaj gigante", "EURitalian_": "Mega faretra (50 frecce)", "EURgerman_": "Riesenköcher" }}, +// "FAIRY_SLINGSHOT": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x84", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveBulletBag", "HintKey": "FAIRY_SLINGSHOT", "Name": { "NAenglish_": "Fairy Slingshot", "NAfrench_": "Lance-pierre des fées", "NAspanish_": "Resortera de las hadas", "EURitalian_": "Fionda magica", "EURgerman_": "Feen-Schleuder" }}, +// "BIG_BULLET_BAG": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x84", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveBulletBag", "HintKey": "BIG_BULLET_BAG", "Name": { "NAenglish_": "Big Deku Seed Bullet Bag", "NAfrench_": "Grand sac de graines Mojo", "NAspanish_": "Bolsa de semillas deku grande", "EURitalian_": "Grande portasemi Deku (40 semi)", "EURgerman_": "Große Munitionstasche für Deku-Kerne" }}, +// "BIGGEST_BULLET_BAD": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x84", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveBulletBag", "HintKey": "BIGGEST_BULLET_BAD", "Name": { "NAenglish_": "Biggest Deku Seed Bullet Bag", "NAfrench_": "Énorme sac de graines Mojo", "NAspanish_": "Bolsa de semillas deku gigante", "EURitalian_": "Mega portasemi Deku (50 semi)", "EURgerman_": "Riesen-Munitionstasche für Deku-Kerne" }}, +// "GORONS_BRACELET": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x81", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveStrength", "HintKey": "GORONS_BRACELET", "Name": { "NAenglish_": "Goron's Bracelet", "NAfrench_": "Bracelet Goron", "NAspanish_": "Brazalete de los Goron", "EURitalian_": "Bracciale dei Goron", "EURgerman_": "Goronen-Armband" }}, +// "SILVER_GAUNTLETS": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x81", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveStrength", "HintKey": "SILVER_GAUNTLETS", "Name": { "NAenglish_": "Silver Gauntlets", "NAfrench_": "Gantelets d'argent", "NAspanish_": "Guantes de plata", "EURitalian_": "Guanti d'argento", "EURgerman_": "Silberhandschuhe" }}, +// "GOLDEN_GAUNTLETS": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x81", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveStrength", "HintKey": "GOLDEN_GAUNTLETS", "Name": { "NAenglish_": "Golden Gauntlets", "NAfrench_": "Gantelets d'or", "NAspanish_": "Guantes de oro", "EURitalian_": "Guanti d'oro", "EURgerman_": "Goldhandschuhe" }}, +// "SILVER_SCALE": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x86", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveScale", "HintKey": "SILVER_SCALE", "Name": { "NAenglish_": "Silver Scale", "NAfrench_": "Écaille d'argent", "NAspanish_": "Escama de Plata", "EURitalian_": "Squama d'argento", "EURgerman_": "Silberne Schuppe" }}, +// "GOLDEN_SCALE": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x86", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveScale", "HintKey": "GOLDEN_SCALE", "Name": { "NAenglish_": "Golden Scale", "NAfrench_": "Écaille d'or", "NAspanish_": "Escama de Oro", "EURitalian_": "Squama d'oro", "EURgerman_": "Goldene Schuppe" }}, +// "ADULT_WALLET": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x85", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveWallet", "HintKey": "ADULT_WALLET", "Name": { "NAenglish_": "Adult Wallet", "NAfrench_": "Grande poche", "NAspanish_": "Bolsa de adulto", "EURenglish_": "Adult Wallet", "EURfrench_": "Grande bourse", "EURspanish_": "Bolsa de adulto", "EURitalian_": "Portarupie da adulto", "EURgerman_": "Große Börse" }}, +// "GIANT_WALLET": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x85", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveWallet", "HintKey": "GIANT_WALLET", "Name": { "NAenglish_": "Giant Wallet", "NAfrench_": "Poche de géant", "NAspanish_": "Bolsa gigante", "EURenglish_": "Giant Wallet", "EURfrench_": "Bourse de géant", "EURspanish_": "Bolsa gigante", "EURitalian_": "Portarupie del gigante", "EURgerman_": "Riesenbörse" }}, +// "TYCOON_WALLET": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x85", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveWallet", "HintKey": "TYCOON_WALLET", "Name": { "NAenglish_": "Tycoon Wallet", "NAfrench_": "Poche de star", "NAspanish_": "Bolsa de ricachón", "EURenglish_": "Tycoon Wallet", "EURfrench_": "Bourse de star", "EURspanish_": "Bolsa de ricachón", "EURitalian_": "Portarupie di lusso", "EURgerman_": "Tycoon-Börse" }}, +// "DEKU_NUT_CAPACITY_30": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x87", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "DEKU_NUT_CAPACITY_30", "Name": { "NAenglish_": "Deku Nut Capacity (30)", "NAfrench_": "Capacité de noix Mojo (20)", "NAspanish_": "Capacidad de nueces deku (40)", "EURitalian_": "Espansione per noci Deku (40)", "EURgerman_": "Deku-Nuss-Kapazität (30)" }}, +// "DEKU_NUT_CAPACITY_40": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x87", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "DEKU_NUT_CAPACITY_40", "Name": { "NAenglish_": "Deku Nut Capacity (40)", "NAfrench_": "Capacité de noix Mojo (30)", "NAspanish_": "Capacidad de nueces deku (50)", "EURitalian_": "Espansione per noci Deku (50)", "EURgerman_": "Deku-Nuss-Kapazität (40)" }}, +// "DEKU_NUT_CAPACITY_20": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x88", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "DEKU_NUT_CAPACITY_20", "Name": { "NAenglish_": "Deku Stick Capacity (20)", "NAfrench_": "Capacité de bâtons Mojo (20)", "NAspanish_": "Capacidad de palos deku (20)", "EURitalian_": "Espansione per rami Deku (20)", "EURgerman_": "Deku-Stab-Kapazität (20)" }}, +// "DEKU_NUT_CAPACITY_30": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x88", "ItemClass": "ITEMCLASS_NONE", "LogicVar": "noVariable", "HintKey": "DEKU_NUT_CAPACITY_30", "Name": { "NAenglish_": "Deku Nut Capacity (30)", "NAfrench_": "Capacité de noix Mojo (20)", "NAspanish_": "Capacidad de nueces deku (40)", "EURitalian_": "Espansione per rami Deku (30)", "EURgerman_": "Deku-Stab-Kapazität (30)" }}, +// "MAGIC_METER": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x8A", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveMagic", "HintKey": "MAGIC_METER", "Name": { "NAenglish_": "Magic Meter", "NAfrench_": "Jauge de magie", "NAspanish_": "Poder mágico", "EURitalian_": "Barra della magia", "EURgerman_": "Magische Kraft" }}, +// "ENHANCED_MAGIC_METER": { "ItemType": "ITEMTYPE_ITEM", "GetItemID": "0x8A", "ItemClass": "ITEMCLASS_ADVANCEMENT", "LogicVar": "ProgressiveMagic", "HintKey": "ENHANCED_MAGIC_METER", "Name": { "NAenglish_": "Enhanced Magic Meter", "NAfrench_": "Jauge de magie améliorée", "NAspanish_": "Poder mágico mejorado", "EURitalian_": "Barra della magia aumentata", "EURgerman_": "Erhöhte Magische Kraft" }} +} \ No newline at end of file diff --git a/data/location_table.jsonc b/data/location_table.jsonc new file mode 100644 index 00000000..c9f0a067 --- /dev/null +++ b/data/location_table.jsonc @@ -0,0 +1,1029 @@ +{ + // No area type scene flag name HintKey (hint_list.cpp) vanillaItem categories collection check (if needed) collection check group + "NONE": { "type": "Base", "scene": "0xFF", "flag": "0xFF", "name": "Invalid Location", "HintKey": "NONE", "vanillaItem": "NONE", "categories": [], "SpoilerCollectionCheck": "None()"}, + "TRIFORCE_HUNT_GOAL": { "type": "Base", "scene": "0xFF", "flag": "0xFF", "name": "Triforce Hunt Goal", "HintKey": "NONE", "vanillaItem": "TRIFORCE", "categories": [], "SpoilerCollectionCheck": "None()"}, + + // Kokiri Forest + "KF_KOKIRI_SWORD_CHEST": { "type": "Chest", "scene": "0x55", "flag": "0x00", "name": "KF Kokiri Sword Chest", "HintKey": "KF_KOKIRI_SWORD_CHEST", "vanillaItem": "KOKIRI_SWORD", "categories": ["cKokiriForest", "cForest"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_MIDOS_TOP_LEFT_CHEST": { "type": "Chest", "scene": "0x28", "flag": "0x00", "name": "KF Mido Top Left Chest", "HintKey": "KF_MIDOS_TOP_LEFT_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cKokiriForest", "cForest"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_MIDOS_TOP_RIGHT_CHEST": { "type": "Chest", "scene": "0x28", "flag": "0x01", "name": "KF Mido Top Right Chest", "HintKey": "KF_MIDOS_TOP_RIGHT_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cKokiriForest", "cForest"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_MIDOS_BOTTOM_LEFT_CHEST": { "type": "Chest", "scene": "0x28", "flag": "0x02", "name": "KF Mido Bottom Left Chest", "HintKey": "KF_MIDOS_BOTTOM_LEFT_CHEST", "vanillaItem": "GREEN_RUPEE", "categories": ["cKokiriForest", "cForest"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_MIDOS_BOTTOM_RIGHT_CHEST": { "type": "Chest", "scene": "0x28", "flag": "0x03", "name": "KF Mido Bottom Right Chest", "HintKey": "KF_MIDOS_BOTTOM_RIGHT_CHEST", "vanillaItem": "RECOVERY_HEART", "categories": ["cKokiriForest", "cForest"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_STORMS_GROTTO_CHEST": { "type": "Chest", "scene": "0x3E", "flag": "0x0C", "name": "KF Storms Grotto Chest", "HintKey": "KF_STORMS_GROTTO_CHEST", "vanillaItem": "RED_RUPEE", "categories": ["cKokiriForest", "cForest", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + + // Lost Woods + "LW_NEAR_SHORTCUTS_GROTTO_CHEST": { "type": "Chest", "scene": "0x3E", "flag": "0x14", "name": "LW Near Shortcuts Grotto Chest", "HintKey": "LW_NEAR_SHORTCUTS_GROTTO_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cLostWoods", "cForest", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "LW_SKULL_KID": { "type": "Base", "scene": "0x5B", "flag": "0x3E", "name": "LW Skull Kid", "HintKey": "LW_SKULL_KID", "vanillaItem": "PIECE_OF_HEART", "categories": ["cLostWoods", "cForest"], "SpoilerCollectionCheck": "ItemGetInf(30)", "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "LW_TRADE_COJIRO": { "type": "Base", "scene": "0x5B", "flag": "0x1F", "name": "LW Trade Cojiro", "HintKey": "LW_TRADE_COJIRO", "vanillaItem": "ODD_MUSHROOM", "categories": ["cLostWoods", "cForest", "cAdultTrade"], "SpoilerCollectionCheck": "ItemGetInf(37)", "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "LW_TRADE_ODD_POULTICE": { "type": "Base", "scene": "0x5B", "flag": "0x21", "name": "LW Trade Odd Poultice", "HintKey": "LW_TRADE_ODD_POULTICE", "vanillaItem": "POACHERS_SAW", "categories": ["cLostWoods", "cForest", "cAdultTrade"], "SpoilerCollectionCheck": "ItemGetInf(57)", "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "LW_OCARINA_MEMORY_GAME": { "type": "Base", "scene": "0x5B", "flag": "0x76", "name": "LW Ocarina Memory Game", "HintKey": "LW_OCARINA_MEMORY_GAME", "vanillaItem": "PIECE_OF_HEART", "categories": ["cLostWoods", "cForest", "cMinigame"], "SpoilerCollectionCheck": "ItemGetInf(31)", "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "LW_TARGET_IN_WOODS": { "type": "Base", "scene": "0x5B", "flag": "0x60", "name": "LW Target in Woods", "HintKey": "LW_TARGET_IN_WOODS", "vanillaItem": "PROGRESSIVE_SLINGSHOT", "categories": ["cLostWoods", "cForest"], "SpoilerCollectionCheck": "ItemGetInf(21)", "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT": { "type": "Base", "scene": "0x5B", "flag": "0x30", "name": "LW Deku Scrub Near Deku Theater Right","HintKey": "LW_DEKU_SCRUB_NEAR_DEKU_THEATER_RIGHT", "vanillaItem": "DEKU_NUTS_5", "categories": ["cLostWoods", "cForest", "cDekuScrub"], "SpoilerCollectionCheck": "Scrub(0x5B, 0x01)", "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT": { "type": "Base", "scene": "0x5B", "flag": "0x31", "name": "LW Deku Scrub Near Deku Theater Left", "HintKey": "LW_DEKU_SCRUB_NEAR_DEKU_THEATER_LEFT", "vanillaItem": "DEKU_STICK_1", "categories": ["cLostWoods", "cForest", "cDekuScrub"], "SpoilerCollectionCheck": "Scrub(0x5B, 0x02)", "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "LW_DEKU_SCRUB_NEAR_BRIDGE": { "type": "Base", "scene": "0x5B", "flag": "0x77", "name": "LW Deku Scrub Near Bridge", "HintKey": "LW_DEKU_SCRUB_NEAR_BRIDGE", "vanillaItem": "PROGRESSIVE_STICK_UPGRADE", "categories": ["cLostWoods", "cForest", "cDekuScrub", "cDekuScrubUpgrades"], "SpoilerCollectionCheck": "Scrub(0x5B, 0x0A)", "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "LW_DEKU_SCRUB_GROTTO_REAR": { "type": "GrottoScrub", "scene": "0xF5", "flag": "0x33", "name": "LW Deku Scrub Grotto Rear", "HintKey": "LW_DEKU_SCRUB_GROTTO_REAR", "vanillaItem": "DEKU_SEEDS_30", "categories": ["cLostWoods", "cForest", "cDekuScrub", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x1F, 0x04)", "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "LW_DEKU_SCRUB_GROTTO_FRONT": { "type": "GrottoScrub", "scene": "0xF5", "flag": "0x79", "name": "LW Deku Scrub Grotto Front", "HintKey": "LW_DEKU_SCRUB_GROTTO_FRONT", "vanillaItem": "PROGRESSIVE_NUT_UPGRADE", "categories": ["cLostWoods", "cForest", "cDekuScrub", "cDekuScrubUpgrades", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x1F, 0x0B)", "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "DEKU_THEATER_SKULL_MASK": { "type": "Base", "scene": "0x3E", "flag": "0x77", "name": "Deku Theater Skull Mask", "HintKey": "DEKU_THEATER_SKULL_MASK", "vanillaItem": "PROGRESSIVE_STICK_UPGRADE", "categories": ["cLostWoods", "cForest", "cGrotto"], "SpoilerCollectionCheck": "ItemGetInf(22)", "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "DEKU_THEATER_MASK_OF_TRUTH": { "type": "Base", "scene": "0x3E", "flag": "0x7A", "name": "Deku Theater Mask of Truth", "HintKey": "DEKU_THEATER_MASK_OF_TRUTH", "vanillaItem": "PROGRESSIVE_NUT_UPGRADE", "categories": ["cLostWoods", "cForest", "cNeedSpiritualStones", "cGrotto"], "SpoilerCollectionCheck": "ItemGetInf(23)", "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + + // Sacred Forest Meadow + "SFM_WOLFOS_GROTTO_CHEST": { "type": "Chest", "scene": "0x3E", "flag": "0x11", "name": "SFM Wolfos Grotto Chest", "HintKey": "SFM_WOLFOS_GROTTO_CHEST", "vanillaItem": "PURPLE_RUPEE", "categories": ["cSacredForestMeadow", "cForest", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_SACRED_FOREST_MEADOW"}, + "SFM_DEKU_SCRUB_GROTTO_REAR": { "type": "GrottoScrub", "scene": "0xEE", "flag": "0x39", "name": "SFM Deku Scrub Grotto Rear", "HintKey": "SFM_DEKU_SCRUB_GROTTO_REAR", "vanillaItem": "RED_POTION_REFILL", "categories": ["cSacredForestMeadow", "cForest", "cDekuScrub", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x18, 0x08)", "SpoilerCollectionCheckGroup": "GROUP_SACRED_FOREST_MEADOW"}, + "SFM_DEKU_SCRUB_GROTTO_FRONT": { "type": "GrottoScrub", "scene": "0xEE", "flag": "0x3A", "name": "SFM Deku Scrub Grotto Front", "HintKey": "SFM_DEKU_SCRUB_GROTTO_FRONT", "vanillaItem": "GREEN_POTION_REFILL", "categories": ["cSacredForestMeadow", "cForest", "cDekuScrub", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x18, 0x09)", "SpoilerCollectionCheckGroup": "GROUP_SACRED_FOREST_MEADOW"}, + + // Hyrule Field + "HF_SOUTHEAST_GROTTO_CHEST": { "type": "Chest", "scene": "0x3E", "flag": "0x02", "name": "HF Southeast Grotto Chest", "HintKey": "HF_SOUTHEAST_GROTTO_CHEST", "vanillaItem": "RED_RUPEE", "categories": ["cHyruleField", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_HYRULE_FIELD"}, + "HF_OPEN_GROTTO_CHEST": { "type": "Chest", "scene": "0x3E", "flag": "0x03", "name": "HF Open Grotto Chest", "HintKey": "HF_OPEN_GROTTO_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cHyruleField", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_HYRULE_FIELD"}, + "HF_NEAR_MARKET_GROTTO_CHEST": { "type": "Chest", "scene": "0x3E", "flag": "0x00", "name": "HF Near Market Grotto Chest", "HintKey": "HF_NEAR_MARKET_GROTTO_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cHyruleField", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_HYRULE_FIELD"}, + "HF_OCARINA_OF_TIME_ITEM": { "type": "Base", "scene": "0x51", "flag": "0x0C", "name": "HF Ocarina of Time Item", "HintKey": "HF_OCARINA_OF_TIME_ITEM", "vanillaItem": "PROGRESSIVE_OCARINA", "categories": ["cHyruleField", "cNeedSpiritualStones"], "SpoilerCollectionCheck": "EventChkInf(0x43)", "SpoilerCollectionCheckGroup": "GROUP_HYRULE_FIELD"}, + "HF_TEKTITE_GROTTO_FREESTANDING_POH": { "type": "Collectable", "scene": "0x3E", "flag": "0x01", "name": "HF Tektite Grotto Freestanding PoH", "HintKey": "HF_TEKTITE_GROTTO_FREESTANDING_POH", "vanillaItem": "PIECE_OF_HEART", "categories": ["cHyruleField", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_HYRULE_FIELD"}, + "HF_DEKU_SCRUB_GROTTO": { "type": "GrottoScrub", "scene": "0xE6", "flag": "0x3E", "name": "HF Deku Scrub Grotto", "HintKey": "HF_DEKU_SCRUB_GROTTO", "vanillaItem": "PIECE_OF_HEART", "categories": ["cHyruleField", "cDekuScrub", "cDekuScrubUpgrades", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x10, 0x03)", "SpoilerCollectionCheckGroup": "GROUP_HYRULE_FIELD"}, + + // Lake Hylia + "LH_CHILD_FISHING": { "type": "Base", "scene": "0x49", "flag": "0x3E", "name": "LH Child Fishing", "HintKey": "LH_CHILD_FISHING", "vanillaItem": "PIECE_OF_HEART", "categories": ["cLakeHylia", "cMinigame"], "SpoilerCollectionCheck": "Fishing(0x02)", "SpoilerCollectionCheckGroup": "GROUP_LAKE_HYLIA"}, + "LH_ADULT_FISHING": { "type": "Base", "scene": "0x49", "flag": "0x38", "name": "LH Adult Fishing", "HintKey": "LH_ADULT_FISHING", "vanillaItem": "PROGRESSIVE_SCALE", "categories": ["cLakeHylia", "cMinigame"], "SpoilerCollectionCheck": "Fishing(0x03)", "SpoilerCollectionCheckGroup": "GROUP_LAKE_HYLIA"}, + "LH_LAB_DIVE": { "type": "Base", "scene": "0x38", "flag": "0x3E", "name": "LH Lab Dive", "HintKey": "LH_LAB_DIVE", "vanillaItem": "PIECE_OF_HEART", "categories": ["cLakeHylia"], "SpoilerCollectionCheck": "ItemGetInf(24)", "SpoilerCollectionCheckGroup": "GROUP_LAKE_HYLIA"}, + "LH_TRADE_FROG": { "type": "Base", "scene": "0x38", "flag": "0x25", "name": "LH Lab Trade Eyeball Frog", "HintKey": "LH_TRADE_FROG", "vanillaItem": "EYEDROPS", "categories": ["cLakeHylia", "cAdultTrade"], "SpoilerCollectionCheck": "ItemGetInf(61)", "SpoilerCollectionCheckGroup": "GROUP_LAKE_HYLIA"}, + "LH_UNDERWATER_ITEM": { "type": "Base", "scene": "0x57", "flag": "0x15", "name": "LH Underwater Item", "HintKey": "LH_UNDERWATER_ITEM", "vanillaItem": "RUTOS_LETTER", "categories": ["cLakeHylia"], "SpoilerCollectionCheck": "EventChkInf(0x31)", "SpoilerCollectionCheckGroup": "GROUP_LAKE_HYLIA"}, + "LH_SUN": { "type": "Base", "scene": "0x57", "flag": "0x58", "name": "LH Sun", "HintKey": "LH_SUN", "vanillaItem": "FIRE_ARROWS", "categories": ["cLakeHylia"], "SpoilerCollectionCheck": "Chest(0x57, 0x00)", "SpoilerCollectionCheckGroup": "GROUP_LAKE_HYLIA"}, + "LH_FREESTANDING_POH": { "type": "Collectable", "scene": "0x57", "flag": "0x1E", "name": "LH Freestanding PoH", "HintKey": "LH_FREESTANDING_POH", "vanillaItem": "PIECE_OF_HEART", "categories": ["cLakeHylia"], "SpoilerCollectionCheckGroup": "GROUP_LAKE_HYLIA"}, + "LH_DEKU_SCRUB_GROTTO_LEFT": { "type": "GrottoScrub", "scene": "0xEF", "flag": "0x30", "name": "LH Deku Scrub Grotto Left", "HintKey": "LH_DEKU_SCRUB_GROTTO_LEFT", "vanillaItem": "DEKU_NUTS_5", "categories": ["cLakeHylia", "cDekuScrub", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x19, 0x01)", "SpoilerCollectionCheckGroup": "GROUP_LAKE_HYLIA"}, + "LH_DEKU_SCRUB_GROTTO_RIGHT": { "type": "GrottoScrub", "scene": "0xEF", "flag": "0x37", "name": "LH Deku Scrub Grotto Right", "HintKey": "LH_DEKU_SCRUB_GROTTO_RIGHT", "vanillaItem": "BOMBS_5", "categories": ["cLakeHylia", "cDekuScrub", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x19, 0x06)", "SpoilerCollectionCheckGroup": "GROUP_LAKE_HYLIA"}, + "LH_DEKU_SCRUB_GROTTO_CENTER": { "type": "GrottoScrub", "scene": "0xEF", "flag": "0x33", "name": "LH Deku Scrub Grotto Center", "HintKey": "LH_DEKU_SCRUB_GROTTO_CENTER", "vanillaItem": "DEKU_SEEDS_30", "categories": ["cLakeHylia", "cDekuScrub", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x19, 0x04)", "SpoilerCollectionCheckGroup": "GROUP_LAKE_HYLIA"}, + + // Gerudo Valley + "GV_CHEST": { "type": "Chest", "scene": "0x5A", "flag": "0x00", "name": "GV Chest", "HintKey": "GV_CHEST", "vanillaItem": "PURPLE_RUPEE", "categories": ["cGerudoValley", "cGerudo"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GV_TRADE_SAW": { "type": "Base", "scene": "0x5A", "flag": "0x22", "name": "GV Trade Saw", "HintKey": "GV_TRADE_SAW", "vanillaItem": "BROKEN_SWORD", "categories": ["cGerudoValley", "cGerudo", "cAdultTrade"], "SpoilerCollectionCheck": "ItemGetInf(58)", "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GV_WATERFALL_FREESTANDING_POH": { "type": "Collectable", "scene": "0x5A", "flag": "0x01", "name": "GV Waterfall Freestanding PoH", "HintKey": "GV_WATERFALL_FREESTANDING_POH", "vanillaItem": "PIECE_OF_HEART", "categories": ["cGerudoValley", "cGerudo"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GV_CRATE_FREESTANDING_POH": { "type": "Collectable", "scene": "0x5A", "flag": "0x02", "name": "GV Crate Freestanding PoH", "HintKey": "GV_CRATE_FREESTANDING_POH", "vanillaItem": "PIECE_OF_HEART", "categories": ["cGerudoValley", "cGerudo"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GV_DEKU_SCRUB_GROTTO_REAR": { "type": "GrottoScrub", "scene": "0xF0", "flag": "0x39", "name": "GV Deku Scrub Grotto Rear", "HintKey": "GV_DEKU_SCRUB_GROTTO_REAR", "vanillaItem": "RED_POTION_REFILL", "categories": ["cGerudoValley", "cGerudo", "cDekuScrub", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x1A, 0x08)", "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GV_DEKU_SCRUB_GROTTO_FRONT": { "type": "GrottoScrub", "scene": "0xF0", "flag": "0x3A", "name": "GV Deku Scrub Grotto Front", "HintKey": "GV_DEKU_SCRUB_GROTTO_FRONT", "vanillaItem": "GREEN_POTION_REFILL", "categories": ["cGerudoValley", "cGerudo", "cDekuScrub", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x1A, 0x09)", "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + + // Gerudo Fortress + "GF_CHEST": { "type": "Chest", "scene": "0x5D", "flag": "0x00", "name": "GF Chest", "HintKey": "GF_CHEST", "vanillaItem": "PIECE_OF_HEART", "categories": ["cGerudoFortress", "cGerudo"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GF_HBA_1000_POINTS": { "type": "Base", "scene": "0x5D", "flag": "0x3E", "name": "GF HBA 1000 Points", "HintKey": "GF_HBA_1000_POINTS", "vanillaItem": "PIECE_OF_HEART", "categories": ["cGerudoFortress", "cGerudo", "cMinigame"], "SpoilerCollectionCheck": "InfTable(0x19, 0x08)", "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GF_HBA_1500_POINTS": { "type": "Base", "scene": "0x5D", "flag": "0x30", "name": "GF HBA 1500 Points", "HintKey": "GF_HBA_1500_POINTS", "vanillaItem": "PROGRESSIVE_BOW", "categories": ["cGerudoFortress", "cGerudo", "cMinigame"], "SpoilerCollectionCheck": "ItemGetInf(7)", "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GF_GERUDO_TOKEN": { "type": "Base", "scene": "0x0C", "flag": "0x3A", "name": "GF Gerudo Token", "HintKey": "GF_GERUDO_TOKEN", "vanillaItem": "GERUDO_TOKEN", "categories": ["cGerudoFortress", "cGerudo"], "SpoilerCollectionCheck": "GerudoToken()", "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GF_NORTH_F1_CARPENTER": { "type": "Collectable", "scene": "0x0C", "flag": "0x0C", "name": "GF North F1 Carpenter", "HintKey": "GF_NORTH_F1_CARPENTER", "vanillaItem": "GERUDO_FORTRESS_SMALL_KEY", "categories": ["cGerudoFortress", "cGerudo", "cVanillaGFSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GF_NORTH_F2_CARPENTER": { "type": "Collectable", "scene": "0x0C", "flag": "0x0A", "name": "GF North F2 Carpenter", "HintKey": "GF_NORTH_F2_CARPENTER", "vanillaItem": "GERUDO_FORTRESS_SMALL_KEY", "categories": ["cGerudoFortress", "cGerudo", "cVanillaGFSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GF_SOUTH_F1_CARPENTER": { "type": "Collectable", "scene": "0x0C", "flag": "0x0E", "name": "GF South F1 Carpenter", "HintKey": "GF_SOUTH_F1_CARPENTER", "vanillaItem": "GERUDO_FORTRESS_SMALL_KEY", "categories": ["cGerudoFortress", "cGerudo", "cVanillaGFSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GF_SOUTH_F2_CARPENTER": { "type": "Collectable", "scene": "0x0C", "flag": "0x0F", "name": "GF South F2 Carpenter", "HintKey": "GF_SOUTH_F2_CARPENTER", "vanillaItem": "GERUDO_FORTRESS_SMALL_KEY", "categories": ["cGerudoFortress", "cGerudo", "cVanillaGFSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + + // Haunted Wasteland + "WASTELAND_CHEST": { "type": "Chest", "scene": "0x5E", "flag": "0x00", "name": "Wasteland Chest", "HintKey": "WASTELAND_CHEST", "vanillaItem": "PURPLE_RUPEE", "categories": ["cHauntedWasteland"], "SpoilerCollectionCheckGroup": "GROUP_HAUNTED_WASTELAND"}, + "WASTELAND_BOMBCHU_SALESMAN": { "type": "Base", "scene": "0x5E", "flag": "0x03", "name": "Wasteland Carpet Salesman", "HintKey": "WASTELAND_BOMBCHU_SALESMAN", "vanillaItem": "BOMBCHU_10", "categories": ["cHauntedWasteland", "cMerchant"], "SpoilerCollectionCheck": "EventChkInf(0x34)", "SpoilerCollectionCheckGroup": "GROUP_HAUNTED_WASTELAND"}, + + // Desert Colossus + "COLOSSUS_FREESTANDING_POH": { "type": "Collectable", "scene": "0x5C", "flag": "0x0D", "name": "Colossus Freestanding PoH", "HintKey": "COLOSSUS_FREESTANDING_POH", "vanillaItem": "PIECE_OF_HEART", "categories": ["cDesertColossus"], "SpoilerCollectionCheckGroup": "GROUP_HAUNTED_WASTELAND"}, + "COLOSSUS_DEKU_SCRUB_GROTTO_REAR": { "type": "GrottoScrub", "scene": "0xFD", "flag": "0x39", "name": "Colossus Deku Scrub Grotto Rear", "HintKey": "COLOSSUS_DEKU_SCRUB_GROTTO_REAR", "vanillaItem": "RED_POTION_REFILL", "categories": ["cDesertColossus", "cDekuScrub", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x27, 0x08)", "SpoilerCollectionCheckGroup": "GROUP_HAUNTED_WASTELAND"}, + "COLOSSUS_DEKU_SCRUB_GROTTO_FRONT": { "type": "GrottoScrub", "scene": "0xFD", "flag": "0x3A", "name": "Colossus Deku Scrub Grotto Front", "HintKey": "COLOSSUS_DEKU_SCRUB_GROTTO_FRONT", "vanillaItem": "GREEN_POTION_REFILL", "categories": ["cDesertColossus", "cDekuScrub", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x27, 0x09)", "SpoilerCollectionCheckGroup": "GROUP_HAUNTED_WASTELAND"}, + + // Market + "MARKET_TREASURE_CHEST_GAME_REWARD": { "type": "Chest", "scene": "0x10", "flag": "0x0A", "name": "MK Treasure Chest Game Reward", "HintKey": "MARKET_TREASURE_CHEST_GAME_REWARD", "vanillaItem": "TREASURE_GAME_HEART", "categories": ["cInnerMarket", "cMarket", "cMinigame"], "SpoilerCollectionCheck": "ItemGetInf(19)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_BOMBCHU_BOWLING_FIRST_PRIZE": { "type": "Base", "scene": "0x4B", "flag": "0x33", "name": "MK Bombchu Bowling First Prize", "HintKey": "MARKET_BOMBCHU_BOWLING_FIRST_PRIZE", "vanillaItem": "PROGRESSIVE_BOMB_BAG", "categories": ["cInnerMarket", "cMarket", "cMinigame"], "SpoilerCollectionCheck": "ItemGetInf(25)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_BOMBCHU_BOWLING_SECOND_PRIZE": { "type": "Base", "scene": "0x4B", "flag": "0x3E", "name": "MK Bombchu Bowling Second Prize", "HintKey": "MARKET_BOMBCHU_BOWLING_SECOND_PRIZE", "vanillaItem": "PIECE_OF_HEART", "categories": ["cInnerMarket", "cMarket", "cMinigame"], "SpoilerCollectionCheck": "ItemGetInf(26)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_BOMBCHU_BOWLING_BOMBCHUS": { "type": "Base", "scene": "0x4B", "flag": "0xFF", "name": "MK Bombchu Bowling Bombchus", "HintKey": "NONE", "vanillaItem": "BOMBCHU_DROP", "categories": ["cInnerMarket", "cMarket", "cMinigame"], "SpoilerCollectionCheck": "None()", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_LOST_DOG": { "type": "Base", "scene": "0x35", "flag": "0x3E", "name": "MK Lost Dog", "HintKey": "MARKET_LOST_DOG", "vanillaItem": "PIECE_OF_HEART", "categories": ["cInnerMarket", "cMarket"], "SpoilerCollectionCheck": "InfTable(0x19, 0x09)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_SHOOTING_GALLERY_REWARD": { "type": "Base", "scene": "0x42", "flag": "0x60", "name": "MK Shooting Gallery", "HintKey": "MARKET_SHOOTING_GALLERY_REWARD", "vanillaItem": "PROGRESSIVE_SLINGSHOT", "categories": ["cInnerMarket", "cMarket", "cMinigame"], "SpoilerCollectionCheck": "ItemGetInf(5)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_10_BIG_POES": { "type": "Base", "scene": "0x4D", "flag": "0x0F", "name": "MK 10 Big Poes", "HintKey": "MARKET_10_BIG_POES", "vanillaItem": "EMPTY_BOTTLE", "categories": ["cInnerMarket", "cMarket"], "SpoilerCollectionCheck": "BigPoePoints()", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_TREASURE_CHEST_GAME_ITEM_1": { "type": "Chest", "scene": "0x10", "flag": "0x01", "name": "MK Chest Game First Room Chest", "HintKey": "MARKET_TREASURE_CHEST_GAME_ITEM_1", "vanillaItem": "TREASURE_GAME_SMALL_KEY", "categories": ["cInnerMarket", "cMarket", "cMinigame", "cChestMinigame"], "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_TREASURE_CHEST_GAME_ITEM_2": { "type": "Chest", "scene": "0x10", "flag": "0x03", "name": "MK Chest Game Second Room Chest", "HintKey": "MARKET_TREASURE_CHEST_GAME_ITEM_2", "vanillaItem": "TREASURE_GAME_SMALL_KEY", "categories": ["cInnerMarket", "cMarket", "cMinigame", "cChestMinigame"], "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_TREASURE_CHEST_GAME_ITEM_3": { "type": "Chest", "scene": "0x10", "flag": "0x05", "name": "MK Chest Game Third Room Chest", "HintKey": "MARKET_TREASURE_CHEST_GAME_ITEM_3", "vanillaItem": "TREASURE_GAME_SMALL_KEY", "categories": ["cInnerMarket", "cMarket", "cMinigame", "cChestMinigame"], "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_TREASURE_CHEST_GAME_ITEM_4": { "type": "Chest", "scene": "0x10", "flag": "0x07", "name": "MK Chest Game Fourth Room Chest", "HintKey": "MARKET_TREASURE_CHEST_GAME_ITEM_4", "vanillaItem": "TREASURE_GAME_SMALL_KEY", "categories": ["cInnerMarket", "cMarket", "cMinigame", "cChestMinigame"], "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_TREASURE_CHEST_GAME_ITEM_5": { "type": "Chest", "scene": "0x10", "flag": "0x09", "name": "MK Chest Game Fifth Room Chest", "HintKey": "MARKET_TREASURE_CHEST_GAME_ITEM_5", "vanillaItem": "TREASURE_GAME_SMALL_KEY", "categories": ["cInnerMarket", "cMarket", "cMinigame", "cChestMinigame"], "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + + // Hyrule Castle + "HC_MALON_EGG": { "type": "Base", "scene": "0x5F", "flag": "0x47", "name": "HC Malon Egg", "HintKey": "HC_MALON_EGG", "vanillaItem": "WEIRD_EGG", "categories": ["cHyruleCastle", "cMarket"], "SpoilerCollectionCheck": "EventChkInf(0x12)", "SpoilerCollectionCheckGroup": "GROUP_HYRULE_CASTLE"}, + "HC_ZELDAS_LETTER": { "type": "Base", "scene": "0x4A", "flag": "0x0B", "name": "HC Zeldas Letter", "HintKey": "HC_ZELDAS_LETTER", "vanillaItem": "ZELDAS_LETTER", "categories": ["cHyruleCastle", "cMarket"], "SpoilerCollectionCheck": "EventChkInf(0x40)", "SpoilerCollectionCheckGroup": "GROUP_HYRULE_CASTLE"}, + + // Kakariko + "KAK_REDEAD_GROTTO_CHEST": { "type": "Chest", "scene": "0x3E", "flag": "0x0A", "name": "Kak Redead Grotto Chest", "HintKey": "KAK_REDEAD_GROTTO_CHEST", "vanillaItem": "HUGE_RUPEE", "categories": ["cKakarikoVillage", "cKakariko", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_OPEN_GROTTO_CHEST": { "type": "Chest", "scene": "0x3E", "flag": "0x08", "name": "Kak Open Grotto Chest", "HintKey": "KAK_OPEN_GROTTO_CHEST", "vanillaItem": "RED_RUPEE", "categories": ["cKakarikoVillage", "cKakariko", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_10_GOLD_SKULLTULA_REWARD": { "type": "Base", "scene": "0x50", "flag": "0x45", "name": "Kak 10 Gold Skulltula Reward", "HintKey": "KAK_10_GOLD_SKULLTULA_REWARD", "vanillaItem": "PROGRESSIVE_WALLET", "categories": ["cKakarikoVillage", "cKakariko", "cSkulltulaHouse"], "SpoilerCollectionCheck": "EventChkInf(0xDA)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_20_GOLD_SKULLTULA_REWARD": { "type": "Base", "scene": "0x50", "flag": "0x39", "name": "Kak 20 Gold Skulltula Reward", "HintKey": "KAK_20_GOLD_SKULLTULA_REWARD", "vanillaItem": "SHARD_OF_AGONY", "categories": ["cKakarikoVillage", "cKakariko", "cSkulltulaHouse"], "SpoilerCollectionCheck": "EventChkInf(0xDB)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_30_GOLD_SKULLTULA_REWARD": { "type": "Base", "scene": "0x50", "flag": "0x46", "name": "Kak 30 Gold Skulltula Reward", "HintKey": "KAK_30_GOLD_SKULLTULA_REWARD", "vanillaItem": "PROGRESSIVE_WALLET", "categories": ["cKakarikoVillage", "cKakariko", "cSkulltulaHouse"], "SpoilerCollectionCheck": "EventChkInf(0xDC)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_40_GOLD_SKULLTULA_REWARD": { "type": "Base", "scene": "0x50", "flag": "0x03", "name": "Kak 40 Gold Skulltula Reward", "HintKey": "KAK_40_GOLD_SKULLTULA_REWARD", "vanillaItem": "BOMBCHU_10", "categories": ["cKakarikoVillage", "cKakariko", "cSkulltulaHouse"], "SpoilerCollectionCheck": "EventChkInf(0xDD)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_50_GOLD_SKULLTULA_REWARD": { "type": "Base", "scene": "0x50", "flag": "0x3E", "name": "Kak 50 Gold Skulltula Reward", "HintKey": "KAK_50_GOLD_SKULLTULA_REWARD", "vanillaItem": "PIECE_OF_HEART", "categories": ["cKakarikoVillage", "cKakariko", "cSkulltulaHouse"], "SpoilerCollectionCheck": "EventChkInf(0xDE)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_MAN_ON_ROOF": { "type": "Base", "scene": "0x52", "flag": "0x3E", "name": "Kak Man on Roof", "HintKey": "KAK_MAN_ON_ROOF", "vanillaItem": "PIECE_OF_HEART", "categories": ["cKakarikoVillage", "cKakariko"], "SpoilerCollectionCheck": "ItemGetInf(29)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_SHOOTING_GALLERY_REWARD": { "type": "Base", "scene": "0x42", "flag": "0x30", "name": "Kak Shooting Gallery Reward", "HintKey": "KAK_SHOOTING_GALLERY_REWARD", "vanillaItem": "PROGRESSIVE_BOW", "categories": ["cKakarikoVillage", "cKakariko", "cMinigame"], "SpoilerCollectionCheck": "ItemGetInf(6)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_TRADE_ODD_MUSHROOM": { "type": "Base", "scene": "0x4E", "flag": "0x20", "name": "Kak Trade Odd Mushroom", "HintKey": "KAK_TRADE_ODD_MUSHROOM", "vanillaItem": "ODD_POULTICE", "categories": ["cKakarikoVillage", "cKakariko", "cAdultTrade"], "SpoilerCollectionCheck": "ItemGetInf(56)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_GRANNYS_SHOP": { "type": "Base", "scene": "0x4E", "flag": "0x10", "name": "Kak Granny's Shop", "HintKey": "KAK_GRANNYS_SHOP", "vanillaItem": "BLUE_POTION_REFILL", "categories": ["cKakarikoVillage", "cKakariko", "cMerchant"], "SpoilerCollectionCheck": "EventChkInf(0x32)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_ANJU_AS_ADULT": { "type": "Base", "scene": "0x52", "flag": "0x1D", "name": "Kak Anju as Adult", "HintKey": "KAK_ANJU_AS_ADULT", "vanillaItem": "POCKET_EGG", "categories": ["cKakarikoVillage", "cKakariko"], "SpoilerCollectionCheck": "ItemGetInf(36)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_ANJU_AS_CHILD": { "type": "Base", "scene": "0x52", "flag": "0x0F", "name": "Kak Anju as Child", "HintKey": "KAK_ANJU_AS_CHILD", "vanillaItem": "EMPTY_BOTTLE", "categories": ["cKakarikoVillage", "cKakariko", "cMinigame"], "SpoilerCollectionCheck": "ItemGetInf(4)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_TRADE_POCKET_CUCCO": { "type": "Base", "scene": "0x52", "flag": "0x0E", "name": "Kak Trade Pocket Cucco", "HintKey": "KAK_TRADE_POCKET_CUCCO", "vanillaItem": "COJIRO", "categories": ["cKakarikoVillage", "cKakariko", "cAdultTrade"], "SpoilerCollectionCheck": "ItemGetInf(38)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_IMPAS_HOUSE_FREESTANDING_POH": { "type": "Collectable", "scene": "0x37", "flag": "0x01", "name": "Kak Impas House Freestanding PoH", "HintKey": "KAK_IMPAS_HOUSE_FREESTANDING_POH", "vanillaItem": "PIECE_OF_HEART", "categories": ["cKakarikoVillage", "cKakariko"], "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_WINDMILL_FREESTANDING_POH": { "type": "Collectable", "scene": "0x48", "flag": "0x01", "name": "Kak Windmill Freestanding PoH", "HintKey": "KAK_WINDMILL_FREESTANDING_POH", "vanillaItem": "PIECE_OF_HEART", "categories": ["cKakarikoVillage", "cKakariko"], "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + + // Graveyard + "GRAVEYARD_SHIELD_GRAVE_CHEST": { "type": "Chest", "scene": "0x40", "flag": "0x00", "name": "GY Shield Grave Chest", "HintKey": "GRAVEYARD_SHIELD_GRAVE_CHEST", "vanillaItem": "HYLIAN_SHIELD", "categories": ["cGraveyard", "cKakariko"], "SpoilerCollectionCheckGroup": "GROUP_GRAVEYARD"}, + "GRAVEYARD_HEART_PIECE_GRAVE_CHEST": { "type": "Chest", "scene": "0x3F", "flag": "0x00", "name": "GY Heart Piece Grave Chest", "HintKey": "GRAVEYARD_HEART_PIECE_GRAVE_CHEST", "vanillaItem": "PIECE_OF_HEART", "categories": ["cGraveyard", "cKakariko"], "SpoilerCollectionCheckGroup": "GROUP_GRAVEYARD"}, + "GRAVEYARD_COMPOSERS_GRAVE_CHEST": { "type": "Chest", "scene": "0x41", "flag": "0x00", "name": "GY Composers Grave Chest", "HintKey": "GRAVEYARD_COMPOSERS_GRAVE_CHEST", "vanillaItem": "BOMBS_5", "categories": ["cGraveyard", "cKakariko"], "SpoilerCollectionCheckGroup": "GROUP_GRAVEYARD"}, + "GRAVEYARD_HOOKSHOT_CHEST": { "type": "Chest", "scene": "0x48", "flag": "0x00", "name": "GY Hookshot Chest", "HintKey": "GRAVEYARD_HOOKSHOT_CHEST", "vanillaItem": "PROGRESSIVE_HOOKSHOT", "categories": ["cGraveyard", "cKakariko"], "SpoilerCollectionCheckGroup": "GROUP_GRAVEYARD"}, + "GRAVEYARD_DAMPE_RACE_FREESTANDING_POH": { "type": "Collectable", "scene": "0x48", "flag": "0x07", "name": "GY Dampe Race Freestanding PoH", "HintKey": "GRAVEYARD_DAMPE_RACE_FREESTANDING_POH", "vanillaItem": "PIECE_OF_HEART", "categories": ["cGraveyard", "cKakariko", "cMinigame"], "SpoilerCollectionCheckGroup": "GROUP_GRAVEYARD"}, + "GRAVEYARD_FREESTANDING_POH": { "type": "Collectable", "scene": "0x53", "flag": "0x04", "name": "GY Freestanding PoH", "HintKey": "GRAVEYARD_FREESTANDING_POH", "vanillaItem": "PIECE_OF_HEART", "categories": ["cGraveyard", "cKakariko"], "SpoilerCollectionCheckGroup": "GROUP_GRAVEYARD"}, + "GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR": { "type": "Collectable", "scene": "0x53", "flag": "0x08", "name": "GY Dampe Gravedigging Tour", "HintKey": "GRAVEYARD_DAMPE_GRAVEDIGGING_TOUR", "vanillaItem": "PIECE_OF_HEART", "categories": ["cGraveyard", "cKakariko"], "SpoilerCollectionCheck": "ItemGetInf(20)", "SpoilerCollectionCheckGroup": "GROUP_GRAVEYARD"}, + + // Death Mountain Trail + "DMT_CHEST": { "type": "Chest", "scene": "0x60", "flag": "0x01", "name": "DMT Chest", "HintKey": "DMT_CHEST", "vanillaItem": "PURPLE_RUPEE", "categories": ["cDeathMountainTrail", "cDeathMountain"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_TRAIL"}, + "DMT_STORMS_GROTTO_CHEST": { "type": "Chest", "scene": "0x3E", "flag": "0x17", "name": "DMT Storms Grotto Chest", "HintKey": "DMT_STORMS_GROTTO_CHEST", "vanillaItem": "HUGE_RUPEE", "categories": ["cDeathMountainTrail", "cDeathMountain", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_TRAIL"}, + "DMT_TRADE_BROKEN_SWORD": { "type": "Base", "scene": "0x60", "flag": "0x23", "name": "DMT Trade Broken Sword", "HintKey": "DMT_TRADE_BROKEN_SWORD", "vanillaItem": "PRESCRIPTION", "categories": ["cDeathMountainTrail", "cDeathMountain", "cAdultTrade"], "SpoilerCollectionCheck": "Biggoron(0x4)", "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_TRAIL"}, + "DMT_TRADE_EYEDROPS": { "type": "Base", "scene": "0x60", "flag": "0x26", "name": "DMT Trade Eyedrops", "HintKey": "DMT_TRADE_EYEDROPS", "vanillaItem": "CLAIM_CHECK", "categories": ["cDeathMountainTrail", "cDeathMountain", "cAdultTrade"], "SpoilerCollectionCheck": "Biggoron(0x2)", "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_TRAIL"}, + "DMT_TRADE_CLAIM_CHECK": { "type": "Base", "scene": "0x60", "flag": "0x57", "name": "DMT Trade Claim Check", "HintKey": "DMT_TRADE_CLAIM_CHECK", "vanillaItem": "BIGGORON_SWORD", "categories": ["cDeathMountainTrail", "cDeathMountain"], "SpoilerCollectionCheck": "Biggoron(0x1)", "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_TRAIL"}, + "DMT_FREESTANDING_POH": { "type": "Collectable", "scene": "0x60", "flag": "0x1E", "name": "DMT Freestanding PoH", "HintKey": "DMT_FREESTANDING_POH", "vanillaItem": "PIECE_OF_HEART", "categories": ["cDeathMountainTrail", "cDeathMountain"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_TRAIL"}, + + // Goron City + "GC_MAZE_LEFT_CHEST": { "type": "Chest", "scene": "0x62", "flag": "0x00", "name": "GC Maze Left Chest", "HintKey": "GC_MAZE_LEFT_CHEST", "vanillaItem": "HUGE_RUPEE", "categories": ["cGoronCity"], "SpoilerCollectionCheckGroup": "GROUP_GORON_CITY"}, + "GC_MAZE_RIGHT_CHEST": { "type": "Chest", "scene": "0x62", "flag": "0x01", "name": "GC Maze Right Chest", "HintKey": "GC_MAZE_RIGHT_CHEST", "vanillaItem": "PURPLE_RUPEE", "categories": ["cGoronCity"], "SpoilerCollectionCheckGroup": "GROUP_GORON_CITY"}, + "GC_MAZE_CENTER_CHEST": { "type": "Chest", "scene": "0x62", "flag": "0x02", "name": "GC Maze Center Chest", "HintKey": "GC_MAZE_CENTER_CHEST", "vanillaItem": "PURPLE_RUPEE", "categories": ["cGoronCity"], "SpoilerCollectionCheckGroup": "GROUP_GORON_CITY"}, + "GC_ROLLING_GORON_AS_CHILD": { "type": "Base", "scene": "0x62", "flag": "0x34", "name": "GC Rolling Goron as Child", "HintKey": "GC_ROLLING_GORON_AS_CHILD", "vanillaItem": "PROGRESSIVE_BOMB_BAG", "categories": ["cGoronCity"], "SpoilerCollectionCheck": "InfTable(0x11, 0x06)", "SpoilerCollectionCheckGroup": "GROUP_GORON_CITY"}, + "GC_ROLLING_GORON_AS_ADULT": { "type": "Base", "scene": "0x62", "flag": "0x2C", "name": "GC Rolling Goron as Adult", "HintKey": "GC_ROLLING_GORON_AS_ADULT", "vanillaItem": "GORON_TUNIC", "categories": ["cGoronCity"], "SpoilerCollectionCheck": "InfTable(0x10, 0x01)", "SpoilerCollectionCheckGroup": "GROUP_GORON_CITY"}, + "GC_DARUNIAS_JOY": { "type": "Base", "scene": "0x62", "flag": "0x54", "name": "GC Darunias Joy", "HintKey": "GC_DARUNIAS_JOY", "vanillaItem": "PROGRESSIVE_STRENGTH", "categories": ["cGoronCity"], "SpoilerCollectionCheck": "EventChkInf(0x36)", "SpoilerCollectionCheckGroup": "GROUP_GORON_CITY"}, + "GC_POT_FREESTANDING_POH": { "type": "Collectable", "scene": "0x62", "flag": "0x1F", "name": "GC Pot Freestanding PoH", "HintKey": "GC_POT_FREESTANDING_POH", "vanillaItem": "PIECE_OF_HEART", "categories": ["cGoronCity"], "SpoilerCollectionCheckGroup": "GROUP_GORON_CITY"}, + "GC_DEKU_SCRUB_GROTTO_LEFT": { "type": "GrottoScrub", "scene": "0xFB", "flag": "0x30", "name": "GC Deku Scrub Grotto Left", "HintKey": "GC_DEKU_SCRUB_GROTTO_LEFT", "vanillaItem": "DEKU_NUTS_5", "categories": ["cGoronCity", "cDekuScrub", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x25, 0x01)", "SpoilerCollectionCheckGroup": "GROUP_GORON_CITY"}, + "GC_DEKU_SCRUB_GROTTO_RIGHT": { "type": "GrottoScrub", "scene": "0xFB", "flag": "0x37", "name": "GC Deku Scrub Grotto Right", "HintKey": "GC_DEKU_SCRUB_GROTTO_RIGHT", "vanillaItem": "BOMBS_5", "categories": ["cGoronCity", "cDekuScrub", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x25, 0x06)", "SpoilerCollectionCheckGroup": "GROUP_GORON_CITY"}, + "GC_DEKU_SCRUB_GROTTO_CENTER": { "type": "GrottoScrub", "scene": "0xFB", "flag": "0x33", "name": "GC Deku Scrub Grotto Center", "HintKey": "GC_DEKU_SCRUB_GROTTO_CENTER", "vanillaItem": "ARROWS_30", "categories": ["cGoronCity", "cDekuScrub", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x25, 0x04)", "SpoilerCollectionCheckGroup": "GROUP_GORON_CITY"}, + "GC_MEDIGORON": { "type": "Base", "scene": "0x62", "flag": "0x51", "name": "GC Medigoron", "HintKey": "GC_MEDIGORON", "vanillaItem": "GIANTS_KNIFE", "categories": ["cGoronCity", "cMerchant"], "SpoilerCollectionCheck": "EventChkInf(0x35)", "SpoilerCollectionCheckGroup": "GROUP_GORON_CITY"}, + + // Death Mountain Crater + "DMC_UPPER_GROTTO_CHEST": { "type": "Chest", "scene": "0x3E", "flag": "0x1A", "name": "DMC Upper Grotto Chest", "HintKey": "DMC_UPPER_GROTTO_CHEST", "vanillaItem": "BOMBS_20", "categories": ["cDeathMountainCrater", "cDeathMountain", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "DMC_WALL_FREESTANDING_POH": { "type": "Collectable", "scene": "0x61", "flag": "0x02", "name": "DMC Wall Freestanding PoH", "HintKey": "DMC_WALL_FREESTANDING_POH", "vanillaItem": "PIECE_OF_HEART", "categories": ["cDeathMountainCrater", "cDeathMountain"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "DMC_VOLCANO_FREESTANDING_POH": { "type": "Collectable", "scene": "0x61", "flag": "0x08", "name": "DMC Volcano Freestanding PoH", "HintKey": "DMC_VOLCANO_FREESTANDING_POH", "vanillaItem": "PIECE_OF_HEART", "categories": ["cDeathMountainCrater", "cDeathMountain"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "DMC_DEKU_SCRUB": { "type": "Base", "scene": "0x61", "flag": "0x37", "name": "DMC Deku Scrub", "HintKey": "DMC_DEKU_SCRUB", "vanillaItem": "BOMBS_5", "categories": ["cDeathMountainCrater", "cDeathMountain", "cDekuScrub"], "SpoilerCollectionCheck": "Scrub(0x61, 0x06)", "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "DMC_DEKU_SCRUB_GROTTO_LEFT": { "type": "GrottoScrub", "scene": "0xF9", "flag": "0x30", "name": "DMC Deku Scrub Grotto Left", "HintKey": "DMC_DEKU_SCRUB_GROTTO_LEFT", "vanillaItem": "DEKU_NUTS_5", "categories": ["cDeathMountainCrater", "cDeathMountain", "cDekuScrub", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x23, 0x01)", "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "DMC_DEKU_SCRUB_GROTTO_RIGHT": { "type": "GrottoScrub", "scene": "0xF9", "flag": "0x37", "name": "DMC Deku Scrub Grotto Right", "HintKey": "DMC_DEKU_SCRUB_GROTTO_RIGHT", "vanillaItem": "BOMBS_5", "categories": ["cDeathMountainCrater", "cDeathMountain", "cDekuScrub", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x23, 0x06)", "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "DMC_DEKU_SCRUB_GROTTO_CENTER": { "type": "GrottoScrub", "scene": "0xF9", "flag": "0x33", "name": "DMC Deku Scrub Grotto Center", "HintKey": "DMC_DEKU_SCRUB_GROTTO_CENTER", "vanillaItem": "ARROWS_30", "categories": ["cDeathMountainCrater", "cDeathMountain", "cDekuScrub", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x23, 0x04)", "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + + // Zoras River + "ZR_OPEN_GROTTO_CHEST": { "type": "Chest", "scene": "0x3E", "flag": "0x09", "name": "ZR Open Grotto Chest", "HintKey": "ZR_OPEN_GROTTO_CHEST", "vanillaItem": "RED_RUPEE", "categories": ["cZorasRiver", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_RIVER"}, + "ZR_MAGIC_BEAN_SALESMAN": { "type": "Base", "scene": "0x54", "flag": "0x16", "name": "ZR Magic Bean Salesman", "HintKey": "ZR_MAGIC_BEAN_SALESMAN", "vanillaItem": "MAGIC_BEAN", "categories": ["cZorasRiver"], "SpoilerCollectionCheck": "MagicBeans(0x54, 0x01)", "SpoilerCollectionCheckGroup": "GROUP_ZORAS_RIVER"}, + "ZR_FROGS_ZELDAS_LULLABY": { "type": "Base", "scene": "0x54", "flag": "0x01", "name": "ZR Frogs Zelda's Lullaby", "HintKey": "ZR_FROGS_ZELDAS_LULLABY", "vanillaItem": "PURPLE_RUPEE", "categories": ["cZorasRiver", "cFrogRupees"], "SpoilerCollectionCheck": "EventChkInf(0xD1)", "SpoilerCollectionCheckGroup": "GROUP_ZORAS_RIVER"}, + "ZR_FROGS_EPONAS_SONG": { "type": "Base", "scene": "0x54", "flag": "0x02", "name": "ZR Frogs Epona's Song", "HintKey": "ZR_FROGS_EPONAS_SONG", "vanillaItem": "PURPLE_RUPEE", "categories": ["cZorasRiver", "cFrogRupees"], "SpoilerCollectionCheck": "EventChkInf(0xD2)", "SpoilerCollectionCheckGroup": "GROUP_ZORAS_RIVER"}, + "ZR_FROGS_SARIAS_SONG": { "type": "Base", "scene": "0x54", "flag": "0x03", "name": "ZR Frogs Saria's Song", "HintKey": "ZR_FROGS_SARIAS_SONG", "vanillaItem": "PURPLE_RUPEE", "categories": ["cZorasRiver", "cFrogRupees"], "SpoilerCollectionCheck": "EventChkInf(0xD4)", "SpoilerCollectionCheckGroup": "GROUP_ZORAS_RIVER"}, + "ZR_FROGS_SUNS_SONG": { "type": "Base", "scene": "0x54", "flag": "0x04", "name": "ZR Frogs Sun's Song", "HintKey": "ZR_FROGS_SUNS_SONG", "vanillaItem": "PURPLE_RUPEE", "categories": ["cZorasRiver", "cFrogRupees"], "SpoilerCollectionCheck": "EventChkInf(0xD3)", "SpoilerCollectionCheckGroup": "GROUP_ZORAS_RIVER"}, + "ZR_FROGS_SONG_OF_TIME": { "type": "Base", "scene": "0x54", "flag": "0x05", "name": "ZR Frogs Song of Time", "HintKey": "ZR_FROGS_SONG_OF_TIME", "vanillaItem": "PURPLE_RUPEE", "categories": ["cZorasRiver", "cFrogRupees"], "SpoilerCollectionCheck": "EventChkInf(0xD5)", "SpoilerCollectionCheckGroup": "GROUP_ZORAS_RIVER"}, + "ZR_FROGS_IN_THE_RAIN": { "type": "Base", "scene": "0x54", "flag": "0x3E", "name": "ZR Frogs in the Rain", "HintKey": "ZR_FROGS_IN_THE_RAIN", "vanillaItem": "PIECE_OF_HEART", "categories": ["cZorasRiver"], "SpoilerCollectionCheck": "EventChkInf(0xD6)", "SpoilerCollectionCheckGroup": "GROUP_ZORAS_RIVER"}, + "ZR_FROGS_OCARINA_GAME": { "type": "Base", "scene": "0x54", "flag": "0x76", "name": "ZR Frogs Ocarina Game", "HintKey": "ZR_FROGS_OCARINA_GAME", "vanillaItem": "PIECE_OF_HEART", "categories": ["cZorasRiver", "cMinigame"], "SpoilerCollectionCheck": "EventChkInf(0xD0)", "SpoilerCollectionCheckGroup": "GROUP_ZORAS_RIVER"}, + "ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH": { "type": "Collectable", "scene": "0x54", "flag": "0x04", "name": "ZR Near Open Grotto Freestanding PoH", "HintKey": "ZR_NEAR_OPEN_GROTTO_FREESTANDING_POH", "vanillaItem": "PIECE_OF_HEART", "categories": ["cZorasRiver"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_RIVER"}, + "ZR_NEAR_DOMAIN_FREESTANDING_POH": { "type": "Collectable", "scene": "0x54", "flag": "0x0B", "name": "ZR Near Domain Freestanding PoH", "HintKey": "ZR_NEAR_DOMAIN_FREESTANDING_POH", "vanillaItem": "PIECE_OF_HEART", "categories": ["cZorasRiver"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_RIVER"}, + "ZR_DEKU_SCRUB_GROTTO_REAR": { "type": "GrottoScrub", "scene": "0xEB", "flag": "0x39", "name": "ZR Deku Scrub Grotto Rear", "HintKey": "ZR_DEKU_SCRUB_GROTTO_REAR", "vanillaItem": "RED_POTION_REFILL", "categories": ["cZorasRiver", "cDekuScrub", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x15, 0x08)", "SpoilerCollectionCheckGroup": "GROUP_ZORAS_RIVER"}, + "ZR_DEKU_SCRUB_GROTTO_FRONT": { "type": "GrottoScrub", "scene": "0xEB", "flag": "0x3A", "name": "ZR Deku Scrub Grotto Front", "HintKey": "ZR_DEKU_SCRUB_GROTTO_FRONT", "vanillaItem": "GREEN_POTION_REFILL", "categories": ["cZorasRiver", "cDekuScrub", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x15, 0x09)", "SpoilerCollectionCheckGroup": "GROUP_ZORAS_RIVER"}, + + // Zoras Domain + "ZD_CHEST": { "type": "Chest", "scene": "0x58", "flag": "0x00", "name": "ZD Chest", "HintKey": "ZD_CHEST", "vanillaItem": "PIECE_OF_HEART", "categories": ["cZorasDomain"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_DOMAIN"}, + "ZD_DIVING_MINIGAME": { "type": "Base", "scene": "0x58", "flag": "0x37", "name": "ZD Diving Minigame", "HintKey": "ZD_DIVING_MINIGAME", "vanillaItem": "PROGRESSIVE_SCALE", "categories": ["cZorasDomain", "cMinigame"], "SpoilerCollectionCheck": "EventChkInf(0x38)", "SpoilerCollectionCheckGroup": "GROUP_ZORAS_DOMAIN"}, + "ZD_KING_ZORA_THAWED": { "type": "Base", "scene": "0x58", "flag": "0x2D", "name": "ZD King Zora Thawed", "HintKey": "ZD_KING_ZORA_THAWED", "vanillaItem": "ZORA_TUNIC", "categories": ["cZorasDomain"], "SpoilerCollectionCheck": "InfTable(0x13, 0x01)", "SpoilerCollectionCheckGroup": "GROUP_ZORAS_DOMAIN"}, + "ZD_TRADE_PRESCRIPTION": { "type": "Base", "scene": "0x58", "flag": "0x24", "name": "ZD Trade Prescription", "HintKey": "ZD_TRADE_PRESCRIPTION", "vanillaItem": "EYEBALL_FROG", "categories": ["cZorasDomain", "cAdultTrade"], "SpoilerCollectionCheck": "ItemGetInf(60)", "SpoilerCollectionCheckGroup": "GROUP_ZORAS_DOMAIN"}, + + // Zoras Fountain + "ZF_ICEBERG_FREESTANDING_POH": { "type": "Collectable", "scene": "0x59", "flag": "0x01", "name": "ZF Iceberg Freestanding PoH", "HintKey": "ZF_ICEBERG_FREESTANDING_POH", "vanillaItem": "PIECE_OF_HEART", "categories": ["cZorasFountain"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + "ZF_BOTTOM_FREESTANDING_POH": { "type": "Collectable", "scene": "0x59", "flag": "0x14", "name": "ZF Bottom Freestanding PoH", "HintKey": "ZF_BOTTOM_FREESTANDING_POH", "vanillaItem": "PIECE_OF_HEART", "categories": ["cZorasFountain"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + + // Lon Lon Ranch + "LLR_TALONS_CHICKENS": { "type": "Base", "scene": "0x4C", "flag": "0x14", "name": "LLR Talons Chickens", "HintKey": "LLR_TALONS_CHICKENS", "vanillaItem": "BOTTLE_WITH_MILK", "categories": ["cLonLonRanch", "cMinigame"], "SpoilerCollectionCheck": "ItemGetInf(10)", "SpoilerCollectionCheckGroup": "GROUP_LON_LON_RANCH"}, + "LLR_FREESTANDING_POH": { "type": "Collectable", "scene": "0x4C", "flag": "0x01", "name": "LLR Freestanding PoH", "HintKey": "LLR_FREESTANDING_POH", "vanillaItem": "PIECE_OF_HEART", "categories": ["cLonLonRanch"], "SpoilerCollectionCheckGroup": "GROUP_LON_LON_RANCH"}, + "LLR_DEKU_SCRUB_GROTTO_LEFT": { "type": "GrottoScrub", "scene": "0xFC", "flag": "0x30", "name": "LLR Deku Scrub Grotto Left", "HintKey": "LLR_DEKU_SCRUB_GROTTO_LEFT", "vanillaItem": "DEKU_NUTS_5", "categories": ["cLonLonRanch", "cDekuScrub", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x26, 0x01)", "SpoilerCollectionCheckGroup": "GROUP_LON_LON_RANCH"}, + "LLR_DEKU_SCRUB_GROTTO_RIGHT": { "type": "GrottoScrub", "scene": "0xFC", "flag": "0x37", "name": "LLR Deku Scrub Grotto Right", "HintKey": "LLR_DEKU_SCRUB_GROTTO_RIGHT", "vanillaItem": "BOMBS_5", "categories": ["cLonLonRanch", "cDekuScrub", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x26, 0x06)", "SpoilerCollectionCheckGroup": "GROUP_LON_LON_RANCH"}, + "LLR_DEKU_SCRUB_GROTTO_CENTER": { "type": "GrottoScrub", "scene": "0xFC", "flag": "0x33", "name": "LLR Deku Scrub Grotto Center", "HintKey": "LLR_DEKU_SCRUB_GROTTO_CENTER", "vanillaItem": "DEKU_SEEDS_30", "categories": ["cLonLonRanch", "cDekuScrub", "cGrotto"], "SpoilerCollectionCheck": "Scrub(0x26, 0x04)", "SpoilerCollectionCheckGroup": "GROUP_LON_LON_RANCH"}, + + /*------------------- + --- DUNGEONS --- + -------------------*/ + + // Deku Tree Vanilla + "DEKU_TREE_MAP_CHEST": { "type": "Chest", "scene": "0x00", "flag": "0x03", "name": "Deku Tree Map Chest", "HintKey": "DEKU_TREE_MAP_CHEST", "vanillaItem": "DEKU_TREE_MAP", "categories": ["cDekuTree", "cVanillaMap"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + "DEKU_TREE_COMPASS_CHEST": { "type": "Chest", "scene": "0x00", "flag": "0x02", "name": "Deku Tree Compass Chest", "HintKey": "DEKU_TREE_COMPASS_CHEST", "vanillaItem": "DEKU_TREE_COMPASS", "categories": ["cDekuTree", "cVanillaCompass"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + "DEKU_TREE_COMPASS_ROOM_SIDE_CHEST": { "type": "Chest", "scene": "0x00", "flag": "0x06", "name": "Deku Tree Compass Room Side Chest", "HintKey": "DEKU_TREE_COMPASS_ROOM_SIDE_CHEST", "vanillaItem": "RECOVERY_HEART", "categories": ["cDekuTree"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + "DEKU_TREE_BASEMENT_CHEST": { "type": "Chest", "scene": "0x00", "flag": "0x04", "name": "Deku Tree Basement Chest", "HintKey": "DEKU_TREE_BASEMENT_CHEST", "vanillaItem": "RECOVERY_HEART", "categories": ["cDekuTree"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + "DEKU_TREE_SLINGSHOT_CHEST": { "type": "Chest", "scene": "0x00", "flag": "0x01", "name": "Deku Tree Slingshot Chest", "HintKey": "DEKU_TREE_SLINGSHOT_CHEST", "vanillaItem": "PROGRESSIVE_SLINGSHOT", "categories": ["cDekuTree"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + "DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST": { "type": "Chest", "scene": "0x00", "flag": "0x05", "name": "Deku Tree Slingshot Room Side Chest", "HintKey": "DEKU_TREE_SLINGSHOT_ROOM_SIDE_CHEST", "vanillaItem": "RECOVERY_HEART", "categories": ["cDekuTree"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + // Deku Tree MQ + "DEKU_TREE_MQ_MAP_CHEST": { "type": "Chest", "scene": "0x00", "flag": "0x03", "name": "Deku Tree MQ Map Chest", "HintKey": "DEKU_TREE_MQ_MAP_CHEST", "vanillaItem": "DEKU_TREE_MAP", "categories": ["cDekuTree", "cVanillaMap"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + "DEKU_TREE_MQ_COMPASS_CHEST": { "type": "Chest", "scene": "0x00", "flag": "0x01", "name": "Deku Tree MQ Compass Chest", "HintKey": "DEKU_TREE_MQ_COMPASS_CHEST", "vanillaItem": "DEKU_TREE_COMPASS", "categories": ["cDekuTree", "cVanillaCompass"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + "DEKU_TREE_MQ_SLINGSHOT_CHEST": { "type": "Chest", "scene": "0x00", "flag": "0x06", "name": "Deku Tree MQ Slingshot Chest", "HintKey": "DEKU_TREE_MQ_SLINGSHOT_CHEST", "vanillaItem": "PROGRESSIVE_SLINGSHOT", "categories": ["cDekuTree"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + "DEKU_TREE_MQ_SLINGSHOT_ROOM_BACK_CHEST": { "type": "Chest", "scene": "0x00", "flag": "0x02", "name": "Deku Tree MQ Slingshot Room Back Chest", "HintKey": "DEKU_TREE_MQ_SLINGSHOT_ROOM_BACK_CHEST", "vanillaItem": "DEKU_SHIELD", "categories": ["cDekuTree"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + "DEKU_TREE_MQ_BASEMENT_CHEST": { "type": "Chest", "scene": "0x00", "flag": "0x04", "name": "Deku Tree MQ Basement Chest", "HintKey": "DEKU_TREE_MQ_BASEMENT_CHEST", "vanillaItem": "DEKU_SHIELD", "categories": ["cDekuTree"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + "DEKU_TREE_MQ_BEFORE_SPINNING_LOG_CHEST": { "type": "Chest", "scene": "0x00", "flag": "0x05", "name": "Deku Tree MQ Before Spinning Log Chest", "HintKey": "DEKU_TREE_MQ_BEFORE_SPINNING_LOG_CHEST", "vanillaItem": "RECOVERY_HEART", "categories": ["cDekuTree"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + "DEKU_TREE_MQ_AFTER_SPINNING_LOG_CHEST": { "type": "Chest", "scene": "0x00", "flag": "0x00", "name": "Deku Tree MQ After Spinning Log Chest", "HintKey": "DEKU_TREE_MQ_AFTER_SPINNING_LOG_CHEST", "vanillaItem": "PURPLE_RUPEE", "categories": ["cDekuTree"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + "DEKU_TREE_MQ_DEKU_SCRUB": { "type": "Base", "scene": "0x00", "flag": "0x34", "name": "Deku Tree MQ Deku Scrub", "HintKey": "DEKU_TREE_MQ_DEKU_SCRUB", "vanillaItem": "DEKU_SHIELD", "categories": ["cDekuTree", "cDekuScrub"], "SpoilerCollectionCheck": "Scrub(0x00, 0x05)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + + // Dodongos Cavern Shared + "DODONGOS_CAVERN_BOSS_ROOM_CHEST": { "type": "Chest", "scene": "0x12", "flag": "0x00", "name": "Dodongos Cavern Boss Room Chest", "HintKey": "DODONGOS_CAVERN_BOSS_ROOM_CHEST", "vanillaItem": "BOMBS_5", "categories": ["cDodongosCavern"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + // Dodongos Cavern Vanilla + "DODONGOS_CAVERN_MAP_CHEST": { "type": "Chest", "scene": "0x01", "flag": "0x08", "name": "Dodongos Cavern Map Chest", "HintKey": "DODONGOS_CAVERN_MAP_CHEST", "vanillaItem": "DODONGOS_CAVERN_MAP", "categories": ["cDodongosCavern", "cVanillaMap"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_COMPASS_CHEST": { "type": "Chest", "scene": "0x01", "flag": "0x05", "name": "Dodongos Cavern Compass Chest", "HintKey": "DODONGOS_CAVERN_COMPASS_CHEST", "vanillaItem": "DODONGOS_CAVERN_COMPASS", "categories": ["cDodongosCavern", "cVanillaCompass"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST": { "type": "Chest", "scene": "0x01", "flag": "0x06", "name": "Dodongos Cavern Bomb Flower Platform Chest", "HintKey": "DODONGOS_CAVERN_BOMB_FLOWER_PLATFORM_CHEST", "vanillaItem": "RED_RUPEE", "categories": ["cDodongosCavern"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_BOMB_BAG_CHEST": { "type": "Chest", "scene": "0x01", "flag": "0x04", "name": "Dodongos Cavern Bomb Bag Chest", "HintKey": "DODONGOS_CAVERN_BOMB_BAG_CHEST", "vanillaItem": "PROGRESSIVE_BOMB_BAG", "categories": ["cDodongosCavern"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_END_OF_BRIDGE_CHEST": { "type": "Chest", "scene": "0x01", "flag": "0x0A", "name": "Dodongos Cavern End Of Bridge Chest", "HintKey": "DODONGOS_CAVERN_END_OF_BRIDGE_CHEST", "vanillaItem": "DEKU_SHIELD", "categories": ["cDodongosCavern"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT": { "type": "Base", "scene": "0x01", "flag": "0x30", "name": "Dodongos Cavern Deku Scrub Near Bomb Bag Left", "HintKey": "DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_LEFT", "vanillaItem": "DEKU_NUTS_5", "categories": ["cDodongosCavern", "cDekuScrub"], "SpoilerCollectionCheck": "Scrub(0x01, 0x01)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS": { "type": "Base", "scene": "0x01", "flag": "0x31", "name": "Dodongos Cavern Deku Scrub Side Room Near Dodongos", "HintKey": "DODONGOS_CAVERN_DEKU_SCRUB_SIDE_ROOM_NEAR_DODONGOS", "vanillaItem": "DEKU_STICK_1", "categories": ["cDodongosCavern", "cDekuScrub"], "SpoilerCollectionCheck": "Scrub(0x01, 0x02)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT": { "type": "Base", "scene": "0x01", "flag": "0x33", "name": "Dodongos Cavern Deku Scrub Near Bomb Bag Right", "HintKey": "DODONGOS_CAVERN_DEKU_SCRUB_NEAR_BOMB_BAG_RIGHT", "vanillaItem": "DEKU_SEEDS_30", "categories": ["cDodongosCavern", "cDekuScrub"], "SpoilerCollectionCheck": "Scrub(0x01, 0x04)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_DEKU_SCRUB_LOBBY": { "type": "Base", "scene": "0x01", "flag": "0x34", "name": "Dodongos Cavern Deku Scrub Lobby", "HintKey": "DODONGOS_CAVERN_DEKU_SCRUB_LOBBY", "vanillaItem": "DEKU_SHIELD", "categories": ["cDodongosCavern", "cDekuScrub"], "SpoilerCollectionCheck": "Scrub(0x01, 0x05)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + // Dodongos Cavern MQ + "DODONGOS_CAVERN_MQ_MAP_CHEST": { "type": "Chest", "scene": "0x01", "flag": "0x00", "name": "Dodongos Cavern MQ Map Chest", "HintKey": "DODONGOS_CAVERN_MQ_MAP_CHEST", "vanillaItem": "DODONGOS_CAVERN_MAP", "categories": ["cDodongosCavern", "cVanillaMap"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_MQ_BOMB_BAG_CHEST": { "type": "Chest", "scene": "0x01", "flag": "0x04", "name": "Dodongos Cavern MQ Bomb Bag Chest", "HintKey": "DODONGOS_CAVERN_MQ_BOMB_BAG_CHEST", "vanillaItem": "PROGRESSIVE_BOMB_BAG", "categories": ["cDodongosCavern"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_MQ_COMPASS_CHEST": { "type": "Chest", "scene": "0x01", "flag": "0x05", "name": "Dodongos Cavern MQ Compass Chest", "HintKey": "DODONGOS_CAVERN_MQ_COMPASS_CHEST", "vanillaItem": "DODONGOS_CAVERN_COMPASS", "categories": ["cDodongosCavern", "cVanillaCompass"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_MQ_LARVAE_ROOM_CHEST": { "type": "Chest", "scene": "0x01", "flag": "0x02", "name": "Dodongos Cavern MQ Larvae Room Chest", "HintKey": "DODONGOS_CAVERN_MQ_LARVAE_ROOM_CHEST", "vanillaItem": "DEKU_SHIELD", "categories": ["cDodongosCavern"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_CHEST": { "type": "Chest", "scene": "0x01", "flag": "0x03", "name": "Dodongos Cavern MQ Torch Puzzle Room Chest", "HintKey": "DODONGOS_CAVERN_MQ_TORCH_PUZZLE_ROOM_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cDodongosCavern"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_MQ_UNDER_GRAVE_CHEST": { "type": "Chest", "scene": "0x01", "flag": "0x01", "name": "Dodongos Cavern MQ Under Grave Chest", "HintKey": "DODONGOS_CAVERN_MQ_UNDER_GRAVE_CHEST", "vanillaItem": "HYLIAN_SHIELD", "categories": ["cDodongosCavern"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR": { "type": "Base", "scene": "0x01", "flag": "0x31", "name": "Dodongos Cavern Deku Scrub Lobby Rear", "HintKey": "DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_REAR", "vanillaItem": "DEKU_STICK_1", "categories": ["cDodongosCavern", "cDekuScrub"], "SpoilerCollectionCheck": "Scrub(0x01, 0x02)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT": { "type": "Base", "scene": "0x01", "flag": "0x33", "name": "Dodongos Cavern Deku Scrub Lobby Front", "HintKey": "DODONGOS_CAVERN_MQ_DEKU_SCRUB_LOBBY_FRONT", "vanillaItem": "DEKU_SEEDS_30", "categories": ["cDodongosCavern", "cDekuScrub"], "SpoilerCollectionCheck": "Scrub(0x01, 0x04)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE": { "type": "Base", "scene": "0x01", "flag": "0x34", "name": "Dodongos Cavern Deku Scrub Staircase", "HintKey": "DODONGOS_CAVERN_MQ_DEKU_SCRUB_STAIRCASE", "vanillaItem": "DEKU_SHIELD", "categories": ["cDodongosCavern", "cDekuScrub"], "SpoilerCollectionCheck": "Scrub(0x01, 0x05)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS": { "type": "Base", "scene": "0x01", "flag": "0x39", "name": "Dodongos Cavern Deku Scrub Side Room Near Lower Lizalfos","HintKey": "DODONGOS_CAVERN_MQ_DEKU_SCRUB_SIDE_ROOM_NEAR_LOWER_LIZALFOS", "vanillaItem": "RED_POTION_REFILL", "categories": ["cDodongosCavern", "cDekuScrub"], "SpoilerCollectionCheck": "Scrub(0x01, 0x08)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + + // Jabu Jabus Belly Vanilla + "JABU_JABUS_BELLY_MAP_CHEST": { "type": "Chest", "scene": "0x02", "flag": "0x02", "name": "Jabu Jabus Belly Map Chest", "HintKey": "JABU_JABUS_BELLY_MAP_CHEST", "vanillaItem": "JABU_JABUS_BELLY_MAP", "categories": ["cJabuJabusBelly", "cVanillaMap"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "JABU_JABUS_BELLY_COMPASS_CHEST": { "type": "Chest", "scene": "0x02", "flag": "0x04", "name": "Jabu Jabus Belly Compass Chest", "HintKey": "JABU_JABUS_BELLY_COMPASS_CHEST", "vanillaItem": "JABU_JABUS_BELLY_COMPASS", "categories": ["cJabuJabusBelly", "cVanillaCompass"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "JABU_JABUS_BELLY_BOOMERANG_CHEST": { "type": "Chest", "scene": "0x02", "flag": "0x01", "name": "Jabu Jabus Belly Boomerang Chest", "HintKey": "JABU_JABUS_BELLY_BOOMERANG_CHEST", "vanillaItem": "BOOMERANG", "categories": ["cJabuJabusBelly"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "JABU_JABUS_BELLY_DEKU_SCRUB": { "type": "Base", "scene": "0x02", "flag": "0x30", "name": "Jabu Jabus Belly Deku Scrub", "HintKey": "JABU_JABUS_BELLY_DEKU_SCRUB", "vanillaItem": "DEKU_NUTS_5", "categories": ["cJabuJabusBelly", "cDekuScrub"], "SpoilerCollectionCheck": "Scrub(0x02, 0x01)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + // Jabu Jabus Belly MQ + "JABU_JABUS_BELLY_MQ_FIRST_ROOM_SIDE_CHEST": { "type": "Chest", "scene": "0x02", "flag": "0x05", "name": "Jabu Jabus Belly MQ First Room Side Chest", "HintKey": "JABU_JABUS_BELLY_MQ_FIRST_ROOM_SIDE_CHEST", "vanillaItem": "DEKU_NUTS_5", "categories": ["cJabuJabusBelly"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "JABU_JABUS_BELLY_MQ_MAP_CHEST": { "type": "Chest", "scene": "0x02", "flag": "0x03", "name": "Jabu Jabus Belly MQ Map Chest", "HintKey": "JABU_JABUS_BELLY_MQ_MAP_CHEST", "vanillaItem": "JABU_JABUS_BELLY_MAP", "categories": ["cJabuJabusBelly", "cVanillaMap"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "JABU_JABUS_BELLY_MQ_SECOND_ROOM_LOWER_CHEST": { "type": "Chest", "scene": "0x02", "flag": "0x02", "name": "Jabu Jabus Belly MQ Second Room Lower Chest", "HintKey": "JABU_JABUS_BELLY_MQ_SECOND_ROOM_LOWER_CHEST", "vanillaItem": "DEKU_NUTS_5", "categories": ["cJabuJabusBelly"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "JABU_JABUS_BELLY_MQ_COMPASS_CHEST": { "type": "Chest", "scene": "0x02", "flag": "0x00", "name": "Jabu Jabus Belly MQ Compass Chest", "HintKey": "JABU_JABUS_BELLY_MQ_COMPASS_CHEST", "vanillaItem": "JABU_JABUS_BELLY_COMPASS", "categories": ["cJabuJabusBelly", "cVanillaCompass"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "JABU_JABUS_BELLY_MQ_SECOND_ROOM_UPPER_CHEST": { "type": "Chest", "scene": "0x02", "flag": "0x07", "name": "Jabu Jabus Belly MQ Second Room Upper Chest", "HintKey": "JABU_JABUS_BELLY_MQ_SECOND_ROOM_UPPER_CHEST", "vanillaItem": "RECOVERY_HEART", "categories": ["cJabuJabusBelly"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_SWITCHES_CHEST": { "type": "Chest", "scene": "0x02", "flag": "0x08", "name": "Jabu Jabus Belly MQ Basement Near Switches Chest", "HintKey": "JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_SWITCHES_CHEST", "vanillaItem": "DEKU_NUTS_5", "categories": ["cJabuJabusBelly"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_VINES_CHEST": { "type": "Chest", "scene": "0x02", "flag": "0x04", "name": "Jabu Jabus Belly MQ Basement Near Vines Chest", "HintKey": "JABU_JABUS_BELLY_MQ_BASEMENT_NEAR_VINES_CHEST", "vanillaItem": "BOMBCHU_10", "categories": ["cJabuJabusBelly"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "JABU_JABUS_BELLY_MQ_NEAR_BOSS_CHEST": { "type": "Chest", "scene": "0x02", "flag": "0x0A", "name": "Jabu Jabus Belly MQ Near Boss Chest", "HintKey": "JABU_JABUS_BELLY_MQ_NEAR_BOSS_CHEST", "vanillaItem": "DEKU_SHIELD", "categories": ["cJabuJabusBelly"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_ROOM_CHEST": { "type": "Chest", "scene": "0x02", "flag": "0x09", "name": "Jabu Jabus Belly MQ Falling Like Like Room Chest", "HintKey": "JABU_JABUS_BELLY_MQ_FALLING_LIKE_LIKE_ROOM_CHEST", "vanillaItem": "DEKU_STICK_1", "categories": ["cJabuJabusBelly"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "JABU_JABUS_BELLY_MQ_BOOMERANG_ROOM_SMALL_CHEST": { "type": "Chest", "scene": "0x02", "flag": "0x01", "name": "Jabu Jabus Belly MQ Boomerang Room Small Chest", "HintKey": "JABU_JABUS_BELLY_MQ_BOOMERANG_ROOM_SMALL_CHEST", "vanillaItem": "DEKU_NUTS_5", "categories": ["cJabuJabusBelly"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "JABU_JABUS_BELLY_MQ_BOOMERANG_CHEST": { "type": "Chest", "scene": "0x02", "flag": "0x06", "name": "Jabu Jabus Belly MQ Boomerang Chest", "HintKey": "JABU_JABUS_BELLY_MQ_BOOMERANG_CHEST", "vanillaItem": "BOOMERANG", "categories": ["cJabuJabusBelly"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + + // Forest Temple Vanilla + "FOREST_TEMPLE_FIRST_ROOM_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x03", "name": "Forest Temple First Room Chest", "HintKey": "FOREST_TEMPLE_FIRST_ROOM_CHEST", "vanillaItem": "FOREST_TEMPLE_SMALL_KEY", "categories": ["cForestTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_FIRST_STALFOS_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x00", "name": "Forest Temple First Stalfos Chest", "HintKey": "FOREST_TEMPLE_FIRST_STALFOS_CHEST", "vanillaItem": "FOREST_TEMPLE_SMALL_KEY", "categories": ["cForestTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_RAISED_ISLAND_COURTYARD_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x05", "name": "Forest Temple Raised Island Courtyard Chest", "HintKey": "FOREST_TEMPLE_RAISED_ISLAND_COURTYARD_CHEST", "vanillaItem": "RECOVERY_HEART", "categories": ["cForestTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_MAP_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x01", "name": "Forest Temple Map Chest", "HintKey": "FOREST_TEMPLE_MAP_CHEST", "vanillaItem": "FOREST_TEMPLE_MAP", "categories": ["cForestTemple", "cVanillaMap"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_WELL_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x09", "name": "Forest Temple Well Chest", "HintKey": "FOREST_TEMPLE_WELL_CHEST", "vanillaItem": "FOREST_TEMPLE_SMALL_KEY", "categories": ["cForestTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_FALLING_CEILING_ROOM_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x07", "name": "Forest Temple Falling Ceiling Room Chest", "HintKey": "FOREST_TEMPLE_FALLING_CEILING_ROOM_CHEST", "vanillaItem": "ARROWS_10", "categories": ["cForestTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_EYE_SWITCH_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x04", "name": "Forest Temple Eye Switch Chest", "HintKey": "FOREST_TEMPLE_EYE_SWITCH_CHEST", "vanillaItem": "ARROWS_30", "categories": ["cForestTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_BOSS_KEY_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x0E", "name": "Forest Temple Boss Key Chest", "HintKey": "FOREST_TEMPLE_BOSS_KEY_CHEST", "vanillaItem": "FOREST_TEMPLE_BOSS_KEY", "categories": ["cForestTemple", "cVanillaBossKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_FLOORMASTER_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x02", "name": "Forest Temple Floormaster Chest", "HintKey": "FOREST_TEMPLE_FLOORMASTER_CHEST", "vanillaItem": "FOREST_TEMPLE_SMALL_KEY", "categories": ["cForestTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_BOW_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x0C", "name": "Forest Temple Bow Chest", "HintKey": "FOREST_TEMPLE_BOW_CHEST", "vanillaItem": "PROGRESSIVE_BOW", "categories": ["cForestTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_RED_POE_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x0D", "name": "Forest Temple Red Poe Chest", "HintKey": "FOREST_TEMPLE_RED_POE_CHEST", "vanillaItem": "FOREST_TEMPLE_SMALL_KEY", "categories": ["cForestTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_BLUE_POE_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x0F", "name": "Forest Temple Blue Poe Chest", "HintKey": "FOREST_TEMPLE_BLUE_POE_CHEST", "vanillaItem": "FOREST_TEMPLE_COMPASS", "categories": ["cForestTemple", "cVanillaCompass"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_BASEMENT_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x0B", "name": "Forest Temple Basement Chest", "HintKey": "FOREST_TEMPLE_BASEMENT_CHEST", "vanillaItem": "ARROWS_5", "categories": ["cForestTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + // Forest Temple MQ + "FOREST_TEMPLE_MQ_FIRST_ROOM_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x03", "name": "Forest Temple MQ First Room Chest", "HintKey": "FOREST_TEMPLE_MQ_FIRST_ROOM_CHEST", "vanillaItem": "FOREST_TEMPLE_SMALL_KEY", "categories": ["cForestTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_MQ_WOLFOS_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x00", "name": "Forest Temple MQ Wolfos Chest", "HintKey": "FOREST_TEMPLE_MQ_WOLFOS_CHEST", "vanillaItem": "FOREST_TEMPLE_SMALL_KEY", "categories": ["cForestTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_MQ_BOW_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x0C", "name": "Forest Temple MQ Bow Chest", "HintKey": "FOREST_TEMPLE_MQ_BOW_CHEST", "vanillaItem": "PROGRESSIVE_BOW", "categories": ["cForestTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_LOWER_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x01", "name": "Forest Temple MQ Raised Island Courtyard Lower Chest", "HintKey": "FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_LOWER_CHEST", "vanillaItem": "FOREST_TEMPLE_SMALL_KEY", "categories": ["cForestTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_UPPER_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x05", "name": "Forest Temple MQ Raised Island Courtyard Upper Chest", "HintKey": "FOREST_TEMPLE_MQ_RAISED_ISLAND_COURTYARD_UPPER_CHEST", "vanillaItem": "FOREST_TEMPLE_SMALL_KEY", "categories": ["cForestTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_MQ_WELL_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x09", "name": "Forest Temple MQ Well Chest", "HintKey": "FOREST_TEMPLE_MQ_WELL_CHEST", "vanillaItem": "FOREST_TEMPLE_SMALL_KEY", "categories": ["cForestTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_MQ_MAP_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x0D", "name": "Forest Temple MQ Map Chest", "HintKey": "FOREST_TEMPLE_MQ_MAP_CHEST", "vanillaItem": "FOREST_TEMPLE_MAP", "categories": ["cForestTemple", "cVanillaMap"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_MQ_COMPASS_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x0F", "name": "Forest Temple MQ Compass Chest", "HintKey": "FOREST_TEMPLE_MQ_COMPASS_CHEST", "vanillaItem": "FOREST_TEMPLE_COMPASS", "categories": ["cForestTemple", "cVanillaCompass"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_MQ_FALLING_CEILING_ROOM_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x06", "name": "Forest Temple MQ Falling Ceiling Room Chest", "HintKey": "FOREST_TEMPLE_MQ_FALLING_CEILING_ROOM_CHEST", "vanillaItem": "ARROWS_5", "categories": ["cForestTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_MQ_BASEMENT_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x0B", "name": "Forest Temple MQ Basement Chest", "HintKey": "FOREST_TEMPLE_MQ_BASEMENT_CHEST", "vanillaItem": "ARROWS_5", "categories": ["cForestTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_MQ_REDEAD_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x02", "name": "Forest Temple MQ Redead Chest", "HintKey": "FOREST_TEMPLE_MQ_REDEAD_CHEST", "vanillaItem": "FOREST_TEMPLE_SMALL_KEY", "categories": ["cForestTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_MQ_BOSS_KEY_CHEST": { "type": "Chest", "scene": "0x03", "flag": "0x0E", "name": "Forest Temple MQ Boss Key Chest", "HintKey": "FOREST_TEMPLE_MQ_BOSS_KEY_CHEST", "vanillaItem": "FOREST_TEMPLE_BOSS_KEY", "categories": ["cForestTemple", "cVanillaBossKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + + // Fire Temple Vanilla + "FIRE_TEMPLE_NEAR_BOSS_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x01", "name": "Fire Temple Near Boss Chest", "HintKey": "FIRE_TEMPLE_NEAR_BOSS_CHEST", "vanillaItem": "FIRE_TEMPLE_SMALL_KEY", "categories": ["cFireTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_FLARE_DANCER_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x00", "name": "Fire Temple Flare Dancer Chest", "HintKey": "FIRE_TEMPLE_FLARE_DANCER_CHEST", "vanillaItem": "BOMBS_10", "categories": ["cFireTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_BOSS_KEY_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x0C", "name": "Fire Temple Boss Key Chest", "HintKey": "FIRE_TEMPLE_BOSS_KEY_CHEST", "vanillaItem": "FIRE_TEMPLE_BOSS_KEY", "categories": ["cFireTemple", "cVanillaBossKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x02", "name": "Fire Temple Big Lava Room Blocked Door Chest", "HintKey": "FIRE_TEMPLE_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST", "vanillaItem": "FIRE_TEMPLE_SMALL_KEY", "categories": ["cFireTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_BIG_LAVA_ROOM_LOWER_OPEN_DOOR_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x04", "name": "Fire Temple Big Lava Room Lower Open Door Chest", "HintKey": "FIRE_TEMPLE_BIG_LAVA_ROOM_LOWER_OPEN_DOOR_CHEST", "vanillaItem": "FIRE_TEMPLE_SMALL_KEY", "categories": ["cFireTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_BOULDER_MAZE_LOWER_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x03", "name": "Fire Temple Boulder Maze Lower Chest", "HintKey": "FIRE_TEMPLE_BOULDER_MAZE_LOWER_CHEST", "vanillaItem": "FIRE_TEMPLE_SMALL_KEY", "categories": ["cFireTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_BOULDER_MAZE_UPPER_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x06", "name": "Fire Temple Boulder Maze Upper Chest", "HintKey": "FIRE_TEMPLE_BOULDER_MAZE_UPPER_CHEST", "vanillaItem": "FIRE_TEMPLE_SMALL_KEY", "categories": ["cFireTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_BOULDER_MAZE_SIDE_ROOM_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x08", "name": "Fire Temple Boulder Maze Side Room Chest", "HintKey": "FIRE_TEMPLE_BOULDER_MAZE_SIDE_ROOM_CHEST", "vanillaItem": "FIRE_TEMPLE_SMALL_KEY", "categories": ["cFireTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_BOULDER_MAZE_SHORTCUT_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x0B", "name": "Fire Temple Boulder Maze Shortcut Chest", "HintKey": "FIRE_TEMPLE_BOULDER_MAZE_SHORTCUT_CHEST", "vanillaItem": "FIRE_TEMPLE_SMALL_KEY", "categories": ["cFireTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_SCARECROW_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x0D", "name": "Fire Temple Scarecrow Chest", "HintKey": "FIRE_TEMPLE_SCARECROW_CHEST", "vanillaItem": "HUGE_RUPEE", "categories": ["cFireTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_MAP_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x0A", "name": "Fire Temple Map Chest", "HintKey": "FIRE_TEMPLE_MAP_CHEST", "vanillaItem": "FIRE_TEMPLE_MAP", "categories": ["cFireTemple", "cVanillaMap"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_COMPASS_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x07", "name": "Fire Temple Compass Chest", "HintKey": "FIRE_TEMPLE_COMPASS_CHEST", "vanillaItem": "FIRE_TEMPLE_COMPASS", "categories": ["cFireTemple", "cVanillaCompass"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_HIGHEST_GORON_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x09", "name": "Fire Temple Highest Goron Chest", "HintKey": "FIRE_TEMPLE_HIGHEST_GORON_CHEST", "vanillaItem": "FIRE_TEMPLE_SMALL_KEY", "categories": ["cFireTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_MEGATON_HAMMER_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x05", "name": "Fire Temple Megaton Hammer Chest", "HintKey": "FIRE_TEMPLE_MEGATON_HAMMER_CHEST", "vanillaItem": "MEGATON_HAMMER", "categories": ["cFireTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + // Fire Temple MQ + "FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x07", "name": "Fire Temple MQ Near Boss Chest", "HintKey": "FIRE_TEMPLE_MQ_NEAR_BOSS_CHEST", "vanillaItem": "FIRE_TEMPLE_SMALL_KEY", "categories": ["cFireTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_MQ_MEGATON_HAMMER_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x00", "name": "Fire Temple MQ Megaton Hammer Chest", "HintKey": "FIRE_TEMPLE_MQ_MEGATON_HAMMER_CHEST", "vanillaItem": "MEGATON_HAMMER", "categories": ["cFireTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_MQ_COMPASS_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x0B", "name": "Fire Temple MQ Compass Chest", "HintKey": "FIRE_TEMPLE_MQ_COMPASS_CHEST", "vanillaItem": "FIRE_TEMPLE_COMPASS", "categories": ["cFireTemple", "cVanillaCompass"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x03", "name": "Fire Temple MQ Lizalfos Maze Lower Chest", "HintKey": "FIRE_TEMPLE_MQ_LIZALFOS_MAZE_LOWER_CHEST", "vanillaItem": "BOMBS_10", "categories": ["cFireTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x06", "name": "Fire Temple MQ Lizalfos Maze Upper Chest", "HintKey": "FIRE_TEMPLE_MQ_LIZALFOS_MAZE_UPPER_CHEST", "vanillaItem": "BOMBS_10", "categories": ["cFireTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_MQ_CHEST_ON_FIRE": { "type": "Chest", "scene": "0x04", "flag": "0x05", "name": "Fire Temple MQ Chest on Fire", "HintKey": "FIRE_TEMPLE_MQ_CHEST_ON_FIRE", "vanillaItem": "FIRE_TEMPLE_SMALL_KEY", "categories": ["cFireTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_MQ_MAP_ROOM_SIDE_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x02", "name": "Fire Temple MQ Map Room Side Chest", "HintKey": "FIRE_TEMPLE_MQ_MAP_ROOM_SIDE_CHEST", "vanillaItem": "HYLIAN_SHIELD", "categories": ["cFireTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_MQ_MAP_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x0C", "name": "Fire Temple MQ Map Chest", "HintKey": "FIRE_TEMPLE_MQ_MAP_CHEST", "vanillaItem": "FIRE_TEMPLE_MAP", "categories": ["cFireTemple", "cVanillaMap"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_MQ_BOSS_KEY_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x04", "name": "Fire Temple MQ Boss Key Chest", "HintKey": "FIRE_TEMPLE_MQ_BOSS_KEY_CHEST", "vanillaItem": "FIRE_TEMPLE_BOSS_KEY", "categories": ["cFireTemple", "cVanillaBossKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_MQ_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x01", "name": "Fire Temple MQ Big Lava Room Blocked Door Chest", "HintKey": "FIRE_TEMPLE_MQ_BIG_LAVA_ROOM_BLOCKED_DOOR_CHEST", "vanillaItem": "FIRE_TEMPLE_SMALL_KEY", "categories": ["cFireTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST": { "type": "Chest", "scene": "0x04", "flag": "0x08", "name": "Fire Temple MQ Lizalfos Maze Side Room Chest", "HintKey": "FIRE_TEMPLE_MQ_LIZALFOS_MAZE_SIDE_ROOM_CHEST", "vanillaItem": "FIRE_TEMPLE_SMALL_KEY", "categories": ["cFireTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_MQ_FREESTANDING_KEY": { "type": "Collectable", "scene": "0x04", "flag": "0x1C", "name": "Fire Temple MQ Freestanding Key", "HintKey": "FIRE_TEMPLE_MQ_FREESTANDING_KEY", "vanillaItem": "FIRE_TEMPLE_SMALL_KEY", "categories": ["cFireTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + + // Water Temple Vanilla + "WATER_TEMPLE_MAP_CHEST": { "type": "Chest", "scene": "0x05", "flag": "0x02", "name": "Water Temple Map Chest", "HintKey": "WATER_TEMPLE_MAP_CHEST", "vanillaItem": "WATER_TEMPLE_MAP", "categories": ["cWaterTemple", "cVanillaMap"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "WATER_TEMPLE_COMPASS_CHEST": { "type": "Chest", "scene": "0x05", "flag": "0x09", "name": "Water Temple Compass Chest", "HintKey": "WATER_TEMPLE_COMPASS_CHEST", "vanillaItem": "WATER_TEMPLE_COMPASS", "categories": ["cWaterTemple", "cVanillaCompass"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "WATER_TEMPLE_TORCHES_CHEST": { "type": "Chest", "scene": "0x05", "flag": "0x01", "name": "Water Temple Torches Chest", "HintKey": "WATER_TEMPLE_TORCHES_CHEST", "vanillaItem": "WATER_TEMPLE_SMALL_KEY", "categories": ["cWaterTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "WATER_TEMPLE_DRAGON_CHEST": { "type": "Chest", "scene": "0x05", "flag": "0x0A", "name": "Water Temple Dragon Chest", "HintKey": "WATER_TEMPLE_DRAGON_CHEST", "vanillaItem": "WATER_TEMPLE_SMALL_KEY", "categories": ["cWaterTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "WATER_TEMPLE_CENTRAL_BOW_TARGET_CHEST": { "type": "Chest", "scene": "0x05", "flag": "0x08", "name": "Water Temple Central Bow Target Chest", "HintKey": "WATER_TEMPLE_CENTRAL_BOW_TARGET_CHEST", "vanillaItem": "WATER_TEMPLE_SMALL_KEY", "categories": ["cWaterTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "WATER_TEMPLE_CENTRAL_PILLAR_CHEST": { "type": "Chest", "scene": "0x05", "flag": "0x06", "name": "Water Temple Central Pillar Chest", "HintKey": "WATER_TEMPLE_CENTRAL_PILLAR_CHEST", "vanillaItem": "WATER_TEMPLE_SMALL_KEY", "categories": ["cWaterTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "WATER_TEMPLE_CRACKED_WALL_CHEST": { "type": "Chest", "scene": "0x05", "flag": "0x00", "name": "Water Temple Cracked Wall Chest", "HintKey": "WATER_TEMPLE_CRACKED_WALL_CHEST", "vanillaItem": "WATER_TEMPLE_SMALL_KEY", "categories": ["cWaterTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "WATER_TEMPLE_BOSS_KEY_CHEST": { "type": "Chest", "scene": "0x05", "flag": "0x05", "name": "Water Temple Boss Key Chest", "HintKey": "WATER_TEMPLE_BOSS_KEY_CHEST", "vanillaItem": "WATER_TEMPLE_BOSS_KEY", "categories": ["cWaterTemple", "cVanillaBossKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "WATER_TEMPLE_LONGSHOT_CHEST": { "type": "Chest", "scene": "0x05", "flag": "0x07", "name": "Water Temple Longshot Chest", "HintKey": "WATER_TEMPLE_LONGSHOT_CHEST", "vanillaItem": "PROGRESSIVE_HOOKSHOT", "categories": ["cWaterTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "WATER_TEMPLE_RIVER_CHEST": { "type": "Chest", "scene": "0x05", "flag": "0x03", "name": "Water Temple River Chest", "HintKey": "WATER_TEMPLE_RIVER_CHEST", "vanillaItem": "WATER_TEMPLE_SMALL_KEY", "categories": ["cWaterTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + // Water Temple MQ + "WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST": { "type": "Chest", "scene": "0x05", "flag": "0x06", "name": "Water Temple MQ Central Pillar Chest", "HintKey": "WATER_TEMPLE_MQ_CENTRAL_PILLAR_CHEST", "vanillaItem": "WATER_TEMPLE_SMALL_KEY", "categories": ["cWaterTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "WATER_TEMPLE_MQ_BOSS_KEY_CHEST": { "type": "Chest", "scene": "0x05", "flag": "0x05", "name": "Water Temple MQ Boss Key Chest", "HintKey": "WATER_TEMPLE_MQ_BOSS_KEY_CHEST", "vanillaItem": "WATER_TEMPLE_BOSS_KEY", "categories": ["cWaterTemple", "cVanillaBossKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "WATER_TEMPLE_MQ_LONGSHOT_CHEST": { "type": "Chest", "scene": "0x05", "flag": "0x00", "name": "Water Temple MQ Longshot Chest", "HintKey": "WATER_TEMPLE_MQ_LONGSHOT_CHEST", "vanillaItem": "PROGRESSIVE_HOOKSHOT", "categories": ["cWaterTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "WATER_TEMPLE_MQ_COMPASS_CHEST": { "type": "Chest", "scene": "0x05", "flag": "0x01", "name": "Water Temple MQ Compass Chest", "HintKey": "WATER_TEMPLE_MQ_COMPASS_CHEST", "vanillaItem": "WATER_TEMPLE_COMPASS", "categories": ["cWaterTemple", "cVanillaCompass"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "WATER_TEMPLE_MQ_MAP_CHEST": { "type": "Chest", "scene": "0x05", "flag": "0x02", "name": "Water Temple MQ Map Chest", "HintKey": "WATER_TEMPLE_MQ_MAP_CHEST", "vanillaItem": "WATER_TEMPLE_MAP", "categories": ["cWaterTemple", "cVanillaMap"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "WATER_TEMPLE_MQ_FREESTANDING_KEY": { "type": "Collectable", "scene": "0x05", "flag": "0x01", "name": "Water Temple MQ Freestanding Key", "HintKey": "WATER_TEMPLE_MQ_FREESTANDING_KEY", "vanillaItem": "WATER_TEMPLE_SMALL_KEY", "categories": ["cWaterTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + + // Spirit Temple Shared + "SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST": { "type": "Chest", "scene": "0x5C", "flag": "0x0B", "name": "Spirit Temple Silver Gauntlets Chest", "HintKey": "SPIRIT_TEMPLE_SILVER_GAUNTLETS_CHEST", "vanillaItem": "PROGRESSIVE_STRENGTH", "categories": ["cSpiritTemple", "cDesertColossus"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST": { "type": "Chest", "scene": "0x5C", "flag": "0x09", "name": "Spirit Temple Mirror Shield Chest", "HintKey": "SPIRIT_TEMPLE_MIRROR_SHIELD_CHEST", "vanillaItem": "MIRROR_SHIELD", "categories": ["cSpiritTemple", "cDesertColossus"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + // Spirit Temple Vanilla + "SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x08", "name": "Spirit Temple Child Bridge Chest", "HintKey": "SPIRIT_TEMPLE_CHILD_BRIDGE_CHEST", "vanillaItem": "DEKU_SHIELD", "categories": ["cSpiritTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x00", "name": "Spirit Temple Child Early Torches Chest", "HintKey": "SPIRIT_TEMPLE_CHILD_EARLY_TORCHES_CHEST", "vanillaItem": "SPIRIT_TEMPLE_SMALL_KEY", "categories": ["cSpiritTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_COMPASS_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x04", "name": "Spirit Temple Compass Chest", "HintKey": "SPIRIT_TEMPLE_COMPASS_CHEST", "vanillaItem": "SPIRIT_TEMPLE_COMPASS", "categories": ["cSpiritTemple", "cVanillaCompass"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_EARLY_ADULT_RIGHT_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x07", "name": "Spirit Temple Early Adult Right Chest", "HintKey": "SPIRIT_TEMPLE_EARLY_ADULT_RIGHT_CHEST", "vanillaItem": "SPIRIT_TEMPLE_SMALL_KEY", "categories": ["cSpiritTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_FIRST_MIRROR_LEFT_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x0D", "name": "Spirit Temple First Mirror Left Chest", "HintKey": "SPIRIT_TEMPLE_FIRST_MIRROR_LEFT_CHEST", "vanillaItem": "ICE_TRAP", "categories": ["cSpiritTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x0E", "name": "Spirit Temple First Mirror Right Chest", "HintKey": "SPIRIT_TEMPLE_FIRST_MIRROR_RIGHT_CHEST", "vanillaItem": "RECOVERY_HEART", "categories": ["cSpiritTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MAP_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x03", "name": "Spirit Temple Map Chest", "HintKey": "SPIRIT_TEMPLE_MAP_CHEST", "vanillaItem": "SPIRIT_TEMPLE_MAP", "categories": ["cSpiritTemple", "cVanillaMap"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_CHILD_CLIMB_NORTH_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x06", "name": "Spirit Temple Child Climb North Chest", "HintKey": "SPIRIT_TEMPLE_CHILD_CLIMB_NORTH_CHEST", "vanillaItem": "BOMBCHU_10", "categories": ["cSpiritTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_CHILD_CLIMB_EAST_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x0C", "name": "Spirit Temple Child Climb East Chest", "HintKey": "SPIRIT_TEMPLE_CHILD_CLIMB_EAST_CHEST", "vanillaItem": "DEKU_SHIELD", "categories": ["cSpiritTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_SUN_BLOCK_ROOM_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x01", "name": "Spirit Temple Sun Block Room Chest", "HintKey": "SPIRIT_TEMPLE_SUN_BLOCK_ROOM_CHEST", "vanillaItem": "SPIRIT_TEMPLE_SMALL_KEY", "categories": ["cSpiritTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_STATUE_ROOM_HAND_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x02", "name": "Spirit Temple Statue Room Hand Chest", "HintKey": "SPIRIT_TEMPLE_STATUE_ROOM_HAND_CHEST", "vanillaItem": "SPIRIT_TEMPLE_SMALL_KEY", "categories": ["cSpiritTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_STATUE_ROOM_NORTHEAST_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x0F", "name": "Spirit Temple Statue Room Northeast Chest", "HintKey": "SPIRIT_TEMPLE_STATUE_ROOM_NORTHEAST_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cSpiritTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x05", "name": "Spirit Temple Near Four Armos Chest", "HintKey": "SPIRIT_TEMPLE_NEAR_FOUR_ARMOS_CHEST", "vanillaItem": "SPIRIT_TEMPLE_SMALL_KEY", "categories": ["cSpiritTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_HALLWAY_RIGHT_INVISIBLE_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x14", "name": "Spirit Temple Hallway Right Invisible Chest", "HintKey": "SPIRIT_TEMPLE_HALLWAY_RIGHT_INVISIBLE_CHEST", "vanillaItem": "RECOVERY_HEART", "categories": ["cSpiritTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_HALLWAY_LEFT_INVISIBLE_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x15", "name": "Spirit Temple Hallway Left Invisible Chest", "HintKey": "SPIRIT_TEMPLE_HALLWAY_LEFT_INVISIBLE_CHEST", "vanillaItem": "RECOVERY_HEART", "categories": ["cSpiritTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_BOSS_KEY_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x0A", "name": "Spirit Temple Boss Key Chest", "HintKey": "SPIRIT_TEMPLE_BOSS_KEY_CHEST", "vanillaItem": "SPIRIT_TEMPLE_BOSS_KEY", "categories": ["cSpiritTemple", "cVanillaBossKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_TOPMOST_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x12", "name": "Spirit Temple Topmost Chest", "HintKey": "SPIRIT_TEMPLE_TOPMOST_CHEST", "vanillaItem": "BOMBS_20", "categories": ["cSpiritTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + // Spirit Temple MQ + "SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_LEFT_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x1A", "name": "Spirit Temple MQ Entrance Front Left Chest", "HintKey": "SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_LEFT_CHEST", "vanillaItem": "BOMBCHU_10", "categories": ["cSpiritTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_RIGHT_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x1F", "name": "Spirit Temple MQ Entrance Back Right Chest", "HintKey": "SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_RIGHT_CHEST", "vanillaItem": "BOMBCHU_10", "categories": ["cSpiritTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_RIGHT_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x1B", "name": "Spirit Temple MQ Entrance Front Right Chest", "HintKey": "SPIRIT_TEMPLE_MQ_ENTRANCE_FRONT_RIGHT_CHEST", "vanillaItem": "SPIRIT_TEMPLE_SMALL_KEY", "categories": ["cSpiritTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_LEFT_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x1E", "name": "Spirit Temple MQ Entrance Back Left Chest", "HintKey": "SPIRIT_TEMPLE_MQ_ENTRANCE_BACK_LEFT_CHEST", "vanillaItem": "SPIRIT_TEMPLE_SMALL_KEY", "categories": ["cSpiritTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_CHILD_HAMMER_SWITCH_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x1D", "name": "Spirit Temple MQ Child Hammer Switch Chest", "HintKey": "SPIRIT_TEMPLE_MQ_CHILD_HAMMER_SWITCH_CHEST", "vanillaItem": "SPIRIT_TEMPLE_SMALL_KEY", "categories": ["cSpiritTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_MAP_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x00", "name": "Spirit Temple MQ Map Chest", "HintKey": "SPIRIT_TEMPLE_MQ_MAP_CHEST", "vanillaItem": "SPIRIT_TEMPLE_MAP", "categories": ["cSpiritTemple", "cVanillaMap"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_MAP_ROOM_ENEMY_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x08", "name": "Spirit Temple MQ Map Room Enemy Chest", "HintKey": "SPIRIT_TEMPLE_MQ_MAP_ROOM_ENEMY_CHEST", "vanillaItem": "SPIRIT_TEMPLE_SMALL_KEY", "categories": ["cSpiritTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_CHILD_CLIMB_NORTH_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x06", "name": "Spirit Temple MQ Child Climb North Chest", "HintKey": "SPIRIT_TEMPLE_MQ_CHILD_CLIMB_NORTH_CHEST", "vanillaItem": "BOMBCHU_10", "categories": ["cSpiritTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_CHILD_CLIMB_SOUTH_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x0C", "name": "Spirit Temple MQ Child Climb South Chest", "HintKey": "SPIRIT_TEMPLE_MQ_CHILD_CLIMB_SOUTH_CHEST", "vanillaItem": "SPIRIT_TEMPLE_SMALL_KEY", "categories": ["cSpiritTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_COMPASS_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x03", "name": "Spirit Temple MQ Compass Chest", "HintKey": "SPIRIT_TEMPLE_MQ_COMPASS_CHEST", "vanillaItem": "SPIRIT_TEMPLE_COMPASS", "categories": ["cSpiritTemple", "cVanillaCompass"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_STATUE_ROOM_LULLABY_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x0F", "name": "Spirit Temple MQ Statue Room Lullaby Chest", "HintKey": "SPIRIT_TEMPLE_MQ_STATUE_ROOM_LULLABY_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cSpiritTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_STATUE_ROOM_INVISIBLE_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x02", "name": "Spirit Temple MQ Statue Room Invisible Chest", "HintKey": "SPIRIT_TEMPLE_MQ_STATUE_ROOM_INVISIBLE_CHEST", "vanillaItem": "RECOVERY_HEART", "categories": ["cSpiritTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_SILVER_BLOCK_HALLWAY_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x1C", "name": "Spirit Temple MQ Silver Block Hallway Chest", "HintKey": "SPIRIT_TEMPLE_MQ_SILVER_BLOCK_HALLWAY_CHEST", "vanillaItem": "SPIRIT_TEMPLE_SMALL_KEY", "categories": ["cSpiritTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x01", "name": "Spirit Temple MQ Sun Block Room Chest", "HintKey": "SPIRIT_TEMPLE_MQ_SUN_BLOCK_ROOM_CHEST", "vanillaItem": "RECOVERY_HEART", "categories": ["cSpiritTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x07", "name": "Spirit Temple MQ Symphony Room Chest", "HintKey": "SPIRIT_TEMPLE_MQ_SYMPHONY_ROOM_CHEST", "vanillaItem": "PURPLE_RUPEE", "categories": ["cSpiritTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_LEEVER_ROOM_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x04", "name": "Spirit Temple MQ Leever Room Chest", "HintKey": "SPIRIT_TEMPLE_MQ_LEEVER_ROOM_CHEST", "vanillaItem": "PURPLE_RUPEE", "categories": ["cSpiritTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_BEAMOS_ROOM_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x19", "name": "Spirit Temple MQ Beamos Room Chest", "HintKey": "SPIRIT_TEMPLE_MQ_BEAMOS_ROOM_CHEST", "vanillaItem": "RECOVERY_HEART", "categories": ["cSpiritTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_CHEST_SWITCH_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x18", "name": "Spirit Temple MQ Chest Switch Chest", "HintKey": "SPIRIT_TEMPLE_MQ_CHEST_SWITCH_CHEST", "vanillaItem": "ICE_TRAP", "categories": ["cSpiritTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_BOSS_KEY_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x05", "name": "Spirit Temple MQ Boss Key Chest", "HintKey": "SPIRIT_TEMPLE_MQ_BOSS_KEY_CHEST", "vanillaItem": "SPIRIT_TEMPLE_BOSS_KEY", "categories": ["cSpiritTemple", "cVanillaBossKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_MIRROR_PUZZLE_INVISIBLE_CHEST": { "type": "Chest", "scene": "0x06", "flag": "0x12", "name": "Spirit Temple MQ Mirror Puzzle Invisible Chest", "HintKey": "SPIRIT_TEMPLE_MQ_MIRROR_PUZZLE_INVISIBLE_CHEST", "vanillaItem": "SPIRIT_TEMPLE_SMALL_KEY", "categories": ["cSpiritTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + + // Shadow Temple Vanilla + "SHADOW_TEMPLE_MAP_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x01", "name": "Shadow Temple Map Chest", "HintKey": "SHADOW_TEMPLE_MAP_CHEST", "vanillaItem": "SHADOW_TEMPLE_MAP", "categories": ["cShadowTemple", "cVanillaMap"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_HOVER_BOOTS_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x07", "name": "Shadow Temple Hover Boots Chest", "HintKey": "SHADOW_TEMPLE_HOVER_BOOTS_CHEST", "vanillaItem": "HOVER_BOOTS", "categories": ["cShadowTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_COMPASS_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x03", "name": "Shadow Temple Compass Chest", "HintKey": "SHADOW_TEMPLE_COMPASS_CHEST", "vanillaItem": "SHADOW_TEMPLE_COMPASS", "categories": ["cShadowTemple", "cVanillaCompass"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x02", "name": "Shadow Temple Early Silver Rupee Chest", "HintKey": "SHADOW_TEMPLE_EARLY_SILVER_RUPEE_CHEST", "vanillaItem": "SHADOW_TEMPLE_SMALL_KEY", "categories": ["cShadowTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x0C", "name": "Shadow Temple Invisible Blades Visible Chest", "HintKey": "SHADOW_TEMPLE_INVISIBLE_BLADES_VISIBLE_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cShadowTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x16", "name": "Shadow Temple Invisible Blades Invisible Chest", "HintKey": "SHADOW_TEMPLE_INVISIBLE_BLADES_INVISIBLE_CHEST", "vanillaItem": "ARROWS_30", "categories": ["cShadowTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_FALLING_SPIKES_LOWER_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x05", "name": "Shadow Temple Falling Spikes Lower Chest", "HintKey": "SHADOW_TEMPLE_FALLING_SPIKES_LOWER_CHEST", "vanillaItem": "ARROWS_10", "categories": ["cShadowTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_FALLING_SPIKES_UPPER_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x06", "name": "Shadow Temple Falling Spikes Upper Chest", "HintKey": "SHADOW_TEMPLE_FALLING_SPIKES_UPPER_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cShadowTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_FALLING_SPIKES_SWITCH_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x04", "name": "Shadow Temple Falling Spikes Switch Chest", "HintKey": "SHADOW_TEMPLE_FALLING_SPIKES_SWITCH_CHEST", "vanillaItem": "SHADOW_TEMPLE_SMALL_KEY", "categories": ["cShadowTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_INVISIBLE_SPIKES_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x09", "name": "Shadow Temple Invisible Spikes Chest", "HintKey": "SHADOW_TEMPLE_INVISIBLE_SPIKES_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cShadowTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_WIND_HINT_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x15", "name": "Shadow Temple Wind Hint Chest", "HintKey": "SHADOW_TEMPLE_WIND_HINT_CHEST", "vanillaItem": "ARROWS_10", "categories": ["cShadowTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_AFTER_WIND_ENEMY_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x08", "name": "Shadow Temple After Wind Enemy Chest", "HintKey": "SHADOW_TEMPLE_AFTER_WIND_ENEMY_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cShadowTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_AFTER_WIND_HIDDEN_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x14", "name": "Shadow Temple After Wind Hidden Chest", "HintKey": "SHADOW_TEMPLE_AFTER_WIND_HIDDEN_CHEST", "vanillaItem": "SHADOW_TEMPLE_SMALL_KEY", "categories": ["cShadowTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_SPIKE_WALLS_LEFT_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x0A", "name": "Shadow Temple Spike Walls Left Chest", "HintKey": "SHADOW_TEMPLE_SPIKE_WALLS_LEFT_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cShadowTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_BOSS_KEY_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x0B", "name": "Shadow Temple Boss Key Chest", "HintKey": "SHADOW_TEMPLE_BOSS_KEY_CHEST", "vanillaItem": "SHADOW_TEMPLE_BOSS_KEY", "categories": ["cShadowTemple", "cVanillaBossKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_INVISIBLE_FLOORMASTER_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x0D", "name": "Shadow Temple Invisible Floormaster Chest", "HintKey": "SHADOW_TEMPLE_INVISIBLE_FLOORMASTER_CHEST", "vanillaItem": "SHADOW_TEMPLE_SMALL_KEY", "categories": ["cShadowTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_FREESTANDING_KEY": { "type": "Collectable", "scene": "0x07", "flag": "0x01", "name": "Shadow Temple Freestanding Key", "HintKey": "SHADOW_TEMPLE_FREESTANDING_KEY", "vanillaItem": "SHADOW_TEMPLE_SMALL_KEY", "categories": ["cShadowTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + // Shadow Temple MQ + "SHADOW_TEMPLE_MQ_COMPASS_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x01", "name": "Shadow Temple MQ Compass Chest", "HintKey": "SHADOW_TEMPLE_MQ_COMPASS_CHEST", "vanillaItem": "SHADOW_TEMPLE_COMPASS", "categories": ["cShadowTemple", "cVanillaCompass"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_HOVER_BOOTS_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x07", "name": "Shadow Temple MQ Hover Boots Chest", "HintKey": "SHADOW_TEMPLE_MQ_HOVER_BOOTS_CHEST", "vanillaItem": "HOVER_BOOTS", "categories": ["cShadowTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_EARLY_GIBDOS_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x03", "name": "Shadow Temple MQ Early Gibdos Chest", "HintKey": "SHADOW_TEMPLE_MQ_EARLY_GIBDOS_CHEST", "vanillaItem": "SHADOW_TEMPLE_SMALL_KEY", "categories": ["cShadowTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_MAP_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x02", "name": "Shadow Temple MQ Map Chest", "HintKey": "SHADOW_TEMPLE_MQ_MAP_CHEST", "vanillaItem": "SHADOW_TEMPLE_MAP", "categories": ["cShadowTemple", "cVanillaMap"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_BEAMOS_SILVER_RUPEES_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x0F", "name": "Shadow Temple MQ Beamos Silver Rupees Chest", "HintKey": "SHADOW_TEMPLE_MQ_BEAMOS_SILVER_RUPEES_CHEST", "vanillaItem": "ARROWS_5", "categories": ["cShadowTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_FALLING_SPIKES_SWITCH_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x04", "name": "Shadow Temple MQ Falling Spikes Switch Chest", "HintKey": "SHADOW_TEMPLE_MQ_FALLING_SPIKES_SWITCH_CHEST", "vanillaItem": "SHADOW_TEMPLE_SMALL_KEY", "categories": ["cShadowTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_FALLING_SPIKES_LOWER_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x05", "name": "Shadow Temple MQ Falling Spikes Lower Chest", "HintKey": "SHADOW_TEMPLE_MQ_FALLING_SPIKES_LOWER_CHEST", "vanillaItem": "ARROWS_10", "categories": ["cShadowTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_FALLING_SPIKES_UPPER_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x06", "name": "Shadow Temple MQ Falling Spikes Upper Chest", "HintKey": "SHADOW_TEMPLE_MQ_FALLING_SPIKES_UPPER_CHEST", "vanillaItem": "ARROWS_5", "categories": ["cShadowTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_INVISIBLE_SPIKES_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x09", "name": "Shadow Temple MQ Invisible Spikes Chest", "HintKey": "SHADOW_TEMPLE_MQ_INVISIBLE_SPIKES_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cShadowTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_BOSS_KEY_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x0B", "name": "Shadow Temple MQ Boss Key Chest", "HintKey": "SHADOW_TEMPLE_MQ_BOSS_KEY_CHEST", "vanillaItem": "SHADOW_TEMPLE_BOSS_KEY", "categories": ["cShadowTemple", "cVanillaBossKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_SPIKE_WALLS_LEFT_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x0A", "name": "Shadow Temple MQ Spike Walls Left Chest", "HintKey": "SHADOW_TEMPLE_MQ_SPIKE_WALLS_LEFT_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cShadowTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_STALFOS_ROOM_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x10", "name": "Shadow Temple MQ Stalfos Room Chest", "HintKey": "SHADOW_TEMPLE_MQ_STALFOS_ROOM_CHEST", "vanillaItem": "RED_RUPEE", "categories": ["cShadowTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_INVISIBLE_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x16", "name": "Shadow Temple MQ Invisible Blades Invisible Chest", "HintKey": "SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_INVISIBLE_CHEST", "vanillaItem": "SHADOW_TEMPLE_SMALL_KEY", "categories": ["cShadowTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_VISIBLE_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x0C", "name": "Shadow Temple MQ Invisible Blades Visible Chest", "HintKey": "SHADOW_TEMPLE_MQ_INVISIBLE_BLADES_VISIBLE_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cShadowTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_BOMB_FLOWER_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x0D", "name": "Shadow Temple MQ Bomb Flower Chest", "HintKey": "SHADOW_TEMPLE_MQ_BOMB_FLOWER_CHEST", "vanillaItem": "ARROWS_10", "categories": ["cShadowTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_WIND_HINT_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x15", "name": "Shadow Temple MQ Wind Hint Chest", "HintKey": "SHADOW_TEMPLE_MQ_WIND_HINT_CHEST", "vanillaItem": "SHADOW_TEMPLE_SMALL_KEY", "categories": ["cShadowTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_AFTER_WIND_HIDDEN_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x14", "name": "Shadow Temple MQ After Wind Hidden Chest", "HintKey": "SHADOW_TEMPLE_MQ_AFTER_WIND_HIDDEN_CHEST", "vanillaItem": "ARROWS_5", "categories": ["cShadowTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_AFTER_WIND_ENEMY_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x08", "name": "Shadow Temple MQ After Wind Enemy Chest", "HintKey": "SHADOW_TEMPLE_MQ_AFTER_WIND_ENEMY_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cShadowTemple"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_NEAR_SHIP_INVISIBLE_CHEST": { "type": "Chest", "scene": "0x07", "flag": "0x0E", "name": "Shadow Temple MQ Near Ship Invisible Chest", "HintKey": "SHADOW_TEMPLE_MQ_NEAR_SHIP_INVISIBLE_CHEST", "vanillaItem": "SHADOW_TEMPLE_SMALL_KEY", "categories": ["cShadowTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_FREESTANDING_KEY": { "type": "Collectable", "scene": "0x07", "flag": "0x06", "name": "Shadow Temple MQ Freestanding Key", "HintKey": "SHADOW_TEMPLE_MQ_FREESTANDING_KEY", "vanillaItem": "SHADOW_TEMPLE_SMALL_KEY", "categories": ["cShadowTemple", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + + // Bottom of the Well Vanilla + "BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST": { "type": "Chest", "scene": "0x08", "flag": "0x08", "name": "Bottom of the Well Front Left Fake Wall Chest", "HintKey": "BOTTOM_OF_THE_WELL_FRONT_LEFT_FAKE_WALL_CHEST", "vanillaItem": "BOTTOM_OF_THE_WELL_SMALL_KEY", "categories": ["cBottomOfTheWell", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST": { "type": "Chest", "scene": "0x08", "flag": "0x02", "name": "Bottom of the Well Front Center Bombable Chest", "HintKey": "BOTTOM_OF_THE_WELL_FRONT_CENTER_BOMBABLE_CHEST", "vanillaItem": "BOMBCHU_10", "categories": ["cBottomOfTheWell"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_RIGHT_BOTTOM_FAKE_WALL_CHEST": { "type": "Chest", "scene": "0x08", "flag": "0x05", "name": "Bottom of the Well Right Bottom Fake Wall Chest", "HintKey": "BOTTOM_OF_THE_WELL_RIGHT_BOTTOM_FAKE_WALL_CHEST", "vanillaItem": "BOTTOM_OF_THE_WELL_SMALL_KEY", "categories": ["cBottomOfTheWell", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_COMPASS_CHEST": { "type": "Chest", "scene": "0x08", "flag": "0x01", "name": "Bottom of the Well Compass Chest", "HintKey": "BOTTOM_OF_THE_WELL_COMPASS_CHEST", "vanillaItem": "BOTTOM_OF_THE_WELL_COMPASS", "categories": ["cBottomOfTheWell", "cVanillaCompass"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_CENTER_SKULLTULA_CHEST": { "type": "Chest", "scene": "0x08", "flag": "0x0E", "name": "Bottom of the Well Center Skulltula Chest", "HintKey": "BOTTOM_OF_THE_WELL_CENTER_SKULLTULA_CHEST", "vanillaItem": "DEKU_NUTS_5", "categories": ["cBottomOfTheWell"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_BACK_LEFT_BOMBABLE_CHEST": { "type": "Chest", "scene": "0x08", "flag": "0x04", "name": "Bottom of the Well Back Left Bombable Chest", "HintKey": "BOTTOM_OF_THE_WELL_BACK_LEFT_BOMBABLE_CHEST", "vanillaItem": "DEKU_NUTS_10", "categories": ["cBottomOfTheWell"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_LENS_OF_TRUTH_CHEST": { "type": "Chest", "scene": "0x08", "flag": "0x03", "name": "Bottom of the Well Lens of Truth Chest", "HintKey": "BOTTOM_OF_THE_WELL_LENS_OF_TRUTH_CHEST", "vanillaItem": "LENS_OF_TRUTH", "categories": ["cBottomOfTheWell", "cSongDungeonReward"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_INVISIBLE_CHEST": { "type": "Chest", "scene": "0x08", "flag": "0x14", "name": "Bottom of the Well Invisible Chest", "HintKey": "BOTTOM_OF_THE_WELL_INVISIBLE_CHEST", "vanillaItem": "HUGE_RUPEE", "categories": ["cBottomOfTheWell"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_UNDERWATER_FRONT_CHEST": { "type": "Chest", "scene": "0x08", "flag": "0x10", "name": "Bottom of the Well Underwater Front Chest", "HintKey": "BOTTOM_OF_THE_WELL_UNDERWATER_FRONT_CHEST", "vanillaItem": "BOMBS_10", "categories": ["cBottomOfTheWell"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_UNDERWATER_LEFT_CHEST": { "type": "Chest", "scene": "0x08", "flag": "0x09", "name": "Bottom of the Well Underwater Left Chest", "HintKey": "BOTTOM_OF_THE_WELL_UNDERWATER_LEFT_CHEST", "vanillaItem": "RECOVERY_HEART", "categories": ["cBottomOfTheWell"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_MAP_CHEST": { "type": "Chest", "scene": "0x08", "flag": "0x07", "name": "Bottom of the Well Map Chest", "HintKey": "BOTTOM_OF_THE_WELL_MAP_CHEST", "vanillaItem": "BOTTOM_OF_THE_WELL_MAP", "categories": ["cBottomOfTheWell", "cVanillaMap"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_FIRE_KEESE_CHEST": { "type": "Chest", "scene": "0x08", "flag": "0x0A", "name": "Bottom of the Well Fire Keese Chest", "HintKey": "BOTTOM_OF_THE_WELL_FIRE_KEESE_CHEST", "vanillaItem": "DEKU_SHIELD", "categories": ["cBottomOfTheWell"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_LIKE_LIKE_CHEST": { "type": "Chest", "scene": "0x08", "flag": "0x0C", "name": "Bottom of the Well Like Like Chest", "HintKey": "BOTTOM_OF_THE_WELL_LIKE_LIKE_CHEST", "vanillaItem": "HYLIAN_SHIELD", "categories": ["cBottomOfTheWell"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_FREESTANDING_KEY": { "type": "Collectable", "scene": "0x08", "flag": "0x01", "name": "Bottom of the Well Freestanding Key", "HintKey": "BOTTOM_OF_THE_WELL_FREESTANDING_KEY", "vanillaItem": "BOTTOM_OF_THE_WELL_SMALL_KEY", "categories": ["cBottomOfTheWell", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + // Bottom of the Well MQ + "BOTTOM_OF_THE_WELL_MQ_MAP_CHEST": { "type": "Chest", "scene": "0x08", "flag": "0x03", "name": "Bottom of the Well MQ Map Chest", "HintKey": "BOTTOM_OF_THE_WELL_MQ_MAP_CHEST", "vanillaItem": "BOTTOM_OF_THE_WELL_MAP", "categories": ["cBottomOfTheWell", "cVanillaMap"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_MQ_LENS_OF_TRUTH_CHEST": { "type": "Chest", "scene": "0x08", "flag": "0x01", "name": "Bottom of the Well MQ Lens of Truth Chest", "HintKey": "BOTTOM_OF_THE_WELL_MQ_LENS_OF_TRUTH_CHEST", "vanillaItem": "LENS_OF_TRUTH", "categories": ["cBottomOfTheWell", "cSongDungeonReward"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST": { "type": "Chest", "scene": "0x08", "flag": "0x02", "name": "Bottom of the Well MQ Compass Chest", "HintKey": "BOTTOM_OF_THE_WELL_MQ_COMPASS_CHEST", "vanillaItem": "BOTTOM_OF_THE_WELL_COMPASS", "categories": ["cBottomOfTheWell", "cVanillaCompass"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_FREESTANDING_KEY": { "type": "Collectable", "scene": "0x08", "flag": "0x02", "name": "Bottom of the Well MQ Dead Hand Freestanding Key", "HintKey": "BOTTOM_OF_THE_WELL_MQ_DEAD_HAND_FREESTANDING_KEY", "vanillaItem": "BOTTOM_OF_THE_WELL_SMALL_KEY", "categories": ["cBottomOfTheWell", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY": { "type": "Collectable", "scene": "0x08", "flag": "0x01", "name": "Bottom of the Well MQ East Inner Room Freestanding Key","HintKey": "BOTTOM_OF_THE_WELL_MQ_EAST_INNER_ROOM_FREESTANDING_KEY", "vanillaItem": "BOTTOM_OF_THE_WELL_SMALL_KEY", "categories": ["cBottomOfTheWell", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + + // Ice Cavern Vanilla + "ICE_CAVERN_MAP_CHEST": { "type": "Chest", "scene": "0x09", "flag": "0x00", "name": "Ice Cavern Map Chest", "HintKey": "ICE_CAVERN_MAP_CHEST", "vanillaItem": "ICE_CAVERN_MAP", "categories": ["cIceCavern", "cVanillaMap"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_ICE_CAVERN"}, + "ICE_CAVERN_COMPASS_CHEST": { "type": "Chest", "scene": "0x09", "flag": "0x01", "name": "Ice Cavern Compass Chest", "HintKey": "ICE_CAVERN_COMPASS_CHEST", "vanillaItem": "ICE_CAVERN_COMPASS", "categories": ["cIceCavern", "cVanillaCompass"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_ICE_CAVERN"}, + "ICE_CAVERN_IRON_BOOTS_CHEST": { "type": "Chest", "scene": "0x09", "flag": "0x02", "name": "Ice Cavern Iron Boots Chest", "HintKey": "ICE_CAVERN_IRON_BOOTS_CHEST", "vanillaItem": "IRON_BOOTS", "categories": ["cIceCavern"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_ICE_CAVERN"}, + "ICE_CAVERN_FREESTANDING_POH": { "type": "Collectable", "scene": "0x09", "flag": "0x01", "name": "Ice Cavern Freestanding PoH", "HintKey": "ICE_CAVERN_FREESTANDING_POH", "vanillaItem": "PIECE_OF_HEART", "categories": ["cIceCavern"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_ICE_CAVERN"}, + // Ice Cavern MQ + "ICE_CAVERN_MQ_IRON_BOOTS_CHEST": { "type": "Chest", "scene": "0x09", "flag": "0x02", "name": "Ice Cavern MQ Iron Boots Chest", "HintKey": "ICE_CAVERN_MQ_IRON_BOOTS_CHEST", "vanillaItem": "IRON_BOOTS", "categories": ["cIceCavern"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_ICE_CAVERN"}, + "ICE_CAVERN_MQ_COMPASS_CHEST": { "type": "Chest", "scene": "0x09", "flag": "0x00", "name": "Ice Cavern MQ Compass Chest", "HintKey": "ICE_CAVERN_MQ_COMPASS_CHEST", "vanillaItem": "ICE_CAVERN_COMPASS", "categories": ["cIceCavern", "cVanillaCompass"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_ICE_CAVERN"}, + "ICE_CAVERN_MQ_MAP_CHEST": { "type": "Chest", "scene": "0x09", "flag": "0x01", "name": "Ice Cavern MQ Map Chest", "HintKey": "ICE_CAVERN_MQ_MAP_CHEST", "vanillaItem": "ICE_CAVERN_MAP", "categories": ["cIceCavern", "cVanillaMap"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_ICE_CAVERN"}, + "ICE_CAVERN_MQ_FREESTANDING_POH": { "type": "Collectable", "scene": "0x09", "flag": "0x01", "name": "Ice Cavern MQ Freestanding PoH", "HintKey": "ICE_CAVERN_MQ_FREESTANDING_POH", "vanillaItem": "PIECE_OF_HEART", "categories": ["cIceCavern"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_ICE_CAVERN"}, + + // Gerudo Training Ground Vanilla + "GERUDO_TRAINING_GROUNDS_LOBBY_LEFT_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x13", "name": "Gerudo Training Grounds Lobby Left Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_LOBBY_LEFT_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_LOBBY_RIGHT_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x07", "name": "Gerudo Training Grounds Lobby Right Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_LOBBY_RIGHT_CHEST", "vanillaItem": "ARROWS_10", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_STALFOS_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x00", "name": "Gerudo Training Grounds Stalfos Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_STALFOS_CHEST", "vanillaItem": "GERUDO_TRAINING_GROUNDS_SMALL_KEY", "categories": ["cGerudoTrainingGrounds", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_BEAMOS_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x01", "name": "Gerudo Training Grounds Beamos Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_BEAMOS_CHEST", "vanillaItem": "GERUDO_TRAINING_GROUNDS_SMALL_KEY", "categories": ["cGerudoTrainingGrounds", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_HIDDEN_CEILING_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x0B", "name": "Gerudo Training Grounds Hidden Ceiling Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_HIDDEN_CEILING_CHEST", "vanillaItem": "GERUDO_TRAINING_GROUNDS_SMALL_KEY", "categories": ["cGerudoTrainingGrounds", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_MAZE_PATH_FIRST_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x06", "name": "Gerudo Training Grounds Maze Path First Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_MAZE_PATH_FIRST_CHEST", "vanillaItem": "PURPLE_RUPEE", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_MAZE_PATH_SECOND_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x0A", "name": "Gerudo Training Grounds Maze Path Second Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_MAZE_PATH_SECOND_CHEST", "vanillaItem": "RED_RUPEE", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_MAZE_PATH_THIRD_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x09", "name": "Gerudo Training Grounds Maze Path Third Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_MAZE_PATH_THIRD_CHEST", "vanillaItem": "ARROWS_30", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_MAZE_PATH_FINAL_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x0C", "name": "Gerudo Training Grounds Maze Path Final Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_MAZE_PATH_FINAL_CHEST", "vanillaItem": "ICE_ARROWS", "categories": ["cGerudoTrainingGrounds", "cSongDungeonReward"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_MAZE_RIGHT_CENTRAL_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x05", "name": "Gerudo Training Grounds Maze Right Central Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_MAZE_RIGHT_CENTRAL_CHEST", "vanillaItem": "BOMBCHU_5", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_MAZE_RIGHT_SIDE_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x08", "name": "Gerudo Training Grounds Maze Right Side Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_MAZE_RIGHT_SIDE_CHEST", "vanillaItem": "ARROWS_30", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_UNDERWATER_SILVER_RUPEE_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x0D", "name": "Gerudo Training Grounds Underwater Silver Rupee Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_UNDERWATER_SILVER_RUPEE_CHEST", "vanillaItem": "GERUDO_TRAINING_GROUNDS_SMALL_KEY", "categories": ["cGerudoTrainingGrounds", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_HAMMER_ROOM_CLEAR_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x12", "name": "Gerudo Training Grounds Hammer Room Clear Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_HAMMER_ROOM_CLEAR_CHEST", "vanillaItem": "ARROWS_10", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_HAMMER_ROOM_SWITCH_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x10", "name": "Gerudo Training Grounds Hammer Room Switch Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_HAMMER_ROOM_SWITCH_CHEST", "vanillaItem": "GERUDO_TRAINING_GROUNDS_SMALL_KEY", "categories": ["cGerudoTrainingGrounds", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_EYE_STATUE_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x03", "name": "Gerudo Training Grounds Eye Statue Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_EYE_STATUE_CHEST", "vanillaItem": "GERUDO_TRAINING_GROUNDS_SMALL_KEY", "categories": ["cGerudoTrainingGrounds", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_NEAR_SCARECROW_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x04", "name": "Gerudo Training Grounds Near Scarecrow Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_NEAR_SCARECROW_CHEST", "vanillaItem": "GERUDO_TRAINING_GROUNDS_SMALL_KEY", "categories": ["cGerudoTrainingGrounds", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_BEFORE_HEAVY_BLOCK_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x11", "name": "Gerudo Training Grounds Before Heavy Block Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_BEFORE_HEAVY_BLOCK_CHEST", "vanillaItem": "ARROWS_30", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_FIRST_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x0F", "name": "Gerudo Training Grounds Heavy Block First Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_FIRST_CHEST", "vanillaItem": "HUGE_RUPEE", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_SECOND_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x0E", "name": "Gerudo Training Grounds Heavy Block Second Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_SECOND_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_THIRD_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x14", "name": "Gerudo Training Grounds Heavy Block Third Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_THIRD_CHEST", "vanillaItem": "GERUDO_TRAINING_GROUNDS_SMALL_KEY", "categories": ["cGerudoTrainingGrounds", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_FOURTH_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x02", "name": "Gerudo Training Grounds Heavy Block Fourth Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_HEAVY_BLOCK_FOURTH_CHEST", "vanillaItem": "ICE_TRAP", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_FREESTANDING_KEY": { "type": "Collectable", "scene": "0x0B", "flag": "0x01", "name": "Gerudo Training Grounds Freestanding Key", "HintKey": "GERUDO_TRAINING_GROUNDS_FREESTANDING_KEY", "vanillaItem": "GERUDO_TRAINING_GROUNDS_SMALL_KEY", "categories": ["cGerudoTrainingGrounds", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + // Gerudo Training Grounds MQ + "GERUDO_TRAINING_GROUNDS_MQ_LOBBY_RIGHT_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x07", "name": "Gerudo Training Grounds MQ Lobby Right Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_MQ_LOBBY_RIGHT_CHEST", "vanillaItem": "BOMBCHU_5", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_MQ_LOBBY_LEFT_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x13", "name": "Gerudo Training Grounds MQ Lobby Left Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_MQ_LOBBY_LEFT_CHEST", "vanillaItem": "ARROWS_10", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_MQ_FIRST_IRON_KNUCKLE_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x00", "name": "Gerudo Training Grounds MQ First Iron Knuckle Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_MQ_FIRST_IRON_KNUCKLE_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_MQ_BEFORE_HEAVY_BLOCK_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x11", "name": "Gerudo Training Grounds MQ Before Heavy Block Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_MQ_BEFORE_HEAVY_BLOCK_CHEST", "vanillaItem": "ARROWS_10", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_MQ_EYE_STATUE_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x03", "name": "Gerudo Training Grounds MQ Eye Statue Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_MQ_EYE_STATUE_CHEST", "vanillaItem": "BOMBCHU_10", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_MQ_FLAME_CIRCLE_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x0E", "name": "Gerudo Training Grounds MQ Flame Circle Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_MQ_FLAME_CIRCLE_CHEST", "vanillaItem": "GERUDO_TRAINING_GROUNDS_SMALL_KEY", "categories": ["cGerudoTrainingGrounds", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_MQ_SECOND_IRON_KNUCKLE_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x12", "name": "Gerudo Training Grounds MQ Second Iron Knuckle Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_MQ_SECOND_IRON_KNUCKLE_CHEST", "vanillaItem": "ARROWS_10", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_MQ_DINOLFOS_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x01", "name": "Gerudo Training Grounds MQ Dinolfos Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_MQ_DINOLFOS_CHEST", "vanillaItem": "GERUDO_TRAINING_GROUNDS_SMALL_KEY", "categories": ["cGerudoTrainingGrounds", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_MQ_ICE_ARROWS_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x04", "name": "Gerudo Training Grounds MQ Ice Arrows Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_MQ_ICE_ARROWS_CHEST", "vanillaItem": "ICE_ARROWS", "categories": ["cGerudoTrainingGrounds", "cSongDungeonReward"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_MQ_MAZE_RIGHT_CENTRAL_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x05", "name": "Gerudo Training Grounds MQ Maze Right Central Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_MQ_MAZE_RIGHT_CENTRAL_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_MQ_MAZE_PATH_FIRST_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x06", "name": "Gerudo Training Grounds MQ Maze Path First Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_MQ_MAZE_PATH_FIRST_CHEST", "vanillaItem": "GREEN_RUPEE", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_MQ_MAZE_RIGHT_SIDE_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x08", "name": "Gerudo Training Grounds MQ Maze Right Side Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_MQ_MAZE_RIGHT_SIDE_CHEST", "vanillaItem": "TREASURE_GAME_GREEN_RUPEE", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_MQ_MAZE_PATH_THIRD_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x09", "name": "Gerudo Training Grounds MQ Maze Path Third Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_MQ_MAZE_PATH_THIRD_CHEST", "vanillaItem": "TREASURE_GAME_GREEN_RUPEE", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_MQ_MAZE_PATH_SECOND_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x0A", "name": "Gerudo Training Grounds MQ Maze Path Second Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_MQ_MAZE_PATH_SECOND_CHEST", "vanillaItem": "RED_RUPEE", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_MQ_HIDDEN_CEILING_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x0B", "name": "Gerudo Training Grounds MQ Hidden Ceiling Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_MQ_HIDDEN_CEILING_CHEST", "vanillaItem": "PURPLE_RUPEE", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_MQ_UNDERWATER_SILVER_RUPEE_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x0D", "name": "Gerudo Training Grounds MQ Underwater Silver Rupee Chest","HintKey": "GERUDO_TRAINING_GROUNDS_MQ_UNDERWATER_SILVER_RUPEE_CHEST", "vanillaItem": "GERUDO_TRAINING_GROUNDS_SMALL_KEY", "categories": ["cGerudoTrainingGrounds", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + "GERUDO_TRAINING_GROUNDS_MQ_HEAVY_BLOCK_CHEST": { "type": "Chest", "scene": "0x0B", "flag": "0x02", "name": "Gerudo Training Grounds MQ Heavy Block Chest", "HintKey": "GERUDO_TRAINING_GROUNDS_MQ_HEAVY_BLOCK_CHEST", "vanillaItem": "PURPLE_RUPEE", "categories": ["cGerudoTrainingGrounds"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_TRAINING_GROUND"}, + + // Ganons Castle Shared + "GANONS_TOWER_BOSS_KEY_CHEST": { "type": "Chest", "scene": "0x0A", "flag": "0x0B", "name": "Ganon's Tower Boss Key Chest", "HintKey": "GANONS_TOWER_BOSS_KEY_CHEST", "vanillaItem": "GANONS_CASTLE_BOSS_KEY", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + // Ganons Castle Vanilla + "GANONS_CASTLE_FOREST_TRIAL_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x09", "name": "Ganon's Castle Forest Trial Chest", "HintKey": "GANONS_CASTLE_FOREST_TRIAL_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x07", "name": "Ganon's Castle Water Trial Left Chest", "HintKey": "GANONS_CASTLE_WATER_TRIAL_LEFT_CHEST", "vanillaItem": "ICE_TRAP", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_WATER_TRIAL_RIGHT_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x06", "name": "Ganon's Castle Water Trial Right Chest", "HintKey": "GANONS_CASTLE_WATER_TRIAL_RIGHT_CHEST", "vanillaItem": "RECOVERY_HEART", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_SHADOW_TRIAL_FRONT_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x08", "name": "Ganon's Castle Shadow Trial Front Chest", "HintKey": "GANONS_CASTLE_SHADOW_TRIAL_FRONT_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_SHADOW_TRIAL_GOLDEN_GAUNTLETS_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x05", "name": "Ganon's Castle Shadow Trial Golden Gauntlets Chest", "HintKey": "GANONS_CASTLE_SHADOW_TRIAL_GOLDEN_GAUNTLETS_CHEST", "vanillaItem": "PROGRESSIVE_STRENGTH", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x12", "name": "Ganon's Castle Spirit Trial Crystal Switch Chest", "HintKey": "GANONS_CASTLE_SPIRIT_TRIAL_CRYSTAL_SWITCH_CHEST", "vanillaItem": "BOMBCHU_20", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x14", "name": "Ganon's Castle Spirit Trial Invisible Chest", "HintKey": "GANONS_CASTLE_SPIRIT_TRIAL_INVISIBLE_CHEST", "vanillaItem": "ARROWS_10", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_LIGHT_TRIAL_FIRST_LEFT_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x0C", "name": "Ganon's Castle Light Trial First Left Chest", "HintKey": "GANONS_CASTLE_LIGHT_TRIAL_FIRST_LEFT_CHEST", "vanillaItem": "BLUE_RUPEE", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_LIGHT_TRIAL_SECOND_LEFT_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x0B", "name": "Ganon's Castle Light Trial Second Left Chest", "HintKey": "GANONS_CASTLE_LIGHT_TRIAL_SECOND_LEFT_CHEST", "vanillaItem": "ICE_TRAP", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_LIGHT_TRIAL_THIRD_LEFT_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x0D", "name": "Ganon's Castle Light Trial Third Left Chest", "HintKey": "GANONS_CASTLE_LIGHT_TRIAL_THIRD_LEFT_CHEST", "vanillaItem": "RECOVERY_HEART", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_LIGHT_TRIAL_FIRST_RIGHT_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x0E", "name": "Ganon's Castle Light Trial First Right Chest", "HintKey": "GANONS_CASTLE_LIGHT_TRIAL_FIRST_RIGHT_CHEST", "vanillaItem": "ICE_TRAP", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_LIGHT_TRIAL_SECOND_RIGHT_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x0A", "name": "Ganon's Castle Light Trial Second Right Chest", "HintKey": "GANONS_CASTLE_LIGHT_TRIAL_SECOND_RIGHT_CHEST", "vanillaItem": "ARROWS_30", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_LIGHT_TRIAL_THIRD_RIGHT_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x0F", "name": "Ganon's Castle Light Trial Third Right Chest", "HintKey": "GANONS_CASTLE_LIGHT_TRIAL_THIRD_RIGHT_CHEST", "vanillaItem": "ICE_TRAP", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_LIGHT_TRIAL_INVISIBLE_ENEMIES_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x10", "name": "Ganon's Castle Light Trial Invisible Enemies Chest", "HintKey": "GANONS_CASTLE_LIGHT_TRIAL_INVISIBLE_ENEMIES_CHEST", "vanillaItem": "GANONS_CASTLE_SMALL_KEY", "categories": ["cGanonsCastle", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_LIGHT_TRIAL_LULLABY_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x11", "name": "Ganon's Castle Light Trial Lullaby Chest", "HintKey": "GANONS_CASTLE_LIGHT_TRIAL_LULLABY_CHEST", "vanillaItem": "GANONS_CASTLE_SMALL_KEY", "categories": ["cGanonsCastle", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT": { "type": "Base", "scene": "0x0D", "flag": "0x37", "name": "Ganon's Castle Deku Scrub Center-Left", "HintKey": "GANONS_CASTLE_DEKU_SCRUB_CENTER_LEFT", "vanillaItem": "BOMBS_5", "categories": ["cGanonsCastle", "cDekuScrub"], "SpoilerCollectionCheck": "Scrub(0x0D, 0x06)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT": { "type": "Base", "scene": "0x0D", "flag": "0x33", "name": "Ganon's Castle Deku Scrub Center-Right", "HintKey": "GANONS_CASTLE_DEKU_SCRUB_CENTER_RIGHT", "vanillaItem": "ARROWS_30", "categories": ["cGanonsCastle", "cDekuScrub"], "SpoilerCollectionCheck": "Scrub(0x0D, 0x04)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_DEKU_SCRUB_RIGHT": { "type": "Base", "scene": "0x0D", "flag": "0x39", "name": "Ganon's Castle Deku Scrub Right", "HintKey": "GANONS_CASTLE_DEKU_SCRUB_RIGHT", "vanillaItem": "RED_POTION_REFILL", "categories": ["cGanonsCastle", "cDekuScrub"], "SpoilerCollectionCheck": "Scrub(0x0D, 0x08)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_DEKU_SCRUB_LEFT": { "type": "Base", "scene": "0x0D", "flag": "0x3A", "name": "Ganon's Castle Deku Scrub Left", "HintKey": "GANONS_CASTLE_DEKU_SCRUB_LEFT", "vanillaItem": "GREEN_POTION_REFILL", "categories": ["cGanonsCastle", "cDekuScrub"], "SpoilerCollectionCheck": "Scrub(0x0D, 0x09)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + // Ganons Castle MQ + "GANONS_CASTLE_MQ_WATER_TRIAL_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x01", "name": "Ganon's Castle MQ Water Trial Chest", "HintKey": "GANONS_CASTLE_MQ_WATER_TRIAL_CHEST", "vanillaItem": "RED_RUPEE", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_MQ_FOREST_TRIAL_EYE_SWITCH_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x02", "name": "Ganon's Castle MQ Forest Trial Eye Switch Chest", "HintKey": "GANONS_CASTLE_MQ_FOREST_TRIAL_EYE_SWITCH_CHEST", "vanillaItem": "ARROWS_10", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_MQ_FOREST_TRIAL_FROZEN_EYE_SWITCH_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x03", "name": "Ganon's Castle MQ Forest Trial Frozen Eye Switch Chest","HintKey": "GANONS_CASTLE_MQ_FOREST_TRIAL_FROZEN_EYE_SWITCH_CHEST", "vanillaItem": "BOMBS_5", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_MQ_LIGHT_TRIAL_LULLABY_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x04", "name": "Ganon's Castle MQ Light Trial Lullaby Chest", "HintKey": "GANONS_CASTLE_MQ_LIGHT_TRIAL_LULLABY_CHEST", "vanillaItem": "RECOVERY_HEART", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_MQ_SHADOW_TRIAL_BOMB_FLOWER_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x00", "name": "Ganon's Castle MQ Shadow Trial Bomb Flower Chest", "HintKey": "GANONS_CASTLE_MQ_SHADOW_TRIAL_BOMB_FLOWER_CHEST", "vanillaItem": "ARROWS_10", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_MQ_SHADOW_TRIAL_EYE_SWITCH_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x05", "name": "Ganon's Castle MQ Shadow Trial Eye Switch Chest", "HintKey": "GANONS_CASTLE_MQ_SHADOW_TRIAL_EYE_SWITCH_CHEST", "vanillaItem": "GANONS_CASTLE_SMALL_KEY", "categories": ["cGanonsCastle", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_MQ_SPIRIT_TRIAL_GOLDEN_GAUNTLETS_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x06", "name": "Ganon's Castle MQ Spirit Trial Golden Gauntlets Chest", "HintKey": "GANONS_CASTLE_MQ_SPIRIT_TRIAL_GOLDEN_GAUNTLETS_CHEST", "vanillaItem": "PROGRESSIVE_STRENGTH", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_RIGHT_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x07", "name": "Ganon's Castle MQ Spirit Trial Sun Back Right Chest", "HintKey": "GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_RIGHT_CHEST", "vanillaItem": "RECOVERY_HEART", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_LEFT_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x08", "name": "Ganon's Castle MQ Spirit Trial Sun Back Left Chest", "HintKey": "GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_BACK_LEFT_CHEST", "vanillaItem": "GANONS_CASTLE_SMALL_KEY", "categories": ["cGanonsCastle", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_FRONT_LEFT_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x09", "name": "Ganon's Castle MQ Spirit Trial Sun Front Left Chest", "HintKey": "GANONS_CASTLE_MQ_SPIRIT_TRIAL_SUN_FRONT_LEFT_CHEST", "vanillaItem": "RECOVERY_HEART", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x0A", "name": "Ganon's Castle MQ Spirit Trial First Chest", "HintKey": "GANONS_CASTLE_MQ_SPIRIT_TRIAL_FIRST_CHEST", "vanillaItem": "BOMBCHU_10", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_MQ_SPIRIT_TRIAL_INVISIBLE_CHEST": { "type": "Chest", "scene": "0x0D", "flag": "0x14", "name": "Ganon's Castle MQ Spirit Trial Invisible Chest", "HintKey": "GANONS_CASTLE_MQ_SPIRIT_TRIAL_INVISIBLE_CHEST", "vanillaItem": "ARROWS_10", "categories": ["cGanonsCastle"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY": { "type": "Collectable", "scene": "0x0D", "flag": "0x01", "name": "Ganon's Castle MQ Forest Trial Freestanding Key", "HintKey": "GANONS_CASTLE_MQ_FOREST_TRIAL_FREESTANDING_KEY", "vanillaItem": "GANONS_CASTLE_SMALL_KEY", "categories": ["cGanonsCastle", "cVanillaSmallKey"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT": { "type": "Base", "scene": "0x0D", "flag": "0x30", "name": "Ganon's Castle MQ Deku Scrub Right", "HintKey": "GANONS_CASTLE_MQ_DEKU_SCRUB_RIGHT", "vanillaItem": "DEKU_NUTS_5", "categories": ["cGanonsCastle", "cDekuScrub"], "SpoilerCollectionCheck": "Scrub(0x0D, 0x01)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT": { "type": "Base", "scene": "0x0D", "flag": "0x37", "name": "Ganon's Castle MQ Deku Scrub Center-Left", "HintKey": "GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_LEFT", "vanillaItem": "BOMBS_5", "categories": ["cGanonsCastle", "cDekuScrub"], "SpoilerCollectionCheck": "Scrub(0x0D, 0x06)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER": { "type": "Base", "scene": "0x0D", "flag": "0x33", "name": "Ganon's Castle MQ Deku Scrub Center", "HintKey": "GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER", "vanillaItem": "ARROWS_30", "categories": ["cGanonsCastle", "cDekuScrub"], "SpoilerCollectionCheck": "Scrub(0x0D, 0x04)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT": { "type": "Base", "scene": "0x0D", "flag": "0x39", "name": "Ganon's Castle MQ Deku Scrub Center-Right", "HintKey": "GANONS_CASTLE_MQ_DEKU_SCRUB_CENTER_RIGHT", "vanillaItem": "RED_POTION_REFILL", "categories": ["cGanonsCastle", "cDekuScrub"], "SpoilerCollectionCheck": "Scrub(0x0D, 0x08)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT": { "type": "Base", "scene": "0x0D", "flag": "0x3A", "name": "Ganon's Castle MQ Deku Scrub Left", "HintKey": "GANONS_CASTLE_MQ_DEKU_SCRUB_LEFT", "vanillaItem": "GREEN_POTION_REFILL", "categories": ["cGanonsCastle", "cDekuScrub"], "SpoilerCollectionCheck": "Scrub(0x0D, 0x09)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + + /*------------------------------- + --- GOLD SKULLTULA TOKENS --- + -------------------------------*/ + + // Dungeons + "DEKU_TREE_GS_BASEMENT_BACK_ROOM": { "type": "GSToken", "scene": "0x00", "flag": "0x01", "name": "Deku Tree GS Basement Back Room", "HintKey": "DEKU_TREE_GS_BASEMENT_BACK_ROOM", "categories": ["cDekuTree", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + "DEKU_TREE_GS_BASEMENT_GATE": { "type": "GSToken", "scene": "0x00", "flag": "0x02", "name": "Deku Tree GS Basement Gate", "HintKey": "DEKU_TREE_GS_BASEMENT_GATE", "categories": ["cDekuTree", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + "DEKU_TREE_GS_BASEMENT_VINES": { "type": "GSToken", "scene": "0x00", "flag": "0x04", "name": "Deku Tree GS Basement Vines", "HintKey": "DEKU_TREE_GS_BASEMENT_VINES", "categories": ["cDekuTree", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + "DEKU_TREE_GS_COMPASS_ROOM": { "type": "GSToken", "scene": "0x00", "flag": "0x08", "name": "Deku Tree GS Compass Room", "HintKey": "DEKU_TREE_GS_COMPASS_ROOM", "categories": ["cDekuTree", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + + "DEKU_TREE_MQ_GS_LOBBY": { "type": "GSToken", "scene": "0x00", "flag": "0x02", "name": "Deku Tree MQ GS Lobby", "HintKey": "DEKU_TREE_MQ_GS_LOBBY", "categories": ["cDekuTree", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + "DEKU_TREE_MQ_GS_COMPASS_ROOM": { "type": "GSToken", "scene": "0x00", "flag": "0x08", "name": "Deku Tree MQ GS Compass Room", "HintKey": "DEKU_TREE_MQ_GS_COMPASS_ROOM", "categories": ["cDekuTree", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + "DEKU_TREE_MQ_GS_BASEMENT_GRAVES_ROOM": { "type": "GSToken", "scene": "0x00", "flag": "0x04", "name": "Deku Tree MQ GS Basement Graves Room", "HintKey": "DEKU_TREE_MQ_GS_BASEMENT_GRAVES_ROOM", "categories": ["cDekuTree", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + "DEKU_TREE_MQ_GS_BASEMENT_BACK_ROOM": { "type": "GSToken", "scene": "0x00", "flag": "0x01", "name": "Deku Tree MQ GS Basement Back Room", "HintKey": "DEKU_TREE_MQ_GS_BASEMENT_BACK_ROOM", "categories": ["cDekuTree", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + + "DODONGOS_CAVERN_GS_VINES_ABOVE_STAIRS": { "type": "GSToken", "scene": "0x01", "flag": "0x01", "name": "Dodongos Cavern GS Vines Above Stairs", "HintKey": "DODONGOS_CAVERN_GS_VINES_ABOVE_STAIRS", "categories": ["cDodongosCavern", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_GS_SCARECROW": { "type": "GSToken", "scene": "0x01", "flag": "0x02", "name": "Dodongos Cavern GS Scarecrow", "HintKey": "DODONGOS_CAVERN_GS_SCARECROW", "categories": ["cDodongosCavern", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_GS_ALCOVE_ABOVE_STAIRS": { "type": "GSToken", "scene": "0x01", "flag": "0x04", "name": "Dodongos Cavern GS Alcove Above Stairs", "HintKey": "DODONGOS_CAVERN_GS_ALCOVE_ABOVE_STAIRS", "categories": ["cDodongosCavern", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_GS_BACK_ROOM": { "type": "GSToken", "scene": "0x01", "flag": "0x08", "name": "Dodongos Cavern GS Back Room", "HintKey": "DODONGOS_CAVERN_GS_BACK_ROOM", "categories": ["cDodongosCavern", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_GS_SIDE_ROOM_NEAR_LOWER_LIZALFOS": { "type": "GSToken", "scene": "0x01", "flag": "0x10", "name": "Dodongos Cavern GS Side Room Near Lower Lizalfos", "HintKey": "DODONGOS_CAVERN_GS_SIDE_ROOM_NEAR_LOWER_LIZALFOS", "categories": ["cDodongosCavern", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + + "DODONGOS_CAVERN_MQ_GS_SCRUB_ROOM": { "type": "GSToken", "scene": "0x01", "flag": "0x02", "name": "Dodongos Cavern MQ GS Scrub Room", "HintKey": "DODONGOS_CAVERN_MQ_GS_SCRUB_ROOM", "categories": ["cDodongosCavern", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_MQ_GS_SONG_OF_TIME_BLOCK_ROOM": { "type": "GSToken", "scene": "0x01", "flag": "0x08", "name": "Dodongos Cavern MQ GS Song of Time Block Room", "HintKey": "DODONGOS_CAVERN_MQ_GS_SONG_OF_TIME_BLOCK_ROOM", "categories": ["cDodongosCavern", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_MQ_GS_LIZALFOS_ROOM": { "type": "GSToken", "scene": "0x01", "flag": "0x04", "name": "Dodongos Cavern MQ GS Lizalfos Room", "HintKey": "DODONGOS_CAVERN_MQ_GS_LIZALFOS_ROOM", "categories": ["cDodongosCavern", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_MQ_GS_LARVAE_ROOM": { "type": "GSToken", "scene": "0x01", "flag": "0x10", "name": "Dodongos Cavern MQ GS Larvae Room", "HintKey": "DODONGOS_CAVERN_MQ_GS_LARVAE_ROOM", "categories": ["cDodongosCavern", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "DODONGOS_CAVERN_MQ_GS_BACK_AREA": { "type": "GSToken", "scene": "0x01", "flag": "0x01", "name": "Dodongos Cavern MQ GS Back Room", "HintKey": "DODONGOS_CAVERN_MQ_GS_BACK_AREA", "categories": ["cDodongosCavern", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + + "JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_LOWER": { "type": "GSToken", "scene": "0x02", "flag": "0x01", "name": "Jabu Jabus Belly GS Lobby Basement Lower", "HintKey": "JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_LOWER", "categories": ["cJabuJabusBelly", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER": { "type": "GSToken", "scene": "0x02", "flag": "0x02", "name": "Jabu Jabus Belly GS Lobby Basement Upper", "HintKey": "JABU_JABUS_BELLY_GS_LOBBY_BASEMENT_UPPER", "categories": ["cJabuJabusBelly", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "JABU_JABUS_BELLY_GS_NEAR_BOSS": { "type": "GSToken", "scene": "0x02", "flag": "0x04", "name": "Jabu Jabus Belly GS Near Boss", "HintKey": "JABU_JABUS_BELLY_GS_NEAR_BOSS", "categories": ["cJabuJabusBelly", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM": { "type": "GSToken", "scene": "0x02", "flag": "0x08", "name": "Jabu Jabus Belly GS Water Switch Room", "HintKey": "JABU_JABUS_BELLY_GS_WATER_SWITCH_ROOM", "categories": ["cJabuJabusBelly", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + + "JABU_JABUS_BELLY_MQ_GS_TAILPASARAN_ROOM": { "type": "GSToken", "scene": "0x02", "flag": "0x04", "name": "Jabu Jabus Belly MQ GS Tail Parasan Room", "HintKey": "JABU_JABUS_BELLY_MQ_GS_TAILPASARAN_ROOM", "categories": ["cJabuJabusBelly", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "JABU_JABUS_BELLY_MQ_GS_INVISIBLE_ENEMIES_ROOM": { "type": "GSToken", "scene": "0x02", "flag": "0x08", "name": "Jabu Jabus Belly MQ GS Invisible Enemies Room", "HintKey": "JABU_JABUS_BELLY_MQ_GS_INVISIBLE_ENEMIES_ROOM", "categories": ["cJabuJabusBelly", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "JABU_JABUS_BELLY_MQ_GS_BOOMERANG_CHEST_ROOM": { "type": "GSToken", "scene": "0x02", "flag": "0x01", "name": "Jabu Jabus Belly MQ GS Boomerang Chest Room", "HintKey": "JABU_JABUS_BELLY_MQ_GS_BOOMERANG_CHEST_ROOM", "categories": ["cJabuJabusBelly", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "JABU_JABUS_BELLY_MQ_GS_NEAR_BOSS": { "type": "GSToken", "scene": "0x02", "flag": "0x02", "name": "Jabu Jabus Belly MQ GS Near Boss", "HintKey": "JABU_JABUS_BELLY_MQ_GS_NEAR_BOSS", "categories": ["cJabuJabusBelly", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + + "FOREST_TEMPLE_GS_RAISED_ISLAND_COURTYARD": { "type": "GSToken", "scene": "0x03", "flag": "0x01", "name": "Forest Temple GS Raised Island Courtyard", "HintKey": "FOREST_TEMPLE_GS_RAISED_ISLAND_COURTYARD", "categories": ["cForestTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_GS_FIRST_ROOM": { "type": "GSToken", "scene": "0x03", "flag": "0x02", "name": "Forest Temple GS First Room", "HintKey": "FOREST_TEMPLE_GS_FIRST_ROOM", "categories": ["cForestTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_GS_LEVEL_ISLAND_COURTYARD": { "type": "GSToken", "scene": "0x03", "flag": "0x04", "name": "Forest Temple GS Level Island Courtyard", "HintKey": "FOREST_TEMPLE_GS_LEVEL_ISLAND_COURTYARD", "categories": ["cForestTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_GS_LOBBY": { "type": "GSToken", "scene": "0x03", "flag": "0x08", "name": "Forest Temple GS Lobby", "HintKey": "FOREST_TEMPLE_GS_LOBBY", "categories": ["cForestTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_GS_BASEMENT": { "type": "GSToken", "scene": "0x03", "flag": "0x10", "name": "Forest Temple GS Basement", "HintKey": "FOREST_TEMPLE_GS_BASEMENT", "categories": ["cForestTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + + "FOREST_TEMPLE_MQ_GS_FIRST_HALLWAY": { "type": "GSToken", "scene": "0x03", "flag": "0x02", "name": "Forest Temple MQ GS First Hallway", "HintKey": "FOREST_TEMPLE_MQ_GS_FIRST_HALLWAY", "categories": ["cForestTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_MQ_GS_BLOCK_PUSH_ROOM": { "type": "GSToken", "scene": "0x03", "flag": "0x10", "name": "Forest Temple MQ GS Block Push Room", "HintKey": "FOREST_TEMPLE_MQ_GS_BLOCK_PUSH_ROOM", "categories": ["cForestTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD": { "type": "GSToken", "scene": "0x03", "flag": "0x01", "name": "Forest Temple MQ GS Raised Island Courtyard", "HintKey": "FOREST_TEMPLE_MQ_GS_RAISED_ISLAND_COURTYARD", "categories": ["cForestTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_MQ_GS_LEVEL_ISLAND_COURTYARD": { "type": "GSToken", "scene": "0x03", "flag": "0x04", "name": "Forest Temple MQ GS Level Island Courtyard", "HintKey": "FOREST_TEMPLE_MQ_GS_LEVEL_ISLAND_COURTYARD", "categories": ["cForestTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FOREST_TEMPLE_MQ_GS_WELL": { "type": "GSToken", "scene": "0x03", "flag": "0x08", "name": "Forest Temple MQ GS Well", "HintKey": "FOREST_TEMPLE_MQ_GS_WELL", "categories": ["cForestTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + + "FIRE_TEMPLE_GS_SONG_OF_TIME_ROOM": { "type": "GSToken", "scene": "0x04", "flag": "0x01", "name": "Fire Temple GS Song of Time Room", "HintKey": "FIRE_TEMPLE_GS_SONG_OF_TIME_ROOM", "categories": ["cFireTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_GS_BOSS_KEY_LOOP": { "type": "GSToken", "scene": "0x04", "flag": "0x02", "name": "Fire Temple GS Boss Key Loop", "HintKey": "FIRE_TEMPLE_GS_BOSS_KEY_LOOP", "categories": ["cFireTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_GS_BOULDER_MAZE": { "type": "GSToken", "scene": "0x04", "flag": "0x04", "name": "Fire Temple GS Boulder Maze", "HintKey": "FIRE_TEMPLE_GS_BOULDER_MAZE", "categories": ["cFireTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_GS_SCARECROW_TOP": { "type": "GSToken", "scene": "0x04", "flag": "0x08", "name": "Fire Temple GS Scarecrow Top", "HintKey": "FIRE_TEMPLE_GS_SCARECROW_TOP", "categories": ["cFireTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_GS_SCARECROW_CLIMB": { "type": "GSToken", "scene": "0x04", "flag": "0x10", "name": "Fire Temple GS Scarecrow Climb", "HintKey": "FIRE_TEMPLE_GS_SCARECROW_CLIMB", "categories": ["cFireTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + + "FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_WALL_MAZE": { "type": "GSToken", "scene": "0x04", "flag": "0x02", "name": "Fire Temple MQ GS Above Fire Wall Maze", "HintKey": "FIRE_TEMPLE_MQ_GS_ABOVE_FIRE_WALL_MAZE", "categories": ["cFireTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_CENTER": { "type": "GSToken", "scene": "0x04", "flag": "0x08", "name": "Fire Temple MQ GS Fire Wall Maze Center", "HintKey": "FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_CENTER", "categories": ["cFireTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_MQ_GS_BIG_LAVA_ROOM_OPEN_DOOR": { "type": "GSToken", "scene": "0x04", "flag": "0x01", "name": "Fire Temple MQ GS Big Lava Room Open Door", "HintKey": "FIRE_TEMPLE_MQ_GS_BIG_LAVA_ROOM_OPEN_DOOR", "categories": ["cFireTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_SIDE_ROOM": { "type": "GSToken", "scene": "0x04", "flag": "0x10", "name": "Fire Temple MQ GS Fire Wall Maze Side Room", "HintKey": "FIRE_TEMPLE_MQ_GS_FIRE_WALL_MAZE_SIDE_ROOM", "categories": ["cFireTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "FIRE_TEMPLE_MQ_GS_SKULL_ON_FIRE": { "type": "GSToken", "scene": "0x04", "flag": "0x04", "name": "Fire Temple MQ GS Skull on Fire", "HintKey": "FIRE_TEMPLE_MQ_GS_SKULL_ON_FIRE", "categories": ["cFireTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + + "WATER_TEMPLE_GS_BEHIND_GATE": { "type": "GSToken", "scene": "0x05", "flag": "0x01", "name": "Water Temple GS Behind Gate", "HintKey": "WATER_TEMPLE_GS_BEHIND_GATE", "categories": ["cWaterTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "WATER_TEMPLE_GS_FALLING_PLATFORM_ROOM": { "type": "GSToken", "scene": "0x05", "flag": "0x02", "name": "Water Temple GS Falling Platform Room", "HintKey": "WATER_TEMPLE_GS_FALLING_PLATFORM_ROOM", "categories": ["cWaterTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "WATER_TEMPLE_GS_CENTRAL_PILLAR": { "type": "GSToken", "scene": "0x05", "flag": "0x04", "name": "Water Temple GS Central Pillar", "HintKey": "WATER_TEMPLE_GS_CENTRAL_PILLAR", "categories": ["cWaterTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "WATER_TEMPLE_GS_NEAR_BOSS_KEY_CHEST": { "type": "GSToken", "scene": "0x05", "flag": "0x08", "name": "Water Temple GS Near Boss Key Chest", "HintKey": "WATER_TEMPLE_GS_NEAR_BOSS_KEY_CHEST", "categories": ["cWaterTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "WATER_TEMPLE_GS_RIVER": { "type": "GSToken", "scene": "0x05", "flag": "0x10", "name": "Water Temple GS River", "HintKey": "WATER_TEMPLE_GS_RIVER", "categories": ["cWaterTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + + "WATER_TEMPLE_MQ_GS_BEFORE_UPPER_WATER_SWITCH": { "type": "GSToken", "scene": "0x05", "flag": "0x04", "name": "Water Temple MQ GS Before Upper Water Switch", "HintKey": "WATER_TEMPLE_MQ_GS_BEFORE_UPPER_WATER_SWITCH", "categories": ["cWaterTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "WATER_TEMPLE_MQ_GS_FREESTANDING_KEY_AREA": { "type": "GSToken", "scene": "0x05", "flag": "0x08", "name": "Water Temple MQ GS Freestanding Key Area", "HintKey": "WATER_TEMPLE_MQ_GS_FREESTANDING_KEY_AREA", "categories": ["cWaterTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "WATER_TEMPLE_MQ_GS_LIZALFOS_HALLWAY": { "type": "GSToken", "scene": "0x05", "flag": "0x01", "name": "Water Temple MQ GS Lizalfos Hallway", "HintKey": "WATER_TEMPLE_MQ_GS_LIZALFOS_HALLWAY", "categories": ["cWaterTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "WATER_TEMPLE_MQ_GS_RIVER": { "type": "GSToken", "scene": "0x05", "flag": "0x02", "name": "Water Temple MQ GS River", "HintKey": "WATER_TEMPLE_MQ_GS_RIVER", "categories": ["cWaterTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "WATER_TEMPLE_MQ_GS_TRIPLE_WALL_TORCH": { "type": "GSToken", "scene": "0x05", "flag": "0x10", "name": "Water Temple MQ GS Triple Wall Torch", "HintKey": "WATER_TEMPLE_MQ_GS_TRIPLE_WALL_TORCH", "categories": ["cWaterTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + + "SPIRIT_TEMPLE_GS_HALL_AFTER_SUN_BLOCK_ROOM": { "type": "GSToken", "scene": "0x06", "flag": "0x01", "name": "Spirit Temple GS Hall After Sun Block Room", "HintKey": "SPIRIT_TEMPLE_GS_HALL_AFTER_SUN_BLOCK_ROOM", "categories": ["cSpiritTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_GS_BOULDER_ROOM": { "type": "GSToken", "scene": "0x06", "flag": "0x02", "name": "Spirit Temple GS Boulder Room", "HintKey": "SPIRIT_TEMPLE_GS_BOULDER_ROOM", "categories": ["cSpiritTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_GS_LOBBY": { "type": "GSToken", "scene": "0x06", "flag": "0x04", "name": "Spirit Temple GS Lobby", "HintKey": "SPIRIT_TEMPLE_GS_LOBBY", "categories": ["cSpiritTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_GS_SUN_ON_FLOOR_ROOM": { "type": "GSToken", "scene": "0x06", "flag": "0x08", "name": "Spirit Temple GS Sun on Floor Room", "HintKey": "SPIRIT_TEMPLE_GS_SUN_ON_FLOOR_ROOM", "categories": ["cSpiritTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_GS_METAL_FENCE": { "type": "GSToken", "scene": "0x06", "flag": "0x10", "name": "Spirit Temple GS Metal Fence", "HintKey": "SPIRIT_TEMPLE_GS_METAL_FENCE", "categories": ["cSpiritTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + + "SPIRIT_TEMPLE_MQ_GS_SYMPHONY_ROOM": { "type": "GSToken", "scene": "0x06", "flag": "0x08", "name": "Spirit Temple MQ GS Symphony Room", "HintKey": "SPIRIT_TEMPLE_MQ_GS_SYMPHONY_ROOM", "categories": ["cSpiritTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_GS_LEEVER_ROOM": { "type": "GSToken", "scene": "0x06", "flag": "0x02", "name": "Spirit Temple MQ GS Leever Room", "HintKey": "SPIRIT_TEMPLE_MQ_GS_LEEVER_ROOM", "categories": ["cSpiritTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_WEST": { "type": "GSToken", "scene": "0x06", "flag": "0x04", "name": "Spirit Temple MQ GS Nine Thrones Room West", "HintKey": "SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_WEST", "categories": ["cSpiritTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_NORTH": { "type": "GSToken", "scene": "0x06", "flag": "0x10", "name": "Spirit Temple MQ GS Nine Thrones Room North", "HintKey": "SPIRIT_TEMPLE_MQ_GS_NINE_THRONES_ROOM_NORTH", "categories": ["cSpiritTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SPIRIT_TEMPLE_MQ_GS_SUN_BLOCK_ROOM": { "type": "GSToken", "scene": "0x06", "flag": "0x01", "name": "Spirit Temple MQ GS Sun Block Room", "HintKey": "SPIRIT_TEMPLE_MQ_GS_SUN_BLOCK_ROOM", "categories": ["cSpiritTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + + "SHADOW_TEMPLE_GS_SINGLE_GIANT_POT": { "type": "GSToken", "scene": "0x07", "flag": "0x01", "name": "Shadow Temple GS Single Giant Pot", "HintKey": "SHADOW_TEMPLE_GS_SINGLE_GIANT_POT", "categories": ["cShadowTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_GS_FALLING_SPIKES_ROOM": { "type": "GSToken", "scene": "0x07", "flag": "0x02", "name": "Shadow Temple GS Falling Spikes Room", "HintKey": "SHADOW_TEMPLE_GS_FALLING_SPIKES_ROOM", "categories": ["cShadowTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_GS_TRIPLE_GIANT_POT": { "type": "GSToken", "scene": "0x07", "flag": "0x04", "name": "Shadow Temple GS Triple Giant Pot", "HintKey": "SHADOW_TEMPLE_GS_TRIPLE_GIANT_POT", "categories": ["cShadowTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_GS_LIKE_LIKE_ROOM": { "type": "GSToken", "scene": "0x07", "flag": "0x08", "name": "Shadow Temple GS Like Like Room", "HintKey": "SHADOW_TEMPLE_GS_LIKE_LIKE_ROOM", "categories": ["cShadowTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_GS_NEAR_SHIP": { "type": "GSToken", "scene": "0x07", "flag": "0x10", "name": "Shadow Temple GS Near Ship", "HintKey": "SHADOW_TEMPLE_GS_NEAR_SHIP", "categories": ["cShadowTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + + "SHADOW_TEMPLE_MQ_GS_FALLING_SPIKES_ROOM": { "type": "GSToken", "scene": "0x07", "flag": "0x02", "name": "Shadow Temple MQ GS Falling Spikes Room", "HintKey": "SHADOW_TEMPLE_MQ_GS_FALLING_SPIKES_ROOM", "categories": ["cShadowTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_GS_WIND_HINT_ROOM": { "type": "GSToken", "scene": "0x07", "flag": "0x01", "name": "Shadow Temple MQ GS Wind Hint Room", "HintKey": "SHADOW_TEMPLE_MQ_GS_WIND_HINT_ROOM", "categories": ["cShadowTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_GS_AFTER_WIND": { "type": "GSToken", "scene": "0x07", "flag": "0x08", "name": "Shadow Temple MQ GS After Wind", "HintKey": "SHADOW_TEMPLE_MQ_GS_AFTER_WIND", "categories": ["cShadowTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_GS_AFTER_SHIP": { "type": "GSToken", "scene": "0x07", "flag": "0x10", "name": "Shadow Temple MQ GS After Ship", "HintKey": "SHADOW_TEMPLE_MQ_GS_AFTER_SHIP", "categories": ["cShadowTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "SHADOW_TEMPLE_MQ_GS_NEAR_BOSS": { "type": "GSToken", "scene": "0x07", "flag": "0x04", "name": "Shadow Temple MQ GS Near Boss", "HintKey": "SHADOW_TEMPLE_MQ_GS_NEAR_BOSS", "categories": ["cShadowTemple", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + + "BOTTOM_OF_THE_WELL_GS_LIKE_LIKE_CAGE": { "type": "GSToken", "scene": "0x08", "flag": "0x01", "name": "Bottom of the Well GS Like Like Cage", "HintKey": "BOTTOM_OF_THE_WELL_GS_LIKE_LIKE_CAGE", "categories": ["cBottomOfTheWell", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_GS_EAST_INNER_ROOM": { "type": "GSToken", "scene": "0x08", "flag": "0x02", "name": "Bottom of the Well GS East Inner Room", "HintKey": "BOTTOM_OF_THE_WELL_GS_EAST_INNER_ROOM", "categories": ["cBottomOfTheWell", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_GS_WEST_INNER_ROOM": { "type": "GSToken", "scene": "0x08", "flag": "0x04", "name": "Bottom of the Well GS West Inner Room", "HintKey": "BOTTOM_OF_THE_WELL_GS_WEST_INNER_ROOM", "categories": ["cBottomOfTheWell", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + + "BOTTOM_OF_THE_WELL_MQ_GS_BASEMENT": { "type": "GSToken", "scene": "0x08", "flag": "0x01", "name": "Bottom of the Well MQ GS Basement", "HintKey": "BOTTOM_OF_THE_WELL_MQ_GS_BASEMENT", "categories": ["cBottomOfTheWell", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_MQ_GS_COFFIN_ROOM": { "type": "GSToken", "scene": "0x08", "flag": "0x04", "name": "Bottom of the Well MQ GS Coffin Room", "HintKey": "BOTTOM_OF_THE_WELL_MQ_GS_COFFIN_ROOM", "categories": ["cBottomOfTheWell", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_MQ_GS_WEST_INNER_ROOM": { "type": "GSToken", "scene": "0x08", "flag": "0x02", "name": "Bottom of the Well MQ GS West Inner Room", "HintKey": "BOTTOM_OF_THE_WELL_MQ_GS_WEST_INNER_ROOM", "categories": ["cBottomOfTheWell", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + + "ICE_CAVERN_GS_PUSH_BLOCK_ROOM": { "type": "GSToken", "scene": "0x09", "flag": "0x01", "name": "Ice Cavern GS Push Block Room", "HintKey": "ICE_CAVERN_GS_PUSH_BLOCK_ROOM", "categories": ["cIceCavern", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_ICE_CAVERN"}, + "ICE_CAVERN_GS_SPINNING_SCYTHE_ROOM": { "type": "GSToken", "scene": "0x09", "flag": "0x02", "name": "Ice Cavern GS Spinning Scythe Room", "HintKey": "ICE_CAVERN_GS_SPINNING_SCYTHE_ROOM", "categories": ["cIceCavern", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_ICE_CAVERN"}, + "ICE_CAVERN_GS_HEART_PIECE_ROOM": { "type": "GSToken", "scene": "0x09", "flag": "0x04", "name": "Ice Cavern GS Heart Piece Room", "HintKey": "ICE_CAVERN_GS_HEART_PIECE_ROOM", "categories": ["cIceCavern", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_ICE_CAVERN"}, + + "ICE_CAVERN_MQ_GS_SCARECROW": { "type": "GSToken", "scene": "0x09", "flag": "0x01", "name": "Ice Cavern MQ GS Scarecrow", "HintKey": "ICE_CAVERN_MQ_GS_SCARECROW", "categories": ["cIceCavern", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_ICE_CAVERN"}, + "ICE_CAVERN_MQ_GS_ICE_BLOCK": { "type": "GSToken", "scene": "0x09", "flag": "0x04", "name": "Ice Cavern MQ GS Ice Block", "HintKey": "ICE_CAVERN_MQ_GS_ICE_BLOCK", "categories": ["cIceCavern", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_ICE_CAVERN"}, + "ICE_CAVERN_MQ_GS_RED_ICE": { "type": "GSToken", "scene": "0x09", "flag": "0x02", "name": "Ice Cavern MQ GS Red Ice", "HintKey": "ICE_CAVERN_MQ_GS_RED_ICE", "categories": ["cIceCavern", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_ICE_CAVERN"}, + + // Overworld + "KF_GS_BEAN_PATCH": { "type": "GSToken", "scene": "0x0C", "flag": "0x01", "name": "KF GS Bean Patch", "HintKey": "KF_GS_BEAN_PATCH", "categories": ["cKokiriForest", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_GS_KNOW_IT_ALL_HOUSE": { "type": "GSToken", "scene": "0x0C", "flag": "0x02", "name": "KF GS Know It All House", "HintKey": "KF_GS_KNOW_IT_ALL_HOUSE", "categories": ["cKokiriForest", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_GS_HOUSE_OF_TWINS": { "type": "GSToken", "scene": "0x0C", "flag": "0x04", "name": "KF GS House of Twins", "HintKey": "KF_GS_HOUSE_OF_TWINS", "categories": ["cKokiriForest", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + + "LW_GS_BEAN_PATCH_NEAR_BRIDGE": { "type": "GSToken", "scene": "0x0D", "flag": "0x01", "name": "LW GS Bean Patch Near Bridge", "HintKey": "LW_GS_BEAN_PATCH_NEAR_BRIDGE", "categories": ["cLostWoods", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "LW_GS_BEAN_PATCH_NEAR_THEATER": { "type": "GSToken", "scene": "0x0D", "flag": "0x02", "name": "LW GS Bean Patch Near Theater", "HintKey": "LW_GS_BEAN_PATCH_NEAR_THEATER", "categories": ["cLostWoods", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "LW_GS_ABOVE_THEATER": { "type": "GSToken", "scene": "0x0D", "flag": "0x04", "name": "LW GS Above Theater", "HintKey": "LW_GS_ABOVE_THEATER", "categories": ["cLostWoods", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "SFM_GS": { "type": "GSToken", "scene": "0x0D", "flag": "0x08", "name": "SFM GS", "HintKey": "SFM_GS", "categories": ["cSacredForestMeadow", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_SACRED_FOREST_MEADOW"}, + + "HF_GS_COW_GROTTO": { "type": "GSToken", "scene": "0x0A", "flag": "0x01", "name": "HF GS Cow Grotto", "HintKey": "HF_GS_COW_GROTTO", "categories": ["cHyruleField", "cSkulltula", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_HYRULE_FIELD"}, + "HF_GS_NEAR_KAK_GROTTO": { "type": "GSToken", "scene": "0x0A", "flag": "0x02", "name": "HF GS Near Kak Grotto", "HintKey": "HF_GS_NEAR_KAK_GROTTO", "categories": ["cHyruleField", "cSkulltula", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_HYRULE_FIELD"}, + + "LH_GS_BEAN_PATCH": { "type": "GSToken", "scene": "0x12", "flag": "0x01", "name": "LH GS Bean Patch", "HintKey": "LH_GS_BEAN_PATCH", "categories": ["cLakeHylia", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_LAKE_HYLIA"}, + "LH_GS_SMALL_ISLAND": { "type": "GSToken", "scene": "0x12", "flag": "0x02", "name": "LH GS Small Island", "HintKey": "LH_GS_SMALL_ISLAND", "categories": ["cLakeHylia", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_LAKE_HYLIA"}, + "LH_GS_LAB_WALL": { "type": "GSToken", "scene": "0x12", "flag": "0x04", "name": "LH GS Lab Wall", "HintKey": "LH_GS_LAB_WALL", "categories": ["cLakeHylia", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_LAKE_HYLIA"}, + "LH_GS_LAB_CRATE": { "type": "GSToken", "scene": "0x12", "flag": "0x08", "name": "LH GS Lab Crate", "HintKey": "LH_GS_LAB_CRATE", "categories": ["cLakeHylia", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_LAKE_HYLIA"}, + "LH_GS_TREE": { "type": "GSToken", "scene": "0x12", "flag": "0x10", "name": "LH GS Tree", "HintKey": "LH_GS_TREE", "categories": ["cLakeHylia", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_LAKE_HYLIA"}, + + "GV_GS_BEAN_PATCH": { "type": "GSToken", "scene": "0x13", "flag": "0x01", "name": "GV GS Bean Patch", "HintKey": "GV_GS_BEAN_PATCH", "categories": ["cGerudoValley", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GV_GS_SMALL_BRIDGE": { "type": "GSToken", "scene": "0x13", "flag": "0x02", "name": "GV GS Small Bridge", "HintKey": "GV_GS_SMALL_BRIDGE", "categories": ["cGerudoValley", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GV_GS_PILLAR": { "type": "GSToken", "scene": "0x13", "flag": "0x04", "name": "GV GS Pillar", "HintKey": "GV_GS_PILLAR", "categories": ["cGerudoValley", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GV_GS_BEHIND_TENT": { "type": "GSToken", "scene": "0x13", "flag": "0x08", "name": "GV GS Behind Tent", "HintKey": "GV_GS_BEHIND_TENT", "categories": ["cGerudoValley", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + + "GF_GS_ARCHERY_RANGE": { "type": "GSToken", "scene": "0x14", "flag": "0x01", "name": "GF GS Archery Range", "HintKey": "GF_GS_ARCHERY_RANGE", "categories": ["cGerudoFortress", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GF_GS_TOP_FLOOR": { "type": "GSToken", "scene": "0x14", "flag": "0x02", "name": "GF GS Top Floor", "HintKey": "GF_GS_TOP_FLOOR", "categories": ["cGerudoFortress", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + + "WASTELAND_GS": { "type": "GSToken", "scene": "0x15", "flag": "0x02", "name": "Wasteland GS", "HintKey": "WASTELAND_GS", "categories": ["cHauntedWasteland", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_HAUNTED_WASTELAND"}, + "COLOSSUS_GS_BEAN_PATCH": { "type": "GSToken", "scene": "0x15", "flag": "0x01", "name": "Colossus GS Bean Patch", "HintKey": "COLOSSUS_GS_BEAN_PATCH", "categories": ["cDesertColossus", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_HAUNTED_WASTELAND"}, + "COLOSSUS_GS_HILL": { "type": "GSToken", "scene": "0x15", "flag": "0x04", "name": "Colossus GS Hill", "HintKey": "COLOSSUS_GS_HILL", "categories": ["cDesertColossus", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_HAUNTED_WASTELAND"}, + "COLOSSUS_GS_TREE": { "type": "GSToken", "scene": "0x15", "flag": "0x08", "name": "Colossus GS Tree", "HintKey": "COLOSSUS_GS_TREE", "categories": ["cDesertColossus", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_HAUNTED_WASTELAND"}, + + "OGC_GS": { "type": "GSToken", "scene": "0x0E", "flag": "0x01", "name": "OGC GS", "HintKey": "OGC_GS", "categories": ["cOutsideGanonsCastle", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + "HC_GS_STORMS_GROTTO": { "type": "GSToken", "scene": "0x0E", "flag": "0x02", "name": "HC GS Storms Grotto", "HintKey": "HC_GS_STORMS_GROTTO", "categories": ["cHyruleCastle", "cSkulltula", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_HYRULE_CASTLE"}, + "HC_GS_TREE": { "type": "GSToken", "scene": "0x0E", "flag": "0x04", "name": "HC GS Tree", "HintKey": "HC_GS_TREE", "categories": ["cHyruleCastle", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_HYRULE_CASTLE"}, + "MARKET_GS_GUARD_HOUSE": { "type": "GSToken", "scene": "0x0E", "flag": "0x08", "name": "Market GS Guard House", "HintKey": "MARKET_GS_GUARD_HOUSE", "categories": ["cInnerMarket", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + + "KAK_GS_HOUSE_UNDER_CONSTRUCTION": { "type": "GSToken", "scene": "0x10", "flag": "0x08", "name": "Kak GS House Under Construction", "HintKey": "KAK_GS_HOUSE_UNDER_CONSTRUCTION", "categories": ["cKakarikoVillage", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_GS_SKULLTULA_HOUSE": { "type": "GSToken", "scene": "0x10", "flag": "0x10", "name": "Kak GS Skulltula House", "HintKey": "KAK_GS_SKULLTULA_HOUSE", "categories": ["cKakarikoVillage", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_GS_GUARDS_HOUSE": { "type": "GSToken", "scene": "0x10", "flag": "0x02", "name": "Kak GS Guards House", "HintKey": "KAK_GS_GUARDS_HOUSE", "categories": ["cKakarikoVillage", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_GS_TREE": { "type": "GSToken", "scene": "0x10", "flag": "0x20", "name": "Kak GS Tree", "HintKey": "KAK_GS_TREE", "categories": ["cKakarikoVillage", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_GS_WATCHTOWER": { "type": "GSToken", "scene": "0x10", "flag": "0x04", "name": "Kak GS Watchtower", "HintKey": "KAK_GS_WATCHTOWER", "categories": ["cKakarikoVillage", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_GS_ABOVE_IMPAS_HOUSE": { "type": "GSToken", "scene": "0x10", "flag": "0x40", "name": "Kak GS Above Impas House", "HintKey": "KAK_GS_ABOVE_IMPAS_HOUSE", "categories": ["cKakarikoVillage", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + + "GRAVEYARD_GS_WALL": { "type": "GSToken", "scene": "0x10", "flag": "0x80", "name": "Graveyard GS Wall", "HintKey": "GRAVEYARD_GS_WALL", "categories": ["cGraveyard", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_GRAVEYARD"}, + "GRAVEYARD_GS_BEAN_PATCH": { "type": "GSToken", "scene": "0x10", "flag": "0x01", "name": "Graveyard GS Bean Patch", "HintKey": "GRAVEYARD_GS_BEAN_PATCH", "categories": ["cGraveyard", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_GRAVEYARD"}, + + "DMC_GS_BEAN_PATCH": { "type": "GSToken", "scene": "0x0F", "flag": "0x01", "name": "DMC GS Bean Patch", "HintKey": "DMC_GS_BEAN_PATCH", "categories": ["cDeathMountainCrater", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "DMC_GS_CRATE": { "type": "GSToken", "scene": "0x0F", "flag": "0x80", "name": "DMC GS Crate", "HintKey": "DMC_GS_CRATE", "categories": ["cDeathMountainCrater", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + + "DMT_GS_BEAN_PATCH": { "type": "GSToken", "scene": "0x0F", "flag": "0x02", "name": "DMT GS Bean Patch", "HintKey": "DMT_GS_BEAN_PATCH", "categories": ["cDeathMountainTrail", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_TRAIL"}, + "DMT_GS_NEAR_KAK": { "type": "GSToken", "scene": "0x0F", "flag": "0x04", "name": "DMT GS Near Kak", "HintKey": "DMT_GS_NEAR_KAK", "categories": ["cDeathMountainTrail", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_TRAIL"}, + "DMT_GS_ABOVE_DODONGOS_CAVERN": { "type": "GSToken", "scene": "0x0F", "flag": "0x08", "name": "DMT GS Above Dodongos Cavern", "HintKey": "DMT_GS_ABOVE_DODONGOS_CAVERN", "categories": ["cDeathMountainTrail", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_TRAIL"}, + "DMT_GS_FALLING_ROCKS_PATH": { "type": "GSToken", "scene": "0x0F", "flag": "0x10", "name": "DMT GS Falling Rocks Path", "HintKey": "DMT_GS_FALLING_ROCKS_PATH", "categories": ["cDeathMountainTrail", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_TRAIL"}, + + "GC_GS_CENTER_PLATFORM": { "type": "GSToken", "scene": "0x0F", "flag": "0x20", "name": "GC GS Center Platform", "HintKey": "GC_GS_CENTER_PLATFORM", "categories": ["cGoronCity", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_GORON_CITY"}, + "GC_GS_BOULDER_MAZE": { "type": "GSToken", "scene": "0x0F", "flag": "0x40", "name": "GC GS Boulder Maze", "HintKey": "GC_GS_BOULDER_MAZE", "categories": ["cGoronCity", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_GORON_CITY"}, + + "ZR_GS_LADDER": { "type": "GSToken", "scene": "0x11", "flag": "0x01", "name": "ZR GS Ladder", "HintKey": "ZR_GS_LADDER", "categories": ["cZorasRiver", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_RIVER"}, + "ZR_GS_TREE": { "type": "GSToken", "scene": "0x11", "flag": "0x02", "name": "ZR GS Tree", "HintKey": "ZR_GS_TREE", "categories": ["cZorasRiver", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_RIVER"}, + "ZR_GS_ABOVE_BRIDGE": { "type": "GSToken", "scene": "0x11", "flag": "0x08", "name": "ZR GS Above Bridge", "HintKey": "ZR_GS_ABOVE_BRIDGE", "categories": ["cZorasRiver", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_RIVER"}, + "ZR_GS_NEAR_RAISED_GROTTOS": { "type": "GSToken", "scene": "0x11", "flag": "0x10", "name": "ZR GS Near Raised Grottos", "HintKey": "ZR_GS_NEAR_RAISED_GROTTOS", "categories": ["cZorasRiver", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_RIVER"}, + + "ZD_GS_FROZEN_WATERFALL": { "type": "GSToken", "scene": "0x11", "flag": "0x40", "name": "ZD GS Frozen Waterfall", "HintKey": "ZD_GS_FROZEN_WATERFALL", "categories": ["cZorasDomain", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_DOMAIN"}, + "ZF_GS_ABOVE_THE_LOG": { "type": "GSToken", "scene": "0x11", "flag": "0x04", "name": "ZF GS Above The Log", "HintKey": "ZF_GS_ABOVE_THE_LOG", "categories": ["cZorasFountain", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + "ZF_GS_HIDDEN_CAVE": { "type": "GSToken", "scene": "0x11", "flag": "0x20", "name": "ZF GS Hidden Cave", "HintKey": "ZF_GS_HIDDEN_CAVE", "categories": ["cZorasFountain", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + "ZF_GS_TREE": { "type": "GSToken", "scene": "0x11", "flag": "0x80", "name": "ZF GS Tree", "HintKey": "ZF_GS_TREE", "categories": ["cZorasFountain", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + + "LLR_GS_BACK_WALL": { "type": "GSToken", "scene": "0x0B", "flag": "0x01", "name": "LLR GS Back Wall", "HintKey": "LLR_GS_BACK_WALL", "categories": ["cLonLonRanch", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_LON_LON_RANCH"}, + "LLR_GS_RAIN_SHED": { "type": "GSToken", "scene": "0x0B", "flag": "0x02", "name": "LLR GS Rain Shed", "HintKey": "LLR_GS_RAIN_SHED", "categories": ["cLonLonRanch", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_LON_LON_RANCH"}, + "LLR_GS_HOUSE_WINDOW": { "type": "GSToken", "scene": "0x0B", "flag": "0x04", "name": "LLR GS House Window", "HintKey": "LLR_GS_HOUSE_WINDOW", "categories": ["cLonLonRanch", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_LON_LON_RANCH"}, + "LLR_GS_TREE": { "type": "GSToken", "scene": "0x0B", "flag": "0x08", "name": "LLR GS Tree", "HintKey": "LLR_GS_TREE", "categories": ["cLonLonRanch", "cSkulltula"], "SpoilerCollectionCheckGroup": "GROUP_LON_LON_RANCH"}, + + /*------------------------------- + --- BOSSES --- + -------------------------------*/ + + "LINKS_POCKET": { "type": "Reward", "scene": "0xFF", "flag": "0xFF", "name": "Link's Pocket", "HintKey": "LINKS_POCKET", "vanillaItem": "LIGHT_MEDALLION", "categories": ["cDungeonReward"], "SpoilerCollectionCheck": "AlwaysCollected()", "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "QUEEN_GOHMA": { "type": "Reward", "scene": "0xFF", "flag": "DUNGEON_DEKU_TREE", "name": "Queen Gohma", "HintKey": "QUEEN_GOHMA", "vanillaItem": "KOKIRI_EMERALD", "categories": ["cDungeonReward"], "SpoilerCollectionCheck": "EventChkInf(0x09)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + "KING_DODONGO": { "type": "Reward", "scene": "0xFF", "flag": "DUNGEON_DODONGOS_CAVERN", "name": "King Dodongo", "HintKey": "KING_DODONGO", "vanillaItem": "GORON_RUBY", "categories": ["cDungeonReward"], "SpoilerCollectionCheck": "EventChkInf(0x25)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "BARINADE": { "type": "Reward", "scene": "0xFF", "flag": "DUNGEON_JABUJABUS_BELLY", "name": "Barinade", "HintKey": "BARINADE", "vanillaItem": "ZORA_SAPPHIRE", "categories": ["cDungeonReward"], "SpoilerCollectionCheck": "EventChkInf(0x37)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "PHANTOM_GANON": { "type": "Reward", "scene": "0xFF", "flag": "DUNGEON_FOREST_TEMPLE", "name": "Phantom Ganon", "HintKey": "PHANTOM_GANON", "vanillaItem": "FOREST_MEDALLION", "categories": ["cDungeonReward"], "SpoilerCollectionCheck": "EventChkInf(0x48)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "VOLVAGIA": { "type": "Reward", "scene": "0xFF", "flag": "DUNGEON_FIRE_TEMPLE", "name": "Volvagia", "HintKey": "VOLVAGIA", "vanillaItem": "FIRE_MEDALLION", "categories": ["cDungeonReward"], "SpoilerCollectionCheck": "EventChkInf(0x49)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "MORPHA": { "type": "Reward", "scene": "0xFF", "flag": "DUNGEON_WATER_TEMPLE", "name": "Morpha", "HintKey": "MORPHA", "vanillaItem": "WATER_MEDALLION", "categories": ["cDungeonReward"], "SpoilerCollectionCheck": "EventChkInf(0x4A)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "TWINROVA": { "type": "Reward", "scene": "0xFF", "flag": "DUNGEON_SPIRIT_TEMPLE", "name": "Twinrova", "HintKey": "TWINROVA", "vanillaItem": "SPIRIT_MEDALLION", "categories": ["cDungeonReward"], "SpoilerCollectionCheck": "EventChkInf(0x47)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "BONGO_BONGO": { "type": "Reward", "scene": "0xFF", "flag": "DUNGEON_SHADOW_TEMPLE", "name": "Bongo Bongo", "HintKey": "BONGO_BONGO", "vanillaItem": "SHADOW_MEDALLION", "categories": ["cDungeonReward"], "SpoilerCollectionCheck": "EventChkInf(0x46)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + "GANON": { "type": "Reward", "scene": "0xFF", "flag": "0xF0", "name": "Ganon", "HintKey": "NONE", "vanillaItem": "TRIFORCE", "categories": [], "SpoilerCollectionCheck": "None()", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + + /*------------------------------- + ---HEART CONTAINERS --- + -------------------------------*/ + + "DEKU_TREE_QUEEN_GOHMA_HEART": { "type": "Base", "scene": "0x11", "flag": "0x4F", "name": "Deku Tree Queen Gohma Heart Container", "HintKey": "DEKU_TREE_QUEEN_GOHMA_HEART", "vanillaItem": "HEART_CONTAINER", "categories": ["cDekuTree", "cBossHeart", "cSongDungeonReward"], "SpoilerCollectionCheck": "Collectable(0x11, 0x1F)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DEKU_TREE"}, + "DODONGOS_CAVERN_KING_DODONGO_HEART": { "type": "Base", "scene": "0x12", "flag": "0x4F", "name": "Dodongos Cavern King Dodongo Heart Container", "HintKey": "DODONGOS_CAVERN_KING_DODONGO_HEART", "vanillaItem": "HEART_CONTAINER", "categories": ["cDodongosCavern", "cBossHeart", "cSongDungeonReward"], "SpoilerCollectionCheck": "Collectable(0x12, 0x1F)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_DODONGOS_CAVERN"}, + "JABU_JABUS_BELLY_BARINADE_HEART": { "type": "Base", "scene": "0x13", "flag": "0x4F", "name": "Jabu Jabus Belly Barinade Heart Container", "HintKey": "JABU_JABUS_BELLY_BARINADE_HEART", "vanillaItem": "HEART_CONTAINER", "categories": ["cJabuJabusBelly", "cBossHeart", "cSongDungeonReward"], "SpoilerCollectionCheck": "Collectable(0x13, 0x1F)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "FOREST_TEMPLE_PHANTOM_GANON_HEART": { "type": "Base", "scene": "0x14", "flag": "0x4F", "name": "Forest Temple Phantom Ganon Heart Container", "HintKey": "FOREST_TEMPLE_PHANTOM_GANON_HEART", "vanillaItem": "HEART_CONTAINER", "categories": ["cForestTemple", "cBossHeart", "cSongDungeonReward"], "SpoilerCollectionCheck": "Collectable(0x14, 0x1F)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FOREST_TEMPLE"}, + "FIRE_TEMPLE_VOLVAGIA_HEART": { "type": "Base", "scene": "0x15", "flag": "0x4F", "name": "Fire Temple Volvagia Heart Container", "HintKey": "FIRE_TEMPLE_VOLVAGIA_HEART", "vanillaItem": "HEART_CONTAINER", "categories": ["cFireTemple", "cBossHeart", "cSongDungeonReward"], "SpoilerCollectionCheck": "Collectable(0x15, 0x1F)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_FIRE_TEMPLE"}, + "WATER_TEMPLE_MORPHA_HEART": { "type": "Base", "scene": "0x16", "flag": "0x4F", "name": "Water Temple Morpha Heart Container", "HintKey": "WATER_TEMPLE_MORPHA_HEART", "vanillaItem": "HEART_CONTAINER", "categories": ["cWaterTemple", "cBossHeart", "cSongDungeonReward"], "SpoilerCollectionCheck": "Collectable(0x16, 0x1F)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_WATER_TEMPLE"}, + "SPIRIT_TEMPLE_TWINROVA_HEART": { "type": "Base", "scene": "0x17", "flag": "0x4F", "name": "Spirit Temple Twinrova Heart Container", "HintKey": "SPIRIT_TEMPLE_TWINROVA_HEART", "vanillaItem": "HEART_CONTAINER", "categories": ["cSpiritTemple", "cBossHeart", "cSongDungeonReward"], "SpoilerCollectionCheck": "Collectable(0x17, 0x1F)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SPIRIT_TEMPLE"}, + "SHADOW_TEMPLE_BONGO_BONGO_HEART": { "type": "Base", "scene": "0x18", "flag": "0x4F", "name": "Shadow Temple Bongo Bongo Heart Container", "HintKey": "SHADOW_TEMPLE_BONGO_BONGO_HEART", "vanillaItem": "HEART_CONTAINER", "categories": ["cShadowTemple", "cBossHeart", "cSongDungeonReward"], "SpoilerCollectionCheck": "Collectable(0x18, 0x1F)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_SHADOW_TEMPLE"}, + + /*------------------------------- + --- CUTSCENES --- + -------------------------------*/ + + "TOT_MASTER_SWORD": { "type": "Delayed", "scene": "0xFF", "flag": "0x00", "name": "ToT Master Sword", "HintKey": "TOT_MASTER_SWORD", "vanillaItem": "MASTER_SWORD", "categories": ["cTempleOfTime", "cMarket"], "SpoilerCollectionCheck": "MasterSword()", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "TOT_LIGHT_ARROWS_CUTSCENE": { "type": "Delayed", "scene": "0xFF", "flag": "0x01", "name": "ToT Light Arrow Cutscene", "HintKey": "TOT_LIGHT_ARROWS_CUTSCENE", "vanillaItem": "LIGHT_ARROWS", "categories": ["cTempleOfTime", "cMarket"], "SpoilerCollectionCheck": "EventChkInf(0xC4)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "LW_GIFT_FROM_SARIA": { "type": "Delayed", "scene": "0xFF", "flag": "0x02", "name": "LW Gift From Saria", "HintKey": "LW_GIFT_FROM_SARIA", "vanillaItem": "PROGRESSIVE_OCARINA", "categories": ["cLostWoods", "cForest"], "SpoilerCollectionCheck": "EventChkInf(0xC1)", "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "ZF_GREAT_FAIRY_REWARD": { "type": "Delayed", "scene": "0xFF", "flag": "0x10", "name": "ZF Great Fairy Reward", "HintKey": "ZF_GREAT_FAIRY_REWARD", "vanillaItem": "FARORES_WIND", "categories": ["cZorasFountain", "cFairies"], "SpoilerCollectionCheck": "ItemGetInf(16)", "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + "HC_GREAT_FAIRY_REWARD": { "type": "Delayed", "scene": "0xFF", "flag": "0x11", "name": "HC Great Fairy Reward", "HintKey": "HC_GREAT_FAIRY_REWARD", "vanillaItem": "DINS_FIRE", "categories": ["cHyruleCastle", "cMarket", "cFairies"], "SpoilerCollectionCheck": "ItemGetInf(17)", "SpoilerCollectionCheckGroup": "GROUP_HYRULE_CASTLE"}, + "COLOSSUS_GREAT_FAIRY_REWARD": { "type": "Delayed", "scene": "0xFF", "flag": "0x12", "name": "Colossus Great Fairy Reward", "HintKey": "COLOSSUS_GREAT_FAIRY_REWARD", "vanillaItem": "NAYRUS_LOVE", "categories": ["cDesertColossus", "cFairies"], "SpoilerCollectionCheck": "ItemGetInf(18)", "SpoilerCollectionCheckGroup": "GROUP_HAUNTED_WASTELAND"}, + "DMT_GREAT_FAIRY_REWARD": { "type": "Delayed", "scene": "0xFF", "flag": "0x13", "name": "DMT Great Fairy Reward", "HintKey": "DMT_GREAT_FAIRY_REWARD", "vanillaItem": "PROGRESSIVE_MAGIC_METER", "categories": ["cDeathMountainTrail", "cDeathMountain", "cFairies"], "SpoilerCollectionCheck": "Chest(0x3B, 0x00)", "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_TRAIL"}, + "DMC_GREAT_FAIRY_REWARD": { "type": "Delayed", "scene": "0xFF", "flag": "0x14", "name": "DMC Great Fairy Reward", "HintKey": "DMC_GREAT_FAIRY_REWARD", "vanillaItem": "PROGRESSIVE_MAGIC_METER", "categories": ["cDeathMountainCrater", "cDeathMountain", "cFairies"], "SpoilerCollectionCheck": "Chest(0x3B, 0x01)", "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "OGC_GREAT_FAIRY_REWARD": { "type": "Delayed", "scene": "0xFF", "flag": "0x15", "name": "OGC Great Fairy Reward", "HintKey": "OGC_GREAT_FAIRY_REWARD", "vanillaItem": "DOUBLE_DEFENSE", "categories": ["cOutsideGanonsCastle", "cFairies"], "SpoilerCollectionCheck": "Chest(0x3B, 0x02)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_GANONS_CASTLE"}, + + "SHEIK_IN_FOREST": { "type": "Delayed", "scene": "0xFF", "flag": "0x20", "name": "Sheik in Forest", "HintKey": "SHEIK_IN_FOREST", "vanillaItem": "MINUET_OF_FOREST", "categories": ["cSacredForestMeadow", "cForest", "cSong"], "SpoilerCollectionCheck": "EventChkInf(0x50)", "SpoilerCollectionCheckGroup": "GROUP_SACRED_FOREST_MEADOW"}, + "SHEIK_IN_CRATER": { "type": "Delayed", "scene": "0xFF", "flag": "0x21", "name": "Sheik in Crater", "HintKey": "SHEIK_IN_CRATER", "vanillaItem": "BOLERO_OF_FIRE", "categories": ["cDeathMountainCrater", "cDeathMountain", "cSong"], "SpoilerCollectionCheck": "EventChkInf(0x51)", "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "SHEIK_IN_ICE_CAVERN": { "type": "Delayed", "scene": "0xFF", "flag": "0x22", "name": "Sheik in Ice Cavern", "HintKey": "SHEIK_IN_ICE_CAVERN", "vanillaItem": "SERENADE_OF_WATER", "categories": ["cIceCavern", "cSong", "cSongDungeonReward"], "SpoilerCollectionCheck": "EventChkInf(0x52)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_ICE_CAVERN"}, + "SHEIK_AT_COLOSSUS": { "type": "Delayed", "scene": "0xFF", "flag": "0x23", "name": "Sheik at Colossus", "HintKey": "SHEIK_AT_COLOSSUS", "vanillaItem": "REQUIEM_OF_SPIRIT", "categories": ["cDesertColossus", "cSong"], "SpoilerCollectionCheck": "EventChkInf(0xAC)", "SpoilerCollectionCheckGroup": "GROUP_HAUNTED_WASTELAND"}, + "SHEIK_IN_KAKARIKO": { "type": "Delayed", "scene": "0xFF", "flag": "0x24", "name": "Sheik in Kakariko", "HintKey": "SHEIK_IN_KAKARIKO", "vanillaItem": "NOCTURNE_OF_SHADOW", "categories": ["cKakarikoVillage", "cKakariko", "cSong"], "SpoilerCollectionCheck": "EventChkInf(0xAA)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "SHEIK_AT_TEMPLE": { "type": "Delayed", "scene": "0xFF", "flag": "0x25", "name": "Sheik at Temple", "HintKey": "SHEIK_AT_TEMPLE", "vanillaItem": "PRELUDE_OF_LIGHT", "categories": ["cTempleOfTime", "cMarket", "cSong"], "SpoilerCollectionCheck": "EventChkInf(0x55)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "SONG_FROM_IMPA": { "type": "Delayed", "scene": "0xFF", "flag": "0x26", "name": "Song from Impa", "HintKey": "SONG_FROM_IMPA", "vanillaItem": "ZELDAS_LULLABY", "categories": ["cHyruleCastle", "cMarket", "cSong", "cSongDungeonReward"], "SpoilerCollectionCheck": "EventChkInf(0x59)", "SpoilerCollectionCheckGroup": "GROUP_HYRULE_CASTLE"}, + "SONG_FROM_MALON": { "type": "Delayed", "scene": "0xFF", "flag": "0x27", "name": "Song from Malon", "HintKey": "SONG_FROM_MALON", "vanillaItem": "EPONAS_SONG", "categories": ["cLonLonRanch", "cSong"], "SpoilerCollectionCheck": "EventChkInf(0x58)", "SpoilerCollectionCheckGroup": "GROUP_LON_LON_RANCH"}, + "SONG_FROM_SARIA": { "type": "Delayed", "scene": "0xFF", "flag": "0x28", "name": "Song from Saria", "HintKey": "SONG_FROM_SARIA", "vanillaItem": "SARIAS_SONG", "categories": ["cSacredForestMeadow", "cForest", "cSong"], "SpoilerCollectionCheck": "EventChkInf(0x57)", "SpoilerCollectionCheckGroup": "GROUP_SACRED_FOREST_MEADOW"}, + "SONG_FROM_COMPOSERS_GRAVE": { "type": "Delayed", "scene": "0xFF", "flag": "0x29", "name": "Song from Composers Grave", "HintKey": "SONG_FROM_COMPOSERS_GRAVE", "vanillaItem": "SUNS_SONG", "categories": ["cGraveyard", "cKakariko", "cSong"], "SpoilerCollectionCheck": "EventChkInf(0x5A)", "SpoilerCollectionCheckGroup": "GROUP_GRAVEYARD"}, + "SONG_FROM_OCARINA_OF_TIME": { "type": "Delayed", "scene": "0xFF", "flag": "0x2A", "name": "Song from Ocarina of Time", "HintKey": "SONG_FROM_OCARINA_OF_TIME", "vanillaItem": "SONG_OF_TIME", "categories": ["cHyruleField", "cSong", "cNeedSpiritualStones"], "SpoilerCollectionCheck": "EventChkInf(0xA9)", "SpoilerCollectionCheckGroup": "GROUP_HYRULE_FIELD"}, + "SONG_FROM_WINDMILL": { "type": "Delayed", "scene": "0xFF", "flag": "0x2B", "name": "Song from Windmill", "HintKey": "SONG_FROM_WINDMILL", "vanillaItem": "SONG_OF_STORMS", "categories": ["cKakarikoVillage", "cKakariko", "cSong"], "SpoilerCollectionCheck": "EventChkInf(0x5B)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + + /*------------------------------- + --- COWS --- + -------------------------------*/ + + "KF_LINKS_HOUSE_COW": { "type": "Base", "scene": "0x34", "flag": "0x15", "name": "KF Links House Cow", "HintKey": "KF_LINKS_HOUSE_COW", "vanillaItem": "MILK", "categories": ["cForest", "cCow", "cMinigame"], "SpoilerCollectionCheck": "Cow(0x34, 0x15)", "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "HF_COW_GROTTO_COW": { "type": "Base", "scene": "0x3E", "flag": "0x16", "name": "HF Cow Grotto Cow", "HintKey": "HF_COW_GROTTO_COW", "vanillaItem": "MILK", "categories": ["cHyruleField", "cCow", "cGrotto"], "SpoilerCollectionCheck": "Cow(0x3E, 0x16)", "SpoilerCollectionCheckGroup": "GROUP_HYRULE_FIELD"}, + "LLR_STABLES_LEFT_COW": { "type": "Base", "scene": "0x36", "flag": "0x16", "name": "LLR Stables Left Cow", "HintKey": "LLR_STABLES_LEFT_COW", "vanillaItem": "MILK", "categories": ["cLonLonRanch", "cCow"], "SpoilerCollectionCheck": "Cow(0x36, 0x16)", "SpoilerCollectionCheckGroup": "GROUP_LON_LON_RANCH"}, + "LLR_STABLES_RIGHT_COW": { "type": "Base", "scene": "0x36", "flag": "0x15", "name": "LLR Stables Right Cow", "HintKey": "LLR_STABLES_RIGHT_COW", "vanillaItem": "MILK", "categories": ["cLonLonRanch", "cCow"], "SpoilerCollectionCheck": "Cow(0x36, 0x15)", "SpoilerCollectionCheckGroup": "GROUP_LON_LON_RANCH"}, + "LLR_TOWER_LEFT_COW": { "type": "Base", "scene": "0x4C", "flag": "0x15", "name": "LLR Tower Left Cow", "HintKey": "LLR_TOWER_LEFT_COW", "vanillaItem": "MILK", "categories": ["cLonLonRanch", "cCow"], "SpoilerCollectionCheck": "Cow(0x4C, 0x16)", "SpoilerCollectionCheckGroup": "GROUP_LON_LON_RANCH"}, + "LLR_TOWER_RIGHT_COW": { "type": "Base", "scene": "0x4C", "flag": "0x16", "name": "LLR Tower Right Cow", "HintKey": "LLR_TOWER_RIGHT_COW", "vanillaItem": "MILK", "categories": ["cLonLonRanch", "cCow"], "SpoilerCollectionCheck": "Cow(0x4C, 0x15)", "SpoilerCollectionCheckGroup": "GROUP_LON_LON_RANCH"}, + "KAK_IMPAS_HOUSE_COW": { "type": "Base", "scene": "0x37", "flag": "0x15", "name": "Kak Impas House Cow", "HintKey": "KAK_IMPAS_HOUSE_COW", "vanillaItem": "MILK", "categories": ["cKakarikoVillage", "cKakariko", "cCow"], "SpoilerCollectionCheck": "Cow(0x37, 0x15)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "DMT_COW_GROTTO_COW": { "type": "Base", "scene": "0x3E", "flag": "0x15", "name": "DMT Cow Grotto Cow", "HintKey": "DMT_COW_GROTTO_COW", "vanillaItem": "MILK", "categories": ["cDeathMountainTrail", "cDeathMountain", "cCow", "cGrotto"], "SpoilerCollectionCheck": "Cow(0x3E, 0x15)", "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_TRAIL"}, + "GV_COW": { "type": "Base", "scene": "0x5A", "flag": "0x15", "name": "GV Cow", "HintKey": "GV_COW", "vanillaItem": "MILK", "categories": ["cGerudoValley", "cGerudo", "cCow"], "SpoilerCollectionCheck": "Cow(0x5A, 0x15)", "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "JABU_JABUS_BELLY_MQ_COW": { "type": "Base", "scene": "0x02", "flag": "0x15", "name": "Jabu Jabus Belly MQ Cow", "HintKey": "JABU_JABUS_BELLY_MQ_COW", "vanillaItem": "MILK", "categories": ["cJabuJabusBelly", "cCow"], "SpoilerCollectionCheck": "Cow(0x02, 0x15)", "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + + /*------------------------------- + --- SHOPS --- + 8 6 2 4 + + 7 5 1 3 + -------------------------------*/ + + "KF_SHOP_ITEM_1": { "type": "Base", "scene": "0x2D", "flag": "0x30", "name": "KF Shop Item 1", "HintKey": "KF_SHOP_ITEM_1", "vanillaItem": "BUY_DEKU_SHIELD", "categories": ["cKokiriForest", "cForest", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2D, 0)", "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_SHOP_ITEM_2": { "type": "Base", "scene": "0x2D", "flag": "0x31", "name": "KF Shop Item 2", "HintKey": "KF_SHOP_ITEM_2", "vanillaItem": "BUY_DEKU_NUT_5", "categories": ["cKokiriForest", "cForest", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2D, 1)", "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_SHOP_ITEM_3": { "type": "Base", "scene": "0x2D", "flag": "0x32", "name": "KF Shop Item 3", "HintKey": "KF_SHOP_ITEM_3", "vanillaItem": "BUY_DEKU_NUT_10", "categories": ["cKokiriForest", "cForest", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2D, 2)", "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_SHOP_ITEM_4": { "type": "Base", "scene": "0x2D", "flag": "0x33", "name": "KF Shop Item 4", "HintKey": "KF_SHOP_ITEM_4", "vanillaItem": "BUY_DEKU_STICK_1", "categories": ["cKokiriForest", "cForest", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2D, 3)", "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_SHOP_ITEM_5": { "type": "Base", "scene": "0x2D", "flag": "0x34", "name": "KF Shop Item 5", "HintKey": "KF_SHOP_ITEM_5", "vanillaItem": "BUY_DEKU_SEEDS_30", "categories": ["cKokiriForest", "cForest", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2D, 4)", "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_SHOP_ITEM_6": { "type": "Base", "scene": "0x2D", "flag": "0x35", "name": "KF Shop Item 6", "HintKey": "KF_SHOP_ITEM_6", "vanillaItem": "BUY_ARROWS_10", "categories": ["cKokiriForest", "cForest", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2D, 5)", "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_SHOP_ITEM_7": { "type": "Base", "scene": "0x2D", "flag": "0x36", "name": "KF Shop Item 7", "HintKey": "KF_SHOP_ITEM_7", "vanillaItem": "BUY_ARROWS_30", "categories": ["cKokiriForest", "cForest", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2D, 6)", "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_SHOP_ITEM_8": { "type": "Base", "scene": "0x2D", "flag": "0x37", "name": "KF Shop Item 8", "HintKey": "KF_SHOP_ITEM_8", "vanillaItem": "BUY_HEART", "categories": ["cKokiriForest", "cForest", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2D, 7)", "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + + "KAK_POTION_SHOP_ITEM_1": { "type": "Base", "scene": "0x30", "flag": "0x30", "name": "Kak Potion Shop Item 1", "HintKey": "KAK_POTION_SHOP_ITEM_1", "vanillaItem": "BUY_DEKU_NUT_5", "categories": ["cKakarikoVillage", "cKakariko", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x30, 0)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_POTION_SHOP_ITEM_2": { "type": "Base", "scene": "0x30", "flag": "0x31", "name": "Kak Potion Shop Item 2", "HintKey": "KAK_POTION_SHOP_ITEM_2", "vanillaItem": "BUY_FISH", "categories": ["cKakarikoVillage", "cKakariko", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x30, 1)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_POTION_SHOP_ITEM_3": { "type": "Base", "scene": "0x30", "flag": "0x32", "name": "Kak Potion Shop Item 3", "HintKey": "KAK_POTION_SHOP_ITEM_3", "vanillaItem": "BUY_RED_POTION_30", "categories": ["cKakarikoVillage", "cKakariko", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x30, 2)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_POTION_SHOP_ITEM_4": { "type": "Base", "scene": "0x30", "flag": "0x33", "name": "Kak Potion Shop Item 4", "HintKey": "KAK_POTION_SHOP_ITEM_4", "vanillaItem": "BUY_GREEN_POTION", "categories": ["cKakarikoVillage", "cKakariko", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x30, 3)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_POTION_SHOP_ITEM_5": { "type": "Base", "scene": "0x30", "flag": "0x34", "name": "Kak Potion Shop Item 5", "HintKey": "KAK_POTION_SHOP_ITEM_5", "vanillaItem": "BUY_BLUE_FIRE", "categories": ["cKakarikoVillage", "cKakariko", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x30, 4)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_POTION_SHOP_ITEM_6": { "type": "Base", "scene": "0x30", "flag": "0x35", "name": "Kak Potion Shop Item 6", "HintKey": "KAK_POTION_SHOP_ITEM_6", "vanillaItem": "BUY_BOTTLE_BUG", "categories": ["cKakarikoVillage", "cKakariko", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x30, 5)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_POTION_SHOP_ITEM_7": { "type": "Base", "scene": "0x30", "flag": "0x36", "name": "Kak Potion Shop Item 7", "HintKey": "KAK_POTION_SHOP_ITEM_7", "vanillaItem": "BUY_POE", "categories": ["cKakarikoVillage", "cKakariko", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x30, 6)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_POTION_SHOP_ITEM_8": { "type": "Base", "scene": "0x30", "flag": "0x37", "name": "Kak Potion Shop Item 8", "HintKey": "KAK_POTION_SHOP_ITEM_8", "vanillaItem": "BUY_FAIRYS_SPIRIT", "categories": ["cKakarikoVillage", "cKakariko", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x30, 7)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + + "MARKET_BOMBCHU_SHOP_ITEM_1": { "type": "Base", "scene": "0x32", "flag": "0x30", "name": "MK Bombchu Shop Item 1", "HintKey": "MARKET_BOMBCHU_SHOP_ITEM_1", "vanillaItem": "BUY_BOMBCHU_5", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x32, 0)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_BOMBCHU_SHOP_ITEM_2": { "type": "Base", "scene": "0x32", "flag": "0x31", "name": "MK Bombchu Shop Item 2", "HintKey": "MARKET_BOMBCHU_SHOP_ITEM_2", "vanillaItem": "BUY_BOMBCHU_10", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x32, 1)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_BOMBCHU_SHOP_ITEM_3": { "type": "Base", "scene": "0x32", "flag": "0x32", "name": "MK Bombchu Shop Item 3", "HintKey": "MARKET_BOMBCHU_SHOP_ITEM_3", "vanillaItem": "BUY_BOMBCHU_10", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x32, 2)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_BOMBCHU_SHOP_ITEM_4": { "type": "Base", "scene": "0x32", "flag": "0x33", "name": "MK Bombchu Shop Item 4", "HintKey": "MARKET_BOMBCHU_SHOP_ITEM_4", "vanillaItem": "BUY_BOMBCHU_10", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x32, 3)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_BOMBCHU_SHOP_ITEM_5": { "type": "Base", "scene": "0x32", "flag": "0x34", "name": "MK Bombchu Shop Item 5", "HintKey": "MARKET_BOMBCHU_SHOP_ITEM_5", "vanillaItem": "BUY_BOMBCHU_20", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x32, 4)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_BOMBCHU_SHOP_ITEM_6": { "type": "Base", "scene": "0x32", "flag": "0x35", "name": "MK Bombchu Shop Item 6", "HintKey": "MARKET_BOMBCHU_SHOP_ITEM_6", "vanillaItem": "BUY_BOMBCHU_20", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x32, 5)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_BOMBCHU_SHOP_ITEM_7": { "type": "Base", "scene": "0x32", "flag": "0x36", "name": "MK Bombchu Shop Item 7", "HintKey": "MARKET_BOMBCHU_SHOP_ITEM_7", "vanillaItem": "BUY_BOMBCHU_20", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x32, 6)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_BOMBCHU_SHOP_ITEM_8": { "type": "Base", "scene": "0x32", "flag": "0x37", "name": "MK Bombchu Shop Item 8", "HintKey": "MARKET_BOMBCHU_SHOP_ITEM_8", "vanillaItem": "BUY_BOMBCHU_20", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x32, 7)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + + "MARKET_POTION_SHOP_ITEM_1": { "type": "Base", "scene": "0x31", "flag": "0x30", "name": "MK Potion Shop Item 1", "HintKey": "MARKET_POTION_SHOP_ITEM_1", "vanillaItem": "BUY_GREEN_POTION", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x31, 0)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_POTION_SHOP_ITEM_2": { "type": "Base", "scene": "0x31", "flag": "0x31", "name": "MK Potion Shop Item 2", "HintKey": "MARKET_POTION_SHOP_ITEM_2", "vanillaItem": "BUY_BLUE_FIRE", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x31, 1)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_POTION_SHOP_ITEM_3": { "type": "Base", "scene": "0x31", "flag": "0x32", "name": "MK Potion Shop Item 3", "HintKey": "MARKET_POTION_SHOP_ITEM_3", "vanillaItem": "BUY_RED_POTION_30", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x31, 2)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_POTION_SHOP_ITEM_4": { "type": "Base", "scene": "0x31", "flag": "0x33", "name": "MK Potion Shop Item 4", "HintKey": "MARKET_POTION_SHOP_ITEM_4", "vanillaItem": "BUY_FAIRYS_SPIRIT", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x31, 3)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_POTION_SHOP_ITEM_5": { "type": "Base", "scene": "0x31", "flag": "0x34", "name": "MK Potion Shop Item 5", "HintKey": "MARKET_POTION_SHOP_ITEM_5", "vanillaItem": "BUY_DEKU_NUT_5", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x31, 4)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_POTION_SHOP_ITEM_6": { "type": "Base", "scene": "0x31", "flag": "0x35", "name": "MK Potion Shop Item 6", "HintKey": "MARKET_POTION_SHOP_ITEM_6", "vanillaItem": "BUY_BOTTLE_BUG", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x31, 5)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_POTION_SHOP_ITEM_7": { "type": "Base", "scene": "0x31", "flag": "0x36", "name": "MK Potion Shop Item 7", "HintKey": "MARKET_POTION_SHOP_ITEM_7", "vanillaItem": "BUY_POE", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x31, 6)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_POTION_SHOP_ITEM_8": { "type": "Base", "scene": "0x31", "flag": "0x37", "name": "MK Potion Shop Item 8", "HintKey": "MARKET_POTION_SHOP_ITEM_8", "vanillaItem": "BUY_FISH", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x31, 7)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + + "MARKET_BAZAAR_ITEM_1": { "type": "Base", "scene": "0x2C", "flag": "0x30", "name": "MK Bazaar Item 1", "HintKey": "MARKET_BAZAAR_ITEM_1", "vanillaItem": "BUY_HYLIAN_SHIELD", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2C, 0)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_BAZAAR_ITEM_2": { "type": "Base", "scene": "0x2C", "flag": "0x31", "name": "MK Bazaar Item 2", "HintKey": "MARKET_BAZAAR_ITEM_2", "vanillaItem": "BUY_BOMBS_535", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2C, 1)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_BAZAAR_ITEM_3": { "type": "Base", "scene": "0x2C", "flag": "0x32", "name": "MK Bazaar Item 3", "HintKey": "MARKET_BAZAAR_ITEM_3", "vanillaItem": "BUY_DEKU_NUT_5", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2C, 2)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_BAZAAR_ITEM_4": { "type": "Base", "scene": "0x2C", "flag": "0x33", "name": "MK Bazaar Item 4", "HintKey": "MARKET_BAZAAR_ITEM_4", "vanillaItem": "BUY_HEART", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2C, 3)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_BAZAAR_ITEM_5": { "type": "Base", "scene": "0x2C", "flag": "0x34", "name": "MK Bazaar Item 5", "HintKey": "MARKET_BAZAAR_ITEM_5", "vanillaItem": "BUY_ARROWS_10", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2C, 4)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_BAZAAR_ITEM_6": { "type": "Base", "scene": "0x2C", "flag": "0x35", "name": "MK Bazaar Item 6", "HintKey": "MARKET_BAZAAR_ITEM_6", "vanillaItem": "BUY_ARROWS_50", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2C, 5)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_BAZAAR_ITEM_7": { "type": "Base", "scene": "0x2C", "flag": "0x36", "name": "MK Bazaar Item 7", "HintKey": "MARKET_BAZAAR_ITEM_7", "vanillaItem": "BUY_DEKU_STICK_1", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2C, 6)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + "MARKET_BAZAAR_ITEM_8": { "type": "Base", "scene": "0x2C", "flag": "0x37", "name": "MK Bazaar Item 8", "HintKey": "MARKET_BAZAAR_ITEM_8", "vanillaItem": "BUY_ARROWS_30", "categories": ["cInnerMarket", "cMarket", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2C, 7)", "SpoilerCollectionCheckGroup": "GROUP_MARKET"}, + + "KAK_BAZAAR_ITEM_1": { "type": "Base", "scene": "0x2C", "flag": "0x38", "name": "Kak Bazaar Item 1", "HintKey": "KAK_BAZAAR_ITEM_1", "vanillaItem": "BUY_HYLIAN_SHIELD", "categories": ["cKakarikoVillage", "cKakariko", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x33, 0)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_BAZAAR_ITEM_2": { "type": "Base", "scene": "0x2C", "flag": "0x39", "name": "Kak Bazaar Item 2", "HintKey": "KAK_BAZAAR_ITEM_2", "vanillaItem": "BUY_BOMBS_535", "categories": ["cKakarikoVillage", "cKakariko", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x33, 1)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_BAZAAR_ITEM_3": { "type": "Base", "scene": "0x2C", "flag": "0x3A", "name": "Kak Bazaar Item 3", "HintKey": "KAK_BAZAAR_ITEM_3", "vanillaItem": "BUY_DEKU_NUT_5", "categories": ["cKakarikoVillage", "cKakariko", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x33, 2)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_BAZAAR_ITEM_4": { "type": "Base", "scene": "0x2C", "flag": "0x3B", "name": "Kak Bazaar Item 4", "HintKey": "KAK_BAZAAR_ITEM_4", "vanillaItem": "BUY_HEART", "categories": ["cKakarikoVillage", "cKakariko", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x33, 3)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_BAZAAR_ITEM_5": { "type": "Base", "scene": "0x2C", "flag": "0x3C", "name": "Kak Bazaar Item 5", "HintKey": "KAK_BAZAAR_ITEM_5", "vanillaItem": "BUY_ARROWS_10", "categories": ["cKakarikoVillage", "cKakariko", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x33, 4)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_BAZAAR_ITEM_6": { "type": "Base", "scene": "0x2C", "flag": "0x3D", "name": "Kak Bazaar Item 6", "HintKey": "KAK_BAZAAR_ITEM_6", "vanillaItem": "BUY_ARROWS_50", "categories": ["cKakarikoVillage", "cKakariko", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x33, 5)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_BAZAAR_ITEM_7": { "type": "Base", "scene": "0x2C", "flag": "0x3E", "name": "Kak Bazaar Item 7", "HintKey": "KAK_BAZAAR_ITEM_7", "vanillaItem": "BUY_DEKU_STICK_1", "categories": ["cKakarikoVillage", "cKakariko", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x33, 6)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + "KAK_BAZAAR_ITEM_8": { "type": "Base", "scene": "0x2C", "flag": "0x3F", "name": "Kak Bazaar Item 8", "HintKey": "KAK_BAZAAR_ITEM_8", "vanillaItem": "BUY_ARROWS_30", "categories": ["cKakarikoVillage", "cKakariko", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x33, 7)", "SpoilerCollectionCheckGroup": "GROUP_KAKARIKO"}, + + "ZD_SHOP_ITEM_1": { "type": "Base", "scene": "0x2F", "flag": "0x30", "name": "ZD Shop Item 1", "HintKey": "ZD_SHOP_ITEM_1", "vanillaItem": "BUY_ZORA_TUNIC", "categories": ["cZorasDomain", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2F, 0)", "SpoilerCollectionCheckGroup": "GROUP_ZORAS_DOMAIN"}, + "ZD_SHOP_ITEM_2": { "type": "Base", "scene": "0x2F", "flag": "0x31", "name": "ZD Shop Item 2", "HintKey": "ZD_SHOP_ITEM_2", "vanillaItem": "BUY_ARROWS_10", "categories": ["cZorasDomain", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2F, 1)", "SpoilerCollectionCheckGroup": "GROUP_ZORAS_DOMAIN"}, + "ZD_SHOP_ITEM_3": { "type": "Base", "scene": "0x2F", "flag": "0x32", "name": "ZD Shop Item 3", "HintKey": "ZD_SHOP_ITEM_3", "vanillaItem": "BUY_HEART", "categories": ["cZorasDomain", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2F, 2)", "SpoilerCollectionCheckGroup": "GROUP_ZORAS_DOMAIN"}, + "ZD_SHOP_ITEM_4": { "type": "Base", "scene": "0x2F", "flag": "0x33", "name": "ZD Shop Item 4", "HintKey": "ZD_SHOP_ITEM_4", "vanillaItem": "BUY_ARROWS_30", "categories": ["cZorasDomain", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2F, 3)", "SpoilerCollectionCheckGroup": "GROUP_ZORAS_DOMAIN"}, + "ZD_SHOP_ITEM_5": { "type": "Base", "scene": "0x2F", "flag": "0x34", "name": "ZD Shop Item 5", "HintKey": "ZD_SHOP_ITEM_5", "vanillaItem": "BUY_DEKU_NUT_5", "categories": ["cZorasDomain", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2F, 4)", "SpoilerCollectionCheckGroup": "GROUP_ZORAS_DOMAIN"}, + "ZD_SHOP_ITEM_6": { "type": "Base", "scene": "0x2F", "flag": "0x35", "name": "ZD Shop Item 6", "HintKey": "ZD_SHOP_ITEM_6", "vanillaItem": "BUY_ARROWS_50", "categories": ["cZorasDomain", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2F, 5)", "SpoilerCollectionCheckGroup": "GROUP_ZORAS_DOMAIN"}, + "ZD_SHOP_ITEM_7": { "type": "Base", "scene": "0x2F", "flag": "0x36", "name": "ZD Shop Item 7", "HintKey": "ZD_SHOP_ITEM_7", "vanillaItem": "BUY_FISH", "categories": ["cZorasDomain", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2F, 6)", "SpoilerCollectionCheckGroup": "GROUP_ZORAS_DOMAIN"}, + "ZD_SHOP_ITEM_8": { "type": "Base", "scene": "0x2F", "flag": "0x37", "name": "ZD Shop Item 8", "HintKey": "ZD_SHOP_ITEM_8", "vanillaItem": "BUY_RED_POTION_50", "categories": ["cZorasDomain", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2F, 7)", "SpoilerCollectionCheckGroup": "GROUP_ZORAS_DOMAIN"}, + + "GC_SHOP_ITEM_1": { "type": "Base", "scene": "0x2E", "flag": "0x30", "name": "GC Shop Item 1", "HintKey": "GC_SHOP_ITEM_1", "vanillaItem": "BUY_BOMBS_525", "categories": ["cGoronCity", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2E, 0)", "SpoilerCollectionCheckGroup": "GROUP_GORON_CITY"}, + "GC_SHOP_ITEM_2": { "type": "Base", "scene": "0x2E", "flag": "0x31", "name": "GC Shop Item 2", "HintKey": "GC_SHOP_ITEM_2", "vanillaItem": "BUY_BOMBS_10", "categories": ["cGoronCity", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2E, 1)", "SpoilerCollectionCheckGroup": "GROUP_GORON_CITY"}, + "GC_SHOP_ITEM_3": { "type": "Base", "scene": "0x2E", "flag": "0x32", "name": "GC Shop Item 3", "HintKey": "GC_SHOP_ITEM_3", "vanillaItem": "BUY_BOMBS_20", "categories": ["cGoronCity", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2E, 2)", "SpoilerCollectionCheckGroup": "GROUP_GORON_CITY"}, + "GC_SHOP_ITEM_4": { "type": "Base", "scene": "0x2E", "flag": "0x33", "name": "GC Shop Item 4", "HintKey": "GC_SHOP_ITEM_4", "vanillaItem": "BUY_BOMBS_30", "categories": ["cGoronCity", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2E, 3)", "SpoilerCollectionCheckGroup": "GROUP_GORON_CITY"}, + "GC_SHOP_ITEM_5": { "type": "Base", "scene": "0x2E", "flag": "0x34", "name": "GC Shop Item 5", "HintKey": "GC_SHOP_ITEM_5", "vanillaItem": "BUY_GORON_TUNIC", "categories": ["cGoronCity", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2E, 4)", "SpoilerCollectionCheckGroup": "GROUP_GORON_CITY"}, + "GC_SHOP_ITEM_6": { "type": "Base", "scene": "0x2E", "flag": "0x35", "name": "GC Shop Item 6", "HintKey": "GC_SHOP_ITEM_6", "vanillaItem": "BUY_HEART", "categories": ["cGoronCity", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2E, 5)", "SpoilerCollectionCheckGroup": "GROUP_GORON_CITY"}, + "GC_SHOP_ITEM_7": { "type": "Base", "scene": "0x2E", "flag": "0x36", "name": "GC Shop Item 7", "HintKey": "GC_SHOP_ITEM_7", "vanillaItem": "BUY_RED_POTION_40", "categories": ["cGoronCity", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2E, 6)", "SpoilerCollectionCheckGroup": "GROUP_GORON_CITY"}, + "GC_SHOP_ITEM_8": { "type": "Base", "scene": "0x2E", "flag": "0x37", "name": "GC Shop Item 8", "HintKey": "GC_SHOP_ITEM_8", "vanillaItem": "BUY_HEART", "categories": ["cGoronCity", "cShop"], "SpoilerCollectionCheck": "ShopItem(0x2E, 7)", "SpoilerCollectionCheckGroup": "GROUP_GORON_CITY"}, + + /*------------------------------- + --- FREE STANDING RUPEES --- + -------------------------------*/ + "KF_END_OF_BRIDGE_BLUE_RUPEE": { "type": "Collectable", "scene": "0x55", "flag": "0x11", "name": "KF End of Bridge Blue Rupee", "HintKey": "KF_END_OF_BRIDGE_BLUE_RUPEE", "vanillaItem": "BLUE_RUPEE", "categories": ["cKokiriForest", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_BEHIND_MIDOS_HOUSE_BLUE_RUPEE": { "type": "Collectable", "scene": "0x55", "flag": "0x12", "name": "KF Behind Mido's house Blue Rupee", "HintKey": "KF_BEHIND_MIDOS_HOUSE_BLUE_RUPEE", "vanillaItem": "BLUE_RUPEE", "categories": ["cKokiriForest", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_BOULDER_MAZE_BLUE_RUPEE_1": { "type": "Collectable", "scene": "0x55", "flag": "0x0F", "name": "KF Boulder Maze Blue Rupee 1", "HintKey": "KF_BOULDER_MAZE_BLUE_RUPEE_1", "vanillaItem": "BLUE_RUPEE", "categories": ["cKokiriForest", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_BOULDER_MAZE_BLUE_RUPEE_2": { "type": "Collectable", "scene": "0x55", "flag": "0x0E", "name": "KF Boulder Maze Blue Rupee 2", "HintKey": "KF_BOULDER_MAZE_BLUE_RUPEE_2", "vanillaItem": "BLUE_RUPEE", "categories": ["cKokiriForest", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_NEAR_RAMP_GREEN_RUPEE_1": { "type": "Collectable", "scene": "0x55", "flag": "0x24", "name": "KF Near Ramp Green Rupee 1", "HintKey": "KF_NEAR_RAMP_GREEN_RUPEE_1", "vanillaItem": "GREEN_RUPEE", "categories": ["cKokiriForest", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_NEAR_RAMP_GREEN_RUPEE_2": { "type": "Collectable", "scene": "0x55", "flag": "0x27", "name": "KF Near Ramp Green Rupee 2", "HintKey": "KF_NEAR_RAMP_GREEN_RUPEE_2", "vanillaItem": "GREEN_RUPEE", "categories": ["cKokiriForest", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_NEAR_MIDOS_HOUSE_GREEN_RUPEE_1": { "type": "Collectable", "scene": "0x55", "flag": "0x25", "name": "KF Near Mido's House Green Rupee 1", "HintKey": "KF_NEAR_MIDOS_HOUSE_GREEN_RUPEE_1", "vanillaItem": "GREEN_RUPEE", "categories": ["cKokiriForest", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_NEAR_MIDOS_HOUSE_GREEN_RUPEE_2": { "type": "Collectable", "scene": "0x55", "flag": "0x26", "name": "KF Near Mido's House Green Rupee 2", "HintKey": "KF_NEAR_MIDOS_HOUSE_GREEN_RUPEE_2", "vanillaItem": "GREEN_RUPEE", "categories": ["cKokiriForest", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_RUPEE_CIRCLE_GREEN_RUPEE_1": { "type": "Collectable", "scene": "0x55", "flag": "0x40", "name": "KF Rupee circle Green Rupee 1", "HintKey": "KF_RUPEE_CIRCLE_GREEN_RUPEE_1", "vanillaItem": "GREEN_RUPEE", "categories": ["cKokiriForest", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_RUPEE_CIRCLE_GREEN_RUPEE_2": { "type": "Collectable", "scene": "0x55", "flag": "0x41", "name": "KF Rupee circle Green Rupee 2", "HintKey": "KF_RUPEE_CIRCLE_GREEN_RUPEE_2", "vanillaItem": "GREEN_RUPEE", "categories": ["cKokiriForest", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_RUPEE_CIRCLE_GREEN_RUPEE_3": { "type": "Collectable", "scene": "0x55", "flag": "0x42", "name": "KF Rupee circle Green Rupee 3", "HintKey": "KF_RUPEE_CIRCLE_GREEN_RUPEE_3", "vanillaItem": "GREEN_RUPEE", "categories": ["cKokiriForest", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_RUPEE_CIRCLE_GREEN_RUPEE_4": { "type": "Collectable", "scene": "0x55", "flag": "0x43", "name": "KF Rupee circle Green Rupee 4", "HintKey": "KF_RUPEE_CIRCLE_GREEN_RUPEE_4", "vanillaItem": "GREEN_RUPEE", "categories": ["cKokiriForest", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_RUPEE_CIRCLE_GREEN_RUPEE_5": { "type": "Collectable", "scene": "0x55", "flag": "0x44", "name": "KF Rupee circle Green Rupee 5", "HintKey": "KF_RUPEE_CIRCLE_GREEN_RUPEE_5", "vanillaItem": "GREEN_RUPEE", "categories": ["cKokiriForest", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_RUPEE_CIRCLE_GREEN_RUPEE_6": { "type": "Collectable", "scene": "0x55", "flag": "0x45", "name": "KF Rupee circle Green Rupee 6", "HintKey": "KF_RUPEE_CIRCLE_GREEN_RUPEE_6", "vanillaItem": "GREEN_RUPEE", "categories": ["cKokiriForest", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + "KF_RUPEE_CIRCLE_RED_RUPEE": { "type": "Collectable", "scene": "0x55", "flag": "0x46", "name": "KF Rupee circle Red Rupee", "HintKey": "KF_RUPEE_CIRCLE_RED_RUPEE", "vanillaItem": "RED_RUPEE", "categories": ["cKokiriForest", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_KOKIRI_FOREST"}, + + "LW_IN_BOULDER_BLUE_RUPEE": { "type": "Collectable", "scene": "0x5B", "flag": "0x13", "name": "LW in boulder blue rupee", "HintKey": "LW_IN_BOULDER_BLUE_RUPEE", "vanillaItem": "BLUE_RUPEE", "categories": ["cLostWoods", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "LW_IN_WATER_NEAR_ZR_SHORTCUT_GREEN_RUPEE_1": { "type": "Collectable", "scene": "0x5B", "flag": "0x34", "name": "LW in water near ZR Shortcut Green Rupee 1", "HintKey": "LW_IN_WATER_NEAR_ZR_SHORTCUT_GREEN_RUPEE_1", "vanillaItem": "GREEN_RUPEE", "categories": ["cLostWoods", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "LW_IN_WATER_NEAR_ZR_SHORTCUT_GREEN_RUPEE_2": { "type": "Collectable", "scene": "0x5B", "flag": "0x35", "name": "LW in water near ZR Shortcut Green Rupee 2", "HintKey": "LW_IN_WATER_NEAR_ZR_SHORTCUT_GREEN_RUPEE_2", "vanillaItem": "GREEN_RUPEE", "categories": ["cLostWoods", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "LW_IN_WATER_NEAR_ZR_SHORTCUT_GREEN_RUPEE_3": { "type": "Collectable", "scene": "0x5B", "flag": "0x36", "name": "LW in water near ZR Shortcut Green Rupee 3", "HintKey": "LW_IN_WATER_NEAR_ZR_SHORTCUT_GREEN_RUPEE_3", "vanillaItem": "GREEN_RUPEE", "categories": ["cLostWoods", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "LW_IN_WATER_NEAR_ZR_SHORTCUT_GREEN_RUPEE_4": { "type": "Collectable", "scene": "0x5B", "flag": "0x37", "name": "LW in water near ZR Shortcut Green Rupee 4", "HintKey": "LW_IN_WATER_NEAR_ZR_SHORTCUT_GREEN_RUPEE_4", "vanillaItem": "GREEN_RUPEE", "categories": ["cLostWoods", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "LW_IN_WATER_NEAR_ZR_SHORTCUT_GREEN_RUPEE_5": { "type": "Collectable", "scene": "0x5B", "flag": "0x39", "name": "LW in water near ZR Shortcut Green Rupee 5", "HintKey": "LW_IN_WATER_NEAR_ZR_SHORTCUT_GREEN_RUPEE_5", "vanillaItem": "GREEN_RUPEE", "categories": ["cLostWoods", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "LW_IN_WATER_NEAR_ZR_SHORTCUT_GREEN_RUPEE_6": { "type": "Collectable", "scene": "0x5B", "flag": "0x3A", "name": "LW in water near ZR Shortcut Green Rupee 6", "HintKey": "LW_IN_WATER_NEAR_ZR_SHORTCUT_GREEN_RUPEE_6", "vanillaItem": "GREEN_RUPEE", "categories": ["cLostWoods", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "LW_IN_WATER_NEAR_ZR_SHORTCUT_GREEN_RUPEE_7": { "type": "Collectable", "scene": "0x5B", "flag": "0x3B", "name": "LW in water near ZR Shortcut Green Rupee 7", "HintKey": "LW_IN_WATER_NEAR_ZR_SHORTCUT_GREEN_RUPEE_7", "vanillaItem": "GREEN_RUPEE", "categories": ["cLostWoods", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + "LW_IN_WATER_NEAR_ZR_SHORTCUT_GREEN_RUPEE_8": { "type": "Collectable", "scene": "0x5B", "flag": "0x3C", "name": "LW in water near ZR Shortcut Green Rupee 8", "HintKey": "LW_IN_WATER_NEAR_ZR_SHORTCUT_GREEN_RUPEE_8", "vanillaItem": "GREEN_RUPEE", "categories": ["cLostWoods", "cForest", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_LOST_WOODS"}, + + "LH_UNDER_WATER_GREEN_RUPEE_1": { "type": "Collectable", "scene": "0x57", "flag": "0x20", "name": "LH Under water green rupee 1", "HintKey": "LH_UNDER_WATER_GREEN_RUPEE_1", "vanillaItem": "GREEN_RUPEE", "categories": ["cLakeHylia", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_LAKE_HYLIA"}, + "LH_UNDER_WATER_GREEN_RUPEE_2": { "type": "Collectable", "scene": "0x57", "flag": "0x21", "name": "LH Under water green rupee 2", "HintKey": "LH_UNDER_WATER_GREEN_RUPEE_2", "vanillaItem": "GREEN_RUPEE", "categories": ["cLakeHylia", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_LAKE_HYLIA"}, + "LH_UNDER_WATER_GREEN_RUPEE_3": { "type": "Collectable", "scene": "0x57", "flag": "0x22", "name": "LH Under water green rupee 3", "HintKey": "LH_UNDER_WATER_GREEN_RUPEE_3", "vanillaItem": "GREEN_RUPEE", "categories": ["cLakeHylia", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_LAKE_HYLIA"}, + "LH_LAB_DIVE_RED_RUPEE_1": { "type": "Collectable", "scene": "0x38", "flag": "0x01", "name": "LH Lab Dive Red rupee 1", "HintKey": "LH_LAB_DIVE_RED_RUPEE_1", "vanillaItem": "RED_RUPEE", "categories": ["cLakeHylia", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_LAKE_HYLIA"}, + "LH_LAB_DIVE_RED_RUPEE_2": { "type": "Collectable", "scene": "0x38", "flag": "0x02", "name": "LH Lab Dive Red rupee 2", "HintKey": "LH_LAB_DIVE_RED_RUPEE_2", "vanillaItem": "RED_RUPEE", "categories": ["cLakeHylia", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_LAKE_HYLIA"}, + "LH_LAB_DIVE_RED_RUPEE_3": { "type": "Collectable", "scene": "0x38", "flag": "0x03", "name": "LH Lab Dive Red rupee 3", "HintKey": "LH_LAB_DIVE_RED_RUPEE_3", "vanillaItem": "RED_RUPEE", "categories": ["cLakeHylia", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_LAKE_HYLIA"}, + + "GV_OCTOROCK_GROTTO_BLUE_RUPEE_1": { "type": "Collectable", "scene": "0x3E", "flag": "0x38", "name": "GV Octorock Grotto Blue Rupee 1", "HintKey": "GV_OCTOROCK_GROTTO_BLUE_RUPEE_1", "vanillaItem": "BLUE_RUPEE", "categories": ["cGerudoValley", "cGerudo", "cFreestandingRupee", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GV_OCTOROCK_GROTTO_BLUE_RUPEE_2": { "type": "Collectable", "scene": "0x3E", "flag": "0x39", "name": "GV Octorock Grotto Blue Rupee 2", "HintKey": "GV_OCTOROCK_GROTTO_BLUE_RUPEE_2", "vanillaItem": "BLUE_RUPEE", "categories": ["cGerudoValley", "cGerudo", "cFreestandingRupee", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GV_OCTOROCK_GROTTO_BLUE_RUPEE_3": { "type": "Collectable", "scene": "0x3E", "flag": "0x3A", "name": "GV Octorock Grotto Blue Rupee 3", "HintKey": "GV_OCTOROCK_GROTTO_BLUE_RUPEE_3", "vanillaItem": "BLUE_RUPEE", "categories": ["cGerudoValley", "cGerudo", "cFreestandingRupee", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GV_OCTOROCK_GROTTO_GREEN_RUPEE_1": { "type": "Collectable", "scene": "0x3E", "flag": "0x3B", "name": "GV Octorock Grotto Green Rupee 1", "HintKey": "GV_OCTOROCK_GROTTO_GREEN_RUPEE_1", "vanillaItem": "GREEN_RUPEE", "categories": ["cGerudoValley", "cGerudo", "cFreestandingRupee", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GV_OCTOROCK_GROTTO_GREEN_RUPEE_2": { "type": "Collectable", "scene": "0x3E", "flag": "0x3C", "name": "GV Octorock Grotto Green Rupee 2", "HintKey": "GV_OCTOROCK_GROTTO_GREEN_RUPEE_2", "vanillaItem": "GREEN_RUPEE", "categories": ["cGerudoValley", "cGerudo", "cFreestandingRupee", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GV_OCTOROCK_GROTTO_GREEN_RUPEE_3": { "type": "Collectable", "scene": "0x3E", "flag": "0x3D", "name": "GV Octorock Grotto Green Rupee 3", "HintKey": "GV_OCTOROCK_GROTTO_GREEN_RUPEE_3", "vanillaItem": "GREEN_RUPEE", "categories": ["cGerudoValley", "cGerudo", "cFreestandingRupee", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GV_OCTOROCK_GROTTO_GREEN_RUPEE_4": { "type": "Collectable", "scene": "0x3E", "flag": "0x3E", "name": "GV Octorock Grotto Green Rupee 4", "HintKey": "GV_OCTOROCK_GROTTO_GREEN_RUPEE_4", "vanillaItem": "GREEN_RUPEE", "categories": ["cGerudoValley", "cGerudo", "cFreestandingRupee", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + "GV_OCTOROCK_GROTTO_RED_RUPEE": { "type": "Collectable", "scene": "0x3E", "flag": "0x3F", "name": "GV Octorock Grotto Red Rupee", "HintKey": "GV_OCTOROCK_GROTTO_RED_RUPEE", "vanillaItem": "RED_RUPEE", "categories": ["cGerudoValley", "cGerudo", "cFreestandingRupee", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_GERUDO_VALLEY"}, + + "DMT_ROCK_BLUE_RUPEE": { "type": "Collectable", "scene": "0x60", "flag": "0x07", "name": "DMT Rock Blue Rupee", "HintKey": "DMT_ROCK_BLUE_RUPEE", "vanillaItem": "BLUE_RUPEE", "categories": ["cDeathMountainTrail", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_TRAIL"}, + "DMT_ROCK_RED_RUPEE": { "type": "Collectable", "scene": "0x60", "flag": "0x0A", "name": "DMT Rock Red Rupee", "HintKey": "DMT_ROCK_RED_RUPEE", "vanillaItem": "RED_RUPEE", "categories": ["cDeathMountainTrail", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_TRAIL"}, + "DMT_COW_GROTTO_RUPEE_CIRCLE_GREEN_RUPEE_1": { "type": "Collectable", "scene": "0x3E", "flag": "0x40", "name": "DMT Cow Grotto rupee circle Green Rupee 1", "HintKey": "DMT_COW_GROTTO_RUPEE_CIRCLE_GREEN_RUPEE_1", "vanillaItem": "GREEN_RUPEE", "categories": ["cDeathMountainTrail", "cFreestandingRupee", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_TRAIL"}, + "DMT_COW_GROTTO_RUPEE_CIRCLE_GREEN_RUPEE_2": { "type": "Collectable", "scene": "0x3E", "flag": "0x41", "name": "DMT Cow Grotto rupee circle Green Rupee 2", "HintKey": "DMT_COW_GROTTO_RUPEE_CIRCLE_GREEN_RUPEE_2", "vanillaItem": "GREEN_RUPEE", "categories": ["cDeathMountainTrail", "cFreestandingRupee", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_TRAIL"}, + "DMT_COW_GROTTO_RUPEE_CIRCLE_GREEN_RUPEE_3": { "type": "Collectable", "scene": "0x3E", "flag": "0x42", "name": "DMT Cow Grotto rupee circle Green Rupee 3", "HintKey": "DMT_COW_GROTTO_RUPEE_CIRCLE_GREEN_RUPEE_3", "vanillaItem": "GREEN_RUPEE", "categories": ["cDeathMountainTrail", "cFreestandingRupee", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_TRAIL"}, + "DMT_COW_GROTTO_RUPEE_CIRCLE_GREEN_RUPEE_4": { "type": "Collectable", "scene": "0x3E", "flag": "0x43", "name": "DMT Cow Grotto rupee circle Green Rupee 4", "HintKey": "DMT_COW_GROTTO_RUPEE_CIRCLE_GREEN_RUPEE_4", "vanillaItem": "GREEN_RUPEE", "categories": ["cDeathMountainTrail", "cFreestandingRupee", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_TRAIL"}, + "DMT_COW_GROTTO_RUPEE_CIRCLE_GREEN_RUPEE_5": { "type": "Collectable", "scene": "0x3E", "flag": "0x44", "name": "DMT Cow Grotto rupee circle Green Rupee 5", "HintKey": "DMT_COW_GROTTO_RUPEE_CIRCLE_GREEN_RUPEE_5", "vanillaItem": "GREEN_RUPEE", "categories": ["cDeathMountainTrail", "cFreestandingRupee", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_TRAIL"}, + "DMT_COW_GROTTO_RUPEE_CIRCLE_GREEN_RUPEE_6": { "type": "Collectable", "scene": "0x3E", "flag": "0x45", "name": "DMT Cow Grotto rupee circle Green Rupee 6", "HintKey": "DMT_COW_GROTTO_RUPEE_CIRCLE_GREEN_RUPEE_6", "vanillaItem": "GREEN_RUPEE", "categories": ["cDeathMountainTrail", "cFreestandingRupee", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_TRAIL"}, + "DMT_COW_GROTTO_RUPEE_CIRCLE_RED_RUPEE": { "type": "Collectable", "scene": "0x3E", "flag": "0x46", "name": "DMT Cow Grotto rupee circle Red Rupee", "HintKey": "DMT_COW_GROTTO_RUPEE_CIRCLE_RED_RUPEE", "vanillaItem": "RED_RUPEE", "categories": ["cDeathMountainTrail", "cFreestandingRupee", "cGrotto"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_TRAIL"}, + + "DMC_LOWER_RED_RUPEE_1": { "type": "Collectable", "scene": "0x61", "flag": "0x20", "name": "DMC Lower Red Rupee 1", "HintKey": "DMC_LOWER_RED_RUPEE_1", "vanillaItem": "RED_RUPEE", "categories": ["cDeathMountainCrater", "cDeathMountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "DMC_LOWER_RED_RUPEE_2": { "type": "Collectable", "scene": "0x61", "flag": "0x21", "name": "DMC Lower Red Rupee 2", "HintKey": "DMC_LOWER_RED_RUPEE_2", "vanillaItem": "RED_RUPEE", "categories": ["cDeathMountainCrater", "cDeathMountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "DMC_LOWER_BLUE_RUPEE_1": { "type": "Collectable", "scene": "0x61", "flag": "0x22", "name": "DMC Lower Blue Rupee 1", "HintKey": "DMC_LOWER_BLUE_RUPEE_1", "vanillaItem": "BLUE_RUPEE", "categories": ["cDeathMountainCrater", "cDeathMountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "DMC_LOWER_BLUE_RUPEE_2": { "type": "Collectable", "scene": "0x61", "flag": "0x23", "name": "DMC Lower Blue Rupee 2", "HintKey": "DMC_LOWER_BLUE_RUPEE_2", "vanillaItem": "BLUE_RUPEE", "categories": ["cDeathMountainCrater", "cDeathMountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "DMC_LOWER_BLUE_RUPEE_3": { "type": "Collectable", "scene": "0x61", "flag": "0x24", "name": "DMC Lower Blue Rupee 3", "HintKey": "DMC_LOWER_BLUE_RUPEE_3", "vanillaItem": "BLUE_RUPEE", "categories": ["cDeathMountainCrater", "cDeathMountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "DMC_LOWER_BLUE_RUPEE_4": { "type": "Collectable", "scene": "0x61", "flag": "0x25", "name": "DMC Lower Blue Rupee 4", "HintKey": "DMC_LOWER_BLUE_RUPEE_4", "vanillaItem": "BLUE_RUPEE", "categories": ["cDeathMountainCrater", "cDeathMountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "DMC_LOWER_BLUE_RUPEE_5": { "type": "Collectable", "scene": "0x61", "flag": "0x26", "name": "DMC Lower Blue Rupee 5", "HintKey": "DMC_LOWER_BLUE_RUPEE_5", "vanillaItem": "BLUE_RUPEE", "categories": ["cDeathMountainCrater", "cDeathMountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "DMC_LOWER_BLUE_RUPEE_6": { "type": "Collectable", "scene": "0x61", "flag": "0x27", "name": "DMC Lower Blue Rupee 6", "HintKey": "DMC_LOWER_BLUE_RUPEE_6", "vanillaItem": "BLUE_RUPEE", "categories": ["cDeathMountainCrater", "cDeathMountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "DMC_SCARE_CROW_RUPEE_CIRCLE_GREEN_RUPEE_1": { "type": "Collectable", "scene": "0x61", "flag": "0x40", "name": "DMC Scare crow rupee circle Green Rupee 1", "HintKey": "DMC_SCARE_CROW_RUPEE_CIRCLE_GREEN_RUPEE_1", "vanillaItem": "GREEN_RUPEE", "categories": ["cDeathMountainCrater", "cDeathMountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "DMC_SCARE_CROW_RUPEE_CIRCLE_GREEN_RUPEE_2": { "type": "Collectable", "scene": "0x61", "flag": "0x41", "name": "DMC Scare crow rupee circle Green Rupee 2", "HintKey": "DMC_SCARE_CROW_RUPEE_CIRCLE_GREEN_RUPEE_2", "vanillaItem": "GREEN_RUPEE", "categories": ["cDeathMountainCrater", "cDeathMountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "DMC_SCARE_CROW_RUPEE_CIRCLE_GREEN_RUPEE_3": { "type": "Collectable", "scene": "0x61", "flag": "0x42", "name": "DMC Scare crow rupee circle Green Rupee 3", "HintKey": "DMC_SCARE_CROW_RUPEE_CIRCLE_GREEN_RUPEE_3", "vanillaItem": "GREEN_RUPEE", "categories": ["cDeathMountainCrater", "cDeathMountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "DMC_SCARE_CROW_RUPEE_CIRCLE_GREEN_RUPEE_4": { "type": "Collectable", "scene": "0x61", "flag": "0x43", "name": "DMC Scare crow rupee circle Green Rupee 4", "HintKey": "DMC_SCARE_CROW_RUPEE_CIRCLE_GREEN_RUPEE_4", "vanillaItem": "GREEN_RUPEE", "categories": ["cDeathMountainCrater", "cDeathMountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "DMC_SCARE_CROW_RUPEE_CIRCLE_GREEN_RUPEE_5": { "type": "Collectable", "scene": "0x61", "flag": "0x44", "name": "DMC Scare crow rupee circle Green Rupee 5", "HintKey": "DMC_SCARE_CROW_RUPEE_CIRCLE_GREEN_RUPEE_5", "vanillaItem": "GREEN_RUPEE", "categories": ["cDeathMountainCrater", "cDeathMountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "DMC_SCARE_CROW_RUPEE_CIRCLE_GREEN_RUPEE_6": { "type": "Collectable", "scene": "0x61", "flag": "0x45", "name": "DMC Scare crow rupee circle Green Rupee 6", "HintKey": "DMC_SCARE_CROW_RUPEE_CIRCLE_GREEN_RUPEE_6", "vanillaItem": "GREEN_RUPEE", "categories": ["cDeathMountainCrater", "cDeathMountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + "DMC_SCARE_CROW_RUPEE_CIRCLE_RED_RUPEE": { "type": "Collectable", "scene": "0x61", "flag": "0x46", "name": "DMC Scare crow rupee circle Red Rupee", "HintKey": "DMC_SCARE_CROW_RUPEE_CIRCLE_RED_RUPEE", "vanillaItem": "RED_RUPEE", "categories": ["cDeathMountainCrater", "cDeathMountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DEATH_MOUNTAIN_CRATER"}, + + "ZR_WATERFALL_RED_RUPEE_1": { "type": "Collectable", "scene": "0x54", "flag": "0x20", "name": "ZR Waterfall Red Rupee 1", "HintKey": "ZR_WATERFALL_RED_RUPEE_1", "vanillaItem": "RED_RUPEE", "categories": ["cZorasRiver", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_RIVER"}, + "ZR_WATERFALL_RED_RUPEE_2": { "type": "Collectable", "scene": "0x54", "flag": "0x21", "name": "ZR Waterfall Red Rupee 2", "HintKey": "ZR_WATERFALL_RED_RUPEE_2", "vanillaItem": "RED_RUPEE", "categories": ["cZorasRiver", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_RIVER"}, + "ZR_WATERFALL_RED_RUPEE_3": { "type": "Collectable", "scene": "0x54", "flag": "0x22", "name": "ZR Waterfall Red Rupee 3", "HintKey": "ZR_WATERFALL_RED_RUPEE_3", "vanillaItem": "RED_RUPEE", "categories": ["cZorasRiver", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_RIVER"}, + "ZR_WATERFALL_RED_RUPEE_4": { "type": "Collectable", "scene": "0x54", "flag": "0x23", "name": "ZR Waterfall Red Rupee 4", "HintKey": "ZR_WATERFALL_RED_RUPEE_4", "vanillaItem": "RED_RUPEE", "categories": ["cZorasRiver", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_RIVER"}, + + "ZF_UNDERWATER_GREEN_RUPEE_1": { "type": "Collectable", "scene": "0x59", "flag": "0x20", "name": "ZF Underwater Green Rupee 1", "HintKey": "ZF_UNDERWATER_GREEN_RUPEE_1", "vanillaItem": "GREEN_RUPEE", "categories": ["cZorasFountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + "ZF_UNDERWATER_GREEN_RUPEE_2": { "type": "Collectable", "scene": "0x59", "flag": "0x21", "name": "ZF Underwater Green Rupee 2", "HintKey": "ZF_UNDERWATER_GREEN_RUPEE_2", "vanillaItem": "GREEN_RUPEE", "categories": ["cZorasFountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + "ZF_UNDERWATER_GREEN_RUPEE_3": { "type": "Collectable", "scene": "0x59", "flag": "0x22", "name": "ZF Underwater Green Rupee 3", "HintKey": "ZF_UNDERWATER_GREEN_RUPEE_3", "vanillaItem": "GREEN_RUPEE", "categories": ["cZorasFountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + "ZF_UNDERWATER_GREEN_RUPEE_4": { "type": "Collectable", "scene": "0x59", "flag": "0x23", "name": "ZF Underwater Green Rupee 4", "HintKey": "ZF_UNDERWATER_GREEN_RUPEE_4", "vanillaItem": "GREEN_RUPEE", "categories": ["cZorasFountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + "ZF_UNDERWATER_GREEN_RUPEE_5": { "type": "Collectable", "scene": "0x59", "flag": "0x24", "name": "ZF Underwater Green Rupee 5", "HintKey": "ZF_UNDERWATER_GREEN_RUPEE_5", "vanillaItem": "GREEN_RUPEE", "categories": ["cZorasFountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + "ZF_UNDERWATER_GREEN_RUPEE_6": { "type": "Collectable", "scene": "0x59", "flag": "0x25", "name": "ZF Underwater Green Rupee 6", "HintKey": "ZF_UNDERWATER_GREEN_RUPEE_6", "vanillaItem": "GREEN_RUPEE", "categories": ["cZorasFountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + "ZF_UNDERWATER_GREEN_RUPEE_7": { "type": "Collectable", "scene": "0x59", "flag": "0x26", "name": "ZF Underwater Green Rupee 7", "HintKey": "ZF_UNDERWATER_GREEN_RUPEE_7", "vanillaItem": "GREEN_RUPEE", "categories": ["cZorasFountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + "ZF_UNDERWATER_GREEN_RUPEE_8": { "type": "Collectable", "scene": "0x59", "flag": "0x27", "name": "ZF Underwater Green Rupee 8", "HintKey": "ZF_UNDERWATER_GREEN_RUPEE_8", "vanillaItem": "GREEN_RUPEE", "categories": ["cZorasFountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + "ZF_UNDERWATER_GREEN_RUPEE_9": { "type": "Collectable", "scene": "0x59", "flag": "0x28", "name": "ZF Underwater Green Rupee 9", "HintKey": "ZF_UNDERWATER_GREEN_RUPEE_9", "vanillaItem": "GREEN_RUPEE", "categories": ["cZorasFountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + "ZF_UNDERWATER_GREEN_RUPEE_10": { "type": "Collectable", "scene": "0x59", "flag": "0x29", "name": "ZF Underwater Green Rupee 10", "HintKey": "ZF_UNDERWATER_GREEN_RUPEE_10", "vanillaItem": "GREEN_RUPEE", "categories": ["cZorasFountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + "ZF_UNDERWATER_GREEN_RUPEE_11": { "type": "Collectable", "scene": "0x59", "flag": "0x2A", "name": "ZF Underwater Green Rupee 11", "HintKey": "ZF_UNDERWATER_GREEN_RUPEE_11", "vanillaItem": "GREEN_RUPEE", "categories": ["cZorasFountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + "ZF_UNDERWATER_GREEN_RUPEE_12": { "type": "Collectable", "scene": "0x59", "flag": "0x2B", "name": "ZF Underwater Green Rupee 12", "HintKey": "ZF_UNDERWATER_GREEN_RUPEE_12", "vanillaItem": "GREEN_RUPEE", "categories": ["cZorasFountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + "ZF_UNDERWATER_GREEN_RUPEE_13": { "type": "Collectable", "scene": "0x59", "flag": "0x2C", "name": "ZF Underwater Green Rupee 13", "HintKey": "ZF_UNDERWATER_GREEN_RUPEE_13", "vanillaItem": "GREEN_RUPEE", "categories": ["cZorasFountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + "ZF_UNDERWATER_GREEN_RUPEE_14": { "type": "Collectable", "scene": "0x59", "flag": "0x2D", "name": "ZF Underwater Green Rupee 14", "HintKey": "ZF_UNDERWATER_GREEN_RUPEE_14", "vanillaItem": "GREEN_RUPEE", "categories": ["cZorasFountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + "ZF_UNDERWATER_GREEN_RUPEE_15": { "type": "Collectable", "scene": "0x59", "flag": "0x2E", "name": "ZF Underwater Green Rupee 15", "HintKey": "ZF_UNDERWATER_GREEN_RUPEE_15", "vanillaItem": "GREEN_RUPEE", "categories": ["cZorasFountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + "ZF_UNDERWATER_GREEN_RUPEE_16": { "type": "Collectable", "scene": "0x59", "flag": "0x2F", "name": "ZF Underwater Green Rupee 16", "HintKey": "ZF_UNDERWATER_GREEN_RUPEE_16", "vanillaItem": "GREEN_RUPEE", "categories": ["cZorasFountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + "ZF_UNDERWATER_GREEN_RUPEE_17": { "type": "Collectable", "scene": "0x59", "flag": "0x30", "name": "ZF Underwater Green Rupee 17", "HintKey": "ZF_UNDERWATER_GREEN_RUPEE_17", "vanillaItem": "GREEN_RUPEE", "categories": ["cZorasFountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + "ZF_UNDERWATER_GREEN_RUPEE_18": { "type": "Collectable", "scene": "0x59", "flag": "0x31", "name": "ZF Underwater Green Rupee 18", "HintKey": "ZF_UNDERWATER_GREEN_RUPEE_18", "vanillaItem": "GREEN_RUPEE", "categories": ["cZorasFountain", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_ZORAS_FOUNTAIN"}, + + "GRAVEYARD_DAMPE_RACE_GREEN_RUPEE_1": { "type": "Collectable", "scene": "0x48", "flag": "0x38", "name": "GY Dampe Race Green Rupee 1", "HintKey": "GRAVEYARD_DAMPE_RACE_GREEN_RUPEE_1", "vanillaItem": "GREEN_RUPEE", "categories": ["cGraveyard", "cKakariko", "cMinigame", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_GRAVEYARD"}, + "GRAVEYARD_DAMPE_RACE_GREEN_RUPEE_2": { "type": "Collectable", "scene": "0x48", "flag": "0x39", "name": "GY Dampe Race Green Rupee 2", "HintKey": "GRAVEYARD_DAMPE_RACE_GREEN_RUPEE_2", "vanillaItem": "GREEN_RUPEE", "categories": ["cGraveyard", "cKakariko", "cMinigame", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_GRAVEYARD"}, + "GRAVEYARD_DAMPE_RACE_GREEN_RUPEE_3": { "type": "Collectable", "scene": "0x48", "flag": "0x3A", "name": "GY Dampe Race Green Rupee 3", "HintKey": "GRAVEYARD_DAMPE_RACE_GREEN_RUPEE_3", "vanillaItem": "GREEN_RUPEE", "categories": ["cGraveyard", "cKakariko", "cMinigame", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_GRAVEYARD"}, + "GRAVEYARD_DAMPE_RACE_GREEN_RUPEE_4": { "type": "Collectable", "scene": "0x48", "flag": "0x3B", "name": "GY Dampe Race Green Rupee 4", "HintKey": "GRAVEYARD_DAMPE_RACE_GREEN_RUPEE_4", "vanillaItem": "GREEN_RUPEE", "categories": ["cGraveyard", "cKakariko", "cMinigame", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_GRAVEYARD"}, + "GRAVEYARD_DAMPE_RACE_GREEN_RUPEE_5": { "type": "Collectable", "scene": "0x48", "flag": "0x3C", "name": "GY Dampe Race Green Rupee 5", "HintKey": "GRAVEYARD_DAMPE_RACE_GREEN_RUPEE_5", "vanillaItem": "GREEN_RUPEE", "categories": ["cGraveyard", "cKakariko", "cMinigame", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_GRAVEYARD"}, + "GRAVEYARD_DAMPE_RACE_GREEN_RUPEE_6": { "type": "Collectable", "scene": "0x48", "flag": "0x3D", "name": "GY Dampe Race Green Rupee 6", "HintKey": "GRAVEYARD_DAMPE_RACE_GREEN_RUPEE_6", "vanillaItem": "GREEN_RUPEE", "categories": ["cGraveyard", "cKakariko", "cMinigame", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_GRAVEYARD"}, + "GRAVEYARD_DAMPE_RACE_GREEN_RUPEE_7": { "type": "Collectable", "scene": "0x48", "flag": "0x3E", "name": "GY Dampe Race Green Rupee 7", "HintKey": "GRAVEYARD_DAMPE_RACE_GREEN_RUPEE_7", "vanillaItem": "GREEN_RUPEE", "categories": ["cGraveyard", "cKakariko", "cMinigame", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_GRAVEYARD"}, + "GRAVEYARD_DAMPE_RACE_GREEN_RUPEE_8": { "type": "Collectable", "scene": "0x48", "flag": "0x3F", "name": "GY Dampe Race Green Rupee 8", "HintKey": "GRAVEYARD_DAMPE_RACE_GREEN_RUPEE_8", "vanillaItem": "GREEN_RUPEE", "categories": ["cGraveyard", "cKakariko", "cMinigame", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_GRAVEYARD"}, + + "ICE_CAVERN_RED_ICE_BLUE_RUPEE": { "type": "Collectable", "scene": "0x09", "flag": "0x21", "name": "Ice Cavern Red Ice Blue Rupee", "HintKey": "ICE_CAVERN_RED_ICE_BLUE_RUPEE", "vanillaItem": "BLUE_RUPEE", "categories": ["cIceCavern", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_ICE_CAVERN"}, + "ICE_CAVERN_PUSH_BLOCK_ROOM_RED_RUPEE_1": { "type": "Collectable", "scene": "0x09", "flag": "0x2E", "name": "Ice Cavern Block Room Red Rupee 1", "HintKey": "ICE_CAVERN_PUSH_BLOCK_ROOM_RED_RUPEE_1", "vanillaItem": "RED_RUPEE", "categories": ["cIceCavern", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_ICE_CAVERN"}, + "ICE_CAVERN_PUSH_BLOCK_ROOM_RED_RUPEE_2": { "type": "Collectable", "scene": "0x09", "flag": "0x2F", "name": "Ice Cavern Block Room Red Rupee 2", "HintKey": "ICE_CAVERN_PUSH_BLOCK_ROOM_RED_RUPEE_2", "vanillaItem": "RED_RUPEE", "categories": ["cIceCavern", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_ICE_CAVERN"}, + "ICE_CAVERN_PUSH_BLOCK_ROOM_RED_RUPEE_3": { "type": "Collectable", "scene": "0x09", "flag": "0x30", "name": "Ice Cavern Block Room Red Rupee 3", "HintKey": "ICE_CAVERN_PUSH_BLOCK_ROOM_RED_RUPEE_3", "vanillaItem": "RED_RUPEE", "categories": ["cIceCavern", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_ICE_CAVERN"}, + + "BOTTOM_OF_THE_WELL_CENTER_ROOM_PIT_FALL_BLUE_RUPEE_1": { "type": "Collectable", "scene": "0x08", "flag": "0x02", "name": "Bottom of the Well Center Pit fall Blue Rupee 1", "HintKey": "BOTTOM_OF_THE_WELL_CENTER_ROOM_PIT_FALL_BLUE_RUPEE_1", "vanillaItem": "BLUE_RUPEE", "categories": ["cBottomOfTheWell", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_CENTER_ROOM_PIT_FALL_BLUE_RUPEE_2": { "type": "Collectable", "scene": "0x08", "flag": "0x03", "name": "Bottom of the Well Center Pit fall Blue Rupee 2", "HintKey": "BOTTOM_OF_THE_WELL_CENTER_ROOM_PIT_FALL_BLUE_RUPEE_2", "vanillaItem": "BLUE_RUPEE", "categories": ["cBottomOfTheWell", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_CENTER_ROOM_PIT_FALL_BLUE_RUPEE_3": { "type": "Collectable", "scene": "0x08", "flag": "0x04", "name": "Bottom of the Well Center Pit fall Blue Rupee 3", "HintKey": "BOTTOM_OF_THE_WELL_CENTER_ROOM_PIT_FALL_BLUE_RUPEE_3", "vanillaItem": "BLUE_RUPEE", "categories": ["cBottomOfTheWell", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_CENTER_ROOM_PIT_FALL_BLUE_RUPEE_4": { "type": "Collectable", "scene": "0x08", "flag": "0x05", "name": "Bottom of the Well Center Pit fall Blue Rupee 4", "HintKey": "BOTTOM_OF_THE_WELL_CENTER_ROOM_PIT_FALL_BLUE_RUPEE_4", "vanillaItem": "BLUE_RUPEE", "categories": ["cBottomOfTheWell", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + "BOTTOM_OF_THE_WELL_CENTER_ROOM_PIT_FALL_BLUE_RUPEE_5": { "type": "Collectable", "scene": "0x08", "flag": "0x06", "name": "Bottom of the Well Center Pit fall Blue Rupee 5", "HintKey": "BOTTOM_OF_THE_WELL_CENTER_ROOM_PIT_FALL_BLUE_RUPEE_5", "vanillaItem": "BLUE_RUPEE", "categories": ["cBottomOfTheWell", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_BOTTOM_OF_THE_WELL"}, + + "JABU_JABUS_BELLY_MQ_NEAR_COW_BOTTOM_GREEN_RUPEE": { "type": "Collectable", "scene": "0x02", "flag": "0x01", "name": "Jabu Jabus Belly MQ Near Cow Bottom Green Rupee", "HintKey": "JABU_JABUS_BELLY_MQ_NEAR_COW_BOTTOM_GREEN_RUPEE", "vanillaItem": "GREEN_RUPEE", "categories": ["cJabuJabusBelly", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "JABU_JABUS_BELLY_MQ_NEAR_COW_MIDDLE_GREEN_RUPEE": { "type": "Collectable", "scene": "0x02", "flag": "0x02", "name": "Jabu Jabus Belly MQ Near Cow Middle Green Rupee", "HintKey": "JABU_JABUS_BELLY_MQ_NEAR_COW_MIDDLE_GREEN_RUPEE", "vanillaItem": "GREEN_RUPEE", "categories": ["cJabuJabusBelly", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + "JABU_JABUS_BELLY_MQ_NEAR_COW_TOP_GREEN_RUPEE": { "type": "Collectable", "scene": "0x02", "flag": "0x03", "name": "Jabu Jabus Belly MQ Near Cow Top Green Rupee", "HintKey": "JABU_JABUS_BELLY_MQ_NEAR_COW_TOP_GREEN_RUPEE", "vanillaItem": "GREEN_RUPEE", "categories": ["cJabuJabusBelly", "cFreestandingRupee"], "SpoilerCollectionCheckGroup": "GROUP_DUNGEON_JABUJABUS_BELLY"}, + + /*------------------------------- + --- GOSSIP STONES --- + -------------------------------*/ + // These are not actual locations, but are filler spots used for hint reachability. - OoT Randomizer + // flag + 0x400 = message ID + "DMC_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x05", "name": "DMC Gossip Stone", "categories": []}, + "DMT_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x04", "name": "DMT Gossip Stone", "categories": []}, + "COLOSSUS_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x1A", "name": "Colossus Gossip Stone", "categories": []}, + "DODONGOS_CAVERN_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x14", "name": "Dodongo's Cavern Gossip Stone", "categories": []}, + "GV_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x11", "name": "GV Gossip Stone", "categories": []}, + "GC_MAZE_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x15", "name": "GC Maze Gossip Stone", "categories": []}, + "GC_MEDIGORON_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x19", "name": "GC Medigoron Gossip Stone", "categories": []}, + "GRAVEYARD_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x0A", "name": "GY Gossip Stone", "categories": []}, + "HC_MALON_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x12", "name": "HC Malon Gossip Stone", "categories": []}, + "HC_ROCK_WALL_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x0B", "name": "HC Rock Wall Gossip Stone", "categories": []}, + "HC_STORMS_GROTTO_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x13", "name": "HC Storms Grotto Gossip Stone", "categories": []}, + "KF_DEKU_TREE_GOSSIP_STONE_LEFT": { "type": "HintStone", "scene": "0x00", "flag": "0x1F", "name": "KF Deku Tree Left Gossip Stone", "categories": []}, + "KF_DEKU_TREE_GOSSIP_STONE_RIGHT": { "type": "HintStone", "scene": "0x00", "flag": "0x20", "name": "KF Deku Tree Right Gossip Stone", "categories": []}, + "KF_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x1E", "name": "KF Gossip Stone", "categories": []}, + "LH_LAB_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x03", "name": "LH Lab Gossip Stone", "categories": []}, + "LH_GOSSIP_STONE_SOUTHEAST": { "type": "HintStone", "scene": "0x00", "flag": "0x0F", "name": "LH Southeast Gossip Stone", "categories": []}, + "LH_GOSSIP_STONE_SOUTHWEST": { "type": "HintStone", "scene": "0x00", "flag": "0x08", "name": "LH Southwest Gossip Stone", "categories": []}, + "LW_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x1D", "name": "LW Gossip Stone", "categories": []}, + "SFM_MAZE_GOSSIP_STONE_LOWER": { "type": "HintStone", "scene": "0x00", "flag": "0x16", "name": "SFM Maze Lower Gossip Stone", "categories": []}, + "SFM_MAZE_GOSSIP_STONE_UPPER": { "type": "HintStone", "scene": "0x00", "flag": "0x17", "name": "SFM Maze Upper Gossip Stone", "categories": []}, + "SFM_SARIA_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x1C", "name": "SFM Saria Gossip Stone", "categories": []}, + "TOT_GOSSIP_STONE_LEFT": { "type": "HintStone", "scene": "0x00", "flag": "0x06", "name": "ToT Left Gossip Stone", "categories": []}, + "TOT_GOSSIP_STONE_RIGHT": { "type": "HintStone", "scene": "0x00", "flag": "0x07", "name": "ToT Left Center Gossip Stone", "categories": []}, + "TOT_GOSSIP_STONE_RIGHT_CENTER": { "type": "HintStone", "scene": "0x00", "flag": "0x10", "name": "ToT Right Center Gossip Stone", "categories": []}, + "TOT_GOSSIP_STONE_LEFT_CENTER": { "type": "HintStone", "scene": "0x00", "flag": "0x0E", "name": "ToT Right Gossip Stone", "categories": []}, + "ZD_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x09", "name": "ZD Gossip Stone", "categories": []}, + "ZF_FAIRY_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x01", "name": "Fairy Gossip Stone", "categories": []}, + "ZF_JABU_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x02", "name": "Jabu Gossip Stone", "categories": []}, + "ZR_NEAR_GROTTOS_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x0D", "name": "ZR Near Grottos Gossip Stone", "categories": []}, + "ZR_NEAR_DOMAIN_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x0C", "name": "ZR Near Domain Gossip Stone", "categories": []}, + "HF_COW_GROTTO_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x1B", "name": "HF Cow Grotto Gossip Stone", "categories": []}, + + "HF_NEAR_MARKET_GROTTO_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x30", "name": "HF Near Market Gossip Stone", "categories": []}, + "HF_SOUTHEAST_GROTTO_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x32", "name": "HF Southeast Gossip Stone", "categories": []}, + "HF_OPEN_GROTTO_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x33", "name": "HF Open Grotto Gossip Stone", "categories": []}, + "KAK_OPEN_GROTTO_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x38", "name": "Kak Open Grotto Gossip Stone", "categories": []}, + "ZR_OPEN_GROTTO_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x39", "name": "ZR Open Grotto Gossip Stone", "categories": []}, + "KF_STORMS_GROTTO_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x3C", "name": "KF Storms Gossip Stone", "categories": []}, + "LW_NEAR_SHORTCUTS_GROTTO_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x34", "name": "LW Near Shortcuts Gossip Stone", "categories": []}, + "DMT_STORMS_GROTTO_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x37", "name": "DMT Storms Grotto Gossip Stone", "categories": []}, + "DMC_UPPER_GROTTO_GOSSIP_STONE": { "type": "HintStone", "scene": "0x00", "flag": "0x3A", "name": "DMC Upper Grotto Gossip Stone", "categories": []}, + + "GANONDORF_HINT": { "type": "OtherHint", "scene": "0x00", "flag": "0x00", "name": "Ganondorf Hint", "categories": []} +} \ No newline at end of file diff --git a/data/settings_table.jsonc b/data/settings_table.jsonc new file mode 100644 index 00000000..43a16146 --- /dev/null +++ b/data/settings_table.jsonc @@ -0,0 +1,721 @@ +{ + // NOTES: + // option subsets can be defined by putting an underscore before the name such as "_dungeonOptions" since it shares all elements with "worldOptions" + // ommit the _ when referring to a broader category such as the categories in "startingInventoryOptions" + // when defining "descriptions", '' can be used to define a string literal instead of a variable name + // defining "options" or "descriptions" as a string instead of an array will treat it as a variable rather than an array of string literals in the generated file + // to define a string litteral instead of a variable use '' inside of the "" like "'description text'" + + // vector definitions + "_definitions": { + "bottleOptions": [ + "Off", + "Empty Bottle", + "Red Potion", + "Green Potion", + "Blue Potion", + "Fairy", + "Fish", + "Milk", + "Blue Fire", + "Bugs", + "Big Poe", + "Half Milk", + "Poe" + ], + "childTunicOptions": [ + "$RANDOM_CHOICE", + "$RANDOM_COLOR", + "$CUSTOM_COLOR", + "Kokiri Green", + "Goron Red", + "Zora Blue", + "Black", + "White", + "Orange", + "Yellow", + "Cyan", + "Indigo", + "Purple", + "Pink", + "Dark Gray", + "Salmon", + "Wine Red", + "Beige", + "Brown", + "Sand", + "Tea Green", + "Dark Green", + "Powder Blue", + "Teal", + "Sky Blue", + "Faded Blue", + "Lavender", + "Magenta", + "Mauve", + "Silver", + "Gold", + "Rainbow", + "Same as Kokiri" + ], + "tunicOptions": [ + "$RANDOM_CHOICE", + "$RANDOM_COLOR", + "$CUSTOM_COLOR", + "Kokiri Green", + "Goron Red", + "Zora Blue", + "Black", + "White", + "Orange", + "Yellow", + "Cyan", + "Indigo", + "Purple", + "Pink", + "Dark Gray", + "Salmon", + "Wine Red", + "Beige", + "Brown", + "Sand", + "Tea Green", + "Dark Green", + "Powder Blue", + "Teal", + "Sky Blue", + "Faded Blue", + "Lavender", + "Magenta", + "Mauve", + "Silver", + "Gold", + "Rainbow" + ], + "gauntletOptions": [ + "$RANDOM_CHOICE", + "$RANDOM_COLOR", + "$CUSTOM_COLOR", + "Silver", + "Gold", + "Black", + "Green", + "Blue", + "Bronze", + "Red", + "Sky Blue", + "Pink", + "Magenta", + "Orange", + "Lime", + "Purple" + ], + "naviOuterOptionNames": [ + "$RANDOM_CHOICE", + "$RANDOM_COLOR", + "$CUSTOM_COLOR", + "White", + "Green", + "Light Blue", + "Yellow", + "Red", + "Magenta", + "Gold", + "Black", + "Tatl", + "Tael", + "Fi", + "Ciela", + "Epona", + "Ezlo", + "King Red Lions", + "Linebeck", + "Loftwing", + "Midna", + "Phantom Zelda", + "Rainbow", + "Same as Inner" + ], + "naviInnerOptionNames": [ + "$RANDOM_CHOICE", + "$RANDOM_COLOR", + "$CUSTOM_COLOR", + "White", + "Green", + "Light Blue", + "Yellow", + "Red", + "Magenta", + "Gold", + "Black", + "Tatl", + "Tael", + "Fi", + "Ciela", + "Epona", + "Ezlo", + "King Red Lions", + "Linebeck", + "Loftwing", + "Midna", + "Phantom Zelda", + "Rainbow" + ], + "weaponTrailOuterOptionNames": [ + "$RANDOM_CHOICE", + "$RANDOM_COLOR", + "$CUSTOM_COLOR", + "White", + "Black", + "Red", + "Green", + "Blue", + "Yellow", + "Cyan", + "Magenta", + "Orange", + "Gold", + "Purple", + "Pink", + "Rainbow", + "Same as Inner" + ], + "weaponTrailInnerOptionNames": [ + "$RANDOM_CHOICE", + "$RANDOM_COLOR", + "$CUSTOM_COLOR", + "White", + "Black", + "Red", + "Green", + "Blue", + "Yellow", + "Cyan", + "Magenta", + "Orange", + "Gold", + "Purple", + "Pink", + "Rainbow" + ], + "trailDurationOptionNames": [ + "Disabled", + "Very short", + "Vanilla", + "Long", + "Very Long", + "Lightsaber" + ], + "chuTrailDurationOptionNames": [ + "Disabled", + "Short", + "Vanilla", + "Long", + "Very Long", + "Hero's Path" + ] + }, + + "openOptions": { + "RandomizeOpen": { "type": "Bool", "name": "Randomize Settings", "falsetxt": "No", "truetxt": "Yes", "descriptions": ["openRandomize"], "category": "Toggle"}, + "OpenForest": { "type": "Choice", "name": "Forest", "options": ["Closed", "Open", "Closed Deku"], "descriptions": ["forestClosed", "forestOpen", "forestClosedDeku"], "category": "Setting", "default": "Open"}, + "OpenKakariko": { "type": "Choice", "name": "Kakariko Gate", "options": ["Closed", "Open"], "descriptions": ["kakGateClosed", "kakGateOpen"]}, + "OpenDoorOfTime": { "type": "Choice", "name": "Door of Time", "options": ["Open", "Closed", "Intended"], "descriptions": ["doorOfTimeOpen", "doorOfTimeClosed", "doorOfTimeIntended"]}, + "ZorasFountain": { "type": "Choice", "name": "Zora's Fountain", "options": ["Normal", "Adult", "Open"], "descriptions": ["fountainNormal", "fountainAdult", "fountainOpen"]}, + "OpenJabu": { "type": "Choice", "name": "Jabu-Jabu", "options": ["Closed", "Open"], "descriptions": ["jabuJabuCloseDesc", "jabuJabuOpenDesc"]}, + "GerudoFortress": { "type": "Choice", "name": "Gerudo Fortress", "options": ["Normal", "Fast", "Open"], "descriptions": ["gerudoNormal", "gerudoFast", "gerudoOpen"]}, + "Bridge": { "type": "Choice", "name": "Rainbow Bridge", "options": ["Open", "Vanilla", "Stones", "Medallions", "Rewards", "Dungeons", "Tokens", "Hearts"], + "descriptions": ["bridgeOpen", "bridgeVanilla", "bridgeStones", "bridgeMedallions", "bridgeRewards", "bridgeDungeons", "bridgeTokens", "bridgeHearts"], "category": "Setting", "default": "Medallions"}, + "BridgeStoneCount": { "type": "Count", "indent": 2, "name": "Stone Count", "min": 0, "max": 3, "descriptions": ["bridgeStoneCountDesc"], "category": "Setting", "default": 1, "default_hidden": true}, + "BridgeMedallionCount": { "type": "Count", "indent": 2, "name": "Medallion Count", "min": 0, "max": 6, "descriptions": ["bridgeMedallionCountDesc"], "category": "Setting", "default": 6}, + "BridgeRewardCount": { "type": "Count", "indent": 2, "name": "Reward Count", "min": 0, "max": 9, "descriptions": ["bridgeRewardCountDesc"], "category": "Setting", "default": 1, "default_hidden": true}, + "BridgeDungeonCount": { "type": "Count", "indent": 2, "name": "Dungeon Count", "min": 0, "max": 8, "descriptions": ["bridgeDungeonCountDesc"], "category": "Setting", "default": 1, "default_hidden": true}, + "BridgeTokenCount": { "type": "Count", "indent": 2, "name": "Token Count", "min": 0, "max": 100, "descriptions": ["bridgeTokenCountDesc"], "category": "Setting", "default": 1, "default_hidden": true}, + "BridgeHeartCount": { "type": "Count", "indent": 2, "name": "Heart Count", "min": 0, "max": 20, "descriptions": ["bridgeHeartCountDesc"], "category": "Setting", "default": 1, "default_hidden": true}, + "RandomGanonsTrials": { "type": "Bool", "name": "Random Ganon's Trials", "falsetxt": "Off", "truetxt": "On", "descriptions": ["randomGanonsTrialsDesc"], "category": "Setting", "default": "On"}, + "GanonsTrialsCount": { "type": "Count", "indent": 2, "name": "Trial Count", "min": 0, "max": 6, "descriptions": ["ganonsTrialCountDesc"], "category": "Setting", "default": 1, "default_hidden": true} + }, + "worldOptions": { + "RandomizeWorld": { "type": "Bool", "name": "Randomize Settings", "falsetxt": "No", "truetxt": "Yes", "descriptions": ["worldRandomize"], "category": "Toggle"}, + "StartingAge": { "type": "Choice", "name": "Starting Age", "options": ["Adult", "Child", "Random"], "descriptions": ["ageDesc"], "category": "Setting", "default": "Child"}, + "ShuffleEntrances": { "type": "Bool", "name": "Shuffle Entrances", "falsetxt": "Off", "truetxt": "On", "descriptions": ["shuffleEntrancesDesc"]}, + "ShuffleDungeonEntrances": { "type": "Choice", "indent": 2, "name": "Dungeon Entrances", "options": ["Off", "On", "On + Ganon"], "descriptions": ["dungeonEntrancesDesc"]}, + "ShuffleBossEntrances": { "type": "Choice", "indent": 2, "name": "Boss Entrances", "options": ["Off", "Age Restricted", "Full"], "descriptions": ["bossEntrancesDesc"]}, + "ShuffleOverworldEntrances": { "type": "Bool", "indent": 2, "name": "Overworld Entrances", "falsetxt": "Off", "truetxt": "On", "descriptions": ["overworldEntrancesDesc"]}, + "ShuffleInteriorEntrances": { "type": "Choice", "indent": 2, "name": "Interior Entrances", "options": ["Off", "Simple", "All"], "descriptions": ["interiorEntrancesOff", "interiorEntrancesSimple", "interiorEntrancesAll"]}, + "ShuffleGrottoEntrances": { "type": "Bool", "indent": 2, "name": "Grottos Entrances", "falsetxt": "Off", "truetxt": "On", "descriptions": ["grottoEntrancesDesc"]}, + "ShuffleOwlDrops": { "type": "Bool", "indent": 2, "name": "Owl Drops", "falsetxt": "Off", "truetxt": "On", "descriptions": ["owlDropsDesc"]}, + "ShuffleWarpSongs": { "type": "Bool", "indent": 2, "name": "Warp Songs", "falsetxt": "Off", "truetxt": "On", "descriptions": ["warpSongsDesc"]}, + "ShuffleOverworldSpawns": { "type": "Bool", "indent": 2, "name": "Overworld Spawns", "falsetxt": "Off", "truetxt": "On", "descriptions": ["overworldSpawnsDesc"]}, + "MixedEntrancePools": { "type": "Bool", "indent": 2, "name": "Mixed Entrance Pools", "falsetxt": "Off", "truetxt": "On", "descriptions": ["mixedPoolsDesc"]}, + "MixDungeons": { "type": "Bool", "indent": 4, "name": "Mix Dungeons", "falsetxt": "Off", "truetxt": "On", "descriptions": ["mixDungeonsDesc"]}, + "MixOverworld": { "type": "Bool", "indent": 4, "name": "Mix Overworld", "falsetxt": "Off", "truetxt": "On", "descriptions": ["mixOverworldDesc"]}, + "MixInteriors": { "type": "Bool", "indent": 4, "name": "Mix Interiors", "falsetxt": "Off", "truetxt": "On", "descriptions": ["mixInteriorsDesc"]}, + "MixGrottos": { "type": "Bool", "indent": 4, "name": "Mix Grottos", "falsetxt": "Off", "truetxt": "On", "descriptions": ["mixGrottosDesc"]}, + "DecoupleEntrances": { "type": "Bool", "indent": 2, "name": "Decouple Entrances", "falsetxt": "Off", "truetxt": "On", "descriptions": ["decoupledEntrancesDesc"]}, + "BombchusInLogic": { "type": "Bool", "name": "Bombchus in Logic", "falsetxt": "Off", "truetxt": "On", "descriptions": ["bombchuLogicDesc"]}, + "AmmoDrops": { "type": "Choice", "name": "Ammo Drops", "options": ["On", "On + Bombchu", "Off"], "descriptions": ["defaultAmmoDropsDesc", "bombchuDropsDesc", "noAmmoDropsDesc"], "category": "Setting", "default": "On + Bombchu"}, + "HeartDropRefill": { "type": "Choice", "name": "Heart Drops and Refills", "options": ["On", "No Drop", "No Refill", "Off"], "descriptions": ["defaultHeartDropsDesc", "noHeartDropsDesc", "noHeartRefillDesc", "scarceHeartsDesc"], "category": "Setting", "default": "On"}, + "MQDungeonCount": { "type": "NumericChoice", "name": "MQ Dungeon Count", "min": 0, "max": 12, "options": ["__num__", "Random"], "descriptions": ["mqDungeonCountDesc"]}, + "SetDungeonTypes": { "type": "Bool", "name": "Set Dungeon Types", "truetxt": "On", "falsetxt": "Off", "descriptions": ["setDungeonTypesDesc"]}, + "_dungeonOptions": { + "MQDeku": { "type": "Choice", "indent": 2, "name": "Deku Tree", "options": ["Vanilla", "Master Quest", "Random"], "descriptions": ["setDungeonTypesDesc"]}, + "MQDodongo": { "type": "Choice", "indent": 2, "name": "Dodongo's Cavern", "options": ["Vanilla", "Master Quest", "Random"], "descriptions": ["setDungeonTypesDesc"]}, + "MQJabu": { "type": "Choice", "indent": 2, "name": "Jabu-Jabu's Belly", "options": ["Vanilla", "Master Quest", "Random"], "descriptions": ["setDungeonTypesDesc"]}, + "MQForest": { "type": "Choice", "indent": 2, "name": "Forest Temple", "options": ["Vanilla", "Master Quest", "Random"], "descriptions": ["setDungeonTypesDesc"]}, + "MQFire": { "type": "Choice", "indent": 2, "name": "Fire Temple", "options": ["Vanilla", "Master Quest", "Random"], "descriptions": ["setDungeonTypesDesc"]}, + "MQWater": { "type": "Choice", "indent": 2, "name": "Water Temple", "options": ["Vanilla", "Master Quest", "Random"], "descriptions": ["setDungeonTypesDesc"]}, + "MQSpirit": { "type": "Choice", "indent": 2, "name": "Spirit Temple", "options": ["Vanilla", "Master Quest", "Random"], "descriptions": ["setDungeonTypesDesc"]}, + "MQShadow": { "type": "Choice", "indent": 2, "name": "Shadow Temple", "options": ["Vanilla", "Master Quest", "Random"], "descriptions": ["setDungeonTypesDesc"]}, + "MQBotW": { "type": "Choice", "indent": 2, "name": "Bottom of the Well", "options": ["Vanilla", "Master Quest", "Random"], "descriptions": ["setDungeonTypesDesc"]}, + "MQIceCavern": { "type": "Choice", "indent": 2, "name": "Ice Cavern", "options": ["Vanilla", "Master Quest", "Random"], "descriptions": ["setDungeonTypesDesc"]}, + "MQGTG": { "type": "Choice", "indent": 2, "name": "Training Grounds", "options": ["Vanilla", "Master Quest", "Random"], "descriptions": ["setDungeonTypesDesc"]}, + "MQCastle": { "type": "Choice", "indent": 2, "name": "Ganon's Castle", "options": ["Vanilla", "Master Quest", "Random"], "descriptions": ["setDungeonTypesDesc"]} + }, + "TriforceHunt": { "type": "Bool", "name": "Triforce Hunt", "falsetxt": "Off", "truetxt": "On", "descriptions": ["triforceHuntDesc"]}, + "TriforcePiecesTotal": { "type": "Count", "indent": 2, "name": "Total pieces", "min": 1, "max": 200, "descriptions": ["triforcePiecesTotalDesc"], "category": "Setting", "default": 29}, + "TriforcePiecesRequired": { "type": "Count", "indent": 2, "name": "Required pieces", "min": 1, "max": 100, "descriptions": ["triforcePiecesRequiredDesc"], "category": "Setting", "default": 19}, + "Enemizer": { "type": "Bool", "name": "Enemy Randomizer", "falsetxt": "Off", "truetxt": "On", "descriptions": ["enemizerDesc"]}, + "EnemizerListToggle": { "type": "Bool", "indent": 2, "name": "Enemy List", "falsetxt": " >", "truetxt": "", "descriptions": ["enemizerListDesc"], "category": "Toggle"} + }, + "shuffleOptions": { + "RandomizeShuffle": { "type": "Bool", "name": "Randomize Settings", "falsetxt": "No", "truetxt": "Yes", "descriptions": ["shuffleRandomize"], "category": "Toggle"}, + "ShuffleRewards": { "type": "Choice", "name": "Shuffle Dungeon Rewards", "options": ["End of Dungeons", "Any Dungeon", "Overworld", "Anywhere"], "descriptions": ["shuffleRewardsEndOfDungeon", "shuffleRewardsAnyDungeon", "shuffleRewardsOverworld", "shuffleRewardsAnywhere"]}, + "LinksPocketItem": { "type": "Choice", "name": "Link's Pocket", "options": ["Dungeon Reward", "Advancement", "Anything", "Nothing"], "descriptions": ["linksPocketDungeonReward", "linksPocketAdvancement", "linksPocketAnything", "linksPocketNothing"]}, + "ShuffleSongs": { "type": "Choice", "name": "Shuffle Songs", "options": ["Song Locations", "Dungeon Rewards", "Anywhere"], "descriptions": ["songsSongLocations", "songsDungeonRewards", "songsAllLocations"]}, + "Shopsanity": { "type": "NumericChoice", "name": "Shopsanity", "min": 0, "max": 4, "options": ["Off", "__num__", "Random"], "descriptions": ["shopsOff", "shopsZero", "shopsOne", "shopsTwo", "shopsThree", "shopsFour", "shopsRandom"]}, + "ShopsanityPrices": { "type": "Choice", "indent": 2, "name": "Shopsanity Prices", "options": ["Random", "Affordable", "Child wallet", "Adult wallet", "Giant's wallet", "Tycoon wallet"], + "descriptions": ["shopPriceRandom", "shopPriceAffordable", "shopPriceChild", "shopPriceAdult", "shopPriceGiant", "shopPriceTycoon"]}, + "Tokensanity": { "type": "Choice", "name": "Tokensanity", "options": ["Off", "Dungeons", "Overworld", "All Tokens"], "descriptions": ["tokensOff", "tokensDungeon", "tokensOverworld", "tokensAllTokens"]}, + "Scrubsanity": { "type": "Choice", "name": "Scrub Shuffle", "options": ["Off", "Affordable", "Expensive", "Random Prices"], "descriptions": ["scrubsOff", "scrubsAffordable", "scrubsExpensive", "scrubsRandomPrices"]}, + "ShuffleCows": { "type": "Bool", "name": "Shuffle Cows", "falsetxt": "Off", "truetxt": "On", "descriptions": ["shuffleCowsDesc"]}, + "ShuffleKokiriSword": { "type": "Bool", "name": "Shuffle Kokiri Sword", "falsetxt": "Off", "truetxt": "On", "descriptions": ["kokiriSwordDesc"]}, + "ShuffleMasterSword": { "type": "Bool", "name": "Shuffle Master Sword", "falsetxt": "Off", "truetxt": "On", "descriptions": ["masterSwordDesc"]}, + "ShuffleOcarinas": { "type": "Bool", "name": "Shuffle Ocarinas", "falsetxt": "Off", "truetxt": "On", "descriptions": ["ocarinasDesc"]}, + "ShuffleWeirdEgg": { "type": "Bool", "name": "Shuffle Weird Egg", "falsetxt": "Off", "truetxt": "On", "descriptions": ["weirdEggDesc"]}, + "ShuffleZeldasLetter": { "type": "Bool", "name": "Shuffle Zelda's Letter", "falsetxt": "Off", "truetxt": "On", "descriptions": ["zeldasLetterDesc"]}, + "ShuffleGerudoToken": { "type": "Bool", "name": "Shuffle Gerudo Token", "falsetxt": "Off", "truetxt": "On", "descriptions": ["gerudoTokenDesc"]}, + "ShuffleMagicBeans": { "type": "Bool", "name": "Shuffle Magic Beans", "falsetxt": "Off", "truetxt": "On", "descriptions": ["magicBeansDesc"]}, + "ShuffleMerchants": { "type": "Choice", "name": "Shuffle Merchants", "options": ["Off", "On (No Hints)", "On (With Hints)"], "descriptions": ["merchantsDesc", "merchantsHintsDesc"]}, + "ShuffleAdultTradeQuest": { "type": "Bool", "name": "Shuffle Adult Trade", "falsetxt": "Off", "truetxt": "On", "descriptions": ["adultTradeDesc"]}, + "ShuffleChestMinigame": { "type": "Choice", "name": "Shuffle Chest Minigame", "options": ["Off", "On (Separate)", "On (Pack)"], "descriptions": ["chestMinigameDesc"]}, + "ShuffleFrogSongRupees": { "type": "Bool", "name": "Shuffle Frog Rupees", "falsetxt": "Off", "truetxt": "On", "descriptions": ["frogSongRupeesDesc"]}, + "ShuffleEnemySouls": { "type": "Choice", "name": "Shuffle Enemy Souls", "options": ["Off", "All enemies", "Bosses only"], "descriptions": ["enemySoulDesc"]}, + "ShuffleOcarinaButtons": { "type": "Bool", "name": "Shuffle Ocarina Buttons", "falsetxt": "Off", "truetxt": "On", "descriptions": ["ocarinaButtonsDesc"]}, + "ShuffleRupees": { "type": "Bool", "name": "Shuffle Standing Rupees", "falsetxt": "Off", "truetxt": "On", "descriptions": ["shuffleRupeesDesc"]} + }, + "shuffleDungeonItemOptions": { + "RandomizeDungeon": { "type": "Bool", "name": "Randomize Settings", "falsetxt": "No", "truetxt": "Yes", "descriptions": ["dungeonRandomize"], "category": "Toggle"}, + "MapsAndCompasses": { "type": "Choice", "name": "Maps/Compasses", "options": ["Start With", "Vanilla", "Own Dungeon", "Any Dungeon", "Overworld", "Anywhere"], + "descriptions": ["mapCompassStartWith", "mapCompassVanilla", "mapCompassOwnDungeon", "mapCompassAnyDungeon", "mapCompassOverworld", "mapCompassAnywhere"], "category": "Setting", "default": "Own Dungeon"}, + "Keysanity": { "type": "Choice", "name": "Small Keys", "options": ["Start With", "Vanilla", "Own Dungeon", "Any Dungeon", "Overworld", "Anywhere"], + "descriptions": ["smallKeyStartWith", "smallKeyVanilla", "smallKeyOwnDungeon", "smallKeyAnyDungeon", "smallKeyOverworld", "smallKeyAnywhere"], "category": "Setting", "default": "Own Dungeon"}, + "GerudoKeys": { "type": "Choice", "name": "Gerudo Fortress Keys", "options": ["Vanilla", "Any Dungeon", "Overworld", "Anywhere"], + "descriptions": ["gerudoKeysVanilla", "gerudoKeysAnyDungeon", "gerudoKeysOverworld", "gerudoKeysAnywhere"]}, + "BossKeysanity": { "type": "Choice", "name": "Boss Keys", "options": ["Start With", "Vanilla", "Own Dungeon", "Any Dungeon", "Overworld", "Anywhere"], + "descriptions": ["bossKeyStartWith", "bossKeyVanilla", "bossKeyOwnDungeon", "bossKeyAnyDungeon", "bossKeyOverworld", "bossKeyAnywhere"], "category": "Setting", "default": "Own Dungeon"}, + "GanonsBossKey": { "type": "Choice", "name": "Ganon's Boss Key", "options": ["Start With", "Vanilla", "Own Dungeon", "Any Dungeon", "Overworld", "Anywhere", "Triforce", + "LACS-Vanilla", "LACS-Medallions", "LACS-Stones", "LACS-Rewards", "LACS-Dungeons", "LACS-Tokens", "LACS-Hearts"], + "descriptions": ["ganonKeyStartWith", "ganonKeyVanilla", "ganonKeyOwnDungeon", "ganonKeyAnyDungeon", "ganonKeyOverworld", "ganonKeyAnywhere", "''", "ganonKeyLACS"], "category": "Setting", "default": "Own Dungeon"}, + "LACSMedallionCount": { "type": "Count", "indent": 2, "name": "Medallion Count", "min": 0, "max": 6, "descriptions": ["lacsMedallionCountDesc"], "category": "Setting", "default": 1, "default_hidden": true}, + "LACSStoneCount": { "type": "Count", "indent": 2, "name": "Stone Count", "min": 0, "max": 3, "descriptions": ["lacsStoneCountDesc"], "category": "Setting", "default": 1, "default_hidden": true}, + "LACSRewardCount": { "type": "Count", "indent": 2, "name": "Reward Count", "min": 0, "max": 9, "descriptions": ["lacsRewardCountDesc"], "category": "Setting", "default": 1, "default_hidden": true}, + "LACSDungeonCount": { "type": "Count", "indent": 2, "name": "Dungeon Count", "min": 0, "max": 8, "descriptions": ["lacsDungeonCountDesc"], "category": "Setting", "default": 1, "default_hidden": true}, + "LACSTokenCount": { "type": "Count", "indent": 2, "name": "Token Count", "min": 0, "max": 100, "descriptions": ["lacsTokenCountDesc"], "category": "Setting", "default": 1, "default_hidden": true}, + "LACSHeartCount": { "type": "Count", "indent": 2, "name": "Heart Count", "min": 0, "max": 20, "descriptions": ["lacsHeartCountDesc"], "category": "Setting", "default": 1, "default_hidden": true}, + "KeyRings": { "type": "Choice", "name": "Key Rings", "options": ["All Off", "All On", "Choose", "Random"], "descriptions": ["keyRingDesc"]}, + "_keyRingOptions": { + "RingFortress": { "type": "Bool", "indent": 2, "name": "Gerudo Fortress", "falsetxt": "Off", "truetxt": "On", "descriptions": ["keyRingDesc"], "category": "Setting"}, + "RingForest": { "type": "Bool", "indent": 2, "name": "Forest Temple", "falsetxt": "Off", "truetxt": "On", "descriptions": ["keyRingDesc"], "category": "Setting"}, + "RingFire": { "type": "Bool", "indent": 2, "name": "Fire Temple", "falsetxt": "Off", "truetxt": "On", "descriptions": ["keyRingDesc"], "category": "Setting"}, + "RingWater": { "type": "Bool", "indent": 2, "name": "Water Temple", "falsetxt": "Off", "truetxt": "On", "descriptions": ["keyRingDesc"], "category": "Setting"}, + "RingSpirit": { "type": "Bool", "indent": 2, "name": "Spirit Temple", "falsetxt": "Off", "truetxt": "On", "descriptions": ["keyRingDesc"], "category": "Setting"}, + "RingShadow": { "type": "Bool", "indent": 2, "name": "Shadow Temple", "falsetxt": "Off", "truetxt": "On", "descriptions": ["keyRingDesc"], "category": "Setting"}, + "RingWell": { "type": "Bool", "indent": 2, "name": "Bottom of the Well", "falsetxt": "Off", "truetxt": "On", "descriptions": ["keyRingDesc"], "category": "Setting"}, + "RingGtg": { "type": "Bool", "indent": 2, "name": "GTG", "falsetxt": "Off", "truetxt": "On", "descriptions": ["keyRingDesc"], "category": "Setting"}, + "RingCastle": { "type": "Bool", "indent": 2, "name": "Ganon's Castle", "falsetxt": "Off", "truetxt": "On", "descriptions": ["keyRingDesc"], "category": "Setting"} + } + }, + "timesaverOptions": { + "SkipChildStealth": { "type": "Bool", "name": "Skip Child Stealth", "falsetxt": "Don't Skip", "truetxt": "Skip", "descriptions": ["childStealthDesc"], "category": "Setting", "default": true}, + "SkipTowerEscape": { "type": "Bool", "name": "Skip Tower Escape", "falsetxt": "Don't Skip", "truetxt": "Skip", "descriptions": ["skipTowerEscapeDesc"], "category": "Setting", "default": true}, + "SkipEponaRace": { "type": "Bool", "name": "Skip Epona Race", "falsetxt": "Don't Skip", "truetxt": "Skip", "descriptions": ["skipEponaRaceDesc"]}, + "SkipMinigamePhases": { "type": "Bool", "name": "Minigames repetitions", "falsetxt": "Don't Skip", "truetxt": "Skip", "descriptions": ["skipMinigamePhasesDesc"]}, + "FreeScarecrow": { "type": "Bool", "name": "Free Scarecrow", "falsetxt": "Off", "truetxt": "On", "descriptions": ["freeScarecrowDesc"]}, + "FourPoesCutscene": { "type": "Bool", "name": "Four Poes Cutscene", "falsetxt": "Don't Skip", "truetxt": "Skip", "descriptions": ["fourPoesDesc"], "category": "Setting", "default": true}, + "LakeHyliaOwl": { "type": "Bool", "name": "Lake Hylia Owl", "falsetxt": "Don't Skip", "truetxt": "Skip", "descriptions": ["lakeHyliaOwlDesc"], "category": "Setting", "default": true}, + "BigPoeTargetCount": { "type": "Count", "name": "Big Poe Target Count", "min": 1, "max": 10, "descriptions": ["bigPoeTargetCountDesc"]}, + "NumRequiredCuccos": { "type": "Count", "name": "Cuccos to return", "min": 0, "max": 7, "descriptions": ["numRequiredCuccosDesc"]}, + "KingZoraSpeed": { "type": "Choice", "name": "King Zora Speed", "options": ["Fast", "Vanilla", "Random", "Custom"], "descriptions": ["kingZoraSpeedFast", "kingZoraSpeedVanilla", "kingZoraSpeedRandom", "kingZoraSpeedCustom"]}, + "ExactZoraSpeed": { "type": "Count", "indent": 2, "name": "Exact Shuffle Count", "min": 1, "max": 128, "descriptions": ["''"]}, + "CompleteMaskQuest": { "type": "Bool", "name": "Complete Mask Quest", "falsetxt": "Off", "truetxt": "On", "descriptions": ["completeMaskDesc"]} + }, + "miscOptions": { + "Racing": { "type": "Bool", "name": "Racing", "falsetxt": "Off", "truetxt": "On", "descriptions": ["racingDesc"]}, + "GossipStoneHints": { "type": "Choice", "name": "Gossip Stone Hints", "options": ["No Hints", "Need Nothing", "Mask of Truth", "Shard of Agony"], "descriptions": ["gossipStonesHintsDesc"], "category": "Setting", "default": "Need Nothing"}, + "HintDistribution": { "type": "Choice", "indent": 2, "name": "Hint Distribution", "options": ["Useless", "Balanced", "Strong", "Very Strong", "Playthrough"], "descriptions": ["uselessHintsDesc", "balancedHintsDesc", "strongHintsDesc", "veryStrongHintsDesc", "playthroughHintsDesc"], "category": "Setting", "default": "Balanced"}, + "BonusGossipHints": { "type": "Bool", "indent": 4, "name": "Bonus Hints", "falsetxt": "Off", "truetxt": "On", "descriptions": ["bonusGossipHintsDesc"]}, + "MiscHints": { "type": "Choice", "name": "Miscellaneous Hints", "options": ["All Disabled", "All Enabled", "Choose"], "descriptions": ["miscHintsDesc"], "category": "Setting", "default": "All Enabled"}, + "ToTAltarHints": { "type": "Bool", "indent": 2, "name": "Temple of Time Altar", "falsetxt": "Off", "truetxt": "On", "descriptions": ["totAltarHintsDesc"]}, + "GanonHints": { "type": "Bool", "indent": 2, "name": "Ganondorf", "falsetxt": "Off", "truetxt": "On", "descriptions": ["ganonHintsDesc"]}, + "DampeHint": { "type": "Bool", "indent": 2, "name": "Dampe's Diary", "falsetxt": "Off", "truetxt": "On", "descriptions": ["dampeHintDesc"]}, + "SkulltulaHints": { "type": "Bool", "indent": 2, "name": "House of Skulltula", "falsetxt": "Off", "truetxt": "On", "descriptions": ["skulltulaHintDesc"]}, + "FishingHints": { "type": "Bool", "indent": 2, "name": "Fishing Prizes", "falsetxt": "Off", "truetxt": "On", "descriptions": ["fishingHintsDesc"]}, + "ClearerHints": { "type": "Choice", "name": "Hint Clarity", "options": ["Obscure", "Ambiguous", "Clear"], "descriptions": ["obscureHintsDesc", "ambiguousHintsDesc", "clearHintsDesc"]}, + "CompassesShowReward": { "type": "Bool", "name": "Compasses Show Rewards", "falsetxt": "No", "truetxt": "Yes", "descriptions": ["compassesShowRewardsDesc"]}, + "CompassesShowWotH": { "type": "Bool", "name": "Compasses Show WotH", "falsetxt": "No", "truetxt": "Yes", "descriptions": ["compassesShowWotHDesc"], "category": "Setting", "default": true}, + "MapsShowDungeonMode": { "type": "Bool", "name": "Maps Show Dungeon Modes","falsetxt": "No", "truetxt": "Yes", "descriptions": ["mapsShowDungeonModesDesc"], "category": "Setting", "default": true}, + "StartingTime": { "type": "Choice", "name": "Starting Time", "options": ["Day", "Night"], "descriptions": ["startingTimeDesc"]}, + "ChestAnimations": { "type": "Bool", "name": "Chest Animations", "options": ["Always Fast", "Match Contents"], "descriptions": ["chestAnimDesc"]}, + "ChestAppearance": { "type": "Choice", "name": "Chest Appearance Mod", "options": ["Vanilla", "Texture", "Size + Texture", "Classic CSMC"], "descriptions": ["chestVanillaDesc", "chestTextureDesc", "chestSizeTextureDesc", "chestClassicDesc"]}, + "ChestAgony": { "type": "Bool", "indent": 2, "name": "Need Shard of Agony", "falsetxt": "No", "truetxt": "Yes", "descriptions": ["chestAgonyDesc"]}, + "GenerateSpoilerLog": { "type": "Bool", "name": "Generate Spoiler Log", "falsetxt": "No", "truetxt": "Yes", "descriptions": ["''"], "category": "Setting", "default": true}, + "IngameSpoilers": { "type": "Bool", "name": "Ingame Spoilers", "falsetxt": "Hide", "truetxt": "Show", "descriptions": ["ingameSpoilersHideDesc", "ingameSpoilersShowDesc"]} + }, + "itemUsabilityOptions": { + "FaroresWindAnywhere": { "type": "Bool", "name": "Farore's Wind Anywhere", "falsetxt": "Disabled", "truetxt": "Enabled", "descriptions": ["faroresWindAnywhereDesc"]}, + "AgeItemsToggle": { "type": "Choice", "name": "Lift Age Restrictions", "options": ["All Disabled", "All Enabled", "Choose"], "descriptions": ["ageRestrictionsDesc"]}, + "AgeItemsInLogic": { "type": "Bool", "indent": 1, "name": "Consider in Logic", "falsetxt": "No", "truetxt": "Yes", "descriptions": ["ageItemsInLogicDesc"]}, + "StickAsAdult": { "type": "Bool", "indent": 2, "name": "Adult Deku Stick", "falsetxt": "Disabled", "truetxt": "Enabled", "descriptions": ["adultStickDesc"]}, + "BoomerangAsAdult": { "type": "Bool", "indent": 2, "name": "Adult Boomerang", "falsetxt": "Disabled", "truetxt": "Enabled", "descriptions": ["adultBoomerangDesc"]}, + "HammerAsChild": { "type": "Bool", "indent": 2, "name": "Child Hammer", "falsetxt": "Disabled", "truetxt": "Enabled", "descriptions": ["childHammerDesc"]}, + "SlingshotAsAdult": { "type": "Bool", "indent": 2, "name": "Adult Slingshot", "falsetxt": "Disabled", "truetxt": "Enabled", "descriptions": ["adultSlingshotDesc"]}, + "BowAsChild": { "type": "Bool", "indent": 2, "name": "Child Bow", "falsetxt": "Disabled", "truetxt": "Enabled", "descriptions": ["childBowDesc"]}, + "HookshotAsChild": { "type": "Bool", "indent": 2, "name": "Child Hookshot", "falsetxt": "Disabled", "truetxt": "Enabled", "descriptions": ["childHookshotDesc"]}, + "IronBootsAsChild": { "type": "Bool", "indent": 2, "name": "Child Iron Boots", "falsetxt": "Disabled", "truetxt": "Enabled", "descriptions": ["childIronBootsDesc"]}, + "HoverBootsAsChild": { "type": "Bool", "indent": 2, "name": "Child Hover Boots", "falsetxt": "Disabled", "truetxt": "Enabled", "descriptions": ["childHoverBootsDesc"]}, + "MasksAsAdult": { "type": "Bool", "indent": 2, "name": "Adult Masks", "falsetxt": "Disabled", "truetxt": "Enabled", "descriptions": ["adultMasksDesc"]}, + "KokiriSwordAsAdult": { "type": "Bool", "indent": 2, "name": "Adult Kokiri Sword", "falsetxt": "Disabled", "truetxt": "Enabled", "descriptions": ["adultKokiriSwordDesc"]}, + "MasterSwordAsChild": { "type": "Bool", "indent": 2, "name": "Child Master Sword", "falsetxt": "Disabled", "truetxt": "Enabled", "descriptions": ["childMasterSwordDesc"]}, + "BiggoronSwordAsChild":{ "type": "Bool", "indent": 2, "name": "Child Biggoron Sword", "falsetxt": "Disabled", "truetxt": "Enabled", "descriptions": ["childBiggoronSwordDesc"]}, + "DekuShieldAsAdult": { "type": "Bool", "indent": 2, "name": "Adult Deku Shield", "falsetxt": "Disabled", "truetxt": "Enabled", "descriptions": ["adultDekuShieldDesc"]}, + "MirrorShieldAsChild": { "type": "Bool", "indent": 2, "name": "Child Mirror Shield", "falsetxt": "Disabled", "truetxt": "Enabled", "descriptions": ["childMirrorShieldDesc"]}, + "GoronTunicAsChild": { "type": "Bool", "indent": 2, "name": "Child Goron Tunic", "falsetxt": "Disabled", "truetxt": "Enabled", "descriptions": ["childGoronTunicDesc"]}, + "ZoraTunicAsChild": { "type": "Bool", "indent": 2, "name": "Child Zora Tunic", "falsetxt": "Disabled", "truetxt": "Enabled", "descriptions": ["childZoraTunicDesc"]}, + "RestoreISG": { "type": "Bool", "name": "Restore ISG", "falsetxt": "Disabled", "truetxt": "Enabled", "descriptions": ["restoreISGdesc"], "category": "Setting", "default": true}, + "GkDurability": { "type": "Choice", "name": "GK Durability", "options": ["Vanilla", "Random Risk", "Random Safe"], "descriptions": ["gkDurabilityVanilla", "gkDurabilityRandomRisk", "gkDurabilityRandomSafe"]}, + "RetroAmmo": { "type": "Bool", "name": "Rupees as Ammo", "falsetxt": "Disabled", "truetxt": "Enabled", "descriptions": ["retroAmmoDesc"]} + }, + "itemPoolOptions": { + "ItemPoolValue": { "type": "Choice", "name": "Item Pool", "options": ["Minimal", "Scarce", "Balanced", "Plentiful"], "descriptions": ["itemPoolMinimal", "itemPoolScarce", "itemPoolBalanced", "itemPoolPlentiful"], "category": "Setting", "default": "Balanced"}, + "IceTrapValue": { "type": "Choice", "name": "Ice Traps", "options": ["Off", "Normal", "Extra", "Mayhem", "Onslaught"], "descriptions": ["iceTrapsOff", "iceTrapsNormal", "iceTrapsExtra", "iceTrapsMayhem", "iceTrapsOnslaught"], "category": "Setting", "default": "Normal"}, + "RemoveDoubleDefense": { "type": "Bool", "name": "Remove Double Defense", "falsetxt": "No", "truetxt": "Yes", "descriptions": ["removeDDDesc"]}, + "ProgressiveGoronSword": { "type": "Bool", "name": "Prog Goron Sword", "falsetxt": "Disabled", "truetxt": "Enabled", "descriptions": ["progGoronSword"]} + }, + "gameplayOptions": { + "FastBunnyHood": { "type": "Bool", "name": "Fast Bunny Hood", "falsetxt": "Off", "truetxt": "On", "descriptions": ["fastBunnyHoodDesc"]}, + "KeepFWWarpPoint": { "type": "Bool", "name": "Keep FW Warp Point", "falsetxt": "Off", "truetxt": "On", "descriptions": ["keepFWWarpPointDesc"]}, + "DamageMultiplier": { "type": "Choice", "name": "Damage Multiplier", "options": ["x1/2", "x1", "x2", "x4", "x8", "x16", "OHKO"], "descriptions": ["damageMultiDesc"], "category": "Setting", "default": "x1"}, + "BonkDamage": { "type": "Choice", "name": "Bonk Damage", "options": ["0", "1/4", "1/2", "1", "2", "4", "OHKO"], "descriptions": ["bonkDamageDesc"]}, + "Permadeath": { "type": "Bool", "name": "Permadeath", "falsetxt": "Off", "truetxt": "On", "descriptions": ["permadeathDesc"]}, + "GloomMode": { "type": "Choice", "name": "Gloom Mode", "options": ["Off", "Death", "Damage", "Collision", "Empty"], "descriptions": ["gloomModeOffDesc", "gloomModeDeathDesc", "gloomModeDamageDesc", "gloomModeCollisionDesc", "gloomModeEmptyDesc"]}, + "RandomTrapDmg": { "type": "Choice", "name": "Random Trap Damage", "options": ["Off", "Basic", "Advanced"], "descriptions": ["randomTrapDmgDesc", "basicTrapDmgDesc", "advancedTrapDmgDesc"], "category": "Setting", "default": "Basic"}, + "FireTrap": { "type": "Bool", "indent": 2, "name": "Fire Trap", "falsetxt": "Off", "truetxt": "On", "descriptions": ["fireTrapDesc"], "category": "Setting", "default": true}, + "AntiFairyTrap": { "type": "Bool", "indent": 2, "name": "Anti-Fairy Trap", "falsetxt": "Off", "truetxt": "On", "descriptions": ["antiFairyTrapDesc"], "category": "Setting", "default": true}, + "RupoorTrap": { "type": "Bool", "indent": 2, "name": "Rupoor Trap", "falsetxt": "Off", "truetxt": "On", "descriptions": ["rupoorTrapDesc"], "category": "Setting", "default": true}, + "RupoorTrapSeverity": { "type": "Choice", "indent": 4, "name": "Severity", "options": ["10", "Random Ratio", "Bankruptcy"], "descriptions": ["rupoorTrapSeverityDesc"], "category": "Setting", "default": "10"}, + "CurseTraps": { "type": "Bool", "indent": 2, "name": "Curse Traps", "falsetxt": "Off", "truetxt": "On", "descriptions": ["curseTrapsDesc"], "category": "Setting"}, + "ScreenTraps": { "type": "Bool", "indent": 4, "name": "Screen Traps", "falsetxt": "Off", "truetxt": "On", "descriptions": ["screenTrapsDesc"], "category": "Setting"}, + "ExtraArrowEffects": { "type": "Bool", "name": "Extra Arrow Effects", "falsetxt": "Off", "truetxt": "On", "descriptions": ["extraArrowEffectsDesc"]}, + "HyperActors": { "type": "Choice", "name": "Hyper Actors", "options": ["All Off", "All On", "Choose"], "descriptions": ["hyperActorsDesc"]}, + "HyperBosses": { "type": "Bool", "indent": 2, "name": "Hyper Bosses", "falsetxt": "Off", "truetxt": "On", "descriptions": ["hyperBossesDesc"]}, + "HyperMiddleBosses": { "type": "Bool", "indent": 2, "name": "Hyper Middle Bosses", "falsetxt": "Off", "truetxt": "On", "descriptions": ["hyperMiddleBossesDesc"]}, + "HyperEnemies": { "type": "Bool", "indent": 2, "name": "Hyper Enemies", "falsetxt": "Off", "truetxt": "On", "descriptions": ["hyperEnemiesDesc"]}, + "FreeCamera": { "type": "Bool", "name": "Free Camera", "falsetxt": "Off", "truetxt": "On", "descriptions": ["freeCamDesc"], "category": "Setting", "default": true}, + "RandomGsLocations": { "type": "Bool", "name": "Random GS Locations", "falsetxt": "Off", "truetxt": "On", "descriptions": ["randomGsLocationsDesc"]}, + "GsLocGuaranteeNew": { "type": "Bool", "indent": 2, "name": "Guarantee New", "falsetxt": "Off", "truetxt": "On", "descriptions": ["gsLocGuaranteeNewDesc"]}, + "RandomSongNotes": { "type": "Bool", "name": "Random Ocarina Melodies", "falsetxt": "Off", "truetxt": "On", "descriptions": ["randomSongNotesDesc"]} + }, + "startingItemsOptions": { + "StartingStickCapacity": { "type": "Choice", "name": "Deku Stick Capacity", "options": ["10 Deku Sticks", "20 Deku Sticks", "30 Deku Sticks"], "descriptions": ["''"]}, + "StartingNutCapacity": { "type": "Choice", "name": "Deku Nut Capacity", "options": ["20 Deku Nuts", "30 Deku Nuts", "40 Deku Nuts"], "descriptions": ["''"]}, + "StartingSlingshot": { "type": "Choice", "name": "Slingshot", "options": ["Off", "Slingshot (30)", "Slingshot (40)", "Slingshot (50)"], "descriptions": ["''"]}, + "StartingOcarina": { "type": "Choice", "name": "Ocarina", "options": ["Off", "Fairy Ocarina", "Ocarina of Time"], "descriptions": ["''"]}, + "StartingBombBag": { "type": "Choice", "name": "Bombs", "options": ["Off", "Bomb Bag (20)", "Bomb Bag (30)", "Bomb Bag (40)"], "descriptions": ["''"]}, + "StartingBombchus": { "type": "Choice", "name": "Bombchus", "options": ["Off", "20 Bombchus", "50 Bombchus"], "descriptions": ["''"]}, + "StartingBoomerang": { "type": "Bool", "name": "Boomerang", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingHookshot": { "type": "Choice", "name": "Hookshot", "options": ["Off", "Hookshot", "Longshot"], "descriptions": ["''"]}, + "StartingBow": { "type": "Choice", "name": "Bow", "options": ["Off", "Bow (30)", "Bow (40)", "Bow (50)"], "descriptions": ["''"]}, + "StartingFireArrows": { "type": "Bool", "name": "Fire Arrow", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingIceArrows": { "type": "Bool", "name": "Ice Arrow", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingLightArrows": { "type": "Bool", "name": "Light Arrow", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingMegatonHammer": { "type": "Bool", "name": "Megaton Hammer", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingIronBoots": { "type": "Bool", "name": "Iron Boots", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingHoverBoots": { "type": "Bool", "name": "Hover Boots", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingLensOfTruth": { "type": "Bool", "name": "Lens of Truth", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingDinsFire": { "type": "Bool", "name": "Din's Fire", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingFaroresWind": { "type": "Bool", "name": "Farore's Wind", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingNayrusLove": { "type": "Bool", "name": "Nayru's Love", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingMagicBean": { "type": "Bool", "name": "Magic Beans", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingBottle1": { "type": "Choice", "name": "Bottle 1", "options": "bottleOptions", "descriptions": ["''"]}, + "StartingBottle2": { "type": "Choice", "name": "Bottle 2", "options": "bottleOptions", "descriptions": ["''"]}, + "StartingBottle3": { "type": "Choice", "name": "Bottle 3", "options": "bottleOptions", "descriptions": ["''"]}, + "StartingBottle4": { "type": "Choice", "name": "Bottle 4", "options": "bottleOptions", "descriptions": ["''"]}, + "StartingRutoBottle": { "type": "Bool", "name": "Ruto's Letter", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingChildTrade": { "type": "Bool", "name": "Bunny Hood", "falsetxt": "Off", "truetxt": "On", "descriptions": ["startingBunnyHoodDesc"]} + }, + "startingSongsOptions": { + "StartingZeldasLullaby": { "type": "Bool", "name": "Zelda's Lullaby", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingEponasSong": { "type": "Bool", "name": "Epona's Song", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingSariasSong": { "type": "Bool", "name": "Saria's Song", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingSunsSong": { "type": "Bool", "name": "Sun's Song", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingSongOfTime": { "type": "Bool", "name": "Song of Time", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingSongOfStorms": { "type": "Bool", "name": "Song of Storms", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingMinuetOfForest": { "type": "Bool", "name": "Minuet of Forest", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingBoleroOfFire": { "type": "Bool", "name": "Bolero of Fire", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingSerenadeOfWater": { "type": "Bool", "name": "Serenade of Water", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingRequiemOfSpirit": { "type": "Bool", "name": "Requiem of Spirit", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingNocturneOfShadow": { "type": "Bool", "name": "Nocturne of Shadow", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingPreludeOfLight": { "type": "Bool", "name": "Prelude of Light", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]} + }, + "startingEquipmentOptions": { + "StartingKokiriSword": { "type": "Bool", "name": "Kokiri Sword", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingMasterSword": { "type": "Bool", "name": "Master Sword", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingBiggoronSword": { "type": "Choice", "name": "Biggoron Sword", "options": ["Off", "Giant's Knife", "Biggoron Sword"], "descriptions": ["''"]}, + "StartingDekuShield": { "type": "Bool", "name": "Deku Shield", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingHylianShield": { "type": "Bool", "name": "Hylian Shield", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingMirrorShield": { "type": "Bool", "name": "Mirror Shield", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingGoronTunic": { "type": "Bool", "name": "Goron Tunic", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingZoraTunic": { "type": "Bool", "name": "Zora Tunic", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingStrength": { "type": "Choice", "name": "Strength Upgrade", "options": ["Off", "Goron Bracelet", "Silver Gauntlet", "Golden Gauntlet"], "descriptions": ["''"]}, + "StartingScale": { "type": "Choice", "name": "Scale Upgrade", "options": ["Off", "Silver Scale", "Golden Scale"], "descriptions": ["''"]}, + "StartingWallet": { "type": "Choice", "name": "Wallet Upgrade", "options": ["Off", "Adult's Wallet", "Giant's Wallet", "Tycoon's Wallet"], "descriptions": ["''"]}, + "StartingShardOfAgony": { "type": "Bool", "name": "Shard of Agony", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingHearts": { "type": "Count", "name": "Hearts", "min": 0, "max": 20, "descriptions": ["startingHealthDesc", "''"], "category": "Setting", "default": 3}, + "StartingMagicMeter": { "type": "Choice", "name": "Magic Meter", "options": ["Off", "Single Magic", "Double Magic"], "descriptions": ["''"]}, + "StartingDoubleDefense": { "type": "Bool", "name": "Double Defense", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]} + }, + "startingStonesMedallionsOptions": { + "StartingKokiriEmerald": { "type": "Bool", "name": "Kokiri's Emerald", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingGoronRuby": { "type": "Bool", "name": "Goron's Ruby", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingZoraSapphire": { "type": "Bool", "name": "Zora's Sapphire", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingLightMedallion": { "type": "Bool", "name": "Light Medallion", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingForestMedallion": { "type": "Bool", "name": "Forest Medallion", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingFireMedallion": { "type": "Bool", "name": "Fire Medallion", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingWaterMedallion": { "type": "Bool", "name": "Water Medallion", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingSpiritMedallion": { "type": "Bool", "name": "Spirit Medallion", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingShadowMedallion": { "type": "Bool", "name": "Shadow Medallion", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]} + }, + "startingOcarinaButtonsOptions": { + "StartingOcarinaButtonL": { "type": "Bool", "name": "Ocarina Button L", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingOcarinaButtonR": { "type": "Bool", "name": "Ocarina Button R", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingOcarinaButtonX": { "type": "Bool", "name": "Ocarina Button X", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingOcarinaButtonY": { "type": "Bool", "name": "Ocarina Button Y", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]}, + "StartingOcarinaButtonA": { "type": "Bool", "name": "Ocarina Button A", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"]} + }, + "startingOthersOptions": { + "StartingConsumables": { "type": "Bool", "name": "Start with Consumables", "falsetxt": "No", "truetxt": "Yes", "descriptions": ["startWithConsumablesDesc"]}, + "StartingMaxRupees": { "type": "Bool", "name": "Start with Max Rupees", "falsetxt": "No", "truetxt": "Yes", "descriptions": ["startWithMaxRupeesDesc"]}, + "StartingSkulltulaToken": { "type": "Count", "name": "Gold Skulltula Tokens", "min": 0, "max": 100, "descriptions": ["''"]} + }, + "logicOptions": { + "Logic": { "type": "Choice", "name": "Logic", "options": ["Glitchless", "Glitched", "No Logic", "Vanilla"], "descriptions": ["logicGlitchless", "logicGlitched", "logicNoLogic", "logicVanilla"]}, + "LocationsReachable": { "type": "Bool", "name": "All Locations Reachable", "falsetxt": "Off", "truetxt": "On", "descriptions": ["locationsReachableDesc"], "category": "Setting", "default": true}, + "NightGSExpectSuns": { "type": "Bool", "name": "Night GSs Expect Sun's", "falsetxt": "Off", "truetxt": "On", "descriptions": ["nightGSDesc"]} + }, + "trickOptions": { + "ToggleAllTricks": { "type": "Choice", "name": "All Tricks", "options": ["None", "Novice", "Intermediate", "Expert"], "descriptions": ["ToggleLogicNoneDesc", "ToggleLogicNoviceDesc", "ToggleLogicIntermediateDesc", "ToggleLogicExpertDesc"], "category": "Toggle"}, + "LogicGrottosWithoutAgony": { "type": "LogicTrick", "name": "Grotto Access\\n w/o Shard of Agony", "descriptions": ["LogicGrottosWithoutAgonyDesc"]}, + "LogicVisibleCollision": { "type": "LogicTrick", "name": "Go Through Visible\\n One-Way Collisions", "descriptions": ["LogicVisibleCollisionDesc"]}, + "LogicFewerTunicRequirements": { "type": "LogicTrick", "name": "Fewer Tunic\\n Requirements", "descriptions": ["LogicFewerTunicRequirementsDesc"]}, + "LogicLostWoodsGSBean": { "type": "LogicTrick", "name": "LW Adult Tree GS\\n w/o Magic Beans", "descriptions": ["LogicLostWoodsGSBeanDesc"]}, + "LogicLabDiving": { "type": "LogicTrick", "name": "LH Lab Dive\\n w/o Gold Scale", "descriptions": ["LogicLabDivingDesc"]}, + "LogicLabWallGS": { "type": "LogicTrick", "name": "LH Lab Wall GS\\n w/ Jump Slash", "descriptions": ["LogicLabWallGSDesc"]}, + "LogicGraveyardPoH": { "type": "LogicTrick", "name": "GY Crate PoH\\n w/ Boomerang", "descriptions": ["LogicGraveyardPoHDesc"]}, + "LogicChildDampeRacePoH": { "type": "LogicTrick", "name": "GY Second Dampe\\n Race as Child", "descriptions": ["LogicChildDampeRacePoHDesc"]}, + "LogicGVHammerChest": { "type": "LogicTrick", "name": "GV Hammer Chest\\n w/o Hammer", "descriptions": ["LogicGVHammerChestDesc"]}, + "LogicGerudoKitchen": { "type": "LogicTrick", "name": "GF Through Kitchen\\n w/ Nothing", "descriptions": ["LogicGerudoKitchenDesc"]}, + "LogicGerudoChildClimb": { "type": "LogicTrick", "name": "GF Top Floor\\n as child", "descriptions": ["LogicGerudoChildClimbDesc"]}, + "LogicLensWasteland": { "type": "LogicTrick", "name": "Haunted Wasteland\\n w/o Lens of Truth", "descriptions": ["LogicLensWastelandDesc"]}, + "LogicReverseWasteland": { "type": "LogicTrick", "name": "Haunted Wasteland\\n in Reverse", "descriptions": ["LogicReverseWastelandDesc"]}, + "LogicColossusGS": { "type": "LogicTrick", "name": "Colossus Hill GS\\n w/ Hookshot", "descriptions": ["LogicColossusGSDesc"]}, + "LogicOutsideGanonsGS": { "type": "LogicTrick", "name": "Outside GaC GS\\n w/ Jump Slash", "descriptions": ["LogicOutsideGanonsGSDesc"]}, + "LogicManOnRoof": { "type": "LogicTrick", "name": "Kak Roof Guy\\n w/o Hookshot", "descriptions": ["LogicManOnRoofDesc"]}, + "LogicWindmillPoHHookshot": { "type": "LogicTrick", "name": "Windmill PoH\\n w/ Hookshot", "descriptions": ["LogicWindmillPoHHookshotDesc"]}, + "LogicDMTBombable": { "type": "LogicTrick", "name": "DMT Wall Chest\\n w/ Strength", "descriptions": ["LogicDMTBombableDesc"]}, + "LogicDMTSoilGS": { "type": "LogicTrick", "name": "DMT Soil GS\\n w/o Opening DC", "descriptions": ["LogicDMTSoilGSDesc"]}, + "LogicDMCPlatformJump": { "type": "LogicTrick", "name": "DMC Scarecrow Rupee\\n circle w/ nothing", "descriptions": ["LogicDMCPlatformJumpDesc"]}, + "LogicDMTSummitHover": { "type": "LogicTrick", "name": "DMT Summit\\n w/ Hover Boots", "descriptions": ["LogicDMTSummitHoverDesc"]}, + "LogicLinkGoronDins": { "type": "LogicTrick", "name": "GoC Adult Goron\\n w/ Din's Fire", "descriptions": ["LogicLinkGoronDinsDesc"]}, + "LogicGoronCityLeftMost": { "type": "LogicTrick", "name": "GoC Maze Left Chest\\n w/ Hover Boots", "descriptions": ["LogicGoronCityLeftMostDesc"]}, + "LogicGoronCityPot": { "type": "LogicTrick", "name": "GoC Goron Vase PoH\\n w/ Bombchu", "descriptions": ["LogicGoronCityPotDesc"]}, //Needs Testing + "LogicGoronCityPotWithStrength": { "type": "LogicTrick", "name": "GoC Goron Vase PoH\\n w/ Strength", "descriptions": ["LogicGoronCityPotWithStrengthDesc"]}, + "LogicChildRollingWithStrength": { "type": "LogicTrick", "name": "GoC Child Goron\\n w/ Strength", "descriptions": ["LogicChildRollingWithStrengthDesc"]}, + "LogicCraterUpperToLower": { "type": "LogicTrick", "name": "DMC Upper to Lower\\n w/ Hammer", "descriptions": ["LogicCraterUpperToLowerDesc"]}, //Needs Testing + "LogicCraterBeanPoHWithHovers": { "type": "LogicTrick", "name": "DMC Bean PoH\\n w/ Hover Boots", "descriptions": ["LogicCraterBeanPoHWithHoversDesc"]}, + "LogicBiggoronBolero": { "type": "LogicTrick", "name": "DMC Deliver Eyedrops\\n w/ Bolero of Fire", "descriptions": ["LogicBiggoronBoleroDesc"]}, + "LogicZoraRiverLower": { "type": "LogicTrick", "name": "ZR Lower PoH\\n w/ Nothing", "descriptions": ["LogicZoraRiverLowerDesc"]}, + "LogicZoraRiverUpper": { "type": "LogicTrick", "name": "ZR Upper PoH\\n w/ Nothing", "descriptions": ["LogicZoraRiverUpperDesc"]}, + "LogicZoraRiverRupeesJump": { "type": "LogicTrick", "name": "ZR Under waterfall\\n rupees w/o Iron boots","descriptions": ["LogicZoraRiverRupeesJumpDesc"]}, + "LogicZFGreatFairy": { "type": "LogicTrick", "name": "ZF Great Fairy\\n w/o Explosives", "descriptions": ["LogicZFGreatFairyDesc"]}, + "LogicDekuB1WebsWithBow": { "type": "LogicTrick", "name": "DT B1 Web\\n w/ Bow", "descriptions": ["LogicDekuB1WebsWithBowDesc"]}, + "LogicDekuB1Skip": { "type": "LogicTrick", "name": "DT B1 Navigation\\n w/o Slingshot", "descriptions": ["LogicDekuB1SkipDesc"]}, + "LogicDekuBasementGS": { "type": "LogicTrick", "name": "DT B1 Vines GS\\n w/ Jump Slash", "descriptions": ["LogicDekuBasementGSDesc"]}, + "LogicDCStaircase": { "type": "LogicTrick", "name": "DC Staircase\\n w/ Bow", "descriptions": ["LogicDCStaircaseDesc"]}, + "LogicDCJump": { "type": "LogicTrick", "name": "DC Spike Trap Room\\n w/o Hover Boots", "descriptions": ["LogicDCJumpDesc"]}, + "LogicDCSlingshotSkip": { "type": "LogicTrick", "name": "DC Eye Switches\\n w/o Slingshot", "descriptions": ["LogicDCSlingshotSkipDesc"]}, + "LogicDCScarecrowGS": { "type": "LogicTrick", "name": "DC Scarecrow GS\\n w/ Armos Statue", "descriptions": ["LogicDCScarecrowGSDesc"]}, + "LogicJabuBossGSAdult": { "type": "LogicTrick", "name": "JJB Near Boss GS\\n as Adult", "descriptions": ["LogicJabuBossGSAdultDesc"]}, //Needs Testing + "LogicJabuScrubJumpDive": { "type": "LogicTrick", "name": "JJB Deku Scrub\\n as Adult", "descriptions": ["LogicJabuScrubJumpDiveDesc"]}, //Needs Testing + "LogicForestOutsideBackdoor": { "type": "LogicTrick", "name": "FoT West Backdoor\\n w/ Jump Slash", "descriptions": ["LogicForestOutsideBackdoorDesc"]}, //Needs Testing + "LogicForestDoorFrame": { "type": "LogicTrick", "name": "FoT East Scarecrow\\n w/ Hover Boots", "descriptions": ["LogicForestDoorFrameDesc"]}, //Needs Testing + "LogicForestOutdoorEastGS": { "type": "LogicTrick", "name": "FoT East Yard GS\\n w/ Boomerang", "descriptions": ["LogicForestOutdoorEastGSDesc"]}, + "LogicFireBossDoorJump": { "type": "LogicTrick", "name": "FiT Boss Door\\n w/o Hover Boots", "descriptions": ["LogicFireBossDoorJumpDesc"]}, + "LogicFireStrength": { "type": "LogicTrick", "name": "FiT Climb Block\\n w/o Strength", "descriptions": ["LogicFireStrengthDesc"]}, + "LogicFireScarecrow": { "type": "LogicTrick", "name": "FiT East Tower\\n w/o Scarecrow", "descriptions": ["LogicFireScarecrowDesc"]}, + "LogicFireFlameMaze": { "type": "LogicTrick", "name": "FiT Firewall Maze\\n w/ Nothing", "descriptions": ["LogicFireFlameMazeDesc"]}, + "LogicFireSongOfTime": { "type": "LogicTrick", "name": "FiT SoT Room GS\\n w/o SoT", "descriptions": ["LogicFireSongOfTimeDesc"]}, + "LogicWaterTempleTorchLongshot": { "type": "LogicTrick", "name": "WaT Torch Longshot\\n Shortcut", "descriptions": ["LogicWaterTempleTorchLongshotDesc"]}, + "LogicWaterTempleUpperBoost": { "type": "LogicTrick", "name": "WaT Boss Ledge\\n w/ Bombs", "descriptions": ["LogicWaterTempleUpperBoostDesc"]}, + "LogicWaterCentralBow": { "type": "LogicTrick", "name": "WaT Bow Target\\n w/o Longshot/Hover", "descriptions": ["LogicWaterCentralBowDesc"]}, + "LogicWaterCentralGSFW": { "type": "LogicTrick", "name": "WaT Center Room GS\\n w/ Farore's Wind", "descriptions": ["LogicWaterCentralGSFWDesc"]}, + "LogicWaterCrackedWallNothing": { "type": "LogicTrick", "name": "WaT Cracked Wall\\n w/ Nothing", "descriptions": ["LogicWaterCrackedWallNothingDesc"]}, + "LogicWaterCrackedWallHovers": { "type": "LogicTrick", "name": "WaT Cracked Wall\\n w/ Hover Boots", "descriptions": ["LogicWaterCrackedWallHoversDesc"]}, + "LogicWaterBossKeyRegion": { "type": "LogicTrick", "name": "WaT B1 North Area\\n w/ Hover Boots", "descriptions": ["LogicWaterBossKeyRegionDesc"]}, + "LogicWaterBKJumpDive": { "type": "LogicTrick", "name": "WaT Boss Key Room\\n w/o Iron Boots", "descriptions": ["LogicWaterBKJumpDiveDesc"]}, + "LogicWaterNorthBasementLedgeJump": { "type": "LogicTrick", "name": "WaT Boss Key Rooms\\n w/ Precise Jump", "descriptions": ["LogicWaterNorthBasementLedgeJumpDesc"]}, + "LogicWaterDragonAdult": { "type": "LogicTrick", "name": "WaT Whirlpool\\n w/o Iron Boots", "descriptions": ["LogicWaterDragonAdultDesc"]}, + "LogicWaterDragonJumpDive": { "type": "LogicTrick", "name": "WaT Whirlpool Up\\n w/o Iron Boots", "descriptions": ["LogicWaterDragonJumpDiveDesc"]}, + "LogicWaterRiverGS": { "type": "LogicTrick", "name": "WaT River GS\\n w/o Iron Boots", "descriptions": ["LogicWaterRiverGSDesc"]}, + "LogicWaterFallingPlatformGS": { "type": "LogicTrick", "name": "WaT Waterfall GS\\n w/ Hookshot", "descriptions": ["LogicWaterFallingPlatformGSDesc"]}, + "LogicSpiritLowerAdultSwitch": { "type": "LogicTrick", "name": "SpT Ceiling Switch\\n w/ Bombs", "descriptions": ["LogicSpiritLowerAdultSwitchDesc"]}, + "LogicSpiritChildBombchu": { "type": "LogicTrick", "name": "SpT Child Bridge\\n w/ Bombchu", "descriptions": ["LogicSpiritChildBombchuDesc"]}, + "LogicSpiritWall": { "type": "LogicTrick", "name": "SpT Shifting Wall\\n w/ Nothing", "descriptions": ["LogicSpiritWallDesc"]}, + "LogicSpiritLobbyGS": { "type": "LogicTrick", "name": "SpT Main Room GS\\n w/ Boomerang", "descriptions": ["LogicSpiritLobbyGSDesc"]}, + "LogicSpiritMapChest": { "type": "LogicTrick", "name": "SpT Map Chest\\n w/ Bow", "descriptions": ["LogicSpiritMapChestDesc"]}, + "LogicSpiritSunChest": { "type": "LogicTrick", "name": "SpT Sun Block Room\\n w/ Bow", "descriptions": ["LogicSpiritSunChestDesc"]}, + "LogicShadowFireArrowEntry": { "type": "LogicTrick", "name": "ShT Entry\\n w/ Fire Arrows", "descriptions": ["LogicShadowFireArrowEntryDesc"]}, //Needs Testing + "LogicShadowUmbrella": { "type": "LogicTrick", "name": "ShT Stone Umbrella\\n w/ Hover Boots", "descriptions": ["LogicShadowUmbrellaDesc"]}, + "LogicShadowFreestandingKey": { "type": "LogicTrick", "name": "ShT Skull Vase Key\\n w/ Bombchu", "descriptions": ["LogicShadowFreestandingKeyDesc"]}, + "LogicShadowStatue": { "type": "LogicTrick", "name": "ShT River Statue\\n w/ Bombchu", "descriptions": ["LogicShadowStatueDesc"]}, + "LogicShadowBongo": { "type": "LogicTrick", "name": "ShT Bongo\\n w/o Projectiles", "descriptions": ["LogicShadowBongoDesc"]}, + "LogicChildDeadhand": { "type": "LogicTrick", "name": "BotW Deadhand\\n w/o Sword", "descriptions": ["LogicChildDeadhandDesc"]}, + "LogicGtgWithoutHookshot": { "type": "LogicTrick", "name": "GTG West Silver Rupee\\n w/o Hookshot", "descriptions": ["LogicGtgWithoutHookshotDesc"]}, + "LogicGtgFakeWall": { "type": "LogicTrick", "name": "GTG Invisible Wall\\n w/ Hover Boots", "descriptions": ["LogicGtgFakeWallDesc"]}, + "LogicLensSpirit": { "type": "LogicTrick", "name": "SpT Navigate\\n w/o Lens of Truth", "descriptions": ["LogicLensSpiritDesc"]}, + "LogicLensShadow": { "type": "LogicTrick", "name": "ShT Early Rooms\\n w/o Lens of Truth", "descriptions": ["LogicLensShadowDesc"]}, + "LogicLensShadowBack": { "type": "LogicTrick", "name": "ShT Later Rooms\\n w/o Lens of Truth", "descriptions": ["LogicLensShadowBackDesc"]}, + "LogicLensBotw": { "type": "LogicTrick", "name": "BotW Navigate\\n w/o Lens of Truth", "descriptions": ["LogicLensBotwDesc"]}, + "LogicLensGtg": { "type": "LogicTrick", "name": "GTG Navigate\\n w/o Lens of Truth", "descriptions": ["LogicLensGtgDesc"]}, + "LogicLensCastle": { "type": "LogicTrick", "name": "GaC Navigate\\n w/o Lens of Truth", "descriptions": ["LogicLensCastleDesc"]}, + "LogicLensJabuMQ": { "type": "LogicTrick", "name": "JJB MQ Navigate\\n w/o Lens of Truth", "descriptions": ["LogicLensJabuMQDesc"]}, + "LogicLensSpiritMQ": { "type": "LogicTrick", "name": "SpT MQ Navigate\\n w/o Lens of Truth", "descriptions": ["LogicLensSpiritMQDesc"]}, + "LogicLensShadowMQ": { "type": "LogicTrick", "name": "ShT MQ Early Rooms\\n w/o Lens of Truth", "descriptions": ["LogicLensShadowMQDesc"]}, + "LogicLensShadowMQBack": { "type": "LogicTrick", "name": "ShT MQ Later Rooms\\n w/o Lens of Truth", "descriptions": ["LogicLensShadowMQBackDesc"]}, + "LogicLensBotwMQ": { "type": "LogicTrick", "name": "BotW MQ Nagivate\\n w/o Lens of Truth", "descriptions": ["LogicLensBotwMQDesc"]}, + "LogicLensGtgMQ": { "type": "LogicTrick", "name": "GTG MQ Navigate\\n w/o Lens of Truth", "descriptions": ["LogicLensGtgMQDesc"]}, + "LogicLensCastleMQ": { "type": "LogicTrick", "name": "GaC MQ Navigate\\n w/o Lens of Truth", "descriptions": ["LogicLensCastleMQDesc"]}, + "LogicSpiritTrialHookshot": { "type": "LogicTrick", "name": "Spirit Trial\\n w/o Hookshot", "descriptions": ["LogicSpiritTrialHookshotDesc"]}, + "LogicFlamingChests": { "type": "LogicTrick", "name": "Open chests through\\n flame circles", "descriptions": ["LogicFlamingChestsDesc"]} + }, + "glitchCategories": { + "ToggleAllGlitches": { "type": "GlitchDifficultyOptions", "name": "All Glitches", "GlitchDifficultyOptions": "0b11111", "descriptions": [ "ToggleAllGlitchesDesc" ], "category": "Toggle"}, + "GlitchRestrictedItems": { "type": "GlitchDifficultyOptions", "name": "Restricted Items", "GlitchDifficultyOptions": "0b00001", "descriptions": [ "GlitchRestrictedItemsDescDisabled" , "GlitchRestrictedItemsDescNovice" ]}, + "GlitchSuperStab": { "type": "GlitchDifficultyOptions", "name": "Super Stab", "GlitchDifficultyOptions": "0b00001", "descriptions": [ "GlitchSuperStabDescDisabled" , "GlitchSuperStabDescNovice" ]}, + "GlitchISG": { "type": "GlitchDifficultyOptions", "name": "Infinite Sword Glitch", "GlitchDifficultyOptions": "0b00111", "descriptions": [ "GlitchISGDescDisabled" , "GlitchISGDescNovice" , "GlitchISGDescIntermediate" , "GlitchISGDescAdvanced" ]}, + "GlitchHover": { "type": "GlitchDifficultyOptions", "name": "Bomb Hover", "GlitchDifficultyOptions": "0b00111", "descriptions": [ "GlitchHoverDescDisabled" , "GlitchHoverDescNovice" , "GlitchHoverDescIntermediate" , "GlitchHoverDescAdvanced" ]}, + "GlitchBombOI": { "type": "GlitchDifficultyOptions", "name": "Ocarina Items (Bomb)", "GlitchDifficultyOptions": "0b01111", "descriptions": [ "GlitchBombOIDescDisabled" , "GlitchBombOIDescNovice" , "GlitchBombOIDescIntermediate" , "GlitchBombOIDescAdvanced" , "GlitchBombOIDescExpert" ]}, + "GlitchHoverBoost": { "type": "GlitchDifficultyOptions", "name": "HoverBoost", "GlitchDifficultyOptions": "0b00111", "descriptions": [ "GlitchHoverBoostDescDisabled" , "GlitchHoverBoostDescNovice" , "GlitchHoverBoostDescIntermediate" , "GlitchHoverBoostDescAdvanced" ]}, + "GlitchSuperSlide": { "type": "GlitchDifficultyOptions", "name": "Extended Super Slide", "GlitchDifficultyOptions": "0b01111", "descriptions": [ "GlitchSuperSlideDescDisabled" , "GlitchSuperSlideDescNovice" , "GlitchSuperSlideDescIntermediate" , "GlitchSuperSlideDescAdvanced" , "GlitchSuperSlideDescExpert" ]}, + "GlitchMegaflip": { "type": "GlitchDifficultyOptions", "name": "Megaflip", "GlitchDifficultyOptions": "0b11111", "descriptions": [ "GlitchMegaflipDescDisabled" , "GlitchMegaflipDescNovice" , "GlitchMegaflipDescIntermediate" , "GlitchMegaflipDescAdvanced" , "GlitchMegaflipDescExpert" , "GlitchMegaflipDescHero" ]}, + "GlitchASlide": { "type": "GlitchDifficultyOptions", "name": "A-Slide", "GlitchDifficultyOptions": "0b01111", "descriptions": [ "GlitchASlideDescDisabled" , "GlitchASlideDescNovice" , "GlitchASlideDescIntermediate" , "GlitchASlideDescAdvanced" , "GlitchASlideDescExpert" ]}, + "GlitchHammerSlide": { "type": "GlitchDifficultyOptions", "name": "Hammer Slide", "GlitchDifficultyOptions": "0b00011", "descriptions": [ "GlitchHammerSlideDescDisabled" , "GlitchHammerSlideDescNovice" , "GlitchHammerSlideDescIntermediate" ]}, + "GlitchLedgeCancel": { "type": "GlitchDifficultyOptions", "name": "Ledge Cancel", "GlitchDifficultyOptions": "0b00111", "descriptions": [ "GlitchLedgeCancelDescDisabled" , "GlitchLedgeCancelDescNovice" , "GlitchLedgeCancelDescIntermediate" , "GlitchLedgeCancelDescAdvanced" ]}, + "GlitchActionSwap": { "type": "GlitchDifficultyOptions", "name": "Action Swap", "GlitchDifficultyOptions": "0b00101", "descriptions": [ "GlitchActionSwapDescDisabled" , "GlitchActionSwapDescNovice" , "GlitchActionSwapDescAdvanced" ]}, + "GlitchQPA": { "type": "GlitchDifficultyOptions", "name": "Quick Put Away", "GlitchDifficultyOptions": "0b01111", "descriptions": [ "GlitchQPADescDisabled" , "GlitchQPADescNovice" , "GlitchQPADescIntermediate" , "GlitchQPADescAdvanced" , "GlitchQPADescExpert" ]}, + "GlitchHookshotClip": { "type": "GlitchDifficultyOptions", "name": "Hookshot Clip", "GlitchDifficultyOptions": "0b00011", "descriptions": [ "GlitchHookshotClipDescDisabled" , "GlitchHookshotClipDescNovice" , "GlitchHookshotClipDescIntermediate" ]}, + "GlitchHookshotJump_Bonk": { "type": "GlitchDifficultyOptions", "name": "Hookshot Jump (Bonk)", "GlitchDifficultyOptions": "0b00111", "descriptions": [ "GlitchHookshotJump_BonkDescDisabled" , "GlitchHookshotJump_BonkDescNovice" , "GlitchHookshotJump_BonkDescIntermediate" , "GlitchHookshotJump_BonkDescAdvanced" ]}, + "GlitchHookshotJump_Boots": { "type": "GlitchDifficultyOptions", "name": "Hookshot Jump (Boots)", "GlitchDifficultyOptions": "0b00111", "descriptions": [ "GlitchHookshotJump_BootsDescDisabled" , "GlitchHookshotJump_BootsDescNovice" , "GlitchHookshotJump_BootsDescIntermediate" , "GlitchHookshotJump_BootsDescAdvanced" ]}, + "GlitchCutsceneDive": { "type": "GlitchDifficultyOptions", "name": "Cutscene Dives", "GlitchDifficultyOptions": "0b00111", "descriptions": [ "GlitchCutsceneDiveDescDisabled" , "GlitchCutsceneDiveDescNovice" , "GlitchCutsceneDiveDescIntermediate" , "GlitchCutsceneDiveDescAdvanced" ]}, + "GlitchNaviDive_Stick": { "type": "GlitchDifficultyOptions", "name": "Navi Dive (Stick)", "GlitchDifficultyOptions": "0b00111", "descriptions": [ "GlitchNaviDive_StickDescDisabled" , "GlitchNaviDive_StickDescNovice" , "GlitchNaviDive_StickDescIntermediate" , "GlitchNaviDive_StickDescAdvanced" ]}, + "GlitchTripleSlashClip": { "type": "GlitchDifficultyOptions", "name": "Triple Slash Clip", "GlitchDifficultyOptions": "0b01111", "descriptions": [ "GlitchTripleSlashClipDescDisabled" , "GlitchTripleSlashClipDescNovice" , "GlitchTripleSlashClipDescIntermediate" , "GlitchTripleSlashClipDescAdvanced" , "GlitchTripleSlashClipDescExpert" ]}, + "GlitchLedgeClip": { "type": "GlitchDifficultyOptions", "name": "Ledge Clip", "GlitchDifficultyOptions": "0b00111", "descriptions": [ "GlitchLedgeClipDescDisabled" , "GlitchLedgeClipDescNovice" , "GlitchLedgeClipDescIntermediate" , "GlitchLedgeClipDescAdvanced" ]}, + "GlitchSeamWalk": { "type": "GlitchDifficultyOptions", "name": "Seam Walk", "GlitchDifficultyOptions": "0b11111", "descriptions": [ "GlitchSeamWalkDescDisabled" , "GlitchSeamWalkDescNovice" , "GlitchSeamWalkDescIntermediate" , "GlitchSeamWalkDescAdvanced" , "GlitchSeamWalkDescExpert" , "GlitchSeamWalkDescHero" ]} + }, + "miscGlitches": { + "GlitchWWTEscape": { "type": "Bool", "name": "WWT Kokiri\\n Forest Escape", "falsetxt": "Off", "truetxt": "On", "descriptions": ["GlitchWWTEscapeDesc"]}, + "GlitchGVTentAsChild": { "type": "Bool", "name": "Enter GV Tent\\n as Child", "falsetxt": "Off", "truetxt": "On", "descriptions": ["GlitchGVTentAsChildDesc"]}, + "GlitchGFGuardSneak": { "type": "Bool", "name": "Sneak Past\\n the GF Guard", "falsetxt": "Off", "truetxt": "On", "descriptions": ["GlitchGFGuardSneakDesc"]}, + "GlitchItemlessWasteland": { "type": "Bool", "name": "Cross the HW\\n w/o Items", "falsetxt": "Off", "truetxt": "On", "descriptions": ["GlitchItemlessWastelandDesc"]}, + "GlitchOccamsStatue": { "type": "Bool", "name": "Occam's Statue", "falsetxt": "Off", "truetxt": "On", "descriptions": ["GlitchOccamsStatueDesc"]}, + "GlitchZDOoBJumpSlash": { "type": "Bool", "name": "ZD OoB w/\\n Jump Slash", "falsetxt": "Off", "truetxt": "On", "descriptions": ["GlitchZDOoBJumpSlashDesc"]}, + "GlitchJabuStickRecoil": { "type": "Bool", "name": "Enter Jabu\\n w/o Bottle", "falsetxt": "Off", "truetxt": "On", "descriptions": ["GlitchJabuStickRecoilDesc"]}, + "GlitchJabuAdult": { "type": "Bool", "name": "Enter Jabu\\n as Adult", "falsetxt": "Off", "truetxt": "On", "descriptions": ["GlitchJabuAdultDesc"]}, + "GlitchBlueFireWall": { "type": "Bool", "name": "Break Walls\\n w/ Blue Fire", "falsetxt": "Off", "truetxt": "On", "descriptions": ["GlitchBlueFireWallDesc"]}, + "GlitchClassicHalfie": { "type": "Bool", "name": "Classic Halfie", "falsetxt": "Off", "truetxt": "On", "descriptions": ["GlitchClassicHalfieDesc"]}, + "GlitchModernHalfie": { "type": "Bool", "name": "Modern Halfie", "falsetxt": "Off", "truetxt": "On", "descriptions": ["GlitchModernHalfieDesc"]}, + "GlitchJabuSwitch": { "type": "Bool", "name": "Jabu Switch\\n w/ CS item", "falsetxt": "Off", "truetxt": "On", "descriptions": ["GlitchJabuSwitchDesc"]}, + "GlitchForestBKSkip": { "type": "Bool", "name": "Forest Temple\\n BK Skip", "falsetxt": "Off", "truetxt": "On", "descriptions": ["GlitchForestBKSkipDesc"]}, + "GlitchFireGrunzClip": { "type": "Bool", "name": "Fire Temple\\n Grunz Clip", "falsetxt": "Off", "truetxt": "On", "descriptions": ["GlitchFireGrunzClipDesc"]} + }, + "multiplayerOptions": { + "MP_Enabled": { "type": "Bool", "name": "Multiplayer", "falsetxt": "Off", "truetxt": "On (Local)", "descriptions": ["mp_EnabledDesc"]}, + "MP_SharedProgress": { "type": "Bool", "name": "Shared Progress", "falsetxt": "Off", "truetxt": "On", "descriptions": ["mp_SharedProgressDesc"]}, + "MP_SyncId": { "type": "Count", "indent": 2, "name": "Sync ID", "min": 1, "max": 8, "descriptions": ["mp_SyncIdDesc"], "category": "Cosmetic"}, + "MP_SharedHealth": { "type": "Bool", "name": "Shared Health", "falsetxt": "Off", "truetxt": "On", "descriptions": ["mp_SharedHealthDesc"]}, + "MP_SharedRupees": { "type": "Bool", "name": "Shared Rupees", "falsetxt": "Off", "truetxt": "On", "descriptions": ["mp_SharedRupeesDesc"]}, + "MP_SharedAmmo": { "type": "Bool", "name": "Shared Ammo", "falsetxt": "Off", "truetxt": "On", "descriptions": ["mp_SharedAmmoDesc"]} + }, + "preferenceOptions": { + "QuickText": { "type": "Choice", "name": "Quick Text", "options": ["0: Vanilla", "1: Skippable", "2: Instant", "3: Turbo"], "descriptions": ["quickTextDesc0", "quickTextDesc1", "quickTextDesc2", "quickTextDesc3"], "category": "Cosmetic", "default": "2: Instant"}, + "MenuOpeningButton": { "type": "Choice", "name": "Open Info Menu with", "options": ["Select","Start","D-Pad Up","D-Pad Down","D-Pad Right","D-Pad Left"], "descriptions": ["menuButtonDesc"], "category": "Cosmetic"}, + "ArrowSwitchButton": { "type": "Choice", "name": "Switch Arrows with", "options": ["D-Pad Right","D-Pad Left","D-Pad Up","D-Pad Down","Touch Screen"], "descriptions": ["arrowSwitchDesc"], "category": "Cosmetic"} + }, + "ingameDefaultOptions": { // using generic choice type since some of the bools here are a bit weird + "ZTargeting": { "type": "Choice", "name": "L-Targeting", "options": ["Switch", "Hold"], "descriptions": ["''"], "category": "Cosmetic", "default": "Hold"}, + "CameraControl": { "type": "Choice", "name": "Camera Control", "options": ["Normal", "Invert Y-axis"], "descriptions": ["''"], "category": "Cosmetic"}, + "MotionControl": { "type": "Choice", "name": "Motion Control", "options": ["On", "Off"], "descriptions": ["''"], "category": "Cosmetic"}, + "TogglePlayMusic": { "type": "Choice", "name": "Play Music", "options": ["Off", "On"], "descriptions": ["''"], "category": "Cosmetic", "default": "On"}, + "TogglePlaySFX": { "type": "Choice", "name": "Play Sound Effects", "options": ["Off", "On"], "descriptions": ["''"], "category": "Cosmetic", "default": "On"}, + "NaviNotifications": { "type": "Choice", "name": "Navi Notifications", "options": ["Silenced", "Normal", "Constant"], "descriptions": ["naviNotificationsDesc"], "category": "Cosmetic", "default": "Normal"}, + "IgnoreMaskReaction": { "type": "Choice", "name": "Ignore Mask Reaction", "options": ["Off", "On"], "descriptions": ["ignoreMaskReactionDesc"], "category": "Cosmetic"}, + "SkipSongReplays": { "type": "Choice", "name": "Skip Song Replays", "options": ["Don't Skip", "Skip (No SFX)", "Skip (Keep SFX)"], "descriptions": ["skipSongReplaysDesc"], "category": "Cosmetic"}, + "FreeCamControl": { "type": "Choice", "name": "Free Camera Control", "options": ["Normal", "Invert Y-Axis", "Invert X-Axis", "Invert Both"], "descriptions": ["''"], "category": "Cosmetic"} + }, + "cosmeticOptions": { + "CustomTunicColors": { "type": "Bool", "name": "Custom Tunic Colors", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"], "category": "Cosmetic"}, + "ChildTunicColor": { "type": "Choice", "indent": 2, "name": "Child Tunic Color", "options": "childTunicOptions", "descriptions": "cosmeticDescriptions", "category": "Cosmetic", "default": "SAME_AS_KOKIRI"}, + "KokiriTunicColor": { "type": "Choice", "indent": 2, "name": "Kokiri Tunic Color", "options": "tunicOptions", "descriptions": "cosmeticDescriptions", "category": "Cosmetic", "default": 3}, // Kokiri Green + "GoronTunicColor": { "type": "Choice", "indent": 2, "name": "Goron Tunic Color", "options": "tunicOptions", "descriptions": "cosmeticDescriptions", "category": "Cosmetic", "default": 4}, // Goron Red + "ZoraTunicColor": { "type": "Choice", "indent": 2, "name": "Zora Tunic Color", "options": "tunicOptions", "descriptions": "cosmeticDescriptions", "category": "Cosmetic", "default": 5}, // Zora Blue + "SilverGauntletsColor": { "type": "Choice", "name": "Silver Gauntlets Color", "options": "gauntletOptions", "descriptions": "cosmeticDescriptions", "category": "Cosmetic", "default": 3}, // Silver + "GoldGauntletsColor": { "type": "Choice", "name": "Gold Gauntlets Color", "options": "gauntletOptions", "descriptions": "cosmeticDescriptions", "category": "Cosmetic", "default": 4}, // Gold + "CustomNaviColors": { "type": "Bool", "name": "Custom Navi Colors", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"], "category": "Cosmetic"}, + "IdleNaviInnerColor": { "type": "Choice", "indent": 2, "name": "Idle (Inner)", "options": "naviInnerOptionNames", "descriptions": ["RANDOM_CHOICE_DESC", "RANDOM_COLOR_DESC", "CUSTOM_COLOR_DESC", "naviColorsDesc"], "category": "Cosmetic", "default": 3}, // White + "NPCNaviInnerColor": { "type": "Choice", "indent": 2, "name": "On NPC (Inner)", "options": "naviInnerOptionNames", "descriptions": ["RANDOM_CHOICE_DESC", "RANDOM_COLOR_DESC", "CUSTOM_COLOR_DESC", "naviColorsDesc"], "category": "Cosmetic", "default": 5}, // Light Blue + "EnemyNaviInnerColor": { "type": "Choice", "indent": 2, "name": "On Enemy (Inner)", "options": "naviInnerOptionNames", "descriptions": ["RANDOM_CHOICE_DESC", "RANDOM_COLOR_DESC", "CUSTOM_COLOR_DESC", "naviColorsDesc"], "category": "Cosmetic", "default": 6}, // Yellow + "PropNaviInnerColor": { "type": "Choice", "indent": 2, "name": "On Prop (Inner)", "options": "naviInnerOptionNames", "descriptions": ["RANDOM_CHOICE_DESC", "RANDOM_COLOR_DESC", "CUSTOM_COLOR_DESC", "naviColorsDesc"], "category": "Cosmetic", "default": 4}, // Green + "IdleNaviOuterColor": { "type": "Choice", "indent": 2, "name": "Idle (Outer)", "options": "naviOuterOptionNames", "descriptions": ["RANDOM_CHOICE_DESC", "RANDOM_COLOR_DESC", "CUSTOM_COLOR_DESC", "naviColorsDesc"], "category": "Cosmetic", "default": "SAME_AS_INNER_NAVI"}, + "NPCNaviOuterColor": { "type": "Choice", "indent": 2, "name": "On NPC (Outer)", "options": "naviOuterOptionNames", "descriptions": ["RANDOM_CHOICE_DESC", "RANDOM_COLOR_DESC", "CUSTOM_COLOR_DESC", "naviColorsDesc"], "category": "Cosmetic", "default": "SAME_AS_INNER_NAVI"}, + "EnemyNaviOuterColor": { "type": "Choice", "indent": 2, "name": "On Enemy (Outer)", "options": "naviOuterOptionNames", "descriptions": ["RANDOM_CHOICE_DESC", "RANDOM_COLOR_DESC", "CUSTOM_COLOR_DESC", "naviColorsDesc"], "category": "Cosmetic", "default": "SAME_AS_INNER_NAVI"}, + "PropNaviOuterColor": { "type": "Choice", "indent": 2, "name": "On Prop (Outer)", "options": "naviOuterOptionNames", "descriptions": ["RANDOM_CHOICE_DESC", "RANDOM_COLOR_DESC", "CUSTOM_COLOR_DESC", "naviColorsDesc"], "category": "Cosmetic", "default": "SAME_AS_INNER_NAVI"}, + "CustomTrailEffects": { "type": "Bool", "name": "Custom Trail Effects", "falsetxt": "Off", "truetxt": "On", "descriptions": ["''"], "category": "Cosmetic"}, + "ChosenSimpleMode": { "type": "Bool", "indent": 2, "name": "Draw simple texture", "falsetxt": "When necessary", "truetxt": "Always", "descriptions": ["necessarySimpleModeDesc", "alwaysSimpleModeDesc"], "category": "Cosmetic"}, + "SwordTrailInnerColor": { "type": "Choice", "indent": 2, "name": "Sword (Inner Color)", "options": "weaponTrailInnerOptionNames", "descriptions": ["RANDOM_CHOICE_DESC", "RANDOM_COLOR_DESC", "CUSTOM_COLOR_DESC", "'Select the color that appears from the base\\nof the sword.'"], "category": "Cosmetic", "default": 3}, // White + "SwordTrailOuterColor": { "type": "Choice", "indent": 2, "name": "Sword (Outer Color)", "options": "weaponTrailOuterOptionNames", "descriptions": ["RANDOM_CHOICE_DESC", "RANDOM_COLOR_DESC", "CUSTOM_COLOR_DESC", "'Select the color that appears from the tip\\nof the sword.'"], "category": "Cosmetic", "default": "SAME_AS_INNER_TRAIL"}, + "SwordTrailDuration": { "type": "Choice", "indent": 2, "name": "Sword (Duration)", "options": "trailDurationOptionNames", "descriptions": ["'Select the duration for sword trails.\\n\\nIf too many trails are on screen, the duration\\nmay be capped at Long for some of them.'"], "category": "Cosmetic", "default": 2}, // Vanilla + "BoomerangTrailColor": { "type": "Choice", "indent": 2, "name": "Boomerang (Color)", "options": "weaponTrailInnerOptionNames", "descriptions": ["RANDOM_CHOICE_DESC", "RANDOM_COLOR_DESC", "CUSTOM_COLOR_DESC", "'Select the color for boomerang trails.'"], "category": "Cosmetic", "default": 8}, // Yellow + "BoomerangTrailDuration": { "type": "Choice", "indent": 2, "name": "Boomerang (Duration)", "options": "trailDurationOptionNames", "descriptions": ["'Select the duration for boomerang trails.'"], "category": "Cosmetic", "default": 2}, // Vanilla + "BombchuTrailInnerColor": { "type": "Choice", "indent": 2, "name": "Bombchu (Inner Color)", "options": "weaponTrailInnerOptionNames", "descriptions": ["RANDOM_CHOICE_DESC", "RANDOM_COLOR_DESC", "CUSTOM_COLOR_DESC", "'Select the color for the center of the\\nbombchu trail.'"], "category": "Cosmetic", "default": 5}, // Red + "BombchuTrailOuterColor": { "type": "Choice", "indent": 2, "name": "Bombchu (Outer Color)", "options": "weaponTrailOuterOptionNames", "descriptions": ["RANDOM_CHOICE_DESC", "RANDOM_COLOR_DESC", "CUSTOM_COLOR_DESC", "'Select the color for the sides of the\\nbombchu trail.'"], "category": "Cosmetic", "default": "SAME_AS_INNER_TRAIL"}, + "BombchuTrailDuration": { "type": "Choice", "indent": 2, "name": "Bombchu (Duration)", "options": "chuTrailDurationOptionNames", "descriptions": ["'Select the duration for bombchu trails.'"], "category": "Cosmetic", "default": 2}, // Vanilla + "ColoredKeys": { "type": "Bool", "name": "Colored Small Keys", "falsetxt": "Off", "truetxt": "On", "descriptions": ["coloredKeysDesc"], "category": "Cosmetic"}, + "ColoredBossKeys": { "type": "Bool", "name": "Colored Boss Keys", "falsetxt": "Off", "truetxt": "On", "descriptions": ["coloredBossKeysDesc"], "category": "Cosmetic"}, + "MirrorWorldOpt": { "type": "Choice", "name": "Mirror World", "options": ["Off", "On", "Scene", "Entrance", "Random"], "descriptions": ["mirrorWorldOffDesc", "mirrorWorldOnDesc", "mirrorWorldSceneDesc", "mirrorWorldEntranceDesc", "mirrorWorldRandomDesc"], "category": "Cosmetic"}, + "BetaSoldOut": { "type": "Bool", "name": "Beta Sold-Out Model", "falsetxt": "Off", "truetxt": "On", "descriptions": ["betaSoldOutDesc"], "category": "Cosmetic"}, + "SoullessEnemiesLook": { "type": "Choice", "name": "Soulless Enemies Look", "options": ["Purple Flame", "Flashing"], "descriptions": ["soullessPurpleFlameDesc", "soullessFlashingDesc"], "category": "Cosmetic"} + }, + "audioOptions": { + "ShuffleMusic": { "type": "Bool", "name": "Shuffle Music", "falsetxt": "Off", "truetxt": "On", "descriptions": ["musicRandoDesc"], "category": "Cosmetic"}, + "ShuffleBGM": { "type": "Choice", "indent": 2, "name": "Shuffle BGM", "options": ["Off", "On (Mixed)", "On (Grouped)", "On (Own)"], "descriptions": ["shuffleBGMDesc"], "category": "Cosmetic", "default": "On (Mixed)"}, + "ShuffleMelodies": { "type": "Choice", "indent": 2, "name": "Shuffle Melodies", "options": ["Off", "On (Mixed)", "On (Grouped)", "On (Own)"], "descriptions": ["shuffleMelodiesDesc"], "category": "Cosmetic", "default": "On (Grouped)"}, + "CustomMusic": { "type": "Bool", "indent": 2, "name": "Custom Music", "falsetxt": "Off", "truetxt": "On", "descriptions": ["customMusicDesc"], "category": "Cosmetic"}, + "CustomMusicOnly": { "type": "Bool", "indent": 4, "name": "Custom Music Only", "falsetxt": "Off", "truetxt": "On", "descriptions": ["customMusicOnlyDesc"], "category": "Cosmetic"}, + "ShuffleSFX": { "type": "Choice", "name": "Shuffle SFX", "options": ["Off", "All", "Scene Specific", "Chaos"], "descriptions": ["shuffleSFXOff", "shuffleSFXAll", "shuffleSFXSceneSpecific", "shuffleSFXChaos"], "category": "Cosmetic"}, + "ShuffleSFXFootsteps": { "type": "Bool", "indent": 2, "name": "Include Footsteps", "falsetxt": "No", "truetxt": "Yes", "descriptions": ["''"], "category": "Cosmetic", "default": true}, + "ShuffleSFXLinkVoice": { "type": "Bool", "indent": 2, "name": "Include Link's Voice", "falsetxt": "No", "truetxt": "Yes", "descriptions": ["''"], "category": "Cosmetic", "default": true}, + "ShuffleSFXCategorically": { "type": "Bool", "indent": 2, "name": "Categorical Shuffle", "falsetxt": "Off", "truetxt": "On", "descriptions": ["shuffleSFXCategorically"], "category": "Cosmetic", "default": true}, + "OcarinaNoteInstrument": { "type": "Choice", "name": "Ocarina Instrument", "options": ["Random Choice", "Scene Specific", "Default", + "Malon", "Whistle", "Harp", "Grind Organ", "Flute"], "descriptions": ["ocarinaInstrRandomDesc", "ocarinaInstrSceneDesc", "ocarinaInstrDesc"], "category": "Cosmetic", "default": "Default"} + } +} \ No newline at end of file diff --git a/source/descriptions.cpp b/source/descriptions.cpp index 7d7c42b5..1fee23b6 100644 --- a/source/descriptions.cpp +++ b/source/descriptions.cpp @@ -1,2166 +1,47 @@ +#include "description_table_jsonc.h" #include "descriptions.hpp" +#include "json.hpp" -// clang-format off -/*------------------------------ -| MENU DESCRIPTIONS | *SCREEN WIDTH* -------------------------------*/ /*--------------------------------------------------*/ -string_view menuOpenSettingsDesc = "Depending on the enabled glitches and item place-\n" - "ments, some of these may be logically bypassed.\n"// - "For example, bomb hovering to Ganon's Castle."; // -string_view menuGlitchOptionsDesc = "These are only taken into account when logic is\n" - "set to Glitched."; // -string_view menuPersonalizationDesc = "These options do not affect seed generation."; // -string_view menuIngameDefaultsDesc = "These options decide what the ingame options are\n" - "set to when creating a save file. The new ingame\n" - "options can be changed in the Custom Info Menu."; // +#include +#include -/*------------------------------ -| PRESET DESCRIPTIONS | *SCREEN WIDTH* -------------------------------*/ /*--------------------------------------------------*/ -string_view presetNintendedDesc = "Locks the world in a state as intended by the\n" // - "developers. Start as child and work your way\n" // - "towards Ganon in a classical way."; // -string_view presetAllsanityDesc = "ANYTHING ANYWHERE! Both items and entrances."; // -string_view presetRacingDesc = "Community racing settings."; // -string_view presetVanillaDesc = "Experience a regular playthrough but with all of\n" - "the randomizer's improvements.\n" // - "\n" // - "Enable entrance shuffle for an extra challenge!"; // -string_view presetFullChaosDesc = "The hardest and craziest settings possible.\n" // - "Closes everything as much as possible.\n" // - "No logic. Anything anywhere.\n" // - "Full entrance shuffle.\n" // - "One-hit KO. Max ice traps."; // +using json = nlohmann::json; -//Setting descriptions are mostly copied from OoT Randomizer tooltips with minor edits +std::unordered_map descriptionTable; -/*------------------------------ -| RANDOMIZE SETTINGS | *SCREEN WIDTH* -------------------------------*/ /*--------------------------------------------------*/ -string_view openRandomize = "Randomize all Open Settings."; // -string_view worldRandomize = "Randomize all World Settings except for MQ\n" // - "dungeons."; // -string_view shuffleRandomize = "Randomize all Shuffle Settings."; // -string_view dungeonRandomize = "Randomize all Dungeon Shuffle Settings."; // - // -/*------------------------------ // -| LOGIC | // -------------------------------*/ // -string_view logicGlitchless = "No glitches are required, but may require some\n" // - "minor tricks. Add minor tricks to consider for\n" // - "logic in Logical Tricks."; // -string_view logicGlitched = "The glitches you enable at the set difficulty\n" // - "or below may be required.\n" // - "\n" // - "WIP feature. Allows glitch logic for the entire\n"// - "overworld and the following vanilla dungeons:\n" // - "Deku Tree, Dodongo's Cavern, Jabu Jabu, and\n" // - "Forest, Water, and Fire Temple."; // -string_view logicNoLogic = "Maximize randomization, All locations are\n" // - "considered available. MAY BE IMPOSSIBLE TO BEAT.";// -string_view logicVanilla = "For those who want to play the game normally but\n" - "with the improvements of the randomizer. All\n" // - "locations will contain their vanilla items. This\n" - "supercedes all item shuffle, logic, hint, and\n" // - "item pool settings. You can still use non-vanilla\n" - "world settings such as adult start or entrance\n" // - "shuffle, but the game may require glitches to\n" // - "complete if you do."; // -/*------------------------------ // -| FOREST | // -------------------------------*/ // -string_view forestOpen = "Mido no longer blocks the path to the Deku Tree,\n" - "and the Kokiri boy no longer blocks the path out\n" - "of the forest."; // -string_view forestClosed = "Beating Deku Tree is logically required to leave\n" - "the forest area (Kokiri Forest/Lost Woods/Sacred\n" - "Forest Meadow/Deku Tree), while the Kokiri Sword\n" - "and a Deku Shield are required to access the Deku\n" - "Tree. Items needed for this will be guaranteed\n" // - "inside the forest area. This setting is\n" // - "incompatible with starting as adult."; // -string_view forestClosedDeku = "The Kokiri boy no longer blocks the path out of\n"// - "the forest, but Mido still blocks the path to the\n" - "Deku Tree, requiring Kokiri Sword and Deku Shield\n" - "to access the Deku Tree."; // -/*------------------------------ // -| KAKARIKO GATE | // -------------------------------*/ // -string_view kakGateOpen = "The gate is always open instead of needing\n" // - "Zelda's Letter. The Happy Mask Shop opens upon\n" // - "obtaining Zelda's Letter without needing to show\n" - "it to the guard."; // -string_view kakGateClosed = "The gate and the Happy Mask Shop both remain\n" // - "closed until showing Zelda's Letter to the guard\n" - "in Kakariko."; // -/*------------------------------ // -| DOOR OF TIME | // -------------------------------*/ // -string_view doorOfTimeOpen = "The Door of Time starts opened instead of needing\n" - "to play the Song of Time."; // -string_view doorOfTimeClosed = "Only an Ocarina and the Song of Time need to be\n"// - "found to open the Door of Time."; // -string_view doorOfTimeIntended = "The Ocarina of Time, the Song of Time, and\n" // - "all Spiritual Stones need to be found to\n" // - "open the Door of Time."; // -/*------------------------------ // -| ZORA'S FOUNTAIN | // -------------------------------*/ // -string_view fountainNormal = "King Zora obstructs the way to Zora's Fountain.\n"// - "Ruto's Letter must be shown as child in order to\n" - "move him for both eras."; // -string_view fountainAdult = "King Zora is always moved in the adult era. This\n" - "means Ruto's Letter is only required to access\n" // - "Zora's Fountain as child."; // -string_view fountainOpen = "King Zora starts as moved in both the child and\n"// - "adult eras. This also removes Ruto's Letter from\n" - "the pool since it can't be used."; // -/*------------------------------ // -| JABU-JABU | // -------------------------------*/ // -string_view jabuJabuCloseDesc = "Jabu-Jabu's mouth stays closed until a fish is\n" // - "fed."; // -string_view jabuJabuOpenDesc = "Jabu-Jabu's mouth is always open."; // -/*------------------------------ // -| GERUDO FORTRESS | // -------------------------------*/ // -string_view gerudoNormal = "All 4 carpenters can be rescued."; // -string_view gerudoFast = "Only the bottom left carpenter must be rescued."; // -string_view gerudoOpen = "The carpenters are rescued from the start of the\n" - "game, and if Shuffle Gerudo Card is disabled,\n" // - "the player starts with the Gerudo Card in the\n" // - "inventory allowing access to Gerudo Training\n" // - "Grounds."; // -/*------------------------------ // -| RAINBOW BRIDGE | // -------------------------------*/ // -string_view bridgeOpen = "The Rainbow Bridge is always present."; // -string_view bridgeVanilla = "The Rainbow Bridge requires Shadow and Spirit\n" // - "Medallions as well as Light Arrows."; // -string_view bridgeStones = "The Rainbow Bridge requires collecting a\n" // - "configurable number of Spiritual Stones."; // -string_view bridgeMedallions = "The Rainbow Bridge requires collecting a\n" // - "configurable number of Medallions."; // -string_view bridgeRewards = "The Rainbow Bridge requires collecting a\n" // - "configurable number of Dungeon Rewards."; // -string_view bridgeDungeons = "The Rainbow Bridge requires completing a\n" // - "configurable number of Dungeons.\n" // - "\n" // - "Dungeons are considered complete when Link steps\n" - "into the blue warp at the end of them."; // -string_view bridgeTokens = "The Rainbow Bridge requires collecting a\n" // - "configurable number of Gold Skulltula Tokens."; // -string_view bridgeHearts = "The Rainbow Bridge requires collecting a\n" // - "configurable number of Hearts."; // -/*------------------------------ // -| BRIDGE CONDITIONS | // -------------------------------*/ // -string_view bridgeStoneCountDesc = "Set the number of Spiritual Stones required to\n" // - "spawn the Rainbow Bridge."; // -string_view bridgeMedallionCountDesc = "Set the number of Medallions required to spawn the" - "Rainbow Bridge."; // -string_view bridgeRewardCountDesc = "Set the number of Dungeon Rewards (Spiritual\n" // - "Stones and Medallions) required to spawn the\n" // - "Rainbow Bridge."; // -string_view bridgeDungeonCountDesc = "Set the number of completed dungeons required to\n" - "spawn the Rainbow Bridge."; // -string_view bridgeTokenCountDesc = "Set the number of Gold Skulltula Tokens required\n" - "to spawn the Rainbow Bridge."; // -string_view bridgeHeartCountDesc = "Set the number of Hearts required to spawn the\n" // - "Rainbow Bridge."; // -/*------------------------------ // -| RANDOM GANONS TRIALS | // -------------------------------*/ // -string_view randomGanonsTrialsDesc = "Sets a random number of required trials to enter\n" - "Ganon's Tower."; // -/*------------------------------ // -| GANON'S TRIAL COUNT | // -------------------------------*/ // -string_view ganonsTrialCountDesc = "Set the number of trials required to enter\n" // - "Ganon's Tower. Trials will be randomly selected.";// -/*------------------------------ // -| STARTING AGE | // -------------------------------*/ // -string_view ageDesc = "Choose which age Link will start as.\n" // - "\n" // - "Only the child option is compatible with Closed\n"// - "Forest.\n" // - "\n" // - "Child will also be forced if Door of Time is set\n" - "to intended and ocarinas are unshuffled unless you" - "start with an ocarina already in your inventory.";// -/*------------------------------ // -| SHUFFLE ENTRANCES | // -------------------------------*/ // -string_view shuffleEntrancesDesc = "Shuffle where the entrances between areas lead to." - "If turned on, select which kinds of entrances you\n" - "want shuffled in the options below. Note that some" - "types of entrances can have wildly varying\n" // - "generation times."; // - // -/*------------------------------ // -| DUNGEON ENTRANCES | // -------------------------------*/ // -string_view dungeonEntrancesDesc = "Shuffle the pool of dungeon entrances, including\n" - "Bottom of the Well, Ice Cavern, and Gerudo\n" // - "Training Grounds. Shuffling Ganon's Castle can\n" // - "be enabled separately.\n" // - "\n" // - "Additionally, the entrances of Deku Tree, Fire\n" // - "Temple, Bottom of the Well and Gerudo Training\n" // - "Ground are opened for both adult and child."; // -/*------------------------------ // -| BOSS ENTRANCES | // -------------------------------*/ // -string_view bossEntrancesDesc = "Shuffle the pool of dungeon boss entrances.\n" // - "This affects the boss rooms of all stone and\n" // - "medallion dungeons.\n" // - "\n" // - "Child and adult boss rooms can be shuffled\n" // - "separately.\n" // - "Child may be expected to defeat Phantom Ganon\n" // - "and/or Bongo Bongo."; // -/*------------------------------ // -| OVERWORLD ENTRANCES | // -------------------------------*/ // -string_view overworldEntrancesDesc = "Shuffle the pool of Overworld entrances, which\n" // - "corresponds to almost all loading zones between\n"// - "Overworld areas.\n" // - "\n" // - "Some entrances are unshuffled to avoid issues:\n" // - "- Hyrule Castle Courtyard and Garden entrance\n" // - "- Both Market Back Alley entrances\n" // - "- Gerudo Valley to Lake Hylia (unless entrances\n"// - " are decoupled)"; // -/*------------------------------ // -| INTERIOR ENTRANCES | // -------------------------------*/ // -string_view interiorEntrancesOff = "Interior entrances will not be shuffled."; // -string_view interiorEntrancesSimple = "Shuffle the pool of interior entrances which\n" // - "contains most Houses and all Great Fairies."; // -string_view interiorEntrancesAll = "An extended version of 'Simple' with some extra\n"// - "places:\n" // - "- Windmill\n" // - "- Link's House\n" // - "- Temple of Time\n" // - "- Kakariko Potion Shop."; // -/*------------------------------ // -| GROTTO ENTRANCES | // -------------------------------*/ // -string_view grottoEntrancesDesc = "Shuffle the pool of grotto entrances, including\n"// - "all graves, small Fairy Fountains and the Lost\n" // - "Woods Stage."; // -/*------------------------------ // -| OWL DROPS | // -------------------------------*/ // -string_view owlDropsDesc = "Randomize where Kaepora Gaebora (the Owl) drops\n"// - "you at when you talk to him at Lake Hylia or at\n"// - "the top of Death Mountain Trail."; // -/*------------------------------ // -| WARP SONGS | // -------------------------------*/ // -string_view warpSongsDesc = "Randomize where each of the 6 warp songs leads to."; - // -/*------------------------------ // -| OVERWORLD SPAWNS | // -------------------------------*/ // -string_view overworldSpawnsDesc = "Randomize where you start as Child or Adult when\n" - "loading a save in the Overworld. This means you\n"// - "may not necessarily spawn inside Link's House or\n" - "Temple of Time.\n" // - "\n" // - "This stays consistent after saving and loading the" - "game again."; // -/*------------------------------ // -| MIXED ENTRANCE POOLS | // -------------------------------*/ // -string_view mixedPoolsDesc = "Shuffle entrances into a mixed pool instead of\n" // - "separate ones. For example, enabling the settings\n" - "to shuffle grotto, dungeon, and overworld\n" // - "entrances and selecting grotto and dungeon\n" // - "entrances here will allow a dungeon to be inside a" - "grotto or vice versa, while overworld entrances\n"// - "are shuffled in their own separate pool and\n" // - "indoors stay vanilla."; // -string_view mixDungeonsDesc = "Dungeon entrances will be part of the mixed pool."; -string_view mixOverworldDesc = "Overworld entrances will be part of the mixed\n" // - "pool."; // -string_view mixInteriorsDesc = "Interior entrances will be part of the mixed pool."; -string_view mixGrottosDesc = "Grotto entrances will be part of the mixed pool.";// -/*------------------------------ // -| DECOUPLED ENTRANCES | // -------------------------------*/ // -string_view decoupledEntrancesDesc = "Decouple entrances when shuffling them. This means" - "you are no longer guaranteed to end up back where " - "you came from when you go back through an\n" // - "entrance. This also adds the one-way entrance from" - "Gerudo Valley to Lake Hylia in the pool of\n" // - "overworld entrances when they are shuffled.\n" // - "Boss entrances are currently excluded from this\n"// - "and remain coupled regardless."; // -/*------------------------------ // -| BOMBCHUS IN LOGIC | // -------------------------------*/ // -string_view bombchuLogicDesc = "Bombchus are properly considered in logic.\n" // - "They can be replenished in shops, or through\n" // - "bombchu drops, if those are enabled.\n" // - "\n" // - "Bombchu Bowling is opened by bombchus."; // -/*------------------------------ // -| AMMO DROPS | // -------------------------------*/ // -string_view defaultAmmoDropsDesc = "Bombs, arrows, seeds, nuts, sticks and\n" // - "magic jars appear as normal.\n"; // -string_view bombchuDropsDesc = "Bombs, arrows, seeds, nuts, sticks and\n" // - "magic jars appear as normal.\n" // - "Bombchus can sometimes replace bomb drops."; // -string_view noAmmoDropsDesc = "All ammo drops will be replaced by blue rupees,\n"// - "except for Deku Sticks.\n" // - "Ammo upgrades will only refill ammo by 10 units.";// -/*------------------------------ // -| HEART DROPS AND REFILLS | // -------------------------------*/ // -string_view defaultHeartDropsDesc = "Heart drops will appear as normal.\n" // - "Health upgrades fully heal Link when picked up.\n"// - "Fairies heal Link as normal."; // -string_view noHeartDropsDesc = "Heart drops will be replaced by green rupees.\n" // - "Health upgrades fully heal Link when picked up.\n"// - "Fairies heal Link as normal."; // -string_view noHeartRefillDesc = "Heart drops will appear as normal.\n" // - "Health upgrades don't heal Link when picked up.\n"// - "Fairies heal Link by only 3 hearts."; // -string_view scarceHeartsDesc = "Heart drops will be replaced by green rupees.\n" // - "Health upgrades don't heal Link when picked up.\n"// - "Fairies heal Link by only 3 hearts."; // -/*------------------------------ // -| MQ DUNGEON COUNT | // -------------------------------*/ // -string_view mqDungeonCountDesc = "Specify the number of Master Quest dungeons to\n" // - "appear in the game. Which dungeons become Master\n" - "Quest will be chosen at random."; // -/*------------------------------ // -| SET MQ DUNGEONS | // -------------------------------*/ // -string_view setDungeonTypesDesc = "If set, you can choose specific dungeons to be\n" // - "vanilla, MQ, or random"; // -/*------------------------------ // -| TRIFORCE HUNT | // -------------------------------*/ // -string_view triforceHuntDesc = "Pieces of the Triforce have been scattered around\n" - "the world. Find some of them to beat the game.\n" // - "\n" // - "Game is saved on completion, and Ganon's Castle\n"// - "key is given if beating the game again is desired."; -string_view triforcePiecesTotalDesc = "Set the total number of pieces that will appear\n"// - "in the world.\n\n" // - "Hold A to scroll faster."; // -string_view triforcePiecesRequiredDesc= "Set the number of pieces required to beat the\n" // - "game.\n\n" // - "Hold A to scroll faster."; // -/*------------------------------ // -| ENEMY RANDOMIZER | // -------------------------------*/ // -string_view enemizerDesc = "Randomize most enemies in the game.\n\n" // - "WARNING: Incompatible with Master Quest Logic."; // -string_view enemizerListDesc = "Scroll to open the Enemy List."; // -string_view enemyRandomizedDesc = "This enemy will be included in the pool of\n" // - "random enemies."; // -string_view enemyVanillaDesc = "This enemy will be excluded from the random pool,\n" - "but it will appear at its vanilla locations."; // -string_view enemyRemovedDesc = "This enemy will be excluded from the random pool,\n" - "and it won't appear at randomized locations.\n\n" // - "Exception: if all possible options for a location\n" - "are removed, that location will revert to using\n"// - "its vanilla enemy."; // -/*------------------------------ // -| SHUFFLE DUNGEON REWARDS | // -------------------------------*/ // -string_view shuffleRewardsEndOfDungeon= "Medallions and Spiritual Stones will be given as\n" - "rewards for beating dungeons.\n" // - "\n" // - "This setting will force Link's Pocket to be a\n" // - "Medallion or Spiritual Stone."; // -string_view shuffleRewardsAnyDungeon = "Medallions and Spiritual Stones can only appear\n"// - "inside of dungeons."; // -string_view shuffleRewardsOverworld = "Medallions and Spiritual Stones can only appear\n"// - "outside of dungeons."; // -string_view shuffleRewardsAnywhere = "Medallions and Spiritual Stones can appear\n" // - "anywhere."; // -/*------------------------------ // -| LINK'S POCKET | // -------------------------------*/ // -string_view linksPocketDungeonReward = "Link will start with a Dungeon Reward in his\n" // - "inventory."; // -string_view linksPocketAdvancement = "Link will receive a random advancement item at the" - "beginning of the playthrough."; // -string_view linksPocketAnything = "Link will receive a random item from the item pool" - "at the beginning of the playthrough."; // -string_view linksPocketNothing = "Link will start with a very useful green rupee."; // -/*------------------------------ // -| SONG SHUFFLE | // -------------------------------*/ // -string_view songsSongLocations = "Songs will only appear at locations that normally\n" - "teach songs."; // -string_view songsDungeonRewards = "Songs appear at the end of dungeons. For major\n" // - "dungeons, they will be at the boss heart container" - "location. The remaining 4 songs are placed at:\n" // - "- Zelda's Lullaby Location\n" // - "- Ice Cavern's Serenade of Water Location\n" // - "- Bottom of the Well's Lens of Truth Location\n" // - "- Gerudo Training Ground's Ice Arrow Location"; // -string_view songsAllLocations = "Songs can appear in any location."; // - // -/*------------------------------ // -| SHOPSANITY | // -------------------------------*/ // -string_view shopsOff = "All shop items will be the same as vanilla."; // -string_view shopsZero = "Vanilla shop items will be shuffled among\n" // - "different shops."; // -string_view shopsOne = "Vanilla shop items will be shuffled among\n" // - "different shops, and each shop will contain\n" // - "one non-vanilla shop item."; // -string_view shopsTwo = "Vanilla shop items will be shuffled among\n" // - "different shops, and each shop will contain\n" // - "two non-vanilla shop items."; // -string_view shopsThree = "Vanilla shop items will be shuffled among\n" // - "different shops, and each shop will contain\n" // - "three non-vanilla shop items."; // -string_view shopsFour = "Vanilla shop items will be shuffled among\n" // - "different shops, and each shop will contain\n" // - "four non-vanilla shop items."; // -string_view shopsRandom = "Vanilla shop items will be shuffled among\n" // - "different shops, and each shop will contain\n" // - "1-4 non-vanilla shop items."; // -string_view shopPriceRandom = "Prices of shuffled shop items are random\n" // - "varying between 0 and 295 rupees."; // -string_view shopPriceAffordable = "Prices of shuffled shop items are 10 rupees."; // -string_view shopPriceChild = "Prices of shuffled shop items are random\n" // - "varying between 0 and 99 rupees."; // -string_view shopPriceAdult = "Prices of shuffled shop items are random\n" // - "varying between 0 and 200 rupees."; // -string_view shopPriceGiant = "Prices of shuffled shop items are random\n" // - "varying between 0 and 500 rupees."; // -string_view shopPriceTycoon = "Prices of shuffled shop items are random\n" // - "varying between 0 and 999 rupees."; // -/*------------------------------ // -| TOKENSANITY | // -------------------------------*/ // -string_view tokensOff = "GS locations will not be shuffled."; // -string_view tokensDungeon = "This only shuffles the GS locations that are\n" // - "within dungeons, increasing the value of most\n" // - "dungeons and making internal dungeon exploration\n" - "more diverse."; // -string_view tokensOverworld = "This only shuffles the GS locations that are\n" // - "outside of dungeons."; // -string_view tokensAllTokens = "Effectively adds 100 new locations for items to\n"// - "appear."; // - // -/*------------------------------ // -| SCRUB SHUFFLE | // -------------------------------*/ // -string_view scrubsOff = "Only the 3 Scrubs that give one-time items in the\n" - "vanilla game (PoH, Deku Nut capacity, and Deku\n" // - "Stick capacity) will have random items."; // -string_view scrubsAffordable = "All Scrub prices will be reduced to 10 rupees each"; -string_view scrubsExpensive = "All Scrub prices will be their vanilla prices.\n" // - "This will require spending over 1000 rupees on\n" // - "Scrubs."; // -string_view scrubsRandomPrices = "All Scrub prices will be between 0-95 rupees. This" - "will on average be very, very expensive overall.";// -/*------------------------------ // -| SHUFFLE COWS | // -------------------------------*/ // -string_view shuffleCowsDesc = "Enabling this will let cows give you items upon\n"// - "performing Epona's song in front of them. There\n"// - "are 9 cows, and an extra in MQ Jabu."; // - // -/*------------------------------ // -| SHUFFLE KOKIRI SWORD | // -------------------------------*/ // -string_view kokiriSwordDesc = "Enabling this shuffles the Kokiri Sword into the\n" - "item pool.\n" // - "\n" // - "This will require extensive use of sticks until\n"// - "the sword is found."; // -/*------------------------------ // -| SHUFFLE MASTER SWORD | // -------------------------------*/ // -string_view masterSwordDesc = "Enabling this shuffles the Master Sword into the\n" - "item pool.\n" // - "\n" // - "Adult Link will start with a second free item\n" // - "instead of the Master Sword. If you haven't found\n" - "the Master Sword before facing Ganon, you won't\n"// - "receive it during the fight."; // -/*------------------------------ // -| SHUFFLE OCARINAS | // -------------------------------*/ // -string_view ocarinasDesc = "Enabling this shuffles the Fairy Ocarina and the\n" - "Ocarina of Time into the item pool.\n" // - "\n" // - "This will require finding an Ocarina before being\n" - "able to play songs."; // -/*------------------------------ // -| SHUFFLE WEIRD EGG | // -------------------------------*/ // -string_view weirdEggDesc = "Enabling this shuffles the Weird Egg from Malon\n"// - "into the item pool.\n" // - "This will require finding the Weird Egg to talk to" - "Zelda in Hyrule Castle, which in turn locks\n" // - "rewards from Impa, Saria, Malon, and Talon."; // -/*------------------------------ // -| SHUFFLE ZELDAS LETTER | // -------------------------------*/ // -string_view zeldasLetterDesc = "Enabling this shuffles Zelda's Letter into the\n" // - "item pool.\n" // - "This will require finding the letter to open the\n" - "Happy Mask Shop and the gate in Kakariko if it is\n" - "set to closed."; // -/*------------------------------ // -| SHUFFLE GERUDO TOKEN | // -------------------------------*/ // -string_view gerudoTokenDesc = "Enabling this shuffles the Gerudo Token into the\n" - "item pool.\n" // - "\n" // - "The Gerudo Token is required to enter the Gerudo\n" - "Training Ground."; // -/*------------------------------ // -| SHUFFLE MAGIC BEANS | // -------------------------------*/ // -string_view magicBeansDesc = "Enabling this adds a pack of 10 beans to the item\n" - "pool and changes the Magic Bean Salesman to sell a" - "random item at a price of 60 rupees."; // -/*------------------------------ // -| SHUFFLE FROG SONG RUPEES | // -------------------------------*/ // -string_view frogSongRupeesDesc = "Enabling this adds 5 Purple Rupees to the item\n" // - "pool and shuffles the rewards from playing Zelda's" - "Lullaby, Epona's Song, Saria's Song, Sun's Song,\n" - "and Song of Time to the frogs in Zora's River.\n";// -/*------------------------------ // -| SHUFFLE MERCHANTS | // -------------------------------*/ // -string_view merchantsDesc = "Enabling this changes Medigoron, Granny and the\n"// - "Carpet Salesman to sell a random item once at a\n"// - "high price (100 for Granny, 200 for the others).\n\n" - "A Giant's Knife and a pack of Bombchus will be\n" // - "added to the item pool, and one of the bottles\n" // - "will contain a Blue Potion."; // -string_view merchantsHintsDesc = "These hints will make the merchants tell you\n" // - "which item they're selling.\n" // - "\n" // - "The Hint Clarity setting will affect how they\n" // - "refer to the item."; // -/*------------------------------ // -| SHUFFLE ADULT TRADE | // -------------------------------*/ // -string_view adultTradeDesc = "Enabling this adds all of the adult trade quest\n"// - "items to the pool, each of which can be traded\n" // - "for a unique reward. You will be able to choose\n"// - "which of your owned adult trade items is visible\n" - "in the inventory by selecting the item and using\n" - "the L and R buttons. If disabled, only the Claim\n" - "Check will be found in the pool."; // -/*------------------------------ // -| SHUFFLE CHEST MINIGAME | // -------------------------------*/ // -string_view chestMinigameDesc = "The 5 key chests in the Treasure Chest Shop will\n" - "be randomized, and the 6 keys will be added to the"// - "pool. The rupee chests will be replaced by traps.\n" - "Also, the shop owner is on vacation, so he can't\n" - "close any chests or doors once you leave.\n" // - "\n" // - "If you choose the \"pack\" option, you will get\n"// - "all the keys at once, in a single item."; // -/*------------------------------ // -| SHUFFLE ENEMY SOULS | // -------------------------------*/ // -string_view enemySoulDesc = "Enemies will be invincible until you find their\n"// - "\"soul\".\n" // - "Each enemy type will have a soul added into the\n"// - "item pool.\n\n" // - "You can exclude some enemies by adding their\n" // - "souls in the Starting Inventory.\n\n" // - "WARNING: Incompatible with Master Quest Logic."; // -/*------------------------------ // -| SHUFFLE OCARINA BUTTONS | // -------------------------------*/ // -string_view ocarinaButtonsDesc = "Enabling this locks all Ocarina inputs, and adds\n" - "5 new items to find that each unlock one of the 5\n" - "Ocarina notes.\n\n" // - "They can also be added to the Starting Inventory."; -/*------------------------------ // -| SHUFFLE FREESTANDING RUPEES | // -------------------------------*/ // -string_view shuffleRupeesDesc = "Shuffles all freestanding visible rupees\n" // - "that are placed in the world without player\n" // - "intervention. So it does include Rupees that are\n" - "placed in other objects like boulders, but it\n" // - "doesn't include Wonder Items or Rupees that spawn\n" - "from the Goron City spinning pot or the pots in\n"// - "Shadow Temple."; // -/*------------------------------ // -| MAPS AND COMPASSES | // -------------------------------*/ // -string_view mapCompassStartWith = "Maps and Compasses are given to you from the\n" // - "start. This will add a small amount of money and\n" - "refill items to the pool."; // -string_view mapCompassVanilla = "Maps and Compasses will appear in their vanilla\n"// - "locations."; // -string_view mapCompassOwnDungeon = "Maps and Compasses can only appear in their\n" // - "respective dungeon."; // -string_view mapCompassAnyDungeon = "Maps and Compasses can only appear in a dungeon,\n" - "but not necessarily the dungeon they are for."; // -string_view mapCompassOverworld = "Maps and Compasses can only appear outside of\n" // - "dungeons."; // -string_view mapCompassAnywhere = "Maps and Compasses can appear anywhere in the\n" // - "world."; // -/*------------------------------ // -| SMALL KEYS | // -------------------------------*/ // -string_view smallKeyStartWith = "Small Keys are given to you from the start so you\n" - "won't have to worry about locked doors. An easier\n" - "mode."; // -string_view smallKeyVanilla = "Small Keys will appear in their vanilla locations." - "You start with 3 keys in Spirit Temple MQ because\n" - "the vanilla key layout is not beatable in logic.";// -string_view smallKeyOwnDungeon = "Small Keys can only appear in their respective\n" // - "dungeon. If Fire Temple is not a Master Quest\n" // - "dungeon, the door to the Boss Key chest will be\n"// - "unlocked."; // -string_view smallKeyAnyDungeon = "Small Keys can only appear inside of any dungeon,\n" - "but won't necessarily be in the dungeon that the\n" - "key is for. A difficult mode since it is more\n" // - "likely to need to enter a dungeon multiple times."; -string_view smallKeyOverworld = "Small Keys can only appear outside of dungeons.\n"// - "You may need to enter a dungeon multiple times to\n" - "gain items to access the overworld locations with\n" - "the keys required to finish a dungeon."; // -string_view smallKeyAnywhere = "Small Keys can appear anywhere in the world. A\n" // - "difficult mode since it is more likely to need to\n" - "enter a dungeon multiple times."; // -/*------------------------------ // -| GERUDO FORTRESS KEYS | // -------------------------------*/ // -string_view gerudoKeysVanilla = "Gerudo Fortress Keys will appear in their vanilla\n" - "location, dropping from fighting Gerudo guards\n" // - "that attack when trying to free the jailed\n" // - "carpenters."; // -string_view gerudoKeysAnyDungeon = "Gerudo Fortress Keys can only appear inside of\n" // - "dungeons."; // -string_view gerudoKeysOverworld = "Gerudo Fortress Keys can only appear outside of\n"// - "dungeons."; // -string_view gerudoKeysAnywhere = "Gerudo Fortress Keys can appear anywhere in the\n"// - "world."; // -/*------------------------------ // -| Key Rings | // -------------------------------*/ // -string_view keyRingDesc = "Selected key ring dungeons will have all of their\n" - "keys found at once in a ring rather than\n" // - "individually.\n\n" // - "For example, instead of shuffling 5 Forest Temple\n" - "small keys into the pool, you will find a single\n" - "key ring which will give you all 5 keys at once.\n"; -/*------------------------------ // -| BOSS KEYS | // -------------------------------*/ // -string_view bossKeyStartWith = "Boss Keys are given to you from the start so you\n" - "won't have to worry about boss doors. An easier\n"// - "mode."; // -string_view bossKeyVanilla = "Boss Keys will appear in their vanilla locations."; -string_view bossKeyOwnDungeon = "Boss Keys can only appear in their respective\n" // - "dungeon."; // -string_view bossKeyAnyDungeon = "Boss Keys can only appear inside of any dungeon,\n" - "but won't necessarily be in the dungeon that the\n" - "key is for. A difficult mode since it is more\n" // - "likely to need to enter a dungeon multiple times."; -string_view bossKeyOverworld = "Boss Keys can only appear outside of dungeons.\n" // - "You may need to enter a dungeon without the boss\n" - "key to get items required to find the key in the\n" - "overworld."; // -string_view bossKeyAnywhere = "Boss Keys can appear anywhere in the world. A\n" // - "difficult mode since it is more likely to need to\n" - "enter a dungeon multiple times."; // -/*------------------------------ // -| GANON'S CASTLE BOSS KEY | // -------------------------------*/ // -string_view ganonKeyStartWith = "Ganon's Castle Boss Key is given to you from the\n" - "start and you don't have to worry about finding it"; -string_view ganonKeyVanilla = "Ganon's Castle Boss Key will appear in the vanilla" - "location."; // -string_view ganonKeyOwnDungeon = "Ganon's Castle Boss Key can only appear inside\n" // - "Ganon's Castle."; // -string_view ganonKeyAnyDungeon = "Ganon's Castle Boss Key can only appear inside of\n" - "a dungeon, but not necessarily Ganon's Castle."; // -string_view ganonKeyOverworld = "Ganon's Castle Boss Key can only appear outside of" - "dungeons."; // -string_view ganonKeyAnywhere = "Ganon's Castle Boss Key can appear anywhere in the" - "world."; // -string_view ganonKeyLACS = "These settings put the boss key on the Light Arrow" - "Cutscene location, from Zelda in Temple of Time as" - "adult, with differing requirements."; // -/*------------------------------ // -| LACS CONDITIONS | // -------------------------------*/ // -string_view lacsMedallionCountDesc = "Set the number of Medallions required to trigger\n" - "the Light Arrow Cutscene."; // -string_view lacsStoneCountDesc = "Set the number of Spiritual Stones required to\n" // - "trigger the Light Arrow Cutscene."; // -string_view lacsRewardCountDesc = "Set the number of Dungeon Rewards (Spiritual\n" // - "Stones and Medallions) required to trigger the\n" // - "Light Arrow Cutscene."; // -string_view lacsDungeonCountDesc = "Set the number of completed dungeons required to\n" - "trigger the Light Arrow Cutscene.\n" // - "\n" // - "Dungeons are considered complete when Link steps\n" - "into the blue warp at the end of them."; // -string_view lacsTokenCountDesc = "Set the number of Gold Skulltula Tokens required\n" - "to trigger the Light Arrow Cutscene."; // -string_view lacsHeartCountDesc = "Set the number of Hearts required to trigger the\n" - "Light Arrow Cutscene."; // -/*------------------------------ // -| SKIP CHILD STEALTH | // -------------------------------*/ // -string_view childStealthDesc = "The crawlspace into Hyrule Castle goes straight to" - "Zelda, skipping the guards."; // -/*------------------------------ // -| SKIP TOWER ESCAPE | // -------------------------------*/ // -string_view skipTowerEscapeDesc = "The tower escape sequence between Ganondorf and\n"// - "Ganon will be skipped."; // -/*------------------------------ // -| SKIP EPONA RACE | // -------------------------------*/ // -string_view skipEponaRaceDesc = "Epona can be summoned with Epona's Song without\n"// - "needing to race Ingo."; // -/*------------------------------ // -| SKIP MINIGAME PHASES | // -------------------------------*/ // -string_view skipMinigamePhasesDesc = "Completing the second objective in the Dampe Race\n" - "and Gerudo Archery on the first attempt will give\n" - "both rewards at once for that minigame."; // -/*------------------------------ // -| FREE SCARECROW | // -------------------------------*/ // -string_view freeScarecrowDesc = "Pulling out the Ocarina near a spot at which\n" // - "Pierre can spawn will do so, without needing\n" // - "the song."; // -/*------------------------------ // -| FOUR POES CUTSCENE | // -------------------------------*/ // -string_view fourPoesDesc = "The cutscene with the 4 poes in Forest Temple will" - "be skipped. If the cutscene is not skipped, it can" - "be exploited to reach the basement early."; // -/*------------------------------ // -| LAKE HYLIA OWL | // -------------------------------*/ // -string_view lakeHyliaOwlDesc = "The owl flight cutscene in Lake Hylia will be\n" // - "skipped. This cutscene lets you see what item\n" // - "is on top of the laboratory roof."; // -/*------------------------------ // -| BIG POE TARGET COUNT | // -------------------------------*/ // -string_view bigPoeTargetCountDesc = "The Poe buyer will give a reward for turning in\n"// - "the chosen number of Big Poes."; // -/*------------------------------ // -| NUM REQUIRED CUCCOS | // -------------------------------*/ // -string_view numRequiredCuccosDesc = "The cucco lady will give a reward for returning\n"// - "this many of her cuccos to the pen."; // -/*------------------------------ // -| KING ZORA SPEED | // --------------------------------*/ // -string_view kingZoraSpeedFast = "King Zora will move out of the way in 1 shuffle"; // - // -string_view kingZoraSpeedVanilla = "King Zora will move out of the way in 26 shuffles"; - // -string_view kingZoraSpeedRandom = "King Zora will move out of the way in 1 to 128\n" // - "shuffles, with lower numbers being more common"; // -string_view kingZoraSpeedCustom = "Set the exact number of shuffles King Zora will\n"// - "take to move out of the way."; // -/*------------------------------ // -| COMPLETE MASK QUEST | // -------------------------------*/ // -string_view completeMaskDesc = "Once the happy mask shop is opened, all masks\n" // - "will be available to be borrowed."; // -/*------------------------------ // -| QUICK TEXT | // -------------------------------*/ // -string_view quickTextDesc0 = "Quick text will be unchanged, requiring\n" // - "frame-perfect inputs like in the vanilla game."; // -string_view quickTextDesc1 = "Every text box will be completable by pressing B\n" - "at any point while it's scrolling."; // -string_view quickTextDesc2 = "Every text box will auto-complete instantly.\n" // - "No scrolling allowed!"; // -string_view quickTextDesc3 = "Holding B will advance and close text boxes\n" // - "automatically, except for choice selections."; // -/*------------------------------ // -| SKIP SONG REPLAYS | // -------------------------------*/ // -string_view skipSongReplaysDesc = "The automatic replay after you play a song will\n"// - "be skipped.\n" // - "You can choose to keep the sfx anyway, but you\n" // - "will have control of Link during it."; // -/*------------------------------ // -| KEEP FW WARP POINT | // -------------------------------*/ // -string_view keepFWWarpPointDesc = "The Farore's Wind warp point will stay active\n" // - "after having been warped to. The old point will\n"// - "need to be dispelled before setting a new one."; // -/*------------------------------ // -| FAST BUNNY HOOD | // -------------------------------*/ // -string_view fastBunnyHoodDesc = "The Bunny Hood mask behaves like it does in\n" // - "Majora's Mask and makes you run 50% faster."; // -/*------------------------------ // -| RACING | // -------------------------------*/ // -string_view racingDesc = "Overrides personalization options that could\n" // - "affect how fast a seed is beaten."; // - // -/*------------------------------ // -| GOSSIP STONE HINTS | // -------------------------------*/ // -string_view gossipStonesHintsDesc = "Gossip Stones can be made to give hints about\n" // - "where items can be found.\n" // - "Different settings can be chosen to decide which\n" - "item is needed to speak to Gossip Stones. Choosing" - "to stick with the Mask of Truth will make the\n" // - "hints very difficult to obtain.\n" // - "Hints for 'on the way of the hero' are locations\n" - "that contain items that are required to beat the\n" - "game."; // - // -/*------------------------------ // -| HINT CLARITY | // -------------------------------*/ // -string_view obscureHintsDesc = "Sets the difficulty of hints.\n" // - "Obscure: Hints are unique for each thing, but\n" // - "the writing may be confusing.\n" // - "E.g. Kokiri Sword > a butter knife"; // -string_view ambiguousHintsDesc = "Sets the difficulty of hints.\n" // - "Ambiguous: Hints are clearly written, but may\n" // - "refer to more than one thing.\n" // - "E.g. Kokiri Sword > a sword"; // -string_view clearHintsDesc = "Sets the difficulty of hints.\n" // - "Clear: Hints are clearly written and are unique\n"// - "for each thing.\n" // - "E.g. Kokiri Sword > the Kokiri Sword"; // -/*------------------------------ // -| HINT DISTRIBUTION | // -------------------------------*/ // -string_view uselessHintsDesc = "Only junk hints."; // -string_view balancedHintsDesc = "Recommended hint spread."; // -string_view strongHintsDesc = "More useful hints."; // -string_view veryStrongHintsDesc = "Many powerful hints."; // -string_view playthroughHintsDesc = "The playthrough locations will be hinted at what\n" - "they contain and in what general area they are.\n"// - "\n" // - "Not compatible with No Logic."; // - // -/*------------------------------ // -| BONUS GOSSIP HINTS | // -------------------------------*/ // -string_view bonusGossipHintsDesc = "Adds Sun's Song and warp songs to gossip stone\n" // - "hints after all playthrough hints have been set.";// - // -/*------------------------------ // -| MISCELLANEOUS HINTS | // -------------------------------*/ // -string_view miscHintsDesc = "Toggle some specific hints at locations other\n" // - "than Gossip Stones."; // -string_view totAltarHintsDesc = "The Temple of Time altar will reveal the locations" - "of the Spiritual Stones as child and the\n" // - "Medallions as adult, but only if Compasses Show\n"// - "Rewards is disabled.\n" // - "\n" // - "It will also always reveal the requirements for\n"// - "the Door of Time as child, and for Ganon Boss Key\n" - "and Rainbow Bridge as adult."; // -string_view ganonHintsDesc = "Talking to Ganondorf in his boss room will tell\n"// - "you the location of the Light Arrows and, if it\n"// - "was shuffled, the Master Sword.\n" // - "\n" // - "When trials are on, Sheik will appear to relay\n" // - "these hints in Ganon's Castle."; // -string_view dampeHintDesc = "Reading Dampe's diary will reveal the location\n" // - "of a single progressive hookshot."; // -string_view skulltulaHintDesc = "Talking to a cursed House of Skulltula resident\n"// - "will tell you the reward they will give you for\n"// - "removing their curse."; // -string_view fishingHintsDesc = "The aquarium at the fishing pond will show what\n"// - "reward you can win as your current age."; // -/*------------------------------ // -| MAP AND COMPASS GIVES INFO | // -------------------------------*/ // -string_view compassesShowRewardsDesc = "Obtaining a dungeon compass will hint at the\n" // - "location of a Spiritual Stone or Medallion.\n" // - "\n" // - "If rewards are at the end of dungeons, the compass" - "for dungeon X will show what reward is at X.\n" // - "Otherwise, it will show the area for the reward\n"// - "that, in the vanilla game, is located at X.\n" // - "\n" // - "These hints will appear in the Gear menu on the\n"// - "empty reward slots."; // -string_view compassesShowWotHDesc = "The in-game menu will reveal whether each\n" // - "dungeon is on the Way of the Hero, a barren\n" // - "location, or neither, if the compass for that\n" // - "dungeon has been collected."; // -string_view mapsShowDungeonModesDesc = "If any Master Quest dungeons will be randomly\n" // - "shuffled, the in-game menu will reveal whether\n" // - "it is in its Vanilla or Master Quest form, if\n" // - "the map for the dungeon has been collected.\n" // - "Ganon's Castle and Gerudo Training Grounds are\n" // - "always revealed, as they do not have maps."; // -/*------------------------------ // -| DAMAGE MULTIPLIER | // -------------------------------*/ // -string_view damageMultiDesc = "Changes the amount of damage taken.\n" // - "\n" // - "If set to OHKO, Link will die in one hit."; // -/*------------------------------ // -| BONK DAMAGE | // -------------------------------*/ // -string_view bonkDamageDesc = "Choose how many Hearts of damage you'll take when\n" - "hitting a wall or object during a roll.\n\n" // - "Damage is unaffected by the damage multiplier\n" // - "setting, but it will respect Nayru's Love and\n" // - "Double Defense."; // -/*------------------------------ // -| PERMADEATH | // -------------------------------*/ // -string_view permadeathDesc = "Dying deletes your save file and kicks you back\n"// - "out to the main menu."; // -/*------------------------------ // -| GLOOM MODE | // -------------------------------*/ // -string_view gloomModeOffDesc = "Enabling this setting will make your hearts\n" // - "permanently disappear on various conditions."; // -string_view gloomModeDeathDesc = "Delete 1 heart when getting a Game Over.\n\n" // - "The Permadeath setting, if enabled, will be\n" // - "changed to take effect when you lose all hearts.";// -string_view gloomModeDamageDesc = "Delete 1 heart when losing health for any reason,\n" - "except continuous elemental damage from being\n" // - "burned or frozen.\n\n" // - "Double Defense will require 2 hits per heart."; // -string_view gloomModeCollisionDesc = "Delete 1 heart not only when losing health, but\n"// - "also when any collision is detected: getting hit\n" - "during invincibility frames or blocking an attack\n" - "with your shield count as collisions.\n\n" // - "Double Defense will require 2 hits per heart.\n\n"// - "WARNING: THE GAME MAY BE IMPOSSIBLE TO BEAT\n" // - "because you can still be expected to use a shield\n" - "(for example to reflect Twinrova's attacks)."; // -string_view gloomModeEmptyDesc = "Hearts will be deleted when they become empty."; // -/*------------------------------ // -| STARTING TIME | // -------------------------------*/ // -string_view startingTimeDesc = "Change up Link's sleep routine."; // - // -/*------------------------------ // -| ALL LOCATIONS REACHABLE | // -------------------------------*/ // -string_view locationsReachableDesc = "When this options is enabled, the randomizer will\n" - "guarantee that every item is obtainable and every\n" - "location is reachable. When disabled, only\n" // - "required items and locations to beat the game\n" // - "will be guaranteed reachable."; // -/*------------------------------ // -| NIGHT GS EXPECT SUNS | // -------------------------------*/ // -string_view nightGSDesc = "GS Tokens that can only be obtained during the\n" // - "night expect you to have Sun's Song to collect\n" // - "them. This prevents needing to wait until night\n"// - "for some locations."; // - // -/*------------------------------ // -| CHEST ANIMATIONS | // -------------------------------*/ // -string_view chestAnimDesc = "Choose if you want the slow animation to play\n" // - "if a chest contains a major item.\n"; // - // -/*------------------------------ // -| CHEST APPEARANCE | // -------------------------------*/ // -string_view chestVanillaDesc = "Chests will appear as they do in the base game."; // -string_view chestTextureDesc = "Chest texture will reflect its contents\n" // - "regardless of size.\n" // - "\n" // - "Major Items -> Gilded Chests\n" // - "Boss Keys -> Fancy Chests\n" // - "Small Keys -> Silver Chests\n" // - "Hearts -> Heart Chests\n" // - "Gold Skulltula Tokens -> Webbed Chests\n" // - "Everything else -> Wooden Chests"; // -string_view chestSizeTextureDesc = "In addition to the texture change, major items\n" // - "and boss keys will be in big chests, and\n" // - "everything else will be in small chests."; // -string_view chestClassicDesc = "This is the behavior of CSMC in previous\n" // - "versions of the randomizer.\n" // - "\n" // - "Major Items -> Big Wooden Chests\n" // - "Lesser Items -> Small Wooden Chests\n" // - "Boss Keys -> Big Fancy Chests\n" // - "Small Keys -> Small Fancy Chests"; // -string_view chestAgonyDesc = "The Chest Appearance Mod will only apply\n" // - "after obtaining the Shard of Agony.\n"; // - // -/*------------------------------ // -| EXTRA SHIELDS | // -------------------------------*/ // -string_view extraShieldsDesc = "Allow keeping more than 1 Deku and Hylian shield\n" - "in the inventory, so if you lose one you can then\n" - "re-equip it immediately. The shield count will be\n" - "displayed next to the item name.\n\n" // - "You can choose if extra shields should only be\n" // - "obtainable from randomized items or if they should" - "also be repeatedly buyable from shops."; // -/*------------------------------ // -| INGAME SPOILERS | // -------------------------------*/ // -string_view ingameSpoilersShowDesc = "Every spoiler is shown. Visibility can be toggled\n" - "from the in-game options menu."; // -string_view ingameSpoilersHideDesc = "Hides the spheres page and only shows a\n" // - "location's item after it has been found."; // - // -/*------------------------------ // -| MENU OPENING BUTTON | // -------------------------------*/ // -string_view menuButtonDesc = "Choose which button will bring up the Custom\n" // - "Information Menu."; // - // -/*------------------------------ // -| ARROW SWITCHING BUTTON | // -------------------------------*/ // -string_view arrowSwitchDesc = "Choose how you want to cycle through the arrow\n" // - "types while you're aiming the bow.\n" // - "The touch screen option refers to the middle part\n" - "of the screen where the map is displayed."; // - // -/*------------------------------ // -| START WITH CONSUMABLES | // -------------------------------*/ // -string_view startWithConsumablesDesc = "Start the game with maxed out Deku Sticks and Deku" - "Nuts."; // - // -/*------------------------------ // -| START WITH MAX RUPEES | // -------------------------------*/ // -string_view startWithMaxRupeesDesc = "Start the game with a full wallet.\n" // - "Wallet upgrades will also fill the wallet."; // -/*------------------------------ // -| STARTING HEALTH | // -------------------------------*/ // -string_view startingHealthDesc = "If you start with 0 hearts, Link will be instantly" - "KO'd not only by any damage source, but also by\n"// - "recovery hearts and fairies. Sometimes guards too.\n" - "You can safely pick up Heart Pieces and Containers" - "though, and the effects will end when you obtain\n" - "at least one heart."; // - // -/*------------------------------ // -| STARTING BUNNY HOOD | // -------------------------------*/ // -string_view startingBunnyHoodDesc = "NOTE: Staring with the bunny hood is experimental." - "Currently the bunny hood will get overwriten when " - "you obtain the Weird Egg and you will need to get " - "it again afterwards."; // - // -/*------------------------------ // -| ITEM POOL | // -------------------------------*/ // -string_view itemPoolPlentiful = "Extra major items are added to the pool."; // -string_view itemPoolBalanced = "Original item pool."; // -string_view itemPoolScarce = "Some excess items are removed, including health\n"// - "upgrades."; // -string_view itemPoolMinimal = "Most excess items are removed."; // - // -/*------------------------------ // -| ICE TRAPS | // -------------------------------*/ // -string_view iceTrapsOff = "All Ice Traps are removed."; // -string_view iceTrapsNormal = "Only Ice Traps from the base item pool are placed."; -string_view iceTrapsExtra = "Chance to add extra Ice Traps when junk items are\n" - "added to the itempool."; // -string_view iceTrapsMayhem = "All added junk items will be Ice Traps."; // -string_view iceTrapsOnslaught = "All junk items will be replaced by Ice Traps, even" - "those in the base pool."; // -/*------------------------------ // -| REMOVE DOUBLE DEFENSE | // -------------------------------*/ // -string_view removeDDDesc = "If set the double defense item will be removed\n" // - "from the item pool for balanced and plentiful."; // -/*------------------------------ // -| PROGRESSSIVE GORON SOWRD | // -------------------------------*/ // -string_view progGoronSword = "Giant's Knife will always be found\n" // - "before Biggoron's Sword. Medigoron only starts\n" // - "selling new knives once the Giant's Knife\n" // - "has been found and broken."; // -/*------------------------------ // -| USE FARORE'S WIND ANYWHERE | // -------------------------------*/ // -string_view faroresWindAnywhereDesc = "Farore's Wind can be used outside of dungeons."; // - // -/*------------------------------ // -| LIFT AGE RESTRICTIONS | // -------------------------------*/ // -string_view ageRestrictionsDesc = "Remove age restrictions for inventory items.\n" // - "Select \"Choose\" to open the list of individual\n" - "options.\n\n" // - "Most of the items won't appear correctly when\n" // - "used as the wrong version of Link, but they'll be\n" - "fully functional otherwise."; // - // -/*------------------------------ // -| AGE RESTRICTIONS IN LOGIC | // -------------------------------*/ // -string_view ageItemsInLogicDesc = "Using items as the wrong age may be required to\n"// - "beat the seed."; // -/*------------------------------ // -| ENABLE ADULT DEKU STICK | // -------------------------------*/ // -string_view adultStickDesc = "Adult Link can wield a Deku Stick.\n" // - "It will look like the N64 Deku Stick, but with a\n" - "simpler texture."; // - // -/*------------------------------ // -| ENABLE ADULT BOOMERANG | // -------------------------------*/ // -string_view adultBoomerangDesc = "Adult Link can throw the boomerang."; // - // -/*------------------------------ // -| ENABLE CHILD HAMMER | // -------------------------------*/ // -string_view childHammerDesc = "Child Link can swing the Megaton Hammer."; // - // -/*------------------------------ // -| ENABLE ADULT SLINGSHOT | // -------------------------------*/ // -string_view adultSlingshotDesc = "Adult Link can use the Slingshot (but it looks\n" // - "like the Bow)."; // - // -/*------------------------------ // -| ENABLE CHILD BOW | // -------------------------------*/ // -string_view childBowDesc = "Child Link can use the Bow. It will look like the\n" - "Slingshot, but will shoot arrows."; // - // -/*------------------------------ // -| ENABLE CHILD HOOKSHOT | // -------------------------------*/ // -string_view childHookshotDesc = "Child Link can use the Hookshot/Longshot.\n" // - "The hook will look like a small bomb."; // -/*------------------------------ // -| ENABLE CHILD IRON BOOTS | // -------------------------------*/ // -string_view childIronBootsDesc = "Child Link can equip the Iron Boots."; // - // -/*------------------------------ // -| ENABLE CHILD HOVER BOOTS | // -------------------------------*/ // -string_view childHoverBootsDesc = "Child Link can equip the Hover Boots."; // - // -/*------------------------------ // -| ENABLE ADULT MASKS | // -------------------------------*/ // -string_view adultMasksDesc = "Adult Link can equip masks.\n" // - "\n" // - "This setting will not change the logic."; // - // -/*------------------------------ // -| ENABLE ADULT KOKIRI SWORD | // -------------------------------*/ // -string_view adultKokiriSwordDesc = "Adult Link can equip the Kokiri Sword."; // - // -/*------------------------------ // -| ENABLE CHILD MASTER SWORD | // -------------------------------*/ // -string_view childMasterSwordDesc = "Child Link can equip the Master Sword."; // - // -/*------------------------------ // -| ENABLE CHILD BIGGORON SWORD | // -------------------------------*/ // -string_view childBiggoronSwordDesc = "Child Link can equip the Biggoron Sword and the\n"// - "Giant's Knife."; // - // -/*------------------------------ // -| ENABLE ADULT DEKU SHIELD | // -------------------------------*/ // -string_view adultDekuShieldDesc = "Adult Link can equip the Deku Shield."; // - // -/*------------------------------ // -| ENABLE CHILD MIRROR SHIELD | // -------------------------------*/ // -string_view childMirrorShieldDesc = "Child Link can equip the Mirror Shield."; // - // -/*------------------------------ // -| ENABLE CHILD GORON TUNIC | // -------------------------------*/ // -string_view childGoronTunicDesc = "Child Link can equip the Goron Tunic."; // - // -/*------------------------------ // -| ENABLE CHILD ZORA TUNIC | // -------------------------------*/ // -string_view childZoraTunicDesc = "Child Link can equip the Zora Tunic."; // - // -/*------------------------------ // -| RESTORE ISG | // -------------------------------*/ // -string_view restoreISGdesc = "The Infinite Sword Glitch will work like in OoT.\n\n" - "Specifically, interrupting a crouch stab will\n" // - "activate the glitch, and putting away or pulling\n" - "out items will not cancel it."; // -/*------------------------------ // -| GK DURABILITY | // -------------------------------*/ // -string_view gkDurabilityVanilla = "The durability will always be set to 8."; // -string_view gkDurabilityRandomRisk = "Each Giant's Knife will get a random durability\n"// - "between 1 and 128, with low being more common,\n" // - "and with an average of 15."; // -string_view gkDurabilityRandomSafe = "Each Giant's Knife will get a random durability\n"// - "between 10 and 50, with an average of 30."; // - // -/*------------------------------ // -| RUPEES AS AMMO | // -------------------------------*/ // -string_view retroAmmoDesc = "If you run out of ammo or magic, you'll use\n" // - "rupees instead."; // -/*------------------------------ // -| MULTIPLAYER | // -------------------------------*/ // -string_view mp_EnabledDesc = "Enables multiplayer.\n" // - "Other players will always be seen and heard\n" // - "regardless of the other settings."; // -string_view mp_SharedProgressDesc = "Progress and certain actors will be synced between" - "everyone in the network that has this option on,\n" - "the same seed hash, and the same sync id."; // -string_view mp_SyncIdDesc = "Limits shared progress to only sync with other\n" // - "players that have the same sync ID. This is only\n" - "necessary to set if multiple groups of players\n" // - "play on the same seed hash, but only want to share" - "their progress with certan people.\n" // - "For example, when doing a 2v2 race.\n" // - "\n" // - "Does not affect seed generation."; // -string_view mp_SharedHealthDesc = "Syncs health when shared progress is on,\n" // - "otherwise just shares the damage and recovery."; // -string_view mp_SharedRupeesDesc = "Syncs rupees when shared progress is on,\n" // - "otherwise just shares the gain and loss."; // -string_view mp_SharedAmmoDesc = "Syncs ammo when shared progress is on,\n" // - "otherwise just shares the gain and loss."; // - // -/*------------------------------ // -| INGAME DEFAULTS | // -------------------------------*/ // -string_view naviNotificationsDesc = "Adjust how much Navi should bother you.\n" // - "Silenced prevents it completely, while Constant\n"// - "can be used to allow repeated attempts at related\n" - "glitches without having to reload the save."; // -string_view ignoreMaskReactionDesc = "Causes NPCs to respond normally when wearing\n" // - "masks. Does not apply to trade quest dialouges."; // - // -/*------------------------------ // -| NAVI & TRAIL COLORS | // -------------------------------*/ // -string_view naviColorsDesc = "Inner color is for the main light orb, outer color" - "is for the aura.\n\n" // - "The Rainbow option will make the color change\n" // - "continuously in a 3 seconds loop."; // -string_view necessarySimpleModeDesc = "For boomerang and sword trails, OoT3D uses a\n" // - "special texture that doesn't support every color.\n\n" - "Unsupported colors will always use the plain\n" // - "texture from OoT instead:\n" // - "- Black and Purple sword trails\n" // - "- White, Black and Purple boomerang trails\n" // - "- Random or Custom colors without at least one\n" // - " maxed out RGB component."; // -string_view alwaysSimpleModeDesc = "All boomerang and sword trails will use the plain\n" - "texture from OoT, regardless of what color is\n" // - "chosen."; // - // -/*------------------------------ // -| COLORED KEYS | // -------------------------------*/ // -string_view coloredKeysDesc = "If set, small key models will be colored\n" // - "differently depending on which dungeon they can be" - "used in. Forest Temple keys are green. Fire Temple" - "keys are red. etc."; // -string_view coloredBossKeysDesc = "If set, boss key models will be colored\n" // - "differently depending on which dungeon they can be" - "used in. The Forest Temple boss key is green. The " - "Fire Temple boss key is red. etc."; // -/*------------------------------ // -| MIRROR WORLD | // -------------------------------*/ // -string_view mirrorWorldOffDesc = "The world will not be mirrored."; // -string_view mirrorWorldOnDesc = "The world will be mirrored."; // -string_view mirrorWorldSceneDesc = "Some regions will be mirrored while others won't."; -string_view mirrorWorldEntranceDesc = "Different entrances to the same region will alter\n" - "whether it is mirrored or not."; // -string_view mirrorWorldRandomDesc = "Whether the world is mirrored may change after\n" // - "every loading zone inconsistently."; // -/*------------------------------ // -| SOLD OUT COSMETIC SHOP MODEL | // -------------------------------*/ // -string_view betaSoldOutDesc = "The game contains an unused model for sold out\n" // - "items in shops. It's a remade version of the N64\n" - "model, spelling \"Sold Out\" in English.\n\n" // - "This setting enables its use in shops."; // -/*------------------------------ // -| SOULLESS ENEMIES LOOK | // -------------------------------*/ // -string_view soullessVanillaDesc = "Soulless enemies will appear normal."; // -string_view soullessTexturelessDesc = "Soulless enemies will appear with no textures and\n" - "a shaded selectable color applied to their bodies."; -string_view soullessGrayscaleDesc = "Soulless enemies will appear in black and white.";// -string_view soullessPurpleFlamesDesc = "Soulless enemies will appear with purple flames\n"// - "around them, and their bodies will be invisible.";// -string_view soullessFlashingDesc = "Soulless enemies will flash between visible and\n"// - "invisible on every frame."; // -/*------------------------------ // -| SHUFFLE MUSIC | // -------------------------------*/ // -string_view musicRandoDesc = "Randomize the music in the game."; // -string_view shuffleBGMDesc = "Shuffle background music.\n" // - "Mixed allows any BGM to appear anywhere.\n" // - "The group categories are Area Themes, Event Music," - "and Battle Themes.\n" // - "\"Own\" is for Custom Music, limiting the original\n" - "music to only appear at its original place.\n"; // -string_view shuffleMelodiesDesc = "Shuffle played-once music.\n" // - "Mixed allows any melody to appear anywhere.\n" // - "The group categories are Fanfares,\n" // - "and Ocarina Songs.\n" // - "\"Own\" is for Custom Music, limiting the original\n" - "music to only appear at its original place.\n"; // -string_view customMusicDesc = "Add custom music to the pool. The sound archive\n"// - "has to be placed in the Custom Music folder."; // -string_view customMusicOnlyDesc = "Excludes the game's original music from the pool.\n" - "If there's not enough custom music, the original\n" - "song will be used."; // -/*------------------------------ // -| SHUFFLE SFX | // -------------------------------*/ // -string_view shuffleSFXOff = "Sound effects will stay vanilla."; // -string_view shuffleSFXAll = "All sound effects will be shuffled."; // -string_view shuffleSFXSceneSpecific = "All sound effects will be shuffled, but will also\n" - "be different in each scene."; // -string_view shuffleSFXChaos = "Each sound effect will become random about\n" // - "every second."; // -string_view shuffleSFXCategorically = "Sound effects will be shuffled in categories.\n" // - "\n" // - "The sound may get annoying fast when disabled."; // -/*------------------------------ // -| OCARINA INSTRUMENT | // -------------------------------*/ // -string_view ocarinaInstrDesc = "Change the instrument used when playing the\n" // - "ocarina."; // -string_view ocarinaInstrRandomDesc = "A random instrument from the list will be chosen."; -string_view ocarinaInstrSceneDesc = "The instrument will be different in each scene."; // -/*------------------------------ // -| RANDOM TRAP DAMAGE TYPE | // -------------------------------*/ // -string_view randomTrapDmgDesc = "All traps will be the base game ice trap"; // - // -string_view basicTrapDmgDesc = "All alternative traps will cause a small damage\n"// - "and no other negative effects"; // - // -string_view advancedTrapDmgDesc = "Choose which advanced traps may appear from the\n"// - "list below"; // - // -string_view fireTrapDesc = "This trap will set you on fire, burning your\n" // - "Deku Shield if it's equipped."; // - // -string_view antiFairyTrapDesc = "This dangerous fairy will inflict up to 8 hearts\n" - "of damage, but it usually doesn't kill you if you\n" - "have less than that."; // - // -string_view rupoorTrapDesc = "This rupee will make you poor instead of rich"; // -string_view rupoorTrapSeverityDesc = "Rupees lost when getting a rupoor"; // -string_view curseTrapsDesc = "Some traps will apply status effects for 1 minute."; -string_view screenTrapsDesc = "Extra curses are added that rotate the screen."; // - // -/*------------------------------ // -| EXTRA ARROW EFFECTS | // -------------------------------*/ // -string_view extraArrowEffectsDesc = "Ice Arrows will act like blue fire, melting red\n"// - "ice and breaking mud walls in Dodongo's Cavern.\n\n" - "Light Arrows will activate Sun Switches like in\n"// - "Majora's Mask."; // - // -/*------------------------------ // -| HYPER ACTORS | // -------------------------------*/ // -string_view hyperActorsDesc = "Powers up the selected actors, allowing them to\n"// - "move and act twice as fast!"; // - // -string_view hyperBossesDesc = "Affects all of the main bosses, including both\n" // - "Ganon phases."; // - // -string_view hyperMiddleBossesDesc = "Affects all middle bosses, like Dark Link and\n" // - "Dead Hand. This also includes Iron Knuckles and\n"// - "Stalfos."; // - // -string_view hyperEnemiesDesc = "Affects all regular enemies."; // - // -/*------------------------------ // -| FREE CAMERA | // -------------------------------*/ // -string_view freeCamDesc = "Use the C-stick to control the camera on new 3DS\n" - "systems and Citra.\n\n" // - "Go to Personalization Settings > Ingame Defaults\n" - "for camera control options."; // - // -/*------------------------------ // -| RANDOM GS LOCATIONS | // -------------------------------*/ // -string_view randomGsLocationsDesc = "Moves Gold Skulltulas to different locations\n" // - "around the same area as the original.\n" // - "The age they appear in is always the same as the\n" - "original. If it hides during the night mostly\n" // - "depends on if the sun can reach it.\n" // - "They will never be in generic areas, such as\n" // - "Business Scrub grottos, Fairy Fountains, etc.\n" // - "Some new locations are only available with certain" - "settings enabled, like tricks and glitches.\n" // - "WIP feature. Most dungeon locations are the same."; - // -string_view gsLocGuaranteeNewDesc = "Excludes the original location from the Gold\n" // - "Skulltula's available locations pool.\n" // - "\n" // - "If no new locations are available, the original\n"// - "will be used regardless."; // - // -/*------------------------------ // -| RANDOM SONG NOTES | // -------------------------------*/ // -string_view randomSongNotesDesc = "Randomize the notes for each ocarina song.\n" // - "Regular songs will be 3 notes repeated twice.\n" // - "Warp songs will be between 5 and 8 notes."; // - //--------------// -/*------------------------------ // -| DETAILED LOGIC EXPLANATIONS | // -------------------------------*/ -string_view ToggleLogicNoneDesc = "Disables all the Detailed Logic tricks."; // -string_view ToggleLogicNoviceDesc = "Enables only the easier Detailed Logic tricks"; // -string_view ToggleLogicIntermediateDesc = "Enables all but the harder Detailed Logic tricks."; -string_view ToggleLogicExpertDesc = "Enables all the Detailed Logic tricks."; // - // -string_view LogicGrottosWithoutAgonyDesc = "Difficulty: Novice\n" // - "Grottos can be accessed without Shard of Agony,\n"// - "simply by knowing where they are located."; // -string_view LogicVisibleCollisionDesc = "Difficulty: Novice\n" // - "The closed Kakariko Village Gate can be crossed\n"// - "when coming from Death Mountain Trail.\n" // - "Useful for Entrance Randomiser."; // -string_view LogicFewerTunicRequirementsDesc = "Difficulty: Novice\n" // - "Allows the following possible without Tunics:\n" // - "- Enter Water Temple.\n" // - "- Enter Fire Temple. Only the first floor\n" // - " is accessible, and not Volvagia.\n" // - "- Zora's Fountain Bottom Freestanding PoH.\n" // - "- Gerudo Training Grounds Underwater Silver Rupee\n" - "Chest. May need to make multiple trips."; // -string_view LogicLostWoodsGSBeanDesc = "Difficulty: Novice\n" // - "You can collect the token with a precise Hookshot\n" - "use, as long as you can kill the Skulltula first.\n" - "It can be killed using Longshot, Bow, Bombchus\n" // - "or Din's Fire."; // -string_view LogicLabDivingDesc = "Difficulty: Novice\n" // - "Remove the Iron Boots in the midst of Hookshotting" - "the underwater crate"; // -string_view LogicLabWallGSDesc = "Difficulty: Intermediate\n" // - "The jump slash to actually collect the token is\n"// - "somewhat precise"; // -string_view LogicGraveyardPoHDesc = "Difficulty: Novice\n" // - "Using a precise moving setup you can obtain the\n"// - "Piece of Heart by having the Boomerang interact\n"// - "with it along the return path."; // -string_view LogicChildDampeRacePoHDesc = "Difficulty: Intermediate\n" // - "It is possible to complete the second dampe race\n" - "as child in under a minute, but it is a strict\n" // - "time limit."; // -string_view LogicGVHammerChestDesc = "Difficulty: Novice\n" // - "The chest can be reached by sidehopping between\n"// - "the wall and the east most hammer rock."; // -string_view LogicGerudoKitchenDesc = "Difficulty: Intermediate\n" // - "The logic normally guarantees one of Bow,\n" // - "Hookshot, or Hover Boots."; // -string_view LogicGerudoChildClimbDesc = "Difficulty: Intermediate\n" // - "A precise jump allows child to climb the ledge\n" // - "after the kitchen room."; // -string_view LogicLensWastelandDesc = "Difficulty: Expert\n" // - "By memorizing the path, you can travel through the" - "Wasteland without using the Lens of Truth to see\n" - "the Poe. The equivalent trick for going in reverse" - "through the Wasteland is \"Reverse Wasteland\"."; // -string_view LogicReverseWastelandDesc = "Difficulty: Expert\n" // - "By memorizing the path, you can travel through the" - "Wasteland in reverse."; // -string_view LogicColossusGSDesc = "Difficulty: Expert\n" // - "Somewhat precise. If you kill enough Leevers you\n" - "can get enough of a break to take some time to aim" - "more carefully."; // -string_view LogicOutsideGanonsGSDesc = "Difficulty: Intermediate\n" // - "Can be killed with a precise sidehop jumpslash\n" // - "from the top of the broken arch."; // -string_view LogicManOnRoofDesc = "Difficulty: Novice\n" // - "Can be reached by side-hopping off the watchtower."; -string_view LogicWindmillPoHHookshotDesc = "Difficulty: Novice\n" // - "Adult Link can reach the upper area of the windmill" - "using the hookshot and a midair jump slash."; // -string_view LogicDMTBombableDesc = "Difficulty: Expert\n" // - "Child Link can blow up the wall using a nearby\n" // - "bomb flower. You must backwalk with the flower and" - "then quickly throw it toward the wall."; // -string_view LogicDMTSoilGSDesc = "Difficulty: Intermediate\n" // - "Bugs will go into the soft soil even while the\n" // - "boulder is still blocking the entrance if dropped\n" - "from above. Then, using a precise moving setup you" - "can kill the Gold Skulltula and obtain the token by" - "having the Boomerang collect it while returning.";// -string_view LogicDMTSummitHoverDesc = "Difficulty: Intermediate\n" // - "By rolling around the lower boulder with hover\n" // - "boots and grabbing the ledge with the higher\n" // - "boulder near the wall, you'll be able to grab the\n" - "ledge above it to reach the summit."; // -string_view LogicDMCPlatformJumpDesc = "Difficulty: Novice\n" // - "Adult can reach these rupees by jumping down from\n" - "the upper part of DMC, without scarecrow/longshot."; -string_view LogicLinkGoronDinsDesc = "Difficulty: Intermediate\n" // - "The timing is quite awkward."; // -string_view LogicGoronCityLeftMostDesc = "Difficulty: Novice\n" // - "A precise backwalk starting from on top of the\n" // - "crate and ending with a precisely-timed backflip\n" - "can reach this chest without needing either the\n"// - "Hammer or Silver Gauntlets."; // -string_view LogicGoronCityPotDesc = "Difficulty: Expert\n" // - "A Bombchu can be used to stop the spinning pot,\n"// - "but it can be quite finicky to get it to work."; // -string_view LogicGoronCityPotWithStrengthDesc = "Difficulty: Intermediate\n" // - "Allows for stopping the Goron City Spinning Pot\n"// - "using a bomb flower alone, requiring strength in\n" - "lieu of inventory explosives."; // -string_view LogicChildRollingWithStrengthDesc = "Difficulty: Expert\n" // - "Use the bombflower on the stairs or near\n" // - "Medigoron. Timing is tight, especially without\n" // - "backwalking."; // -string_view LogicCraterUpperToLowerDesc = "Difficulty: Intermediate\n" // - "With the Hammer, you can jump slash the rock twice" - "in the same jump in order to destroy it before you" - "fall into the lava."; // -string_view LogicCraterBeanPoHWithHoversDesc = "Difficulty: Expert\n" // - "Hover from the base of the bridge near Goron City\n" - "and walk up the very steep slope."; // -string_view LogicBiggoronBoleroDesc = "Difficulty: Intermediate\n" // - "Playing a warp song normally causes a trade item\n" - "to spoil immediately, however, it is possible use\n" - "Bolero to reach Biggoron and still deliver the Eye" - "Drops before they spoil. If you do not wear the\n" - "Goron Tunic, the heat timer inside the crater will" - "override the trade item's timer. When you exit to\n" - "Death Mountain Trail you will have one second to\n" - "show the Eye Drops before they expire."; // -string_view LogicZoraRiverLowerDesc = "Difficulty: Novice\n" // - "Adult can reach this PoH with a precise jump, no\n" - "Hover Boots required."; // -string_view LogicZoraRiverUpperDesc = "Difficulty: Novice\n" // - "Adult can reach this PoH with a precise jump, no\n" - "Hover Boots required."; // -string_view LogicZoraRiverRupeesJumpDesc = "Difficulty: Novice\n" // - "Adult can reach these rupees by jumping down from\n" - "the lullaby platform no Iron Boots required."; // -string_view LogicZFGreatFairyDesc = "Difficulty: Novice\n" // - "Destroying the boulders blocking the hidden area\n" - "with silver gauntlets and hammer lets you pass\n" // - "under the wall to the great fairy fountain."; // -string_view LogicDekuB1WebsWithBowDesc = "Difficulty: Novice\n" // - "All spider web walls in the Deku Tree basement can" - "be burnt as adult with just a bow by shooting\n" // - "through torches. This trick only applies to the\n"// - "circular web leading to Gohma; the two vertical\n"// - "webs are always in logic. Backflip onto the chest\n" - "near the torch at the bottom of the vine wall.\n" // - "With precise positioning you can shoot through the" - "torch to the right edge of the circular web."; // -string_view LogicDekuB1SkipDesc = "Difficulty: Intermediate\n" // - "A precise jump can be used to skip needing to use\n" - "the Slingshot to go around B1 of the Deku Tree. If" - "used with the \"Closed Forest\" setting, a\n" // - "Slingshot will not be guaranteed to exist\n" // - "somewhere inside the Forest. This trick applies to" - "both Vanilla and Master Quest."; // -string_view LogicDekuBasementGSDesc = "Difficulty: Intermediate\n" // - "Can be defeated by doing a precise jump slash."; // -string_view LogicDCStaircaseDesc = "Difficulty: Intermediate\n" // - "The Bow can be used to knock down the stairs with\n" - "two well-timed shots."; // -string_view LogicDCJumpDesc = "Difficulty: Novice\n" // - "Jump is adult only."; // -string_view LogicDCSlingshotSkipDesc = "Difficulty: Expert\n" // - "With precise platforming, child can cross the\n" // - "platforms while the flame circles are there. When\n" - "enabling this trick, it's recommended that you\n" // - "also enable the Adult variant: \"Dodongo's Cavern\n" - "Spike Trap Room Jump without Hover Boots\"."; // -string_view LogicDCScarecrowGSDesc = "Difficulty: Intermediate\n" // - "You can jump off an Armos Statue to reach the\n" // - "alcove with the Gold Skulltula. It takes quite a\n" - "long time to pull the statue the entire way. The\n" - "jump to the alcove can be a bit picky when done\n"// - "as child."; // -string_view LogicJabuBossGSAdultDesc = "Difficulty: Intermediate\n" // - "You can easily get over to the door to the near\n"// - "boss area early with Hover Boots. The tricky part\n" - "is getting through the door without being able to\n" - "use a box to keep the switch pressed. One way is\n" - "to quickly roll from the switch and open the door\n" - "before it closes."; // -string_view LogicJabuScrubJumpDiveDesc = "Difficulty: Novice\n" // - "Standing above the underwater tunnel leading to\n"// - "the scrub, jump down and swim through the tunnel.\n" - "This allows adult to access the scrub with no\n" // - "Scale or Iron Boots."; // -string_view LogicForestOutsideBackdoorDesc = "Difficulty: Intermediate\n" // - "With a precise jump slash from above, you can\n" // - "reach the backdoor to the west courtyard without\n" - "Hover Boots. Applies to both Vanilla and Master\n"// - "Quest."; // -string_view LogicForestDoorFrameDesc = "Difficulty: Intermediate\n" // - "A precise Hover Boots movement from the upper\n" // - "balconies in this courtyard can be used to get on\n" - "top of the door frame. Applies to both Vanilla and" - "Master Quest. In Vanilla, from on top the door\n" // - "frame you can summon Pierre, allowing you to\n" // - "access the falling ceiling room early. In Master\n" - "Quest, this allows you to obtain the GS on the\n" // - "door frame as adult without Hookshot or Song of\n"// - "Time."; // -string_view LogicForestOutdoorEastGSDesc = "Difficulty: Novice\n" // - "Precise Boomerang throws can allow child to kill\n" - "the Skulltula and collect the token."; // -string_view LogicFireBossDoorJumpDesc = "Difficulty: Intermediate\n" // - "The Fire Temple Boss Door can be reached with a\n"// - "precise jump. You must be touching the side wall\n" - "of the room so that Link will grab the ledge from\n" - "farther away than is normally possible."; // -string_view LogicFireStrengthDesc = "Difficulty: Expert\n" // - "A precise jump can be used to skip pushing the\n" // - "block. This also allows child to reach the block."; -string_view LogicFireScarecrowDesc = "Difficulty: Novice\n" // - "Also known as \"Pixelshot\". The Longshot can\n" // - "reach the target on the elevator itself, allowing\n" - "you to skip needing to spawn the scarecrow."; // -string_view LogicFireFlameMazeDesc = "Difficulty: Expert\n" // - "If you move quickly you can sneak past the edge of" - "a flame wall before it can rise up to block you.\n" - "To do it without taking damage is more precise.\n"// - "Allows you to progress without needing either a\n"// - "Small Key or Hover Boots."; // -string_view LogicFireSongOfTimeDesc = "Difficulty: Intermediate\n" // - "A precise jump can be used to reach this room."; // -string_view LogicWaterTempleTorchLongshotDesc = "Difficulty: Novice\n" // - "Stand on the eastern side of the central pillar\n"// - "and longshot the torches on the bottom level.\n" // - "Swim through the corridor and float up to the top\n" - "level. This allows access to this area and lower\n" - "water levels without Iron Boots. The majority of\n" - "the tricks that allow you to skip Iron Boots in\n"// - "the Water Temple are not going to be relevant\n" // - "unless this trick is first enabled."; // -string_view LogicWaterTempleUpperBoostDesc = "Difficulty: Expert\n" // - "Stand on the corner closest to the upper ledge\n" // - "where you play Zelda's Lullaby to raise the water\n" - "and put a bomb down behind you. Hold forward when\n" - "the bomb explodes and Link should jump just far\n"// - "enough to grab the ledge."; // -string_view LogicWaterCentralBowDesc = "Difficulty: Intermediate\n" // - "A very precise Bow shot can hit the eye switch\n" // - "from the floor above. Then, you can jump down into" - "the hallway and make through it before the gate\n"// - "closes. It can also be done as child, using the\n"// - "Slingshot instead of the Bow."; // -string_view LogicWaterCentralGSFWDesc = "Difficulty: Novice\n" // - "If you set Farore's Wind inside the central pillar" - "and then return to that warp point after raising\n" - "the water to the highest level, you can obtain\n" // - "this Skulltula Token with Hookshot or Boomerang.";// -string_view LogicWaterCrackedWallNothingDesc = "Difficulty: Expert\n" // - "A precise jump slash (among other methods) will\n"// - "get you to the cracked wall without needing the\n"// - "Hover Boots or to raise the water to the middle\n"// - "level. This trick supersedes \"Water Temple\n" // - "Cracked Wall with Hover Boots\"."; // -string_view LogicWaterCrackedWallHoversDesc = "Difficulty: Expert\n" // - "With a midair side-hop while wearing the Hover\n" // - "Boots, you can reach the cracked wall without\n" // - "needing to raise the water up to the middle level."; -string_view LogicWaterBossKeyRegionDesc = "Difficulty: Intermediate\n" // - "With precise Hover Boots movement it is possible\n" - "to reach the boss key chest's region without\n" // - "needing the Longshot. It is not necessary to take\n" - "damage from the spikes. The Gold Skulltula Token\n" - "in the following room can also be obtained with\n"// - "just the Hover Boots."; // -string_view LogicWaterBKJumpDiveDesc = "Difficulty: Intermediate\n" // - "Stand on the very edge of the raised corridor\n" // - "leading from the push block room to the rolling\n"// - "boulder corridor. Face the gold skulltula on the\n" - "waterfall and jump over the boulder corridor floor" - "into the pool of water, swimming right once\n" // - "underwater. This allows access to the boss key\n" // - "room without Iron boots."; // -string_view LogicWaterNorthBasementLedgeJumpDesc = "Difficulty: Novice\n" // - "In the northern basement there's a ledge from\n" // - "where, in vanilla Water Temple, boulders roll out\n" - "into the room. Normally to jump directly to this\n" - "ledge logically requires the Hover Boots, but with" - "precise jump, it can be done without them. This\n"// - "trick applies to both Vanilla and Master Quest."; // -string_view LogicWaterDragonAdultDesc = "Difficulty: Expert\n" // - "Normally you need both Hookshot and Iron Boots to\n" - "hit the switch and swim through the tunnel to get\n" - "to the chest. But by hitting the switch from dry\n" - "land, using one of Bombchus, Hookshot, or Bow, it\n" - "is possible to skip one or both of those\n" // - "requirements. After the gate has been opened, a\n"// - "well-timed dive with at least the Silver Scale\n" // - "could be used to swim through the tunnel."; // -string_view LogicWaterDragonJumpDiveDesc = "Difficulty: Expert\n" // - "If you come into the dragon statue room from the\n" - "serpent river, you can jump down from above and\n"// - "get into the tunnel without needing either Iron\n"// - "Boots or a Scale. This trick applies to both\n" // - "Vanilla and Master Quest. In Vanilla, you must\n" // - "shoot the switch from above with the Bow, and then" - "quickly get through the tunnel before the gate\n" // - "closes."; // -string_view LogicWaterRiverGSDesc = "Difficulty: Novice\n" // - "Standing on the exposed ground toward the end of\n" - "the river, a precise Longshot use can obtain the\n" - "token."; // -string_view LogicWaterFallingPlatformGSDesc = "Difficulty: Intermediate\n" // - "If you stand on the very edge of the platform,\n" // - "this Gold Skulltula can be obtained with only the\n" - "Hookshot."; // -string_view LogicSpiritLowerAdultSwitchDesc = "Difficulty: Novice\n" // - "A bomb can be used to hit the switch on the\n" // - "ceiling, but it must be thrown from a particular\n" - "distance away and with precise timing."; // -string_view LogicSpiritChildBombchuDesc = "Difficulty: Intermediate\n" // - "A carefully-timed Bombchu can hit the switch."; // -string_view LogicSpiritWallDesc = "Difficulty: Expert\n" // - "The logic normally guarantees a way of dealing\n" // - "with both the Beamos and the Walltula before\n" // - "climbing the wall."; // -string_view LogicSpiritLobbyGSDesc = "Difficulty: Intermediate\n" // - "Standing on the highest part of the arm of the\n" // - "statue, a precise Boomerang throw can kill and\n" // - "obtain this Gold Skulltula. You must throw the\n" // - "Boomerang slightly off to the side so that it\n" // - "curves into the Skulltula, as aiming directly at\n" - "it will clank off of the wall in front."; // -string_view LogicSpiritMapChestDesc = "Difficulty: Intermediate\n" // - "To get a line of sight from the upper torch to the" - "map chest torches, you must pull an Armos statue\n" - "all the way up the stairs."; // -string_view LogicSpiritSunChestDesc = "Difficulty: Expert\n" // - "Using the blocks in the room as platforms you can\n" - "get lines of sight to all three torches. The timer" - "on the torches is quite short so you must move\n" // - "quickly in order to light all three."; // -string_view LogicShadowFireArrowEntryDesc = "Difficulty: Expert\n" // - "It is possible to light all of the torches to open" - "the Shadow Temple entrance with just Fire Arrows,\n" - "but you must be very quick, precise, and strategic" - "with how you take your shots."; // -string_view LogicShadowUmbrellaDesc = "Difficulty: Expert\n" // - "A very precise Hover Boots movement from off of\n"// - "the lower chest can get you on top of the crushing\n" - "spikes without needing to pull the block. Applies\n" - "to both Vanilla and Master Quest."; // -string_view LogicShadowFreestandingKeyDesc = "Difficulty: Intermediate\n" // - "Release the Bombchu with good timing so that it\n"// - "explodes near the bottom of the pot."; // -string_view LogicShadowStatueDesc = "Difficulty: Novice\n" // - "By sending a Bombchu around the edge of the gorge," - "you can knock down the statue without needing a\n"// - "Bow. Applies in both vanilla and MQ Shadow."; // -string_view LogicShadowBongoDesc = "Difficulty Expert\n" // - "Using precise sword slashes, Bongo Bongo can be\n"// - "defeated without using projectiles.\n" // - "This trick is much more difficult when done with\n" - "Kokiri Sword vs Master Sword or Biggorron Sword.\n" - "Useful for Boss Entrance Randomizer."; // -string_view LogicChildDeadhandDesc = "Difficulty: Novice\n" // - "Requires 10 stick slashes."; // -string_view LogicGtgWithoutHookshotDesc = "Difficulty: Expert\n" // - "The final silver rupee on the ceiling can be\n" // - "reached by being pulled up into it by the\n" // - "Wallmaster.\n" // - "Then, you must also reach the exit of the room\n" // - "without the use of the Hookshot. If you move\n" // - "quickly, you can sneak past the edge of a\n" // - "flame wall before it can rise up to block you.\n" // - "To do so without taking damage is more precise"; // -string_view LogicGtgFakeWallDesc = "Difficulty: Novice\n" // - "A precise Hover Boots use from the top of the\n" // - "chest can allow you to grab the ledge without\n" // - "needing the usual requirements."; // -string_view LogicLensSpiritDesc = "Difficulty: Novice\n" // - "Removes the requirements for the Lens of Truth in\n" - "Spirit Temple."; // -string_view LogicLensShadowDesc = "Difficulty: Novice\n" // - "Removes the requirements for the Lens of Truth in\n" - "Shadow Temple before the invisible moving platform"; -string_view LogicLensShadowBackDesc = "Difficulty: Intermediate\n" // - "Removes the requirements for the Lens of Truth in\n" - "Shadow Temple beyond the invisible moving platform"; -string_view LogicLensBotwDesc = "Difficulty: Intermediate\n" // - "Removes the requirements for the Lens of Truth in\n" - "Bottom of the Well."; // -string_view LogicLensGtgDesc = "Difficulty: Novice\n" // - "Removes the requirements for the Lens of Truth in\n" - "Gerudo Training Grounds."; // -string_view LogicLensCastleDesc = "Difficulty: Intermediate\n" // - "Removes the requirements for the Lens of Truth in\n" - "Ganon's Castle."; // -string_view LogicLensJabuMQDesc = "Difficulty: Novice\n" // - "Removes the requirements for the Lens of Truth in\n" - "Jabu Jabu's Belly MQ."; // -string_view LogicLensSpiritMQDesc = "Difficulty: Novice\n" // - "Removes the requirements for the Lens of Truth in\n" - "Spirit Temple MQ."; // -string_view LogicLensShadowMQDesc = "Difficulty: Novice\n" // - "Removes the requirements for the Lens of Truth in\n" - "Shadow Temple MQ before the invisible moving \n" // - "platform"; // -string_view LogicLensShadowMQBackDesc = "Difficulty: Intermediate\n" // - "Removes the requirements for the Lens of Truth in\n" - "Shadow Temple MQ beyond the invisible moving \n" // - "platform"; // -string_view LogicLensBotwMQDesc = "Difficulty: Novice\n" // - "Removes the requirements for the Lens of Truth in\n" - "Bottom of the Well MQ."; // -string_view LogicLensGtgMQDesc = "Difficulty: Novice\n" // - "Removes the requirements for the Lens of Truth in\n" - "Gerudo Training Grounds MQ."; // -string_view LogicLensCastleMQDesc = "Difficulty: Intermediate\n" // - "Removes the requirements for the Lens of Truth in\n" - "Ganon's Castle MQ."; // -string_view LogicSpiritTrialHookshotDesc = "Difficulty: Intermediate\n" // - "A precise jump off of an Armos can collect the\n" // - "highest rupee."; // - // -string_view LogicFlamingChestsDesc = "Difficulty: Novice\n" // - "The chests encircled in flames in Gerudo Training\n" - "Grounds and in Spirit Temple can be opened by\n" // - "running into the flames while Link is invincible\n" - "after taking damage."; // - // -/*------------------------------ // -| GLITCHES | // -------------------------------*/ // -const std::vector GlitchDifficulties{"Disabled", "Novice", "Intermediate", "Advanced", "Expert", "Hero"}; -string_view ToggleAllGlitchesDesc = "Set all glitches to the selected difficulty, or\n"// - "the closest available below."; // -/* Restricted Items */ // -string_view GlitchRestrictedItemsDescDisabled = "Swapping an item that can normally be used in an\n" - "area with one that would be dimmed will let you\n" - "use that item for 1 frame after closing your\n" // - "inventory. This can be useful on its own or in\n" // - "combination with other glitches."; // -string_view GlitchRestrictedItemsDescNovice = "You may be required to use restricted items."; // -/* Super Stab */ // -string_view GlitchSuperStabDescDisabled = "Forcing sticks to unequip during a crouch stab by\n" - "breaking it and moving them in your inventory has\n" - "the effect of hitting all spherical collision."; // -string_view GlitchSuperStabDescNovice = "You may be expected to hit switches or kill gold\n" - "skulltulas with a super stab."; // -/* ISG */ // -string_view GlitchISGDescDisabled = "Shortened to ISG, allows Link's melee weapon to\n"// - "be in a constant swinging state. Simply touching\n" - "objects with this causes them to get hit.\n" // - "Putting away the weapon while ISG is on hits\n" // - "any object with a spherical hitbox,\n" // - "such as small skulltulas. It is initiated by\n" // - "interrupting a crouch stab."; // -string_view GlitchISGDescNovice = "ISG may be required to kill certain enemies,\n" // - "or to Bomb Hover when enabled."; // -string_view GlitchISGDescIntermediate = "You may be required to use a bomb to activate ISG."; -string_view GlitchISGDescAdvanced = "You may be required to use a bomb to activate ISG\n" - "repeatedly or while under attack."; // -/* Hover */ // -string_view GlitchHoverDescDisabled = "Hovering allows Link to consecutively backflip\n" // - "in the air without falling. By shielding\n" // - "damage with ISG on, Link will stay in midair.\n" // - "While bombs aren't always required, this option\n"// - "will always expect them to be used.\n" // - "\n" // - "Requires ISG to be enabled."; // -string_view GlitchHoverDescNovice = "Only bombchus are required for hovering."; // -string_view GlitchHoverDescIntermediate = "Some hovers may require that you start from flat\n" - "terrain, which requires somewhat precise timing.";// -string_view GlitchHoverDescAdvanced = "Usage of regular bombs will now also be expected,\n" - "which may require consecutive precise timings."; // -/* Bomb OI */ // -string_view GlitchBombOIDescDisabled = "Allowing a bomb to explode in Link's hands while\n" - "moving and then attempting to pull out a cutscene\n" - "item on a specific frame will cause Link to play\n" - "an invisible ocarina instead.\n" // - "This will only work if bombs are not dimmed on the" - "frame you use the cutscene item."; // -string_view GlitchBombOIDescNovice = "You may be expected to use ocarina items with a\n"// - "bomb to play warp songs."; // -string_view GlitchBombOIDescIntermediate = "You may be expected to use ocarina items with a\n"// - "bomb to play the ocarina where Link's position\n" // - "matters."; // -string_view GlitchBombOIDescAdvanced = "You may be expected to use restricted items to use" - "the cutscene item or to make the bombs usable on\n" - "the correct frame."; // -string_view GlitchBombOIDescExpert = "You may be expected to use restricted items to\n" // - "perform ocarina items where Link's position isn't\n" - "particularly lenient"; // -/* Hover Boost */ // -string_view GlitchHoverBoostDescDisabled = "Equipping hover boots when Link takes damage will\n" - "cause him to keep the high knockback speed and\n" // - "lets him traverse large gaps.\n" // - "If performed at the edge of a platform Link will\n" - "instead perform a mega jump which has less range\n" - "but more height than a hover boost."; // -string_view GlitchHoverBoostDescNovice = "Hover boosts that do not need the maximum speed\n"// - "may be required."; // -string_view GlitchHoverBoostDescIntermediate = "Hover boosts that do need the maximum speed may be" - "required."; // -string_view GlitchHoverBoostDescAdvanced = "Hover boosts that use more complex movement during" - "the hover may be required."; // -/* Super Slide */ // -string_view GlitchSuperSlideDescDisabled = "Holding the circle pad just outside the dead zone\n" - "will cause Link to turn on the spot which locks\n"// - "his speed. This can be used to preserve high\n" // - "speeds indefinitely."; // -string_view GlitchSuperSlideDescNovice = "Forward extended super slides (FESSes) where Link\n" - "is damaged by an explosion may be required."; // -string_view GlitchSuperSlideDescIntermediate = "Hammer extended super slides where the recoil from" - "a hammer crouch stab is used may be required."; // -string_view GlitchSuperSlideDescAdvanced = "Hyper Extended Super Slides (HESSes) and\n" // - "damageless FESSes where Link rolls into a bomb may" - "be required."; // -string_view GlitchSuperSlideDescExpert = "HESSes with more precise movement may be required."; -/* Megaflip */ // -string_view GlitchMegaflipDescDisabled = "A backflip or sidehop with high speed from an\n" // - "attack hitting your shield during i-frames. This\n" - "is normally achieved by rolling into an explosion.\n" - "Equipping hover boots to preserve the high speed\n" - "when landing is known as a hoverflip."; // -string_view GlitchMegaflipDescNovice = "You may be expected to perform megaflips on flat\n" - "ground with bombs."; // -string_view GlitchMegaflipDescIntermediate = "You may be expected to perform megaflips in small\n" - "areas, distance megaflips, or hoverflips with a\n"// - "bomb."; // -string_view GlitchMegaflipDescAdvanced = "You may be expected to perform hoverflips with\n" // - "difficult midair movement, or distance megaflips\n" - "under time pressure with a bomb.\n\n" // - "Additionally, you may be expected to perform\n" // - "novice megaflips with a bombchu"; // -string_view GlitchMegaflipDescExpert = "You may be expected to perform intermediate\n" // - "megaflips with a bombchu."; // -string_view GlitchMegaflipDescHero = "You may be expected to perform any megaflip with a" - "bombchu."; // -/* A-Slide */ // -string_view GlitchASlideDescDisabled = "An A-slide is performed the same as a megaflip\n" // - "except without pressing the A button at the end.\n" - "This causes child Link's collision to glitch below" - "the ground and lets him bypass certain actors."; // -string_view GlitchASlideDescNovice = "You may be expected to perform A-slides to pass\n"// - "actors you can't press A to interact with."; // -string_view GlitchASlideDescIntermediate = "You may be expected to perform A-slides quickly or" - "around actors that can be interacted with."; // -string_view GlitchASlideDescAdvanced = "You may be expected to perform novice A-slides\n" // - "with a bombchu."; // -string_view GlitchASlideDescExpert = "You may be expected to perform intermediate\n" // - "A-slides with a bombchu."; -/* Hammer Slide */ // -string_view GlitchHammerSlideDescDisabled = "Equipping hover boots after a hammer crouch stab\n" - "against a wall preserves the recoil speed which\n"// - "allows Link to cross larger gaps than usual."; // -string_view GlitchHammerSlideDescNovice = "Simple hammer slides may be required"; // -string_view GlitchHammerSlideDescIntermediate = "Hammer slides which require good movement and high" - "speed may be required."; // -/* Ledge Cancel */ // -string_view GlitchLedgeCancelDescDisabled = "Climbing a short ledge and shielding damage will\n" - "prevent the ledge climbing state from ending.\n" // - "This state allows Link to walk through some actors" - "such as boulders and NPCs."; // -string_view GlitchLedgeCancelDescNovice = "You may be expected to perform ledge cancels using" - "bombs as a damage source."; // -string_view GlitchLedgeCancelDescIntermediate = "You may be expected to perform ledge cancels in\n"// - "places with little room."; // -string_view GlitchLedgeCancelDescAdvanced = "You may be expected to perform ledge cancels using" - "bombchus as a damage source."; // -/* Action Swap */ // -string_view GlitchActionSwapDescDisabled = "Action swap allows Link to switch between 2 held\n" - "items without the put away/equip animations.\n" // - "This can be exploited to produce various effects."; -string_view GlitchActionSwapDescNovice = "You may be expected to use shallow water to set up" - "action swap."; // -string_view GlitchActionSwapDescAdvanced = "You may be expected to use bombchus to set up\n" // - "action swap."; // -/* QPA */ // -string_view GlitchQPADescDisabled = "Certain events can cancel putting away an item\n" // - "which later lets Link put it away without an\n" // - "animation. This can be used with sticks to access\n" - "a glitched damage value with the properties of\n" // - "hammer and fire arrows, or with a bottle to store\n" - "a cutscene for ocarina items."; // -string_view GlitchQPADescNovice = "You may be expected to get QPA using the boots\n" // - "animation to delay putting away the item and a\n" // - "bomb."; // -string_view GlitchQPADescIntermediate = "You may be expected to get QPA using only a bomb."; -string_view GlitchQPADescAdvanced = "You may be expected to get QPA using a ledge grab\n" - "to interrupt putting away the item."; // -string_view GlitchQPADescExpert = "You may be expected to get QPA from enemy attacks."; -/* Hookshot Clip */ // -string_view GlitchHookshotClipDescDisabled = "Hookshot Clipping allows Link to hookshot through\n" - "certain walls, which is useful if a valid\n" // - "target is on the other side."; // -string_view GlitchHookshotClipDescNovice = "Basic Hookshot Clipping may be required."; // -string_view GlitchHookshotClipDescIntermediate = "Hookshot clips with precise angles and poor\n" // - "visibility may be required."; // -/* Hookshot Jump: Bonk */ // -string_view GlitchHookshotJump_BonkDescDisabled = "A Hookshot Jump is an umbrella term for techniques" - "that launch Link into the sky using the Hookshot\n" - "in various ways, sometimes together with\n" // - "other items. The bonk method only requires the\n" // - "Hookshot itself."; // -string_view GlitchHookshotJump_BonkDescNovice = "Simple hookshot jumps against large flat walls of\n" - "hookshottable surfaces may be required."; // -string_view GlitchHookshotJump_BonkDescIntermediate = "Less lenient hookshot jumps may be required."; // -string_view GlitchHookshotJump_BonkDescAdvanced = "Hookshot jumps with precise midair movement may be" - "required."; // -/* Hookshot Jump: Boots */ // -string_view GlitchHookshotJump_BootsDescDisabled = "This Hookshot Jump technique is one of the easier\n" - "ones, and require any pair of boots."; // -string_view GlitchHookshotJump_BootsDescNovice = "Only relatively short Hookshot Jumps with boots\n"// - "may be required."; // -string_view GlitchHookshotJump_BootsDescIntermediate = "Higher Hookshot Jumps with boots, where you look\n" - "further up or downwards may be required."; // -string_view GlitchHookshotJump_BootsDescAdvanced = "Hookshot jumps that require a lot of height and\n"// - "precise midair movement may be required."; // -/* Cutscene Dives */ // -string_view GlitchCutsceneDiveDescDisabled = "Water physics won't effect Link if he enters the\n" - "water while a cutscene is playing, allowing him\n"// - "to sink to the bottom."; // -string_view GlitchCutsceneDiveDescNovice = "Attempting to use Farore's Wind (when it's already" - "set) with another magic item active prevents the\n" - "water from clearing the FW cutscene until the\n" // - "other effect ends.\n" // - "You may be expected to use Nayru's Love as the\n" // - "other magic effect."; // -string_view GlitchCutsceneDiveDescIntermediate = "You can catch something in a bottle while standing" - "over water using the hover boots to fall through\n" - "the water during the catching cutscene."; // -string_view GlitchCutsceneDiveDescAdvanced = "You may be expected to use magic arrows to perform" - "Farore's Wind cutscene dives."; // -/* Navi Dive: Stick */ // -string_view GlitchNaviDive_StickDescDisabled = "A Navi dive is a type of cutscene dive achieved by" - "falling off a ledge while talking to Navi. While\n" - "the usual method for achieving this is a TSC, it\n" - "is also possible to perform using a jump attack\n"// - "with deku sticks."; // -string_view GlitchNaviDive_StickDescNovice = "You may be expected to enter BotW with a stick\n" // - "Navi dive."; // -string_view GlitchNaviDive_StickDescIntermediate = "You may be expected to use the LH to ZD shortcut\n" - "with a stick Navi dive."; // -string_view GlitchNaviDive_StickDescAdvanced = "You may be expected to use the LW to ZR shortcut\n" - "with a stick Navi dive."; // -/* TSC */ // -string_view GlitchTripleSlashClipDescDisabled = "When doing a three-slash-combo with either the\n" // - "Kokiri Sword or the Master Sword and put it away,\n" - "Link will be placed back a small distance.\n" // - "If, while slashing, you use the recoil of hitting\n" - "a wall and then put away the sword, Link may clip\n" - "into a wall behind him if angled correctly."; // -string_view GlitchTripleSlashClipDescNovice = "Basic Triple Slash Clipping may be required."; // -string_view GlitchTripleSlashClipDescIntermediate = "Some more complex OoB movement may be required."; // -string_view GlitchTripleSlashClipDescAdvanced = "Very precise OoB movement may be required."; // -string_view GlitchTripleSlashClipDescExpert = "Very precise TSCs may be required."; // -/* Ledge Clip */ // -string_view GlitchLedgeClipDescDisabled = "A Ledge Clip allows Link to fall through a floor\n" - "or pass through an object by facing a wall\n" // - "and dropping down to the left in various ways.\n" // - "These only work as an adult."; // -string_view GlitchLedgeClipDescNovice = "Basic Ledge Clips may be required.\n" // - "Some require that you let go of the ledge with\n" // - "a specific timing."; // -string_view GlitchLedgeClipDescIntermediate = "Certain harder clips may also be required."; // -string_view GlitchLedgeClipDescAdvanced = "Ledge clips with complex OoB movement may be\n" // - "required."; // -/* Seam Walk */ // -string_view GlitchSeamWalkDescDisabled = "Where 2 walls come together they form a seam that\n" - "Link can stand on. It is possible to use these to\n" - "gain height and reach normally inaccessible areas.\n" - "Additionally these seams can reach far above the\n" - "walls that form them, creating invisible seams."; // -string_view GlitchSeamWalkDescNovice = "Short seam walks up visible walls with ISG may be\n" - "required."; // -string_view GlitchSeamWalkDescIntermediate = "Short seam walks up visible walls without ISG or\n" - "longer seam walks with ISG may be required."; // -string_view GlitchSeamWalkDescAdvanced = "Longer seam walks without ISG may be required."; // -string_view GlitchSeamWalkDescExpert = "Very precise seam walks may be required."; // -string_view GlitchSeamWalkDescHero = "Crossing Gerudo Valley as child by walking up a\n"// - "wall with the cucco may be required."; // -/* Misc Glitches */ // -string_view GlitchWWTEscapeDesc = "Using deku nuts and the crawlspace to let you\n" // - "move while reading the nearby sign, you can walk\n" - "through the Kokiri guarding the exit. This only\n"// - "affects logic with shuffled entrances."; // -string_view GlitchGVTentAsChildDesc = "The loading zone for the carpenters' tent exists\n" - "in the child map despite the tent being removed.\n\n" - "With this setting enabled you may be expected to\n" - "use that loading zone."; // -string_view GlitchGFGuardSneakDesc = "By using the bow, hookshot, or boomerang while\n" // - "looking up and targeting the Fortress wall, you\n"// - "can walk\n past the guard on the slope without\n" // - "being caught."; // -string_view GlitchItemlessWastelandDesc = "By starting a backwalk and then targeting every\n"// - "other frame Link will maintain backwalk speed\n" // - "over the quicksand in the haunted wasteland which\n" - "lets him cross with no items."; // -string_view GlitchOccamsStatueDesc = "With some precise movement through loading zones\n" - "in Darunia's room, it is possible to unload the\n"// - "collision of the statue blocking the way to DMC.";// -string_view GlitchZDOoBJumpSlashDesc = "Jump slashing the wall next to the pillar above\n"// - "the ZD to LH shortcut as adult will let you clip\n" - "through. From here you can either jump to the shop" - "loading zone or fall OoB a little bit and swim\n" // - "into the shortcut loading zone."; // -string_view GlitchJabuStickRecoilDesc = "Child can enter Jabu without a fish in a bottle\n"// - "using the recoil from breaking a deku stick while\n" - "sidehopping next to the loading zone."; // -string_view GlitchJabuAdultDesc = "Adult can enter Jabu by walking over a specific\n"// - "section of ice on the side near ice cavern."; // -string_view GlitchBlueFireWallDesc = "Pouring blue fire on certain destructable walls\n"// - "will cause them to break."; // -string_view GlitchClassicHalfieDesc = "Dying during a jump attack towards a ledge just\n"// - "too high to climb will put Link on top of the\n" // - "ledge. Combined with a fairy this lets Link climb\n" - "ledges such as the one to the switch in DC."; // -string_view GlitchModernHalfieDesc = "Using a bomb flower and a twisted backflip, it is\n" - "possible to access the switch in DC with only a\n"// - "deku shield and the goron bracelet."; // -string_view GlitchJabuSwitchDesc = "Using a cutscene item the frame you land on the\n"// - "blue switches in Jabu Jabu's Belly will make them\n" - "stay held for a while after you step off them."; // -string_view GlitchForestBKSkipDesc = "Using the hookshot or bow to shorten a backflip\n"// - "it is possible to land on the other side of the\n"// - "railing in the north of the lobby and get clipped\n" - "out of bounds. From here it is possible to jump\n"// - "into the boss loading zone."; // -string_view GlitchFireGrunzClipDesc = "Grabbing a ledge in a corner partially clips Link\n" - "through the wall. A bomb can be used to push Link\n" - "fully through the wall to get out of bounds. This\n" - "can be used in the fire temple along with hover\n"// - "boots to skip hammer in the first room."; // +void DescriptionTable_Init() { + const char* data = reinterpret_cast(description_table_jsonc); + std::string text(data, description_table_jsonc_size); + + json table = json::parse(text.begin(), text.end(), nullptr, true, true); + for (auto i = table.begin(); i != table.end(); ++i) { + const std::string& key = i.key(); + const json& entry = i.value(); + + if (entry.is_array()) { + std::string joined; + joined.reserve(entry.size() * 64); + for (size_t j = 0; j < entry.size(); ++j) { + if (j > 0) { + joined.push_back('\n'); + } + joined += entry[j].get(); + } + descriptionTable.emplace(key, std::move(joined)); + } else if (entry.is_string()) { + descriptionTable.emplace(key, entry.get()); + } + } +} + +std::string LoadDesc(std::string name) { + if (descriptionTable.empty()) { + DescriptionTable_Init(); + } + + auto it = descriptionTable.find(name); + if (it != descriptionTable.end()) { + return it->second; + } + return name; +} diff --git a/source/descriptions.hpp b/source/descriptions.hpp index 687575c4..a35e190d 100644 --- a/source/descriptions.hpp +++ b/source/descriptions.hpp @@ -1,674 +1,11 @@ -#pragma once -#include -#include - -using string_view = std::string_view; - -extern string_view menuOpenSettingsDesc; -extern string_view menuGlitchOptionsDesc; -extern string_view menuPersonalizationDesc; -extern string_view menuIngameDefaultsDesc; - -extern string_view presetNintendedDesc; -extern string_view presetAllsanityDesc; -extern string_view presetRacingDesc; -extern string_view presetVanillaDesc; -extern string_view presetFullChaosDesc; - -extern string_view openRandomize; -extern string_view worldRandomize; -extern string_view shuffleRandomize; -extern string_view dungeonRandomize; - -extern string_view logicGlitchless; -extern string_view logicGlitched; -extern string_view logicNoLogic; -extern string_view logicVanilla; - -extern string_view forestOpen; -extern string_view forestClosed; -extern string_view forestClosedDeku; - -extern string_view kakGateOpen; -extern string_view kakGateClosed; - -extern string_view doorOfTimeOpen; -extern string_view doorOfTimeClosed; -extern string_view doorOfTimeIntended; - -extern string_view fountainNormal; -extern string_view fountainAdult; -extern string_view fountainOpen; - -extern string_view jabuJabuCloseDesc; -extern string_view jabuJabuOpenDesc; - -extern string_view gerudoNormal; -extern string_view gerudoFast; -extern string_view gerudoOpen; - -extern string_view bridgeOpen; -extern string_view bridgeVanilla; -extern string_view bridgeStones; -extern string_view bridgeMedallions; -extern string_view bridgeRewards; -extern string_view bridgeDungeons; -extern string_view bridgeTokens; -extern string_view bridgeHearts; - -extern string_view bridgeStoneCountDesc; -extern string_view bridgeMedallionCountDesc; -extern string_view bridgeRewardCountDesc; -extern string_view bridgeDungeonCountDesc; -extern string_view bridgeTokenCountDesc; -extern string_view bridgeHeartCountDesc; - -extern string_view randomGanonsTrialsDesc; - -extern string_view ganonsTrialCountDesc; - -extern string_view ageDesc; - -extern string_view shuffleEntrancesDesc; - -extern string_view dungeonEntrancesDesc; - -extern string_view bossEntrancesDesc; - -extern string_view overworldEntrancesDesc; - -extern string_view grottoEntrancesDesc; - -extern string_view owlDropsDesc; - -extern string_view warpSongsDesc; - -extern string_view overworldSpawnsDesc; - -extern string_view mixedPoolsDesc; -extern string_view mixDungeonsDesc; -extern string_view mixOverworldDesc; -extern string_view mixInteriorsDesc; -extern string_view mixGrottosDesc; - -extern string_view decoupledEntrancesDesc; - -extern string_view interiorEntrancesOff; -extern string_view interiorEntrancesSimple; -extern string_view interiorEntrancesAll; - -extern string_view bombchuLogicDesc; - -extern string_view defaultAmmoDropsDesc; -extern string_view bombchuDropsDesc; -extern string_view noAmmoDropsDesc; - -extern string_view defaultHeartDropsDesc; -extern string_view noHeartDropsDesc; -extern string_view noHeartRefillDesc; -extern string_view scarceHeartsDesc; - -extern string_view mqDungeonCountDesc; -extern string_view setDungeonTypesDesc; - -extern string_view triforceHuntDesc; -extern string_view triforcePiecesTotalDesc; -extern string_view triforcePiecesRequiredDesc; - -extern string_view enemizerDesc; -extern string_view enemizerListDesc; -extern string_view enemyRandomizedDesc; -extern string_view enemyVanillaDesc; -extern string_view enemyRemovedDesc; - -extern string_view shuffleRewardsEndOfDungeon; -extern string_view shuffleRewardsAnyDungeon; -extern string_view shuffleRewardsOverworld; -extern string_view shuffleRewardsAnywhere; - -extern string_view linksPocketDungeonReward; -extern string_view linksPocketAdvancement; -extern string_view linksPocketAnything; -extern string_view linksPocketNothing; - -extern string_view songsSongLocations; -extern string_view songsDungeonRewards; -extern string_view songsAllLocations; - -extern string_view shopsOff; -extern string_view shopsZero; -extern string_view shopsOne; -extern string_view shopsTwo; -extern string_view shopsThree; -extern string_view shopsFour; -extern string_view shopsRandom; - -extern string_view shopPriceRandom; -extern string_view shopPriceAffordable; -extern string_view shopPriceChild; -extern string_view shopPriceAdult; -extern string_view shopPriceGiant; -extern string_view shopPriceTycoon; - -extern string_view tokensOff; -extern string_view tokensDungeon; -extern string_view tokensOverworld; -extern string_view tokensAllTokens; - -extern string_view scrubsOff; -extern string_view scrubsAffordable; -extern string_view scrubsExpensive; -extern string_view scrubsRandomPrices; - -extern string_view shuffleCowsDesc; - -extern string_view kokiriSwordDesc; -extern string_view masterSwordDesc; - -extern string_view ocarinasDesc; - -extern string_view weirdEggDesc; - -extern string_view zeldasLetterDesc; - -extern string_view gerudoTokenDesc; - -extern string_view magicBeansDesc; - -extern string_view merchantsDesc; -extern string_view merchantsHintsDesc; - -extern string_view frogSongRupeesDesc; - -extern string_view adultTradeDesc; - -extern string_view chestMinigameDesc; - -extern string_view enemySoulDesc; - -extern string_view ocarinaButtonsDesc; - -extern string_view shuffleRupeesDesc; - -extern string_view mapCompassStartWith; -extern string_view mapCompassVanilla; -extern string_view mapCompassOwnDungeon; -extern string_view mapCompassAnyDungeon; -extern string_view mapCompassOverworld; -extern string_view mapCompassAnywhere; - -extern string_view smallKeyStartWith; -extern string_view smallKeyVanilla; -extern string_view smallKeyOwnDungeon; -extern string_view smallKeyAnyDungeon; -extern string_view smallKeyOverworld; -extern string_view smallKeyAnywhere; - -extern string_view gerudoKeysVanilla; -extern string_view gerudoKeysAnyDungeon; -extern string_view gerudoKeysOverworld; -extern string_view gerudoKeysAnywhere; - -extern string_view keyRingDesc; - -extern string_view bossKeyStartWith; -extern string_view bossKeyVanilla; -extern string_view bossKeyOwnDungeon; -extern string_view bossKeyAnyDungeon; -extern string_view bossKeyOverworld; -extern string_view bossKeyAnywhere; - -extern string_view ganonKeyStartWith; -extern string_view ganonKeyVanilla; -extern string_view ganonKeyOwnDungeon; -extern string_view ganonKeyAnyDungeon; -extern string_view ganonKeyOverworld; -extern string_view ganonKeyAnywhere; -extern string_view ganonKeyLACS; - -extern string_view lacsMedallionCountDesc; -extern string_view lacsStoneCountDesc; -extern string_view lacsRewardCountDesc; -extern string_view lacsDungeonCountDesc; -extern string_view lacsTokenCountDesc; -extern string_view lacsHeartCountDesc; - -extern string_view childStealthDesc; - -extern string_view skipTowerEscapeDesc; - -extern string_view skipEponaRaceDesc; - -extern string_view skipMinigamePhasesDesc; - -extern string_view freeScarecrowDesc; - -extern string_view fourPoesDesc; - -extern string_view lakeHyliaOwlDesc; - -extern string_view bigPoeTargetCountDesc; - -extern string_view numRequiredCuccosDesc; - -extern string_view kingZoraSpeedFast; -extern string_view kingZoraSpeedVanilla; -extern string_view kingZoraSpeedRandom; -extern string_view kingZoraSpeedCustom; +#pragma once -extern string_view completeMaskDesc; - -extern string_view quickTextDesc0; -extern string_view quickTextDesc1; -extern string_view quickTextDesc2; -extern string_view quickTextDesc3; -extern string_view skipSongReplaysDesc; - -extern string_view keepFWWarpPointDesc; - -extern string_view fastBunnyHoodDesc; - -extern string_view racingDesc; - -extern string_view gossipStonesHintsDesc; - -extern string_view obscureHintsDesc; -extern string_view ambiguousHintsDesc; -extern string_view clearHintsDesc; - -extern string_view uselessHintsDesc; -extern string_view balancedHintsDesc; -extern string_view strongHintsDesc; -extern string_view veryStrongHintsDesc; -extern string_view playthroughHintsDesc; - -extern string_view bonusGossipHintsDesc; - -extern string_view miscHintsDesc; -extern string_view totAltarHintsDesc; -extern string_view ganonHintsDesc; -extern string_view dampeHintDesc; -extern string_view skulltulaHintDesc; -extern string_view fishingHintsDesc; - -extern string_view compassesShowRewardsDesc; -extern string_view compassesShowWotHDesc; -extern string_view mapsShowDungeonModesDesc; - -extern string_view damageMultiDesc; - -extern string_view bonkDamageDesc; - -extern string_view permadeathDesc; - -extern string_view gloomModeOffDesc; -extern string_view gloomModeDeathDesc; -extern string_view gloomModeDamageDesc; -extern string_view gloomModeHitDesc; -extern string_view gloomModeCollisionDesc; -extern string_view gloomModeEmptyDesc; - -extern string_view startingTimeDesc; - -extern string_view locationsReachableDesc; -extern string_view nightGSDesc; - -extern string_view chestAnimDesc; - -extern string_view chestVanillaDesc; -extern string_view chestTextureDesc; -extern string_view chestSizeTextureDesc; -extern string_view chestClassicDesc; - -extern string_view chestAgonyDesc; - -extern string_view extraShieldsDesc; - -extern string_view ingameSpoilersShowDesc; -extern string_view ingameSpoilersHideDesc; - -extern string_view menuButtonDesc; - -extern string_view arrowSwitchDesc; - -extern string_view startWithConsumablesDesc; - -extern string_view startWithMaxRupeesDesc; - -extern string_view startingHealthDesc; - -extern string_view startingBunnyHoodDesc; - -extern string_view itemPoolPlentiful; -extern string_view itemPoolBalanced; -extern string_view itemPoolScarce; -extern string_view itemPoolMinimal; - -extern string_view iceTrapsOff; -extern string_view iceTrapsNormal; -extern string_view iceTrapsExtra; -extern string_view iceTrapsMayhem; -extern string_view iceTrapsOnslaught; - -extern string_view removeDDDesc; - -extern string_view progGoronSword; - -extern string_view faroresWindAnywhereDesc; - -extern string_view ageRestrictionsDesc; -extern string_view ageItemsInLogicDesc; -extern string_view adultStickDesc; -extern string_view adultBoomerangDesc; -extern string_view childHammerDesc; -extern string_view adultSlingshotDesc; -extern string_view childBowDesc; -extern string_view childHookshotDesc; -extern string_view childIronBootsDesc; -extern string_view childHoverBootsDesc; -extern string_view adultMasksDesc; -extern string_view adultKokiriSwordDesc; -extern string_view childMasterSwordDesc; -extern string_view childBiggoronSwordDesc; -extern string_view adultDekuShieldDesc; -extern string_view childMirrorShieldDesc; -extern string_view childGoronTunicDesc; -extern string_view childZoraTunicDesc; - -extern string_view restoreISGdesc; - -extern string_view gkDurabilityVanilla; -extern string_view gkDurabilityRandomRisk; -extern string_view gkDurabilityRandomSafe; -extern string_view retroAmmoDesc; - -extern string_view mp_EnabledDesc; -extern string_view mp_SharedProgressDesc; -extern string_view mp_SyncIdDesc; -extern string_view mp_SharedHealthDesc; -extern string_view mp_SharedRupeesDesc; -extern string_view mp_SharedAmmoDesc; - -extern string_view naviNotificationsDesc; -extern string_view ignoreMaskReactionDesc; - -extern string_view naviColorsDesc; -extern string_view necessarySimpleModeDesc; -extern string_view alwaysSimpleModeDesc; - -extern string_view coloredKeysDesc; -extern string_view coloredBossKeysDesc; - -extern string_view mirrorWorldOffDesc; -extern string_view mirrorWorldOnDesc; -extern string_view mirrorWorldSceneDesc; -extern string_view mirrorWorldEntranceDesc; -extern string_view mirrorWorldRandomDesc; - -extern string_view betaSoldOutDesc; - -extern string_view soullessVanillaDesc; -extern string_view soullessTexturelessDesc; -extern string_view soullessGrayscaleDesc; -extern string_view soullessPurpleFlamesDesc; -extern string_view soullessFlashingDesc; - -extern string_view musicRandoDesc; -extern string_view shuffleBGMDesc; -extern string_view shuffleMelodiesDesc; -extern string_view customMusicDesc; -extern string_view customMusicOnlyDesc; - -extern string_view shuffleSFXOff; -extern string_view shuffleSFXAll; -extern string_view shuffleSFXSceneSpecific; -extern string_view shuffleSFXChaos; -extern string_view shuffleSFXCategorically; - -extern string_view ocarinaInstrRandomDesc; -extern string_view ocarinaInstrSceneDesc; -extern string_view ocarinaInstrDesc; - -extern string_view randomTrapDmgDesc; -extern string_view basicTrapDmgDesc; -extern string_view advancedTrapDmgDesc; -extern string_view fireTrapDesc; -extern string_view antiFairyTrapDesc; -extern string_view rupoorTrapDesc; -extern string_view rupoorTrapSeverityDesc; -extern string_view curseTrapsDesc; -extern string_view screenTrapsDesc; -extern string_view extraArrowEffectsDesc; -extern string_view hyperActorsDesc; -extern string_view hyperBossesDesc; -extern string_view hyperMiddleBossesDesc; -extern string_view hyperEnemiesDesc; -extern string_view freeCamDesc; -extern string_view randomGsLocationsDesc; -extern string_view gsLocGuaranteeNewDesc; -extern string_view randomSongNotesDesc; - -extern string_view ToggleAllTricksDesc; - -extern string_view ToggleLogicNoneDesc; -extern string_view ToggleLogicNoviceDesc; -extern string_view ToggleLogicIntermediateDesc; -extern string_view ToggleLogicExpertDesc; -extern string_view LogicGrottosWithoutAgonyDesc; -extern string_view LogicVisibleCollisionDesc; -extern string_view LogicFewerTunicRequirementsDesc; -extern string_view LogicLostWoodsGSBeanDesc; -extern string_view LogicLabDivingDesc; -extern string_view LogicLabWallGSDesc; -extern string_view LogicGraveyardPoHDesc; -extern string_view LogicChildDampeRacePoHDesc; -extern string_view LogicGVHammerChestDesc; -extern string_view LogicGerudoKitchenDesc; -extern string_view LogicGerudoChildClimbDesc; -extern string_view LogicLensWastelandDesc; -extern string_view LogicReverseWastelandDesc; -extern string_view LogicColossusGSDesc; -extern string_view LogicOutsideGanonsGSDesc; -extern string_view LogicManOnRoofDesc; -extern string_view LogicWindmillPoHHookshotDesc; -extern string_view LogicDMTBombableDesc; -extern string_view LogicDMTSoilGSDesc; -extern string_view LogicDMTSummitHoverDesc; -extern string_view LogicDMCPlatformJumpDesc; -extern string_view LogicLinkGoronDinsDesc; -extern string_view LogicGoronCityLeftMostDesc; -extern string_view LogicGoronCityPotDesc; -extern string_view LogicGoronCityPotWithStrengthDesc; -extern string_view LogicChildRollingWithStrengthDesc; -extern string_view LogicCraterUpperToLowerDesc; -extern string_view LogicCraterBeanPoHWithHoversDesc; -extern string_view LogicBiggoronBoleroDesc; -extern string_view LogicZoraRiverLowerDesc; -extern string_view LogicZoraRiverUpperDesc; -extern string_view LogicZoraRiverRupeesJumpDesc; -extern string_view LogicZFGreatFairyDesc; -extern string_view LogicDekuB1WebsWithBowDesc; -extern string_view LogicDekuB1SkipDesc; -extern string_view LogicDekuBasementGSDesc; -extern string_view LogicDCStaircaseDesc; -extern string_view LogicDCJumpDesc; -extern string_view LogicDCSlingshotSkipDesc; -extern string_view LogicDCScarecrowGSDesc; -extern string_view LogicJabuBossGSAdultDesc; -extern string_view LogicJabuScrubJumpDiveDesc; -extern string_view LogicForestOutsideBackdoorDesc; -extern string_view LogicForestDoorFrameDesc; -extern string_view LogicForestOutdoorEastGSDesc; -extern string_view LogicFireBossDoorJumpDesc; -extern string_view LogicFireStrengthDesc; -extern string_view LogicFireScarecrowDesc; -extern string_view LogicFireFlameMazeDesc; -extern string_view LogicFireSongOfTimeDesc; -extern string_view LogicWaterTempleTorchLongshotDesc; -extern string_view LogicWaterTempleUpperBoostDesc; -extern string_view LogicWaterCentralBowDesc; -extern string_view LogicWaterCentralGSFWDesc; -extern string_view LogicWaterCrackedWallNothingDesc; -extern string_view LogicWaterCrackedWallHoversDesc; -extern string_view LogicWaterBossKeyRegionDesc; -extern string_view LogicWaterBKJumpDiveDesc; -extern string_view LogicWaterNorthBasementLedgeJumpDesc; -extern string_view LogicWaterDragonAdultDesc; -extern string_view LogicWaterDragonJumpDiveDesc; -extern string_view LogicWaterRiverGSDesc; -extern string_view LogicWaterFallingPlatformGSDesc; -extern string_view LogicSpiritLowerAdultSwitchDesc; -extern string_view LogicSpiritChildBombchuDesc; -extern string_view LogicSpiritWallDesc; -extern string_view LogicSpiritLobbyGSDesc; -extern string_view LogicSpiritMapChestDesc; -extern string_view LogicSpiritSunChestDesc; -extern string_view LogicShadowFireArrowEntryDesc; -extern string_view LogicShadowUmbrellaDesc; -extern string_view LogicShadowFreestandingKeyDesc; -extern string_view LogicShadowStatueDesc; -extern string_view LogicShadowBongoDesc; -extern string_view LogicChildDeadhandDesc; -extern string_view LogicGtgWithoutHookshotDesc; -extern string_view LogicGtgFakeWallDesc; -extern string_view LogicLensSpiritDesc; -extern string_view LogicLensShadowDesc; -extern string_view LogicLensShadowBackDesc; -extern string_view LogicLensBotwDesc; -extern string_view LogicLensGtgDesc; -extern string_view LogicLensCastleDesc; -extern string_view LogicLensJabuMQDesc; -extern string_view LogicLensSpiritMQDesc; -extern string_view LogicLensShadowMQDesc; -extern string_view LogicLensShadowMQBackDesc; -extern string_view LogicLensBotwMQDesc; -extern string_view LogicLensGtgMQDesc; -extern string_view LogicLensCastleMQDesc; -extern string_view LogicSpiritTrialHookshotDesc; -extern string_view LogicFlamingChestsDesc; - -extern const std::vector GlitchDifficulties; - -extern string_view ToggleAllGlitchesDesc; - -extern string_view GlitchRestrictedItemsDescDisabled; -extern string_view GlitchRestrictedItemsDescNovice; - -extern string_view GlitchSuperStabDescDisabled; -extern string_view GlitchSuperStabDescNovice; - -extern string_view GlitchISGDescDisabled; -extern string_view GlitchISGDescNovice; -extern string_view GlitchISGDescIntermediate; -extern string_view GlitchISGDescAdvanced; - -extern string_view GlitchHoverDescDisabled; -extern string_view GlitchHoverDescNovice; -extern string_view GlitchHoverDescIntermediate; -extern string_view GlitchHoverDescAdvanced; - -extern string_view GlitchBombOIDescDisabled; -extern string_view GlitchBombOIDescNovice; -extern string_view GlitchBombOIDescIntermediate; -extern string_view GlitchBombOIDescAdvanced; -extern string_view GlitchBombOIDescExpert; - -extern string_view GlitchHoverBoostDescDisabled; -extern string_view GlitchHoverBoostDescNovice; -extern string_view GlitchHoverBoostDescIntermediate; -extern string_view GlitchHoverBoostDescAdvanced; - -extern string_view GlitchSuperSlideDescDisabled; -extern string_view GlitchSuperSlideDescNovice; -extern string_view GlitchSuperSlideDescIntermediate; -extern string_view GlitchSuperSlideDescAdvanced; -extern string_view GlitchSuperSlideDescExpert; - -extern string_view GlitchMegaflipDescDisabled; -extern string_view GlitchMegaflipDescNovice; -extern string_view GlitchMegaflipDescIntermediate; -extern string_view GlitchMegaflipDescAdvanced; -extern string_view GlitchMegaflipDescExpert; -extern string_view GlitchMegaflipDescHero; - -extern string_view GlitchASlideDescDisabled; -extern string_view GlitchASlideDescNovice; -extern string_view GlitchASlideDescIntermediate; -extern string_view GlitchASlideDescAdvanced; -extern string_view GlitchASlideDescExpert; - -extern string_view GlitchHammerSlideDescDisabled; -extern string_view GlitchHammerSlideDescNovice; -extern string_view GlitchHammerSlideDescIntermediate; - -extern string_view GlitchLedgeCancelDescDisabled; -extern string_view GlitchLedgeCancelDescNovice; -extern string_view GlitchLedgeCancelDescIntermediate; -extern string_view GlitchLedgeCancelDescAdvanced; - -extern string_view GlitchActionSwapDescDisabled; -extern string_view GlitchActionSwapDescNovice; -extern string_view GlitchActionSwapDescAdvanced; - -extern string_view GlitchQPADescDisabled; -extern string_view GlitchQPADescNovice; -extern string_view GlitchQPADescIntermediate; -extern string_view GlitchQPADescAdvanced; -extern string_view GlitchQPADescExpert; - -extern string_view GlitchHookshotClipDescDisabled; -extern string_view GlitchHookshotClipDescNovice; -extern string_view GlitchHookshotClipDescIntermediate; - -extern string_view GlitchHookshotJump_BonkDescDisabled; -extern string_view GlitchHookshotJump_BonkDescNovice; -extern string_view GlitchHookshotJump_BonkDescIntermediate; -extern string_view GlitchHookshotJump_BonkDescAdvanced; - -extern string_view GlitchHookshotJump_BootsDescDisabled; -extern string_view GlitchHookshotJump_BootsDescNovice; -extern string_view GlitchHookshotJump_BootsDescIntermediate; -extern string_view GlitchHookshotJump_BootsDescAdvanced; - -extern string_view GlitchCutsceneDiveDescDisabled; -extern string_view GlitchCutsceneDiveDescNovice; -extern string_view GlitchCutsceneDiveDescIntermediate; -extern string_view GlitchCutsceneDiveDescAdvanced; - -extern string_view GlitchNaviDive_StickDescDisabled; -extern string_view GlitchNaviDive_StickDescNovice; -extern string_view GlitchNaviDive_StickDescIntermediate; -extern string_view GlitchNaviDive_StickDescAdvanced; - -extern string_view GlitchTripleSlashClipDescDisabled; -extern string_view GlitchTripleSlashClipDescNovice; -extern string_view GlitchTripleSlashClipDescIntermediate; -extern string_view GlitchTripleSlashClipDescAdvanced; -extern string_view GlitchTripleSlashClipDescExpert; - -extern string_view GlitchLedgeClipDescDisabled; -extern string_view GlitchLedgeClipDescNovice; -extern string_view GlitchLedgeClipDescIntermediate; -extern string_view GlitchLedgeClipDescAdvanced; +#include +#include +#include +#include -extern string_view GlitchSeamWalkDescDisabled; -extern string_view GlitchSeamWalkDescNovice; -extern string_view GlitchSeamWalkDescIntermediate; -extern string_view GlitchSeamWalkDescAdvanced; -extern string_view GlitchSeamWalkDescExpert; -extern string_view GlitchSeamWalkDescHero; +extern std::unordered_map descriptionTable; -extern string_view GlitchWWTEscapeDesc; -extern string_view GlitchGVTentAsChildDesc; -extern string_view GlitchGFGuardSneakDesc; -extern string_view GlitchItemlessWastelandDesc; -extern string_view GlitchOccamsStatueDesc; -extern string_view GlitchZDOoBJumpSlashDesc; -extern string_view GlitchJabuStickRecoilDesc; -extern string_view GlitchJabuAdultDesc; -extern string_view GlitchBlueFireWallDesc; -extern string_view GlitchClassicHalfieDesc; -extern string_view GlitchModernHalfieDesc; -extern string_view GlitchJabuSwitchDesc; -extern string_view GlitchForestBKSkipDesc; -extern string_view GlitchFireGrunzClipDesc; +extern void DescriptionTable_Init(); +extern std::string LoadDesc(std::string name); diff --git a/source/json.hpp b/source/json.hpp new file mode 100644 index 00000000..d60cda3d --- /dev/null +++ b/source/json.hpp @@ -0,0 +1,25528 @@ +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + +/****************************************************************************\ + * Note on documentation: The source files contain links to the online * + * documentation of the public API at https://json.nlohmann.me. This URL * + * contains the most recent documentation and should also be applicable to * + * previous versions; documentation for deprecated functions is not * + * removed, but marked deprecated. See "Generate documentation" section in * + * file docs/README.md. * +\****************************************************************************/ + +// clang-format off + +#ifndef INCLUDE_NLOHMANN_JSON_HPP_ +#define INCLUDE_NLOHMANN_JSON_HPP_ + +#include // all_of, find, for_each +#include // nullptr_t, ptrdiff_t, size_t +#include // hash, less +#include // initializer_list +#ifndef JSON_NO_IO + #include // istream, ostream +#endif // JSON_NO_IO +#include // random_access_iterator_tag +#include // unique_ptr +#include // string, stoi, to_string +#include // declval, forward, move, pair, swap +#include // vector + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// This file contains all macro definitions affecting or depending on the ABI + +#ifndef JSON_SKIP_LIBRARY_VERSION_CHECK + #if defined(NLOHMANN_JSON_VERSION_MAJOR) && defined(NLOHMANN_JSON_VERSION_MINOR) && defined(NLOHMANN_JSON_VERSION_PATCH) + #if NLOHMANN_JSON_VERSION_MAJOR != 3 || NLOHMANN_JSON_VERSION_MINOR != 12 || NLOHMANN_JSON_VERSION_PATCH != 0 + #warning "Already included a different version of the library!" + #endif + #endif +#endif + +#define NLOHMANN_JSON_VERSION_MAJOR 3 // NOLINT(modernize-macro-to-enum) +#define NLOHMANN_JSON_VERSION_MINOR 12 // NOLINT(modernize-macro-to-enum) +#define NLOHMANN_JSON_VERSION_PATCH 0 // NOLINT(modernize-macro-to-enum) + +#ifndef JSON_DIAGNOSTICS + #define JSON_DIAGNOSTICS 0 +#endif + +#ifndef JSON_DIAGNOSTIC_POSITIONS + #define JSON_DIAGNOSTIC_POSITIONS 0 +#endif + +#ifndef JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + #define JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON 0 +#endif + +#if JSON_DIAGNOSTICS + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS _diag +#else + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS +#endif + +#if JSON_DIAGNOSTIC_POSITIONS + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS _dp +#else + #define NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS +#endif + +#if JSON_USE_LEGACY_DISCARDED_VALUE_COMPARISON + #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON _ldvcmp +#else + #define NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_NO_VERSION + #define NLOHMANN_JSON_NAMESPACE_NO_VERSION 0 +#endif + +// Construct the namespace ABI tags component +#define NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b, c) json_abi ## a ## b ## c +#define NLOHMANN_JSON_ABI_TAGS_CONCAT(a, b, c) \ + NLOHMANN_JSON_ABI_TAGS_CONCAT_EX(a, b, c) + +#define NLOHMANN_JSON_ABI_TAGS \ + NLOHMANN_JSON_ABI_TAGS_CONCAT( \ + NLOHMANN_JSON_ABI_TAG_DIAGNOSTICS, \ + NLOHMANN_JSON_ABI_TAG_LEGACY_DISCARDED_VALUE_COMPARISON, \ + NLOHMANN_JSON_ABI_TAG_DIAGNOSTIC_POSITIONS) + +// Construct the namespace version component +#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) \ + _v ## major ## _ ## minor ## _ ## patch +#define NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(major, minor, patch) \ + NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT_EX(major, minor, patch) + +#if NLOHMANN_JSON_NAMESPACE_NO_VERSION +#define NLOHMANN_JSON_NAMESPACE_VERSION +#else +#define NLOHMANN_JSON_NAMESPACE_VERSION \ + NLOHMANN_JSON_NAMESPACE_VERSION_CONCAT(NLOHMANN_JSON_VERSION_MAJOR, \ + NLOHMANN_JSON_VERSION_MINOR, \ + NLOHMANN_JSON_VERSION_PATCH) +#endif + +// Combine namespace components +#define NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) a ## b +#define NLOHMANN_JSON_NAMESPACE_CONCAT(a, b) \ + NLOHMANN_JSON_NAMESPACE_CONCAT_EX(a, b) + +#ifndef NLOHMANN_JSON_NAMESPACE +#define NLOHMANN_JSON_NAMESPACE \ + nlohmann::NLOHMANN_JSON_NAMESPACE_CONCAT( \ + NLOHMANN_JSON_ABI_TAGS, \ + NLOHMANN_JSON_NAMESPACE_VERSION) +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_BEGIN +#define NLOHMANN_JSON_NAMESPACE_BEGIN \ + namespace nlohmann \ + { \ + inline namespace NLOHMANN_JSON_NAMESPACE_CONCAT( \ + NLOHMANN_JSON_ABI_TAGS, \ + NLOHMANN_JSON_NAMESPACE_VERSION) \ + { +#endif + +#ifndef NLOHMANN_JSON_NAMESPACE_END +#define NLOHMANN_JSON_NAMESPACE_END \ + } /* namespace (inline namespace) NOLINT(readability/namespace) */ \ + } // namespace nlohmann +#endif + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // transform +#include // array +#include // forward_list +#include // inserter, front_inserter, end +#include // map +#ifdef JSON_HAS_CPP_17 + #include // optional +#endif +#include // string +#include // tuple, make_tuple +#include // is_arithmetic, is_same, is_enum, underlying_type, is_convertible +#include // unordered_map +#include // pair, declval +#include // valarray + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // nullptr_t +#include // exception +#if JSON_DIAGNOSTICS + #include // accumulate +#endif +#include // runtime_error +#include // to_string +#include // vector + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // array +#include // size_t +#include // uint8_t +#include // string + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // declval, pair +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template struct make_void +{ + using type = void; +}; +template using void_t = typename make_void::type; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +// https://en.cppreference.com/w/cpp/experimental/is_detected +struct nonesuch +{ + nonesuch() = delete; + ~nonesuch() = delete; + nonesuch(nonesuch const&) = delete; + nonesuch(nonesuch const&&) = delete; + void operator=(nonesuch const&) = delete; + void operator=(nonesuch&&) = delete; +}; + +template class Op, + class... Args> +struct detector +{ + using value_t = std::false_type; + using type = Default; +}; + +template class Op, class... Args> +struct detector>, Op, Args...> +{ + using value_t = std::true_type; + using type = Op; +}; + +template class Op, class... Args> +using is_detected = typename detector::value_t; + +template class Op, class... Args> +struct is_detected_lazy : is_detected { }; + +template class Op, class... Args> +using detected_t = typename detector::type; + +template class Op, class... Args> +using detected_or = detector; + +template class Op, class... Args> +using detected_or_t = typename detected_or::type; + +template class Op, class... Args> +using is_detected_exact = std::is_same>; + +template class Op, class... Args> +using is_detected_convertible = + std::is_convertible, To>; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + + +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-FileCopyrightText: 2016 - 2021 Evan Nemerson +// SPDX-License-Identifier: MIT + +/* Hedley - https://nemequ.github.io/hedley + * Created by Evan Nemerson + */ + +#if !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < 15) +#if defined(JSON_HEDLEY_VERSION) + #undef JSON_HEDLEY_VERSION +#endif +#define JSON_HEDLEY_VERSION 15 + +#if defined(JSON_HEDLEY_STRINGIFY_EX) + #undef JSON_HEDLEY_STRINGIFY_EX +#endif +#define JSON_HEDLEY_STRINGIFY_EX(x) #x + +#if defined(JSON_HEDLEY_STRINGIFY) + #undef JSON_HEDLEY_STRINGIFY +#endif +#define JSON_HEDLEY_STRINGIFY(x) JSON_HEDLEY_STRINGIFY_EX(x) + +#if defined(JSON_HEDLEY_CONCAT_EX) + #undef JSON_HEDLEY_CONCAT_EX +#endif +#define JSON_HEDLEY_CONCAT_EX(a,b) a##b + +#if defined(JSON_HEDLEY_CONCAT) + #undef JSON_HEDLEY_CONCAT +#endif +#define JSON_HEDLEY_CONCAT(a,b) JSON_HEDLEY_CONCAT_EX(a,b) + +#if defined(JSON_HEDLEY_CONCAT3_EX) + #undef JSON_HEDLEY_CONCAT3_EX +#endif +#define JSON_HEDLEY_CONCAT3_EX(a,b,c) a##b##c + +#if defined(JSON_HEDLEY_CONCAT3) + #undef JSON_HEDLEY_CONCAT3 +#endif +#define JSON_HEDLEY_CONCAT3(a,b,c) JSON_HEDLEY_CONCAT3_EX(a,b,c) + +#if defined(JSON_HEDLEY_VERSION_ENCODE) + #undef JSON_HEDLEY_VERSION_ENCODE +#endif +#define JSON_HEDLEY_VERSION_ENCODE(major,minor,revision) (((major) * 1000000) + ((minor) * 1000) + (revision)) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MAJOR) + #undef JSON_HEDLEY_VERSION_DECODE_MAJOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MAJOR(version) ((version) / 1000000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_MINOR) + #undef JSON_HEDLEY_VERSION_DECODE_MINOR +#endif +#define JSON_HEDLEY_VERSION_DECODE_MINOR(version) (((version) % 1000000) / 1000) + +#if defined(JSON_HEDLEY_VERSION_DECODE_REVISION) + #undef JSON_HEDLEY_VERSION_DECODE_REVISION +#endif +#define JSON_HEDLEY_VERSION_DECODE_REVISION(version) ((version) % 1000) + +#if defined(JSON_HEDLEY_GNUC_VERSION) + #undef JSON_HEDLEY_GNUC_VERSION +#endif +#if defined(__GNUC__) && defined(__GNUC_PATCHLEVEL__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, __GNUC_PATCHLEVEL__) +#elif defined(__GNUC__) + #define JSON_HEDLEY_GNUC_VERSION JSON_HEDLEY_VERSION_ENCODE(__GNUC__, __GNUC_MINOR__, 0) +#endif + +#if defined(JSON_HEDLEY_GNUC_VERSION_CHECK) + #undef JSON_HEDLEY_GNUC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GNUC_VERSION) + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GNUC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION) + #undef JSON_HEDLEY_MSVC_VERSION +#endif +#if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 140000000) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 10000000, (_MSC_FULL_VER % 10000000) / 100000, (_MSC_FULL_VER % 100000) / 100) +#elif defined(_MSC_FULL_VER) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_FULL_VER / 1000000, (_MSC_FULL_VER % 1000000) / 10000, (_MSC_FULL_VER % 10000) / 10) +#elif defined(_MSC_VER) && !defined(__ICL) + #define JSON_HEDLEY_MSVC_VERSION JSON_HEDLEY_VERSION_ENCODE(_MSC_VER / 100, _MSC_VER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_MSVC_VERSION_CHECK) + #undef JSON_HEDLEY_MSVC_VERSION_CHECK +#endif +#if !defined(JSON_HEDLEY_MSVC_VERSION) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (0) +#elif defined(_MSC_VER) && (_MSC_VER >= 1400) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 10000000) + (minor * 100000) + (patch))) +#elif defined(_MSC_VER) && (_MSC_VER >= 1200) + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_FULL_VER >= ((major * 1000000) + (minor * 10000) + (patch))) +#else + #define JSON_HEDLEY_MSVC_VERSION_CHECK(major,minor,patch) (_MSC_VER >= ((major * 100) + (minor))) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION) + #undef JSON_HEDLEY_INTEL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && !defined(__ICL) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, __INTEL_COMPILER_UPDATE) +#elif defined(__INTEL_COMPILER) && !defined(__ICL) + #define JSON_HEDLEY_INTEL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER / 100, __INTEL_COMPILER % 100, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_VERSION) + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_INTEL_CL_VERSION) + #undef JSON_HEDLEY_INTEL_CL_VERSION +#endif +#if defined(__INTEL_COMPILER) && defined(__INTEL_COMPILER_UPDATE) && defined(__ICL) + #define JSON_HEDLEY_INTEL_CL_VERSION JSON_HEDLEY_VERSION_ENCODE(__INTEL_COMPILER, __INTEL_COMPILER_UPDATE, 0) +#endif + +#if defined(JSON_HEDLEY_INTEL_CL_VERSION_CHECK) + #undef JSON_HEDLEY_INTEL_CL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_INTEL_CL_VERSION) + #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_INTEL_CL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_INTEL_CL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION) + #undef JSON_HEDLEY_PGI_VERSION +#endif +#if defined(__PGI) && defined(__PGIC__) && defined(__PGIC_MINOR__) && defined(__PGIC_PATCHLEVEL__) + #define JSON_HEDLEY_PGI_VERSION JSON_HEDLEY_VERSION_ENCODE(__PGIC__, __PGIC_MINOR__, __PGIC_PATCHLEVEL__) +#endif + +#if defined(JSON_HEDLEY_PGI_VERSION_CHECK) + #undef JSON_HEDLEY_PGI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PGI_VERSION) + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PGI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PGI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #undef JSON_HEDLEY_SUNPRO_VERSION +#endif +#if defined(__SUNPRO_C) && (__SUNPRO_C > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_C >> 16) & 0xf) * 10) + ((__SUNPRO_C >> 12) & 0xf), (((__SUNPRO_C >> 8) & 0xf) * 10) + ((__SUNPRO_C >> 4) & 0xf), (__SUNPRO_C & 0xf) * 10) +#elif defined(__SUNPRO_C) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_C >> 8) & 0xf, (__SUNPRO_C >> 4) & 0xf, (__SUNPRO_C) & 0xf) +#elif defined(__SUNPRO_CC) && (__SUNPRO_CC > 0x1000) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((((__SUNPRO_CC >> 16) & 0xf) * 10) + ((__SUNPRO_CC >> 12) & 0xf), (((__SUNPRO_CC >> 8) & 0xf) * 10) + ((__SUNPRO_CC >> 4) & 0xf), (__SUNPRO_CC & 0xf) * 10) +#elif defined(__SUNPRO_CC) + #define JSON_HEDLEY_SUNPRO_VERSION JSON_HEDLEY_VERSION_ENCODE((__SUNPRO_CC >> 8) & 0xf, (__SUNPRO_CC >> 4) & 0xf, (__SUNPRO_CC) & 0xf) +#endif + +#if defined(JSON_HEDLEY_SUNPRO_VERSION_CHECK) + #undef JSON_HEDLEY_SUNPRO_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_SUNPRO_VERSION) + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_SUNPRO_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_SUNPRO_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION +#endif +#if defined(__EMSCRIPTEN__) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION JSON_HEDLEY_VERSION_ENCODE(__EMSCRIPTEN_major__, __EMSCRIPTEN_minor__, __EMSCRIPTEN_tiny__) +#endif + +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK) + #undef JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_EMSCRIPTEN_VERSION) + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_EMSCRIPTEN_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_EMSCRIPTEN_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION) + #undef JSON_HEDLEY_ARM_VERSION +#endif +#if defined(__CC_ARM) && defined(__ARMCOMPILER_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCOMPILER_VERSION / 1000000, (__ARMCOMPILER_VERSION % 1000000) / 10000, (__ARMCOMPILER_VERSION % 10000) / 100) +#elif defined(__CC_ARM) && defined(__ARMCC_VERSION) + #define JSON_HEDLEY_ARM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ARMCC_VERSION / 1000000, (__ARMCC_VERSION % 1000000) / 10000, (__ARMCC_VERSION % 10000) / 100) +#endif + +#if defined(JSON_HEDLEY_ARM_VERSION_CHECK) + #undef JSON_HEDLEY_ARM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_ARM_VERSION) + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_ARM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_ARM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION) + #undef JSON_HEDLEY_IBM_VERSION +#endif +#if defined(__ibmxl__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__ibmxl_version__, __ibmxl_release__, __ibmxl_modification__) +#elif defined(__xlC__) && defined(__xlC_ver__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, (__xlC_ver__ >> 8) & 0xff) +#elif defined(__xlC__) + #define JSON_HEDLEY_IBM_VERSION JSON_HEDLEY_VERSION_ENCODE(__xlC__ >> 8, __xlC__ & 0xff, 0) +#endif + +#if defined(JSON_HEDLEY_IBM_VERSION_CHECK) + #undef JSON_HEDLEY_IBM_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IBM_VERSION) + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IBM_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IBM_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_VERSION) + #undef JSON_HEDLEY_TI_VERSION +#endif +#if \ + defined(__TI_COMPILER_VERSION__) && \ + ( \ + defined(__TMS470__) || defined(__TI_ARM__) || \ + defined(__MSP430__) || \ + defined(__TMS320C2000__) \ + ) +#if (__TI_COMPILER_VERSION__ >= 16000000) + #define JSON_HEDLEY_TI_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif +#endif + +#if defined(JSON_HEDLEY_TI_VERSION_CHECK) + #undef JSON_HEDLEY_TI_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_VERSION) + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #undef JSON_HEDLEY_TI_CL2000_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C2000__) + #define JSON_HEDLEY_TI_CL2000_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL2000_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL2000_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL2000_VERSION) + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL2000_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL2000_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #undef JSON_HEDLEY_TI_CL430_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__MSP430__) + #define JSON_HEDLEY_TI_CL430_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL430_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL430_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL430_VERSION) + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL430_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL430_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #undef JSON_HEDLEY_TI_ARMCL_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && (defined(__TMS470__) || defined(__TI_ARM__)) + #define JSON_HEDLEY_TI_ARMCL_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION_CHECK) + #undef JSON_HEDLEY_TI_ARMCL_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_ARMCL_VERSION) + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_ARMCL_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #undef JSON_HEDLEY_TI_CL6X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__TMS320C6X__) + #define JSON_HEDLEY_TI_CL6X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL6X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL6X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL6X_VERSION) + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL6X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL6X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #undef JSON_HEDLEY_TI_CL7X_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__C7000__) + #define JSON_HEDLEY_TI_CL7X_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CL7X_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CL7X_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CL7X_VERSION) + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CL7X_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CL7X_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #undef JSON_HEDLEY_TI_CLPRU_VERSION +#endif +#if defined(__TI_COMPILER_VERSION__) && defined(__PRU__) + #define JSON_HEDLEY_TI_CLPRU_VERSION JSON_HEDLEY_VERSION_ENCODE(__TI_COMPILER_VERSION__ / 1000000, (__TI_COMPILER_VERSION__ % 1000000) / 1000, (__TI_COMPILER_VERSION__ % 1000)) +#endif + +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION_CHECK) + #undef JSON_HEDLEY_TI_CLPRU_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TI_CLPRU_VERSION) + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TI_CLPRU_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION) + #undef JSON_HEDLEY_CRAY_VERSION +#endif +#if defined(_CRAYC) + #if defined(_RELEASE_PATCHLEVEL) + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, _RELEASE_PATCHLEVEL) + #else + #define JSON_HEDLEY_CRAY_VERSION JSON_HEDLEY_VERSION_ENCODE(_RELEASE_MAJOR, _RELEASE_MINOR, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_CRAY_VERSION_CHECK) + #undef JSON_HEDLEY_CRAY_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_CRAY_VERSION) + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_CRAY_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_CRAY_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION) + #undef JSON_HEDLEY_IAR_VERSION +#endif +#if defined(__IAR_SYSTEMS_ICC__) + #if __VER__ > 1000 + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE((__VER__ / 1000000), ((__VER__ / 1000) % 1000), (__VER__ % 1000)) + #else + #define JSON_HEDLEY_IAR_VERSION JSON_HEDLEY_VERSION_ENCODE(__VER__ / 100, __VER__ % 100, 0) + #endif +#endif + +#if defined(JSON_HEDLEY_IAR_VERSION_CHECK) + #undef JSON_HEDLEY_IAR_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_IAR_VERSION) + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_IAR_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_IAR_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION) + #undef JSON_HEDLEY_TINYC_VERSION +#endif +#if defined(__TINYC__) + #define JSON_HEDLEY_TINYC_VERSION JSON_HEDLEY_VERSION_ENCODE(__TINYC__ / 1000, (__TINYC__ / 100) % 10, __TINYC__ % 100) +#endif + +#if defined(JSON_HEDLEY_TINYC_VERSION_CHECK) + #undef JSON_HEDLEY_TINYC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_TINYC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_TINYC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION) + #undef JSON_HEDLEY_DMC_VERSION +#endif +#if defined(__DMC__) + #define JSON_HEDLEY_DMC_VERSION JSON_HEDLEY_VERSION_ENCODE(__DMC__ >> 8, (__DMC__ >> 4) & 0xf, __DMC__ & 0xf) +#endif + +#if defined(JSON_HEDLEY_DMC_VERSION_CHECK) + #undef JSON_HEDLEY_DMC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_DMC_VERSION) + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_DMC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_DMC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #undef JSON_HEDLEY_COMPCERT_VERSION +#endif +#if defined(__COMPCERT_VERSION__) + #define JSON_HEDLEY_COMPCERT_VERSION JSON_HEDLEY_VERSION_ENCODE(__COMPCERT_VERSION__ / 10000, (__COMPCERT_VERSION__ / 100) % 100, __COMPCERT_VERSION__ % 100) +#endif + +#if defined(JSON_HEDLEY_COMPCERT_VERSION_CHECK) + #undef JSON_HEDLEY_COMPCERT_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_COMPCERT_VERSION) + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_COMPCERT_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_COMPCERT_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION) + #undef JSON_HEDLEY_PELLES_VERSION +#endif +#if defined(__POCC__) + #define JSON_HEDLEY_PELLES_VERSION JSON_HEDLEY_VERSION_ENCODE(__POCC__ / 100, __POCC__ % 100, 0) +#endif + +#if defined(JSON_HEDLEY_PELLES_VERSION_CHECK) + #undef JSON_HEDLEY_PELLES_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_PELLES_VERSION) + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_PELLES_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_PELLES_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_MCST_LCC_VERSION) + #undef JSON_HEDLEY_MCST_LCC_VERSION +#endif +#if defined(__LCC__) && defined(__LCC_MINOR__) + #define JSON_HEDLEY_MCST_LCC_VERSION JSON_HEDLEY_VERSION_ENCODE(__LCC__ / 100, __LCC__ % 100, __LCC_MINOR__) +#endif + +#if defined(JSON_HEDLEY_MCST_LCC_VERSION_CHECK) + #undef JSON_HEDLEY_MCST_LCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_MCST_LCC_VERSION) + #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_MCST_LCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_MCST_LCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION) + #undef JSON_HEDLEY_GCC_VERSION +#endif +#if \ + defined(JSON_HEDLEY_GNUC_VERSION) && \ + !defined(__clang__) && \ + !defined(JSON_HEDLEY_INTEL_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_ARM_VERSION) && \ + !defined(JSON_HEDLEY_CRAY_VERSION) && \ + !defined(JSON_HEDLEY_TI_VERSION) && \ + !defined(JSON_HEDLEY_TI_ARMCL_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL430_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL2000_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL6X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CL7X_VERSION) && \ + !defined(JSON_HEDLEY_TI_CLPRU_VERSION) && \ + !defined(__COMPCERT__) && \ + !defined(JSON_HEDLEY_MCST_LCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION JSON_HEDLEY_GNUC_VERSION +#endif + +#if defined(JSON_HEDLEY_GCC_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_VERSION_CHECK +#endif +#if defined(JSON_HEDLEY_GCC_VERSION) + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (JSON_HEDLEY_GCC_VERSION >= JSON_HEDLEY_VERSION_ENCODE(major, minor, patch)) +#else + #define JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_ATTRIBUTE +#endif +#if \ + defined(__has_attribute) && \ + ( \ + (!defined(JSON_HEDLEY_IAR_VERSION) || JSON_HEDLEY_IAR_VERSION_CHECK(8,5,9)) \ + ) +# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) __has_attribute(attribute) +#else +# define JSON_HEDLEY_HAS_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_ATTRIBUTE +#endif +#if defined(__has_attribute) + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE +#endif +#if \ + defined(__has_cpp_attribute) && \ + defined(__cplusplus) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS) + #undef JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS +#endif +#if !defined(__cplusplus) || !defined(__has_cpp_attribute) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#elif \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION) && \ + (!defined(JSON_HEDLEY_SUNPRO_VERSION) || JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0)) && \ + (!defined(JSON_HEDLEY_MSVC_VERSION) || JSON_HEDLEY_MSVC_VERSION_CHECK(19,20,0)) + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(ns::attribute) +#else + #define JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(ns,attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE +#endif +#if defined(__has_cpp_attribute) && defined(__cplusplus) + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) __has_cpp_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_CPP_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_BUILTIN) + #undef JSON_HEDLEY_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_HAS_BUILTIN(builtin) __has_builtin(builtin) +#else + #define JSON_HEDLEY_HAS_BUILTIN(builtin) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_BUILTIN) + #undef JSON_HEDLEY_GNUC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GNUC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_BUILTIN) + #undef JSON_HEDLEY_GCC_HAS_BUILTIN +#endif +#if defined(__has_builtin) + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) __has_builtin(builtin) +#else + #define JSON_HEDLEY_GCC_HAS_BUILTIN(builtin,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_FEATURE) + #undef JSON_HEDLEY_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_HAS_FEATURE(feature) __has_feature(feature) +#else + #define JSON_HEDLEY_HAS_FEATURE(feature) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_FEATURE) + #undef JSON_HEDLEY_GNUC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GNUC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_FEATURE) + #undef JSON_HEDLEY_GCC_HAS_FEATURE +#endif +#if defined(__has_feature) + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) __has_feature(feature) +#else + #define JSON_HEDLEY_GCC_HAS_FEATURE(feature,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_EXTENSION) + #undef JSON_HEDLEY_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_HAS_EXTENSION(extension) __has_extension(extension) +#else + #define JSON_HEDLEY_HAS_EXTENSION(extension) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_EXTENSION) + #undef JSON_HEDLEY_GNUC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GNUC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_EXTENSION) + #undef JSON_HEDLEY_GCC_HAS_EXTENSION +#endif +#if defined(__has_extension) + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) __has_extension(extension) +#else + #define JSON_HEDLEY_GCC_HAS_EXTENSION(extension,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GNUC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE +#endif +#if defined(__has_declspec_attribute) + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) __has_declspec_attribute(attribute) +#else + #define JSON_HEDLEY_GCC_HAS_DECLSPEC_ATTRIBUTE(attribute,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_HAS_WARNING) + #undef JSON_HEDLEY_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_HAS_WARNING(warning) __has_warning(warning) +#else + #define JSON_HEDLEY_HAS_WARNING(warning) (0) +#endif + +#if defined(JSON_HEDLEY_GNUC_HAS_WARNING) + #undef JSON_HEDLEY_GNUC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GNUC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GNUC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_GCC_HAS_WARNING) + #undef JSON_HEDLEY_GCC_HAS_WARNING +#endif +#if defined(__has_warning) + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) __has_warning(warning) +#else + #define JSON_HEDLEY_GCC_HAS_WARNING(warning,major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + defined(__clang__) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,17) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(8,0,0) || \ + (JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) && defined(__C99_PRAGMA_OPERATOR)) + #define JSON_HEDLEY_PRAGMA(value) _Pragma(#value) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_PRAGMA(value) __pragma(value) +#else + #define JSON_HEDLEY_PRAGMA(value) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_PUSH) + #undef JSON_HEDLEY_DIAGNOSTIC_PUSH +#endif +#if defined(JSON_HEDLEY_DIAGNOSTIC_POP) + #undef JSON_HEDLEY_DIAGNOSTIC_POP +#endif +#if defined(__clang__) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("clang diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("clang diagnostic pop") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH __pragma(warning(push)) + #define JSON_HEDLEY_DIAGNOSTIC_POP __pragma(warning(pop)) +#elif JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("pop") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("diag_push") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("diag_pop") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_PUSH _Pragma("warning(push)") + #define JSON_HEDLEY_DIAGNOSTIC_POP _Pragma("warning(pop)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_PUSH + #define JSON_HEDLEY_DIAGNOSTIC_POP +#endif + +/* JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_ +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat") +# if JSON_HEDLEY_HAS_WARNING("-Wc++17-extensions") +# if JSON_HEDLEY_HAS_WARNING("-Wc++1z-extensions") +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + _Pragma("clang diagnostic ignored \"-Wc++1z-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + _Pragma("clang diagnostic ignored \"-Wc++17-extensions\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# else +# define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(xpr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wc++98-compat\"") \ + xpr \ + JSON_HEDLEY_DIAGNOSTIC_POP +# endif +# endif +#endif +#if !defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(x) x +#endif + +#if defined(JSON_HEDLEY_CONST_CAST) + #undef JSON_HEDLEY_CONST_CAST +#endif +#if defined(__cplusplus) +# define JSON_HEDLEY_CONST_CAST(T, expr) (const_cast(expr)) +#elif \ + JSON_HEDLEY_HAS_WARNING("-Wcast-qual") || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_CONST_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_CONST_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_REINTERPRET_CAST) + #undef JSON_HEDLEY_REINTERPRET_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) (reinterpret_cast(expr)) +#else + #define JSON_HEDLEY_REINTERPRET_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_STATIC_CAST) + #undef JSON_HEDLEY_STATIC_CAST +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_STATIC_CAST(T, expr) (static_cast(expr)) +#else + #define JSON_HEDLEY_STATIC_CAST(T, expr) ((T) (expr)) +#endif + +#if defined(JSON_HEDLEY_CPP_CAST) + #undef JSON_HEDLEY_CPP_CAST +#endif +#if defined(__cplusplus) +# if JSON_HEDLEY_HAS_WARNING("-Wold-style-cast") +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wold-style-cast\"") \ + ((T) (expr)) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# elif JSON_HEDLEY_IAR_VERSION_CHECK(8,3,0) +# define JSON_HEDLEY_CPP_CAST(T, expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("diag_suppress=Pe137") \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_CPP_CAST(T, expr) ((T) (expr)) +# endif +#else +# define JSON_HEDLEY_CPP_CAST(T, expr) (expr) +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wdeprecated-declarations") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("clang diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warning(disable:1478 1786)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:1478 1786)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1216,1444,1445") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED __pragma(warning(disable:4996)) +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1215,1444") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress 1291,1718") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && !defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,E_DEPRECATED_ATT,E_DEPRECATED_ATT_MESS)") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("error_messages(off,symdeprecated,symdeprecated2)") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("diag_suppress=Pe1444,Pe1215") +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,90,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED _Pragma("warn(disable:2241)") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_DEPRECATED +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:161)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068)) +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(16,9,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161") +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 161") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-attributes") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("clang diagnostic ignored \"-Wunknown-attributes\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(4,6,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("warning(disable:1292)") +#elif JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:1292)) +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES __pragma(warning(disable:5030)) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(20,7,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097,1098") +#elif JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("error_messages(off,attrskipunsup)") +#elif \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1173") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress=Pe1097") +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES _Pragma("diag_suppress 1097") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_CPP_ATTRIBUTES +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wcast-qual") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("clang diagnostic ignored \"-Wcast-qual\"") +#elif JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("warning(disable:2203 2331)") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL _Pragma("GCC diagnostic ignored \"-Wcast-qual\"") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_CAST_QUAL +#endif + +#if defined(JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION) + #undef JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunused-function") + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("clang diagnostic ignored \"-Wunused-function\"") +#elif JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("GCC diagnostic ignored \"-Wunused-function\"") +#elif JSON_HEDLEY_MSVC_VERSION_CHECK(1,0,0) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION __pragma(warning(disable:4505)) +#elif JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION _Pragma("diag_suppress 3142") +#else + #define JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNUSED_FUNCTION +#endif + +#if defined(JSON_HEDLEY_DEPRECATED) + #undef JSON_HEDLEY_DEPRECATED +#endif +#if defined(JSON_HEDLEY_DEPRECATED_FOR) + #undef JSON_HEDLEY_DEPRECATED_FOR +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated("Since " # since)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated("Since " #since "; use " #replacement)) +#elif \ + (JSON_HEDLEY_HAS_EXTENSION(attribute_deprecated_with_message) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,13,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(18,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,3,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,3,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__("Since " #since))) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__("Since " #since "; use " #replacement))) +#elif defined(__cplusplus) && (__cplusplus >= 201402L) + #define JSON_HEDLEY_DEPRECATED(since) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since)]]) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[deprecated("Since " #since "; use " #replacement)]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(deprecated) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_DEPRECATED(since) __attribute__((__deprecated__)) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __attribute__((__deprecated__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_PELLES_VERSION_CHECK(6,50,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_DEPRECATED(since) __declspec(deprecated) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) __declspec(deprecated) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_DEPRECATED(since) _Pragma("deprecated") + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) _Pragma("deprecated") +#else + #define JSON_HEDLEY_DEPRECATED(since) + #define JSON_HEDLEY_DEPRECATED_FOR(since, replacement) +#endif + +#if defined(JSON_HEDLEY_UNAVAILABLE) + #undef JSON_HEDLEY_UNAVAILABLE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warning) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_UNAVAILABLE(available_since) __attribute__((__warning__("Not available until " #available_since))) +#else + #define JSON_HEDLEY_UNAVAILABLE(available_since) +#endif + +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT +#endif +#if defined(JSON_HEDLEY_WARN_UNUSED_RESULT_MSG) + #undef JSON_HEDLEY_WARN_UNUSED_RESULT_MSG +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(warn_unused_result) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_WARN_UNUSED_RESULT __attribute__((__warn_unused_result__)) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) __attribute__((__warn_unused_result__)) +#elif (JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) >= 201907L) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard(msg)]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(nodiscard) + #define JSON_HEDLEY_WARN_UNUSED_RESULT JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[nodiscard]]) +#elif defined(_Check_return_) /* SAL */ + #define JSON_HEDLEY_WARN_UNUSED_RESULT _Check_return_ + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) _Check_return_ +#else + #define JSON_HEDLEY_WARN_UNUSED_RESULT + #define JSON_HEDLEY_WARN_UNUSED_RESULT_MSG(msg) +#endif + +#if defined(JSON_HEDLEY_SENTINEL) + #undef JSON_HEDLEY_SENTINEL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(sentinel) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_SENTINEL(position) __attribute__((__sentinel__(position))) +#else + #define JSON_HEDLEY_SENTINEL(position) +#endif + +#if defined(JSON_HEDLEY_NO_RETURN) + #undef JSON_HEDLEY_NO_RETURN +#endif +#if JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NO_RETURN __noreturn +#elif \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif defined(__STDC_VERSION__) && __STDC_VERSION__ >= 201112L + #define JSON_HEDLEY_NO_RETURN _Noreturn +#elif defined(__cplusplus) && (__cplusplus >= 201103L) + #define JSON_HEDLEY_NO_RETURN JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[noreturn]]) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(noreturn) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,2,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_NO_RETURN __attribute__((__noreturn__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_NO_RETURN _Pragma("does_not_return") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NO_RETURN _Pragma("FUNC_NEVER_RETURNS;") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NO_RETURN __attribute((noreturn)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NO_RETURN __declspec(noreturn) +#else + #define JSON_HEDLEY_NO_RETURN +#endif + +#if defined(JSON_HEDLEY_NO_ESCAPE) + #undef JSON_HEDLEY_NO_ESCAPE +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(noescape) + #define JSON_HEDLEY_NO_ESCAPE __attribute__((__noescape__)) +#else + #define JSON_HEDLEY_NO_ESCAPE +#endif + +#if defined(JSON_HEDLEY_UNREACHABLE) + #undef JSON_HEDLEY_UNREACHABLE +#endif +#if defined(JSON_HEDLEY_UNREACHABLE_RETURN) + #undef JSON_HEDLEY_UNREACHABLE_RETURN +#endif +#if defined(JSON_HEDLEY_ASSUME) + #undef JSON_HEDLEY_ASSUME +#endif +#if \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_ASSUME(expr) __assume(expr) +#elif JSON_HEDLEY_HAS_BUILTIN(__builtin_assume) + #define JSON_HEDLEY_ASSUME(expr) __builtin_assume(expr) +#elif \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #if defined(__cplusplus) + #define JSON_HEDLEY_ASSUME(expr) std::_nassert(expr) + #else + #define JSON_HEDLEY_ASSUME(expr) _nassert(expr) + #endif +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_unreachable) && (!defined(JSON_HEDLEY_ARM_VERSION))) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,5,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,10,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,5) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(10,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_UNREACHABLE() __builtin_unreachable() +#elif defined(JSON_HEDLEY_ASSUME) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif +#if !defined(JSON_HEDLEY_ASSUME) + #if defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, ((expr) ? 1 : (JSON_HEDLEY_UNREACHABLE(), 1))) + #else + #define JSON_HEDLEY_ASSUME(expr) JSON_HEDLEY_STATIC_CAST(void, expr) + #endif +#endif +#if defined(JSON_HEDLEY_UNREACHABLE) + #if \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (JSON_HEDLEY_STATIC_CAST(void, JSON_HEDLEY_ASSUME(0)), (value)) + #else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) JSON_HEDLEY_UNREACHABLE() + #endif +#else + #define JSON_HEDLEY_UNREACHABLE_RETURN(value) return (value) +#endif +#if !defined(JSON_HEDLEY_UNREACHABLE) + #define JSON_HEDLEY_UNREACHABLE() JSON_HEDLEY_ASSUME(0) +#endif + +JSON_HEDLEY_DIAGNOSTIC_PUSH +#if JSON_HEDLEY_HAS_WARNING("-Wpedantic") + #pragma clang diagnostic ignored "-Wpedantic" +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wc++98-compat-pedantic") && defined(__cplusplus) + #pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +#endif +#if JSON_HEDLEY_GCC_HAS_WARNING("-Wvariadic-macros",4,0,0) + #if defined(__clang__) + #pragma clang diagnostic ignored "-Wvariadic-macros" + #elif defined(JSON_HEDLEY_GCC_VERSION) + #pragma GCC diagnostic ignored "-Wvariadic-macros" + #endif +#endif +#if defined(JSON_HEDLEY_NON_NULL) + #undef JSON_HEDLEY_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NON_NULL(...) __attribute__((__nonnull__(__VA_ARGS__))) +#else + #define JSON_HEDLEY_NON_NULL(...) +#endif +JSON_HEDLEY_DIAGNOSTIC_POP + +#if defined(JSON_HEDLEY_PRINTF_FORMAT) + #undef JSON_HEDLEY_PRINTF_FORMAT +#endif +#if defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && !defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(ms_printf, string_idx, first_to_check))) +#elif defined(__MINGW32__) && JSON_HEDLEY_GCC_HAS_ATTRIBUTE(format,4,4,0) && defined(__USE_MINGW_ANSI_STDIO) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(gnu_printf, string_idx, first_to_check))) +#elif \ + JSON_HEDLEY_HAS_ATTRIBUTE(format) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,6,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __attribute__((__format__(__printf__, string_idx, first_to_check))) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(6,0,0) + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) __declspec(vaformat(printf,string_idx,first_to_check)) +#else + #define JSON_HEDLEY_PRINTF_FORMAT(string_idx,first_to_check) +#endif + +#if defined(JSON_HEDLEY_CONSTEXPR) + #undef JSON_HEDLEY_CONSTEXPR +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_CONSTEXPR JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(constexpr) + #endif +#endif +#if !defined(JSON_HEDLEY_CONSTEXPR) + #define JSON_HEDLEY_CONSTEXPR +#endif + +#if defined(JSON_HEDLEY_PREDICT) + #undef JSON_HEDLEY_PREDICT +#endif +#if defined(JSON_HEDLEY_LIKELY) + #undef JSON_HEDLEY_LIKELY +#endif +#if defined(JSON_HEDLEY_UNLIKELY) + #undef JSON_HEDLEY_UNLIKELY +#endif +#if defined(JSON_HEDLEY_UNPREDICTABLE) + #undef JSON_HEDLEY_UNPREDICTABLE +#endif +#if JSON_HEDLEY_HAS_BUILTIN(__builtin_unpredictable) + #define JSON_HEDLEY_UNPREDICTABLE(expr) __builtin_unpredictable((expr)) +#endif +#if \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect_with_probability) && !defined(JSON_HEDLEY_PGI_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(9,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PREDICT(expr, value, probability) __builtin_expect_with_probability( (expr), (value), (probability)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) __builtin_expect_with_probability(!!(expr), 1 , (probability)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) __builtin_expect_with_probability(!!(expr), 0 , (probability)) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect (!!(expr), 1 ) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect (!!(expr), 0 ) +#elif \ + (JSON_HEDLEY_HAS_BUILTIN(__builtin_expect) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,15,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,7,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,27) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PREDICT(expr, expected, probability) \ + (((probability) >= 0.9) ? __builtin_expect((expr), (expected)) : (JSON_HEDLEY_STATIC_CAST(void, expected), (expr))) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 1) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 0) : !!(expr))); \ + })) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) \ + (__extension__ ({ \ + double hedley_probability_ = (probability); \ + ((hedley_probability_ >= 0.9) ? __builtin_expect(!!(expr), 0) : ((hedley_probability_ <= 0.1) ? __builtin_expect(!!(expr), 1) : !!(expr))); \ + })) +# define JSON_HEDLEY_LIKELY(expr) __builtin_expect(!!(expr), 1) +# define JSON_HEDLEY_UNLIKELY(expr) __builtin_expect(!!(expr), 0) +#else +# define JSON_HEDLEY_PREDICT(expr, expected, probability) (JSON_HEDLEY_STATIC_CAST(void, expected), (expr)) +# define JSON_HEDLEY_PREDICT_TRUE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_PREDICT_FALSE(expr, probability) (!!(expr)) +# define JSON_HEDLEY_LIKELY(expr) (!!(expr)) +# define JSON_HEDLEY_UNLIKELY(expr) (!!(expr)) +#endif +#if !defined(JSON_HEDLEY_UNPREDICTABLE) + #define JSON_HEDLEY_UNPREDICTABLE(expr) JSON_HEDLEY_PREDICT(expr, 1, 0.5) +#endif + +#if defined(JSON_HEDLEY_MALLOC) + #undef JSON_HEDLEY_MALLOC +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(malloc) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_MALLOC __attribute__((__malloc__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_MALLOC _Pragma("returns_new_memory") +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_MALLOC __declspec(restrict) +#else + #define JSON_HEDLEY_MALLOC +#endif + +#if defined(JSON_HEDLEY_PURE) + #undef JSON_HEDLEY_PURE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(pure) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,96,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PURE __attribute__((__pure__)) +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) +# define JSON_HEDLEY_PURE _Pragma("does_not_write_global_data") +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(2,0,1) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) \ + ) +# define JSON_HEDLEY_PURE _Pragma("FUNC_IS_PURE;") +#else +# define JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_CONST) + #undef JSON_HEDLEY_CONST +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(const) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(2,5,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_CONST __attribute__((__const__)) +#elif \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) + #define JSON_HEDLEY_CONST _Pragma("no_side_effect") +#else + #define JSON_HEDLEY_CONST JSON_HEDLEY_PURE +#endif + +#if defined(JSON_HEDLEY_RESTRICT) + #undef JSON_HEDLEY_RESTRICT +#endif +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT restrict +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(14,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(17,10,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,4) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,14,0) && defined(__cplusplus)) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) || \ + defined(__clang__) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_RESTRICT __restrict +#elif JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,3,0) && !defined(__cplusplus) + #define JSON_HEDLEY_RESTRICT _Restrict +#else + #define JSON_HEDLEY_RESTRICT +#endif + +#if defined(JSON_HEDLEY_INLINE) + #undef JSON_HEDLEY_INLINE +#endif +#if \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) || \ + (defined(__cplusplus) && (__cplusplus >= 199711L)) + #define JSON_HEDLEY_INLINE inline +#elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(6,2,0) + #define JSON_HEDLEY_INLINE __inline__ +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,1,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(3,1,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,2,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(8,0,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_INLINE __inline +#else + #define JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_ALWAYS_INLINE) + #undef JSON_HEDLEY_ALWAYS_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(always_inline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) +# define JSON_HEDLEY_ALWAYS_INLINE __attribute__((__always_inline__)) JSON_HEDLEY_INLINE +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(12,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_ALWAYS_INLINE __forceinline +#elif defined(__cplusplus) && \ + ( \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) \ + ) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("FUNC_ALWAYS_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_ALWAYS_INLINE _Pragma("inline=forced") +#else +# define JSON_HEDLEY_ALWAYS_INLINE JSON_HEDLEY_INLINE +#endif + +#if defined(JSON_HEDLEY_NEVER_INLINE) + #undef JSON_HEDLEY_NEVER_INLINE +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(noinline) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(10,1,0) || \ + JSON_HEDLEY_TI_VERSION_CHECK(15,12,0) || \ + (JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(4,8,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_ARMCL_VERSION_CHECK(5,2,0) || \ + (JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL2000_VERSION_CHECK(6,4,0) || \ + (JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,0,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(4,3,0) || \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) || \ + JSON_HEDLEY_TI_CL7X_VERSION_CHECK(1,2,0) || \ + JSON_HEDLEY_TI_CLPRU_VERSION_CHECK(2,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) || \ + JSON_HEDLEY_IAR_VERSION_CHECK(8,10,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute__((__noinline__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,10,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#elif JSON_HEDLEY_PGI_VERSION_CHECK(10,2,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("noinline") +#elif JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,0,0) && defined(__cplusplus) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("FUNC_CANNOT_INLINE;") +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) + #define JSON_HEDLEY_NEVER_INLINE _Pragma("inline=never") +#elif JSON_HEDLEY_COMPCERT_VERSION_CHECK(3,2,0) + #define JSON_HEDLEY_NEVER_INLINE __attribute((noinline)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(9,0,0) + #define JSON_HEDLEY_NEVER_INLINE __declspec(noinline) +#else + #define JSON_HEDLEY_NEVER_INLINE +#endif + +#if defined(JSON_HEDLEY_PRIVATE) + #undef JSON_HEDLEY_PRIVATE +#endif +#if defined(JSON_HEDLEY_PUBLIC) + #undef JSON_HEDLEY_PUBLIC +#endif +#if defined(JSON_HEDLEY_IMPORT) + #undef JSON_HEDLEY_IMPORT +#endif +#if defined(_WIN32) || defined(__CYGWIN__) +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC __declspec(dllexport) +# define JSON_HEDLEY_IMPORT __declspec(dllimport) +#else +# if \ + JSON_HEDLEY_HAS_ATTRIBUTE(visibility) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,11,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + ( \ + defined(__TI_EABI__) && \ + ( \ + (JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,2,0) && defined(__TI_GNU_ATTRIBUTE_SUPPORT__)) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(7,5,0) \ + ) \ + ) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) +# define JSON_HEDLEY_PRIVATE __attribute__((__visibility__("hidden"))) +# define JSON_HEDLEY_PUBLIC __attribute__((__visibility__("default"))) +# else +# define JSON_HEDLEY_PRIVATE +# define JSON_HEDLEY_PUBLIC +# endif +# define JSON_HEDLEY_IMPORT extern +#endif + +#if defined(JSON_HEDLEY_NO_THROW) + #undef JSON_HEDLEY_NO_THROW +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(nothrow) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,3,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_NO_THROW __attribute__((__nothrow__)) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) + #define JSON_HEDLEY_NO_THROW __declspec(nothrow) +#else + #define JSON_HEDLEY_NO_THROW +#endif + +#if defined(JSON_HEDLEY_FALL_THROUGH) + #undef JSON_HEDLEY_FALL_THROUGH +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(fallthrough) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(7,0,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_FALL_THROUGH __attribute__((__fallthrough__)) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE_NS(clang,fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[clang::fallthrough]]) +#elif JSON_HEDLEY_HAS_CPP_ATTRIBUTE(fallthrough) + #define JSON_HEDLEY_FALL_THROUGH JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_([[fallthrough]]) +#elif defined(__fallthrough) /* SAL */ + #define JSON_HEDLEY_FALL_THROUGH __fallthrough +#else + #define JSON_HEDLEY_FALL_THROUGH +#endif + +#if defined(JSON_HEDLEY_RETURNS_NON_NULL) + #undef JSON_HEDLEY_RETURNS_NON_NULL +#endif +#if \ + JSON_HEDLEY_HAS_ATTRIBUTE(returns_nonnull) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_RETURNS_NON_NULL __attribute__((__returns_nonnull__)) +#elif defined(_Ret_notnull_) /* SAL */ + #define JSON_HEDLEY_RETURNS_NON_NULL _Ret_notnull_ +#else + #define JSON_HEDLEY_RETURNS_NON_NULL +#endif + +#if defined(JSON_HEDLEY_ARRAY_PARAM) + #undef JSON_HEDLEY_ARRAY_PARAM +#endif +#if \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) && \ + !defined(__STDC_NO_VLA__) && \ + !defined(__cplusplus) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_TINYC_VERSION) + #define JSON_HEDLEY_ARRAY_PARAM(name) (name) +#else + #define JSON_HEDLEY_ARRAY_PARAM(name) +#endif + +#if defined(JSON_HEDLEY_IS_CONSTANT) + #undef JSON_HEDLEY_IS_CONSTANT +#endif +#if defined(JSON_HEDLEY_REQUIRE_CONSTEXPR) + #undef JSON_HEDLEY_REQUIRE_CONSTEXPR +#endif +/* JSON_HEDLEY_IS_CONSTEXPR_ is for + HEDLEY INTERNAL USE ONLY. API subject to change without notice. */ +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #undef JSON_HEDLEY_IS_CONSTEXPR_ +#endif +#if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_constant_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,19) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(4,1,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_TI_CL6X_VERSION_CHECK(6,1,0) || \ + (JSON_HEDLEY_SUNPRO_VERSION_CHECK(5,10,0) && !defined(__cplusplus)) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_MCST_LCC_VERSION_CHECK(1,25,10) + #define JSON_HEDLEY_IS_CONSTANT(expr) __builtin_constant_p(expr) +#endif +#if !defined(__cplusplus) +# if \ + JSON_HEDLEY_HAS_BUILTIN(__builtin_types_compatible_p) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(3,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(13,1,0) || \ + JSON_HEDLEY_CRAY_VERSION_CHECK(8,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,4,0) || \ + JSON_HEDLEY_TINYC_VERSION_CHECK(0,9,24) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0)), int*) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) __builtin_types_compatible_p(__typeof__((1 ? (void*) ((intptr_t) ((expr) * 0)) : (int*) 0)), int*) +#endif +# elif \ + ( \ + defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L) && \ + !defined(JSON_HEDLEY_SUNPRO_VERSION) && \ + !defined(JSON_HEDLEY_PGI_VERSION) && \ + !defined(JSON_HEDLEY_IAR_VERSION)) || \ + (JSON_HEDLEY_HAS_EXTENSION(c_generic_selections) && !defined(JSON_HEDLEY_IAR_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,9,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(17,0,0) || \ + JSON_HEDLEY_IBM_VERSION_CHECK(12,1,0) || \ + JSON_HEDLEY_ARM_VERSION_CHECK(5,3,0) +#if defined(__INTPTR_TYPE__) + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((__INTPTR_TYPE__) ((expr) * 0)) : (int*) 0), int*: 1, void*: 0) +#else + #include + #define JSON_HEDLEY_IS_CONSTEXPR_(expr) _Generic((1 ? (void*) ((intptr_t) * 0) : (int*) 0), int*: 1, void*: 0) +#endif +# elif \ + defined(JSON_HEDLEY_GCC_VERSION) || \ + defined(JSON_HEDLEY_INTEL_VERSION) || \ + defined(JSON_HEDLEY_TINYC_VERSION) || \ + defined(JSON_HEDLEY_TI_ARMCL_VERSION) || \ + JSON_HEDLEY_TI_CL430_VERSION_CHECK(18,12,0) || \ + defined(JSON_HEDLEY_TI_CL2000_VERSION) || \ + defined(JSON_HEDLEY_TI_CL6X_VERSION) || \ + defined(JSON_HEDLEY_TI_CL7X_VERSION) || \ + defined(JSON_HEDLEY_TI_CLPRU_VERSION) || \ + defined(__clang__) +# define JSON_HEDLEY_IS_CONSTEXPR_(expr) ( \ + sizeof(void) != \ + sizeof(*( \ + 1 ? \ + ((void*) ((expr) * 0L) ) : \ +((struct { char v[sizeof(void) * 2]; } *) 1) \ + ) \ + ) \ + ) +# endif +#endif +#if defined(JSON_HEDLEY_IS_CONSTEXPR_) + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) JSON_HEDLEY_IS_CONSTEXPR_(expr) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (JSON_HEDLEY_IS_CONSTEXPR_(expr) ? (expr) : (-1)) +#else + #if !defined(JSON_HEDLEY_IS_CONSTANT) + #define JSON_HEDLEY_IS_CONSTANT(expr) (0) + #endif + #define JSON_HEDLEY_REQUIRE_CONSTEXPR(expr) (expr) +#endif + +#if defined(JSON_HEDLEY_BEGIN_C_DECLS) + #undef JSON_HEDLEY_BEGIN_C_DECLS +#endif +#if defined(JSON_HEDLEY_END_C_DECLS) + #undef JSON_HEDLEY_END_C_DECLS +#endif +#if defined(JSON_HEDLEY_C_DECL) + #undef JSON_HEDLEY_C_DECL +#endif +#if defined(__cplusplus) + #define JSON_HEDLEY_BEGIN_C_DECLS extern "C" { + #define JSON_HEDLEY_END_C_DECLS } + #define JSON_HEDLEY_C_DECL extern "C" +#else + #define JSON_HEDLEY_BEGIN_C_DECLS + #define JSON_HEDLEY_END_C_DECLS + #define JSON_HEDLEY_C_DECL +#endif + +#if defined(JSON_HEDLEY_STATIC_ASSERT) + #undef JSON_HEDLEY_STATIC_ASSERT +#endif +#if \ + !defined(__cplusplus) && ( \ + (defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 201112L)) || \ + (JSON_HEDLEY_HAS_FEATURE(c_static_assert) && !defined(JSON_HEDLEY_INTEL_CL_VERSION)) || \ + JSON_HEDLEY_GCC_VERSION_CHECK(6,0,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) || \ + defined(_Static_assert) \ + ) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) _Static_assert(expr, message) +#elif \ + (defined(__cplusplus) && (__cplusplus >= 201103L)) || \ + JSON_HEDLEY_MSVC_VERSION_CHECK(16,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(static_assert(expr, message)) +#else +# define JSON_HEDLEY_STATIC_ASSERT(expr, message) +#endif + +#if defined(JSON_HEDLEY_NULL) + #undef JSON_HEDLEY_NULL +#endif +#if defined(__cplusplus) + #if __cplusplus >= 201103L + #define JSON_HEDLEY_NULL JSON_HEDLEY_DIAGNOSTIC_DISABLE_CPP98_COMPAT_WRAP_(nullptr) + #elif defined(NULL) + #define JSON_HEDLEY_NULL NULL + #else + #define JSON_HEDLEY_NULL JSON_HEDLEY_STATIC_CAST(void*, 0) + #endif +#elif defined(NULL) + #define JSON_HEDLEY_NULL NULL +#else + #define JSON_HEDLEY_NULL ((void*) 0) +#endif + +#if defined(JSON_HEDLEY_MESSAGE) + #undef JSON_HEDLEY_MESSAGE +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_MESSAGE(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(message msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message msg) +#elif JSON_HEDLEY_CRAY_VERSION_CHECK(5,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(_CRI message msg) +#elif JSON_HEDLEY_IAR_VERSION_CHECK(8,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#elif JSON_HEDLEY_PELLES_VERSION_CHECK(2,0,0) +# define JSON_HEDLEY_MESSAGE(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_WARNING) + #undef JSON_HEDLEY_WARNING +#endif +#if JSON_HEDLEY_HAS_WARNING("-Wunknown-pragmas") +# define JSON_HEDLEY_WARNING(msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + JSON_HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS \ + JSON_HEDLEY_PRAGMA(clang warning msg) \ + JSON_HEDLEY_DIAGNOSTIC_POP +#elif \ + JSON_HEDLEY_GCC_VERSION_CHECK(4,8,0) || \ + JSON_HEDLEY_PGI_VERSION_CHECK(18,4,0) || \ + JSON_HEDLEY_INTEL_VERSION_CHECK(13,0,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(GCC warning msg) +#elif \ + JSON_HEDLEY_MSVC_VERSION_CHECK(15,0,0) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_PRAGMA(message(msg)) +#else +# define JSON_HEDLEY_WARNING(msg) JSON_HEDLEY_MESSAGE(msg) +#endif + +#if defined(JSON_HEDLEY_REQUIRE) + #undef JSON_HEDLEY_REQUIRE +#endif +#if defined(JSON_HEDLEY_REQUIRE_MSG) + #undef JSON_HEDLEY_REQUIRE_MSG +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(diagnose_if) +# if JSON_HEDLEY_HAS_WARNING("-Wgcc-compat") +# define JSON_HEDLEY_REQUIRE(expr) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), #expr, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("clang diagnostic ignored \"-Wgcc-compat\"") \ + __attribute__((diagnose_if(!(expr), msg, "error"))) \ + JSON_HEDLEY_DIAGNOSTIC_POP +# else +# define JSON_HEDLEY_REQUIRE(expr) __attribute__((diagnose_if(!(expr), #expr, "error"))) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) __attribute__((diagnose_if(!(expr), msg, "error"))) +# endif +#else +# define JSON_HEDLEY_REQUIRE(expr) +# define JSON_HEDLEY_REQUIRE_MSG(expr,msg) +#endif + +#if defined(JSON_HEDLEY_FLAGS) + #undef JSON_HEDLEY_FLAGS +#endif +#if JSON_HEDLEY_HAS_ATTRIBUTE(flag_enum) && (!defined(__cplusplus) || JSON_HEDLEY_HAS_WARNING("-Wbitfield-enum-conversion")) + #define JSON_HEDLEY_FLAGS __attribute__((__flag_enum__)) +#else + #define JSON_HEDLEY_FLAGS +#endif + +#if defined(JSON_HEDLEY_FLAGS_CAST) + #undef JSON_HEDLEY_FLAGS_CAST +#endif +#if JSON_HEDLEY_INTEL_VERSION_CHECK(19,0,0) +# define JSON_HEDLEY_FLAGS_CAST(T, expr) (__extension__ ({ \ + JSON_HEDLEY_DIAGNOSTIC_PUSH \ + _Pragma("warning(disable:188)") \ + ((T) (expr)); \ + JSON_HEDLEY_DIAGNOSTIC_POP \ + })) +#else +# define JSON_HEDLEY_FLAGS_CAST(T, expr) JSON_HEDLEY_STATIC_CAST(T, expr) +#endif + +#if defined(JSON_HEDLEY_EMPTY_BASES) + #undef JSON_HEDLEY_EMPTY_BASES +#endif +#if \ + (JSON_HEDLEY_MSVC_VERSION_CHECK(19,0,23918) && !JSON_HEDLEY_MSVC_VERSION_CHECK(20,0,0)) || \ + JSON_HEDLEY_INTEL_CL_VERSION_CHECK(2021,1,0) + #define JSON_HEDLEY_EMPTY_BASES __declspec(empty_bases) +#else + #define JSON_HEDLEY_EMPTY_BASES +#endif + +/* Remaining macros are deprecated. */ + +#if defined(JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK) + #undef JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK +#endif +#if defined(__clang__) + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) (0) +#else + #define JSON_HEDLEY_GCC_NOT_CLANG_VERSION_CHECK(major,minor,patch) JSON_HEDLEY_GCC_VERSION_CHECK(major,minor,patch) +#endif + +#if defined(JSON_HEDLEY_CLANG_HAS_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_CPP_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_CPP_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_BUILTIN) + #undef JSON_HEDLEY_CLANG_HAS_BUILTIN +#endif +#define JSON_HEDLEY_CLANG_HAS_BUILTIN(builtin) JSON_HEDLEY_HAS_BUILTIN(builtin) + +#if defined(JSON_HEDLEY_CLANG_HAS_FEATURE) + #undef JSON_HEDLEY_CLANG_HAS_FEATURE +#endif +#define JSON_HEDLEY_CLANG_HAS_FEATURE(feature) JSON_HEDLEY_HAS_FEATURE(feature) + +#if defined(JSON_HEDLEY_CLANG_HAS_EXTENSION) + #undef JSON_HEDLEY_CLANG_HAS_EXTENSION +#endif +#define JSON_HEDLEY_CLANG_HAS_EXTENSION(extension) JSON_HEDLEY_HAS_EXTENSION(extension) + +#if defined(JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE) + #undef JSON_HEDLEY_CLANG_HAS_DECLSPEC_DECLSPEC_ATTRIBUTE +#endif +#define JSON_HEDLEY_CLANG_HAS_DECLSPEC_ATTRIBUTE(attribute) JSON_HEDLEY_HAS_DECLSPEC_ATTRIBUTE(attribute) + +#if defined(JSON_HEDLEY_CLANG_HAS_WARNING) + #undef JSON_HEDLEY_CLANG_HAS_WARNING +#endif +#define JSON_HEDLEY_CLANG_HAS_WARNING(warning) JSON_HEDLEY_HAS_WARNING(warning) + +#endif /* !defined(JSON_HEDLEY_VERSION) || (JSON_HEDLEY_VERSION < X) */ + + +// This file contains all internal macro definitions (except those affecting ABI) +// You MUST include macro_unscope.hpp at the end of json.hpp to undef all of them + +// #include + + +// exclude unsupported compilers +#if !defined(JSON_SKIP_UNSUPPORTED_COMPILER_CHECK) + #if defined(__clang__) + #if (__clang_major__ * 10000 + __clang_minor__ * 100 + __clang_patchlevel__) < 30400 + #error "unsupported Clang version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #elif defined(__GNUC__) && !(defined(__ICC) || defined(__INTEL_COMPILER)) + #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) < 40800 + #error "unsupported GCC version - see https://github.com/nlohmann/json#supported-compilers" + #endif + #endif +#endif + +// C++ language standard detection +// if the user manually specified the used c++ version this is skipped +#if !defined(JSON_HAS_CPP_23) && !defined(JSON_HAS_CPP_20) && !defined(JSON_HAS_CPP_17) && !defined(JSON_HAS_CPP_14) && !defined(JSON_HAS_CPP_11) + #if (defined(__cplusplus) && __cplusplus > 202002L) || (defined(_MSVC_LANG) && _MSVC_LANG > 202002L) + #define JSON_HAS_CPP_23 + #define JSON_HAS_CPP_20 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus > 201703L) || (defined(_MSVC_LANG) && _MSVC_LANG > 201703L) + #define JSON_HAS_CPP_20 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus > 201402L) || (defined(_HAS_CXX17) && _HAS_CXX17 == 1) // fix for issue #464 + #define JSON_HAS_CPP_17 + #define JSON_HAS_CPP_14 + #elif (defined(__cplusplus) && __cplusplus > 201103L) || (defined(_HAS_CXX14) && _HAS_CXX14 == 1) + #define JSON_HAS_CPP_14 + #endif + // the cpp 11 flag is always specified because it is the minimal required version + #define JSON_HAS_CPP_11 +#endif + +#ifdef __has_include + #if __has_include() + #include + #endif +#endif + +#if !defined(JSON_HAS_FILESYSTEM) && !defined(JSON_HAS_EXPERIMENTAL_FILESYSTEM) + #ifdef JSON_HAS_CPP_17 + #if defined(__cpp_lib_filesystem) + #define JSON_HAS_FILESYSTEM 1 + #elif defined(__cpp_lib_experimental_filesystem) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif !defined(__has_include) + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #elif __has_include() + #define JSON_HAS_FILESYSTEM 1 + #elif __has_include() + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 1 + #endif + + // std::filesystem does not work on MinGW GCC 8: https://sourceforge.net/p/mingw-w64/bugs/737/ + #if defined(__MINGW32__) && defined(__GNUC__) && __GNUC__ == 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before GCC 8: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__GNUC__) && !defined(__clang__) && __GNUC__ < 8 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before Clang 7: https://en.cppreference.com/w/cpp/compiler_support + #if defined(__clang_major__) && __clang_major__ < 7 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before MSVC 19.14: https://en.cppreference.com/w/cpp/compiler_support + #if defined(_MSC_VER) && _MSC_VER < 1914 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before iOS 13 + #if defined(__IPHONE_OS_VERSION_MIN_REQUIRED) && __IPHONE_OS_VERSION_MIN_REQUIRED < 130000 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + + // no filesystem support before macOS Catalina + #if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) && __MAC_OS_X_VERSION_MIN_REQUIRED < 101500 + #undef JSON_HAS_FILESYSTEM + #undef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #endif + #endif +#endif + +#ifndef JSON_HAS_EXPERIMENTAL_FILESYSTEM + #define JSON_HAS_EXPERIMENTAL_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_FILESYSTEM + #define JSON_HAS_FILESYSTEM 0 +#endif + +#ifndef JSON_HAS_THREE_WAY_COMPARISON + #if defined(__cpp_impl_three_way_comparison) && __cpp_impl_three_way_comparison >= 201907L \ + && defined(__cpp_lib_three_way_comparison) && __cpp_lib_three_way_comparison >= 201907L + #define JSON_HAS_THREE_WAY_COMPARISON 1 + #else + #define JSON_HAS_THREE_WAY_COMPARISON 0 + #endif +#endif + +#ifndef JSON_HAS_RANGES + // ranges header shipping in GCC 11.1.0 (released 2021-04-27) has syntax error + #if defined(__GLIBCXX__) && __GLIBCXX__ == 20210427 + #define JSON_HAS_RANGES 0 + #elif defined(__cpp_lib_ranges) + #define JSON_HAS_RANGES 1 + #else + #define JSON_HAS_RANGES 0 + #endif +#endif + +#ifndef JSON_HAS_STATIC_RTTI + #if !defined(_HAS_STATIC_RTTI) || _HAS_STATIC_RTTI != 0 + #define JSON_HAS_STATIC_RTTI 1 + #else + #define JSON_HAS_STATIC_RTTI 0 + #endif +#endif + +#ifdef JSON_HAS_CPP_17 + #define JSON_INLINE_VARIABLE inline +#else + #define JSON_INLINE_VARIABLE +#endif + +#if JSON_HEDLEY_HAS_ATTRIBUTE(no_unique_address) + #define JSON_NO_UNIQUE_ADDRESS [[no_unique_address]] +#else + #define JSON_NO_UNIQUE_ADDRESS +#endif + +// disable documentation warnings on clang +#if defined(__clang__) + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wdocumentation" + #pragma clang diagnostic ignored "-Wdocumentation-unknown-command" +#endif + +// allow disabling exceptions +#if (defined(__cpp_exceptions) || defined(__EXCEPTIONS) || defined(_CPPUNWIND)) && !defined(JSON_NOEXCEPTION) + #define JSON_THROW(exception) throw exception + #define JSON_TRY try + #define JSON_CATCH(exception) catch(exception) + #define JSON_INTERNAL_CATCH(exception) catch(exception) +#else + #include + #define JSON_THROW(exception) std::abort() + #define JSON_TRY if(true) + #define JSON_CATCH(exception) if(false) + #define JSON_INTERNAL_CATCH(exception) if(false) +#endif + +// override exception macros +#if defined(JSON_THROW_USER) + #undef JSON_THROW + #define JSON_THROW JSON_THROW_USER +#endif +#if defined(JSON_TRY_USER) + #undef JSON_TRY + #define JSON_TRY JSON_TRY_USER +#endif +#if defined(JSON_CATCH_USER) + #undef JSON_CATCH + #define JSON_CATCH JSON_CATCH_USER + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_CATCH_USER +#endif +#if defined(JSON_INTERNAL_CATCH_USER) + #undef JSON_INTERNAL_CATCH + #define JSON_INTERNAL_CATCH JSON_INTERNAL_CATCH_USER +#endif + +// allow overriding assert +#if !defined(JSON_ASSERT) + #include // assert + #define JSON_ASSERT(x) assert(x) +#endif + +// allow to access some private functions (needed by the test suite) +#if defined(JSON_TESTS_PRIVATE) + #define JSON_PRIVATE_UNLESS_TESTED public +#else + #define JSON_PRIVATE_UNLESS_TESTED private +#endif + +/*! +@brief macro to briefly define a mapping between an enum and JSON +@def NLOHMANN_JSON_SERIALIZE_ENUM +@since version 3.4.0 +*/ +#define NLOHMANN_JSON_SERIALIZE_ENUM(ENUM_TYPE, ...) \ + template \ + inline void to_json(BasicJsonType& j, const ENUM_TYPE& e) \ + { \ + /* NOLINTNEXTLINE(modernize-type-traits) we use C++11 */ \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + /* NOLINTNEXTLINE(modernize-avoid-c-arrays) we don't want to depend on */ \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [e](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.first == e; \ + }); \ + j = ((it != std::end(m)) ? it : std::begin(m))->second; \ + } \ + template \ + inline void from_json(const BasicJsonType& j, ENUM_TYPE& e) \ + { \ + /* NOLINTNEXTLINE(modernize-type-traits) we use C++11 */ \ + static_assert(std::is_enum::value, #ENUM_TYPE " must be an enum!"); \ + /* NOLINTNEXTLINE(modernize-avoid-c-arrays) we don't want to depend on */ \ + static const std::pair m[] = __VA_ARGS__; \ + auto it = std::find_if(std::begin(m), std::end(m), \ + [&j](const std::pair& ej_pair) -> bool \ + { \ + return ej_pair.second == j; \ + }); \ + e = ((it != std::end(m)) ? it : std::begin(m))->first; \ + } + +// Ugly macros to avoid uglier copy-paste when specializing basic_json. They +// may be removed in the future once the class is split. + +#define NLOHMANN_BASIC_JSON_TPL_DECLARATION \ + template class ObjectType, \ + template class ArrayType, \ + class StringType, class BooleanType, class NumberIntegerType, \ + class NumberUnsignedType, class NumberFloatType, \ + template class AllocatorType, \ + template class JSONSerializer, \ + class BinaryType, \ + class CustomBaseClass> + +#define NLOHMANN_BASIC_JSON_TPL \ + basic_json + +// Macros to simplify conversion from/to types + +#define NLOHMANN_JSON_EXPAND( x ) x +#define NLOHMANN_JSON_GET_MACRO(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, _21, _22, _23, _24, _25, _26, _27, _28, _29, _30, _31, _32, _33, _34, _35, _36, _37, _38, _39, _40, _41, _42, _43, _44, _45, _46, _47, _48, _49, _50, _51, _52, _53, _54, _55, _56, _57, _58, _59, _60, _61, _62, _63, _64, NAME,...) NAME +#define NLOHMANN_JSON_PASTE(...) NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_GET_MACRO(__VA_ARGS__, \ + NLOHMANN_JSON_PASTE64, \ + NLOHMANN_JSON_PASTE63, \ + NLOHMANN_JSON_PASTE62, \ + NLOHMANN_JSON_PASTE61, \ + NLOHMANN_JSON_PASTE60, \ + NLOHMANN_JSON_PASTE59, \ + NLOHMANN_JSON_PASTE58, \ + NLOHMANN_JSON_PASTE57, \ + NLOHMANN_JSON_PASTE56, \ + NLOHMANN_JSON_PASTE55, \ + NLOHMANN_JSON_PASTE54, \ + NLOHMANN_JSON_PASTE53, \ + NLOHMANN_JSON_PASTE52, \ + NLOHMANN_JSON_PASTE51, \ + NLOHMANN_JSON_PASTE50, \ + NLOHMANN_JSON_PASTE49, \ + NLOHMANN_JSON_PASTE48, \ + NLOHMANN_JSON_PASTE47, \ + NLOHMANN_JSON_PASTE46, \ + NLOHMANN_JSON_PASTE45, \ + NLOHMANN_JSON_PASTE44, \ + NLOHMANN_JSON_PASTE43, \ + NLOHMANN_JSON_PASTE42, \ + NLOHMANN_JSON_PASTE41, \ + NLOHMANN_JSON_PASTE40, \ + NLOHMANN_JSON_PASTE39, \ + NLOHMANN_JSON_PASTE38, \ + NLOHMANN_JSON_PASTE37, \ + NLOHMANN_JSON_PASTE36, \ + NLOHMANN_JSON_PASTE35, \ + NLOHMANN_JSON_PASTE34, \ + NLOHMANN_JSON_PASTE33, \ + NLOHMANN_JSON_PASTE32, \ + NLOHMANN_JSON_PASTE31, \ + NLOHMANN_JSON_PASTE30, \ + NLOHMANN_JSON_PASTE29, \ + NLOHMANN_JSON_PASTE28, \ + NLOHMANN_JSON_PASTE27, \ + NLOHMANN_JSON_PASTE26, \ + NLOHMANN_JSON_PASTE25, \ + NLOHMANN_JSON_PASTE24, \ + NLOHMANN_JSON_PASTE23, \ + NLOHMANN_JSON_PASTE22, \ + NLOHMANN_JSON_PASTE21, \ + NLOHMANN_JSON_PASTE20, \ + NLOHMANN_JSON_PASTE19, \ + NLOHMANN_JSON_PASTE18, \ + NLOHMANN_JSON_PASTE17, \ + NLOHMANN_JSON_PASTE16, \ + NLOHMANN_JSON_PASTE15, \ + NLOHMANN_JSON_PASTE14, \ + NLOHMANN_JSON_PASTE13, \ + NLOHMANN_JSON_PASTE12, \ + NLOHMANN_JSON_PASTE11, \ + NLOHMANN_JSON_PASTE10, \ + NLOHMANN_JSON_PASTE9, \ + NLOHMANN_JSON_PASTE8, \ + NLOHMANN_JSON_PASTE7, \ + NLOHMANN_JSON_PASTE6, \ + NLOHMANN_JSON_PASTE5, \ + NLOHMANN_JSON_PASTE4, \ + NLOHMANN_JSON_PASTE3, \ + NLOHMANN_JSON_PASTE2, \ + NLOHMANN_JSON_PASTE1)(__VA_ARGS__)) +#define NLOHMANN_JSON_PASTE2(func, v1) func(v1) +#define NLOHMANN_JSON_PASTE3(func, v1, v2) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE2(func, v2) +#define NLOHMANN_JSON_PASTE4(func, v1, v2, v3) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE3(func, v2, v3) +#define NLOHMANN_JSON_PASTE5(func, v1, v2, v3, v4) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE4(func, v2, v3, v4) +#define NLOHMANN_JSON_PASTE6(func, v1, v2, v3, v4, v5) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE5(func, v2, v3, v4, v5) +#define NLOHMANN_JSON_PASTE7(func, v1, v2, v3, v4, v5, v6) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE6(func, v2, v3, v4, v5, v6) +#define NLOHMANN_JSON_PASTE8(func, v1, v2, v3, v4, v5, v6, v7) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE7(func, v2, v3, v4, v5, v6, v7) +#define NLOHMANN_JSON_PASTE9(func, v1, v2, v3, v4, v5, v6, v7, v8) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE8(func, v2, v3, v4, v5, v6, v7, v8) +#define NLOHMANN_JSON_PASTE10(func, v1, v2, v3, v4, v5, v6, v7, v8, v9) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE9(func, v2, v3, v4, v5, v6, v7, v8, v9) +#define NLOHMANN_JSON_PASTE11(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE10(func, v2, v3, v4, v5, v6, v7, v8, v9, v10) +#define NLOHMANN_JSON_PASTE12(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE11(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11) +#define NLOHMANN_JSON_PASTE13(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE12(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12) +#define NLOHMANN_JSON_PASTE14(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE13(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13) +#define NLOHMANN_JSON_PASTE15(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE14(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14) +#define NLOHMANN_JSON_PASTE16(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE15(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15) +#define NLOHMANN_JSON_PASTE17(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE16(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16) +#define NLOHMANN_JSON_PASTE18(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE17(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17) +#define NLOHMANN_JSON_PASTE19(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE18(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18) +#define NLOHMANN_JSON_PASTE20(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE19(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19) +#define NLOHMANN_JSON_PASTE21(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE20(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20) +#define NLOHMANN_JSON_PASTE22(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE21(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21) +#define NLOHMANN_JSON_PASTE23(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE22(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22) +#define NLOHMANN_JSON_PASTE24(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE23(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23) +#define NLOHMANN_JSON_PASTE25(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE24(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24) +#define NLOHMANN_JSON_PASTE26(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE25(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25) +#define NLOHMANN_JSON_PASTE27(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE26(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26) +#define NLOHMANN_JSON_PASTE28(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE27(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27) +#define NLOHMANN_JSON_PASTE29(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE28(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28) +#define NLOHMANN_JSON_PASTE30(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE29(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29) +#define NLOHMANN_JSON_PASTE31(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE30(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30) +#define NLOHMANN_JSON_PASTE32(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE31(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31) +#define NLOHMANN_JSON_PASTE33(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE32(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32) +#define NLOHMANN_JSON_PASTE34(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE33(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33) +#define NLOHMANN_JSON_PASTE35(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE34(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34) +#define NLOHMANN_JSON_PASTE36(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE35(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35) +#define NLOHMANN_JSON_PASTE37(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE36(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36) +#define NLOHMANN_JSON_PASTE38(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE37(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37) +#define NLOHMANN_JSON_PASTE39(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE38(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38) +#define NLOHMANN_JSON_PASTE40(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE39(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39) +#define NLOHMANN_JSON_PASTE41(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE40(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40) +#define NLOHMANN_JSON_PASTE42(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE41(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41) +#define NLOHMANN_JSON_PASTE43(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE42(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42) +#define NLOHMANN_JSON_PASTE44(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE43(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43) +#define NLOHMANN_JSON_PASTE45(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE44(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44) +#define NLOHMANN_JSON_PASTE46(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE45(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45) +#define NLOHMANN_JSON_PASTE47(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE46(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46) +#define NLOHMANN_JSON_PASTE48(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE47(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47) +#define NLOHMANN_JSON_PASTE49(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE48(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48) +#define NLOHMANN_JSON_PASTE50(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE49(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49) +#define NLOHMANN_JSON_PASTE51(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE50(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50) +#define NLOHMANN_JSON_PASTE52(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE51(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51) +#define NLOHMANN_JSON_PASTE53(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE52(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52) +#define NLOHMANN_JSON_PASTE54(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE53(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53) +#define NLOHMANN_JSON_PASTE55(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE54(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54) +#define NLOHMANN_JSON_PASTE56(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE55(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55) +#define NLOHMANN_JSON_PASTE57(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE56(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56) +#define NLOHMANN_JSON_PASTE58(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE57(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57) +#define NLOHMANN_JSON_PASTE59(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE58(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58) +#define NLOHMANN_JSON_PASTE60(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE59(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59) +#define NLOHMANN_JSON_PASTE61(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE60(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60) +#define NLOHMANN_JSON_PASTE62(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE61(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61) +#define NLOHMANN_JSON_PASTE63(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE62(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62) +#define NLOHMANN_JSON_PASTE64(func, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) NLOHMANN_JSON_PASTE2(func, v1) NLOHMANN_JSON_PASTE63(func, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35, v36, v37, v38, v39, v40, v41, v42, v43, v44, v45, v46, v47, v48, v49, v50, v51, v52, v53, v54, v55, v56, v57, v58, v59, v60, v61, v62, v63) + +#define NLOHMANN_JSON_TO(v1) nlohmann_json_j[#v1] = nlohmann_json_t.v1; +#define NLOHMANN_JSON_FROM(v1) nlohmann_json_j.at(#v1).get_to(nlohmann_json_t.v1); +#define NLOHMANN_JSON_FROM_WITH_DEFAULT(v1) nlohmann_json_t.v1 = !nlohmann_json_j.is_null() ? nlohmann_json_j.value(#v1, nlohmann_json_default_obj.v1) : nlohmann_json_default_obj.v1; + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE +@since version 3.9.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE(Type, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT +@since version 3.11.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_WITH_DEFAULT(Type, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE +@since version 3.11.3 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE +@since version 3.9.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE(Type, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT +@since version 3.11.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE +@since version 3.11.3 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_type_non_intrusive/ +*/ +#define NLOHMANN_DEFINE_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE(Type, BaseType, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_WITH_DEFAULT(Type, BaseType, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + friend void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_INTRUSIVE_ONLY_SERIALIZE(Type, BaseType, ...) \ + template::value, int> = 0> \ + friend void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE(Type, BaseType, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_WITH_DEFAULT(Type, BaseType, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } \ + template::value, int> = 0> \ + void from_json(const BasicJsonType& nlohmann_json_j, Type& nlohmann_json_t) { nlohmann::from_json(nlohmann_json_j, static_cast(nlohmann_json_t)); const Type nlohmann_json_default_obj{}; NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_FROM_WITH_DEFAULT, __VA_ARGS__)) } + +/*! +@brief macro +@def NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE +@since version 3.12.0 +@sa https://json.nlohmann.me/api/macros/nlohmann_define_derived_type/ +*/ +#define NLOHMANN_DEFINE_DERIVED_TYPE_NON_INTRUSIVE_ONLY_SERIALIZE(Type, BaseType, ...) \ + template::value, int> = 0> \ + void to_json(BasicJsonType& nlohmann_json_j, const Type& nlohmann_json_t) { nlohmann::to_json(nlohmann_json_j, static_cast(nlohmann_json_t)); NLOHMANN_JSON_EXPAND(NLOHMANN_JSON_PASTE(NLOHMANN_JSON_TO, __VA_ARGS__)) } + +// inspired from https://stackoverflow.com/a/26745591 +// allows calling any std function as if (e.g., with begin): +// using std::begin; begin(x); +// +// it allows using the detected idiom to retrieve the return type +// of such an expression +#define NLOHMANN_CAN_CALL_STD_FUNC_IMPL(std_name) \ + namespace detail { \ + using std::std_name; \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + } \ + \ + namespace detail2 { \ + struct std_name##_tag \ + { \ + }; \ + \ + template \ + std_name##_tag std_name(T&&...); \ + \ + template \ + using result_of_##std_name = decltype(std_name(std::declval()...)); \ + \ + template \ + struct would_call_std_##std_name \ + { \ + static constexpr auto const value = ::nlohmann::detail:: \ + is_detected_exact::value; \ + }; \ + } /* namespace detail2 */ \ + \ + template \ + struct would_call_std_##std_name : detail2::would_call_std_##std_name \ + { \ + } + +#ifndef JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_USE_IMPLICIT_CONVERSIONS 1 +#endif + +#if JSON_USE_IMPLICIT_CONVERSIONS + #define JSON_EXPLICIT +#else + #define JSON_EXPLICIT explicit +#endif + +#ifndef JSON_DISABLE_ENUM_SERIALIZATION + #define JSON_DISABLE_ENUM_SERIALIZATION 0 +#endif + +#ifndef JSON_USE_GLOBAL_UDLS + #define JSON_USE_GLOBAL_UDLS 1 +#endif + +#if JSON_HAS_THREE_WAY_COMPARISON + #include // partial_ordering +#endif + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/////////////////////////// +// JSON type enumeration // +/////////////////////////// + +/*! +@brief the JSON type enumeration + +This enumeration collects the different JSON types. It is internally used to +distinguish the stored values, and the functions @ref basic_json::is_null(), +@ref basic_json::is_object(), @ref basic_json::is_array(), +@ref basic_json::is_string(), @ref basic_json::is_boolean(), +@ref basic_json::is_number() (with @ref basic_json::is_number_integer(), +@ref basic_json::is_number_unsigned(), and @ref basic_json::is_number_float()), +@ref basic_json::is_discarded(), @ref basic_json::is_primitive(), and +@ref basic_json::is_structured() rely on it. + +@note There are three enumeration entries (number_integer, number_unsigned, and +number_float), because the library distinguishes these three types for numbers: +@ref basic_json::number_unsigned_t is used for unsigned integers, +@ref basic_json::number_integer_t is used for signed integers, and +@ref basic_json::number_float_t is used for floating-point numbers or to +approximate integers which do not fit in the limits of their respective type. + +@sa see @ref basic_json::basic_json(const value_t value_type) -- create a JSON +value with the default value for a given type + +@since version 1.0.0 +*/ +enum class value_t : std::uint8_t +{ + null, ///< null value + object, ///< object (unordered set of name/value pairs) + array, ///< array (ordered collection of values) + string, ///< string value + boolean, ///< boolean value + number_integer, ///< number value (signed integer) + number_unsigned, ///< number value (unsigned integer) + number_float, ///< number value (floating-point) + binary, ///< binary array (ordered collection of bytes) + discarded ///< discarded by the parser callback function +}; + +/*! +@brief comparison operator for JSON types + +Returns an ordering that is similar to Python: +- order: null < boolean < number < object < array < string < binary +- furthermore, each type is not smaller than itself +- discarded values are not comparable +- binary is represented as a b"" string in python and directly comparable to a + string; however, making a binary array directly comparable with a string would + be surprising behavior in a JSON file. + +@since version 1.0.0 +*/ +#if JSON_HAS_THREE_WAY_COMPARISON + inline std::partial_ordering operator<=>(const value_t lhs, const value_t rhs) noexcept // *NOPAD* +#else + inline bool operator<(const value_t lhs, const value_t rhs) noexcept +#endif +{ + static constexpr std::array order = {{ + 0 /* null */, 3 /* object */, 4 /* array */, 5 /* string */, + 1 /* boolean */, 2 /* integer */, 2 /* unsigned */, 2 /* float */, + 6 /* binary */ + } + }; + + const auto l_index = static_cast(lhs); + const auto r_index = static_cast(rhs); +#if JSON_HAS_THREE_WAY_COMPARISON + if (l_index < order.size() && r_index < order.size()) + { + return order[l_index] <=> order[r_index]; // *NOPAD* + } + return std::partial_ordering::unordered; +#else + return l_index < order.size() && r_index < order.size() && order[l_index] < order[r_index]; +#endif +} + +// GCC selects the built-in operator< over an operator rewritten from +// a user-defined spaceship operator +// Clang, MSVC, and ICC select the rewritten candidate +// (see GCC bug https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105200) +#if JSON_HAS_THREE_WAY_COMPARISON && defined(__GNUC__) +inline bool operator<(const value_t lhs, const value_t rhs) noexcept +{ + return std::is_lt(lhs <=> rhs); // *NOPAD* +} +#endif + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/*! +@brief replace all occurrences of a substring by another string + +@param[in,out] s the string to manipulate; changed so that all + occurrences of @a f are replaced with @a t +@param[in] f the substring to replace with @a t +@param[in] t the string to replace @a f + +@pre The search string @a f must not be empty. **This precondition is +enforced with an assertion.** + +@since version 2.0.0 +*/ +template +inline void replace_substring(StringType& s, const StringType& f, + const StringType& t) +{ + JSON_ASSERT(!f.empty()); + for (auto pos = s.find(f); // find first occurrence of f + pos != StringType::npos; // make sure f was found + s.replace(pos, f.size(), t), // replace with t, and + pos = s.find(f, pos + t.size())) // find next occurrence of f + {} +} + +/*! + * @brief string escaping as described in RFC 6901 (Sect. 4) + * @param[in] s string to escape + * @return escaped string + * + * Note the order of escaping "~" to "~0" and "/" to "~1" is important. + */ +template +inline StringType escape(StringType s) +{ + replace_substring(s, StringType{"~"}, StringType{"~0"}); + replace_substring(s, StringType{"/"}, StringType{"~1"}); + return s; +} + +/*! + * @brief string unescaping as described in RFC 6901 (Sect. 4) + * @param[in] s string to unescape + * @return unescaped string + * + * Note the order of escaping "~1" to "/" and "~0" to "~" is important. + */ +template +static void unescape(StringType& s) +{ + replace_substring(s, StringType{"~1"}, StringType{"/"}); + replace_substring(s, StringType{"~0"}, StringType{"~"}); +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // size_t + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +/// struct to capture the start position of the current token +struct position_t +{ + /// the total number of characters read + std::size_t chars_read_total = 0; + /// the number of characters read in the current line + std::size_t chars_read_current_line = 0; + /// the number of lines read + std::size_t lines_read = 0; + + /// conversion to size_t to preserve SAX interface + constexpr operator size_t() const + { + return chars_read_total; + } +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-FileCopyrightText: 2018 The Abseil Authors +// SPDX-License-Identifier: MIT + + + +#include // array +#include // size_t +#include // conditional, enable_if, false_type, integral_constant, is_constructible, is_integral, is_same, remove_cv, remove_reference, true_type +#include // index_sequence, make_index_sequence, index_sequence_for + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +using uncvref_t = typename std::remove_cv::type>::type; + +#ifdef JSON_HAS_CPP_14 + +// the following utilities are natively available in C++14 +using std::enable_if_t; +using std::index_sequence; +using std::make_index_sequence; +using std::index_sequence_for; + +#else + +// alias templates to reduce boilerplate +template +using enable_if_t = typename std::enable_if::type; + +// The following code is taken from https://github.com/abseil/abseil-cpp/blob/10cb35e459f5ecca5b2ff107635da0bfa41011b4/absl/utility/utility.h +// which is part of Google Abseil (https://github.com/abseil/abseil-cpp), licensed under the Apache License 2.0. + +//// START OF CODE FROM GOOGLE ABSEIL + +// integer_sequence +// +// Class template representing a compile-time integer sequence. An instantiation +// of `integer_sequence` has a sequence of integers encoded in its +// type through its template arguments (which is a common need when +// working with C++11 variadic templates). `absl::integer_sequence` is designed +// to be a drop-in replacement for C++14's `std::integer_sequence`. +// +// Example: +// +// template< class T, T... Ints > +// void user_function(integer_sequence); +// +// int main() +// { +// // user_function's `T` will be deduced to `int` and `Ints...` +// // will be deduced to `0, 1, 2, 3, 4`. +// user_function(make_integer_sequence()); +// } +template +struct integer_sequence +{ + using value_type = T; + static constexpr std::size_t size() noexcept + { + return sizeof...(Ints); + } +}; + +// index_sequence +// +// A helper template for an `integer_sequence` of `size_t`, +// `absl::index_sequence` is designed to be a drop-in replacement for C++14's +// `std::index_sequence`. +template +using index_sequence = integer_sequence; + +namespace utility_internal +{ + +template +struct Extend; + +// Note that SeqSize == sizeof...(Ints). It's passed explicitly for efficiency. +template +struct Extend, SeqSize, 0> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)... >; +}; + +template +struct Extend, SeqSize, 1> +{ + using type = integer_sequence < T, Ints..., (Ints + SeqSize)..., 2 * SeqSize >; +}; + +// Recursion helper for 'make_integer_sequence'. +// 'Gen::type' is an alias for 'integer_sequence'. +template +struct Gen +{ + using type = + typename Extend < typename Gen < T, N / 2 >::type, N / 2, N % 2 >::type; +}; + +template +struct Gen +{ + using type = integer_sequence; +}; + +} // namespace utility_internal + +// Compile-time sequences of integers + +// make_integer_sequence +// +// This template alias is equivalent to +// `integer_sequence`, and is designed to be a drop-in +// replacement for C++14's `std::make_integer_sequence`. +template +using make_integer_sequence = typename utility_internal::Gen::type; + +// make_index_sequence +// +// This template alias is equivalent to `index_sequence<0, 1, ..., N-1>`, +// and is designed to be a drop-in replacement for C++14's +// `std::make_index_sequence`. +template +using make_index_sequence = make_integer_sequence; + +// index_sequence_for +// +// Converts a typename pack into an index sequence of the same length, and +// is designed to be a drop-in replacement for C++14's +// `std::index_sequence_for()` +template +using index_sequence_for = make_index_sequence; + +//// END OF CODE FROM GOOGLE ABSEIL + +#endif + +// dispatch utility (taken from ranges-v3) +template struct priority_tag : priority_tag < N - 1 > {}; +template<> struct priority_tag<0> {}; + +// taken from ranges-v3 +template +struct static_const +{ + static JSON_INLINE_VARIABLE constexpr T value{}; +}; + +#ifndef JSON_HAS_CPP_17 + template + constexpr T static_const::value; +#endif + +template +constexpr std::array make_array(Args&& ... args) +{ + return std::array {{static_cast(std::forward(args))...}}; +} + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // numeric_limits +#include // char_traits +#include // tuple +#include // false_type, is_constructible, is_integral, is_same, true_type +#include // declval + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +#include // random_access_iterator_tag + +// #include + +// #include + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN +namespace detail +{ + +template +struct iterator_types {}; + +template +struct iterator_types < + It, + void_t> +{ + using difference_type = typename It::difference_type; + using value_type = typename It::value_type; + using pointer = typename It::pointer; + using reference = typename It::reference; + using iterator_category = typename It::iterator_category; +}; + +// This is required as some compilers implement std::iterator_traits in a way that +// doesn't work with SFINAE. See https://github.com/nlohmann/json/issues/1341. +template +struct iterator_traits +{ +}; + +template +struct iterator_traits < T, enable_if_t < !std::is_pointer::value >> + : iterator_types +{ +}; + +template +struct iterator_traits::value>> +{ + using iterator_category = std::random_access_iterator_tag; + using value_type = T; + using difference_type = ptrdiff_t; + using pointer = T*; + using reference = T&; +}; + +} // namespace detail +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN + +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(begin); + +NLOHMANN_JSON_NAMESPACE_END + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + + + +// #include + + +NLOHMANN_JSON_NAMESPACE_BEGIN + +NLOHMANN_CAN_CALL_STD_FUNC_IMPL(end); + +NLOHMANN_JSON_NAMESPACE_END + +// #include + +// #include + +// #include +// __ _____ _____ _____ +// __| | __| | | | JSON for Modern C++ +// | | |__ | | | | | | version 3.12.0 +// |_____|_____|_____|_|___| https://github.com/nlohmann/json +// +// SPDX-FileCopyrightText: 2013 - 2025 Niels Lohmann +// SPDX-License-Identifier: MIT + +#ifndef INCLUDE_NLOHMANN_JSON_FWD_HPP_ + #define INCLUDE_NLOHMANN_JSON_FWD_HPP_ + + #include // int64_t, uint64_t + #include // map + #include // allocator + #include // string + #include // vector + + // #include + + + /*! + @brief namespace for Niels Lohmann + @see https://github.com/nlohmann + @since version 1.0.0 + */ + NLOHMANN_JSON_NAMESPACE_BEGIN + + /*! + @brief default JSONSerializer template argument + + This serializer ignores the template arguments and uses ADL + ([argument-dependent lookup](https://en.cppreference.com/w/cpp/language/adl)) + for serialization. + */ + template + struct adl_serializer; + + /// a class to store JSON values + /// @sa https://json.nlohmann.me/api/basic_json/ + template class ObjectType = + std::map, + template class ArrayType = std::vector, + class StringType = std::string, class BooleanType = bool, + class NumberIntegerType = std::int64_t, + class NumberUnsignedType = std::uint64_t, + class NumberFloatType = double, + template class AllocatorType = std::allocator, + template class JSONSerializer = + adl_serializer, + class BinaryType = std::vector, // cppcheck-suppress syntaxError + class CustomBaseClass = void> + class basic_json; + + /// @brief JSON Pointer defines a string syntax for identifying a specific value within a JSON document + /// @sa https://json.nlohmann.me/api/json_pointer/ + template + class json_pointer; + + /*! + @brief default specialization + @sa https://json.nlohmann.me/api/json/ + */ + using json = basic_json<>; + + /// @brief a minimal map-like container that preserves insertion order + /// @sa https://json.nlohmann.me/api/ordered_map/ + template + struct ordered_map; + + /// @brief specialization that maintains the insertion order of object keys + /// @sa https://json.nlohmann.me/api/ordered_json/ + using ordered_json = basic_json; + + NLOHMANN_JSON_NAMESPACE_END + +#endif // INCLUDE_NLOHMANN_JSON_FWD_HPP_ + + +NLOHMANN_JSON_NAMESPACE_BEGIN +/*! +@brief detail namespace with internal helper functions + +This namespace collects functions that should not be exposed, +implementations of some @ref basic_json methods, and meta-programming helpers. + +@since version 2.1.0 +*/ +namespace detail +{ + +///////////// +// helpers // +///////////// + +// Note to maintainers: +// +// Every trait in this file expects a non CV-qualified type. +// The only exceptions are in the 'aliases for detected' section +// (i.e. those of the form: decltype(T::member_function(std::declval()))) +// +// In this case, T has to be properly CV-qualified to constraint the function arguments +// (e.g. to_json(BasicJsonType&, const T&)) + +template struct is_basic_json : std::false_type {}; + +NLOHMANN_BASIC_JSON_TPL_DECLARATION +struct is_basic_json : std::true_type {}; + +// used by exceptions create() member functions +// true_type for pointer to possibly cv-qualified basic_json or std::nullptr_t +// false_type otherwise +template +struct is_basic_json_context : + std::integral_constant < bool, + is_basic_json::type>::type>::value + || std::is_same::value > +{}; + +////////////////////// +// json_ref helpers // +////////////////////// + +template +class json_ref; + +template +struct is_json_ref : std::false_type {}; + +template +struct is_json_ref> : std::true_type {}; + +////////////////////////// +// aliases for detected // +////////////////////////// + +template +using mapped_type_t = typename T::mapped_type; + +template +using key_type_t = typename T::key_type; + +template +using value_type_t = typename T::value_type; + +template +using difference_type_t = typename T::difference_type; + +template +using pointer_t = typename T::pointer; + +template +using reference_t = typename T::reference; + +template +using iterator_category_t = typename T::iterator_category; + +template +using to_json_function = decltype(T::to_json(std::declval()...)); + +template +using from_json_function = decltype(T::from_json(std::declval()...)); + +template +using get_template_function = decltype(std::declval().template get()); + +// trait checking if JSONSerializer::from_json(json const&, udt&) exists +template +struct has_from_json : std::false_type {}; + +// trait checking if j.get is valid +// use this trait instead of std::is_constructible or std::is_convertible, +// both rely on, or make use of implicit conversions, and thus fail when T +// has several constructors/operator= (see https://github.com/nlohmann/json/issues/958) +template +struct is_getable +{ + static constexpr bool value = is_detected::value; +}; + +template +struct has_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if JSONSerializer::from_json(json const&) exists +// this overload is used for non-default-constructible user-defined-types +template +struct has_non_default_from_json : std::false_type {}; + +template +struct has_non_default_from_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +// This trait checks if BasicJsonType::json_serializer::to_json exists +// Do not evaluate the trait when T is a basic_json type, to avoid template instantiation infinite recursion. +template +struct has_to_json : std::false_type {}; + +template +struct has_to_json < BasicJsonType, T, enable_if_t < !is_basic_json::value >> +{ + using serializer = typename BasicJsonType::template json_serializer; + + static constexpr bool value = + is_detected_exact::value; +}; + +template +using detect_key_compare = typename T::key_compare; + +template +struct has_key_compare : std::integral_constant::value> {}; + +// obtains the actual object key comparator +template +struct actual_object_comparator +{ + using object_t = typename BasicJsonType::object_t; + using object_comparator_t = typename BasicJsonType::default_object_comparator_t; + using type = typename std::conditional < has_key_compare::value, + typename object_t::key_compare, object_comparator_t>::type; +}; + +template +using actual_object_comparator_t = typename actual_object_comparator::type; + +///////////////// +// char_traits // +///////////////// + +// Primary template of char_traits calls std char_traits +template +struct char_traits : std::char_traits +{}; + +// Explicitly define char traits for unsigned char since it is not standard +template<> +struct char_traits : std::char_traits +{ + using char_type = unsigned char; + using int_type = uint64_t; + + // Redefine to_int_type function + static int_type to_int_type(char_type c) noexcept + { + return static_cast(c); + } + + static char_type to_char_type(int_type i) noexcept + { + return static_cast(i); + } + + static constexpr int_type eof() noexcept + { + return static_cast(std::char_traits::eof()); + } +}; + +// Explicitly define char traits for signed char since it is not standard +template<> +struct char_traits : std::char_traits +{ + using char_type = signed char; + using int_type = uint64_t; + + // Redefine to_int_type function + static int_type to_int_type(char_type c) noexcept + { + return static_cast(c); + } + + static char_type to_char_type(int_type i) noexcept + { + return static_cast(i); + } + + static constexpr int_type eof() noexcept + { + return static_cast(std::char_traits::eof()); + } +}; + +/////////////////// +// is_ functions // +/////////////////// + +// https://en.cppreference.com/w/cpp/types/conjunction +template struct conjunction : std::true_type { }; +template struct conjunction : B { }; +template +struct conjunction +: std::conditional(B::value), conjunction, B>::type {}; + +// https://en.cppreference.com/w/cpp/types/negation +template struct negation : std::integral_constant < bool, !B::value > { }; + +// Reimplementation of is_constructible and is_default_constructible, due to them being broken for +// std::pair and std::tuple until LWG 2367 fix (see https://cplusplus.github.io/LWG/lwg-defects.html#2367). +// This causes compile errors in e.g. clang 3.5 or gcc 4.9. +template +struct is_default_constructible : std::is_default_constructible {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction, is_default_constructible> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + +template +struct is_default_constructible> + : conjunction...> {}; + +template +struct is_constructible : std::is_constructible {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_constructible> : is_default_constructible> {}; + +template +struct is_iterator_traits : std::false_type {}; + +template +struct is_iterator_traits> +{ + private: + using traits = iterator_traits; + + public: + static constexpr auto value = + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value && + is_detected::value; +}; + +template +struct is_range +{ + private: + using t_ref = typename std::add_lvalue_reference::type; + + using iterator = detected_t; + using sentinel = detected_t; + + // to be 100% correct, it should use https://en.cppreference.com/w/cpp/iterator/input_or_output_iterator + // and https://en.cppreference.com/w/cpp/iterator/sentinel_for + // but reimplementing these would be too much work, as a lot of other concepts are used underneath + static constexpr auto is_iterator_begin = + is_iterator_traits>::value; + + public: + static constexpr bool value = !std::is_same::value && !std::is_same::value && is_iterator_begin; +}; + +template +using iterator_t = enable_if_t::value, result_of_begin())>>; + +template +using range_value_t = value_type_t>>; + +// The following implementation of is_complete_type is taken from +// https://blogs.msdn.microsoft.com/vcblog/2015/12/02/partial-support-for-expression-sfinae-in-vs-2015-update-1/ +// and is written by Xiang Fan who agreed to using it in this library. + +template +struct is_complete_type : std::false_type {}; + +template +struct is_complete_type : std::true_type {}; + +template +struct is_compatible_object_type_impl : std::false_type {}; + +template +struct is_compatible_object_type_impl < + BasicJsonType, CompatibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + // macOS's is_constructible does not play well with nonesuch... + static constexpr bool value = + is_constructible::value && + is_constructible::value; +}; + +template +struct is_compatible_object_type + : is_compatible_object_type_impl {}; + +template +struct is_constructible_object_type_impl : std::false_type {}; + +template +struct is_constructible_object_type_impl < + BasicJsonType, ConstructibleObjectType, + enable_if_t < is_detected::value&& + is_detected::value >> +{ + using object_t = typename BasicJsonType::object_t; + + static constexpr bool value = + (is_default_constructible::value && + (std::is_move_assignable::value || + std::is_copy_assignable::value) && + (is_constructible::value && + std::is_same < + typename object_t::mapped_type, + typename ConstructibleObjectType::mapped_type >::value)) || + (has_from_json::value || + has_non_default_from_json < + BasicJsonType, + typename ConstructibleObjectType::mapped_type >::value); +}; + +template +struct is_constructible_object_type + : is_constructible_object_type_impl {}; + +template +struct is_compatible_string_type +{ + static constexpr auto value = + is_constructible::value; +}; + +template +struct is_constructible_string_type +{ + // launder type through decltype() to fix compilation failure on ICPC +#ifdef __INTEL_COMPILER + using laundered_type = decltype(std::declval()); +#else + using laundered_type = ConstructibleStringType; +#endif + + static constexpr auto value = + conjunction < + is_constructible, + is_detected_exact>::value; +}; + +template +struct is_compatible_array_type_impl : std::false_type {}; + +template +struct is_compatible_array_type_impl < + BasicJsonType, CompatibleArrayType, + enable_if_t < + is_detected::value&& + is_iterator_traits>>::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 + !std::is_same>::value >> +{ + static constexpr bool value = + is_constructible>::value; +}; + +template +struct is_compatible_array_type + : is_compatible_array_type_impl {}; + +template +struct is_constructible_array_type_impl : std::false_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t::value >> + : std::true_type {}; + +template +struct is_constructible_array_type_impl < + BasicJsonType, ConstructibleArrayType, + enable_if_t < !std::is_same::value&& + !is_compatible_string_type::value&& + is_default_constructible::value&& +(std::is_move_assignable::value || + std::is_copy_assignable::value)&& +is_detected::value&& +is_iterator_traits>>::value&& +is_detected::value&& +// special case for types like std::filesystem::path whose iterator's value_type are themselves +// c.f. https://github.com/nlohmann/json/pull/3073 +!std::is_same>::value&& +is_complete_type < +detected_t>::value >> +{ + using value_type = range_value_t; + + static constexpr bool value = + std::is_same::value || + has_from_json::value || + has_non_default_from_json < + BasicJsonType, + value_type >::value; +}; + +template +struct is_constructible_array_type + : is_constructible_array_type_impl {}; + +template +struct is_compatible_integer_type_impl : std::false_type {}; + +template +struct is_compatible_integer_type_impl < + RealIntegerType, CompatibleNumberIntegerType, + enable_if_t < std::is_integral::value&& + std::is_integral::value&& + !std::is_same::value >> +{ + // is there an assert somewhere on overflows? + using RealLimits = std::numeric_limits; + using CompatibleLimits = std::numeric_limits; + + static constexpr auto value = + is_constructible::value && + CompatibleLimits::is_integer && + RealLimits::is_signed == CompatibleLimits::is_signed; +}; + +template +struct is_compatible_integer_type + : is_compatible_integer_type_impl {}; + +template +struct is_compatible_type_impl: std::false_type {}; + +template +struct is_compatible_type_impl < + BasicJsonType, CompatibleType, + enable_if_t::value >> +{ + static constexpr bool value = + has_to_json::value; +}; + +template +struct is_compatible_type + : is_compatible_type_impl {}; + +template +struct is_constructible_tuple : std::false_type {}; + +template +struct is_constructible_tuple> : conjunction...> {}; + +template +struct is_json_iterator_of : std::false_type {}; + +template +struct is_json_iterator_of : std::true_type {}; + +template +struct is_json_iterator_of : std::true_type +{}; + +// checks if a given type T is a template specialization of Primary +template