Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion APRandomizerMain.cs
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,7 @@ public override void Load()
On.ElementalSkylandsLevelInitializer.OnBeforeInitDone += RandoLevelManager.ElementalSkylandsInit;
// On.PortalOpeningCutscene.OnOpenPortalEvent += RandoPortalManager.OpenPortalEvent;
On.TotHQ.LeaveToLevel += RandoPortalManager.LeaveHQ;
On.TowerOfTimePortal.LoadLevel += RandoPortalManager.TowerOfTimePortal_LoadLevel;
// generator deactivation management
skylandsGeneratorManager.ApplyHooks();
//These functions let us override and manage power seals ourselves with 'fake' items
Expand Down Expand Up @@ -700,7 +701,7 @@ public static void OnSelectTeleportToHq()
RandoLevelManager.CleanupBeforeOptionsTeleport();
//Load the HQ
Manager<TowerOfTimeHQManager>.Instance.TeleportInToTHQ(true, ELevelEntranceID.ENTRANCE_A, null);
ArchipelagoClient.Session.DataStorage[Scope.Slot, "CurrentRegion"] = ELevel.Level_13_TowerOfTimeHQ.ToString();
RandoLevelManager.TrackerManager.SetCurrentRegion(ELevel.Level_13_TowerOfTimeHQ);
RandoLevelManager.CleanupAfterTeleport();
}

Expand Down
7 changes: 7 additions & 0 deletions Archipelago/TrackerManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,11 +34,18 @@ public void ReconciliateUnlockedPortals()

var unlockedPortals = RandoPortalManager.UnlockedPortals;
unlockedPortals.UnionWith(ArchipelagoClient.Session.DataStorage[Scope.Slot, "UnlockedPortals"].To<List<string>>() ?? []);
if (unlockedPortals.Count == 0) return;

var unlockedPortalsList = unlockedPortals.ToList();
unlockedPortalsList.Sort();
Console.WriteLine($"Updating unlocked portals with Data Storage. Unlocked portals are\n\t{string.Join("\n\t", [.. unlockedPortalsList])}");
ArchipelagoClient.Session.DataStorage[Scope.Slot, "UnlockedPortals"] = unlockedPortalsList;
}

public void SetCurrentRegion(ELevel level)
{
if (!ArchipelagoClient.Authenticated) return;
ArchipelagoClient.Session.DataStorage[Scope.Slot, "CurrentRegion"] = level.ToString();
}
}
}
8 changes: 3 additions & 5 deletions GameOverrideManagers/RandoLevelManager.cs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
using System;
using System.Collections.Generic;
using Archipelago.MultiClient.Net.Enums;
using MessengerRando.Archipelago;
using MessengerRando.Utils;
using MessengerRando.Utils.Constants;
Expand Down Expand Up @@ -251,12 +250,11 @@ private static void AddCurrentRegionToStorage(LevelManager self)
if (!ArchipelagoClient.Authenticated) return;
// put the region we just loaded into in AP data storage for tracking
if (self.lastLevelLoaded.Equals(ELevel.Level_13_TowerOfTimeHQ + "_Build"))
ArchipelagoClient.Session.DataStorage[Scope.Slot, "CurrentRegion"] =
ELevel.Level_13_TowerOfTimeHQ.ToString();
TrackerManager.SetCurrentRegion(ELevel.Level_13_TowerOfTimeHQ);
else
ArchipelagoClient.Session.DataStorage[Scope.Slot, "CurrentRegion"] =
self.GetCurrentLevelEnum().ToString();
TrackerManager.SetCurrentRegion(self.GetCurrentLevelEnum());
}

public static void SkipMusicBox()
{
var playerPosition = RandomizerStateManager.Instance.SkipMusicBox
Expand Down
26 changes: 25 additions & 1 deletion GameOverrideManagers/RandoPortalManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -361,6 +361,8 @@ public static HashSet<string> UnlockedPortals
}
}

private static bool PortalShuffleEnabled => PortalMapping is not null && PortalMapping.Count > 0;

public static bool ShouldPortalBeOpen(string portal)
{
return AccessedStartingPortals.Contains(portal);
Expand Down Expand Up @@ -430,7 +432,7 @@ public static void Teleport()
return;
}

if (PortalMapping is null || PortalMapping.Count == 0)
if (!PortalShuffleEnabled)
{
LeftHQPortal = false;
return;
Expand Down Expand Up @@ -468,5 +470,27 @@ public static void LeaveHQ(On.TotHQ.orig_LeaveToLevel orig, TotHQ self, bool pla
Console.WriteLine($"Force teleport: {ForceTeleport}");
orig(self, playLevelMusic, loadingNewLevel);
}

public static void TowerOfTimePortal_LoadLevel(On.TowerOfTimePortal.orig_LoadLevel orig, TowerOfTimePortal self)
{
try
{
Console.WriteLine("Left ToT through portal.");
orig(self);

// When portals are shuffled, the teleportation override will set the current region.
if (!PortalShuffleEnabled)
{
TrackerManager.SetCurrentRegion(self.nextLevel);
return;
}
}
catch (Exception e)
{
Console.Write("Error in TowerOfTimePortal_LoadLevel");
Console.WriteLine(e);
}
}

}
}
Empty file removed Utils/RandomizerSaveMethod.cs
Empty file.