diff --git a/OpenTracker.Models/BossSection.cs b/OpenTracker.Models/BossSection.cs
index 124b77cd..4778167b 100644
--- a/OpenTracker.Models/BossSection.cs
+++ b/OpenTracker.Models/BossSection.cs
@@ -394,6 +394,28 @@ public BossSection(Game game, LocationID iD)
_game.Regions[RegionID.DeathMountainEastTop].PropertyChanged += OnRequirementChanged;
_game.Regions[RegionID.DarkDeathMountainTop].PropertyChanged += OnRequirementChanged;
+ break;
+
+ case LocationID.GanonsTower:
+
+ _defaultBoss = _game.Bosses[BossType.Aga];
+ _boss = _game.Bosses[BossType.Aga];
+ Prize = _game.Items[ItemType.Aga2];
+ _region = _game.Regions[RegionID.GanonsTower];
+
+ GetAccessibility = () =>
+ {
+ if ((_game.Items.Has(ItemType.Bow) || _game.Mode.EnemyShuffle.Value) &&
+ _game.Items.Has(ItemType.GTSmallKey, 2) && _game.Items.Has(ItemType.GTBigKey))
+ return AccessibilityLevel.Normal;
+
+ return AccessibilityLevel.None;
+ };
+
+ itemReqs.Add(_game.Items[ItemType.Bow]);
+ itemReqs.Add(_game.Items[ItemType.GTSmallKey]);
+ itemReqs.Add(_game.Items[ItemType.GTBigKey]);
+
break;
}
diff --git a/OpenTracker.Models/EntranceSection.cs b/OpenTracker.Models/EntranceSection.cs
index b29b49d9..524ce110 100644
--- a/OpenTracker.Models/EntranceSection.cs
+++ b/OpenTracker.Models/EntranceSection.cs
@@ -496,7 +496,7 @@ public EntranceSection(Game game, LocationID iD)
return AccessibilityLevel.Normal;
}
- return AccessibilityLevel.Inspect;
+ return AccessibilityLevel.None;
};
itemReqs.Add(_game.Items[ItemType.MoonPearl]);
@@ -911,8 +911,6 @@ public EntranceSection(Game game, LocationID iD)
Name = "Cave";
_standardItemProvided = _game.Items[ItemType.DesertBackAccess];
_invertedItemProvided = _game.Items[ItemType.DesertBackAccess];
- _standardRegion = _game.Regions[RegionID.LightWorld];
- _invertedRegion = _game.Regions[RegionID.DarkWorldSouth];
GetAccessibility = () =>
{
@@ -1268,8 +1266,6 @@ public EntranceSection(Game game, LocationID iD)
Name = "Cave";
_standardItemProvided = _game.Items[ItemType.BumperCaveAccess];
_invertedItemProvided = _game.Items[ItemType.BumperCaveAccess];
- _standardRegion = _game.Regions[RegionID.LightWorld];
- _invertedRegion = _game.Regions[RegionID.DarkWorldSouth];
GetAccessibility = () =>
{
@@ -1410,9 +1406,9 @@ public EntranceSection(Game game, LocationID iD)
Name = "House";
_standardItemProvided = _game.Items[ItemType.DarkWorldSouthAccess];
- _invertedItemProvided = _game.Items[ItemType.LightWorldAccess];
+ _invertedItemProvided = _game.Items[ItemType.DarkWorldSouthAccess];
_standardRegion = _game.Regions[RegionID.DarkWorldSouth];
- _invertedRegion = _game.Regions[RegionID.LightWorld];
+ _invertedRegion = _game.Regions[RegionID.DarkWorldSouth];
GetAccessibility = () => { return AccessibilityLevel.Normal; };
@@ -1550,10 +1546,27 @@ public EntranceSection(Game game, LocationID iD)
GetAccessibility = () =>
{
- // Default to full access, but not open until GT completed or Fast Ganon mode
- return AccessibilityLevel.Normal;
+ if (_game.Mode.WorldState == WorldState.StandardOpen)
+ {
+ if (_game.Items.Has(ItemType.Aga2))
+ return AccessibilityLevel.Normal;
+ }
+
+ if (_game.Mode.WorldState == WorldState.Inverted)
+ {
+ if (_game.Items.Has(ItemType.Aga2))
+ return _game.Regions[RegionID.HyruleCastleSecondFloor].Accessibility;
+
+ return AccessibilityLevel.Inspect;
+ }
+
+ return AccessibilityLevel.None;
};
+ itemReqs.Add(_game.Items[ItemType.Aga2]);
+
+ _game.Regions[RegionID.HyruleCastleSecondFloor].PropertyChanged += OnRequirementChanged;
+
break;
case LocationID.DarkIceRodCave:
@@ -1673,7 +1686,6 @@ public EntranceSection(Game game, LocationID iD)
_standardItemProvided = _game.Items[ItemType.LakeHyliaFairyIslandAccess];
_invertedItemProvided = _game.Items[ItemType.LakeHyliaFairyIslandAccess];
_standardRegion = _game.Regions[RegionID.LightWorld];
- _invertedRegion = _game.Regions[RegionID.DarkWorldSouth];
GetAccessibility = () =>
{
@@ -1690,7 +1702,9 @@ public EntranceSection(Game game, LocationID iD)
if (_game.Mode.WorldState == WorldState.Inverted)
{
- if (_game.Items.Has(ItemType.Gloves, 2) && _game.Items.Has(ItemType.Flippers))
+ if ((_game.Regions[RegionID.DarkWorldSouth].Accessibility == AccessibilityLevel.Normal ||
+ _game.Regions[RegionID.DarkWorldSouthEast].Accessibility == AccessibilityLevel.Normal) &&
+ _game.Items.Has(ItemType.Gloves, 2) && _game.Items.Has(ItemType.Flippers))
return AccessibilityLevel.Normal;
if (_game.Items.Has(ItemType.MoonPearl))
@@ -1703,7 +1717,9 @@ public EntranceSection(Game game, LocationID iD)
return AccessibilityLevel.SequenceBreak;
}
- if (_game.Items.Has(ItemType.Gloves, 2))
+ if ((_game.Regions[RegionID.DarkWorldSouth].Accessibility >= AccessibilityLevel.SequenceBreak ||
+ _game.Regions[RegionID.DarkWorldSouthEast].Accessibility == AccessibilityLevel.SequenceBreak) &&
+ _game.Items.Has(ItemType.Gloves, 2))
return AccessibilityLevel.SequenceBreak;
}
@@ -1815,7 +1831,6 @@ public EntranceSection(Game game, LocationID iD)
_standardItemProvided = _game.Items[ItemType.IcePalaceAccess];
_invertedItemProvided = _game.Items[ItemType.IcePalaceAccess];
_standardRegion = _game.Regions[RegionID.LightWorld];
- _invertedRegion = _game.Regions[RegionID.DarkWorldSouth];
GetAccessibility = () =>
{
@@ -1835,7 +1850,9 @@ public EntranceSection(Game game, LocationID iD)
if (_game.Mode.WorldState == WorldState.Inverted)
{
- if (_game.Items.Has(ItemType.Flippers))
+ if ((_game.Regions[RegionID.DarkWorldSouth].Accessibility == AccessibilityLevel.Normal ||
+ _game.Regions[RegionID.DarkWorldSouthEast].Accessibility == AccessibilityLevel.Normal) &&
+ _game.Items.Has(ItemType.Flippers))
return AccessibilityLevel.Normal;
if (_game.Items.Has(ItemType.Mirror))
@@ -1846,9 +1863,15 @@ public EntranceSection(Game game, LocationID iD)
if (_game.Regions[RegionID.LightWorld].Accessibility == AccessibilityLevel.Normal &&
_game.Items.Has(ItemType.Flippers) && _game.Items.Has(ItemType.MoonPearl))
return AccessibilityLevel.Normal;
+
+ if (_game.Regions[RegionID.LightWorld].Accessibility >= AccessibilityLevel.SequenceBreak &&
+ _game.Items.Has(ItemType.MoonPearl))
+ return AccessibilityLevel.SequenceBreak;
}
- return AccessibilityLevel.SequenceBreak;
+ if (_game.Regions[RegionID.DarkWorldSouth].Accessibility >= AccessibilityLevel.SequenceBreak ||
+ _game.Regions[RegionID.DarkWorldSouthEast].Accessibility >= AccessibilityLevel.SequenceBreak)
+ return AccessibilityLevel.SequenceBreak;
}
return AccessibilityLevel.None;
@@ -2454,7 +2477,6 @@ public EntranceSection(Game game, LocationID iD)
_standardItemProvided = _game.Items[ItemType.TurtleRockSafetyDoorAccess];
_invertedItemProvided = _game.Items[ItemType.TurtleRockSafetyDoorAccess];
_standardRegion = _game.Regions[RegionID.DarkDeathMountainTop];
- _invertedRegion = _game.Regions[RegionID.DarkWorldSouth];
GetAccessibility = () =>
{
@@ -2499,6 +2521,17 @@ public EntranceSection(Game game, LocationID iD)
itemReqs.Add(_game.Items[ItemType.Mirror]);
+ break;
+ case LocationID.LinksHouseEntrance:
+
+ Name = "Link's House";
+ _standardItemProvided = _game.Items[ItemType.LightWorldAccess];
+ _invertedItemProvided = _game.Items[ItemType.LightWorldAccess];
+ _standardRegion = _game.Regions[RegionID.LightWorld];
+ _invertedRegion = _game.Regions[RegionID.LightWorld];
+
+ GetAccessibility = () => { return AccessibilityLevel.Normal; };
+
break;
}
diff --git a/OpenTracker.Models/Enums/ItemType.cs b/OpenTracker.Models/Enums/ItemType.cs
index 89d17e21..52fa3f07 100644
--- a/OpenTracker.Models/Enums/ItemType.cs
+++ b/OpenTracker.Models/Enums/ItemType.cs
@@ -44,6 +44,7 @@ public enum ItemType
Sword,
Shield,
Mail,
+ Aga2,
GreenPendant,
Pendant,
Crystal,
diff --git a/OpenTracker.Models/Enums/LocationID.cs b/OpenTracker.Models/Enums/LocationID.cs
index cba79b3d..03423e3b 100644
--- a/OpenTracker.Models/Enums/LocationID.cs
+++ b/OpenTracker.Models/Enums/LocationID.cs
@@ -193,6 +193,7 @@ public enum LocationID
TRLedgeLeft,
TRLedgeRight,
TRSafetyDoor,
- HookshotCaveTop
+ HookshotCaveTop,
+ LinksHouseEntrance
}
}
diff --git a/OpenTracker.Models/ItemSection.cs b/OpenTracker.Models/ItemSection.cs
index 37858bb4..b2c68045 100644
--- a/OpenTracker.Models/ItemSection.cs
+++ b/OpenTracker.Models/ItemSection.cs
@@ -623,7 +623,7 @@ public ItemSection(Game game, Location location, int index = 0)
break;
case LocationID.HauntedGrove:
- _baseTotal = 2;
+ _baseTotal = 1;
Name = "Stumpy";
_standardRegion = _game.Regions[RegionID.DarkWorldSouth];
_invertedRegion = _game.Regions[RegionID.DarkWorldSouth];
diff --git a/OpenTracker.Models/Location.cs b/OpenTracker.Models/Location.cs
index 11970007..bd842358 100644
--- a/OpenTracker.Models/Location.cs
+++ b/OpenTracker.Models/Location.cs
@@ -143,7 +143,8 @@ public Location(Game game, LocationID iD)
MapLocations.Add(new MapLocation(this, MapID.DarkWorld, 1097, 1366,
new Mode()
{
- WorldState = WorldState.Inverted
+ WorldState = WorldState.Inverted,
+ EntranceShuffle = false
}));
itemSections = 1;
break;
@@ -183,7 +184,10 @@ public Location(Game game, LocationID iD)
case LocationID.BombosTablet:
Name = "Bombos Tablet";
MapLocations.Add(new MapLocation(this, MapID.LightWorld, 440, 1845, new Mode()));
- MapLocations.Add(new MapLocation(this, MapID.DarkWorld, 440, 1845, new Mode()));
+ MapLocations.Add(new MapLocation(this, MapID.DarkWorld, 440, 1845, new Mode()
+ {
+ WorldState = WorldState.StandardOpen
+ }));
itemSections = 1;
break;
case LocationID.SouthOfGrove:
@@ -753,6 +757,7 @@ public Location(Game game, LocationID iD)
EntranceShuffle = true
}));
itemSections = 1;
+ BossSection = new BossSection(game, iD);
break;
case LocationID.LumberjackHouse:
Name = "Lumber House";
@@ -1362,13 +1367,6 @@ public Location(Game game, LocationID iD)
MapLocations.Add(new MapLocation(this, MapID.DarkWorld, 1098, 1382,
new Mode()
{
- WorldState = WorldState.StandardOpen,
- EntranceShuffle = true
- }));
- MapLocations.Add(new MapLocation(this, MapID.LightWorld, 1098, 1382,
- new Mode()
- {
- WorldState = WorldState.Inverted,
EntranceShuffle = true
}));
entranceSection = true;
@@ -1447,9 +1445,16 @@ public Location(Game game, LocationID iD)
break;
case LocationID.GanonHole:
Name = "Ganon Hole";
+ MapLocations.Add(new MapLocation(this, MapID.LightWorld, 902, 862,
+ new Mode()
+ {
+ WorldState = WorldState.Inverted,
+ EntranceShuffle = true
+ }));
MapLocations.Add(new MapLocation(this, MapID.DarkWorld, 1000, 820,
new Mode()
{
+ WorldState = WorldState.StandardOpen,
EntranceShuffle = true
}));
entranceSection = true;
@@ -1868,6 +1873,16 @@ public Location(Game game, LocationID iD)
}));
entranceSection = true;
break;
+ case LocationID.LinksHouseEntrance:
+ Name = "Link's House";
+ MapLocations.Add(new MapLocation(this, MapID.LightWorld, 1098, 1382,
+ new Mode()
+ {
+ WorldState = WorldState.Inverted,
+ EntranceShuffle = true
+ }));
+ entranceSection = true;
+ break;
}
for (int i = 0; i < itemSections; i++)
diff --git a/OpenTracker.Models/Region.cs b/OpenTracker.Models/Region.cs
index 61206258..d779b331 100644
--- a/OpenTracker.Models/Region.cs
+++ b/OpenTracker.Models/Region.cs
@@ -210,10 +210,6 @@ public Region(Game game, RegionID iD)
// Access via Hammer House exit
if (_game.Items.Has(ItemType.HammerHouseAccess) && _game.Items.Has(ItemType.Hammer))
return AccessibilityLevel.Normal;
-
- // Access via South Dark World by lifting rock near Jeremiah
- if (_game.Items.Has(ItemType.Gloves, 2))
- return AccessibilityLevel.Normal;
}
// Default to no access
@@ -236,18 +232,23 @@ public Region(Game game, RegionID iD)
// Inverted mode
if (_game.Mode.WorldState == WorldState.Inverted)
{
- AccessibilityLevel darkWorldWitch = AccessibilityLevel.None;
+ AccessibilityLevel dWSouth = AccessibilityLevel.None;
+ AccessibilityLevel dWWitch = AccessibilityLevel.None;
AccessibilityLevel lightWorld = AccessibilityLevel.None;
+ // Access via South Dark World by mitts
+ if (_game.Items.Has(ItemType.Gloves, 2) && !excludedRegions.Contains(RegionID.DarkWorldSouth))
+ dWSouth = _game.Regions[RegionID.DarkWorldSouth].GetAccessibility(newExcludedRegions);
+
// Access via Dark World Witch area by hookshot
if (_game.Items.Has(ItemType.Hookshot) && !excludedRegions.Contains(RegionID.DarkWorldWitchArea))
- darkWorldWitch = _game.Regions[RegionID.DarkWorldWitchArea].GetAccessibility(newExcludedRegions);
+ dWWitch = _game.Regions[RegionID.DarkWorldWitchArea].GetAccessibility(newExcludedRegions);
// Access via Light World by mirror
if (_game.Items.Has(ItemType.Mirror) && !excludedRegions.Contains(RegionID.LightWorld))
lightWorld = _game.Regions[RegionID.LightWorld].GetAccessibility(newExcludedRegions);
- return (AccessibilityLevel)Math.Max((byte)darkWorldWitch, (byte)lightWorld);
+ return (AccessibilityLevel)Math.Max(Math.Max((byte)dWSouth, (byte)dWWitch), (byte)lightWorld);
}
// Default to no access
@@ -263,6 +264,7 @@ public Region(Game game, RegionID iD)
itemReqs.Add(_game.Items[ItemType.Hookshot]);
itemReqs.Add(_game.Items[ItemType.Mirror]);
+ _observedRegions.Add(RegionID.DarkWorldSouth);
_observedRegions.Add(RegionID.DarkWorldWitchArea);
_observedRegions.Add(RegionID.LightWorld);
@@ -286,7 +288,11 @@ public Region(Game game, RegionID iD)
// Inverted mode
if (_game.Mode.WorldState == WorldState.Inverted)
- return AccessibilityLevel.Normal;
+ {
+ // Access is provided from the start in non-entrance shuffle
+ if (!_game.Mode.EntranceShuffle.Value)
+ return AccessibilityLevel.Normal;
+ }
// Default to no access
return AccessibilityLevel.None;
@@ -314,6 +320,28 @@ public Region(Game game, RegionID iD)
return (AccessibilityLevel)Math.Max((byte)darkWorldWest, (byte)darkWorldEast);
}
+ // Inverted mode
+ if (_game.Mode.WorldState == WorldState.Inverted)
+ {
+ AccessibilityLevel dWWest = AccessibilityLevel.None;
+ AccessibilityLevel dWEast = AccessibilityLevel.None;
+ AccessibilityLevel lightWorld = AccessibilityLevel.None;
+
+ // Access via West Dark World
+ if (!excludedRegions.Contains(RegionID.DarkWorldWest))
+ dWWest = _game.Regions[RegionID.DarkWorldWest].GetAccessibility(newExcludedRegions);
+
+ // Access via East Dark World by hammer
+ if (_game.Items.Has(ItemType.Hammer) && !excludedRegions.Contains(RegionID.DarkWorldEast))
+ dWEast = _game.Regions[RegionID.DarkWorldEast].GetAccessibility(newExcludedRegions);
+
+ // Access via Light World by mirror
+ if (_game.Items.Has(ItemType.Mirror) && !excludedRegions.Contains(RegionID.LightWorld))
+ lightWorld = _game.Regions[RegionID.LightWorld].GetAccessibility(newExcludedRegions);
+
+ return (AccessibilityLevel)Math.Max(Math.Max((byte)dWWest, (byte)dWEast), (byte)lightWorld);
+ }
+
// Default to no access
return AccessibilityLevel.None;
};
@@ -322,9 +350,11 @@ public Region(Game game, RegionID iD)
itemReqs.Add(_game.Items[ItemType.MoonPearl]);
itemReqs.Add(_game.Items[ItemType.Hammer]);
itemReqs.Add(_game.Items[ItemType.Gloves]);
+ itemReqs.Add(_game.Items[ItemType.Mirror]);
_observedRegions.Add(RegionID.DarkWorldWest);
_observedRegions.Add(RegionID.DarkWorldEast);
+ _observedRegions.Add(RegionID.LightWorld);
break;
case RegionID.DarkWorldEast:
@@ -347,17 +377,6 @@ public Region(Game game, RegionID iD)
return AccessibilityLevel.Normal;
}
- // Inverted mode
- if (_game.Mode.WorldState == WorldState.Inverted)
- {
- // Access via South Dark World by hammer or flippers
- if (_game.Items.Has(ItemType.Hammer) || _game.Items.Has(ItemType.Flippers))
- return AccessibilityLevel.Normal;
-
- // Always available by fake flippers
- return AccessibilityLevel.SequenceBreak;
- }
-
// Default to no access
return AccessibilityLevel.None;
};
@@ -412,18 +431,30 @@ public Region(Game game, RegionID iD)
// Inverted mode
if (_game.Mode.WorldState == WorldState.Inverted)
{
- AccessibilityLevel darkWorldWitch = AccessibilityLevel.None;
+ AccessibilityLevel dWSouth = AccessibilityLevel.None;
+ AccessibilityLevel dWWitch = AccessibilityLevel.None;
AccessibilityLevel lightWorld = AccessibilityLevel.None;
- // Access via Dark World Witch area by gloves
- if (_game.Items.Has(ItemType.Gloves) && !excludedRegions.Contains(RegionID.DarkWorldWitchArea))
- darkWorldWitch = _game.Regions[RegionID.DarkWorldWitchArea].GetAccessibility(newExcludedRegions);
+ // Access via South Dark World by hammer, flippers, or fake flippers sequence break
+ if (!excludedRegions.Contains(RegionID.DarkWorldSouth))
+ {
+ if (_game.Items.Has(ItemType.Hammer) || _game.Items.Has(ItemType.Flippers))
+ dWSouth = _game.Regions[RegionID.DarkWorldSouth].GetAccessibility(newExcludedRegions);
+ else
+ dWSouth = (AccessibilityLevel)Math.Min((byte)AccessibilityLevel.SequenceBreak,
+ (byte)_game.Regions[RegionID.DarkWorldSouth].GetAccessibility(newExcludedRegions));
+ }
+
+ // Access via Dark World Witch area by hammer or gloves
+ if ((_game.Items.Has(ItemType.Gloves) || _game.Items.Has(ItemType.Hammer))
+ && !excludedRegions.Contains(RegionID.DarkWorldWitchArea))
+ dWWitch = _game.Regions[RegionID.DarkWorldWitchArea].GetAccessibility(newExcludedRegions);
// Access via Light World by mirror
if (_game.Items.Has(ItemType.Mirror) && !excludedRegions.Contains(RegionID.LightWorld))
lightWorld = _game.Regions[RegionID.LightWorld].GetAccessibility(newExcludedRegions);
- return (AccessibilityLevel)Math.Max((byte)darkWorldWitch, (byte)lightWorld);
+ return (AccessibilityLevel)Math.Max(Math.Max((byte)dWSouth, (byte)dWWitch), (byte)lightWorld);
}
// Default to no access
@@ -452,17 +483,6 @@ public Region(Game game, RegionID iD)
if (_game.Items.Has(ItemType.DarkWorldSouthEastAccess))
return AccessibilityLevel.Normal;
- // Inverted mode
- if (_game.Mode.WorldState == WorldState.Inverted)
- {
- // Access via Dark World South by flippers
- if (_game.Items.Has(ItemType.Flippers))
- return AccessibilityLevel.Normal;
-
- // Always available by fake flippers
- return AccessibilityLevel.SequenceBreak;
- }
-
// Default to no access
return AccessibilityLevel.None;
};
@@ -503,10 +523,38 @@ public Region(Game game, RegionID iD)
return (AccessibilityLevel)Math.Max((byte)darkWorldSouth, (byte)darkWorldEast);
}
+ // Inverted mode
if (_game.Mode.WorldState == WorldState.Inverted)
{
+ AccessibilityLevel dWSouth = AccessibilityLevel.None;
+ AccessibilityLevel dWEast = AccessibilityLevel.None;
+ AccessibilityLevel lightWorld = AccessibilityLevel.None;
+
+ // Access via South Dark World by flippers or fake flippers sequence break
+ if (!excludedRegions.Contains(RegionID.DarkWorldSouth))
+ {
+ if (_game.Items.Has(ItemType.Flippers))
+ dWSouth = _game.Regions[RegionID.DarkWorldSouth].GetAccessibility(newExcludedRegions);
+ else
+ dWSouth = (AccessibilityLevel)Math.Min((byte)AccessibilityLevel.SequenceBreak,
+ (byte)_game.Regions[RegionID.DarkWorldSouth].GetAccessibility(newExcludedRegions));
+ }
+
+ // Access via East Dark World by flippers or fake flippers sequence break
+ if (!excludedRegions.Contains(RegionID.DarkWorldEast))
+ {
+ if (_game.Items.Has(ItemType.Flippers))
+ dWEast = _game.Regions[RegionID.DarkWorldEast].GetAccessibility(newExcludedRegions);
+ else
+ dWEast = (AccessibilityLevel)Math.Min((byte)AccessibilityLevel.SequenceBreak,
+ (byte)_game.Regions[RegionID.DarkWorldEast].GetAccessibility(newExcludedRegions));
+ }
+
+ // Access via Light World by mirror
if (_game.Items.Has(ItemType.Mirror) && !excludedRegions.Contains(RegionID.LightWorld))
- return _game.Regions[RegionID.LightWorld].GetAccessibility(newExcludedRegions);
+ lightWorld = _game.Regions[RegionID.LightWorld].GetAccessibility(newExcludedRegions);
+
+ return (AccessibilityLevel)Math.Max(Math.Max((byte)dWSouth, (byte)dWEast), (byte)lightWorld);
}
// Default to no access
@@ -531,13 +579,6 @@ public Region(Game game, RegionID iD)
if (_game.Items.Has(ItemType.DarkWorldWitchAreaAccess))
return AccessibilityLevel.Normal;
- // Inverted mode
- if (_game.Mode.WorldState == WorldState.Inverted)
- {
- // Fake Flippers
- return AccessibilityLevel.SequenceBreak;
- }
-
// Default to no access
return AccessibilityLevel.None;
};
@@ -586,7 +627,7 @@ public Region(Game game, RegionID iD)
AccessibilityLevel darkWorldWest = AccessibilityLevel.None;
AccessibilityLevel lightWorld = AccessibilityLevel.None;
- // Access via South Dark World by gloves, hammer, or flippers
+ // Access via East Dark World by gloves, hammer, flippers, or fake flippers sequence break
if (!excludedRegions.Contains(RegionID.DarkWorldEast))
{
if (_game.Items.Has(ItemType.Gloves) || _game.Items.Has(ItemType.Hammer) ||
@@ -630,7 +671,7 @@ public Region(Game game, RegionID iD)
itemReqs.Add(_game.Items[ItemType.Flippers]);
itemReqs.Add(_game.Items[ItemType.Mirror]);
- _observedRegions.Add(RegionID.DarkWorldSouth);
+ _observedRegions.Add(RegionID.DarkWorldEast);
_observedRegions.Add(RegionID.DarkWorldWest);
_observedRegions.Add(RegionID.LightWorld);
diff --git a/OpenTracker.Setup/OpenTracker.Setup.vdproj b/OpenTracker.Setup/OpenTracker.Setup.vdproj
index 9872d0d4..aca670aa 100644
--- a/OpenTracker.Setup/OpenTracker.Setup.vdproj
+++ b/OpenTracker.Setup/OpenTracker.Setup.vdproj
@@ -25,6 +25,18 @@
"OwnerKey" = "8:_UNDEFINED"
"MsmSig" = "8:_UNDEFINED"
}
+ "Entry"
+ {
+ "MsmKey" = "8:_D4C025E52F6D4B0CBD39712608FCF0CC"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
+ "Entry"
+ {
+ "MsmKey" = "8:_F982271944A740028BEF1707BB09E7DB"
+ "OwnerKey" = "8:_UNDEFINED"
+ "MsmSig" = "8:_UNDEFINED"
+ }
}
"Configurations"
{
@@ -122,6 +134,46 @@
"IsDependency" = "11:FALSE"
"IsolateTo" = "8:"
}
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_D4C025E52F6D4B0CBD39712608FCF0CC"
+ {
+ "SourcePath" = "8:..\\OpenTracker\\bin\\Release\\netcoreapp3.1\\runtimes\\win7-x64\\native\\lzma.dll"
+ "TargetName" = "8:lzma.dll"
+ "Tag" = "8:"
+ "Folder" = "8:_C85AC8B5F1374419BA0D2192D2D360D5"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
+ "{1FB2D0AE-D3B9-43D4-B9DD-F88EC61E35DE}:_F982271944A740028BEF1707BB09E7DB"
+ {
+ "SourcePath" = "8:..\\OpenTracker\\bin\\Release\\netcoreapp3.1\\OpenTracker.deps.json"
+ "TargetName" = "8:OpenTracker.deps.json"
+ "Tag" = "8:"
+ "Folder" = "8:_B21EA2C01C014AC99A33B72F50C26B5D"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Vital" = "11:TRUE"
+ "ReadOnly" = "11:FALSE"
+ "Hidden" = "11:FALSE"
+ "System" = "11:FALSE"
+ "Permanent" = "11:FALSE"
+ "SharedLegacy" = "11:FALSE"
+ "PackageAs" = "3:1"
+ "Register" = "3:1"
+ "Exclude" = "11:FALSE"
+ "IsDependency" = "11:FALSE"
+ "IsolateTo" = "8:"
+ }
}
"FileType"
{
@@ -171,6 +223,39 @@
"Property" = "8:TARGETDIR"
"Folders"
{
+ "{9EF0B969-E518-4E46-987F-47570745A589}:_E06B3B2863E24E9AB0B913149B142886"
+ {
+ "Name" = "8:runtimes"
+ "AlwaysCreate" = "11:FALSE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:_27A98A05854B4037BDDFE4E3006B586B"
+ "Folders"
+ {
+ "{9EF0B969-E518-4E46-987F-47570745A589}:_FEA8C09976974DABAA39152C6D21E161"
+ {
+ "Name" = "8:win7-x64"
+ "AlwaysCreate" = "11:FALSE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:_D00F0A072D36458AB48748027DE43609"
+ "Folders"
+ {
+ "{9EF0B969-E518-4E46-987F-47570745A589}:_C85AC8B5F1374419BA0D2192D2D360D5"
+ {
+ "Name" = "8:native"
+ "AlwaysCreate" = "11:FALSE"
+ "Condition" = "8:"
+ "Transitive" = "11:FALSE"
+ "Property" = "8:_69F8788BF4EC4D4C8AF5D2DDD45C10A0"
+ "Folders"
+ {
+ }
+ }
+ }
+ }
+ }
+ }
}
}
}
@@ -189,15 +274,15 @@
{
"Name" = "8:Microsoft Visual Studio"
"ProductName" = "8:OpenTracker"
- "ProductCode" = "8:{3C3B2E16-BC74-4A4E-9FCD-A4A1A8B88985}"
- "PackageCode" = "8:{5668E037-170A-4223-BEAA-D0C632C636A3}"
+ "ProductCode" = "8:{A3C83B98-5A66-4E86-A455-29CC361E56C5}"
+ "PackageCode" = "8:{26F4FDDD-0B2E-4218-BA21-CB9BCBA965C8}"
"UpgradeCode" = "8:{C98C2121-B4C5-473A-9B86-5407FEFFE8F1}"
"AspNetVersion" = "8:2.0.50727.0"
"RestartWWWService" = "11:FALSE"
"RemovePreviousVersions" = "11:TRUE"
"DetectNewerInstalledVersion" = "11:TRUE"
"InstallAllUsers" = "11:TRUE"
- "ProductVersion" = "8:0.6.1"
+ "ProductVersion" = "8:0.6.2"
"Manufacturer" = "8:OpenTracker"
"ARPHELPTELEPHONE" = "8:"
"ARPHELPLINK" = "8:"
@@ -739,7 +824,7 @@
{
"{5259A561-127C-4D43-A0A1-72F10C7B3BF8}:_8BEB0D6860DB4F80B56A45FAD1BDE151"
{
- "SourcePath" = "8:..\\OpenTracker\\obj\\Debug\\netcoreapp3.1\\OpenTracker.exe"
+ "SourcePath" = "8:..\\OpenTracker\\obj\\Release\\netcoreapp3.1\\OpenTracker.exe"
"TargetName" = "8:"
"Tag" = "8:"
"Folder" = "8:_B21EA2C01C014AC99A33B72F50C26B5D"
diff --git a/OpenTracker/OpenTracker.csproj b/OpenTracker/OpenTracker.csproj
index 7f56db05..be857ee8 100644
--- a/OpenTracker/OpenTracker.csproj
+++ b/OpenTracker/OpenTracker.csproj
@@ -4,11 +4,11 @@
netcoreapp3.1
triforce.ico
- 0.6.1
+ 0.6.2
Tripp
- 0.6.1.0
- 0.6.1.0
- osx-x64;linux-x64;win-x64;win-x86
+ 0.6.2.0
+ 0.6.2.0
+ osx-x64;linux-x64;debian-x64;rhel-x64;win-x64;win-x86;win7-x64;win7-x86
diff --git a/OpenTracker/ViewModels/ItemControlVM.cs b/OpenTracker/ViewModels/ItemControlVM.cs
index d5561b02..83eaed30 100644
--- a/OpenTracker/ViewModels/ItemControlVM.cs
+++ b/OpenTracker/ViewModels/ItemControlVM.cs
@@ -99,9 +99,15 @@ public void ChangeItem(bool rightClick = false)
else
{
if (rightClick)
- _undoRedoManager.Execute(new RemoveItem(_items[0]));
+ {
+ if (_items[0].Current > 0)
+ _undoRedoManager.Execute(new RemoveItem(_items[0]));
+ }
else
- _undoRedoManager.Execute(new AddItem(_items[0]));
+ {
+ if (_items[0].Current < _items[0].Maximum)
+ _undoRedoManager.Execute(new AddItem(_items[0]));
+ }
}
}
}
diff --git a/OpenTracker/ViewModels/SectionControlVM.cs b/OpenTracker/ViewModels/SectionControlVM.cs
index 88c90c9d..3c1626c2 100644
--- a/OpenTracker/ViewModels/SectionControlVM.cs
+++ b/OpenTracker/ViewModels/SectionControlVM.cs
@@ -335,6 +335,8 @@ private void Update()
if (bossSection.Prize == null)
imageBaseString += "unknown";
+ else if (bossSection.Prize.Type == ItemType.Aga2)
+ imageBaseString += "aga";
else
imageBaseString += bossSection.Prize.Type.ToString().ToLower();
@@ -440,7 +442,9 @@ public void ChangeAvailable(bool rightClick = false)
else
{
if (_section is EntranceSection ||
- _section.Accessibility >= AccessibilityLevel.SequenceBreak)
+ (_section is BossSection bossSection &&
+ bossSection.Prize != null && bossSection.Prize.Type == ItemType.Aga2) &&
+ _section.Accessibility >= AccessibilityLevel.SequenceBreak)
{
switch (_section)
{
diff --git a/OpenTracker/Views/ColorSelectDialog.xaml b/OpenTracker/Views/ColorSelectDialog.xaml
index 894c820f..28ebab89 100644
--- a/OpenTracker/Views/ColorSelectDialog.xaml
+++ b/OpenTracker/Views/ColorSelectDialog.xaml
@@ -3,135 +3,139 @@
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:view="clr-namespace:OpenTracker.Views;assembly=OpenTracker"
- mc:Ignorable="d" d:DesignWidth="800" d:DesignHeight="450"
- SizeToContent="WidthAndHeight" CanResize="False"
+ mc:Ignorable="d" d:DesignWidth="420" d:DesignHeight="462"
+ SizeToContent="WidthAndHeight" CanResize="True"
WindowStartupLocation="CenterOwner"
x:Class="OpenTracker.Views.ColorSelectDialog"
Icon="avares://OpenTracker/Assets/triforce.png"
Title="OpenTracker - Color Select">
+ Padding="5" MinWidth="420" MinHeight="462">
-
+
-
+
+
+ Grid.Column="0" Grid.Row="0" Height="20" Width="20" HorizontalAlignment="Left"
+ VerticalAlignment="Center" Margin="3,0,0,0" />
-
+
-
-
+
-
+
-
+ HorizontalAlignment="Left" VerticalAlignment="Center" Margin="3,0,0,0" />
-
+
-
-
+
-
+
-
+ HorizontalAlignment="Left" VerticalAlignment="Center" Margin="3,0,0,0" />
-
+
-
-
+
-
+
-
+ HorizontalAlignment="Left" VerticalAlignment="Center" Margin="3,0,0,0" />
-
+
-
-
+
-
+
-
+ Background="{Binding Path=AccessibilitySequenceBreakColor}" Grid.Column="0"
+ Grid.Row="8" Height="20" Width="20" HorizontalAlignment="Left" VerticalAlignment="Center"
+ Margin="3,0,0,0" />
-
+
-
-
+
-
+
-
+ HorizontalAlignment="Left" VerticalAlignment="Center" Margin="3,0,0,0" />
-
+
-
-
+
+
+
-
+
-
+