Skip to content

Commit 7b60e45

Browse files
Merge pull request #678 from TheTrackerCouncil/fix-ap-goal-markers
Fix goal map markers not showing up properly on AP seeds
2 parents 981b51b + 4d32aaf commit 7b60e45

File tree

7 files changed

+22
-7
lines changed

7 files changed

+22
-7
lines changed

src/TrackerCouncil.Smz3.Data/ParsedRom/ParsedRomDetails.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ public class ParsedRomDetails
1616
public required int GanonsTowerCrystalCount { get; set; }
1717
public required int GanonCrystalCount { get; set; }
1818
public required int TourianBossCount { get; set; }
19+
public required bool OpenPyarmid { get; set; }
1920
public required bool SkipTourianBossDoor { get; set; }
2021
public required List<ParsedRomPlayer> Players { get; set; }
2122
public required List<ParsedRomLocationDetails> Locations { get; set; }

src/TrackerCouncil.Smz3.Data/WorldData/Regions/SuperMetroid/Crateria/WestCrateria.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ public void UpdateMotherBrainAccessibility(Progression progression)
144144
(!World.Config.MetroidKeysanity || World.Config.SkipTourianBossDoor ||
145145
progression.CardCrateriaBoss);
146146

147-
var canEnterTourian = World.GoldenBosses.Count(x => x.Defeated) >= tourianBossRequirement;
147+
var canEnterTourian = World.Rewards.Count(x => x.MarkedReward?.IsInCategory(RewardCategory.Metroid) == true && x.HasReceivedReward) >= tourianBossRequirement;
148148

149149
NewAccessibility = canAccessStatueRoom && canEnterTourian
150150
? Accessibility.Available

src/TrackerCouncil.Smz3.Data/WorldData/Regions/Zelda/DarkWorld/DarkWorldNorthEast.cs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,9 @@ public void UpdateGanonAccessibility(Progression progression, Progression assume
7474
? Config.GanonCrystalCount
7575
: World.State?.MarkedGanonCrystalCount ?? 7;
7676

77+
var numAcquiredCrystals = World.Rewards.Count(x =>
78+
x.MarkedReward?.IsInAnyCategory(RewardCategory.Crystal) == true && x.HasReceivedReward);
79+
7780
if (World.Bosses.First(x => x.Type == BossType.Ganon).Defeated)
7881
{
7982
NewAccessibility = Accessibility.Cleared;
@@ -88,7 +91,7 @@ public void UpdateGanonAccessibility(Progression progression, Progression assume
8891
World.GanonsTower.CanBeatBoss(assumedKeyProgression, true));
8992

9093
var isPyramidOpen = World.Config.OpenPyramid || canClimbGt;
91-
var canHurtGanon = progression.CrystalCount >= ganonCrystalRequirement && progression.MasterSword &&
94+
var canHurtGanon = numAcquiredCrystals >= ganonCrystalRequirement && progression.MasterSword &&
9295
(progression.Lamp || progression.FireRod);
9396

9497
NewAccessibility = canAccessPyramid && isPyramidOpen && canHurtGanon
@@ -107,7 +110,7 @@ public void UpdateGanonAccessibility(Progression progression, Progression assume
107110
assumedKeyProgression.LegacyProgression)));
108111

109112
var isPyramidOpen = World.Config.OpenPyramid || canClimbGt;
110-
var canHurtGanon = progression.CrystalCount >= ganonCrystalRequirement && progression.MasterSword &&
113+
var canHurtGanon = numAcquiredCrystals >= ganonCrystalRequirement && progression.MasterSword &&
111114
(progression.Lamp || progression.FireRod);
112115

113116
NewAccessibility = canAccessPyramid && isPyramidOpen && canHurtGanon

src/TrackerCouncil.Smz3.SeedGenerator/FileData/Patches/GoalsPatch.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,4 +53,9 @@ public static int GetTourianBossCountFromRom(byte[] rom, bool isCasRom)
5353
return BitConverter.ToInt16(rom.Skip(Snes(0xF47200)).Take(2).ToArray());
5454
}
5555
}
56+
57+
public static bool GetOpenPyramid(byte[] rom)
58+
{
59+
return rom[Snes(0x30808B)] == 0x01;
60+
}
5661
}

src/TrackerCouncil.Smz3.SeedGenerator/Generation/Smz3RomParser.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,7 @@ public ParsedRomDetails ParseRomFile(string filePath)
119119
var gtCrystalCount = GoalsPatch.GetGanonsTowerCrystalCountFromRom(rom);
120120
var ganonCrystalCount = GoalsPatch.GetGanonCrystalCountFromRom(rom);
121121
var tourianBossCount = GoalsPatch.GetTourianBossCountFromRom(rom, romGenerator == RomGenerator.Cas);
122+
var openPyramid = GoalsPatch.GetOpenPyramid(rom);
122123
var text = ZeldaTextsPatch.ParseRomText(rom);
123124

124125
logger.LogInformation("Imported {Title} (Seed {SeedNumber})", romTitle, seedNumber);
@@ -135,6 +136,7 @@ public ParsedRomDetails ParseRomFile(string filePath)
135136
GanonsTowerCrystalCount = gtCrystalCount,
136137
GanonCrystalCount = ganonCrystalCount,
137138
TourianBossCount = tourianBossCount,
139+
OpenPyarmid = openPyramid,
138140
SkipTourianBossDoor = skippedTourianBossDoor,
139141
RomGenerator = romGenerator.Value,
140142
Players = players,
@@ -166,6 +168,7 @@ public SeedData GenerateSeedData(RandomizerOptions options, ParsedRomDetails par
166168
config.GanonsTowerCrystalCount = parsedRomDetails.GanonsTowerCrystalCount;
167169
config.GanonCrystalCount = parsedRomDetails.GanonCrystalCount;
168170
config.TourianBossCount = parsedRomDetails.TourianBossCount;
171+
config.OpenPyramid = parsedRomDetails.OpenPyarmid;
169172
config.SkipTourianBossDoor = parsedRomDetails.SkipTourianBossDoor;
170173
config.LocationItems.Clear();
171174
config.ItemOptions = parsedRomDetails.StartingItems.ToDictionary(x => $"ItemType:{x.Key}", x => x.Value);

src/TrackerCouncil.Smz3.Tracking/TrackingServices/TrackerRewardService.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,12 @@ public void SetAreaReward(IHasReward rewardRegion, RewardType? reward = null, fl
4040
Tracker.Say(response: Responses.DungeonRewardMarked, args: [rewardRegion.Metadata.Name, rewardObj.Metadata.Name ?? reward.GetDescription()]);
4141
}
4242

43+
UpdateAllAccessibility(false);
44+
4345
AddUndo(autoTracked, () =>
4446
{
4547
rewardRegion.MarkedReward = originalReward;
48+
UpdateAllAccessibility(false);
4649
});
4750
}
4851

src/TrackerCouncil.Smz3.UI/Services/TrackerWindowService.cs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -598,8 +598,8 @@ private TrackerWindowPanelViewModel GetItemPanelViewModel(UIGridLocation gridLoc
598598
if (bossRegion != null)
599599
{
600600
bossRegion.Boss.UpdatedBossState += (_, _) => model.DungeonCleared = bossRegion.BossDefeated;
601-
model.Clicked += (_, _) => tracker.BossTracker.MarkBossAsDefeated(bossRegion);
602-
model.ResetCleared += (_, _) => tracker.BossTracker.MarkBossAsNotDefeated(bossRegion);
601+
model.Clicked += (_, _) => tracker.BossTracker.MarkBossAsDefeated(bossRegion, force: true);
602+
model.ResetCleared += (_, _) => tracker.BossTracker.MarkBossAsNotDefeated(bossRegion, force: true);
603603
}
604604

605605
dungeon.UpdatedTreasure += (_, _) => model.DungeonTreasure = dungeon.RemainingTreasure;
@@ -666,8 +666,8 @@ private TrackerWindowPanelViewModel GetItemPanelViewModel(UIGridLocation gridLoc
666666
model.BossDefeated = boss.Defeated;
667667
};
668668

669-
model.Clicked += (_, _) => tracker.BossTracker.MarkBossAsDefeated(boss);
670-
model.BossRevived += (_, _) => tracker.BossTracker.MarkBossAsNotDefeated(boss);
669+
model.Clicked += (_, _) => tracker.BossTracker.MarkBossAsDefeated(boss, force: true);
670+
model.BossRevived += (_, _) => tracker.BossTracker.MarkBossAsNotDefeated(boss, force: true);
671671

672672
if (rewardRegion != null)
673673
{

0 commit comments

Comments
 (0)