From: Daniel Karbach Date: Wed, 7 May 2025 12:33:02 +0000 (+0200) Subject: add warps/spawns X-Git-Url: https://git.localhorst.tv/?a=commitdiff_plain;h=687c5aee322531a6544be88010c22d41b95ebcc9;p=alttp.git add warps/spawns --- diff --git a/resources/js/components/zootr/MixedPoolsTracker.js b/resources/js/components/zootr/MixedPoolsTracker.js index b0a2fa9..0f08ee6 100644 --- a/resources/js/components/zootr/MixedPoolsTracker.js +++ b/resources/js/components/zootr/MixedPoolsTracker.js @@ -16,6 +16,7 @@ const AREAS = [ fgColor: '#000000', name: 'Brothers\' House', short: 'Bros', + type: 'Interior', }, { id: 'link', @@ -23,6 +24,7 @@ const AREAS = [ fgColor: '#000000', name: 'Link\'s House', short: 'Links', + type: 'SpecialInterior', }, { id: 'sariah', @@ -30,6 +32,7 @@ const AREAS = [ fgColor: '#000000', name: 'Sariah\'s House', short: 'Sariahs', + type: 'Interior', }, { id: 'twin', @@ -37,6 +40,7 @@ const AREAS = [ fgColor: '#000000', name: 'Twins\' House', short: 'Twins', + type: 'Interior', }, { id: 'shop', @@ -44,6 +48,7 @@ const AREAS = [ fgColor: '#000000', name: 'Shop', short: 'Shop', + type: 'Interior', }, { id: 'mido', @@ -51,6 +56,7 @@ const AREAS = [ fgColor: '#000000', name: 'Mido\'s House', short: 'Mido', + type: 'Interior', }, { id: 'deku', @@ -59,6 +65,7 @@ const AREAS = [ name: 'Deku Tree', short: 'Deku', spacer: true, + type: 'Dungeon', }, { id: 'storms', @@ -66,6 +73,7 @@ const AREAS = [ fgColor: '#000000', name: 'Storms Grotto', short: 'Storms Grotto', + type: 'Grotto', }, { id: 'hf', @@ -73,6 +81,7 @@ const AREAS = [ fgColor: '#000000', name: 'Hyrule Field', short: 'HF', + type: 'Overworld', }, { id: 'lw', @@ -80,6 +89,7 @@ const AREAS = [ fgColor: '#000000', name: 'Lost Woods', short: 'LW', + type: 'Overworld', }, ], }, @@ -96,6 +106,7 @@ const AREAS = [ fgColor: '#000000', name: 'GC Grotto', short: 'GC Grotto', + type: 'Grotto', }, { id: 'tg', @@ -103,6 +114,7 @@ const AREAS = [ fgColor: '#000000', name: 'Theater Grotto', short: 'Theater Grotto', + type: 'Grotto', }, { id: 'sfmg', @@ -110,6 +122,7 @@ const AREAS = [ fgColor: '#000000', name: 'SFM Grotto', short: 'SFM Grotto', + type: 'Grotto', }, { id: 'kf', @@ -118,6 +131,7 @@ const AREAS = [ name: 'Kokiri Forest', short: 'KF', spacer: true, + type: 'Overworld', }, { id: 'gc', @@ -125,6 +139,7 @@ const AREAS = [ fgColor: '#000000', name: 'Goron City', short: 'GC', + type: 'Overworld', }, { id: 'zr', @@ -132,6 +147,7 @@ const AREAS = [ fgColor: '#000000', name: 'Zora\'s River', short: 'ZR', + type: 'Overworld', }, { id: 'sfm', @@ -139,6 +155,7 @@ const AREAS = [ fgColor: '#000000', name: 'Sacred Forest Maedows', short: 'SFM', + type: 'Overworld', }, ], }, @@ -155,6 +172,7 @@ const AREAS = [ fgColor: '#000000', name: 'Forest Temple', short: 'Forest Temple', + type: 'Dungeon', }, { id: 'wolf', @@ -162,6 +180,7 @@ const AREAS = [ fgColor: '#000000', name: 'Wolf Grotto', short: 'Wolf Grotto', + type: 'Grotto', }, { id: 'fairy', @@ -169,6 +188,7 @@ const AREAS = [ fgColor: '#000000', name: 'Fairy Grotto', short: 'Fairy Grotto', + type: 'Grotto', }, { id: 'storms', @@ -176,6 +196,7 @@ const AREAS = [ fgColor: '#000000', name: 'Storms Grotto', short: 'Storms Grotto', + type: 'Grotto', }, { id: 'lw', @@ -183,6 +204,7 @@ const AREAS = [ fgColor: '#000000', name: 'Lost Woods', short: 'LW', + type: 'Overworld', }, ], }, @@ -199,6 +221,7 @@ const AREAS = [ fgColor: '#000000', name: 'Dampe Hut', short: 'Dampe Hut', + type: 'Interior', }, { id: 'shadow', @@ -206,6 +229,7 @@ const AREAS = [ fgColor: '#000000', name: 'Shadow Temple', short: 'Shadow', + type: 'Dungeon', }, { id: 'shield', @@ -213,6 +237,7 @@ const AREAS = [ fgColor: '#000000', name: 'Shield Grave', short: 'Shield Grave', + type: 'Grave', }, { id: 'race', @@ -220,6 +245,7 @@ const AREAS = [ fgColor: '#000000', name: 'Dampe Race', short: 'Dampe Race', + type: 'Grave', }, { id: 'sun', @@ -227,6 +253,7 @@ const AREAS = [ fgColor: '#000000', name: 'Sun Song Grave', short: 'Sun Song Gr', + type: 'Grave', }, { id: 'family', @@ -234,6 +261,7 @@ const AREAS = [ fgColor: '#000000', name: 'Family Tomb', short: 'Family Tomb', + type: 'Grave', }, { id: 'kak', @@ -241,6 +269,7 @@ const AREAS = [ fgColor: '#000000', name: 'Kakariko', short: 'Kak', + type: 'Overworld', }, ], }, @@ -257,6 +286,7 @@ const AREAS = [ fgColor: '#000000', name: 'Talon\'s House', short: 'Talons', + type: 'Interior', }, { id: 'skull', @@ -264,6 +294,7 @@ const AREAS = [ fgColor: '#000000', name: 'Skulltula House', short: 'Skulltula', + type: 'Interior', }, { id: 'impaf', @@ -271,6 +302,7 @@ const AREAS = [ fgColor: '#000000', name: 'Impa Front', short: 'Impa Front', + type: 'Interior', }, { id: 'impab', @@ -278,6 +310,7 @@ const AREAS = [ fgColor: '#000000', name: 'Impa Back', short: 'Impa Back', + type: 'Interior', }, { id: 'shield', @@ -285,6 +318,7 @@ const AREAS = [ fgColor: '#000000', name: 'Shield Shop', short: 'Shield Shop', + type: 'Interior', }, { id: 'potion', @@ -292,6 +326,7 @@ const AREAS = [ fgColor: '#000000', name: 'Potion Shop', short: 'Potion Shop', + type: 'SpecialInterior', }, { id: 'back', @@ -299,6 +334,7 @@ const AREAS = [ fgColor: '#000000', name: 'Shop Back', short: 'Shop Back', + type: 'SpecialInterior', }, { id: 'witch', @@ -306,6 +342,7 @@ const AREAS = [ fgColor: '#000000', name: 'Witch', short: 'Witch', + type: 'Interior', }, { id: 'arch', @@ -313,6 +350,7 @@ const AREAS = [ fgColor: '#000000', name: 'Archery', short: 'Archery', + type: 'Interior', }, { id: 'mill', @@ -320,6 +358,7 @@ const AREAS = [ fgColor: '#000000', name: 'Windmill', short: 'Windmill', + type: 'SpecialInterior', }, { id: 'botw', @@ -328,6 +367,7 @@ const AREAS = [ name: 'Bottom of the Well', short: 'Bottom Well', spacer: true, + type: 'Dungeon', }, { id: 'open', @@ -335,6 +375,7 @@ const AREAS = [ fgColor: '#000000', name: 'Open Grotto', short: 'Open Grotto', + type: 'Grotto', }, { id: 'redead', @@ -342,6 +383,7 @@ const AREAS = [ fgColor: '#000000', name: 'Redead Grotto', short: 'Redead Grotto', + type: 'Grotto', }, { id: 'hf', @@ -349,6 +391,7 @@ const AREAS = [ fgColor: '#000000', name: 'Hyrule Field', short: 'HF', + type: 'Overworld', }, { id: 'dmt', @@ -356,6 +399,7 @@ const AREAS = [ fgColor: '#000000', name: 'Death Mountain Trail', short: 'DMT', + type: 'Overworld', }, { id: 'gy', @@ -363,6 +407,7 @@ const AREAS = [ fgColor: '#000000', name: 'Graveyard', short: 'Grave', + type: 'Overworld', }, ], }, @@ -379,6 +424,7 @@ const AREAS = [ fgColor: '#000000', name: 'Shield Shop', short: 'Shield Shop', + type: 'Interior', }, { id: 'potion', @@ -386,6 +432,7 @@ const AREAS = [ fgColor: '#000000', name: 'Potion Shop', short: 'Potion Shop', + type: 'Interior', }, { id: 'mask', @@ -393,6 +440,7 @@ const AREAS = [ fgColor: '#000000', name: 'Mask Shop', short: 'Mask Shop', + type: 'Interior', }, { id: 'sling', @@ -400,6 +448,7 @@ const AREAS = [ fgColor: '#000000', name: 'Slingshot/Arrow Game', short: 'Sling Game', + type: 'Interior', }, { id: 'chuu', @@ -407,6 +456,7 @@ const AREAS = [ fgColor: '#000000', name: 'Bombchu Bowling', short: 'Bombchu', + type: 'Interior', }, { id: 'tcg', @@ -414,6 +464,7 @@ const AREAS = [ fgColor: '#000000', name: 'Treasure Chest Game', short: 'TCG', + type: 'Interior', }, { id: 'alleyl', @@ -421,6 +472,7 @@ const AREAS = [ fgColor: '#000000', name: 'Backalley Left', short: 'Alley L', + type: 'Overworld', }, { id: 'alleyr', @@ -428,6 +480,7 @@ const AREAS = [ fgColor: '#000000', name: 'Backalley Right', short: 'Alley R', + type: 'Overworld', }, { id: 'tot', @@ -435,6 +488,7 @@ const AREAS = [ fgColor: '#000000', name: 'Temple of Time', short: 'ToT', + type: 'Overworld', }, { id: 'hc', @@ -442,6 +496,7 @@ const AREAS = [ fgColor: '#000000', name: 'Hyrule Castle', short: 'HC', + type: 'Overworld', }, { id: 'm2', @@ -449,6 +504,7 @@ const AREAS = [ fgColor: '#000000', name: 'Market 2', short: 'M2', + type: 'Overworld', }, ], }, @@ -465,6 +521,7 @@ const AREAS = [ fgColor: '#000000', name: 'Big Poe', short: 'Big Poe', + type: 'Interior', }, { id: 'hf', @@ -472,6 +529,7 @@ const AREAS = [ fgColor: '#000000', name: 'Hyrule Field', short: 'HF', + type: 'Overworld', }, { id: 'm1', @@ -479,6 +537,7 @@ const AREAS = [ fgColor: '#000000', name: 'Market 1', short: 'M1', + type: 'Overworld', }, ], }, @@ -495,6 +554,7 @@ const AREAS = [ fgColor: '#000000', name: 'Hyrule Castle Fairy', short: 'HC Fairy', + type: 'Interior', }, { id: 'gfairy', @@ -502,6 +562,7 @@ const AREAS = [ fgColor: '#000000', name: 'Ganon\'s Castle Fairy', short: 'Ganon Fairy', + type: 'Interior', }, { id: 'igc', @@ -509,6 +570,7 @@ const AREAS = [ fgColor: '#000000', name: 'Inside Ganon\'s Castle', short: 'IGC', + type: 'DungeonSpecial', }, { id: 'storms', @@ -516,6 +578,7 @@ const AREAS = [ fgColor: '#000000', name: 'Storms Grotto', short: 'Storms Grotto', + type: 'Grotto', }, { id: 'm1', @@ -523,6 +586,7 @@ const AREAS = [ fgColor: '#000000', name: 'Market 1', short: 'M1', + type: 'Overworld', }, ], }, @@ -539,6 +603,7 @@ const AREAS = [ fgColor: '#000000', name: 'Destiny Grotto', short: 'Destiny Grotto', + type: 'Grotto', }, { id: 'tektite', @@ -546,6 +611,7 @@ const AREAS = [ fgColor: '#000000', name: 'Tektite Grotto', short: 'Tektite', + type: 'Grotto', }, { id: 'nw', @@ -553,6 +619,7 @@ const AREAS = [ fgColor: '#000000', name: 'Northwest Grotto', short: 'NW Grotto', + type: 'Grotto', }, { id: 'nk', @@ -560,6 +627,7 @@ const AREAS = [ fgColor: '#000000', name: 'Grotto near Kakariko', short: 'near Kak Gro', + type: 'Grotto', }, { id: 'se', @@ -567,6 +635,7 @@ const AREAS = [ fgColor: '#000000', name: 'Southeast Grotto', short: 'SE Grotto', + type: 'Grotto', }, { id: 'open', @@ -574,6 +643,7 @@ const AREAS = [ fgColor: '#000000', name: 'Open Grotto', short: 'Open Grotto', + type: 'Grotto', }, { id: 'sg', @@ -581,6 +651,7 @@ const AREAS = [ fgColor: '#000000', name: 'South Grotto', short: 'South Grotto', + type: 'Grotto', }, { id: 'cow', @@ -588,6 +659,7 @@ const AREAS = [ fgColor: '#000000', name: 'Cow Grotto', short: 'Cow Grotto', + type: 'Grotto', }, { id: 'town', @@ -596,6 +668,7 @@ const AREAS = [ name: 'Town', short: 'Town', spacer: true, + type: 'Overworld', }, { id: 'llr', @@ -603,6 +676,7 @@ const AREAS = [ fgColor: '#000000', name: 'Lon Lon Ranch', short: 'LLR', + type: 'Overworld', }, { id: 'kak', @@ -610,6 +684,7 @@ const AREAS = [ fgColor: '#000000', name: 'Kakariko', short: 'Kak', + type: 'Overworld', }, { id: 'zr', @@ -617,6 +692,7 @@ const AREAS = [ fgColor: '#000000', name: 'Zora\'s River', short: 'ZR', + type: 'Overworld', }, { id: 'kf', @@ -624,6 +700,7 @@ const AREAS = [ fgColor: '#000000', name: 'Kokiri Forest', short: 'KF', + type: 'Overworld', }, { id: 'lh', @@ -631,6 +708,7 @@ const AREAS = [ fgColor: '#000000', name: 'Lake Hylia', short: 'LH', + type: 'Overworld', }, { id: 'gv', @@ -638,6 +716,7 @@ const AREAS = [ fgColor: '#000000', name: 'Gerudo Valley', short: 'GV', + type: 'Overworld', }, ], }, @@ -654,6 +733,7 @@ const AREAS = [ fgColor: '#000000', name: 'Storms Grotto', short: 'Storms Grotto', + type: 'Grotto', }, { id: 'open', @@ -661,6 +741,7 @@ const AREAS = [ fgColor: '#000000', name: 'Open Grotto', short: 'Open Grotto', + type: 'Grotto', }, { id: 'boulder', @@ -668,6 +749,7 @@ const AREAS = [ fgColor: '#000000', name: 'Boulder Grotto', short: 'Boulder Grotto', + type: 'Grotto', }, { id: 'hf', @@ -676,6 +758,7 @@ const AREAS = [ name: 'Hyrule Field', short: 'HF', spacer: true, + type: 'Overworld', }, { id: 'lw', @@ -683,6 +766,7 @@ const AREAS = [ fgColor: '#000000', name: 'Lost Woods', short: 'LW', + type: 'Overworld', }, { id: 'zd', @@ -690,6 +774,7 @@ const AREAS = [ fgColor: '#000000', name: 'Zora\'s Domain', short: 'ZD', + type: 'Overworld', }, ], }, @@ -706,6 +791,7 @@ const AREAS = [ fgColor: '#000000', name: 'Shop', short: 'Shop', + type: 'Interior', }, { id: 'storms', @@ -713,6 +799,7 @@ const AREAS = [ fgColor: '#000000', name: 'Storms Grotto', short: 'Storms Grotto', + type: 'Grotto', }, { id: 'zr', @@ -720,6 +807,7 @@ const AREAS = [ fgColor: '#000000', name: 'Zora\'s River', short: 'ZR', + type: 'Overworld', }, { id: 'lh', @@ -727,6 +815,7 @@ const AREAS = [ fgColor: '#000000', name: 'Lake Hylia', short: 'LH', + type: 'Overworld', }, { id: 'zf', @@ -734,6 +823,7 @@ const AREAS = [ fgColor: '#000000', name: 'Zora\'s Fountain', short: 'ZF', + type: 'Overworld', }, ], }, @@ -750,6 +840,7 @@ const AREAS = [ fgColor: '#000000', name: 'Fairy Wall', short: 'Fairy Wall', + type: 'Interior', }, { id: 'jabu', @@ -757,6 +848,7 @@ const AREAS = [ fgColor: '#000000', name: 'Jabu Jabu\'s Belly', short: 'Jabu', + type: 'Dungeon', }, { id: 'ice', @@ -764,6 +856,7 @@ const AREAS = [ fgColor: '#000000', name: 'Ice Cavern', short: 'Ice Cavern', + type: 'Dungeon', }, { id: 'zd', @@ -771,6 +864,7 @@ const AREAS = [ fgColor: '#000000', name: 'Zora\'s Domain', short: 'ZD', + type: 'Overworld', }, ], }, @@ -787,6 +881,7 @@ const AREAS = [ fgColor: '#000000', name: 'Lab Diving', short: 'Lab Dive', + type: 'Interior', }, { id: 'fishing', @@ -794,6 +889,7 @@ const AREAS = [ fgColor: '#000000', name: 'Fishing Game', short: 'Fishing', + type: 'Interior', }, { id: 'water', @@ -801,6 +897,7 @@ const AREAS = [ fgColor: '#000000', name: 'Water Temple', short: 'Water Temple', + type: 'Dungeon', }, { id: 'owl', @@ -808,6 +905,7 @@ const AREAS = [ fgColor: '#000000', name: 'Owl Grotto', short: 'Owl Grotto', + type: 'Grotto', }, { id: 'hf', @@ -815,6 +913,7 @@ const AREAS = [ fgColor: '#000000', name: 'Hyrule Field', short: 'HF', + type: 'Overworld', }, { id: 'zd', @@ -822,6 +921,7 @@ const AREAS = [ fgColor: '#000000', name: 'Zora\'s Domain', short: 'ZD', + type: 'Overworld', }, ], }, @@ -838,6 +938,7 @@ const AREAS = [ fgColor: '#000000', name: 'Chicken Game', short: 'Chicken', + type: 'Interior', }, { id: 'stable', @@ -845,6 +946,7 @@ const AREAS = [ fgColor: '#000000', name: 'Stable', short: 'Stable', + type: 'Interior', }, { id: 'tower', @@ -852,6 +954,7 @@ const AREAS = [ fgColor: '#000000', name: 'Tower', short: 'Tower', + type: 'Interior', }, { id: 'grotto', @@ -859,6 +962,7 @@ const AREAS = [ fgColor: '#000000', name: 'Grotto', short: 'Grotto', + type: 'Grotto', }, { id: 'hf', @@ -866,6 +970,7 @@ const AREAS = [ fgColor: '#000000', name: 'Hyrule Field', short: 'HF', + type: 'Overworld', }, ], }, @@ -882,6 +987,7 @@ const AREAS = [ fgColor: '#000000', name: 'Tent', short: 'Tent', + type: 'Interior', }, { id: 'str2', @@ -889,6 +995,7 @@ const AREAS = [ fgColor: '#000000', name: 'Strength 2 Grotto', short: 'Str2 Grotto', + type: 'Grotto', }, { id: 'storms', @@ -896,6 +1003,7 @@ const AREAS = [ fgColor: '#000000', name: 'Storms Grotto', short: 'Storms Grotto', + type: 'Grotto', }, { id: 'hf', @@ -903,6 +1011,7 @@ const AREAS = [ fgColor: '#000000', name: 'Hyrule Field', short: 'HF', + type: 'Overworld', }, { id: 'gf', @@ -910,6 +1019,7 @@ const AREAS = [ fgColor: '#000000', name: 'Gerudo Fortress', short: 'GF', + type: 'Overworld', }, { id: 'wf', @@ -918,6 +1028,7 @@ const AREAS = [ name: 'Waterfall', short: 'Waterfall', oneway: true, + type: 'OverworldOneWay', }, ], }, @@ -934,6 +1045,7 @@ const AREAS = [ fgColor: '#000000', name: 'Gerudo Training Grounds', short: 'GTG', + type: 'Dungeon', }, { id: 'storms', @@ -941,6 +1053,7 @@ const AREAS = [ fgColor: '#000000', name: 'Storms Grotto', short: 'Storms Grotto', + type: 'Grotto', }, { id: 'gv', @@ -948,6 +1061,7 @@ const AREAS = [ fgColor: '#000000', name: 'Gerudo Valley', short: 'GV', + type: 'Overworld', }, { id: 'hw', @@ -955,6 +1069,7 @@ const AREAS = [ fgColor: '#000000', name: 'Haunted Wasteland', short: 'Waste', + type: 'Overworld', }, ], }, @@ -971,6 +1086,7 @@ const AREAS = [ fgColor: '#000000', name: 'Spirit Temple', short: 'Spirit', + type: 'Dungeon', }, { id: 'fairy', @@ -978,6 +1094,7 @@ const AREAS = [ fgColor: '#000000', name: 'Fairy', short: 'Fairy', + type: 'Interior', }, { id: 'str2', @@ -985,6 +1102,7 @@ const AREAS = [ fgColor: '#000000', name: 'Strength 2 Grotto', short: 'Str2 Grotto', + type: 'Grotto', }, { id: 'hw', @@ -992,6 +1110,7 @@ const AREAS = [ fgColor: '#000000', name: 'Haunted Wasteland', short: 'Waste', + type: 'Overworld', }, ], }, @@ -1008,6 +1127,7 @@ const AREAS = [ fgColor: '#000000', name: 'Gerudo Fortress', short: 'GF', + type: 'Overworld', }, { id: 'dcol', @@ -1015,6 +1135,7 @@ const AREAS = [ fgColor: '#000000', name: 'Desert Colossus', short: 'DCol', + type: 'Overworld', }, ], }, @@ -1031,6 +1152,7 @@ const AREAS = [ fgColor: '#000000', name: 'Fairy', short: 'Fairy', + type: 'Interior', }, { id: 'fire', @@ -1038,6 +1160,7 @@ const AREAS = [ fgColor: '#000000', name: 'Fire Temple', short: 'Fire', + type: 'Dungeon', }, { id: 'boulder', @@ -1045,6 +1168,7 @@ const AREAS = [ fgColor: '#000000', name: 'Boulder Grotto', short: 'Boulder Gro', + type: 'Grotto', }, { id: 'hammer', @@ -1052,6 +1176,7 @@ const AREAS = [ fgColor: '#000000', name: 'Hammer Grotto', short: 'Hammer Gro', + type: 'Grotto', }, { id: 'gc', @@ -1059,6 +1184,7 @@ const AREAS = [ fgColor: '#000000', name: 'Goron City', short: 'GC', + type: 'Overworld', }, { id: 'dmt', @@ -1066,6 +1192,7 @@ const AREAS = [ fgColor: '#000000', name: 'Death Mountain Trail', short: 'DMT', + type: 'Overworld', }, ], }, @@ -1082,6 +1209,7 @@ const AREAS = [ fgColor: '#000000', name: 'Dodongo\'s Cavern', short: 'DC', + type: 'Dungeon', }, { id: 'fairy', @@ -1089,6 +1217,7 @@ const AREAS = [ fgColor: '#000000', name: 'Fairy', short: 'Fairy', + type: 'Interior', }, { id: 'storms', @@ -1096,6 +1225,7 @@ const AREAS = [ fgColor: '#000000', name: 'Storms Grotto', short: 'Storms Grotto', + type: 'Grotto', }, { id: 'cow', @@ -1103,6 +1233,7 @@ const AREAS = [ fgColor: '#000000', name: 'Cow Grotto', short: 'Cow Grotto', + type: 'Grotto', }, { id: 'kak', @@ -1111,6 +1242,7 @@ const AREAS = [ name: 'Kakariko', short: 'Kak', spacer: true, + type: 'Overworld', }, { id: 'gc', @@ -1118,6 +1250,7 @@ const AREAS = [ fgColor: '#000000', name: 'Goron City', short: 'GC', + type: 'Overworld', }, { id: 'dmc', @@ -1125,6 +1258,7 @@ const AREAS = [ fgColor: '#000000', name: 'Death Mountain Crater', short: 'DMC', + type: 'Overworld', }, ], }, @@ -1141,6 +1275,7 @@ const AREAS = [ fgColor: '#000000', name: 'Shop', short: 'Shop', + type: 'Interior', }, { id: 'times', @@ -1148,6 +1283,7 @@ const AREAS = [ fgColor: '#000000', name: 'Times Grotto', short: 'Times Grotto', + type: 'Grotto', }, { id: 'dmt', @@ -1155,6 +1291,7 @@ const AREAS = [ fgColor: '#000000', name: 'Death Mountain Trail', short: 'DMT', + type: 'Overworld', }, { id: 'lw', @@ -1162,6 +1299,7 @@ const AREAS = [ fgColor: '#000000', name: 'Lost Woods', short: 'LW', + type: 'Overworld', }, { id: 'dmc', @@ -1169,6 +1307,7 @@ const AREAS = [ fgColor: '#000000', name: 'Death Mountain Crater', short: 'DMC', + type: 'Overworld', }, ], }, @@ -1185,6 +1324,7 @@ const AREAS = [ fgColor: '#000000', name: 'Temple of Time', short: 'Temple', + type: 'SpecialInterior', }, { id: 'm1', @@ -1192,6 +1332,7 @@ const AREAS = [ fgColor: '#000000', name: 'Market 1', short: 'M1', + type: 'Overworld', }, ], }, @@ -1208,6 +1349,7 @@ const AREAS = [ fgColor: '#000000', name: 'Main', short: 'Main', + type: 'Dungeon', }, { id: 'end', @@ -1215,6 +1357,7 @@ const AREAS = [ fgColor: '#000000', name: 'End', short: 'End', + type: 'ChildBoss', }, ], }, @@ -1224,6 +1367,7 @@ const AREAS = [ fgColor: '#000000', name: 'Gohma', short: 'Gohma', + type: 'ChildBoss', }, { id: 'dc', @@ -1238,6 +1382,7 @@ const AREAS = [ fgColor: '#000000', name: 'Main', short: 'Main', + type: 'Dungeon', }, { id: 'end', @@ -1245,6 +1390,7 @@ const AREAS = [ fgColor: '#000000', name: 'End', short: 'End', + type: 'ChildBoss', }, ], }, @@ -1254,6 +1400,7 @@ const AREAS = [ fgColor: '#000000', name: 'King Dodongo', short: 'Dodongo', + type: 'ChildBoss', }, { id: 'jabu', @@ -1268,6 +1415,7 @@ const AREAS = [ fgColor: '#000000', name: 'Main', short: 'Main', + type: 'Dungeon', }, { id: 'end', @@ -1275,6 +1423,7 @@ const AREAS = [ fgColor: '#000000', name: 'End', short: 'End', + type: 'ChildBoss', }, ], }, @@ -1284,6 +1433,7 @@ const AREAS = [ fgColor: '#000000', name: 'Barinade', short: 'Barinade', + type: 'ChildBoss', }, { id: 'forest', @@ -1299,6 +1449,7 @@ const AREAS = [ name: 'Main', short: 'Main', spacer: true, + type: 'Dungeon', }, { id: 'end', @@ -1307,6 +1458,7 @@ const AREAS = [ name: 'End', short: 'End', spacer: true, + type: 'AdultBoss', }, ], }, @@ -1317,6 +1469,7 @@ const AREAS = [ name: 'Phantom Ganon', short: 'PG', spacer: true, + type: 'AdultBoss', }, { id: 'fire', @@ -1331,6 +1484,7 @@ const AREAS = [ fgColor: '#000000', name: 'Main', short: 'Main', + type: 'Dungeon', }, { id: 'end', @@ -1338,6 +1492,7 @@ const AREAS = [ fgColor: '#000000', name: 'End', short: 'End', + type: 'AdultBoss', }, ], }, @@ -1347,6 +1502,7 @@ const AREAS = [ fgColor: '#000000', name: 'Volvagia', short: 'Volvagia', + type: 'AdultBoss', }, { id: 'water', @@ -1361,6 +1517,7 @@ const AREAS = [ fgColor: '#000000', name: 'Main', short: 'Main', + type: 'Dungeon', }, { id: 'end', @@ -1368,6 +1525,7 @@ const AREAS = [ fgColor: '#000000', name: 'End', short: 'End', + type: 'AdultBoss', }, ], }, @@ -1377,6 +1535,7 @@ const AREAS = [ fgColor: '#000000', name: 'Morpha', short: 'Morpha', + type: 'AdultBoss', }, { id: 'shadow', @@ -1391,6 +1550,7 @@ const AREAS = [ fgColor: '#000000', name: 'Main', short: 'Main', + type: 'Dungeon', }, { id: 'end', @@ -1398,6 +1558,7 @@ const AREAS = [ fgColor: '#000000', name: 'End', short: 'End', + type: 'AdultBoss', }, ], }, @@ -1407,6 +1568,7 @@ const AREAS = [ fgColor: '#000000', name: 'Bongo Bongo', short: 'Bongo Bongo', + type: 'AdultBoss', }, { id: 'spirit', @@ -1421,6 +1583,7 @@ const AREAS = [ fgColor: '#000000', name: 'Main', short: 'Main', + type: 'Dungeon', }, { id: 'end', @@ -1428,6 +1591,7 @@ const AREAS = [ fgColor: '#000000', name: 'End', short: 'End', + type: 'AdultBoss', }, ], }, @@ -1437,6 +1601,7 @@ const AREAS = [ fgColor: '#000000', name: 'Twinrova', short: 'Twinrova', + type: 'AdultBoss', }, { id: 'igc', @@ -1452,6 +1617,7 @@ const AREAS = [ name: 'Main', short: 'Main', spacer: true, + type: 'Dungeon', }, { id: 'end', @@ -1460,6 +1626,7 @@ const AREAS = [ name: 'End', short: 'End', spacer: true, + type: 'SpecialBoss', }, ], }, @@ -1470,6 +1637,7 @@ const AREAS = [ name: 'Ganon', short: 'Ganon', spacer: true, + type: 'SpecialBoss', }, { id: 'botw', @@ -1477,6 +1645,7 @@ const AREAS = [ fgColor: '#000000', name: 'Bottom of the Well', short: 'Bottom Well', + type: 'Dungeon', }, { id: 'ice', @@ -1484,6 +1653,7 @@ const AREAS = [ fgColor: '#000000', name: 'Ice Cavern', short: 'Ice Cavern', + type: 'Dungeon', }, { id: 'gtg', @@ -1491,6 +1661,124 @@ const AREAS = [ fgColor: '#000000', name: 'Gerudo Training Grounds', short: 'GTG', + type: 'Dungeon', + }, + { + id: 'songs', + bgColor: '#000000', + fgColor: '#ffffff', + name: 'Warp Songs', + short: 'Songs', + entrances: [ + { + id: 'minuet', + bgColor: '#38761d', + fgColor: '#ffffff', + name: 'Minuet of Forest', + short: 'Minuet', + oneway: true, + type: 'WarpSong', + }, + { + id: 'bolero', + bgColor: '#38761d', + fgColor: '#ffffff', + name: 'Bolero of Fire', + short: 'Bolero', + oneway: true, + type: 'WarpSong', + }, + { + id: 'serenade', + bgColor: '#38761d', + fgColor: '#ffffff', + name: 'Serenade of Water', + short: 'Serenade', + oneway: true, + type: 'WarpSong', + }, + { + id: 'nocturne', + bgColor: '#38761d', + fgColor: '#ffffff', + name: 'Nocturne of Shadow', + short: 'Nocturne', + oneway: true, + type: 'WarpSong', + }, + { + id: 'requiem', + bgColor: '#38761d', + fgColor: '#ffffff', + name: 'Requiem of Spirit', + short: 'Requiem', + oneway: true, + type: 'WarpSong', + }, + { + id: 'prelude', + bgColor: '#38761d', + fgColor: '#ffffff', + name: 'Prelude of Light', + short: 'Prelude', + oneway: true, + type: 'WarpSong', + }, + ], + }, + { + id: 'spawns', + bgColor: '#000000', + fgColor: '#ffffff', + name: 'Spawns', + short: 'Spawns', + entrances: [ + { + id: 'child', + bgColor: '#38761d', + fgColor: '#ffffff', + name: 'Child Spawn', + short: 'Child', + oneway: true, + type: 'Spawn', + }, + { + id: 'adult', + bgColor: '#38761d', + fgColor: '#ffffff', + name: 'Adult Spawn', + short: 'Adult', + oneway: true, + type: 'Spawn', + }, + ], + }, + { + id: 'owls', + bgColor: '#000000', + fgColor: '#ffffff', + name: 'Owl Drops', + short: 'Owls', + entrances: [ + { + id: 'lhowl', + bgColor: '#38761d', + fgColor: '#ffffff', + name: 'Lake Hylia Owl', + short: 'LH Owl', + oneway: true, + type: 'OwlDrop', + }, + { + id: 'dmtowl', + bgColor: '#38761d', + fgColor: '#ffffff', + name: 'Death Mountain Trail Owl', + short: 'Trail Owl', + oneway: true, + type: 'OwlDrop', + }, + ], }, ]; @@ -1694,6 +1982,47 @@ const ROOMS = [ }, ]; +const TYPE_RESTRICTIONS = { + OverworldOneWay: [ + 'WarpSong', + 'BlueWarp', + 'OwlDrop', + 'OverworldOneWay', + 'Overworld', + 'Extra', + ], + OwlDrop: [ + 'WarpSong', + 'BlueWarp', + 'OwlDrop', + 'OverworldOneWay', + 'Overworld', + 'Extra', + ], + Spawn: [ + 'Spawn', + 'WarpSong', + 'BlueWarp', + 'OwlDrop', + 'OverworldOneWay', + 'Overworld', + 'Interior', + 'SpecialInterior', + 'Extra', + ], + WarpSong: [ + 'Spawn', + 'WarpSong', + 'BlueWarp', + 'OwlDrop', + 'OverworldOneWay', + 'Overworld', + 'Interior', + 'SpecialInterior', + 'Extra', + ], +}; + const CONTEXT = React.createContext({}); const useTracker = () => React.useContext(CONTEXT); @@ -1889,17 +2218,24 @@ EntranceGroup.propTypes = { const EntranceRow = ({ entranceId }) => { const entrance = React.useMemo(() => getEntrance(entranceId), [entranceId]); - if (!entrance) { - return
; - } + const { connections, entrances, setConnection } = useTracker(); - const { connections, freeEntrances, setConnection } = useTracker(); + const options = React.useMemo(() => { + if (entrance.type && TYPE_RESTRICTIONS[entrance.type]) { + return entrances.filter((e) => + e.type && TYPE_RESTRICTIONS[entrance.type].includes(e.type)); + } + return entrances; + }, [entrances]); - const classNames = ['entrance-row']; - if (entrance.spacer) classNames.push('mt-2'); - if (connections[entrance.id] === 'trash') classNames.push('is-trash'); + const className = React.useMemo(() => { + const classNames = ['entrance-row']; + if (entrance.spacer) classNames.push('mt-2'); + if (connections[entrance.id] === 'trash') classNames.push('is-trash'); + return classNames.join(' '); + }, [entrance, connections]); - return
+ return
; @@ -1928,12 +2264,14 @@ const MixedPoolsTracker = () => { const setConnection = React.useCallback((src, dst) => { setConnections((c) => { const newConn = { ...c }; - if (getEntrance(c[src])) { + const srcEntrance = getEntrance(src); + const oldTarget = getEntrance(c[src]); + if (oldTarget && (!srcEntrance || !srcEntrance.oneway)) { // unset old connection newConn[c[src]] = null; } newConn[src] = dst; - if (dst && getEntrance(src)) { + if (dst && srcEntrance && !srcEntrance.oneway) { newConn[dst] = src; } return newConn; @@ -1958,16 +2296,14 @@ const MixedPoolsTracker = () => { return options; }, []); - const freeEntrances = React.useMemo(() => { - return entrances.filter((entrance) => { - return entrance.multi || - !Object.entries(connections).find(([, b]) => b === entrance.id); - }); - }, [connections, entrances]); + const warpTargets = React.useMemo(() => { + const targets = []; + return targets; + }, []); const context = React.useMemo(() => ({ - connections, entrances, freeEntrances, setConnection, - }), [connections, entrances, freeEntrances, setConnection]); + connections, entrances, setConnection, warpTargets, + }), [connections, entrances, setConnection, warpTargets]); const superGroups = React.useMemo(() => { const sg = [ @@ -2043,6 +2379,30 @@ const MixedPoolsTracker = () => {
)} +
+ {AREAS.slice(43, 44).map((area) => + + {area.entrances.map((entrance) => + + )} + + )} +
+
+ {AREAS.slice(44, 46).map((area) => + + {area.entrances.map((entrance) => + + )} + + )} +
;