diff --git a/Randomizer/Logic/DirectiveParser.cs b/Randomizer/Logic/DirectiveParser.cs index a4f630a0..72446458 100644 --- a/Randomizer/Logic/DirectiveParser.cs +++ b/Randomizer/Logic/DirectiveParser.cs @@ -474,15 +474,16 @@ private LogicColorPicker ParseColorDirective(string[] directiveParts) for (int i = 4; i < directiveParts.Length; i += 3) { // This parses the color components out, in groups of three. - if (int.TryParse(directiveParts[i], NumberStyles.HexNumber, null, out int rComponent)) + if (StringUtil.ParseString(directiveParts[i], out int rComponent) && + StringUtil.ParseString(directiveParts[i + 1], out int gComponent) && + StringUtil.ParseString(directiveParts[i + 2], out int bComponent) + ) { - if (int.TryParse(directiveParts[i + 1], NumberStyles.HexNumber, null, out int gComponent)) - { - if (int.TryParse(directiveParts[i + 2], NumberStyles.HexNumber, null, out int bComponent)) - { - colors.Add(Color.FromArgb(rComponent, gComponent, bComponent)); - } - } + colors.Add(Color.FromArgb(rComponent, gComponent, bComponent)); + } + else + { + throw new ParserException($"A color somewhere has an incorrect number! ({directiveParts[i]} - {directiveParts[i+1]} - {directiveParts[i+2]})"); } } @@ -524,9 +525,9 @@ private LogicOptionType GetOptionType(string typeString) private uint ParseCrcDirective(string[] directiveParts) { - if (uint.TryParse(directiveParts[1], NumberStyles.HexNumber, null, out uint outCrc)) + if (StringUtil.ParseString(directiveParts[1], out int outCrc)) { - return outCrc; + return (uint)outCrc; } else { @@ -541,48 +542,20 @@ private void ParseReplaceChanceDirective(string[] directiveParts) throw new ParserException("!replace has an invalid amount of arguments"); } - var itemData = directiveParts[1].Split(':'); - var itemStrings = itemData[0].Split('.'); - var chanceItems = directiveParts[2].Split(','); - Item replacedItem; var chanceItemList = new List(); - ItemType type; - byte itemsub = 0; - - if (!Enum.TryParse(itemStrings[1], out type)) - { - throw new ParserException("!replace has an invalid replaced itemType"); - } - - - if (itemStrings.Length >= 3) - { - if (!byte.TryParse(itemStrings[2], NumberStyles.HexNumber, null, out itemsub)) - { - throw new ParserException("!replace has an invalid replaced itemSub"); - } - } - - var dungeonString = ""; - if (itemData.Length > 1) - { - dungeonString = itemData[1]; - } - replacedItem = new Item(directiveParts[1], "!replace"); + var chanceItems = directiveParts[2].Split(','); foreach (var chanceItem in chanceItems) { var trimmed = chanceItem.TrimEnd(';'); var chanceItemData = trimmed.Split(':'); var chanceItemStrings = chanceItemData[0].Split('.'); - - int chance = 0; - if (!int.TryParse(chanceItemData[2], out chance)) + if (!StringUtil.ParseString(chanceItemData[2], out chance)) { throw new ParserException("!replace has an invalid new item chance value"); } @@ -603,7 +576,7 @@ private void ParseReplaceAmountDirective(string[] directiveParts) var replacementItem = new Item(directiveParts[1], "!replaceamount"); byte replacementAmount; - if (!byte.TryParse(directiveParts[2], NumberStyles.HexNumber, null, out replacementAmount)) + if (!StringUtil.ParseString(directiveParts[2], out replacementAmount)) { throw new ParserException("!replaceamount has an invalid amount"); } @@ -611,7 +584,6 @@ private void ParseReplaceAmountDirective(string[] directiveParts) AmountReplacementReferences.Add(new ItemAmountSet(replacementItem, replacementAmount)); var referenceId = AmountReplacementReferences.Count - 1; - var itemList = new List(); var replacedItems = directiveParts[3].Split(','); foreach (var itemString in replacedItems) { @@ -643,7 +615,7 @@ private void ParseReplaceIncrementDirective(string[] directiveParts) var replacementItem = new Item(directiveParts[1], "!replaceincrement"); byte replacementAmount; - if (!byte.TryParse(directiveParts[2], NumberStyles.HexNumber, null, out replacementAmount)) + if (!StringUtil.ParseString(directiveParts[2], out replacementAmount)) { throw new ParserException("!replaceincrement has an invalid amount"); } @@ -651,7 +623,6 @@ private void ParseReplaceIncrementDirective(string[] directiveParts) IncrementalReplacementReferences.Add(new ItemAmountSet(replacementItem, replacementAmount)); var referenceId = IncrementalReplacementReferences.Count - 1; - var itemList = new List(); var replacedItems = directiveParts[3].Split(','); foreach (var itemString in replacedItems) { @@ -673,26 +644,25 @@ private void ParseReplaceIncrementDirective(string[] directiveParts) } } - public LogicDefine ParseAdditionDirective(String[] directiveParts) + public LogicDefine ParseAdditionDirective(string[] directiveParts) { - var name = directiveParts[1]; int totalValue = 0; var values = directiveParts[2].Split(','); - foreach(String value in values) + foreach(string value in values) { byte number; - if (!byte.TryParse(value, out number)) + if (!StringUtil.ParseString(value, out number)) { throw new ParserException("!addition has an invalid value"); } totalValue += number; - if(totalValue>255) + if(totalValue > 255) { throw new ParserException("!addition resulted in a value higher than 255 (0xFF)"); } } - return new LogicDefine( directiveParts[1] ,totalValue.ToString("X2")); + return new LogicDefine( directiveParts[1] ,totalValue.ToString()); } public void ParseSetTypeDirective(string[] directiveParts) diff --git a/Randomizer/Logic/LogicOption.cs b/Randomizer/Logic/LogicOption.cs index f0c37cf0..dc3c3b69 100644 --- a/Randomizer/Logic/LogicOption.cs +++ b/Randomizer/Logic/LogicOption.cs @@ -213,10 +213,10 @@ public override byte GetHashByte() public class LogicNumberBox : LogicOption { - String value = ""; - String placeholder = ""; - Boolean focussing = false; - public LogicNumberBox(string name, LogicOptionType type, String placeholder) : base(name, name, true, type) + string value = ""; + string placeholder = ""; + bool isSelf = false; + public LogicNumberBox(string name, LogicOptionType type, string placeholder) : base(name, name, true, type) { this.placeholder = placeholder; } @@ -224,14 +224,13 @@ public LogicNumberBox(string name, LogicOptionType type, String placeholder) : b public override Control GetControl() { TextBox numberBox = new TextBox(); - focussing = true; + isSelf = true; numberBox.Text = placeholder; - focussing = false; + isSelf = false; numberBox.LostFocus += (object sender, EventArgs e) => { LostFocus(sender, e); }; numberBox.GotFocus += (object sender, EventArgs e) => { GotFocus(sender, e); }; numberBox.TextChanged += (object sender, EventArgs e) => { TextChanged(sender, e); }; - return numberBox; } @@ -239,9 +238,9 @@ private void LostFocus(object sender, EventArgs e) { if (value == "") { - focussing = true; + isSelf = true; ((TextBox)sender).Text = placeholder; - focussing = false; + isSelf = false; } } @@ -249,49 +248,41 @@ private void GotFocus(object sender, EventArgs e) { if(value == "") { - focussing = true; + isSelf = true; ((TextBox)sender).Text = ""; - focussing = false; + isSelf = false; } } private void TextChanged(object sender, EventArgs e) { - TextBox tb = (TextBox)sender; - byte val; - if(focussing) + if (isSelf) { return; } + var tb = ((TextBox)sender); + var text = tb.Text; + byte val; - if(tb.Text == ""||tb.Text == "0" || tb.Text == "0x" || tb.Text == "0X") + text = text.TrimStart(new char[] { ' ', '0' }); + if(text == "") { value = ""; return; } - //dont self trigger, if thats a thing - focussing = true; - if (tb.Text.StartsWith("0x") || tb.Text.StartsWith("0X")) - { - if (byte.TryParse(tb.Text.Substring(2), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out val)) - { - value = val.ToString(); - } - else - { //starts with 0X so give a hex representation - tb.Text = value != "" ? "0x" +value : ""; - } - } - else if (byte.TryParse(tb.Text, out val)) + if (byte.TryParse(text, out val)) { value = val.ToString(); } else - { //doesnt start with 0X so give a decimal representation - tb.Text = value != "" ? byte.Parse(value,NumberStyles.HexNumber,CultureInfo.InvariantCulture).ToString() : ""; + { + var start = tb.SelectionStart; + isSelf = true; + tb.Text = value; + tb.Select(start - 1, 0); + isSelf = false; } - focussing = false; } public override List GetLogicDefines() diff --git a/Randomizer/Logic/Parser.cs b/Randomizer/Logic/Parser.cs index 417e8b3a..07ea22aa 100644 --- a/Randomizer/Logic/Parser.cs +++ b/Randomizer/Logic/Parser.cs @@ -57,7 +57,7 @@ public List GetDependencies(string logic) Dictionary valueDict = new Dictionary(); var reqValueString = sequence.Split(',')[0]; - if (!int.TryParse(reqValueString.Substring(1), NumberStyles.HexNumber, CultureInfo.InvariantCulture, out int reqValue)) + if (!StringUtil.ParseString(reqValueString.Substring(1), out int reqValue)) { throw new ParserException($"Invalid total for counter! {reqValueString.Substring(1)}"); } @@ -72,7 +72,7 @@ public List GetDependencies(string logic) if (values.Length >= 3) { - if (!int.TryParse(values[2], NumberStyles.HexNumber, CultureInfo.InvariantCulture, out depValue)) + if (!StringUtil.ParseString(values[2], out depValue)) { depValue = 1; dependencyString = dependencyString.Substring(0, dependencyString.Length - (values[2].Length + 1)); @@ -96,9 +96,9 @@ public List GetDependencies(string logic) dungeon = splitSequence[1]; if (splitSequence.Length >= 3) { - if (!int.TryParse(splitSequence[2], out count)) + if (!StringUtil.ParseString(splitSequence[2], out count)) { - count = 1; + throw new ParserException($"Invalid amount on\"{sequence}\"!"); } } } @@ -107,7 +107,7 @@ public List GetDependencies(string logic) if (dependencyParts.Length < 2) { - break; + throw new ParserException($"Invalid logic \"{logic}\"!"); } switch (dependencyParts[0]) @@ -118,7 +118,7 @@ public List GetDependencies(string logic) dependencies.Add(locationDependency); break; case "Items": - Item item = new Item(sequence); + Item item = new Item(sequence, " Parse"); ItemDependency itemDependency = new ItemDependency(item, count); dependencies.Add(itemDependency); @@ -208,7 +208,7 @@ public Location GetLocation(string locationText) if (locationParts.Length < 3) { Console.WriteLine("Too short"); - throw new ParserException("A location in the logic file lacks required fields!"); + throw new ParserException($"{locationText} in the logic file lacks required fields!"); } string[] names = locationParts[0].Split(':'); @@ -232,18 +232,25 @@ public Location GetLocation(string locationText) string[] addressStrings = locationParts[2].Split(','); List addresses = new List(addressStrings.Length); List defines = new List(); - foreach (string address in addressStrings) + try { - LocationAddress parsedAddress = GetAddressFromString(address); - if (parsedAddress is EventLocationAddress) + foreach (string address in addressStrings) { - defines.Add((EventLocationAddress)parsedAddress); - } - else - { - addresses.Add(parsedAddress); - } + LocationAddress parsedAddress = GetAddressFromString(address); + if (parsedAddress is EventLocationAddress) + { + defines.Add((EventLocationAddress)parsedAddress); + } + else + { + addresses.Add(parsedAddress); + } + } + } + catch(ParserException error) + { + throw new ParserException($"Error at location \"{name}\": {error.Message}"); } string logic = ""; @@ -252,12 +259,19 @@ public Location GetLocation(string locationText) { logic = locationParts[3]; } - - List dependencies = GetDependencies(logic); + List dependencies; + try + { + dependencies = GetDependencies(logic); + } + catch (ParserException error) + { + throw new ParserException($"Error at location \"{name}\": {error.Message}"); + } Item? itemOverride = null; // Has enough parts for an extra item - if (locationParts.Length >= 5) + if (locationParts.Length >= 5 && locationParts[4].Length != 0) { string[] itemParts = locationParts[4].Split(':'); string[] subParts = itemParts[0].Split('.'); @@ -269,7 +283,7 @@ public Location GetLocation(string locationText) byte subType = 0; if (subParts.Length >= 3) { - if (!byte.TryParse(subParts[2], NumberStyles.HexNumber, null, out subType)) + if (!StringUtil.ParseString(subParts[2], out subType)) { if (Enum.TryParse(subParts[2], out KinstoneType subKinstoneType)) { @@ -294,6 +308,10 @@ public Location GetLocation(string locationText) itemOverride = new Item(replacementType, subType, itemDungeon); } } + else + { + throw new ParserException($"Location \"{name}\" has invalid item override \"{locationParts[4]}\"!"); + } } Location location = new Location(type, name, dungeon, addresses, defines, dependencies, itemOverride); @@ -348,8 +366,8 @@ public LocationAddress GetAddressFromString(string addressString) return new EventLocationAddress(addressType, addressParts[0]); } - // The address is a hexadecimal number, so it can simply be parsed - if (int.TryParse(addressParts[0], NumberStyles.HexNumber, null, out int address)) + // The address is a number, so it can simply be parsed + if (StringUtil.ParseString(addressParts[0], out int address)) { return new LocationAddress(addressType, address); } @@ -358,22 +376,22 @@ public LocationAddress GetAddressFromString(string addressString) string[] entityDetails = addressParts[0].Split('-'); if (entityDetails.Length != 3) { - throw new ShuffleException($"Entity data \"{addressString}\" does not have a full address!"); + throw new ParserException($"Entity data \"{addressString}\" does not have a full address!"); } - if (!int.TryParse(entityDetails[0], NumberStyles.HexNumber, null, out int area)) + if (!StringUtil.ParseString(entityDetails[0], out int area)) { - throw new ShuffleException($"Entity data \"{addressString}\" has an invalid area index!"); + throw new ParserException($"Entity data \"{addressString}\" has an invalid area index!"); } - if (!int.TryParse(entityDetails[1], NumberStyles.HexNumber, null, out int room)) + if (!StringUtil.ParseString(entityDetails[1], out int room)) { - throw new ShuffleException($"Entity data \"{addressString}\" has an invalid room index!"); + throw new ParserException($"Entity data \"{addressString}\" has an invalid room index!"); } - if (!int.TryParse(entityDetails[2], NumberStyles.HexNumber, null, out int chest)) + if (!StringUtil.ParseString(entityDetails[2], out int chest)) { - throw new ShuffleException($"Entity data \"{addressString}\" has an invalid entity index!"); + throw new ParserException($"Entity data \"{addressString}\" has an invalid entity index!"); } int addressValue; @@ -427,7 +445,14 @@ public List ParseLocations(string[] lines, Random rng) // Parse the string as a directive, ignoring preparsed directives if (!SubParser.ParseOnLoad(locationString)) { - SubParser.ParseDirective(locationString); + try + { + SubParser.ParseDirective(locationString); + } + catch(ParserException error) + { + throw new ParserException($"Error at directive \"{locationString}\": {error.Message}"); + } } } @@ -435,6 +460,7 @@ public List ParseLocations(string[] lines, Random rng) { // Remove spaces as they're ignored in locations locationString = locationString.Replace(" ", ""); + locationString = locationString.Replace("\t", ""); Location newLocation = GetLocation(locationString); outList.Add(newLocation); diff --git a/Randomizer/Shuffler.cs b/Randomizer/Shuffler.cs index 0b8be7da..0304ba96 100644 --- a/Randomizer/Shuffler.cs +++ b/Randomizer/Shuffler.cs @@ -46,7 +46,7 @@ public Item(string data, string commandScope = "") { UseAny = true; } - else if (!byte.TryParse(itemData[2], NumberStyles.HexNumber, null, out SubValue)) + else if (!StringUtil.ParseString(itemData[2], out SubValue)) { if (Enum.TryParse(itemData[2], out Kinstone)) { @@ -439,7 +439,7 @@ public void RandomizeLocations() if (!new LocationDependency("BeatVaati").DependencyFulfilled(finalMajorItems, Locations)) { - throw new ShuffleException($"Randomization succeded, but could not beat Vaati!"); + throw new ShuffleException($"Randomization succeeded, but could not beat Vaati!"); } // Put nice items in locations, logic is checked but not updated diff --git a/Resources/Patches/gamefixes/asm/todPads.dmp b/Resources/Patches/gamefixes/asm/todPads.dmp index 5c29bee8..1c7677bc 100644 Binary files a/Resources/Patches/gamefixes/asm/todPads.dmp and b/Resources/Patches/gamefixes/asm/todPads.dmp differ diff --git a/Resources/Patches/gamefixes/asm/todPads.s b/Resources/Patches/gamefixes/asm/todPads.s index 0146d7fe..f87a7c79 100644 --- a/Resources/Patches/gamefixes/asm/todPads.s +++ b/Resources/Patches/gamefixes/asm/todPads.s @@ -5,6 +5,12 @@ cmp r1,#0 beq checkTOD end: +@check if pad has been touched +mov r0,r2 +add r0,#0x84 +ldr r0,[r0] +cmp r0,#0 +beq nottod ldr r3,=#0x8078EB5 bx r3 diff --git a/Resources/Patches/hash.event b/Resources/Patches/hash.event index 754982bd..882c2fde 100644 --- a/Resources/Patches/hash.event +++ b/Resources/Patches/hash.event @@ -1,4 +1,25 @@ #ifdef hash +#ifdef customHash1 + #define seedHash1 customHash1 +#endif +#ifdef customHash2 + #define seedHash2 customHash2 +#endif +#ifdef customHash3 + #define seedHash3 customHash3 +#endif +#ifdef customHash4 + #define seedHash4 customHash4 +#endif +#ifdef customHash5 + #define seedHash5 customHash5 +#endif +#ifdef customOptionsHash1 + #define optionsHash1 customOptionsHash1 +#endif +#ifdef customOptionsHash2 + #define optionsHash2 customOptionsHash2 +#endif #ifndef seedHash1 #define seedHash1 "0" #endif diff --git a/Resources/Patches/improvements/asm/lakeRespawn.dmp b/Resources/Patches/improvements/asm/lakeRespawn.dmp new file mode 100644 index 00000000..0ed1620b Binary files /dev/null and b/Resources/Patches/improvements/asm/lakeRespawn.dmp differ diff --git a/Resources/Patches/improvements/asm/lakeRespawn.s b/Resources/Patches/improvements/asm/lakeRespawn.s new file mode 100644 index 00000000..da3ac63f --- /dev/null +++ b/Resources/Patches/improvements/asm/lakeRespawn.s @@ -0,0 +1,39 @@ +.thumb +push {r0} +@check if shallow water, if not then go vanilla +bl getTile +cmp r0,#0x3A +bne vanilla + +@check if minish or not +pop {r0} +ldr r0,=#0x3001160 +ldrb r0,[r0,#0x0C] +cmp r0,#9 +beq small + +big: +mov r0,#0x20 +b end + +small: +mov r0,#0x00 +b end + +vanilla: +pop {r0} +ldr r3,=#0x8000334 +mov lr,r3 +.short 0xF800 + +end: +mov r4,r0 +mov r0,r8 +and r4,r0 +ldr r3,=#0x807A3A6 +mov lr,r3 +.short 0xF800 + +getTile: +ldr r3,=#0x30057D4 +bx r3 diff --git a/Resources/Patches/improvements/asm/moleFix.dmp b/Resources/Patches/improvements/asm/moleFix.dmp index a31b212e..01918d30 100644 Binary files a/Resources/Patches/improvements/asm/moleFix.dmp and b/Resources/Patches/improvements/asm/moleFix.dmp differ diff --git a/Resources/Patches/improvements/asm/moleFix.s b/Resources/Patches/improvements/asm/moleFix.s index 9e4ee32d..bd86ea14 100644 --- a/Resources/Patches/improvements/asm/moleFix.s +++ b/Resources/Patches/improvements/asm/moleFix.s @@ -1,5 +1,13 @@ .thumb push {r4-r7,lr} +@stop running +ldr r0,=#0x3003F80 +ldr r1,[r0,#0x30] +ldr r2,=#0x400 +mvn r2,r2 +and r1,r2 +str r1,[r0,#0x30] + @check if this is a mole cave ldr r3,=#0x3000BF0 ldrb r0,[r3,#4] diff --git a/Resources/Patches/improvements/asm/ocarinaGlitchFix.dmp b/Resources/Patches/improvements/asm/ocarinaGlitchFix.dmp index 2116d895..196f8a62 100644 Binary files a/Resources/Patches/improvements/asm/ocarinaGlitchFix.dmp and b/Resources/Patches/improvements/asm/ocarinaGlitchFix.dmp differ diff --git a/Resources/Patches/improvements/asm/ocarinaGlitchFix.s b/Resources/Patches/improvements/asm/ocarinaGlitchFix.s index 75eaf4ed..ad671c80 100644 --- a/Resources/Patches/improvements/asm/ocarinaGlitchFix.s +++ b/Resources/Patches/improvements/asm/ocarinaGlitchFix.s @@ -1,9 +1,15 @@ .thumb +@check if using stairs +ldr r0,=#0x3003F8C +ldrb r0,[r0] +cmp r0,#0 +bne cutscene @check if starting a cutscene ldr r0,=#0x300116C ldrb r1,[r0,#3] cmp r1,#6 bhs end +cutscene: @and if ocarina cmp r4,#0x17 bne notOcarina diff --git a/Resources/Patches/improvements/asm/smallShopsText.dmp b/Resources/Patches/improvements/asm/smallShopsText.dmp index f96b7ec5..90e5d007 100644 Binary files a/Resources/Patches/improvements/asm/smallShopsText.dmp and b/Resources/Patches/improvements/asm/smallShopsText.dmp differ diff --git a/Resources/Patches/improvements/asm/smallShopsText.s b/Resources/Patches/improvements/asm/smallShopsText.s index f7f58f01..00ac059c 100644 --- a/Resources/Patches/improvements/asm/smallShopsText.s +++ b/Resources/Patches/improvements/asm/smallShopsText.s @@ -267,11 +267,11 @@ ldr r0,fastspinCredits bx lr longspin: -ldr r0,fastsplitCredits +ldr r0,longspinCredits bx lr fastsplit: -ldr r0,longspinCredits +ldr r0,fastsplitCredits bx lr dungeon: diff --git a/Resources/Patches/improvements/glitchless.event b/Resources/Patches/improvements/glitchless.event index b1aea253..dfb5ad1d 100644 --- a/Resources/Patches/improvements/glitchless.event +++ b/Resources/Patches/improvements/glitchless.event @@ -5,7 +5,7 @@ ALIGN 4 ocarinaGlitchFix: #incbin "asm/ocarinaGlitchFix.dmp" -//fix mole caves +//fix mole cave walls affecting other mole caves and also make link not run forever PUSH; ORG $7FD48; jumpToHack(moleFix); POP ALIGN 4 moleFix: diff --git a/Resources/Patches/improvements/installer.event b/Resources/Patches/improvements/installer.event index dac27790..fbf3f7fa 100644 --- a/Resources/Patches/improvements/installer.event +++ b/Resources/Patches/improvements/installer.event @@ -330,8 +330,11 @@ BYTE 6 0xF 0 0x5D 0 0x07; SHORT 0 0x118 0x98 0 0 BYTE 6 0xF 0 0x5D 0 0x07; SHORT 0 0x1B8 0x98 0 0 WORD 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF 0xFFFFFFFF -//respawn in lake hylia shallow water -PUSH; ORG $41C; BYTE 0x20; POP +//respawn in lake hylia shallow water, unless minish +PUSH; ORG $7A39C; jumpToHack(lakeRespawn); POP +ALIGN 4 +lakeRespawn: +#incbin "asm/lakeRespawn.dmp" //add quick warp option PUSH; ORG $A5216; SHORT 0x2201 0xE004; POP @@ -453,6 +456,9 @@ PUSH; ORG $86A20; SHORT 0x2001; POP //give elements a sound when picked up PUSH; ORG $83620; SHORT 0x2844; POP +//faster textbox opening and closing +PUSH; ORG $5615A; SHORT 0x2008; ORG $5619C; SHORT 0x2008; POP + #include "glitchless.event" #include "dungeon.event" #include "fairy.event" diff --git a/Resources/Patches/logicfixes/asm/shopAsk.dmp b/Resources/Patches/logicfixes/asm/shopAsk.dmp index d750973d..51a56344 100644 Binary files a/Resources/Patches/logicfixes/asm/shopAsk.dmp and b/Resources/Patches/logicfixes/asm/shopAsk.dmp differ diff --git a/Resources/Patches/logicfixes/asm/shopAsk.s b/Resources/Patches/logicfixes/asm/shopAsk.s index 83f02beb..1f76df46 100644 --- a/Resources/Patches/logicfixes/asm/shopAsk.s +++ b/Resources/Patches/logicfixes/asm/shopAsk.s @@ -278,11 +278,11 @@ ldr r0,fastspinCredits bx lr longspin: -ldr r0,fastsplitCredits +ldr r0,longspinCredits bx lr fastsplit: -ldr r0,longspinCredits +ldr r0,fastsplitCredits bx lr dungeon: diff --git a/Resources/Patches/logicfixes/asm/simonCycle.dmp b/Resources/Patches/logicfixes/asm/simonCycle.dmp new file mode 100644 index 00000000..7c3ceaff Binary files /dev/null and b/Resources/Patches/logicfixes/asm/simonCycle.dmp differ diff --git a/Resources/Patches/logicfixes/asm/simonCycle.s b/Resources/Patches/logicfixes/asm/simonCycle.s new file mode 100644 index 00000000..31f48363 --- /dev/null +++ b/Resources/Patches/logicfixes/asm/simonCycle.s @@ -0,0 +1,34 @@ +.thumb +push {lr} +push {r4-r6} +@check if simulation spot opened +ldr r0,=#0x2002CB4 +ldrb r0,[r0,#0x00] +mov r1,#0x40 +and r0,r1 +cmp r0,#0 +bne cycle +b first + + @if not, always first fight + first: + mov r6,#0 + b end + + @otherwise cycle through fights + cycle: + ldr r0,=#0x203FFE0 + ldrb r6,[r0,#0x00] + add r6,#1 + cmp r6,#8 + blo notcap + @capped at 7 + mov r6,#0 + notcap: + strb r6,[r0,#0x00] + b end + +end: +ldr r3,=#0x804E082 +mov lr,r3 +.short 0xF800 diff --git a/Resources/Patches/logicfixes/installer.event b/Resources/Patches/logicfixes/installer.event index abb792d7..3370c87e 100644 --- a/Resources/Patches/logicfixes/installer.event +++ b/Resources/Patches/logicfixes/installer.event @@ -198,8 +198,13 @@ PUSH; ORG $4EFB4; SHORT 0xE017; POP //make rem item have a sub id PUSH; ORG $7EA5E; SHORT 0x7890; ORG $7EA66; SHORT 0x7890 0x78D1; POP -//simulation chest always spawns the same pattern if the first chest hasn't been opened -PUSH; ORG $F030C; BYTE 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0; POP +//simon fights appear in a consistent order, advancing each time you open the chest; always first fight unless item spot is opened +//counter at 0x203FFE0 (new save space), one byte +PUSH; ORG $4E098; SHORT 0x46C0; ORG $4E09E; SHORT 0x1C30; POP +PUSH; ORG $4E05C; jumpToHack(simonCycle); POP +ALIGN 4 +simonCycle: +#incbin "asm/simonCycle.dmp" //yellow library minish rewards link even if he has the flippers PUSH; ORG $6AAA4; SHORT 0; POP diff --git a/Resources/default.logic b/Resources/default.logic index dadec60b..4a9d02de 100644 --- a/Resources/default.logic +++ b/Resources/default.logic @@ -1,8 +1,68 @@ # Default logic for the randomizer - Doesn't allow glitches, but allows unintuitive tricks !name - Default -!version - 0.6.0 -!crc - E8637292 +!version - 0.6.1 +!crc - 0xE8637292 + +#Explanation on the required format and features +# +# (-----) : required +# [-----] : optional +# ~ ---- ~ : repeatable +# +# = General = +# # are comments and wont be used by the parser. +# RAND_INT is a hexadecimal number set by default. +# +# the location types available are Helper, Major, Minor, Unshuffled and DungeonItem. +# Unshuffled will not move an item. +# DungeonItem will not move an item out of spots that are marked with the same dungeon id. +# Major will take the item into account to see if the game can be beaten. +# Helper will not add an item but lets the logic be reused for other locations, this location type is the only one that does not require and address. +# +# items are built up as Items.(type).[subtype]:[dungeon id]:[amount] unless specified otherwise +# a location is built up as (name):[dungeon id]; (location type); (address); [logic]; [item override] +# +# addresses can be written in multiple ways. +# xx-xx-xx needs hexadecimal numbers to make an "area - room - chest id" combination +# xxxxxx a hex number that specifies the precise location. +# xxxx:FirstByte, xxxx:SecondByte, information is in 2 seperate spaces so 2 adresses are required, addresses can be substituded for (external definition name):Define . +# +# !define - (define name) - [value] : sets the define (define name), its value is set to [value] if it exists. +# `TEST` : places the value of the define TEST in place of this. +# !eventdefine - (define name) - [value] : will write (define name) to "extDefinitions.event", its value is set to [value] if it exists. +# !undefine - (define name) : unsets (define name) and removes its value if it has one. +# +# +# = Define Logic = +# !ifdef - (define name) : will enter if (define name) is set. +# !ifndef - (define name) : will enter if (define name) is not set. +# !else : will enter if the ifdef or ifndef failed, needs an ifdef or ifndef that hasnt been closed by endif. +# !endif : needed to mark the end of an ifdef, ifndef and else blocks. +# +# = Window Elements = +# (window tab) is what tab the element shows up in, (readable text) is the text written next to the element +# !flag - (window tab) - (define name) - (readable text) - [default value] : adds a checkbox that sets (define name) if checked, defaults to false unless [default value] exists and is "true". +# !dropdown - (window tab) - ~(define name) - (readable text) ~ : requires sets of "(define name) - (readable name)", each set adds a new entry to the dropdown, the selected option will have its define set, the first option is the default value. +# !numberbox - (window tab) - (define name) - (readable text) : a textbox where you can input a number, (define name) will be set to the number that was input. +# !color - (window tab) - (define name) - (readable text) - ~ [default color R] - [default color G] - [default color B] ~ : adds a color picker, the default color is white if no hexadecimal [default color R/G/B] is set, (define name) is set if the color is changed, (define name)_X is set to the color in set X starting from 0. +# +# = Parser Commands = +# !replace - (item) - (chance set) : replaces all occurrences of (item) with a random spread of items in (chance set), (chance set) consists of 1 or more "Items.(type).[subtype]:[dungeon id]:[weight]" entries split up by ,'s and ended with an ; . +# !replaceamount - (item) - (amount) - (chance set) : replaces the first (amount) occurrences of (item) with a random spread of items in (chance set). +# !replaceincrement - (item) - (amount) - (to replace) : replaces the first (amount) occurrences of any items in (to replace) with (item), the subtype of (item) increases by 1 every time it replaces something. +# !addition - (define name) - (values) : adds all , seperated number values in (values) together and sets (define name) to that value. +# !settype - (item) - (location type) : set all occurrences of (item) to be of type (location type). +# +# = Location Logic = +# all logic symbols other than , are to be put in () +# Helpers.a and Locations.a mean the same thing but it helps with showing if a location had an item or not. +# logic can be nested, example:"(| (& Items.a, Locations.b), Helpers.c)" +# +# (item),~(item)~ : an AND only on the base level, "Items.x , Items.y" will need both x and y. +# (| (item), ~(item)~) : an OR, "(|Items.x, Items.y)" will need either x or y. +# (& (item), ~(item)~) : an AND, "(&Items.x, items.y)" will need both x and y. +# (+(value), ~(itemvalue)~) : a count, "(+50, Items.x::2, Items.y)" x is worth 2, y is worth 1, this needs enough x's and y's to reach the value 50. !flag - Setting - KEYSANITY - Keysanity - false !flag - Setting - SHUFFLE_ELEMENTS - Shuffle elements into item pool @@ -26,9 +86,9 @@ !flag - Gimmick - RANDOM_LANGUAGE - Randomize language !flag - Gimmick - RAINBOW_HEARTS - Enable Rainbow Hearts -!color - Gimmick - TUNIC_COLOR - Change Tunic Color - 10 - FF - 08 - 10 - 7B - 29 - 41 - A0 - 28 - BD - FF - A0 -!color - Gimmick - HEART_COLOR - Change Heart Color - FF - 50 - 10 -!color - Gimmick - SPLIT_COLOR - Change Split Bar Color - 4A - FF - 18 - 31 - 9C - 18 - 31 - 52 - 18 +!color - Gimmick - TUNIC_COLOR - Change Tunic Color - 0x10 - 0xFF - 0x08 - 0x10 - 0x7B - 0x29 - 0x41 - 0xA0 - 0x28 - 0xBD - 0xFF - 0xA0 +!color - Gimmick - HEART_COLOR - Change Heart Color - 0xFF - 0x50 - 0x10 +!color - Gimmick - SPLIT_COLOR - Change Split Bar Color - 0x4A - 0xFF - 0x18 - 0x31 - 0x9C - 0x18 - 0x31 - 0x52 - 0x18 !dropdown - Gimmick - FOLLOWER_SETTING - No Follower - NOFOLLOWER - Mailman Follower - 0x04 - Zelda Follower - 0x05 - Malon Follower - 0x1E - Smith Follower - 0x22 - King Gustaf Follower - 0x24 - Cow Follower - 0x31 - Goron Follower - 0x32 - Anju Follower - 0x45 !eventdefine - customRNG - 0x`RAND_INT` @@ -97,13 +157,13 @@ !ifdef - KEYSANITY !define - KEYSANITY_MAJOR - Major !define - KEYSANITY_MINOR - Minor - !define - DWS_SET - .18: - !define - COF_SET - .19: - !define - FOW_SET - .1A: - !define - TOD_SET - .1B: - !define - POW_SET - .1C: - !define - DHC_SET - .1D: - !define - RC_SET - .1E: + !define - DWS_SET - .0x18: + !define - COF_SET - .0x19: + !define - FOW_SET - .0x1A: + !define - TOD_SET - .0x1B: + !define - POW_SET - .0x1C: + !define - DHC_SET - .0x1D: + !define - RC_SET - .0x1E: !else !define - KEYSANITY_MAJOR - DungeonItem !define - KEYSANITY_MINOR - DungeonItem @@ -150,7 +210,7 @@ !endif !ifdef - TRAPS - !define - TRAP_VAL - , Items.Trap.FF::15 + !define - TRAP_VAL - , Items.Trap.0xFF::15 !else !define - TRAP_VAL - !endif @@ -161,16 +221,16 @@ !define - SWAPSHELL - Items.Rupee50::20, Items.Bombs5::40, Items.Arrows5::40 `TRAP_VAL` ; !ifdef - OPENFUSIONS - !define - KINVALS - Items.KinstoneX.6E, Items.KinstoneX.6F, Items.KinstoneX.70, Items.KinstoneX.71, Items.KinstoneX.72, Items.KinstoneX.73, Items.KinstoneX.74, Items.KinstoneX.75, + !define - KINVALS - Items.KinstoneX.0x6E, Items.KinstoneX.0x6F, Items.KinstoneX.0x70, Items.KinstoneX.0x71, Items.KinstoneX.0x72, Items.KinstoneX.0x73, Items.KinstoneX.0x74, Items.KinstoneX.0x75, !else !ifdef - NO_FUSIONS - !define - KINVALS - Items.KinstoneX.6E, Items.KinstoneX.6F, Items.KinstoneX.70, Items.KinstoneX.71, Items.KinstoneX.72, Items.KinstoneX.73, Items.KinstoneX.74, Items.KinstoneX.75, + !define - KINVALS - Items.KinstoneX.0x6E, Items.KinstoneX.0x6F, Items.KinstoneX.0x70, Items.KinstoneX.0x71, Items.KinstoneX.0x72, Items.KinstoneX.0x73, Items.KinstoneX.0x74, Items.KinstoneX.0x75, !else !define - KINVALS - !endif !endif -!define - SHELLVALS - Items.ShellsX, Items.ShellsX.1, Items.ShellsX.A, Items.ShellsX.14, Items.ShellsX.32, Items.ShellsX.50, Items.ShellsX.64, Items.ShellsX.C8, +!define - SHELLVALS - Items.ShellsX, Items.ShellsX.1, Items.ShellsX.10, Items.ShellsX.20, Items.ShellsX.50, Items.ShellsX.80, Items.ShellsX.100, Items.ShellsX.200, !define - DHC_FIG - !ifndef - PEDITEMS !ifndef - OPENDHC @@ -187,43 +247,43 @@ !ifdef - TIMEDOHKO !eventdefine - timedohkoOption - !replaceamount - Items.BlueOrb - 10 - `SHELLVALS` `KINVALS` - !replaceamount - Items.GreenOrb - 10 - `SHELLVALS` `KINVALS` - !replaceamount - Items.RedOrb - 10 - `SHELLVALS` `KINVALS` + !replaceamount - Items.BlueOrb - 0x10 - `SHELLVALS` `KINVALS` + !replaceamount - Items.GreenOrb - 0x10 - `SHELLVALS` `KINVALS` + !replaceamount - Items.RedOrb - 0x10 - `SHELLVALS` `KINVALS` !endif !replace - Items.ShellsX - `SWAPSHELL` !replace - Items.ShellsX.1 - `SWAPSHELL` -!replace - Items.ShellsX.A - `SWAPSHELL` -!replace - Items.ShellsX.14 - `SWAPSHELL` -!replace - Items.ShellsX.32 - `SWAPSHELL` -!replace - Items.ShellsX.50 - `SWAPSHELL` -!replace - Items.ShellsX.64 - `SWAPSHELL` -!replace - Items.ShellsX.C8 - `SWAPSHELL` +!replace - Items.ShellsX.10 - `SWAPSHELL` +!replace - Items.ShellsX.20 - `SWAPSHELL` +!replace - Items.ShellsX.50 - `SWAPSHELL` +!replace - Items.ShellsX.80 - `SWAPSHELL` +!replace - Items.ShellsX.100 - `SWAPSHELL` +!replace - Items.ShellsX.200 - `SWAPSHELL` !ifdef - OPENFUSIONS - !replace - Items.KinstoneX.6E - `SWAPRED` - !replace - Items.KinstoneX.6F - `SWAPRED` - !replace - Items.KinstoneX.70 - `SWAPRED` + !replace - Items.KinstoneX.0x6E - `SWAPRED` + !replace - Items.KinstoneX.0x6F - `SWAPRED` + !replace - Items.KinstoneX.0x70 - `SWAPRED` - !replace - Items.KinstoneX.71 - `SWAPBLUE` - !replace - Items.KinstoneX.72 - `SWAPBLUE` + !replace - Items.KinstoneX.0x71 - `SWAPBLUE` + !replace - Items.KinstoneX.0x72 - `SWAPBLUE` - !replace - Items.KinstoneX.73 - `SWAPGREEN` - !replace - Items.KinstoneX.74 - `SWAPGREEN` - !replace - Items.KinstoneX.75 - `SWAPGREEN` + !replace - Items.KinstoneX.0x73 - `SWAPGREEN` + !replace - Items.KinstoneX.0x74 - `SWAPGREEN` + !replace - Items.KinstoneX.0x75 - `SWAPGREEN` !else !ifdef - NO_FUSIONS - !replace - Items.KinstoneX.6E - `SWAPRED` - !replace - Items.KinstoneX.6F - `SWAPRED` - !replace - Items.KinstoneX.70 - `SWAPRED` + !replace - Items.KinstoneX.0x6E - `SWAPRED` + !replace - Items.KinstoneX.0x6F - `SWAPRED` + !replace - Items.KinstoneX.0x70 - `SWAPRED` - !replace - Items.KinstoneX.71 - `SWAPBLUE` - !replace - Items.KinstoneX.72 - `SWAPBLUE` + !replace - Items.KinstoneX.0x71 - `SWAPBLUE` + !replace - Items.KinstoneX.0x72 - `SWAPBLUE` - !replace - Items.KinstoneX.73 - `SWAPGREEN` - !replace - Items.KinstoneX.74 - `SWAPGREEN` - !replace - Items.KinstoneX.75 - `SWAPGREEN` + !replace - Items.KinstoneX.0x73 - `SWAPGREEN` + !replace - Items.KinstoneX.0x74 - `SWAPGREEN` + !replace - Items.KinstoneX.0x75 - `SWAPGREEN` !endif !endif #!settype - Items.Rupee1 - Major @@ -300,147 +360,147 @@ # Music randomization values (kinda hard to read, unfortunately) !ifdef - MUSIC_RANDO - Area0Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12746b:SecondByte;; Items.LanternOff.01:Music - Area1Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12746f:SecondByte;; Items.LanternOff.06:Music - Area2Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127473:SecondByte;; Items.LanternOff.07:Music - Area3Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127477:SecondByte;; Items.LanternOff.08:Music - Area4Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12747b:SecondByte;; Items.LanternOff.2d:Music - Area5Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12747f:SecondByte;; Items.LanternOff.0a:Music - Area6Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127483:SecondByte;; Items.LanternOff.0b:Music - Area7Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127487:SecondByte;; Items.LanternOff.0d:Music - Area8Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12748b:SecondByte;; Items.LanternOff.0e:Music - Area9Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12748f:SecondByte;; Items.LanternOff.10:Music - AreaaMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 127493:SecondByte;; Items.LanternOff.11:Music - AreabMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 127497:SecondByte;; Items.LanternOff.13:Music - AreacMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 12749b:SecondByte;; Items.LanternOff.14:Music - AreadMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 12749f:SecondByte;; Items.LanternOff.15:Music - AreaeMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 1274a3:SecondByte;; Items.LanternOff.16:Music - AreafMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 1274a7:SecondByte;; Items.LanternOff.17:Music - Area10Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1274ab:SecondByte;; Items.LanternOff.18:Music - Area11Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1274af:SecondByte;; Items.LanternOff.19:Music - Area12Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1274b3:SecondByte;; Items.LanternOff.1a:Music - Area13Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1274b7:SecondByte;; Items.LanternOff.1b:Music - Area14Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1274bb:SecondByte;; Items.LanternOff.1c:Music - Area15Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1274bf:SecondByte;; Items.LanternOff.1d:Music - Area16Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1274c3:SecondByte;; Items.LanternOff.1e:Music - Area17Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1274c7:SecondByte;; Items.LanternOff.1f:Music - Area18Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1274cb:SecondByte;; Items.LanternOff.20:Music - Area19Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1274cf:SecondByte;; Items.LanternOff.21:Music - Area1aMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 1274d3:SecondByte;; Items.LanternOff.22:Music - Area1bMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 1274d7:SecondByte;; Items.LanternOff.23:Music - Area1cMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 1274db:SecondByte;; Items.LanternOff.24:Music - Area1dMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 1274df:SecondByte;; Items.LanternOff.25:Music - Area1eMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 1274e3:SecondByte;; Items.LanternOff.26:Music - Area1fMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 1274e7:SecondByte;; Items.LanternOff.27:Music - Area20Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1274eb:SecondByte;; Items.LanternOff.28:Music - Area21Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1274ef:SecondByte;; Items.LanternOff.29:Music - Area22Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1274f3:SecondByte;; Items.LanternOff.2a:Music - Area23Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1274f7:SecondByte;; Items.LanternOff.2b:Music - Area24Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1274fb:SecondByte;; Items.LanternOff.2c:Music - Area25Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1274ff:SecondByte;; Items.LanternOff.2d:Music - Area26Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127503:SecondByte;; Items.LanternOff.2e:Music - Area27Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127507:SecondByte;; Items.LanternOff.2f:Music - Area28Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12750b:SecondByte;; Items.LanternOff.30:Music - Area29Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12750f:SecondByte;; Items.LanternOff.31:Music - Area2aMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 127513:SecondByte;; Items.LanternOff.32:Music - Area2bMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 127517:SecondByte;; Items.LanternOff.33:Music - Area2cMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 12751b:SecondByte;; Items.LanternOff.34:Music - Area2dMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 12751f:SecondByte;; Items.LanternOff.35:Music - Area2eMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 127523:SecondByte;; Items.LanternOff.36:Music - Area2fMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 127527:SecondByte;; Items.LanternOff.37:Music - Area30Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12752b:SecondByte;; Items.LanternOff.38:Music - Area31Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12752f:SecondByte;; Items.LanternOff.39:Music - Area32Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127533:SecondByte;; Items.LanternOff.3a:Music - Area33Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127537:SecondByte;; Items.LanternOff.3b:Music - Area34Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12753b:SecondByte;; Items.LanternOff.01:Music - Area35Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12753f:SecondByte;; Items.LanternOff.06:Music - Area36Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127543:SecondByte;; Items.LanternOff.07:Music - Area37Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127547:SecondByte;; Items.LanternOff.08:Music - Area38Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12754b:SecondByte;; Items.LanternOff.2e:Music - Area39Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12754f:SecondByte;; Items.LanternOff.0a:Music - Area3aMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 127553:SecondByte;; Items.LanternOff.0b:Music - Area3bMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 127557:SecondByte;; Items.LanternOff.0d:Music - Area3cMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 12755b:SecondByte;; Items.LanternOff.0e:Music - Area3dMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 12755f:SecondByte;; Items.LanternOff.10:Music - Area3eMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 127563:SecondByte;; Items.LanternOff.11:Music - Area3fMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 127567:SecondByte;; Items.LanternOff.13:Music - Area40Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12756b:SecondByte;; Items.LanternOff.14:Music - Area41Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12756f:SecondByte;; Items.LanternOff.15:Music - Area42Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127573:SecondByte;; Items.LanternOff.16:Music - Area43Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127577:SecondByte;; Items.LanternOff.17:Music - Area44Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12757b:SecondByte;; Items.LanternOff.18:Music - Area45Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12757f:SecondByte;; Items.LanternOff.19:Music - Area46Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127583:SecondByte;; Items.LanternOff.1a:Music - Area47Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127587:SecondByte;; Items.LanternOff.1b:Music - Area48Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12758b:SecondByte;; Items.LanternOff.1c:Music - Area49Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12758f:SecondByte;; Items.LanternOff.1d:Music - Area4aMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 127593:SecondByte;; Items.LanternOff.1e:Music - Area4bMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 127597:SecondByte;; Items.LanternOff.1f:Music - Area4cMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 12759b:SecondByte;; Items.LanternOff.20:Music - Area4dMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 12759f:SecondByte;; Items.LanternOff.21:Music - Area4eMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 1275a3:SecondByte;; Items.LanternOff.22:Music - Area4fMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 1275a7:SecondByte;; Items.LanternOff.23:Music - Area50Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1275ab:SecondByte;; Items.LanternOff.24:Music - Area51Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1275af:SecondByte;; Items.LanternOff.25:Music - Area52Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1275b3:SecondByte;; Items.LanternOff.26:Music - Area53Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1275b7:SecondByte;; Items.LanternOff.27:Music - Area54Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1275bb:SecondByte;; Items.LanternOff.28:Music - Area55Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1275bf:SecondByte;; Items.LanternOff.29:Music - Area56Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1275c3:SecondByte;; Items.LanternOff.2a:Music - Area57Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1275c7:SecondByte;; Items.LanternOff.2b:Music - Area58Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1275cb:SecondByte;; Items.LanternOff.2c:Music - Area59Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1275cf:SecondByte;; Items.LanternOff.2d:Music - Area5aMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 1275d3:SecondByte;; Items.LanternOff.2e:Music - Area5bMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 1275d7:SecondByte;; Items.LanternOff.2f:Music - Area5cMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 1275db:SecondByte;; Items.LanternOff.30:Music - Area5dMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 1275df:SecondByte;; Items.LanternOff.31:Music - Area5eMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 1275e3:SecondByte;; Items.LanternOff.32:Music - Area5fMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 1275e7:SecondByte;; Items.LanternOff.33:Music - Area60Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1275eb:SecondByte;; Items.LanternOff.34:Music - Area61Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1275ef:SecondByte;; Items.LanternOff.35:Music - Area62Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1275f3:SecondByte;; Items.LanternOff.36:Music - Area63Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1275f7:SecondByte;; Items.LanternOff.37:Music - Area64Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1275fb:SecondByte;; Items.LanternOff.38:Music - Area65Music:Music; DungeonItem; musicScrap:Define:FirstByte, 1275ff:SecondByte;; Items.LanternOff.39:Music - Area66Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127603:SecondByte;; Items.LanternOff.3a:Music - Area67Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127607:SecondByte;; Items.LanternOff.3b:Music - Area68Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12760b:SecondByte;; Items.LanternOff.01:Music - Area69Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12760f:SecondByte;; Items.LanternOff.06:Music - Area6aMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 127613:SecondByte;; Items.LanternOff.07:Music - Area6bMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 127617:SecondByte;; Items.LanternOff.08:Music - Area6cMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 12761b:SecondByte;; Items.LanternOff.2f:Music - Area6dMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 12761f:SecondByte;; Items.LanternOff.0a:Music - Area6eMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 127623:SecondByte;; Items.LanternOff.0b:Music - Area6fMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 127627:SecondByte;; Items.LanternOff.0d:Music - Area70Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12762b:SecondByte;; Items.LanternOff.0e:Music - Area71Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12762f:SecondByte;; Items.LanternOff.10:Music - Area72Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127633:SecondByte;; Items.LanternOff.11:Music - Area73Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127637:SecondByte;; Items.LanternOff.13:Music - Area74Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12763b:SecondByte;; Items.LanternOff.14:Music - Area75Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12763f:SecondByte;; Items.LanternOff.15:Music - Area76Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127643:SecondByte;; Items.LanternOff.16:Music - Area77Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127647:SecondByte;; Items.LanternOff.17:Music - Area78Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12764b:SecondByte;; Items.LanternOff.18:Music - Area79Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12764f:SecondByte;; Items.LanternOff.19:Music - Area7aMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 127653:SecondByte;; Items.LanternOff.1a:Music - Area7bMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 127657:SecondByte;; Items.LanternOff.1b:Music - Area7cMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 12765b:SecondByte;; Items.LanternOff.1c:Music - Area7dMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 12765f:SecondByte;; Items.LanternOff.1d:Music - Area7eMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 127663:SecondByte;; Items.LanternOff.1e:Music - Area7fMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 127667:SecondByte;; Items.LanternOff.1f:Music - Area80Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12766b:SecondByte;; Items.LanternOff.20:Music - Area81Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12766f:SecondByte;; Items.LanternOff.21:Music - Area82Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127673:SecondByte;; Items.LanternOff.22:Music - Area83Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127677:SecondByte;; Items.LanternOff.23:Music - Area84Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12767b:SecondByte;; Items.LanternOff.24:Music - Area85Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12767f:SecondByte;; Items.LanternOff.25:Music - Area86Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127683:SecondByte;; Items.LanternOff.26:Music - Area87Music:Music; DungeonItem; musicScrap:Define:FirstByte, 127687:SecondByte;; Items.LanternOff.27:Music - Area88Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12768b:SecondByte;; Items.LanternOff.28:Music - Area89Music:Music; DungeonItem; musicScrap:Define:FirstByte, 12768f:SecondByte;; Items.LanternOff.29:Music - Area8aMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 127693:SecondByte;; Items.LanternOff.2a:Music - Area8bMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 127697:SecondByte;; Items.LanternOff.2b:Music - Area8cMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 12769b:SecondByte;; Items.LanternOff.2c:Music + Area0Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12746b:SecondByte;; Items.LanternOff.0x01:Music + Area1Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12746f:SecondByte;; Items.LanternOff.0x06:Music + Area2Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127473:SecondByte;; Items.LanternOff.0x07:Music + Area3Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127477:SecondByte;; Items.LanternOff.0x08:Music + Area4Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12747b:SecondByte;; Items.LanternOff.0x2d:Music + Area5Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12747f:SecondByte;; Items.LanternOff.0x0a:Music + Area6Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127483:SecondByte;; Items.LanternOff.0x0b:Music + Area7Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127487:SecondByte;; Items.LanternOff.0x0d:Music + Area8Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12748b:SecondByte;; Items.LanternOff.0x0e:Music + Area9Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12748f:SecondByte;; Items.LanternOff.0x10:Music + AreaaMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127493:SecondByte;; Items.LanternOff.0x11:Music + AreabMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127497:SecondByte;; Items.LanternOff.0x13:Music + AreacMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12749b:SecondByte;; Items.LanternOff.0x14:Music + AreadMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12749f:SecondByte;; Items.LanternOff.0x15:Music + AreaeMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274a3:SecondByte;; Items.LanternOff.0x16:Music + AreafMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274a7:SecondByte;; Items.LanternOff.0x17:Music + Area10Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274ab:SecondByte;; Items.LanternOff.0x18:Music + Area11Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274af:SecondByte;; Items.LanternOff.0x19:Music + Area12Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274b3:SecondByte;; Items.LanternOff.0x1a:Music + Area13Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274b7:SecondByte;; Items.LanternOff.0x1b:Music + Area14Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274bb:SecondByte;; Items.LanternOff.0x1c:Music + Area15Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274bf:SecondByte;; Items.LanternOff.0x1d:Music + Area16Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274c3:SecondByte;; Items.LanternOff.0x1e:Music + Area17Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274c7:SecondByte;; Items.LanternOff.0x1f:Music + Area18Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274cb:SecondByte;; Items.LanternOff.0x20:Music + Area19Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274cf:SecondByte;; Items.LanternOff.0x21:Music + Area1aMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274d3:SecondByte;; Items.LanternOff.0x22:Music + Area1bMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274d7:SecondByte;; Items.LanternOff.0x23:Music + Area1cMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274db:SecondByte;; Items.LanternOff.0x24:Music + Area1dMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274df:SecondByte;; Items.LanternOff.0x25:Music + Area1eMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274e3:SecondByte;; Items.LanternOff.0x26:Music + Area1fMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274e7:SecondByte;; Items.LanternOff.0x27:Music + Area20Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274eb:SecondByte;; Items.LanternOff.0x28:Music + Area21Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274ef:SecondByte;; Items.LanternOff.0x29:Music + Area22Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274f3:SecondByte;; Items.LanternOff.0x2a:Music + Area23Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274f7:SecondByte;; Items.LanternOff.0x2b:Music + Area24Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274fb:SecondByte;; Items.LanternOff.0x2c:Music + Area25Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1274ff:SecondByte;; Items.LanternOff.0x2d:Music + Area26Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127503:SecondByte;; Items.LanternOff.0x2e:Music + Area27Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127507:SecondByte;; Items.LanternOff.0x2f:Music + Area28Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12750b:SecondByte;; Items.LanternOff.0x30:Music + Area29Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12750f:SecondByte;; Items.LanternOff.0x31:Music + Area2aMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127513:SecondByte;; Items.LanternOff.0x32:Music + Area2bMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127517:SecondByte;; Items.LanternOff.0x33:Music + Area2cMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12751b:SecondByte;; Items.LanternOff.0x34:Music + Area2dMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12751f:SecondByte;; Items.LanternOff.0x35:Music + Area2eMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127523:SecondByte;; Items.LanternOff.0x36:Music + Area2fMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127527:SecondByte;; Items.LanternOff.0x37:Music + Area30Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12752b:SecondByte;; Items.LanternOff.0x38:Music + Area31Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12752f:SecondByte;; Items.LanternOff.0x39:Music + Area32Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127533:SecondByte;; Items.LanternOff.0x3a:Music + Area33Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127537:SecondByte;; Items.LanternOff.0x3b:Music + Area34Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12753b:SecondByte;; Items.LanternOff.0x01:Music + Area35Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12753f:SecondByte;; Items.LanternOff.0x06:Music + Area36Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127543:SecondByte;; Items.LanternOff.0x07:Music + Area37Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127547:SecondByte;; Items.LanternOff.0x08:Music + Area38Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12754b:SecondByte;; Items.LanternOff.0x2e:Music + Area39Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12754f:SecondByte;; Items.LanternOff.0x0a:Music + Area3aMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127553:SecondByte;; Items.LanternOff.0x0b:Music + Area3bMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127557:SecondByte;; Items.LanternOff.0x0d:Music + Area3cMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12755b:SecondByte;; Items.LanternOff.0x0e:Music + Area3dMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12755f:SecondByte;; Items.LanternOff.0x10:Music + Area3eMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127563:SecondByte;; Items.LanternOff.0x11:Music + Area3fMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127567:SecondByte;; Items.LanternOff.0x13:Music + Area40Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12756b:SecondByte;; Items.LanternOff.0x14:Music + Area41Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12756f:SecondByte;; Items.LanternOff.0x15:Music + Area42Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127573:SecondByte;; Items.LanternOff.0x16:Music + Area43Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127577:SecondByte;; Items.LanternOff.0x17:Music + Area44Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12757b:SecondByte;; Items.LanternOff.0x18:Music + Area45Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12757f:SecondByte;; Items.LanternOff.0x19:Music + Area46Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127583:SecondByte;; Items.LanternOff.0x1a:Music + Area47Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127587:SecondByte;; Items.LanternOff.0x1b:Music + Area48Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12758b:SecondByte;; Items.LanternOff.0x1c:Music + Area49Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12758f:SecondByte;; Items.LanternOff.0x1d:Music + Area4aMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127593:SecondByte;; Items.LanternOff.0x1e:Music + Area4bMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127597:SecondByte;; Items.LanternOff.0x1f:Music + Area4cMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12759b:SecondByte;; Items.LanternOff.0x20:Music + Area4dMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12759f:SecondByte;; Items.LanternOff.0x21:Music + Area4eMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275a3:SecondByte;; Items.LanternOff.0x22:Music + Area4fMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275a7:SecondByte;; Items.LanternOff.0x23:Music + Area50Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275ab:SecondByte;; Items.LanternOff.0x24:Music + Area51Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275af:SecondByte;; Items.LanternOff.0x25:Music + Area52Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275b3:SecondByte;; Items.LanternOff.0x26:Music + Area53Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275b7:SecondByte;; Items.LanternOff.0x27:Music + Area54Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275bb:SecondByte;; Items.LanternOff.0x28:Music + Area55Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275bf:SecondByte;; Items.LanternOff.0x29:Music + Area56Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275c3:SecondByte;; Items.LanternOff.0x2a:Music + Area57Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275c7:SecondByte;; Items.LanternOff.0x2b:Music + Area58Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275cb:SecondByte;; Items.LanternOff.0x2c:Music + Area59Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275cf:SecondByte;; Items.LanternOff.0x2d:Music + Area5aMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275d3:SecondByte;; Items.LanternOff.0x2e:Music + Area5bMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275d7:SecondByte;; Items.LanternOff.0x2f:Music + Area5cMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275db:SecondByte;; Items.LanternOff.0x30:Music + Area5dMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275df:SecondByte;; Items.LanternOff.0x31:Music + Area5eMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275e3:SecondByte;; Items.LanternOff.0x32:Music + Area5fMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275e7:SecondByte;; Items.LanternOff.0x33:Music + Area60Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275eb:SecondByte;; Items.LanternOff.0x34:Music + Area61Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275ef:SecondByte;; Items.LanternOff.0x35:Music + Area62Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275f3:SecondByte;; Items.LanternOff.0x36:Music + Area63Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275f7:SecondByte;; Items.LanternOff.0x37:Music + Area64Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275fb:SecondByte;; Items.LanternOff.0x38:Music + Area65Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x1275ff:SecondByte;; Items.LanternOff.0x39:Music + Area66Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127603:SecondByte;; Items.LanternOff.0x3a:Music + Area67Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127607:SecondByte;; Items.LanternOff.0x3b:Music + Area68Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12760b:SecondByte;; Items.LanternOff.0x01:Music + Area69Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12760f:SecondByte;; Items.LanternOff.0x06:Music + Area6aMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127613:SecondByte;; Items.LanternOff.0x07:Music + Area6bMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127617:SecondByte;; Items.LanternOff.0x08:Music + Area6cMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12761b:SecondByte;; Items.LanternOff.0x2f:Music + Area6dMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12761f:SecondByte;; Items.LanternOff.0x0a:Music + Area6eMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127623:SecondByte;; Items.LanternOff.0x0b:Music + Area6fMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127627:SecondByte;; Items.LanternOff.0x0d:Music + Area70Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12762b:SecondByte;; Items.LanternOff.0x0e:Music + Area71Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12762f:SecondByte;; Items.LanternOff.0x10:Music + Area72Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127633:SecondByte;; Items.LanternOff.0x11:Music + Area73Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127637:SecondByte;; Items.LanternOff.0x13:Music + Area74Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12763b:SecondByte;; Items.LanternOff.0x14:Music + Area75Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12763f:SecondByte;; Items.LanternOff.0x15:Music + Area76Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127643:SecondByte;; Items.LanternOff.0x16:Music + Area77Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127647:SecondByte;; Items.LanternOff.0x17:Music + Area78Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12764b:SecondByte;; Items.LanternOff.0x18:Music + Area79Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12764f:SecondByte;; Items.LanternOff.0x19:Music + Area7aMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127653:SecondByte;; Items.LanternOff.0x1a:Music + Area7bMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127657:SecondByte;; Items.LanternOff.0x1b:Music + Area7cMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12765b:SecondByte;; Items.LanternOff.0x1c:Music + Area7dMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12765f:SecondByte;; Items.LanternOff.0x1d:Music + Area7eMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127663:SecondByte;; Items.LanternOff.0x1e:Music + Area7fMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127667:SecondByte;; Items.LanternOff.0x1f:Music + Area80Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12766b:SecondByte;; Items.LanternOff.0x20:Music + Area81Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12766f:SecondByte;; Items.LanternOff.0x21:Music + Area82Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127673:SecondByte;; Items.LanternOff.0x22:Music + Area83Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127677:SecondByte;; Items.LanternOff.0x23:Music + Area84Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12767b:SecondByte;; Items.LanternOff.0x24:Music + Area85Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12767f:SecondByte;; Items.LanternOff.0x25:Music + Area86Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127683:SecondByte;; Items.LanternOff.0x26:Music + Area87Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127687:SecondByte;; Items.LanternOff.0x27:Music + Area88Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12768b:SecondByte;; Items.LanternOff.0x28:Music + Area89Music:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12768f:SecondByte;; Items.LanternOff.0x29:Music + Area8aMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127693:SecondByte;; Items.LanternOff.0x2a:Music + Area8bMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x127697:SecondByte;; Items.LanternOff.0x2b:Music + Area8cMusic:Music; DungeonItem; musicScrap:Define:FirstByte, 0x12769b:SecondByte;; Items.LanternOff.0x2c:Music !endif # Item Macro Helpers @@ -464,9 +524,10 @@ HasBoomerang; Helper;; (|Items.Boomerang, Items.MagicBoomerang) !endif HasBeam; Helper;; Helpers.HasSword, (|Items.SwordBeam, Items.PerilBeam) +CanDownThrust; Helper;; Helpers.HasSword, Items.DownThrust, Items.RocsCape CanDestroyTrees; Helper;; (|Helpers.HasSword, Helpers.HasLightBow, Items.BombBag ,Items.LanternOff) -Inaccessible; Helper;; Items.Untyped.FF::FF # ask for 255 of them for good measure +Inaccessible; Helper;; Items.Untyped.0xFF::0xFF # ask for 255 of them for good measure # Central Hyrule Locations @@ -481,337 +542,335 @@ Inaccessible; Helper;; Items.Untyped.FF::FF # ask for 255 of them for good m PedItem3; Major; pedestalSpot3Item:Define:FirstByte, pedestalSpot3Sub:Define:SecondByte; Helpers.Inaccessible; Items.SmithSword !endif -#TestCount; Minor; 000000; (+4, Helpers.CanDestroyTrees::1, Helpers.HasSword::1, Locations.HyruleWellLeft::1, Items.RocsCape::2) -SmithHouse; Minor; 22-11-00; ; -IntroItem1; Major; 0F252B; ; Items.SmithSword -IntroItem2; Major; 0F253B; ; Items.Shield -LinkMinishWaterHoleHeartPiece; Major; 0DB55F; Helpers.CanDestroyTrees ,Items.PegasusBoots, Items.Flippers; -HyruleWellTop; Major; 41-00-00; Items.BombBag; Items.Shield -HyruleWellLeft; Minor; 41-00-01; Items.MoleMitts; -HyruleWellBottom; Minor; 41-00-02; (|Items.Flippers, Items.RocsCape) -HyruleWellPillar; Minor; 41-00-03; Locations.HyruleWellLeft, Locations.HyruleWellRight, Locations.HyruleWellBottom, Helpers.CanSplit3 -HyruleWellRight; Minor; 41-00-04; ; -PreCastleCaveHeartPiece; Major; 0F864B; (|Items.Flippers, Items.RocsCape, Items.BombBag) -SwiftbladeScroll1; Major; swiftblade1DojoItem:Define:FirstByte, swiftblade1DojoSub:Define:SecondByte; Helpers.HasSword; Items.SpinAttack -SwiftbladeScroll2; Major; swiftblade2DojoItem:Define:FirstByte, swiftblade2DojoSub:Define:SecondByte; Items.SmithSword::2; Items.RockBreaker -SwiftbladeScroll3; Major; swiftblade3DojoItem:Define:FirstByte, swiftblade3DojoSub:Define:SecondByte; Helpers.HasSword, Items.PegasusBoots; Items.DashAttack -SwiftbladeScroll4; Major; swiftblade4DojoItem:Define:FirstByte, swiftblade4DojoSub:Define:SecondByte; Helpers.HasSword, Items.RocsCape; Items.DownThrust -GrimbladeHeartPiece; Major; 0D79BB; ; -GrimbladeScroll; Major; grimbladeDojoItem:Define:FirstByte, grimbladeDojoSub:Define:SecondByte; Helpers.HasSword, Items.LanternOff; Items.SwordBeam -CastleWildsWaterLeft; Major; 07-00-01; Items.Flippers; Items.BombBag # extra bomb bag for EU -CastleWildsWaterRight; Minor; 07-00-02; Items.Flippers -CafeLady; Minor; 00EDDA; ; Items.KinstoneX.RedSpike -HearthLedge; Minor; 02-00-06; Items.LanternOff; -HearthBackdoor; Major; 0D66D7; (|Items.Flippers, Items.PacciCane, Items.RocsCape) -SchoolTop; Minor; 02-00-07; Items.PacciCane; -SchoolGardenLeft; Minor; 11-02-00; Items.PacciCane, Helpers.CanSplit4 -SchoolGardenMiddle; Minor; 11-02-01; Items.PacciCane, Helpers.CanSplit4 -SchoolGardenRight; Minor; 11-02-02; Items.PacciCane, Helpers.CanSplit4 -SchoolGardenHeartPiece; Major; 0D5557; Items.PacciCane, Helpers.CanSplit4 -TownDiggingTop; Minor; 0F-00-00; Items.MoleMitts -TownDiggingRight; Minor; 0F-00-01; Items.MoleMitts -TownDiggingLeft; Minor; 0F-00-02; Items.MoleMitts -BakeryAttic; Minor; 2E-03-00; (|Items.PacciCane, Items.Flippers, Items.RocsCape) -StockWellAttic; Minor; 2E-01-01; (|Items.PacciCane, Items.Flippers, Items.RocsCape) -SimulationChest; Major; 0F04C2; Helpers.HasSword -RemShoeShop; Major; 0130EE; Items.WakeUpMushroom -Shop80Item; Major; walletShopItem:Define:FirstByte, walletShopSub:Define:SecondByte; (+50, Items.Rupee1, Items.Rupee5::5, Items.Rupee20::14, Items.Rupee50::32, Items.Rupee100::64, Items.Rupee200::C8); Items.Wallet -Shop300Item; Major; boomerangShopItem:Define:FirstByte, boomerangShopSub:Define:SecondByte; Items.Wallet, (+17C, Items.Rupee1, Items.Rupee5::5, Items.Rupee20::14, Items.Rupee50::32, Items.Rupee100::64, Items.Rupee200::C8); Items.Boomerang -Shop600Item; Major; quiverShopItem:Define:FirstByte, quiverShopSub:Define:SecondByte; Items.Wallet::3, (+3D4, Items.Rupee1, Items.Rupee5::5, Items.Rupee20::14, Items.Rupee50::32, Items.Rupee100::64, Items.Rupee200::C8); Items.LargeQuiver -ShopDogfoodItem; Major; dogShopItem:Define:FirstByte, dogShopSub:Define:SecondByte; (|Items.Flippers, Items.PacciCane, Items.RocsCape); Items.DogFoodBottle -CarlovReward; Major; carlovSpotItem:Define:FirstByte, carlovSpotSub:Define:SecondByte; (|Items.Flippers, Items.PacciCane, Items.RocsCape); Items.CarlovMedal -FigurineHouseLeft; Minor; 23-05-00; Items.CarlovMedal -FigurineHouseMiddle; Minor; 23-05-01; Items.CarlovMedal -FigurineHouseRight; Minor; 23-05-02; Items.CarlovMedal -FigurineHouseHeartPiece; Major; 0F5407; Items.CarlovMedal -JullietaBook; Major; redBookItem:Define:FirstByte, redBookSub:Define:SecondByte; Helpers.HasBottle, (|Items.Flippers, Items.PacciCane, Items.RocsCape); Items.HyruleanBestiary -WrightAtticBook; Major; greenBookItem:Define:FirstByte, greenBookSub:Define:SecondByte; Items.PowerBracelets, (|Items.Flippers, Items.PacciCane, Items.RocsCape), (|Items.GustJar, Items.BombBag), Helpers.CanSplit2; Items.PicoriLegend -FountainBig; Major; 62-03-00; Helpers.HasBottle, Items.PacciCane, Helpers.HasDamageSource -FountainSmall; Minor; 62-04-00; Helpers.HasBottle, (|Items.Flippers, Items.RocsCape) -FountainHeartPiece; Major; 0EF3B7; Helpers.HasBottle, Items.RocsCape -LibraryMinish; Minor; 00E7BE; Items.HyruleanBestiary, Items.PicoriLegend, Items.MaskHistory, Items.Ocarina, Items.PacciCane -CuccoMinigame; Minor; 12460C; (|Items.RocsCape, Items.Flippers) -TownBell; Minor; 05D602:FirstByte, 5D604:SecondByte; Items.RocsCape; Items.PieceOfHeart -FlipsCaveBig; Major; 62-10-00; Items.Ocarina, Helpers.HasDamageSource, Items.PacciCane, (|Items.Flippers, (&Items.HyruleanBestiary,Items.PicoriLegend,Items.MaskHistory, Items.GripRing, (|Items.GustJar, Items.RocsCape))) -FlipsCaveSmall; Minor; 62-12-00; Items.Flippers, Items.Ocarina, Items.PacciCane, Items.LanternOff -TingleTrophyItem; Major; 016966; Helpers.CanDestroyTrees, Items.PacciCane, Items.TingleTrophy; Items.TingleTrophy - -AccessEastField; Helper;; (|Helpers.CanDestroyTrees, Items.Ocarina) -HillsKeeseCave; Minor; 32-13-00; Items.BombBag -AboveHPHole; Minor; 27-00-00; Locations.AccessHyliaNorth, (|Items.PacciCane, Items.RocsCape) -LonLonPot; Major; 0F2C9B:FirstByte, 0F2C9D:SecondByte; Locations.AccessEastField -LonLonCave; Minor; 32-0C-00; Locations.AccessHyliaNorth, Helpers.CanSplit2 -LonLonCaveSecret; Minor; 32-0D-00; Locations.LonLonCave, Items.BombBag, Items.LanternOff; -LonLonHeartPiece; Major; 0D56EF; Locations.AccessHyliaNorth, Items.PegasusBoots -MinishRupeeFairy; Major; 00B7B4; Locations.AccessEastField, Items.PacciCane - -AccessWestField; Helper;; (|Items.RocsCape, (&Helpers.HasSword, Helpers.HasSpin), Items.Flippers, (&Items.BombBag, Helpers.CanSplit3)) -TrilbyBombCave; Minor; 32-07-00; Locations.AccessWestField, Helpers.CanSplit2, Items.BombBag -TrilbyMoleCaveLeft; Minor; 13-03-00; Locations.AccessWestField, Items.MoleMitts -TrilbyMoleCaveRight; Minor; 13-03-02; Locations.AccessWestField, Items.MoleMitts +SmithHouse; Minor; 0x22-0x11-0x00; ; +IntroItem1; Major; 0x0F252B; ; Items.SmithSword +IntroItem2; Major; 0x0F253B; ; Items.Shield +LinkMinishWaterHoleHeartPiece; Major; 0x0DB55F; Helpers.CanDestroyTrees ,Items.PegasusBoots, Items.Flippers; +HyruleWellTop; Major; 0x41-0x00-0x00; Items.BombBag; Items.Shield +HyruleWellLeft; Minor; 0x41-0x00-0x01; Items.MoleMitts; +HyruleWellBottom; Minor; 0x41-0x00-0x02; (|Items.Flippers, Items.RocsCape) +HyruleWellPillar; Minor; 0x41-0x00-0x03; Locations.HyruleWellLeft, Locations.HyruleWellRight, Locations.HyruleWellBottom, Helpers.CanSplit3 +HyruleWellRight; Minor; 0x41-0x00-0x04; ; +PreCastleCaveHeartPiece; Major; 0x0F864B; (|Items.Flippers, Items.RocsCape, Items.BombBag) +SwiftbladeScroll1; Major; swiftblade1DojoItem:Define:FirstByte, swiftblade1DojoSub:Define:SecondByte; Helpers.HasSword; Items.SpinAttack +SwiftbladeScroll2; Major; swiftblade2DojoItem:Define:FirstByte, swiftblade2DojoSub:Define:SecondByte; Items.SmithSword::2; Items.RockBreaker +SwiftbladeScroll3; Major; swiftblade3DojoItem:Define:FirstByte, swiftblade3DojoSub:Define:SecondByte; Helpers.HasSword, Items.PegasusBoots; Items.DashAttack +SwiftbladeScroll4; Major; swiftblade4DojoItem:Define:FirstByte, swiftblade4DojoSub:Define:SecondByte; Helpers.HasSword, Items.RocsCape; Items.DownThrust +GrimbladeHeartPiece; Major; 0x0D79BB; ; +GrimbladeScroll; Major; grimbladeDojoItem:Define:FirstByte, grimbladeDojoSub:Define:SecondByte; Helpers.HasSword, Items.LanternOff; Items.SwordBeam +CastleWaterLeft; Major; 0x07-0x00-0x01; Items.Flippers; Items.BombBag # extra bomb bag for EU +CastleWaterRight; Minor; 0x07-0x00-0x02; Items.Flippers +CafeLady; Minor; 0x00EDDA; ; Items.KinstoneX.RedSpike +HearthLedge; Minor; 0x02-0x00-0x06; Items.LanternOff; +HearthBackdoor; Major; 0x0D66D7; (|Items.Flippers, Items.PacciCane, Items.RocsCape) +SchoolTop; Minor; 0x02-0x00-0x07; Items.PacciCane; +SchoolGardenLeft; Minor; 0x11-0x02-0x00; Items.PacciCane, Helpers.CanSplit4 +SchoolGardenMiddle; Minor; 0x11-0x02-0x01; Items.PacciCane, Helpers.CanSplit4 +SchoolGardenRight; Minor; 0x11-0x02-0x02; Items.PacciCane, Helpers.CanSplit4 +SchoolGardenHeartPiece; Major; 0x0D5557; Items.PacciCane, Helpers.CanSplit4 +TownDiggingTop; Minor; 0x0F-0x00-0x00; Items.MoleMitts +TownDiggingRight; Minor; 0x0F-0x00-0x01; Items.MoleMitts +TownDiggingLeft; Minor; 0x0F-0x00-0x02; Items.MoleMitts +BakeryAttic; Minor; 0x2E-0x03-0x00; (|Items.PacciCane, Items.Flippers, Items.RocsCape) +StockWellAttic; Minor; 0x2E-0x01-0x01; (|Items.PacciCane, Items.Flippers, Items.RocsCape) +SimulationChest; Major; 0x0F04C2; Helpers.HasSword +RemShoeShop; Major; 0x0130EE; Items.WakeUpMushroom +Shop80Item; Major; walletShopItem:Define:FirstByte, walletShopSub:Define:SecondByte; (+80, Items.Rupee1, Items.Rupee5::5, Items.Rupee20::20, Items.Rupee50::50, Items.Rupee100::100, Items.Rupee200::200); Items.Wallet +Shop300Item; Major; boomerangShopItem:Define:FirstByte, boomerangShopSub:Define:SecondByte; Items.Wallet, (+380, Items.Rupee1, Items.Rupee5::5, Items.Rupee20::20, Items.Rupee50::50, Items.Rupee100::100, Items.Rupee200::200); Items.Boomerang +Shop600Item; Major; quiverShopItem:Define:FirstByte, quiverShopSub:Define:SecondByte; Items.Wallet::3, (+980, Items.Rupee1, Items.Rupee5::5, Items.Rupee20::20, Items.Rupee50::50, Items.Rupee100::100, Items.Rupee200::200); Items.LargeQuiver +ShopDogfoodItem; Major; dogShopItem:Define:FirstByte, dogShopSub:Define:SecondByte; (|Items.Flippers, Items.PacciCane, Items.RocsCape); Items.DogFoodBottle +CarlovReward; Major; carlovSpotItem:Define:FirstByte, carlovSpotSub:Define:SecondByte; (|Items.Flippers, Items.PacciCane, Items.RocsCape); Items.CarlovMedal +FigurineHouseLeft; Minor; 0x23-0x05-0x00; Items.CarlovMedal +FigurineHouseMiddle; Minor; 0x23-0x05-0x01; Items.CarlovMedal +FigurineHouseRight; Minor; 0x23-0x05-0x02; Items.CarlovMedal +FigurineHouseHeartPiece; Major; 0x0F5407; Items.CarlovMedal +JullietaBook; Major; redBookItem:Define:FirstByte, redBookSub:Define:SecondByte; Helpers.HasBottle, (|Items.Flippers, Items.PacciCane, Items.RocsCape); Items.HyruleanBestiary +WrightAtticBook; Major; greenBookItem:Define:FirstByte, greenBookSub:Define:SecondByte; Items.PowerBracelets, (|Items.Flippers, Items.PacciCane, Items.RocsCape), (|Items.GustJar, Items.BombBag), Helpers.CanSplit2; Items.PicoriLegend +FountainBig; Major; 0x62-0x03-0x00; Helpers.HasBottle, Items.PacciCane, Helpers.HasDamageSource +FountainSmall; Minor; 0x62-0x04-0x00; Helpers.HasBottle, (|Items.Flippers, Items.RocsCape) +FountainHeartPiece; Major; 0x0EF3B7; Helpers.HasBottle, Items.RocsCape +LibraryMinish; Minor; 0x00E7BE; Items.HyruleanBestiary, Items.PicoriLegend, Items.MaskHistory, Items.Ocarina, Items.PacciCane +CuccoMinigame; Minor; 0x12460C; (|Items.RocsCape, Items.Flippers) +TownBell; Minor; 0x05D602:FirstByte, 0x5D604:SecondByte; Items.RocsCape; Items.PieceOfHeart +FlipsCaveBig; Major; 0x62-0x10-0x00; Items.Ocarina, Helpers.HasDamageSource, Items.PacciCane, (|Items.Flippers, (&Items.HyruleanBestiary,Items.PicoriLegend,Items.MaskHistory, Items.GripRing, (|Items.GustJar, Items.RocsCape))) +FlipsCaveSmall; Minor; 0x62-0x12-0x00; Items.Flippers, Items.Ocarina, Items.PacciCane, Items.LanternOff +TingleTrophyItem; Major; 0x016966; Helpers.CanDestroyTrees, Items.PacciCane, Items.TingleTrophy; Items.TingleTrophy + +AccessEastField; Helper;; (|Helpers.CanDestroyTrees, Items.Ocarina) +HillsKeeseCave; Minor; 0x32-0x13-0x00; Items.BombBag +AboveHPHole; Minor; 0x27-0x00-0x00; Locations.AccessHyliaNorth, (|Items.PacciCane, Items.RocsCape) +LonLonPot; Major; 0x0F2C9B:FirstByte, 0x0F2C9D:SecondByte; Locations.AccessEastField +LonLonCave; Minor; 0x32-0x0C-0x00; Locations.AccessHyliaNorth, Helpers.CanSplit2 +LonLonCaveSecret; Minor; 0x32-0x0D-0x00; Locations.LonLonCave, Items.BombBag, Items.LanternOff; +LonLonHeartPiece; Major; 0x0D56EF; Locations.AccessHyliaNorth, Items.PegasusBoots +MinishRupeeFairy; Major; 0x00B7B4; Locations.AccessEastField, Items.PacciCane + +AccessWestField; Helper;; (|Items.RocsCape, (&Helpers.HasSword, Helpers.HasSpin), Items.Flippers, (&Items.BombBag, Helpers.CanSplit3)) +TrilbyBombCave; Minor; 0x32-0x07-0x00; Locations.AccessWestField, Helpers.CanSplit2, Items.BombBag +TrilbyMoleCaveLeft; Minor; 0x13-0x03-0x00; Locations.AccessWestField, Items.MoleMitts +TrilbyMoleCaveRight; Minor; 0x13-0x03-0x02; Locations.AccessWestField, Items.MoleMitts BottleScrub; Major; bottleScrubItem:Define:FirstByte, bottleScrubSub:Define:SecondByte; Items.Shield, Items.BombBag, Locations.AccessWestField; Items.Bottle4 #consistency # Minish Woods Locations -AccessMinishWoods; Helper;; Locations.AccessEastField -JabberNut; Major; 0DA283; Locations.AccessMinishWoods; Items.JabberNut -BelariBombs; Major; 00A00C; Locations.AccessMinishWoods, (|Locations.CompleteDeepwood,Items.BombBag) -MinishMiddleFlipperHole; Minor; 35-09-00; Locations.AccessMinishWoods, (|Locations.CompleteDeepwood,Items.BombBag), Items.Flippers -MinishRightFlipperHole; Minor; 35-09-01; Locations.AccessMinishWoods, (|Locations.CompleteDeepwood,Items.BombBag), Items.Flippers -MinishLeftFlipperHole; Minor; 35-09-02; Locations.AccessMinishWoods, (|Locations.CompleteDeepwood,Items.BombBag), Items.Flippers -MinishLeftFlipperHoleHeartPiece; Major; 0DB8BF; Locations.AccessMinishWoods, (|Locations.CompleteDeepwood,Items.BombBag), Items.Flippers -MinishLikeLikeDiggingCaveLeft; Minor; 0C-00-01; Locations.AccessMinishWoods, Items.MoleMitts -MinishLikeLikeDiggingCaveRight; Minor; 0C-00-02; Locations.AccessMinishWoods, Items.MoleMitts -MinishNorthHole; Minor; 35-05-00; Locations.AccessHyliaSouth, Items.Flippers, Items.PegasusBoots -MinishWitchHut; Major; 0F94D7; Locations.AccessMinishWoods, (|Items.Flippers, Items.RocsCape,(&Items.PacciCane,(|Items.Ocarina, Items.LonLonKey))) -MinishHeartPieceTop; Major; 0F4347; Locations.AccessMinishWoods, (|Items.Flippers, Items.RocsCape,(&Items.PacciCane,(|Items.Ocarina, Items.LonLonKey))) -MinishHeartPieceBottom; Major; 0F4357; Locations.AccessMinishWoods -MinishVillageHeartPiece; Major; 0DBCC7; Locations.AccessMinishWoods +AccessMinishWoods; Helper;; Locations.AccessEastField +JabberNut; Major; 0x0DA283; Locations.AccessMinishWoods; Items.JabberNut +BelariBombs; Major; 0x00A00C; Locations.AccessMinishWoods, (|Locations.CompleteDeepwood,Items.BombBag) +MinishMiddleFlipperHole; Minor; 0x35-0x09-0x00; Locations.AccessMinishWoods, (|Locations.CompleteDeepwood,Items.BombBag), Items.Flippers +MinishRightFlipperHole; Minor; 0x35-0x09-0x01; Locations.AccessMinishWoods, (|Locations.CompleteDeepwood,Items.BombBag), Items.Flippers +MinishLeftFlipperHole; Minor; 0x35-0x09-0x02; Locations.AccessMinishWoods, (|Locations.CompleteDeepwood,Items.BombBag), Items.Flippers +MinishLeftFlipperHoleHeartPiece; Major; 0x0DB8BF; Locations.AccessMinishWoods, (|Locations.CompleteDeepwood,Items.BombBag), Items.Flippers +MinishLikeLikeDiggingCaveLeft; Minor; 0x0C-0x00-0x01; Locations.AccessMinishWoods, Items.MoleMitts +MinishLikeLikeDiggingCaveRight; Minor; 0x0C-0x00-0x02; Locations.AccessMinishWoods, Items.MoleMitts +MinishNorthHole; Minor; 0x35-0x05-0x00; Locations.AccessHyliaSouth, Items.Flippers, Items.PegasusBoots +MinishWitchHut; Major; 0x0F94D7; Locations.AccessMinishWoods, (|Items.Flippers, Items.RocsCape,(&Items.PacciCane,(|Items.Ocarina, Items.LonLonKey))) +MinishHeartPieceTop; Major; 0x0F4347; Locations.AccessMinishWoods, (|Items.Flippers, Items.RocsCape,(&Items.PacciCane,(|Items.Ocarina, Items.LonLonKey))) +MinishHeartPieceBottom; Major; 0x0F4357; Locations.AccessMinishWoods +MinishVillageHeartPiece; Major; 0x0DBCC7; Locations.AccessMinishWoods # Mount Crenel Locations -AccessCrenel; Helper;; Locations.AccessWestField, Helpers.HasBottle, (|Items.BombBag, Items.GripRing) -AccessLowerCrenel; Helper;; Locations.AccessWestField, Helpers.HasBottle, (|Items.BombBag, (&Items.RocsCape, Items.GustJar)) -CrenelVineHole; Minor; 35-00-00; Locations.AccessLowerCrenel -CrenelMinishHouse; Minor; 27-03-00; Locations.AccessLowerCrenel -CrenelCaveDownstairs; Minor; 26-07-00; Locations.AccessCrenel, Items.BombBag -CrenelHeartCaveLeft; Minor; 26-08-00; Locations.AccessLowerCrenel, Items.BombBag -CrenelHeartCaveRight; Minor; 26-08-01; Locations.AccessLowerCrenel, Items.BombBag -CrenelHeartCaveHeartPiece; Major; 0FB32B; Locations.AccessLowerCrenel, Items.BombBag -CrenelFairyHeartPiece; Major; 0FB0BB; Locations.AccessCrenel, Items.BombBag -CrenelGripScrub; Major; gripScrubItem:Define:FirstByte, gripScrubSub:Define:SecondByte; Locations.AccessCrenel, Items.Shield, Items.BombBag; Items.GripRing -GraybladeLeft; Minor; 25-00-00; Locations.AccessCrenel, Helpers.CanSplit2, Items.GripRing -GraybladeRight; Minor; 25-00-01; Locations.AccessCrenel, Helpers.CanSplit2, Items.GripRing -GraybladeHeartPiece; Major; 0D752B; Locations.AccessCrenel, Helpers.CanSplit2, Items.GripRing -GraybladeScroll; Major; graybladeDojoItem:Define:FirstByte, graybladeDojoSub:Define:SecondByte; Locations.GraybladeHeartPiece, Helpers.HasSword; Items.RollAttack -CrenelBombFairy; Major; 00B828; Locations.AccessCrenel, Items.BombBag, Items.GripRing -CrenelDigCaveHeartPiece; Major; 0F3BA7; Locations.AccessCrenel, Items.GripRing, Items.MoleMitts -CrenelBlockChest; Minor; 26-03-00; Locations.AccessCrenel, (|Items.PacciCane, (&Items.GripRing, (|Items.RocsCape, Helpers.HasLightBow,(&Items.GustJar, (|Items.BombBag, Helpers.HasBow, Helpers.HasBoomerang, Helpers.HasBeam))))) -Melari; Major; 00D26E; Locations.CompleteCoF; Items.SmithSword +AccessCrenel; Helper;; Locations.AccessWestField, Helpers.HasBottle, (|Items.BombBag, Items.GripRing) +AccessLowerCrenel; Helper;; Locations.AccessWestField, Helpers.HasBottle, (|Items.BombBag, (&Items.RocsCape, Items.GustJar)) +CrenelVineHole; Minor; 0x35-0x00-0x00; Locations.AccessLowerCrenel +CrenelMinishHouse; Minor; 0x27-0x03-0x00; Locations.AccessLowerCrenel +CrenelCaveDownstairs; Minor; 0x26-0x07-0x00; Locations.AccessCrenel, Items.BombBag +CrenelHeartCaveLeft; Minor; 0x26-0x08-0x00; Locations.AccessLowerCrenel, Items.BombBag +CrenelHeartCaveRight; Minor; 0x26-0x08-0x01; Locations.AccessLowerCrenel, Items.BombBag +CrenelHeartCaveHeartPiece; Major; 0x0FB32B; Locations.AccessLowerCrenel, Items.BombBag +CrenelFairyHeartPiece; Major; 0x0FB0BB; Locations.AccessCrenel, Items.BombBag +CrenelGripScrub; Major; gripScrubItem:Define:FirstByte, gripScrubSub:Define:SecondByte; Locations.AccessCrenel, Items.Shield, Items.BombBag; Items.GripRing +GraybladeLeft; Minor; 0x25-0x00-0x00; Locations.AccessCrenel, Helpers.CanSplit2, Items.GripRing +GraybladeRight; Minor; 0x25-0x00-0x01; Locations.AccessCrenel, Helpers.CanSplit2, Items.GripRing +GraybladeHeartPiece; Major; 0x0D752B; Locations.AccessCrenel, Helpers.CanSplit2, Items.GripRing +GraybladeScroll; Major; graybladeDojoItem:Define:FirstByte, graybladeDojoSub:Define:SecondByte; Locations.GraybladeHeartPiece, Helpers.HasSword; Items.RollAttack +CrenelBombFairy; Major; 0x00B828; Locations.AccessCrenel, Items.BombBag, Items.GripRing +CrenelDigCaveHeartPiece; Major; 0x0F3BA7; Locations.AccessCrenel, Items.GripRing, Items.MoleMitts +CrenelBlockChest; Minor; 0x26-0x03-0x00; Locations.AccessCrenel, (|Items.PacciCane, (&Items.GripRing, (|Items.RocsCape, Helpers.HasLightBow,(&Items.GustJar, (|Items.BombBag, Helpers.HasBow, Helpers.HasBoomerang, Helpers.HasBeam))))) +Melari; Major; 0x00D26E; Locations.CompleteCoF; Items.SmithSword # Castor Wilds Locations -GotScrolls; Helper;; (+7, Items.SpinAttack, Items.RockBreaker, Items.DashAttack, Items.DownThrust, Items.RollAttack, Items.SwordBeam, Items.PerilBeam, Items.GreatSpin, Items.FastSpin, Items.FastSplit, Items.LongSpin); -AccessWilds; Helper;; Locations.AccessWestField, Helpers.CanSplit2, (|Items.PegasusBoots, Items.RocsCape) -WildsSouthCave; Major; 2A-00-00; Locations.AccessWilds, (|Items.Flippers, Items.RocsCape, Helpers.HasBow); Items.KinstoneX.YellowTotemProng -WildsDarknutCave; Major; 2B-00-00; Locations.AccessWilds, Helpers.HasSword; Items.KinstoneX.YellowTotemProng -WildsDekuCaveRight; Major; 2A-01-00; Locations.AccessWilds, Helpers.HasBow; Items.KinstoneX.YellowTotemProng -WildsMulldozerHole; Major; 27-06-00; Locations.AccessWilds, (|Items.Flippers, Items.GustJar); Items.Bow -WildsDiggingCaveLeft; Minor; 17-00-00; Locations.AccessWilds, Items.MoleMitts -WildsDiggingCaveRight; Minor; 17-00-01; Locations.AccessWilds, Items.MoleMitts -WildsTopChest; Minor; 04-00-00; Locations.AccessWilds, Helpers.HasBow -WildsTopRightCaveHeartPiece; Major; 0D9907; Locations.AccessWilds, Helpers.HasBow, (|Items.Flippers, Items.RocsCape) -SwiftbladeTheFirstHeartPiece; Major; 0D78CB; Locations.AccessWilds, (|Helpers.HasBow, Items.RocsCape, Items.Flippers) -SwiftbladeTheFirstScroll; Major; swiftbladeIDojoItem:Define:FirstByte, swiftbladeIDojoSub:Define:SecondByte; Helpers.HasSword, Locations.SwiftbladeTheFirstHeartPiece, Helpers.GotScrolls; Items.GreatSpin -RuinsBombCave; Minor; 2A-02-00; Locations.AccessWilds, (|Helpers.HasBow, Items.RocsCape, Items.Flippers), Items.KinstoneX.YellowTotemProng::3, Items.BombBag -RuinsMinishHome; Minor; 27-07-00; Locations.AccessWilds, (|Helpers.HasBow, Items.RocsCape, Items.Flippers), Items.KinstoneX.YellowTotemProng::3, Helpers.HasSword -RuinsMinishCaveHeartPiece; Major; 0DB4BF; Locations.AccessWilds, (|Helpers.HasBow, Items.RocsCape, Items.Flippers), Items.KinstoneX.YellowTotemProng::3, Helpers.HasSword -RuinsArmosKillLeft; Minor; 05-05-00; Locations.AccessWilds, (|Helpers.HasBow, Items.RocsCape, Items.Flippers), Items.KinstoneX.YellowTotemProng::3, Helpers.HasSword -RuinsArmosKillRight; Minor; 05-05-01; Locations.AccessWilds, (|Helpers.HasBow, Items.RocsCape, Items.Flippers), Items.KinstoneX.YellowTotemProng::3, Helpers.HasSword +GotScrolls; Helper;; (+7, Items.SpinAttack, Items.RockBreaker, Items.DashAttack, Items.DownThrust, Items.RollAttack, Items.SwordBeam, Items.PerilBeam, Items.GreatSpin, Items.FastSpin, Items.FastSplit, Items.LongSpin); +AccessWilds; Helper;; Locations.AccessWestField, Helpers.CanSplit2, (|Items.PegasusBoots, Items.RocsCape) +WildsSouthCave; Major; 0x2A-0x00-0x00; Locations.AccessWilds, (|Items.Flippers, Items.RocsCape, Helpers.HasBow); Items.KinstoneX.YellowTotemProng +WildsDarknutCave; Major; 0x2B-0x00-0x00; Locations.AccessWilds, Helpers.HasSword; Items.KinstoneX.YellowTotemProng +WildsDekuCaveRight; Major; 0x2A-0x01-0x00; Locations.AccessWilds, Helpers.HasBow; Items.KinstoneX.YellowTotemProng +WildsMulldozerHole; Major; 0x27-0x06-0x00; Locations.AccessWilds, (|Items.Flippers, Items.GustJar); Items.Bow +WildsDiggingCaveLeft; Minor; 0x17-0x00-0x00; Locations.AccessWilds, Items.MoleMitts +WildsDiggingCaveRight; Minor; 0x17-0x00-0x01; Locations.AccessWilds, Items.MoleMitts +WildsTopChest; Minor; 0x04-0x00-0x00; Locations.AccessWilds, Helpers.HasBow +WildsTopRightCaveHeartPiece; Major; 0x0D9907; Locations.AccessWilds, Helpers.HasBow, (|Items.Flippers, Items.RocsCape) +SwiftbladeTheFirstHeartPiece; Major; 0x0D78CB; Locations.AccessWilds, (|Helpers.HasBow, Items.RocsCape, Items.Flippers) +SwiftbladeTheFirstScroll; Major; swiftbladeIDojoItem:Define:FirstByte, swiftbladeIDojoSub:Define:SecondByte; Helpers.HasSword, Locations.SwiftbladeTheFirstHeartPiece, Helpers.GotScrolls; Items.GreatSpin +RuinsBombCave; Minor; 0x2A-0x02-0x00; Locations.AccessWilds, (|Helpers.HasBow, Items.RocsCape, Items.Flippers), Items.KinstoneX.YellowTotemProng::3, Items.BombBag +RuinsMinishHome; Minor; 0x27-0x07-0x00; Locations.AccessWilds, (|Helpers.HasBow, Items.RocsCape, Items.Flippers), Items.KinstoneX.YellowTotemProng::3, Helpers.HasSword +RuinsMinishCaveHeartPiece; Major; 0x0DB4BF; Locations.AccessWilds, (|Helpers.HasBow, Items.RocsCape, Items.Flippers), Items.KinstoneX.YellowTotemProng::3, Helpers.HasSword +RuinsArmosKillLeft; Minor; 0x05-0x05-0x00; Locations.AccessWilds, (|Helpers.HasBow, Items.RocsCape, Items.Flippers), Items.KinstoneX.YellowTotemProng::3, Helpers.HasSword +RuinsArmosKillRight; Minor; 0x05-0x05-0x01; Locations.AccessWilds, (|Helpers.HasBow, Items.RocsCape, Items.Flippers), Items.KinstoneX.YellowTotemProng::3, Helpers.HasSword # Lake Hylia Locations -AccessHyliaNorth; Helper;; Locations.AccessEastField,(|Items.RocsCape, Items.LonLonKey,Items.Ocarina,(&Items.Flippers, Items.MoleMitts)) -AccessHyliaSouth; Helper;; Locations.AccessHyliaNorth,(|Items.Flippers,Items.RocsCape,(&Items.MoleMitts,Items.PacciCane)) -StockwellDog; Major; 094908:FirstByte, 09490A:SecondByte; Locations.AccessHyliaNorth, Items.DogFoodBottle; Items.Bottle4 #consistency -HyliaNorthMinishHole; Minor; 35-07-00; Locations.AccessHyliaNorth, Items.Flippers, Items.PegasusBoots -HyliaMayorCabin; Major; blueBookItem:Define:FirstByte, blueBookSub:Define:SecondByte; Locations.AccessHyliaSouth, Items.PegasusBoots, Items.PowerBracelets, (|Items.GustJar, Items.Flippers); Items.MaskHistory -WitchDiggingCave; Minor; 0C-00-00; Locations.AccessHyliaSouth, Items.MoleMitts -HyliaSunkenHeartPiece; Major; 0F323B; Locations.AccessHyliaNorth, Items.Flippers -HyliaBottomHeartPiece; Major; 0F324B; Locations.AccessHyliaNorth, (|Items.Flippers, Items.RocsCape) -WavebladeHeartPiece; Major; 0D7B03; Locations.AccessHyliaNorth, (|Items.Flippers, Items.RocsCape) -WavebladeScroll; Major; wavebladeDojoItem:Define:FirstByte, wavebladeDojoSub:Define:SecondByte; (+1C, Items.PieceOfHeart, Items.HeartContainer::4), Helpers.HasSword, Locations.WavebladeHeartPiece; Items.PerilBeam - -AccessTreasureCave; Helper;; Locations.AccessHyliaNorth, Items.MoleMitts, Items.RocsCape -HyliaCapeCaveTopRight; Minor; 19-01-00; Locations.AccessTreasureCave -#TreasureCave1; Minor; 19-01-01; Locations.AccessTreasureCave #HyliaCapeCaveOOB (51,41) map is 26 high -HyliaCapeCaveBottomLeft; Minor; 19-01-02; Locations.AccessTreasureCave -HyliaCapeCaveTopLeft; Minor; 19-01-03; Locations.AccessTreasureCave -HyliaCapeCaveTopMiddle; Minor; 19-01-04; Locations.AccessTreasureCave -HyliaCapeCaveEntrance; Minor; 19-01-05; Locations.AccessTreasureCave -HyliaCapeCaveBottomRight; Minor; 19-01-06; Locations.AccessTreasureCave -HyliaCapeCaveBottomMiddle; Minor; 19-01-07; Locations.AccessTreasureCave -HyliaPostCapeCaveHeartPiece; Major; 0F6CEF; Locations.AccessTreasureCave -HyliaPreCapeCaveHeartPiece; Major; 0F322B; Locations.AccessHyliaNorth, Items.RocsCape +AccessHyliaNorth; Helper;; Locations.AccessEastField,(|Items.RocsCape, Items.LonLonKey,Items.Ocarina,(&Items.Flippers, Items.MoleMitts)) +AccessHyliaSouth; Helper;; Locations.AccessHyliaNorth,(|Items.Flippers,Items.RocsCape,(&Items.MoleMitts,Items.PacciCane)) +StockwellDog; Major; 0x094908:FirstByte, 0x09490A:SecondByte; Locations.AccessHyliaNorth, Items.DogFoodBottle; Items.Bottle4 #consistency +HyliaNorthMinishHole; Minor; 0x35-0x07-0x00; Locations.AccessHyliaNorth, Items.Flippers, Items.PegasusBoots +HyliaMayorCabin; Major; blueBookItem:Define:FirstByte, blueBookSub:Define:SecondByte; Locations.AccessHyliaSouth, Items.PegasusBoots, Items.PowerBracelets, (|Items.GustJar, Items.Flippers); Items.MaskHistory +WitchDiggingCave; Minor; 0x0C-0x00-0x00; Locations.AccessHyliaSouth, Items.MoleMitts +HyliaSunkenHeartPiece; Major; 0x0F323B; Locations.AccessHyliaNorth, Items.Flippers +HyliaBottomHeartPiece; Major; 0x0F324B; Locations.AccessHyliaNorth, (|Items.Flippers, Items.RocsCape) +WavebladeHeartPiece; Major; 0x0D7B03; Locations.AccessHyliaNorth, (|Items.Flippers, Items.RocsCape) +WavebladeScroll; Major; wavebladeDojoItem:Define:FirstByte, wavebladeDojoSub:Define:SecondByte; (+28, Items.PieceOfHeart, Items.HeartContainer::4), Helpers.HasSword, Locations.WavebladeHeartPiece; Items.PerilBeam + +AccessTreasureCave; Helper;; Locations.AccessHyliaNorth, Items.MoleMitts, Items.RocsCape +HyliaCapeCaveTopRight; Minor; 0x19-0x01-0x00; Locations.AccessTreasureCave +#TreasureCave1; Minor; 0x19-0x01-0x01; Locations.AccessTreasureCave #HyliaCapeCaveOOB (51,41) map is 26 high +HyliaCapeCaveBottomLeft; Minor; 0x19-0x01-0x02; Locations.AccessTreasureCave +HyliaCapeCaveTopLeft; Minor; 0x19-0x01-0x03; Locations.AccessTreasureCave +HyliaCapeCaveTopMiddle; Minor; 0x19-0x01-0x04; Locations.AccessTreasureCave +HyliaCapeCaveEntrance; Minor; 0x19-0x01-0x05; Locations.AccessTreasureCave +HyliaCapeCaveBottomRight; Minor; 0x19-0x01-0x06; Locations.AccessTreasureCave +HyliaCapeCaveBottomMiddle; Minor; 0x19-0x01-0x07; Locations.AccessTreasureCave +HyliaPostCapeCaveHeartPiece; Major; 0x0F6CEF; Locations.AccessTreasureCave +HyliaPreCapeCaveHeartPiece; Major; 0x0F322B; Locations.AccessHyliaNorth, Items.RocsCape # Royal Valley Locations -AccessValley; Helper;; Helpers.CanSplit3, (|Items.BombBag, Items.RocsCape, Items.Flippers), Items.LanternOff -ArrowFairy; Major; 00B722; Helpers.CanSplit3, Items.BombBag -DampeKey; Major; 0096B6; Locations.AccessValley -RoyalValleyGraveHeartPiece; Major; 0D8AE7; Locations.AccessValley, Items.GraveyardKey, Items.PegasusBoots -RoyalValleyLostWoodsChest; Minor; 0D8A86; Locations.AccessValley - -AccessCrypt; Helper; ; Locations.AccessValley, Items.GraveyardKey, Helpers.CanSplit3, Items.PegasusBoots -CryptGibdoLeft:Crypt; Minor; 0E688B; Locations.AccessCrypt; Items.Bombs5 -CryptGibdoRight:Crypt; `KEYSANITY_MAJOR`; 0E68AB; Locations.AccessCrypt; Items.SmallKey`RC_SET` -CryptLeft:Crypt; `KEYSANITY_MAJOR`; 0E6357; Locations.AccessCrypt, Items.SmallKey`RC_SET`; Items.SmallKey`RC_SET` -CryptRight:Crypt; `KEYSANITY_MAJOR`; 0E63A7; Locations.AccessCrypt, Items.SmallKey`RC_SET`; Items.SmallKey`RC_SET` -KingGift:`ELEMENT_DUNGEON`; Major; 00DA5A; Locations.AccessValley, Items.GraveyardKey, Helpers.CanSplit3, Items.PegasusBoots, Items.SmallKey`RC_SET`:3; Items.KinstoneX.YellowCrown +AccessValley; Helper;; Helpers.CanSplit3, (|Items.BombBag, Items.RocsCape, Items.Flippers), Items.LanternOff +ArrowFairy; Major; 0x00B722; Helpers.CanSplit3, Items.BombBag +DampeKey; Major; 0x0096B6; Locations.AccessValley +RoyalValleyGraveHeartPiece; Major; 0x0D8AE7; Locations.AccessValley, Items.GraveyardKey, Items.PegasusBoots +RoyalValleyLostWoodsChest; Minor; 0x0D8A86; Locations.AccessValley + +AccessCrypt; Helper; ; Locations.AccessValley, Items.GraveyardKey, Helpers.CanSplit3, Items.PegasusBoots +CryptGibdoLeft:Crypt; Minor; 0x0E688B; Locations.AccessCrypt; Items.Bombs5 +CryptGibdoRight:Crypt; `KEYSANITY_MAJOR`; 0x0E68AB; Locations.AccessCrypt; Items.SmallKey`RC_SET` +CryptLeft:Crypt; `KEYSANITY_MAJOR`; 0x0E6357; Locations.AccessCrypt, Items.SmallKey`RC_SET`; Items.SmallKey`RC_SET` +CryptRight:Crypt; `KEYSANITY_MAJOR`; 0x0E63A7; Locations.AccessCrypt, Items.SmallKey`RC_SET`; Items.SmallKey`RC_SET` +KingGift:`ELEMENT_DUNGEON`; Major; 0x00DA5A; Locations.AccessValley, Items.GraveyardKey, Helpers.CanSplit3, Items.PegasusBoots, Items.SmallKey`RC_SET`:3; Items.KinstoneX.YellowCrown # Veil Falls Locations -AccessFallsNorth; Helper;; Items.BombBag, Items.KinstoneX.YellowCrown, Items.LanternOff -FallsBehindWall; Minor; 33-05-00; Locations.AccessFallsNorth, Items.BombBag -FallsCliff; Minor; 0A-00-00; Locations.AccessFallsNorth, Items.BombBag, Helpers.CanSplit3 -FallsTopCaveBomb; Minor; 33-02-00; Locations.AccessFallsNorth, Items.GripRing, Items.BombBag -FallsTopCaveFree; Minor; 33-00-00; Locations.AccessFallsNorth, Items.GripRing -FallsUpperHeartPiece; Major; 0F87C3; Items.BombBag, (|Items.RocsCape, Items.Flippers) - -AccessFallsSouth; Helper;; Locations.AccessEastField, Items.PacciCane -FallsLowerCaveLeft; Minor; 16-00-01; Locations.AccessFallsSouth, (|Items.RocsCape, Items.Flippers), Items.MoleMitts -FallsLowerCaveRight; Minor; 16-00-02; Locations.AccessFallsSouth, (|Items.RocsCape, Items.Flippers), Items.MoleMitts -FallsLowerHeartPiece; Major; 0F87D3; Locations.AccessFallsSouth +AccessFallsNorth; Helper;; Items.BombBag, Items.KinstoneX.YellowCrown, Items.LanternOff +FallsBehindWall; Minor; 0x33-0x05-0x00; Locations.AccessFallsNorth, Items.BombBag +FallsCliff; Minor; 0x0A-0x00-0x00; Locations.AccessFallsNorth, Items.BombBag, Helpers.CanSplit3 +FallsTopCaveBomb; Minor; 0x33-0x02-0x00; Locations.AccessFallsNorth, Items.GripRing, Items.BombBag +FallsTopCaveFree; Minor; 0x33-0x00-0x00; Locations.AccessFallsNorth, Items.GripRing +FallsUpperHeartPiece; Major; 0x0F87C3; Items.BombBag, (|Items.RocsCape, Items.Flippers) + +AccessFallsSouth; Helper;; Locations.AccessEastField, Items.PacciCane +FallsLowerCaveLeft; Minor; 0x16-0x00-0x01; Locations.AccessFallsSouth, (|Items.RocsCape, Items.Flippers), Items.MoleMitts +FallsLowerCaveRight; Minor; 0x16-0x00-0x02; Locations.AccessFallsSouth, (|Items.RocsCape, Items.Flippers), Items.MoleMitts +FallsLowerHeartPiece; Major; 0x0F87D3; Locations.AccessFallsSouth # Cloud Tops Locations -AccessClouds; Helper;; Locations.AccessFallsNorth, Items.GripRing -CloudsFreeChest; Major; 08-01-00; Locations.AccessClouds; Items.KinstoneX.YellowTornadoProng -CloudsNorthKill; Major; 0DCEDF; Locations.AccessClouds, (|Items.RocsCape, Items.MoleMitts); Items.KinstoneX.YellowTornadoProng -CloudsSouthKill; Major; 0DCEEF; Locations.AccessClouds, (|Items.RocsCape, Items.MoleMitts); Items.KinstoneX.YellowTornadoProng -CloudsSouthMiddle; Major; 08-01-01; Locations.AccessClouds, (|Items.RocsCape, Items.MoleMitts); Items.KinstoneX.YellowTornadoProng -CloudsWestBottom; Major; 08-01-02; Locations.AccessClouds, (|Items.RocsCape, Items.MoleMitts); Items.KinstoneX.YellowTornadoProng -CloudsWestLeft; Minor; 08-01-03; Locations.AccessClouds, Items.MoleMitts -CloudsWestRight; Minor; 08-01-04; Locations.AccessClouds, Items.MoleMitts -CloudsSouthLeft; Minor; 08-01-05; Locations.AccessClouds, Items.MoleMitts -CloudsSouthRight; Minor; 08-01-06; Locations.AccessClouds, (|Items.RocsCape, Items.MoleMitts) - -AccessUpperClouds; Helper;; Locations.AccessClouds, (|Items.RocsCape, Items.MoleMitts), Items.KinstoneX.YellowTornadoProng::5 +AccessClouds; Helper;; Locations.AccessFallsNorth, Items.GripRing +CloudsFreeChest; Major; 0x08-0x01-0x00; Locations.AccessClouds; Items.KinstoneX.YellowTornadoProng +CloudsNorthKill; Major; 0x0DCEDF; Locations.AccessClouds, (|Items.RocsCape, Items.MoleMitts); Items.KinstoneX.YellowTornadoProng +CloudsSouthKill; Major; 0x0DCEEF; Locations.AccessClouds, (|Items.RocsCape, Items.MoleMitts); Items.KinstoneX.YellowTornadoProng +CloudsSouthMiddle; Major; 0x08-0x01-0x01; Locations.AccessClouds, (|Items.RocsCape, Items.MoleMitts); Items.KinstoneX.YellowTornadoProng +CloudsWestBottom; Major; 0x08-0x01-0x02; Locations.AccessClouds, (|Items.RocsCape, Items.MoleMitts); Items.KinstoneX.YellowTornadoProng +CloudsWestLeft; Minor; 0x08-0x01-0x03; Locations.AccessClouds, Items.MoleMitts +CloudsWestRight; Minor; 0x08-0x01-0x04; Locations.AccessClouds, Items.MoleMitts +CloudsSouthLeft; Minor; 0x08-0x01-0x05; Locations.AccessClouds, Items.MoleMitts +CloudsSouthRight; Minor; 0x08-0x01-0x06; Locations.AccessClouds, (|Items.RocsCape, Items.MoleMitts) + +AccessUpperClouds; Helper;; Locations.AccessClouds, (|Items.RocsCape, Items.MoleMitts), Items.KinstoneX.YellowTornadoProng::5 !ifndef - OPENFUSIONS - TowerBottomLeft; Minor; 30-00-00; Locations.AccessUpperClouds; - TowerBottomRight; Minor; 30-00-01; Locations.AccessUpperClouds; - TowerF2; Minor; 30-01-00; Locations.AccessUpperClouds; - GregalOne; Minor; 014C5C; Locations.AccessUpperClouds, Items.GustJar + TowerBottomLeft; Minor; 0x30-0x00-0x00; Locations.AccessUpperClouds; + TowerBottomRight; Minor; 0x30-0x00-0x01; Locations.AccessUpperClouds; + TowerF2; Minor; 0x30-0x01-0x00; Locations.AccessUpperClouds; + GregalOne; Minor; 0x014C5C; Locations.AccessUpperClouds, Items.GustJar !else - TowerBottomLeft; Minor; 30-00-00; ; - TowerBottomRight; Minor; 30-00-01; ; - TowerF2; Minor; 30-01-00; ; - GregalOne; Minor; 014C5C; Items.GustJar + TowerBottomLeft; Minor; 0x30-0x00-0x00; ; + TowerBottomRight; Minor; 0x30-0x00-0x01; ; + TowerF2; Minor; 0x30-0x01-0x00; ; + GregalOne; Minor; 0x014C5C; Items.GustJar !endif -GregalTwo; Major; 014CBC; Locations.AccessUpperClouds, Items.GustJar; Items.Bow -TowerRightBed; Minor; 30-02-00; Locations.AccessUpperClouds -TowerMiddleBed; Minor; 30-02-01; Locations.AccessUpperClouds -TowerLeftBed; Minor; 30-02-02; Locations.AccessUpperClouds -TowerTopLeft; Minor; 30-03-00; Locations.AccessUpperClouds -TowerTopRight; Minor; 30-03-01; Locations.AccessUpperClouds +GregalTwo; Major; 0x014CBC; Locations.AccessUpperClouds, Items.GustJar; Items.Bow +TowerRightBed; Minor; 0x30-0x02-0x00; Locations.AccessUpperClouds +TowerMiddleBed; Minor; 0x30-0x02-0x01; Locations.AccessUpperClouds +TowerLeftBed; Minor; 0x30-0x02-0x02; Locations.AccessUpperClouds +TowerTopLeft; Minor; 0x30-0x03-0x00; Locations.AccessUpperClouds +TowerTopRight; Minor; 0x30-0x03-0x01; Locations.AccessUpperClouds # Deepwood locations -DeepwoodAccess:Deepwood; Helper; ; Locations.AccessMinishWoods, (|Items.JabberNut, Items.Flippers) -DeepwoodWiggler:Deepwood; Major; 48-00-01; Locations.DeepwoodAccess, Helpers.HasSword, (|Items.SmallKey`DWS_SET`:4,(&Items.SmallKey`DWS_SET`:2, Items.LanternOff),(&Items.SmallKey`DWS_SET`, Items.LanternOff, Items.GustJar)) -DeepwoodPostWigglerHeartPiece:Deepwood; Major; 0DE1F7; Locations.DeepwoodAccess, (|Items.GustJar, Items.LanternOff), (|Items.SmallKey`DWS_SET`:4,(&Items.SmallKey`DWS_SET`:2, Items.LanternOff),(&Items.SmallKey`DWS_SET`, Items.LanternOff, Items.GustJar)) -DeepwoodPreWigglerLeft:Deepwood; Minor; 48-01-01; Locations.DeepwoodAccess, (|(&Items.GustJar, Items.SmallKey`DWS_SET`), (&Items.BombBag, Items.SmallKey`DWS_SET`:2)) -DeepwoodPreWigglerRight:Deepwood; Minor; 48-01-02; Locations.DeepwoodAccess, (|(&Items.GustJar, Items.SmallKey`DWS_SET`), (&Items.BombBag, Items.SmallKey`DWS_SET`:2)) -DeepwoodPreWigglerHeartPiece:Deepwood; Major; 0DDE03; Locations.DeepwoodAccess, (|(&Items.GustJar, Items.SmallKey`DWS_SET`), (&Items.BombBag, Items.SmallKey`DWS_SET`:2)) -DeepwoodPreCompass:Deepwood; Minor; 48-02-01; Locations.DeepwoodAccess, (|(&Items.GustJar, Items.SmallKey`DWS_SET`), (&Items.BombBag, Items.SmallKey`DWS_SET`:2)) -DeepwoodMulldozers:Deepwood; `KEYSANITY_MAJOR`; 0DE51B; Locations.DeepwoodAccess, Items.SmallKey`DWS_SET`:4, Helpers.HasDamageSource; Items.SmallKey`DWS_SET` -DeepwoodStatueRoom:Deepwood; `KEYSANITY_MAJOR`; 48-04-01; Locations.DeepwoodAccess, Items.SmallKey`DWS_SET`; Items.SmallKey`DWS_SET` -DeepwoodWestWing:Deepwood; `KEYSANITY_MINOR`; 48-05-01; Locations.DeepwoodAccess, Items.SmallKey`DWS_SET`; Items.Compass`DWS_SET` -DeepwoodPreBarrel:Deepwood; Minor; 48-06-01; Locations.DeepwoodAccess, (|Items.GustJar, Items.BombBag), Items.SmallKey`DWS_SET` -DeepwoodSlugTorches:Deepwood; `KEYSANITY_MAJOR`; 48-10-01; Locations.DeepwoodAccess; Items.SmallKey`DWS_SET` -DeepwoodBasementNorth:Deepwood; `KEYSANITY_MAJOR`; 48-11-01; Locations.DeepwoodAccess, Items.GustJar, Items.SmallKey`DWS_SET`:4; Items.BigKey`DWS_SET` -DeepwoodBasementSwitch:Deepwood; `KEYSANITY_MAJOR`; 48-12-01; Locations.DeepwoodAccess, (|(&Items.GustJar, Items.SmallKey`DWS_SET`), (&Items.SmallKey`DWS_SET`:2, Items.RocsCape)); Items.SmallKey`DWS_SET` -DeepwoodBasementEast:Deepwood; `KEYSANITY_MINOR`; 48-12-02; Locations.DeepwoodAccess, (|(&Items.GustJar, Items.SmallKey`DWS_SET`), Items.SmallKey`DWS_SET`:2); Items.DungeonMap`DWS_SET` -DeepwoodUpstairsChest:Deepwood; Minor; 48-17-01; Locations.DeepwoodAccess, (|Items.GustJar, Items.LanternOff) -CompleteDeepwood:Deepwood; Helper; ; Locations.DeepwoodAccess, Items.GustJar, Helpers.HasSword, Items.BigKey`DWS_SET` -DeepwoodBossItem:Deepwood; Major; chuContainerItem:Define:FirstByte, chuContainerSub:Define:SecondByte; Locations.CompleteDeepwood; Items.HeartContainer -DeepwoodPrize:`ELEMENT_DUNGEON`; `ELEMENT`; 0DF03B; Locations.CompleteDeepwood +DeepwoodAccess:Deepwood; Helper; ; Locations.AccessMinishWoods, (|Items.JabberNut, Items.Flippers) +DeepwoodWiggler:Deepwood; Major; 0x48-0x00-0x01; Locations.DeepwoodAccess, Helpers.HasSword, (|Items.SmallKey`DWS_SET`:4,(&Items.SmallKey`DWS_SET`:2, Items.LanternOff),(&Items.SmallKey`DWS_SET`, Items.LanternOff, Items.GustJar)) +DeepwoodPostWigglerHeartPiece:Deepwood; Major; 0x0DE1F7; Locations.DeepwoodAccess, (|Items.GustJar, Items.LanternOff), (|Items.SmallKey`DWS_SET`:4,(&Items.SmallKey`DWS_SET`:2, Items.LanternOff),(&Items.SmallKey`DWS_SET`, Items.LanternOff, Items.GustJar)) +DeepwoodPreWigglerLeft:Deepwood; Minor; 0x48-0x01-0x01; Locations.DeepwoodAccess, (|(&Items.GustJar, Items.SmallKey`DWS_SET`), (&Items.BombBag, Items.SmallKey`DWS_SET`:2)) +DeepwoodPreWigglerRight:Deepwood; Minor; 0x48-0x01-0x02; Locations.DeepwoodAccess, (|(&Items.GustJar, Items.SmallKey`DWS_SET`), (&Items.BombBag, Items.SmallKey`DWS_SET`:2)) +DeepwoodPreWigglerHeartPiece:Deepwood; Major; 0x0DDE03; Locations.DeepwoodAccess, (|(&Items.GustJar, Items.SmallKey`DWS_SET`), (&Items.BombBag, Items.SmallKey`DWS_SET`:2)) +DeepwoodPreCompass:Deepwood; Minor; 0x48-0x02-0x01; Locations.DeepwoodAccess, (|(&Items.GustJar, Items.SmallKey`DWS_SET`), (&Items.BombBag, Items.SmallKey`DWS_SET`:2)) +DeepwoodMulldozers:Deepwood; `KEYSANITY_MAJOR`; 0x0DE51B; Locations.DeepwoodAccess, Items.SmallKey`DWS_SET`:4, Helpers.HasDamageSource; Items.SmallKey`DWS_SET` +DeepwoodStatueRoom:Deepwood; `KEYSANITY_MAJOR`; 0x48-0x04-0x01; Locations.DeepwoodAccess, Items.SmallKey`DWS_SET`; Items.SmallKey`DWS_SET` +DeepwoodWestWing:Deepwood; `KEYSANITY_MINOR`; 0x48-0x05-0x01; Locations.DeepwoodAccess, Items.SmallKey`DWS_SET`; Items.Compass`DWS_SET` +DeepwoodPreBarrel:Deepwood; Minor; 0x48-0x06-0x01; Locations.DeepwoodAccess, (|Items.GustJar, Items.BombBag), Items.SmallKey`DWS_SET` +DeepwoodSlugTorches:Deepwood; `KEYSANITY_MAJOR`; 0x48-0x10-0x01; Locations.DeepwoodAccess; Items.SmallKey`DWS_SET` +DeepwoodBasementNorth:Deepwood; `KEYSANITY_MAJOR`; 0x48-0x11-0x01; Locations.DeepwoodAccess, Items.GustJar, Items.SmallKey`DWS_SET`:4; Items.BigKey`DWS_SET` +DeepwoodBasementSwitch:Deepwood; `KEYSANITY_MAJOR`; 0x48-0x12-0x01; Locations.DeepwoodAccess, (|(&Items.GustJar, Items.SmallKey`DWS_SET`), (&Items.SmallKey`DWS_SET`:2, Items.RocsCape)); Items.SmallKey`DWS_SET` +DeepwoodBasementEast:Deepwood; `KEYSANITY_MINOR`; 0x48-0x12-0x02; Locations.DeepwoodAccess, (|(&Items.GustJar, Items.SmallKey`DWS_SET`), Items.SmallKey`DWS_SET`:2); Items.DungeonMap`DWS_SET` +DeepwoodUpstairsChest:Deepwood; Minor; 0x48-0x17-0x01; Locations.DeepwoodAccess, (|Items.GustJar, Items.LanternOff) +CompleteDeepwood:Deepwood; Helper; ; Locations.DeepwoodAccess, Items.GustJar, Helpers.HasSword, Items.BigKey`DWS_SET` +DeepwoodBossItem:Deepwood; Major; chuContainerItem:Define:FirstByte, chuContainerSub:Define:SecondByte; Locations.CompleteDeepwood; Items.HeartContainer +DeepwoodPrize:`ELEMENT_DUNGEON`; `ELEMENT`; 0x0DF03B; Locations.CompleteDeepwood # Cave of Flames locations -CoFAccess:FlameCave; Helper; ; Locations.AccessCrenel,(|Items.PacciCane, (&Items.GripRing, (|Items.RocsCape, Helpers.HasLightBow,(&Items.GustJar, (|Items.BombBag, Helpers.HasBow, Helpers.HasBoomerang))))), (|Items.BombBag, Items.Shield, Items.PacciCane), Helpers.HasDamageSource -CoFFlippedCart:FlameCave; `KEYSANITY_MAJOR`; 50-01-01; Locations.CoFAccess, Helpers.HasSword, Items.PacciCane, Items.SmallKey`COF_SET`; Items.SmallKey`COF_SET` -CoFHeartPiece:FlameCave; Major; 0DFC9F; Locations.CoFAccess, Items.BombBag, Helpers.HasSword, Items.SmallKey`COF_SET` -CoFChuPit:FlameCave; Major; 50-01-02; Locations.CoFAccess, Items.SmallKey`COF_SET`, Helpers.HasSword -CoFPillBugsPillarChest:FlameCave; `KEYSANITY_MAJOR`; 50-08-00; Locations.CoFAccess; Items.SmallKey`COF_SET` -CoFPillBugsHoleChest:FlameCave; Minor; 50-08-01; Locations.CoFAccess -CoFSoutheastSmall:FlameCave; Minor; 50-09-00; Locations.CoFAccess -CoFSoutheastBig:FlameCave; `KEYSANITY_MINOR`; 50-09-01; Locations.CoFAccess; Items.Compass`COF_SET` -CoFBasementTop:FlameCave; Minor; 50-10-00; Locations.CoFAccess, Items.PacciCane, Helpers.HasSword, Items.SmallKey`COF_SET`:2 -CoFBasementBottom:FlameCave; Minor; 50-10-01; Locations.CoFAccess, Items.PacciCane, Helpers.HasSword, Items.SmallKey`COF_SET`:2 -CoFBlades:FlameCave; Minor; 50-14-00; Locations.CoFAccess, Items.PacciCane, Helpers.HasSword, Items.SmallKey`COF_SET`:2 -CoFSpinies:FlameCave; `KEYSANITY_MINOR`; 50-15-00; Locations.CoFAccess; Items.DungeonMap`COF_SET` -CoFBasementLavaLeft:FlameCave; Minor; 50-17-00; Locations.CoFAccess, Items.PacciCane, Helpers.HasSword, Items.SmallKey`COF_SET`:2 -CoFBasementLavaRight:FlameCave; Minor; 50-17-01; Locations.CoFAccess, Items.PacciCane, Helpers.HasSword, Items.SmallKey`COF_SET`:2 -CoFBasementLavaBig:FlameCave; `KEYSANITY_MAJOR`; 50-17-02; Locations.CoFAccess, Items.PacciCane, Helpers.HasSword, Items.SmallKey`COF_SET`:2; Items.BigKey`COF_SET` -CompleteCoF:FlameCave; Helper; ; Locations.CoFAccess, Items.PacciCane, Items.SmallKey`COF_SET`:2, Items.BigKey`COF_SET` -CoFBossItem:FlameCave; Major; gleerokContainerItem:Define:FirstByte, gleerokContainerSub:Define:SecondByte; Locations.CompleteCoF; Items.HeartContainer -CoFPrize:`ELEMENT_DUNGEON`; `ELEMENT`; 0E0F03; Locations.CompleteCoF +CoFAccess:FlameCave; Helper; ; Locations.AccessCrenel,(|Items.PacciCane, (&Items.GripRing, (|Items.RocsCape, Helpers.HasLightBow,(&Items.GustJar, (|Items.BombBag, Helpers.HasBow, Helpers.HasBoomerang, Helpers.HasBeam))))), (|Items.BombBag, Items.Shield, Items.PacciCane, Helpers.CanDownThrust), Helpers.HasDamageSource +CoFFlippedCart:FlameCave; `KEYSANITY_MAJOR`; 0x50-0x01-0x01; Locations.CoFAccess, Helpers.HasSword, Items.PacciCane, Items.SmallKey`COF_SET`; Items.SmallKey`COF_SET` +CoFHeartPiece:FlameCave; Major; 0x0DFC9F; Locations.CoFAccess, Items.BombBag, Helpers.HasSword, Items.SmallKey`COF_SET` +CoFChuPit:FlameCave; Major; 0x50-0x01-0x02; Locations.CoFAccess, Items.SmallKey`COF_SET`, Helpers.HasSword +CoFPillBugsPillarChest:FlameCave; `KEYSANITY_MAJOR`; 0x50-0x08-0x00; Locations.CoFAccess; Items.SmallKey`COF_SET` +CoFPillBugsHoleChest:FlameCave; Minor; 0x50-0x08-0x01; Locations.CoFAccess +CoFSoutheastSmall:FlameCave; Minor; 0x50-0x09-0x00; Locations.CoFAccess +CoFSoutheastBig:FlameCave; `KEYSANITY_MINOR`; 0x50-0x09-0x01; Locations.CoFAccess; Items.Compass`COF_SET` +CoFBasementTop:FlameCave; Minor; 0x50-0x10-0x00; Locations.CoFAccess, Items.PacciCane, Helpers.HasSword, Items.SmallKey`COF_SET`:2 +CoFBasementBottom:FlameCave; Minor; 0x50-0x10-0x01; Locations.CoFAccess, Items.PacciCane, Helpers.HasSword, Items.SmallKey`COF_SET`:2 +CoFBlades:FlameCave; Minor; 0x50-0x14-0x00; Locations.CoFAccess, Items.PacciCane, Helpers.HasSword, Items.SmallKey`COF_SET`:2 +CoFSpinies:FlameCave; `KEYSANITY_MINOR`; 0x50-0x15-0x00; Locations.CoFAccess; Items.DungeonMap`COF_SET` +CoFBasementLavaLeft:FlameCave; Minor; 0x50-0x17-0x00; Locations.CoFAccess, Items.PacciCane, Helpers.HasSword, Items.SmallKey`COF_SET`:2 +CoFBasementLavaRight:FlameCave; Minor; 0x50-0x17-0x01; Locations.CoFAccess, Items.PacciCane, Helpers.HasSword, Items.SmallKey`COF_SET`:2 +CoFBasementLavaBig:FlameCave; `KEYSANITY_MAJOR`; 0x50-0x17-0x02; Locations.CoFAccess, Items.PacciCane, Helpers.HasSword, Items.SmallKey`COF_SET`:2; Items.BigKey`COF_SET` +CompleteCoF:FlameCave; Helper; ; Locations.CoFAccess, Items.PacciCane, Items.SmallKey`COF_SET`:2, Items.BigKey`COF_SET` +CoFBossItem:FlameCave; Major; gleerokContainerItem:Define:FirstByte, gleerokContainerSub:Define:SecondByte; Locations.CompleteCoF; Items.HeartContainer +CoFPrize:`ELEMENT_DUNGEON`; `ELEMENT`; 0x0E0F03; Locations.CompleteCoF # Fortress of Winds Locations -AccessFortress:Fortress; Helper; ; Locations.AccessWilds, Items.KinstoneX.YellowTotemProng::3, (|Helpers.HasBow, Items.RocsCape, Items.Flippers) -FortressEntrance:Fortress; Minor; 18-00-00; Locations.AccessFortress, Items.MoleMitts -FortressHeartPiece:Fortress; Major; 0E2DD7; Locations.AccessFortress, Helpers.CanSplit2 -FortressOutsideF2Left:Fortress; Minor; 18-01-00; Locations.AccessFortress, Items.MoleMitts, Helpers.HasBow -FortressOutsideF2Middle:Fortress; Minor; 18-01-01; Locations.AccessFortress, Items.MoleMitts -FortressOutsideF2Right:Fortress; Minor; 18-01-02; Locations.AccessFortress, Items.MoleMitts -FortressOutsideF3Left:Fortress; Minor; 18-02-00; Locations.AccessFortress, Items.MoleMitts, Helpers.HasBow -FortressOutsideF3Right:Fortress; Minor; 18-02-01; Locations.AccessFortress, Items.MoleMitts -FortressOutsideBombWallBigChest:Fortress; Major; 18-03-00; Locations.AccessFortress, Items.BombBag, Helpers.HasBow, Helpers.CanSplit2, Items.SmallKey`FOW_SET`:4 -FortressOutsideBombWallSmallChest:Fortress; Minor; 18-03-01; Locations.FortressOutsideBombWallBigChest, Items.MoleMitts -FortressOutsideMinishHole:Fortress; `KEYSANITY_MAJOR`; 0F424F; Locations.AccessFortress, Helpers.HasBow, Items.MoleMitts, Items.SmallKey`FOW_SET`:3; Items.SmallKey`FOW_SET` -FortressRightDrop:Fortress; `KEYSANITY_MAJOR`; fowRightItem:Define:FirstByte,fowRightSub:Define:SecondByte; Locations.AccessFortress, Helpers.CanSplit2; Items.SmallKey`FOW_SET` -FortressLeftDrop:Fortress; `KEYSANITY_MAJOR`; fowLeftItem:Define:FirstByte,fowLeftSub:Define:SecondByte; Locations.AccessFortress, Helpers.HasBow, (|Helpers.CanSplit2, Items.RocsCape); Items.SmallKey`FOW_SET` -FortressClonePuzzle:Fortress; `KEYSANITY_MAJOR`; 0E1E8B; Locations.AccessFortress, Helpers.HasBow, Helpers.CanSplit2 ,Items.SmallKey`FOW_SET`:2; Items.SmallKey`FOW_SET` -FortressEyegoreKill:Fortress; `KEYSANITY_MINOR`; 58-00-00; Locations.AccessFortress, Helpers.HasBow, Helpers.CanSplit2; Items.DungeonMap`FOW_SET` -FortressPedestal:Fortress; `KEYSANITY_MINOR`; 58-19-00; Locations.AccessFortress, Helpers.HasBow; Items.Compass`FOW_SET` -FortressSkullFall:Fortress; `KEYSANITY_MAJOR`; 58-1B-00; Locations.AccessFortress, Items.MoleMitts, Helpers.CanSplit2, Helpers.HasBow, Items.SmallKey`FOW_SET`:4; Items.BigKey`FOW_SET` -FortressSkullRoomLeft:Fortress; Minor; 58-1D-00; Locations.AccessFortress -FortressSkullRoomRight:Fortress; Minor; 58-1D-01; Locations.AccessFortress -FortressWizrobes:Fortress; Minor; 58-23-00; Locations.AccessFortress, Items.MoleMitts -CompleteFortress:Fortress; Helper; ; Locations.AccessFortress, Items.MoleMitts, Helpers.CanSplit2, Helpers.HasBow, Items.BigKey`FOW_SET` -FortressBossItem:Fortress; Major; mazaalContainerItem:Define:FirstByte, mazaalContainerSub:Define:SecondByte; Locations.CompleteFortress; Items.HeartContainer -FortressPrize:`ELEMENT_DUNGEON`; Major; 09C9E6:FirstByte, 09C9E8:SecondByte; Locations.CompleteFortress +AccessFortress:Fortress; Helper; ; Locations.AccessWilds, Items.KinstoneX.YellowTotemProng::3, (|Helpers.HasBow, Items.RocsCape, Items.Flippers) +FortressEntrance:Fortress; Minor; 0x18-0x00-0x00; Locations.AccessFortress, Items.MoleMitts +FortressHeartPiece:Fortress; Major; 0x0E2DD7; Locations.AccessFortress, Helpers.CanSplit2 +FortressOutsideF2Left:Fortress; Minor; 0x18-0x01-0x00; Locations.AccessFortress, Items.MoleMitts, Helpers.HasBow +FortressOutsideF2Middle:Fortress; Minor; 0x18-0x01-0x01; Locations.AccessFortress, Items.MoleMitts +FortressOutsideF2Right:Fortress; Minor; 0x18-0x01-0x02; Locations.AccessFortress, Items.MoleMitts +FortressOutsideF3Left:Fortress; Minor; 0x18-0x02-0x00; Locations.AccessFortress, Items.MoleMitts, Helpers.HasBow +FortressOutsideF3Right:Fortress; Minor; 0x18-0x02-0x01; Locations.AccessFortress, Items.MoleMitts +FortressOutsideBombWallBigChest:Fortress; Major; 0x18-0x03-0x00; Locations.AccessFortress, Items.BombBag, Helpers.HasBow, Helpers.CanSplit2, Items.SmallKey`FOW_SET`:4 +FortressOutsideBombWallSmallChest:Fortress; Minor; 0x18-0x03-0x01; Locations.FortressOutsideBombWallBigChest, Items.MoleMitts +FortressOutsideMinishHole:Fortress; `KEYSANITY_MAJOR`; 0x0F424F; Locations.AccessFortress, Helpers.HasBow, Items.MoleMitts, Items.SmallKey`FOW_SET`:3; Items.SmallKey`FOW_SET` +FortressRightDrop:Fortress; `KEYSANITY_MAJOR`; fowRightItem:Define:FirstByte,fowRightSub:Define:SecondByte; Locations.AccessFortress, Helpers.CanSplit2; Items.SmallKey`FOW_SET` +FortressLeftDrop:Fortress; `KEYSANITY_MAJOR`; fowLeftItem:Define:FirstByte,fowLeftSub:Define:SecondByte; Locations.AccessFortress, Helpers.HasBow, (|Helpers.CanSplit2, Items.RocsCape); Items.SmallKey`FOW_SET` +FortressClonePuzzle:Fortress; `KEYSANITY_MAJOR`; 0x0E1E8B; Locations.AccessFortress, Helpers.HasBow, Helpers.CanSplit2 ,Items.SmallKey`FOW_SET`:2; Items.SmallKey`FOW_SET` +FortressEyegoreKill:Fortress; `KEYSANITY_MINOR`; 0x58-0x00-0x00; Locations.AccessFortress, Helpers.HasBow, Helpers.CanSplit2; Items.DungeonMap`FOW_SET` +FortressPedestal:Fortress; `KEYSANITY_MINOR`; 0x58-0x19-0x00; Locations.AccessFortress, Helpers.HasBow; Items.Compass`FOW_SET` +FortressSkullFall:Fortress; `KEYSANITY_MAJOR`; 0x58-0x1B-0x00; Locations.AccessFortress, Items.MoleMitts, Helpers.CanSplit2, Helpers.HasBow, Items.SmallKey`FOW_SET`:4; Items.BigKey`FOW_SET` +FortressSkullRoomLeft:Fortress; Minor; 0x58-0x1D-0x00; Locations.AccessFortress +FortressSkullRoomRight:Fortress; Minor; 0x58-0x1D-0x01; Locations.AccessFortress +FortressWizrobes:Fortress; Minor; 0x58-0x23-0x00; Locations.AccessFortress, Items.MoleMitts +CompleteFortress:Fortress; Helper; ; Locations.AccessFortress, Items.MoleMitts, Helpers.CanSplit2, Helpers.HasBow, Items.BigKey`FOW_SET` +FortressBossItem:Fortress; Major; mazaalContainerItem:Define:FirstByte, mazaalContainerSub:Define:SecondByte; Locations.CompleteFortress; Items.HeartContainer +FortressPrize:`ELEMENT_DUNGEON`; Major; 0x09C9E6:FirstByte, 0x09C9E8:SecondByte; Locations.CompleteFortress # Temple of Droplets Locations -AccessDroplets:Droplets; Helper; ; Locations.AccessHyliaSouth, (|Items.Flippers, Items.RocsCape) -DropletsMulldozers:Droplets; `KEYSANITY_MAJOR`; 0E55CB; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.LanternOff, Items.BombBag, Helpers.HasDamageSource; Items.SmallKey`TOD_SET` -DropletsWaterPot:Droplets; `KEYSANITY_MAJOR`; 0E5BC7; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers, (|Items.RocsCape, Items.GustJar); Items.SmallKey`TOD_SET` +AccessDroplets:Droplets; Helper; ; Locations.AccessHyliaSouth, (|Items.Flippers, Items.RocsCape) +DropletsMulldozers:Droplets; `KEYSANITY_MAJOR`; 0x0E55CB; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.LanternOff, Items.BombBag, Helpers.HasDamageSource; Items.SmallKey`TOD_SET` +DropletsWaterPot:Droplets; `KEYSANITY_MAJOR`; 0x0E5BC7; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers, (|Items.RocsCape, Items.GustJar); Items.SmallKey`TOD_SET` +DropletsSecondIceblock:Droplets; `KEYSANITY_MAJOR`; 0x098C3C:FirstByte, 0x098C3E:SecondByte ; Locations.AccessDroplets, Items.SmallKey`TOD_SET`:4; Items.SmallKey`TOD_SET` !ifdef - KEYSANITY - DropletsFirstIceblock:Droplets; `KEYSANITY_MAJOR`; 098C1A:FirstByte, 098C1C:SecondByte; Locations.AccessDroplets; Items.SmallKey`TOD_SET` - DropletsSecondIceblock:Droplets; `KEYSANITY_MAJOR`; 098C3C:FirstByte, 098C3E:SecondByte ; Locations.AccessDroplets, Items.SmallKey`TOD_SET`:4; Items.BigKey`TOD_SET` + DropletsFirstIceblock:Droplets; `KEYSANITY_MAJOR`; 0x098C1A:FirstByte, 0x098C1C:SecondByte; Locations.AccessDroplets; Items.BigKey`TOD_SET` !else - DropletsFirstIceblock:Droplets; Unshuffled; 098C1A:FirstByte, 098C1C:SecondByte; Locations.AccessDroplets; Items.SmallKey`TOD_SET` - DropletsSecondIceblock:Droplets; Unshuffled; 098C3C:FirstByte, 098C3E:SecondByte ; Locations.AccessDroplets, Items.SmallKey`TOD_SET`; Items.BigKey`TOD_SET` + DropletsFirstIceblock:Droplets; Unshuffled; 0x098C1A:FirstByte, 0x098C1C:SecondByte; Locations.AccessDroplets; Items.BigKey`TOD_SET` !endif DropletsBottomJump:Droplets; Helper; ; Items.LanternOff, Items.RocsCape, Helpers.HasDamageSource, Items.SmallKey`TOD_SET`:4; DropletsEastLever:Droplets; Helper; ; Locations.AccessDroplets, Items.BigKey`TOD_SET`, (|Helpers.DropletsBottomJump, (&Items.GustJar, Items.Flippers, Items.SmallKey`TOD_SET`:4)), Helpers.CanSplit2 -DropletsWestLever:Droplets; Helper; ; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.LanternOff, (|Items.Flippers, Items.RocsCape), Items.SmallKey`TOD_SET`:4, Helpers.CanSplit2 -DropletsEastFirst:Droplets; Minor; 60-09-00; Locations.AccessDroplets, Items.BigKey`TOD_SET`, (|Items.LanternOff, Locations.DropletsEastLever) -DropletsIceMaze:Droplets; Minor; 60-0A-00; Locations.AccessDroplets, Items.BigKey`TOD_SET`, (|Items.LanternOff, Locations.DropletsEastLever) -DropletsOverhang:Droplets; `KEYSANITY_MINOR`; 60-0D-00; Locations.AccessDroplets, Items.BigKey`TOD_SET`; Items.DungeonMap`TOD_SET` -DropletsBluChu:Droplets; Major; 60-10-01; Locations.AccessDroplets, Items.BigKey`TOD_SET`, (|Items.LanternOff, Locations.DropletsEastLever), Items.GustJar, Items.SmallKey`TOD_SET`:4; -DropletsBasement:Droplets; `KEYSANITY_MAJOR`; 60-11-00; Locations.AccessDroplets, Items.BigKey`TOD_SET`, (|Items.LanternOff, Locations.DropletsEastLever); Items.SmallKey`TOD_SET` -DropletsFrozenIcePlain:Droplets; Minor; 60-28-00; Locations.AccessDroplets, Items.BigKey`TOD_SET`, (|Helpers.DropletsBottomJump,(&Items.SmallKey`TOD_SET`:4, Items.GustJar, Items.Flippers, Items.LanternOff)); -DropletsFreeIcePlain:Droplets; Minor; 60-28-01; Locations.AccessDroplets, Items.BigKey`TOD_SET`, (|Helpers.DropletsBottomJump,(&Items.SmallKey`TOD_SET`:4, Items.GustJar, Items.Flippers)); -DropletsDarkMazeRight:Droplets; Minor; 60-2B-01; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.LanternOff, Helpers.HasDamageSource -DropletsDarkMazeLeft:Droplets; Minor; 60-2B-02; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.LanternOff, Helpers.HasDamageSource -DropletsDarkMazeMiddle:Droplets; Minor; 60-2B-03; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.LanternOff, Helpers.HasDamageSource -DropletsPostTwinFrozen:Droplets; Minor; 60-2D-00; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.GustJar, Items.LanternOff, (|Helpers.DropletsBottomJump,(&Items.SmallKey`TOD_SET`:4,Items.Flippers)); -DropletsPreviewFrozen:Droplets; Minor; 60-32-00; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.LanternOff; -DropletsIceWiggler:Droplets; `KEYSANITY_MINOR`; 60-32-01; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.GustJar, (|Helpers.DropletsBottomJump,(&Items.SmallKey`TOD_SET`:4, Items.Flippers)); Items.Compass`TOD_SET` +DropletsWestLever:Droplets; Helper; ; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.LanternOff, Items.Flippers, Items.SmallKey`TOD_SET`:4, Helpers.CanSplit2 +DropletsEastFirst:Droplets; Minor; 0x60-0x09-0x00; Locations.AccessDroplets, Items.BigKey`TOD_SET`, (|Items.LanternOff, Locations.DropletsEastLever) +DropletsIceMaze:Droplets; Minor; 0x60-0x0A-0x00; Locations.AccessDroplets, Items.BigKey`TOD_SET`, (|Items.LanternOff, Locations.DropletsEastLever) +DropletsOverhang:Droplets; `KEYSANITY_MINOR`; 0x60-0x0D-0x00; Locations.AccessDroplets, Items.BigKey`TOD_SET`; Items.DungeonMap`TOD_SET` +DropletsBluChu:Droplets; Major; 0x60-0x10-0x01; Locations.AccessDroplets, Items.BigKey`TOD_SET`, (|Items.LanternOff, Locations.DropletsEastLever), Items.GustJar, Items.SmallKey`TOD_SET`:4; +DropletsBasement:Droplets; `KEYSANITY_MAJOR`; 0x60-0x11-0x00; Locations.AccessDroplets, Items.BigKey`TOD_SET`, (|Items.LanternOff, Locations.DropletsEastLever); Items.SmallKey`TOD_SET` +DropletsFrozenIcePlain:Droplets; Minor; 0x60-0x28-0x00; Locations.AccessDroplets, Items.BigKey`TOD_SET`, (|Helpers.DropletsBottomJump,(&Items.SmallKey`TOD_SET`:4, Items.GustJar, Items.Flippers, Items.LanternOff)); +DropletsFreeIcePlain:Droplets; Minor; 0x60-0x28-0x01; Locations.AccessDroplets, Items.BigKey`TOD_SET`, (|Helpers.DropletsBottomJump,(&Items.SmallKey`TOD_SET`:4, Items.GustJar, Items.Flippers)); +DropletsDarkMazeRight:Droplets; Minor; 0x60-0x2B-0x01; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.LanternOff, Helpers.HasDamageSource +DropletsDarkMazeLeft:Droplets; Minor; 0x60-0x2B-0x02; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.LanternOff, Helpers.HasDamageSource +DropletsDarkMazeMiddle:Droplets; Minor; 0x60-0x2B-0x03; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.LanternOff, Helpers.HasDamageSource +DropletsPostTwinFrozen:Droplets; Minor; 0x60-0x2D-0x00; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.GustJar, Items.LanternOff, (|Helpers.DropletsBottomJump,(&Items.SmallKey`TOD_SET`:4,Items.Flippers)); +DropletsPreviewFrozen:Droplets; Minor; 0x60-0x32-0x00; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.LanternOff; +DropletsIceWiggler:Droplets; `KEYSANITY_MINOR`; 0x60-0x32-0x01; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.GustJar, (|Helpers.DropletsBottomJump,(&Items.SmallKey`TOD_SET`:4, Items.Flippers)); Items.Compass`TOD_SET` CompleteDroplets:Droplets; Helper; ; Locations.DropletsEastLever, Locations.DropletsWestLever, Items.LanternOff, Helpers.HasSword DropletsBossItem:Droplets; Major; octoContainerItem:Define:FirstByte, octoContainerSub:Define:SecondByte; Locations.CompleteDroplets; Items.HeartContainer -DropletsPrize:`ELEMENT_DUNGEON`; `ELEMENT`; 0E40C3; Locations.CompleteDroplets +DropletsPrize:`ELEMENT_DUNGEON`; `ELEMENT`; 0x0E40C3; Locations.CompleteDroplets # Palace of Winds Locations AccessPalace:Palace; Helper; ; Locations.AccessUpperClouds, Helpers.CanSplit3, (|Items.RocsCape, Items.BombBag, Items.GustJar, Helpers.HasBoomerang, Helpers.HasBow) -PalaceWizrobeKill:Palace; Major; 70-2C-00; Locations.AccessPalace, (|Items.RocsCape, Items.BombBag, Helpers.HasBoomerang) -PalaceFirstGrate:Palace; Minor; 70-2D-00; Locations.AccessPalace, Items.RocsCape -PalaceBraceletPuzzleKey:Palace; `KEYSANITY_MAJOR`; 0E896F; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.PowerBracelets, (|Items.BombBag, Helpers.HasBoomerang, Helpers.HasBow); Items.SmallKey`POW_SET` -PalaceWideGap:Palace; Minor; 70-0F-00; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.SmallKey`POW_SET` -PalaceBallAndChainSoldiers:Palace; `KEYSANITY_MAJOR`; 0E719F; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.SmallKey`POW_SET`; Items.SmallKey`POW_SET` -PalaceFanLoop:Palace; `KEYSANITY_MAJOR`; 70-07-00; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.SmallKey`POW_SET`:5; Items.SmallKey`POW_SET` -PalacePreBigDoor:Palace; `KEYSANITY_MAJOR`; 70-01-00; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.SmallKey`POW_SET`:6; Items.BigKey`POW_SET` -PalaceDarkBig:Palace; `KEYSANITY_MINOR`; 70-32-00; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.LanternOff, Items.BigKey`POW_SET`, Items.SmallKey`POW_SET`:3; Items.Compass`POW_SET` -PalaceDarkSmall:Palace; `KEYSANITY_MAJOR`; 70-32-01; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.LanternOff, Items.BigKey`POW_SET`, Items.SmallKey`POW_SET`:3; Items.SmallKey`POW_SET` -PalaceManyRollers:Palace; `KEYSANITY_MAJOR`; 70-2B-00; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.LanternOff, Items.BigKey`POW_SET`, Items.SmallKey`POW_SET`:3; Items.SmallKey`POW_SET` -PalaceTwinWizrobes:Palace; Minor; 70-29-00; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.LanternOff, Items.BigKey`POW_SET`, Items.SmallKey`POW_SET`:4 -PalaceFirerobeTrio:Palace; `KEYSANITY_MINOR`; 70-1C-00; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.LanternOff, Items.BigKey`POW_SET`, Items.SmallKey`POW_SET`:4; Items.DungeonMap`POW_SET` -PalaceHeartPiece:Palace; Major; 0E77A7; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.LanternOff, Items.BigKey`POW_SET`, Items.SmallKey`POW_SET`:4 -PalaceSwitchHit:Palace; Minor; 70-15-00; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.LanternOff, Items.BigKey`POW_SET`, Items.SmallKey`POW_SET`:4 -PalacePreBoss:Palace; `KEYSANITY_MAJOR`; 70-03-00; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.LanternOff, Items.BigKey`POW_SET`, Items.SmallKey`POW_SET`:5; Items.SmallKey`POW_SET` -PalaceBlockMaze:Palace; Minor; 70-10-00; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.LanternOff, Items.BigKey`POW_SET`, Items.SmallKey`POW_SET`:6 -PalaceDetour:Palace; Minor; 70-04-00; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.LanternOff, Items.BigKey`POW_SET`, Items.SmallKey`POW_SET`:6 +PalaceWizrobeKill:Palace; Major; 0x70-0x2C-0x00; Locations.AccessPalace, (|Items.RocsCape, Items.BombBag, Helpers.HasBoomerang) +PalaceFirstGrate:Palace; Minor; 0x70-0x2D-0x00; Locations.AccessPalace, Items.RocsCape +PalaceBraceletPuzzleKey:Palace; `KEYSANITY_MAJOR`; 0x0E896F; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.PowerBracelets, (|Items.BombBag, Helpers.HasBoomerang, Helpers.HasBow); Items.SmallKey`POW_SET` +PalaceWideGap:Palace; Minor; 0x70-0x0F-0x00; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.SmallKey`POW_SET` +PalaceBallAndChainSoldiers:Palace; `KEYSANITY_MAJOR`; 0x0E719F; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.SmallKey`POW_SET`; Items.SmallKey`POW_SET` +PalaceFanLoop:Palace; `KEYSANITY_MAJOR`; 0x70-0x07-0x00; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.SmallKey`POW_SET`:5; Items.SmallKey`POW_SET` +PalacePreBigDoor:Palace; `KEYSANITY_MAJOR`; 0x70-0x01-0x00; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.SmallKey`POW_SET`:6; Items.BigKey`POW_SET` +PalaceDarkBig:Palace; `KEYSANITY_MINOR`; 0x70-0x32-0x00; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.LanternOff, Items.BigKey`POW_SET`, Items.SmallKey`POW_SET`:3; Items.Compass`POW_SET` +PalaceDarkSmall:Palace; `KEYSANITY_MAJOR`; 0x70-0x32-0x01; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.LanternOff, Items.BigKey`POW_SET`, Items.SmallKey`POW_SET`:3; Items.SmallKey`POW_SET` +PalaceManyRollers:Palace; `KEYSANITY_MAJOR`; 0x70-0x2B-0x00; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.LanternOff, Items.BigKey`POW_SET`, Items.SmallKey`POW_SET`:3; Items.SmallKey`POW_SET` +PalaceTwinWizrobes:Palace; Minor; 0x70-0x29-0x00; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.LanternOff, Items.BigKey`POW_SET`, Items.SmallKey`POW_SET`:4 +PalaceFirerobeTrio:Palace; `KEYSANITY_MINOR`; 0x70-0x1C-0x00; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.LanternOff, Items.BigKey`POW_SET`, Items.SmallKey`POW_SET`:4; Items.DungeonMap`POW_SET` +PalaceHeartPiece:Palace; Major; 0x0E77A7; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.LanternOff, Items.BigKey`POW_SET`, Items.SmallKey`POW_SET`:4 +PalaceSwitchHit:Palace; Minor; 0x70-0x15-0x00; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.LanternOff, Items.BigKey`POW_SET`, Items.SmallKey`POW_SET`:4 +PalacePreBoss:Palace; `KEYSANITY_MAJOR`; 0x70-0x03-0x00; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.LanternOff, Items.BigKey`POW_SET`, Items.SmallKey`POW_SET`:5; Items.SmallKey`POW_SET` +PalaceBlockMaze:Palace; Minor; 0x70-0x10-0x00; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.LanternOff, Items.BigKey`POW_SET`, Items.SmallKey`POW_SET`:6 +PalaceDetour:Palace; Minor; 0x70-0x04-0x00; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.LanternOff, Items.BigKey`POW_SET`, Items.SmallKey`POW_SET`:6 CompletePalace:Palace; Helper; ; Locations.AccessPalace, Items.RocsCape, Items.PacciCane, Items.LanternOff, Items.BigKey`POW_SET`, Items.SmallKey`POW_SET`:6 PalaceBossItem:Palace; Major; gyorgContainerItem:Define:FirstByte, gyorgContainerSub:Define:SecondByte; Locations.CompletePalace; Items.HeartContainer -PalacePrize:`ELEMENT_DUNGEON`; `ELEMENT`; 0E69E3; Locations.CompletePalace +PalacePrize:`ELEMENT_DUNGEON`; `ELEMENT`; 0x0E69E3; Locations.CompletePalace # Skipping ahead to DHC so the game can be considered beatable... @@ -831,154 +890,150 @@ PalacePrize:`ELEMENT_DUNGEON`; `ELEMENT`; 0E69E3; !endif !endif - CastleBigDoorsOpen:DHC; Helper; ; Locations.DHCAccess, Items.SmallKey`DHC_SET`:1, Helpers.CanSplit4, Items.RocsCape, (|Items.Boomerang::2, Helpers.HasBow), Items.BombBag - CastleKing:DHC; Minor; 00E46A; Locations.DHCAccess, Helpers.CanSplit4, Items.BombBag; Items.Rupee200 - CastleBasement:DHC; `KEYSANITY_MINOR`; 88-37-00; Locations.DHCAccess; Items.DungeonMap`DHC_SET` - CastleClones:DHC; `KEYSANITY_MAJOR`; 88-27-00; Locations.DHCAccess, Helpers.CanSplit4; Items.SmallKey`DHC_SET` - CastlePostThrone:DHC; `KEYSANITY_MINOR`; 88-20-00; Locations.DHCAccess, Helpers.CanSplit4, Items.SmallKey`DHC_SET`, Items.BombBag; Items.Compass`DHC_SET` - CastleTopLeftTower:DHC; `KEYSANITY_MAJOR`; 88-01-00; Helpers.CastleBigDoorsOpen, Helpers.HasBow; Items.SmallKey`DHC_SET` - CastleTopRightTower:DHC; `KEYSANITY_MAJOR`; 88-02-00; Helpers.CastleBigDoorsOpen, Items.LanternOff; Items.SmallKey`DHC_SET` - CastleLowerLeftTower:DHC; `KEYSANITY_MAJOR`; 88-03-00; Helpers.CastleBigDoorsOpen; Items.SmallKey`DHC_SET` - CastleLowerRightTower:DHC; `KEYSANITY_MAJOR`; 88-04-00; Helpers.CastleBigDoorsOpen; Items.SmallKey`DHC_SET` - - !ifdef - KEYSANITY #temp will be changed on fixing generation issues - CastleBigBlock:DHC; Major; 88-09-00; Helpers.CastleBigDoorsOpen, Items.SmallKey`DHC_SET`:5; Items.BigKey`DHC_SET` - !else - CastleBigBlock:DHC; Unshuffled; 88-09-00; Helpers.CastleBigDoorsOpen, Items.SmallKey`DHC_SET`:5; Items.BigKey`DHC_SET` - !endif + CastleBigDoorsOpen:DHC; Helper; ; Locations.DHCAccess, Items.SmallKey`DHC_SET`:1, Helpers.CanSplit4, Items.RocsCape, (|Items.Boomerang::2, Helpers.HasBow), Items.BombBag + CastleKing:DHC; Minor; 0x00E46A; Locations.DHCAccess, Helpers.CanSplit4, Items.BombBag; Items.Rupee200 + CastleBasement:DHC; `KEYSANITY_MINOR`; 0x88-0x37-0x00; Locations.DHCAccess; Items.DungeonMap`DHC_SET` + CastleClones:DHC; `KEYSANITY_MAJOR`; 0x88-0x27-0x00; Locations.DHCAccess, Helpers.CanSplit4; Items.SmallKey`DHC_SET` + CastlePostThrone:DHC; `KEYSANITY_MINOR`; 0x88-0x20-0x00; Locations.DHCAccess, Helpers.CanSplit4, Items.SmallKey`DHC_SET`, Items.BombBag; Items.Compass`DHC_SET` + CastleTopLeftTower:DHC; `KEYSANITY_MAJOR`; 0x88-0x01-0x00; Helpers.CastleBigDoorsOpen, Helpers.HasBow; Items.SmallKey`DHC_SET` + CastleTopRightTower:DHC; `KEYSANITY_MAJOR`; 0x88-0x02-0x00; Helpers.CastleBigDoorsOpen, Items.LanternOff; Items.SmallKey`DHC_SET` + CastleLowerLeftTower:DHC; `KEYSANITY_MAJOR`; 0x88-0x03-0x00; Helpers.CastleBigDoorsOpen; Items.SmallKey`DHC_SET` + CastleLowerRightTower:DHC; `KEYSANITY_MAJOR`; 0x88-0x04-0x00; Helpers.CastleBigDoorsOpen; Items.SmallKey`DHC_SET` + CastleBigBlock:DHC; `KEYSANITY_MAJOR`; 0x88-0x09-0x00; Helpers.CastleBigDoorsOpen, Items.SmallKey`DHC_SET`:5; Items.BigKey`DHC_SET` + !endif #Kinstone changes 02017660, be aware that this is open logic, not taking into account getting to anyone who can fuse these !ifdef - OPENFUSIONS - MinishBottomLeftFusion; Minor; 0FE0A6; Locations.BelariBombs; - MinishMiddleRightFusion; Minor; 0FE0B6; Locations.AccessMinishWoods; - MinishMiddleFusion; Minor; 0FE0C6; Locations.AccessMinishWoods; - MinishMiddleLeftFusion; Minor; 0FE0CE; Locations.AccessMinishWoods; - MinishTopLeftFusion; Minor; 0FE07E; Locations.MinishWitchHut; - MinishMinishPathFusion; Minor; 0FE08E; Locations.AccessMinishWoods; - MinishCrackChest; Minor; 27-08-00; Locations.AccessMinishWoods; + MinishBottomLeftFusion; Minor; 0x0FE0A6; Locations.BelariBombs; + MinishMiddleRightFusion; Minor; 0x0FE0B6; Locations.AccessMinishWoods; + MinishMiddleFusion; Minor; 0x0FE0C6; Locations.AccessMinishWoods; + MinishMiddleLeftFusion; Minor; 0x0FE0CE; Locations.AccessMinishWoods; + MinishTopLeftFusion; Minor; 0x0FE07E; Locations.MinishWitchHut; + MinishMinishPathFusion; Minor; 0x0FE08E; Locations.AccessMinishWoods; + MinishCrackChest; Minor; 0x27-0x08-0x00; Locations.AccessMinishWoods; - HyliaMinishPathFusion; Minor; 0FE09E; Locations.AccessHyliaSouth, Items.PegasusBoots, (|Items.GustJar, Items.Flippers); + HyliaMinishPathFusion; Minor; 0x0FE09E; Locations.AccessHyliaSouth, Items.PegasusBoots, (|Items.GustJar, Items.Flippers); - SchoolMinishPathFusion; Minor; 0FE076; Items.PacciCane; - TownWaterfallChest; Minor; 32-0B-00; Items.Flippers; - TingleTreeTopLeft; Minor; 32-00-00; ; - TingleTreeTopRight; Minor; 32-00-01; ; - TingleTreeBottomLeft; Minor; 32-00-02; ; - TingleTreeBottomRight; Minor; 32-00-03; ; - CastleGardenRightMinishHole; Minor; 36-00-00; Items.PegasusBoots; - CastleGardenLeftMinishHole; Minor; 36-01-00; Items.PegasusBoots; + SchoolMinishPathFusion; Minor; 0x0FE076; Items.PacciCane; + TownWaterfallChest; Minor; 0x32-0x0B-0x00; Items.Flippers; + TingleTreeTopLeft; Minor; 0x32-0x00-0x00; ; + TingleTreeTopRight; Minor; 0x32-0x00-0x01; ; + TingleTreeBottomLeft; Minor; 0x32-0x00-0x02; ; + TingleTreeBottomRight; Minor; 0x32-0x00-0x03; ; + CastleGardenRightMinishHole; Minor; 0x36-0x00-0x00; Items.PegasusBoots; + CastleGardenLeftMinishHole; Minor; 0x36-0x01-0x00; Items.PegasusBoots; - LinkHouseFusion; Minor; 0FE0D6; Helpers.CanDestroyTrees; + LinkHouseFusion; Minor; 0x0FE0D6; Helpers.CanDestroyTrees; - LonLonFallsFusion; Minor; 0FE0FE; Locations.AccessFallsSouth; - LonLonMinishPathFusion; Minor; 0FE086; Locations.AccessHyliaNorth, Items.PegasusBoots; - GoronSmallChest; Minor; 2F-01-00; Locations.MinishWitchHut; + LonLonFallsFusion; Minor; 0x0FE0FE; Locations.AccessFallsSouth; + LonLonMinishPathFusion; Minor; 0x0FE086; Locations.AccessHyliaNorth, Items.PegasusBoots; + GoronSmallChest; Minor; 0x2F-0x01-0x00; Locations.MinishWitchHut; - TrilbyTopFusion; Minor; 0FE0BE; Locations.AccessWestField; - TrilbyMiddleFusion; Minor; 0FE0EE; Locations.AccessWestField; - TrilbyWaterCave; Minor; 13-03-01; Locations.AccessWestField, (|Items.RocsCape,Items.Flippers), Items.MoleMitts; + TrilbyTopFusion; Minor; 0x0FE0BE; Locations.AccessWestField; + TrilbyMiddleFusion; Minor; 0x0FE0EE; Locations.AccessWestField; + TrilbyWaterCave; Minor; 0x13-0x03-0x01; Locations.AccessWestField, (|Items.RocsCape,Items.Flippers), Items.MoleMitts; - WesternWoodChest; Minor; 03-08-01; Helpers.CanSplit2; + WesternWoodChest; Minor; 0x03-0x08-0x01; Helpers.CanSplit2; !ifdef - WHYWOULDYOUDOTHISTOYOURSELF - WesternWoodTopDig1; Minor; 0F77CF; Helpers.CanSplit2, Items.MoleMitts; - WesternWoodTopDig2; Minor; 0F77DF; Helpers.CanSplit2, Items.MoleMitts; - WesternWoodTopDig3; Minor; 0F77EF; Helpers.CanSplit2, Items.MoleMitts; - WesternWoodTopDig4; Minor; 0F77FF; Helpers.CanSplit2, Items.MoleMitts; - WesternWoodTopDig5; Minor; 0F780F; Helpers.CanSplit2, Items.MoleMitts; - WesternWoodTopDig6; Minor; 0F781F; Helpers.CanSplit2, Items.MoleMitts; - WesternWoodBottomDig1; Minor; 0F782F; Helpers.CanSplit2, Items.MoleMitts; - WesternWoodBottomDig2; Minor; 0F783F; Helpers.CanSplit2, Items.MoleMitts; + WesternWoodTopDig1; Minor; 0x0F77CF; Helpers.CanSplit2, Items.MoleMitts; + WesternWoodTopDig2; Minor; 0x0F77DF; Helpers.CanSplit2, Items.MoleMitts; + WesternWoodTopDig3; Minor; 0x0F77EF; Helpers.CanSplit2, Items.MoleMitts; + WesternWoodTopDig4; Minor; 0x0F77FF; Helpers.CanSplit2, Items.MoleMitts; + WesternWoodTopDig5; Minor; 0x0F780F; Helpers.CanSplit2, Items.MoleMitts; + WesternWoodTopDig6; Minor; 0x0F781F; Helpers.CanSplit2, Items.MoleMitts; + WesternWoodBottomDig1; Minor; 0x0F782F; Helpers.CanSplit2, Items.MoleMitts; + WesternWoodBottomDig2; Minor; 0x0F783F; Helpers.CanSplit2, Items.MoleMitts; !endif - PercyHouseMoblin; Minor; 0123D6; Helpers.CanSplit2, Items.LanternOff; - PercyHouseReward; Minor; 06B058:FirstByte, 06B05A:SecondByte; Helpers.CanSplit2, Items.LanternOff; - - HyliaWaterDigCave; Minor; 19-00-00; Locations.AccessHyliaSouth, Items.MoleMitts, (|Items.Flippers, Items.RocsCape); - - CrenelGreenWaterFusion; Minor; 0FE06E; Locations.AccessWestField, Helpers.HasBottle, Items.BombBag; - CrenelClimbFusion; Minor; 0FE10E; Locations.AccessCrenel, Items.GripRing; - CrenelRainPath; Minor; 0FE066; Locations.AccessCrenel, Items.GripRing; - CrenelLowerLeftFusion; Minor; 0FE116; Locations.AccessWestField, Helpers.HasBottle, (|Items.BombBag, Items.RocsCape); - PreMelariFusion; Minor; 0FE096; Locations.CrenelBlockChest; - - WildsTopRightCrack; Minor; 27-09-00; Locations.AccessWilds; - WildsTopLeftCrack; Minor; 27-0D-00; Locations.AccessWilds, (|Items.GustJar, Items.Flippers); - WildsMiddleLeftCrack; Minor; 27-0A-00; Locations.AccessWilds; - WildsLongJourneyCrack; Minor; 27-0B-00; Locations.AccessWilds; - WildsMinishWaterCaveChest; Minor; 35-01-00; Locations.AccessWilds, Items.Flippers; - - RuinsPillarsFusion; Minor; 0FE11E; Locations.AccessFortress; - RuinsCrackFusion; Minor; 27-0C-00; Locations.AccessFortress; - - PreValleyFusion; Minor; 0FE0F6; Helpers.CanSplit3; - RoyalValleyLeftFusion; Minor; 0FE0DE; Locations.AccessValley, Items.GraveyardKey, Items.PegasusBoots; - RoyalValleyRightFusion; Minor; 0FE0E6; Locations.AccessValley, Items.GraveyardKey, Items.PegasusBoots; - GinaGrave; Minor; 34-01-00; Locations.AccessValley, Items.GraveyardKey, Items.PegasusBoots; - - FallsNearCrestFusion; Minor; 0FE106; Locations.AccessFallsNorth, Items.GripRing; - FallsWaterCaveEnd; Minor; 16-00-00; Items.BombBag, (|Items.RocsCape, Items.Flippers), Items.MoleMitts - - RuinsBombBag; Major; 0FE0AE; Locations.AccessFortress; - LonLonWallet; Major; 32-0F-00; Locations.AccessHyliaNorth; - LonLonBottle3; Major; 0FE05E; Helpers.CanDestroyTrees; Items.Bottle4 #consistency - GoronBottle4; Major; 2F-01-01; Locations.MinishWitchHut; Items.Bottle4 #consistency - TingleBoomerang; Major; 32-00-04; ; Items.Boomerang #consistency - RuinsBeanStalk; Major; 0D-02-00; Locations.AccessFortress; - BelariRemote; Major; 00A0A0; Locations.BelariBombs; - - RuinsArrowButterfly; Major; 0FE12F; Locations.AccessFortress - WildsDigButterfly; Major; 0FE13F; Locations.AccessWilds; - ValleySwimButterfly; Major; 0FE14F; Locations.AccessValley, Items.GraveyardKey, Items.PegasusBoots; - - CrenelBeanstalkHP; Major; 0F5D9B; Locations.AccessCrenel, Items.GripRing; - HyliaBeanstalkHP; Major; 0F5EDB; Locations.AccessTreasureCave; - HyliaBeanstalkLeft; Minor; 0D-01-00; Locations.AccessTreasureCave; - HyliaBeanstalkRight; Minor; 0D-01-01; Locations.AccessTreasureCave; - - HillsBeanstalkHP; Major; 0F6073; Helpers.CanDestroyTrees; - HillsBeanstalkRight; Minor; 0D-03-00; Helpers.CanDestroyTrees; - - HillsBeanstalkLeft; Minor; 0D-03-01; Helpers.CanDestroyTrees; - - WesternBeanstalk; Minor; 0D-04-00; Helpers.CanSplit2; - - WesternTreeHouseHP; Major; 0F9E1F; Helpers.CanSplit2; - LinkHouseTreeHP; Major; 0F9BA7; Helpers.CanDestroyTrees; - FallsWaterDigCaveHP; Major; 0F3DD7; Items.BombBag, (|Items.RocsCape,Items.Flippers), Items.MoleMitts; - FallsWaterfallHP; Major; 0F906F; Locations.AccessFallsNorth, Items.Flippers, Items.GripRing; - WildsMinishWaterCaveHP; Major; 0DB3F7; Locations.AccessWilds, Items.Flippers; - CastleGardenDrainedFountainHP; Major; 0D9C2B; ; - LibrariCabinContainer; Major; 0124EC; Items.Ocarina, (|Items.Flippers,Items.RocsCape); + PercyHouseMoblin; Minor; 0x0123D6; Helpers.CanSplit2, Items.LanternOff; + PercyHouseReward; Minor; 0x06B058:FirstByte, 0x06B05A:SecondByte; Helpers.CanSplit2, Items.LanternOff; + + HyliaWaterDigCave; Minor; 0x19-0x00-0x00; Locations.AccessHyliaSouth, Items.MoleMitts, (|Items.Flippers, Items.RocsCape); + + CrenelGreenWaterFusion; Minor; 0x0FE06E; Locations.AccessWestField, Helpers.HasBottle, Items.BombBag; + CrenelClimbFusion; Minor; 0x0FE10E; Locations.AccessCrenel, Items.GripRing; + CrenelRainPath; Minor; 0x0FE066; Locations.AccessCrenel, Items.GripRing; + CrenelLowerLeftFusion; Minor; 0x0FE116; Locations.AccessWestField, Helpers.HasBottle, (|Items.BombBag, Items.RocsCape); + PreMelariFusion; Minor; 0x0FE096; Locations.CrenelBlockChest; + + WildsTopRightCrack; Minor; 0x27-0x09-0x00; Locations.AccessWilds; + WildsTopLeftCrack; Minor; 0x27-0x0D-0x00; Locations.AccessWilds, (|Items.GustJar, Items.Flippers); + WildsMiddleLeftCrack; Minor; 0x27-0x0A-0x00; Locations.AccessWilds; + WildsLongJourneyCrack; Minor; 0x27-0x0B-0x00; Locations.AccessWilds; + WildsMinishWaterCaveChest; Minor; 0x35-0x01-0x00; Locations.AccessWilds, Items.Flippers; + + RuinsPillarsFusion; Minor; 0x0FE11E; Locations.AccessFortress; + RuinsCrackFusion; Minor; 0x27-0x0C-0x00; Locations.AccessFortress; + + PreValleyFusion; Minor; 0x0FE0F6; Helpers.CanSplit3; + RoyalValleyLeftFusion; Minor; 0x0FE0DE; Locations.AccessValley, Items.GraveyardKey, Items.PegasusBoots; + RoyalValleyRightFusion; Minor; 0x0FE0E6; Locations.AccessValley, Items.GraveyardKey, Items.PegasusBoots; + GinaGrave; Minor; 0x34-0x01-0x00; Locations.AccessValley, Items.GraveyardKey, Items.PegasusBoots; + + FallsNearCrestFusion; Minor; 0x0FE106; Locations.AccessFallsNorth, Items.GripRing; + FallsWaterCaveEnd; Minor; 0x16-0x00-0x00; Items.BombBag, (|Items.RocsCape, Items.Flippers), Items.MoleMitts + + RuinsBombBag; Major; 0x0FE0AE; Locations.AccessFortress; + LonLonWallet; Major; 0x32-0x0F-0x00; Locations.AccessHyliaNorth; + LonLonBottle3; Major; 0x0FE05E; Helpers.CanDestroyTrees; Items.Bottle4 #consistency + GoronBottle4; Major; 0x2F-0x01-0x01; Locations.MinishWitchHut; Items.Bottle4 #consistency + TingleBoomerang; Major; 0x32-0x00-0x04; ; Items.Boomerang #consistency + RuinsBeanStalk; Major; 0x0D-0x02-0x00; Locations.AccessFortress; + BelariRemote; Major; 0x00A0A0; Locations.BelariBombs; + + RuinsArrowButterfly; Major; 0x0FE12F; Locations.AccessFortress + WildsDigButterfly; Major; 0x0FE13F; Locations.AccessWilds; + ValleySwimButterfly; Major; 0x0FE14F; Locations.AccessValley, Items.GraveyardKey, Items.PegasusBoots; + + CrenelBeanstalkHP; Major; 0x0F5D9B; Locations.AccessCrenel, Items.GripRing; + HyliaBeanstalkHP; Major; 0x0F5EDB; Locations.AccessTreasureCave; + HyliaBeanstalkLeft; Minor; 0x0D-0x01-0x00; Locations.AccessTreasureCave; + HyliaBeanstalkRight; Minor; 0x0D-0x01-0x01; Locations.AccessTreasureCave; + + HillsBeanstalkHP; Major; 0x0F6073; Helpers.CanDestroyTrees; + HillsBeanstalkRight; Minor; 0x0D-0x03-0x00; Helpers.CanDestroyTrees; + + HillsBeanstalkLeft; Minor; 0x0D-0x03-0x01; Helpers.CanDestroyTrees; + + WesternBeanstalk; Minor; 0x0D-0x04-0x00; Helpers.CanSplit2; + + WesternTreeHouseHP; Major; 0x0F9E1F; Helpers.CanSplit2; + LinkHouseTreeHP; Major; 0x0F9BA7; Helpers.CanDestroyTrees; + FallsWaterDigCaveHP; Major; 0x0F3DD7; Items.BombBag, (|Items.RocsCape,Items.Flippers), Items.MoleMitts; + FallsWaterfallHP; Major; 0x0F906F; Locations.AccessFallsNorth, Items.Flippers, Items.GripRing; + WildsMinishWaterCaveHP; Major; 0x0DB3F7; Locations.AccessWilds, Items.Flippers; + CastleGardenDrainedFountainHP; Major; 0x0D9C2B; ; + LibrariCabinContainer; Major; 0x0124EC; Items.Ocarina, (|Items.Flippers,Items.RocsCape); ScarbladeScroll; Major; scarbladeDojoItem:Define:FirstByte, scarbladeDojoSub:Define:SecondByte; Locations.AccessWilds, Items.Flippers, Helpers.HasBow, Helpers.HasSword; Items.FastSpin SplitbladeScroll; Major; splitbladeDojoItem:Define:FirstByte, splitbladeDojoSub:Define:SecondByte; Locations.AccessFallsSouth, Items.Flippers, Helpers.HasSword; Items.FastSplit GreatbladeScroll; Major; greatbladeDojoItem:Define:FirstByte, greatbladeDojoSub:Define:SecondByte; Items.Flippers, Helpers.HasSword; Items.LongSpin !else - RuinsBombBag; Major; 0FE0AE; Helpers.Inaccessible; - LonLonWallet; Major; 32-0F-00; Helpers.Inaccessible; - LonLonBottle3; Major; 0FE05E; Helpers.Inaccessible; - GoronBottle4; Major; 2F-01-01; Helpers.Inaccessible; - TingleBoomerang; Major; 32-00-04; Helpers.Inaccessible; Items.Boomerang #consistency - RuinsBeanStalk; Major; 0D-02-00; Helpers.Inaccessible; - BelariRemote; Major; 00A0A0; Helpers.Inaccessible; - - RuinsArrowButterfly; Major; 0FE12F; Helpers.Inaccessible; - WildsDigButterfly; Major; 0FE13F; Helpers.Inaccessible; - ValleySwimButterfly; Major; 0FE14F; Helpers.Inaccessible; - - CrenelBeanstalkHP; Major; 0F5D9B; Helpers.Inaccessible; - HyliaBeanstalkHP; Major; 0F5EDB; Helpers.Inaccessible; - HillsBeanstalkHP; Major; 0F6073; Helpers.Inaccessible; - WesternTreeHouseHP; Major; 0F9E1F; Helpers.Inaccessible; - LinkHouseTreeHP; Major; 0F9BA7; Helpers.Inaccessible; - FallsWaterDigCaveHP; Major; 0F3DD7; Helpers.Inaccessible; - FallsWaterfallHP; Major; 0F906F; Helpers.Inaccessible; - WildsMinishWaterCaveHP; Major; 0DB3F7; Helpers.Inaccessible; - CastleGardenDrainedFountainHP; Major; 0D9C2B; Helpers.Inaccessible; - LibrariCabinContainer; Major; 0124EC; Helpers.Inaccessible; + RuinsBombBag; Major; 0x0FE0AE; Helpers.Inaccessible; + LonLonWallet; Major; 0x32-0x0F-0x00; Helpers.Inaccessible; + LonLonBottle3; Major; 0x0FE05E; Helpers.Inaccessible; + GoronBottle4; Major; 0x2F-0x01-0x01; Helpers.Inaccessible; + TingleBoomerang; Major; 0x32-0x00-0x04; Helpers.Inaccessible; Items.Boomerang #consistency + RuinsBeanStalk; Major; 0x0D-0x02-0x00; Helpers.Inaccessible; + BelariRemote; Major; 0x00A0A0; Helpers.Inaccessible; + + RuinsArrowButterfly; Major; 0x0FE12F; Helpers.Inaccessible; + WildsDigButterfly; Major; 0x0FE13F; Helpers.Inaccessible; + ValleySwimButterfly; Major; 0x0FE14F; Helpers.Inaccessible; + + CrenelBeanstalkHP; Major; 0x0F5D9B; Helpers.Inaccessible; + HyliaBeanstalkHP; Major; 0x0F5EDB; Helpers.Inaccessible; + HillsBeanstalkHP; Major; 0x0F6073; Helpers.Inaccessible; + WesternTreeHouseHP; Major; 0x0F9E1F; Helpers.Inaccessible; + LinkHouseTreeHP; Major; 0x0F9BA7; Helpers.Inaccessible; + FallsWaterDigCaveHP; Major; 0x0F3DD7; Helpers.Inaccessible; + FallsWaterfallHP; Major; 0x0F906F; Helpers.Inaccessible; + WildsMinishWaterCaveHP; Major; 0x0DB3F7; Helpers.Inaccessible; + CastleGardenDrainedFountainHP; Major; 0x0D9C2B; Helpers.Inaccessible; + LibrariCabinContainer; Major; 0x0124EC; Helpers.Inaccessible; ScarbladeScroll; Major; scarbladeDojoItem:Define:FirstByte, scarbladeDojoSub:Define:SecondByte; Helpers.Inaccessible; Items.FastSpin SplitbladeScroll; Major; splitbladeDojoItem:Define:FirstByte, splitbladeDojoSub:Define:SecondByte; Helpers.Inaccessible; Items.FastSplit @@ -987,178 +1042,178 @@ PalacePrize:`ELEMENT_DUNGEON`; `ELEMENT`; 0E69E3; !ifdef - WHYWOULDYOUDOTHISTOYOURSELF - HearthPot; Minor; 0D663B:FirstByte, 0D663D:SecondByte; - DropletsIceMazePot:Droplets; Minor; 0E3A73:FirstByte, 0E3A75:SecondByte; Locations.AccessDroplets, Items.BigKey:Droplets, (|Items.LanternOff, Locations.DropletsEastLever) - FoWRightSideTopPot:Fortress; Minor; 0F3FC7:FirstByte, 0F3FC9:SecondByte; Locations.AccessFortress, Items.MoleMitts, Helpers.CanSplit2, Helpers.HasBow, Items.SmallKey`FOW_SET`:3 - FoWRightSideBottomPot:Fortress; Minor; 0F3FD7:FirstByte, 0F3FD9:SecondByte; Locations.AccessFortress, Items.MoleMitts, Helpers.CanSplit2, Helpers.HasBow, Items.SmallKey`FOW_SET`:3 + HearthPot; Minor; 0x0D663B:FirstByte, 0x0D663D:SecondByte; + DropletsIceMazePot:Droplets; Minor; 0x0E3A73:FirstByte, 0x0E3A75:SecondByte; Locations.AccessDroplets, Items.BigKey:Droplets, (|Items.LanternOff, Locations.DropletsEastLever) + FoWRightSideTopPot:Fortress; Minor; 0x0F3FC7:FirstByte, 0x0F3FC9:SecondByte; Locations.AccessFortress, Items.MoleMitts, Helpers.CanSplit2, Helpers.HasBow, Items.SmallKey`FOW_SET`:3 + FoWRightSideBottomPot:Fortress; Minor; 0x0F3FD7:FirstByte, 0x0F3FD9:SecondByte; Locations.AccessFortress, Items.MoleMitts, Helpers.CanSplit2, Helpers.HasBow, Items.SmallKey`FOW_SET`:3 #digging - LonLonBuriedTreasure; Minor; 0F6CFF; Locations.AboveHPHole, Items.MoleMitts; - NorthHyruleFieldBuriedTreasure; Minor; 0F720F; Items.MoleMitts; - TopLeftCloudWall; Minor; 0DCB4B; Locations.AccessClouds, Items.MoleMitts - TopRightCloudWall; Minor; 0DCB5B; Locations.AccessClouds, Items.MoleMitts - BottomMiddleCloudWall; Minor; 0DCB6B; Locations.AccessClouds, Items.MoleMitts - BottomRightmostTopCloudWall; Minor; 0DCB7B; Locations.AccessClouds, Items.MoleMitts - BottomLeftCloudWall; Minor; 0DCB8B; Locations.AccessClouds, Items.MoleMitts - BottomRightCloudWall; Minor; 0DCB9B; Locations.AccessClouds, Items.MoleMitts - BottomRightmostBottomCloudWall; Minor; 0DCBAB; Locations.AccessClouds, Items.MoleMitts - FallsBuriedTopTreasure; Minor; 0F8813; Locations.AccessFallsNorth, Items.GripRing, Items.MoleMitts - FallsBuriedBottomTreasure; Minor; 0F8823; Locations.AccessFallsNorth, Items.MoleMitts - MelariMining1; Minor; 0DC8C3; Locations.CrenelBlockChest, Items.MoleMitts - MelariMining2; Minor; 0DC8D3; Locations.CrenelBlockChest, Items.MoleMitts - MelariMining3; Minor; 0DC8E3; Locations.CrenelBlockChest, Items.MoleMitts - MelariMining4; Minor; 0DC8F3; Locations.CrenelBlockChest, Items.MoleMitts - MelariMining5; Minor; 0DC903; Locations.CrenelBlockChest, Items.MoleMitts - MelariMining6; Minor; 0DC913; Locations.CrenelBlockChest, Items.MoleMitts - MelariMining7; Minor; 0DC923; Locations.CrenelBlockChest, Items.MoleMitts - MelariMining8; Minor; 0DC933; Locations.CrenelBlockChest, Items.MoleMitts + LonLonBuriedTreasure; Minor; 0x0F6CFF; Locations.AboveHPHole, Items.MoleMitts; + NorthHyruleFieldBuriedTreasure; Minor; 0x0F720F; Items.MoleMitts; + TopLeftCloudWall; Minor; 0x0DCB4B; Locations.AccessClouds, Items.MoleMitts + TopRightCloudWall; Minor; 0x0DCB5B; Locations.AccessClouds, Items.MoleMitts + BottomMiddleCloudWall; Minor; 0x0DCB6B; Locations.AccessClouds, Items.MoleMitts + BottomRightmostTopCloudWall; Minor; 0x0DCB7B; Locations.AccessClouds, Items.MoleMitts + BottomLeftCloudWall; Minor; 0x0DCB8B; Locations.AccessClouds, Items.MoleMitts + BottomRightCloudWall; Minor; 0x0DCB9B; Locations.AccessClouds, Items.MoleMitts + BottomRightmostBottomCloudWall; Minor; 0x0DCBAB; Locations.AccessClouds, Items.MoleMitts + FallsBuriedTopTreasure; Minor; 0x0F8813; Locations.AccessFallsNorth, Items.GripRing, Items.MoleMitts + FallsBuriedBottomTreasure; Minor; 0x0F8823; Locations.AccessFallsNorth, Items.MoleMitts + MelariMining1; Minor; 0x0DC8C3; Locations.CrenelBlockChest, Items.MoleMitts + MelariMining2; Minor; 0x0DC8D3; Locations.CrenelBlockChest, Items.MoleMitts + MelariMining3; Minor; 0x0DC8E3; Locations.CrenelBlockChest, Items.MoleMitts + MelariMining4; Minor; 0x0DC8F3; Locations.CrenelBlockChest, Items.MoleMitts + MelariMining5; Minor; 0x0DC903; Locations.CrenelBlockChest, Items.MoleMitts + MelariMining6; Minor; 0x0DC913; Locations.CrenelBlockChest, Items.MoleMitts + MelariMining7; Minor; 0x0DC923; Locations.CrenelBlockChest, Items.MoleMitts + MelariMining8; Minor; 0x0DC933; Locations.CrenelBlockChest, Items.MoleMitts #diving - WildsSunkenKinstoneTop; Minor; 0D9347; Locations.AccessWilds, Items.Flippers - WildsSunkenKinstoneMiddle; Minor; 0D9357; Locations.AccessWilds, Items.Flippers - WildsSunkenKinstoneBottom; Minor; 0D9367; Locations.AccessWilds, Items.Flippers + WildsSunkenKinstoneTop; Minor; 0x0D9347; Locations.AccessWilds, Items.Flippers + WildsSunkenKinstoneMiddle; Minor; 0x0D9357; Locations.AccessWilds, Items.Flippers + WildsSunkenKinstoneBottom; Minor; 0x0D9367; Locations.AccessWilds, Items.Flippers !endif !ifdef - RUPEEMANIA - CrenelFairyCaveRupee1; Minor; 0FB3F3; Locations.AccessWestField, Items.BombBag, Helpers.HasBottle; - CrenelFairyCaveRupee2; Minor; 0FB403; Locations.AccessWestField, Items.BombBag, Helpers.HasBottle; - CrenelFairyCaveRupee3; Minor; 0FB413; Locations.AccessWestField, Items.BombBag, Helpers.HasBottle; - CrenelOutsideRupee; Minor; 0FAACF; Locations.AccessWestField; - - FallsLowerRupee1; Minor; 0F87E3; Locations.AccessFallsSouth, (|Items.Flippers, Items.RocsCape); - FallsLowerRupee2; Minor; 0F87F3; Locations.AccessFallsSouth, (|Items.Flippers, Items.RocsCape); - FallsLowerRupee3; Minor; 0F8803; Locations.AccessFallsSouth, (|Items.Flippers, Items.RocsCape); - - FallsUpperCaveRupee1; Minor; 0F8F27; Locations.AccessFallsNorth, Items.GripRing; - FallsUpperCaveRupee2; Minor; 0F8F37; Locations.AccessFallsNorth, Items.GripRing; - FallsUpperCaveRupee3; Minor; 0F8F47; Locations.AccessFallsNorth, Items.GripRing; - FallsUpperCaveRupee4; Minor; 0F8F57; Locations.AccessFallsNorth, Items.GripRing; - FallsUpperCaveRupee5; Minor; 0F8F67; Locations.AccessFallsNorth, Items.GripRing; - FallsUpperCaveRupee6; Minor; 0F8F77; Locations.AccessFallsNorth, Items.GripRing; - FallsUpperCaveRupee7; Minor; 0F8F87; Locations.AccessFallsNorth, Items.GripRing; - FallsUpperCaveRupee8; Minor; 0F8F97; Locations.AccessFallsNorth, Items.GripRing; - FallsUpperCaveRupee9; Minor; 0F8FA7; Locations.AccessFallsNorth, Items.GripRing; + CrenelFairyCaveRupee1; Minor; 0x0FB3F3; Locations.AccessWestField, Items.BombBag, Helpers.HasBottle; + CrenelFairyCaveRupee2; Minor; 0x0FB403; Locations.AccessWestField, Items.BombBag, Helpers.HasBottle; + CrenelFairyCaveRupee3; Minor; 0x0FB413; Locations.AccessWestField, Items.BombBag, Helpers.HasBottle; + CrenelOutsideRupee; Minor; 0x0FAACF; Locations.AccessWestField; + + FallsLowerRupee1; Minor; 0x0F87E3; Locations.AccessFallsSouth, (|Items.Flippers, Items.RocsCape); + FallsLowerRupee2; Minor; 0x0F87F3; Locations.AccessFallsSouth, (|Items.Flippers, Items.RocsCape); + FallsLowerRupee3; Minor; 0x0F8803; Locations.AccessFallsSouth, (|Items.Flippers, Items.RocsCape); + + FallsUpperCaveRupee1; Minor; 0x0F8F27; Locations.AccessFallsNorth, Items.GripRing; + FallsUpperCaveRupee2; Minor; 0x0F8F37; Locations.AccessFallsNorth, Items.GripRing; + FallsUpperCaveRupee3; Minor; 0x0F8F47; Locations.AccessFallsNorth, Items.GripRing; + FallsUpperCaveRupee4; Minor; 0x0F8F57; Locations.AccessFallsNorth, Items.GripRing; + FallsUpperCaveRupee5; Minor; 0x0F8F67; Locations.AccessFallsNorth, Items.GripRing; + FallsUpperCaveRupee6; Minor; 0x0F8F77; Locations.AccessFallsNorth, Items.GripRing; + FallsUpperCaveRupee7; Minor; 0x0F8F87; Locations.AccessFallsNorth, Items.GripRing; + FallsUpperCaveRupee8; Minor; 0x0F8F97; Locations.AccessFallsNorth, Items.GripRing; + FallsUpperCaveRupee9; Minor; 0x0F8FA7; Locations.AccessFallsNorth, Items.GripRing; !ifdef - WHYWOULDYOUDOTHISTOYOURSELF - FallsUpperCaveWaterRupee1; Minor; 0F8FB7; Locations.AccessFallsNorth, Items.GripRing, Items.Flippers; - FallsUpperCaveWaterRupee2; Minor; 0F8FC7; Locations.AccessFallsNorth, Items.GripRing, Items.Flippers; - FallsUpperCaveWaterRupee3; Minor; 0F8FD7; Locations.AccessFallsNorth, Items.GripRing, Items.Flippers; - FallsUpperCaveWaterRupee4; Minor; 0F8FE7; Locations.AccessFallsNorth, Items.GripRing, Items.Flippers; - FallsUpperCaveWaterRupee5; Minor; 0F8FF7; Locations.AccessFallsNorth, Items.GripRing, Items.Flippers; - FallsUpperCaveWaterRupee6; Minor; 0F9007; Locations.AccessFallsNorth, Items.GripRing, Items.Flippers; + FallsUpperCaveWaterRupee1; Minor; 0x0F8FB7; Locations.AccessFallsNorth, Items.GripRing, Items.Flippers; + FallsUpperCaveWaterRupee2; Minor; 0x0F8FC7; Locations.AccessFallsNorth, Items.GripRing, Items.Flippers; + FallsUpperCaveWaterRupee3; Minor; 0x0F8FD7; Locations.AccessFallsNorth, Items.GripRing, Items.Flippers; + FallsUpperCaveWaterRupee4; Minor; 0x0F8FE7; Locations.AccessFallsNorth, Items.GripRing, Items.Flippers; + FallsUpperCaveWaterRupee5; Minor; 0x0F8FF7; Locations.AccessFallsNorth, Items.GripRing, Items.Flippers; + FallsUpperCaveWaterRupee6; Minor; 0x0F9007; Locations.AccessFallsNorth, Items.GripRing, Items.Flippers; !endif - FortressBigRupee:Fortress; Minor; 0F3E67; Locations.AccessFortress, Items.MoleMitts; - FortressF1Rupee1:Fortress; Minor; 0F3F37; Locations.AccessFortress, Helpers.HasBow; - FortressF1Rupee2:Fortress; Minor; 0F3F47; Locations.AccessFortress, Helpers.HasBow; - FortressF1Rupee3:Fortress; Minor; 0F3F57; Locations.AccessFortress, Helpers.HasBow; - FortressF1Rupee4:Fortress; Minor; 0F3F67; Locations.AccessFortress, Helpers.HasBow; - FortressF1Rupee5:Fortress; Minor; 0F3F77; Locations.AccessFortress, Helpers.HasBow; - FortressF1Rupee6:Fortress; Minor; 0F3F87; Locations.AccessFortress, Helpers.HasBow; - FortressF1Rupee7:Fortress; Minor; 0F3F97; Locations.AccessFortress, Helpers.HasBow; + FortressBigRupee:Fortress; Minor; 0x0F3E67; Locations.AccessFortress, Items.MoleMitts; + FortressF1Rupee1:Fortress; Minor; 0x0F3F37; Locations.AccessFortress, Helpers.HasBow; + FortressF1Rupee2:Fortress; Minor; 0x0F3F47; Locations.AccessFortress, Helpers.HasBow; + FortressF1Rupee3:Fortress; Minor; 0x0F3F57; Locations.AccessFortress, Helpers.HasBow; + FortressF1Rupee4:Fortress; Minor; 0x0F3F67; Locations.AccessFortress, Helpers.HasBow; + FortressF1Rupee5:Fortress; Minor; 0x0F3F77; Locations.AccessFortress, Helpers.HasBow; + FortressF1Rupee6:Fortress; Minor; 0x0F3F87; Locations.AccessFortress, Helpers.HasBow; + FortressF1Rupee7:Fortress; Minor; 0x0F3F97; Locations.AccessFortress, Helpers.HasBow; !ifdef - WHYWOULDYOUDOTHISTOYOURSELF - DropletsUpperWaterRupee1:Droplets; Minor; 0E3593; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers; - DropletsUpperWaterRupee2:Droplets; Minor; 0E35A3; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers; - DropletsUpperWaterRupee3:Droplets; Minor; 0E35B3; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers; - DropletsUpperWaterRupee4:Droplets; Minor; 0E35C3; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers; - DropletsUpperWaterRupee5:Droplets; Minor; 0E35D3; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers; - DropletsUpperWaterRupee6:Droplets; Minor; 0E35E3; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers; - DropletsLowerWaterRupee1:Droplets; Minor; 0E58DF; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers, (|Items.RocsCape, Items.GustJar); - DropletsLowerWaterRupee2:Droplets; Minor; 0E58EF; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers, (|Items.RocsCape, Items.GustJar); - DropletsLowerWaterRupee3:Droplets; Minor; 0E58FF; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers, (|Items.RocsCape, Items.GustJar); - DropletsLowerWaterRupee4:Droplets; Minor; 0E590F; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers, (|Items.RocsCape, Items.GustJar); - DropletsLowerWaterRupee5:Droplets; Minor; 0E591F; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers, (|Items.RocsCape, Items.GustJar); - DropletsLowerWaterRupee6:Droplets; Minor; 0E592F; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers, (|Items.RocsCape, Items.GustJar); + DropletsUpperWaterRupee1:Droplets; Minor; 0x0E3593; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers; + DropletsUpperWaterRupee2:Droplets; Minor; 0x0E35A3; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers; + DropletsUpperWaterRupee3:Droplets; Minor; 0x0E35B3; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers; + DropletsUpperWaterRupee4:Droplets; Minor; 0x0E35C3; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers; + DropletsUpperWaterRupee5:Droplets; Minor; 0x0E35D3; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers; + DropletsUpperWaterRupee6:Droplets; Minor; 0x0E35E3; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers; + DropletsLowerWaterRupee1:Droplets; Minor; 0x0E58DF; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers, (|Items.RocsCape, Items.GustJar); + DropletsLowerWaterRupee2:Droplets; Minor; 0x0E58EF; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers, (|Items.RocsCape, Items.GustJar); + DropletsLowerWaterRupee3:Droplets; Minor; 0x0E58FF; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers, (|Items.RocsCape, Items.GustJar); + DropletsLowerWaterRupee4:Droplets; Minor; 0x0E590F; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers, (|Items.RocsCape, Items.GustJar); + DropletsLowerWaterRupee5:Droplets; Minor; 0x0E591F; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers, (|Items.RocsCape, Items.GustJar); + DropletsLowerWaterRupee6:Droplets; Minor; 0x0E592F; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.Flippers, (|Items.RocsCape, Items.GustJar); !endif - - DropletsLeftPathRupee1:Droplets; Minor; 0E3F8B; Locations.AccessDroplets, Items.BigKey`TOD_SET`; - DropletsLeftPathRupee2:Droplets; Minor; 0E3F9B; Locations.AccessDroplets, Items.BigKey`TOD_SET`; - DropletsLeftPathRupee3:Droplets; Minor; 0E3FAB; Locations.AccessDroplets, Items.BigKey`TOD_SET`; - DropletsLeftPathRupee4:Droplets; Minor; 0E3FBB; Locations.AccessDroplets, Items.BigKey`TOD_SET`; - DropletsLeftPathRupee5:Droplets; Minor; 0E3FCB; Locations.AccessDroplets, Items.BigKey`TOD_SET`; - DropletsRightPathRupee1:Droplets; Minor; 0E483F; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.SmallKey`TOD_SET`:4, Items.LanternOff, (|(&Items.Flippers, Items.GustJar, Items.RocsCape), Helpers.HasDamageSource); - DropletsRightPathRupee2:Droplets; Minor; 0E484F; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.SmallKey`TOD_SET`:4, Items.LanternOff, (|(&Items.Flippers, Items.GustJar, Items.RocsCape), Helpers.HasDamageSource); - DropletsRightPathRupee3:Droplets; Minor; 0E485F; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.SmallKey`TOD_SET`:4, Items.LanternOff, (|(&Items.Flippers, Items.GustJar, Items.RocsCape), Helpers.HasDamageSource); - DropletsRightPathRupee4:Droplets; Minor; 0E486F; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.SmallKey`TOD_SET`:4, Items.LanternOff, (|(&Items.Flippers, Items.GustJar, Items.RocsCape), Helpers.HasDamageSource); - DropletsRightPathRupee5:Droplets; Minor; 0E487F; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.SmallKey`TOD_SET`:4, Items.LanternOff, (|(&Items.Flippers, Items.GustJar, Items.RocsCape), Helpers.HasDamageSource); - - CoFRupee1:FlameCave; Minor; 0DFAEB; Helpers.CoFAccess; - CoFRupee2:FlameCave; Minor; 0DFAFB; Helpers.CoFAccess; - CoFRupee3:FlameCave; Minor; 0DFB0B; Helpers.CoFAccess; - CoFRupee4:FlameCave; Minor; 0DFB1B; Helpers.CoFAccess; - CoFRupee5:FlameCave; Minor; 0DFB2B; Helpers.CoFAccess; - - PalaceRupee1:Palace; Minor; 0E8B1F; Locations.AccessPalace, Items.RocsCape, Items.PacciCane; - PalaceRupee2:Palace; Minor; 0E8B2F; Locations.AccessPalace, Items.RocsCape, Items.PacciCane; - PalaceRupee3:Palace; Minor; 0E8B3F; Locations.AccessPalace, Items.RocsCape, Items.PacciCane; - PalaceRupee4:Palace; Minor; 0E8B4F; Locations.AccessPalace, Items.RocsCape, Items.PacciCane; - PalaceRupee5:Palace; Minor; 0E8B5F; Locations.AccessPalace, Items.RocsCape, Items.PacciCane; + + DropletsLeftPathRupee1:Droplets; Minor; 0x0E3F8B; Locations.AccessDroplets, Items.BigKey`TOD_SET`; + DropletsLeftPathRupee2:Droplets; Minor; 0x0E3F9B; Locations.AccessDroplets, Items.BigKey`TOD_SET`; + DropletsLeftPathRupee3:Droplets; Minor; 0x0E3FAB; Locations.AccessDroplets, Items.BigKey`TOD_SET`; + DropletsLeftPathRupee4:Droplets; Minor; 0x0E3FBB; Locations.AccessDroplets, Items.BigKey`TOD_SET`; + DropletsLeftPathRupee5:Droplets; Minor; 0x0E3FCB; Locations.AccessDroplets, Items.BigKey`TOD_SET`; + DropletsRightPathRupee1:Droplets; Minor; 0x0E483F; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.SmallKey`TOD_SET`:4, Items.LanternOff, (|(&Items.Flippers, Items.GustJar, Items.RocsCape), Helpers.HasDamageSource); + DropletsRightPathRupee2:Droplets; Minor; 0x0E484F; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.SmallKey`TOD_SET`:4, Items.LanternOff, (|(&Items.Flippers, Items.GustJar, Items.RocsCape), Helpers.HasDamageSource); + DropletsRightPathRupee3:Droplets; Minor; 0x0E485F; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.SmallKey`TOD_SET`:4, Items.LanternOff, (|(&Items.Flippers, Items.GustJar, Items.RocsCape), Helpers.HasDamageSource); + DropletsRightPathRupee4:Droplets; Minor; 0x0E486F; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.SmallKey`TOD_SET`:4, Items.LanternOff, (|(&Items.Flippers, Items.GustJar, Items.RocsCape), Helpers.HasDamageSource); + DropletsRightPathRupee5:Droplets; Minor; 0x0E487F; Locations.AccessDroplets, Items.BigKey`TOD_SET`, Items.SmallKey`TOD_SET`:4, Items.LanternOff, (|(&Items.Flippers, Items.GustJar, Items.RocsCape), Helpers.HasDamageSource); + + CoFRupee1:FlameCave; Minor; 0x0DFAEB; Helpers.CoFAccess; + CoFRupee2:FlameCave; Minor; 0x0DFAFB; Helpers.CoFAccess; + CoFRupee3:FlameCave; Minor; 0x0DFB0B; Helpers.CoFAccess; + CoFRupee4:FlameCave; Minor; 0x0DFB1B; Helpers.CoFAccess; + CoFRupee5:FlameCave; Minor; 0x0DFB2B; Helpers.CoFAccess; + + PalaceRupee1:Palace; Minor; 0x0E8B1F; Locations.AccessPalace, Items.RocsCape, Items.PacciCane; + PalaceRupee2:Palace; Minor; 0x0E8B2F; Locations.AccessPalace, Items.RocsCape, Items.PacciCane; + PalaceRupee3:Palace; Minor; 0x0E8B3F; Locations.AccessPalace, Items.RocsCape, Items.PacciCane; + PalaceRupee4:Palace; Minor; 0x0E8B4F; Locations.AccessPalace, Items.RocsCape, Items.PacciCane; + PalaceRupee5:Palace; Minor; 0x0E8B5F; Locations.AccessPalace, Items.RocsCape, Items.PacciCane; !ifdef - WHYWOULDYOUDOTHISTOYOURSELF - FlipsCaveWaterfallRupee; Minor; 0EF79B; Items.Ocarina, Items.Flippers, Items.PacciCane; + FlipsCaveWaterfallRupee; Minor; 0x0EF79B; Items.Ocarina, Items.Flippers, Items.PacciCane; !endif - FarmCaveRupee; Minor; 0F3C9F; Locations.AccessEastField, Items.MoleMitts; + FarmCaveRupee; Minor; 0x0F3C9F; Locations.AccessEastField, Items.MoleMitts; !ifdef - OPENFUSIONS - CrenelBeanstalkRupee1; Minor; 0F5DAB; Locations.AccessCrenel, Items.GripRing; - CrenelBeanstalkRupee2; Minor; 0F5DBB; Locations.AccessCrenel, Items.GripRing; - CrenelBeanstalkRupee3; Minor; 0F5DCB; Locations.AccessCrenel, Items.GripRing; - CrenelBeanstalkRupee4; Minor; 0F5DDB; Locations.AccessCrenel, Items.GripRing; - CrenelBeanstalkRupee5; Minor; 0F5DEB; Locations.AccessCrenel, Items.GripRing; - CrenelBeanstalkRupee6; Minor; 0F5DFB; Locations.AccessCrenel, Items.GripRing; - CrenelBeanstalkRupee7; Minor; 0F5E0B; Locations.AccessCrenel, Items.GripRing; - CrenelBeanstalkRupee8; Minor; 0F5E1B; Locations.AccessCrenel, Items.GripRing; - - WesternWoodBeanstalkRupee1; Minor; 0F6143; Helpers.CanSplit2; - WesternWoodBeanstalkRupee2; Minor; 0F6153; Helpers.CanSplit2; - WesternWoodBeanstalkRupee3; Minor; 0F6163; Helpers.CanSplit2; - WesternWoodBeanstalkRupee4; Minor; 0F6173; Helpers.CanSplit2; - WesternWoodBeanstalkRupee5; Minor; 0F6183; Helpers.CanSplit2; - WesternWoodBeanstalkRupee6; Minor; 0F6193; Helpers.CanSplit2; - WesternWoodBeanstalkRupee7; Minor; 0F61A3; Helpers.CanSplit2; - WesternWoodBeanstalkRupee8; Minor; 0F61B3; Helpers.CanSplit2; - WesternWoodBeanstalkRupee9; Minor; 0F61C3; Helpers.CanSplit2; - WesternWoodBeanstalkRupee10; Minor; 0F61D3; Helpers.CanSplit2; - WesternWoodBeanstalkRupee11; Minor; 0F61E3; Helpers.CanSplit2; - WesternWoodBeanstalkRupee12; Minor; 0F61F3; Helpers.CanSplit2; - WesternWoodBeanstalkRupee13; Minor; 0F6203; Helpers.CanSplit2; - WesternWoodBeanstalkRupee14; Minor; 0F6213; Helpers.CanSplit2; - WesternWoodBeanstalkRupee15; Minor; 0F6223; Helpers.CanSplit2; - WesternWoodBeanstalkRupee16; Minor; 0F6233; Helpers.CanSplit2; - - LinkHousePuddleCaveRupee1; Minor; 0F8283; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); - LinkHousePuddleCaveRupee2; Minor; 0F8293; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); - LinkHousePuddleCaveRupee3; Minor; 0F82A3; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); - LinkHousePuddleCaveRupee4; Minor; 0F82B3; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); - LinkHousePuddleCaveRupee5; Minor; 0F82C3; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); - LinkHousePuddleCaveRupee6; Minor; 0F82D3; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); - LinkHousePuddleCaveRupee7; Minor; 0F82E3; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); - LinkHousePuddleCaveRupee8; Minor; 0F82F3; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); - LinkHousePuddleCaveRupee9; Minor; 0F8303; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); - LinkHousePuddleCaveRupee10; Minor; 0F8313; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); - LinkHousePuddleCaveRupee11; Minor; 0F8323; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); - LinkHousePuddleCaveRupee12; Minor; 0F8333; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); - LinkHousePuddleCaveRupee13; Minor; 0F8343; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); - LinkHousePuddleCaveRupee14; Minor; 0F8353; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); - LinkHousePuddleCaveRupee15; Minor; 0F8363; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); - - TrilbyPuddleCaveRupee1; Minor; 0F83BB; Helpers.CanSplit2; - TrilbyPuddleCaveRupee2; Minor; 0F83CB; Helpers.CanSplit2; - TrilbyPuddleCaveRupee3; Minor; 0F83DB; Helpers.CanSplit2; - TrilbyPuddleCaveRupee4; Minor; 0F83EB; Helpers.CanSplit2; - TrilbyPuddleCaveRupee5; Minor; 0F83FB; Helpers.CanSplit2; - TrilbyPuddleCaveRupee6; Minor; 0F840B; Helpers.CanSplit2; - TrilbyPuddleCaveRupee7; Minor; 0F841B; Helpers.CanSplit2; - TrilbyPuddleCaveRupee8; Minor; 0F842B; Helpers.CanSplit2; - TrilbyPuddleCaveRupee9; Minor; 0F843B; Helpers.CanSplit2; - TrilbyPuddleCaveRupee10; Minor; 0F844B; Helpers.CanSplit2; - TrilbyPuddleCaveRupee11; Minor; 0F845B; Helpers.CanSplit2; - TrilbyPuddleCaveRupee12; Minor; 0F846B; Helpers.CanSplit2; - TrilbyPuddleCaveRupee13; Minor; 0F847B; Helpers.CanSplit2; - TrilbyPuddleCaveRupee14; Minor; 0F848B; Helpers.CanSplit2; - TrilbyPuddleCaveRupee15; Minor; 0F849B; Helpers.CanSplit2; + CrenelBeanstalkRupee1; Minor; 0x0F5DAB; Locations.AccessCrenel, Items.GripRing; + CrenelBeanstalkRupee2; Minor; 0x0F5DBB; Locations.AccessCrenel, Items.GripRing; + CrenelBeanstalkRupee3; Minor; 0x0F5DCB; Locations.AccessCrenel, Items.GripRing; + CrenelBeanstalkRupee4; Minor; 0x0F5DDB; Locations.AccessCrenel, Items.GripRing; + CrenelBeanstalkRupee5; Minor; 0x0F5DEB; Locations.AccessCrenel, Items.GripRing; + CrenelBeanstalkRupee6; Minor; 0x0F5DFB; Locations.AccessCrenel, Items.GripRing; + CrenelBeanstalkRupee7; Minor; 0x0F5E0B; Locations.AccessCrenel, Items.GripRing; + CrenelBeanstalkRupee8; Minor; 0x0F5E1B; Locations.AccessCrenel, Items.GripRing; + + WesternWoodBeanstalkRupee1; Minor; 0x0F6143; Helpers.CanSplit2; + WesternWoodBeanstalkRupee2; Minor; 0x0F6153; Helpers.CanSplit2; + WesternWoodBeanstalkRupee3; Minor; 0x0F6163; Helpers.CanSplit2; + WesternWoodBeanstalkRupee4; Minor; 0x0F6173; Helpers.CanSplit2; + WesternWoodBeanstalkRupee5; Minor; 0x0F6183; Helpers.CanSplit2; + WesternWoodBeanstalkRupee6; Minor; 0x0F6193; Helpers.CanSplit2; + WesternWoodBeanstalkRupee7; Minor; 0x0F61A3; Helpers.CanSplit2; + WesternWoodBeanstalkRupee8; Minor; 0x0F61B3; Helpers.CanSplit2; + WesternWoodBeanstalkRupee9; Minor; 0x0F61C3; Helpers.CanSplit2; + WesternWoodBeanstalkRupee10; Minor; 0x0F61D3; Helpers.CanSplit2; + WesternWoodBeanstalkRupee11; Minor; 0x0F61E3; Helpers.CanSplit2; + WesternWoodBeanstalkRupee12; Minor; 0x0F61F3; Helpers.CanSplit2; + WesternWoodBeanstalkRupee13; Minor; 0x0F6203; Helpers.CanSplit2; + WesternWoodBeanstalkRupee14; Minor; 0x0F6213; Helpers.CanSplit2; + WesternWoodBeanstalkRupee15; Minor; 0x0F6223; Helpers.CanSplit2; + WesternWoodBeanstalkRupee16; Minor; 0x0F6233; Helpers.CanSplit2; + + LinkHousePuddleCaveRupee1; Minor; 0x0F8283; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); + LinkHousePuddleCaveRupee2; Minor; 0x0F8293; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); + LinkHousePuddleCaveRupee3; Minor; 0x0F82A3; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); + LinkHousePuddleCaveRupee4; Minor; 0x0F82B3; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); + LinkHousePuddleCaveRupee5; Minor; 0x0F82C3; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); + LinkHousePuddleCaveRupee6; Minor; 0x0F82D3; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); + LinkHousePuddleCaveRupee7; Minor; 0x0F82E3; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); + LinkHousePuddleCaveRupee8; Minor; 0x0F82F3; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); + LinkHousePuddleCaveRupee9; Minor; 0x0F8303; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); + LinkHousePuddleCaveRupee10; Minor; 0x0F8313; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); + LinkHousePuddleCaveRupee11; Minor; 0x0F8323; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); + LinkHousePuddleCaveRupee12; Minor; 0x0F8333; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); + LinkHousePuddleCaveRupee13; Minor; 0x0F8343; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); + LinkHousePuddleCaveRupee14; Minor; 0x0F8353; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); + LinkHousePuddleCaveRupee15; Minor; 0x0F8363; (|Helpers.CanDestroyTrees,Items.Flippers, Items.RocsCape); + + TrilbyPuddleCaveRupee1; Minor; 0x0F83BB; Helpers.CanSplit2; + TrilbyPuddleCaveRupee2; Minor; 0x0F83CB; Helpers.CanSplit2; + TrilbyPuddleCaveRupee3; Minor; 0x0F83DB; Helpers.CanSplit2; + TrilbyPuddleCaveRupee4; Minor; 0x0F83EB; Helpers.CanSplit2; + TrilbyPuddleCaveRupee5; Minor; 0x0F83FB; Helpers.CanSplit2; + TrilbyPuddleCaveRupee6; Minor; 0x0F840B; Helpers.CanSplit2; + TrilbyPuddleCaveRupee7; Minor; 0x0F841B; Helpers.CanSplit2; + TrilbyPuddleCaveRupee8; Minor; 0x0F842B; Helpers.CanSplit2; + TrilbyPuddleCaveRupee9; Minor; 0x0F843B; Helpers.CanSplit2; + TrilbyPuddleCaveRupee10; Minor; 0x0F844B; Helpers.CanSplit2; + TrilbyPuddleCaveRupee11; Minor; 0x0F845B; Helpers.CanSplit2; + TrilbyPuddleCaveRupee12; Minor; 0x0F846B; Helpers.CanSplit2; + TrilbyPuddleCaveRupee13; Minor; 0x0F847B; Helpers.CanSplit2; + TrilbyPuddleCaveRupee14; Minor; 0x0F848B; Helpers.CanSplit2; + TrilbyPuddleCaveRupee15; Minor; 0x0F849B; Helpers.CanSplit2; !endif !endif diff --git a/UI/MainWindow.cs b/UI/MainWindow.cs index 5274d9b6..aae7a526 100644 --- a/UI/MainWindow.cs +++ b/UI/MainWindow.cs @@ -119,6 +119,11 @@ private void Randomize_Click(object sender, EventArgs e) statusText.Text = $"Successfully randomized seed {seed}"; } + catch (ParserException error) + { + MessageBox.Show(error.Message); + statusText.Text = $"Error parsing logic file: {error.Message}"; + } catch (ShuffleException error) { MessageBox.Show(error.Message); @@ -341,6 +346,8 @@ private void SaveSpoilerButton_Click(object sender, EventArgs e) // Write output to ROM, then add patches string spoilerLog = shuffler.GetSpoiler(); File.WriteAllText(sfd.FileName, spoilerLog); + MessageBox.Show("Spoiler successfully saved.", "Success", MessageBoxButtons.OK, MessageBoxIcon.Information); + statusText.Text = $"Successfully saved \"{sfd.FileName}\""; } private void LoadOptionControls(List options) diff --git a/Utilities/StringUtil.cs b/Utilities/StringUtil.cs index 3bedb4e6..247c8afd 100644 --- a/Utilities/StringUtil.cs +++ b/Utilities/StringUtil.cs @@ -1,4 +1,6 @@ -namespace MinishRandomizer.Utilities +using System.Globalization; + +namespace MinishRandomizer.Utilities { class StringUtil { @@ -37,5 +39,32 @@ public static string AsStringHex32(int val) { return AsStringHex(val, 32); } + + //just so its all in one place + public static bool ParseString(string val, out int value) + { + if (val.StartsWith("0x") || val.StartsWith("0X")) + { + val = val.Substring(2); + return int.TryParse(val, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out value); + } + else + { + return int.TryParse(val, out value); + } + } + + public static bool ParseString(string val, out byte value) + { + if (val.StartsWith("0x") || val.StartsWith("0X")) + { + val = val.Substring(2); + return byte.TryParse(val, NumberStyles.HexNumber, CultureInfo.InvariantCulture, out value); + } + else + { + return byte.TryParse(val, out value); + } + } } }