Skip to content

Commit 7cc39a6

Browse files
Merge pull request #672 from TheTrackerCouncil/fix-ap-medallion-tracking
Fix AP required medallion tracking
2 parents ea1aa00 + bc0118a commit 7cc39a6

File tree

5 files changed

+22
-9
lines changed

5 files changed

+22
-9
lines changed

src/TrackerCouncil.Smz3.Data/WorldData/World.cs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -330,12 +330,15 @@ public void UpdateLegacyWorld(TrackerState? trackerState)
330330
return;
331331
}
332332

333+
var hasAllMedallions = trackerState?.ItemStates.Count(x =>
334+
x.Type is ItemType.Quake or ItemType.Ether or ItemType.Bombos && x.TrackingState > 0) == 3;
335+
333336
var worldState = new LegacyWorldState()
334337
{
335338
Medallions =
336339
[
337-
GetLegacyMedallion(MiseryMire),
338-
GetLegacyMedallion(TurtleRock)
340+
GetLegacyMedallion(MiseryMire, hasAllMedallions),
341+
GetLegacyMedallion(TurtleRock, hasAllMedallions)
339342
],
340343
Rewards =
341344
[
@@ -380,19 +383,16 @@ private LegacyRewardType GetLegacyRewardType(IHasReward region)
380383
};
381384
}
382385

383-
private LegacyWorldState.LegacyMedallion GetLegacyMedallion(IHasPrerequisite region)
386+
private LegacyWorldState.LegacyMedallion GetLegacyMedallion(IHasPrerequisite region, bool hasAllMedallions)
384387
{
385-
var unobtainedMedallion = AllItems.FirstOrDefault(x =>
386-
x.IsLocalPlayerItem && x.Type.IsInCategory(ItemCategory.Medallion) && x.TrackingState == 0)?.Type;
387-
388-
var requiredItemType =
389-
region.MarkedItem ?? unobtainedMedallion ?? region.RequiredItem;
388+
var requiredItemType = hasAllMedallions ? region.RequiredItem : region.MarkedItem ?? ItemType.Nothing;
390389

391390
return requiredItemType switch
392391
{
393392
ItemType.Bombos => LegacyWorldState.LegacyMedallion.Bombos,
394393
ItemType.Ether => LegacyWorldState.LegacyMedallion.Ether,
395-
_ => LegacyWorldState.LegacyMedallion.Bombos
394+
ItemType.Quake => LegacyWorldState.LegacyMedallion.Quake,
395+
_ => LegacyWorldState.LegacyMedallion.Unknown
396396
};
397397
}
398398

src/TrackerCouncil.Smz3.LegacyLogic/LegacyWorldState.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ namespace Randomizer.SMZ3 {
88
public class LegacyWorldState {
99

1010
public enum LegacyMedallion {
11+
Unknown,
1112
Bombos,
1213
Ether,
1314
Quake,

src/TrackerCouncil.Smz3.LegacyLogic/Regions/Zelda/LegacyMiseryMire.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,11 @@ public LegacyMiseryMire(LegacyWorld legacyWorld, LegacyConfig legacyConfig) : ba
3737

3838
// Need "CanKillManyEnemies" if implementing swordless
3939
public override bool CanEnter(LegacyProgression items) {
40+
if (LegacyMedallion == LegacyMedallion.Unknown && (!items.Bombos || !items.Ether || !items.Quake))
41+
{
42+
return false;
43+
}
44+
4045
return LegacyMedallion switch {
4146
LegacyMedallion.Bombos => items.Bombos,
4247
LegacyMedallion.Ether => items.Ether,

src/TrackerCouncil.Smz3.LegacyLogic/Regions/Zelda/LegacyTurtleRock.cs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,11 @@ bool CanBeatBoss(LegacyProgression items) {
5151
}
5252

5353
public override bool CanEnter(LegacyProgression items) {
54+
if (LegacyMedallion == LegacyMedallion.Unknown && (!items.Bombos || !items.Ether || !items.Quake))
55+
{
56+
return false;
57+
}
58+
5459
return LegacyMedallion switch {
5560
LegacyMedallion.Bombos => items.Bombos,
5661
LegacyMedallion.Ether => items.Ether,

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@ public void SetDungeonRequirement(IHasPrerequisite region, ItemType? medallion =
3838
Tracker.Say(response: Responses.DungeonRequirementMarked, args: [medallion.ToString(), region.Metadata.Name]);
3939
}
4040

41+
World.UpdateLegacyWorld(World.State);
42+
4143
UpdateAccessibility(region);
4244

4345
AddUndo(autoTracked, () =>

0 commit comments

Comments
 (0)