private static void onOuiFileSelectSlotShow(On.Celeste.OuiFileSelectSlot.orig_Show orig, OuiFileSelectSlot self) { // If we are currently in a collab map, display the lobby level set stats instead. AreaKey?savedLastArea = null; string collab = collabNames.FirstOrDefault(collabName => self.SaveData?.LevelSet != null && self.SaveData.LevelSet.StartsWith($"{collabName}/") && self.SaveData.LevelSet != $"{collabName}/0-Lobbies"); if (collab != null) { AreaData firstMapFromCollab = AreaData.Areas.FirstOrDefault(area => area.GetLevelSet() == $"{collab}/0-Lobbies"); if (firstMapFromCollab != null) { savedLastArea = self.SaveData.LastArea_Safe; self.SaveData.LastArea_Safe = firstMapFromCollab.ToKey(); self.Strawberries.CanWiggle = false; // prevent the strawberry collect sound from playing. } } orig(self); string collab2 = collabNames.FirstOrDefault(collabName => self.SaveData?.LevelSet == $"{collabName}/0-Lobbies"); if (collab2 != null) { // recompute the stats for the collab. int totalStrawberries = 0; int totalGoldenStrawberries = 0; int totalHeartGems = 0; int totalCassettes = 0; int maxStrawberryCount = 0; int maxGoldenStrawberryCount = 0; int maxStrawberryCountIncludingUntracked = 0; int maxCassettes = 0; int maxCrystalHearts = 0; int maxCrystalHeartsExcludingCSides = 0; // aggregate all stats for the collab level sets. foreach (LevelSetStats stats in self.SaveData.LevelSets) { if (stats.Name.StartsWith($"{collab2}/")) { totalStrawberries += stats.TotalStrawberries; totalGoldenStrawberries += stats.TotalGoldenStrawberries; totalHeartGems += countTotalHeartGemsForMapsThatHaveHearts(stats); totalCassettes += stats.TotalCassettes; maxStrawberryCount += stats.MaxStrawberries; maxGoldenStrawberryCount += stats.MaxGoldenStrawberries; maxStrawberryCountIncludingUntracked += stats.MaxStrawberriesIncludingUntracked; maxCassettes += stats.MaxCassettes; maxCrystalHearts += stats.MaxHeartGems; maxCrystalHeartsExcludingCSides += stats.MaxHeartGemsExcludingCSides; } } DynData <OuiFileSelectSlot> slotData = new DynData <OuiFileSelectSlot>(self); slotData["totalGoldenStrawberries"] = totalGoldenStrawberries; slotData["totalHeartGems"] = totalHeartGems; slotData["totalCassettes"] = totalCassettes; slotData["maxStrawberryCount"] = maxStrawberryCount; slotData["maxGoldenStrawberryCount"] = maxGoldenStrawberryCount; slotData["maxStrawberryCountIncludingUntracked"] = maxStrawberryCountIncludingUntracked; slotData["maxCassettes"] = maxCassettes; slotData["maxCrystalHearts"] = maxCrystalHearts; slotData["maxCrystalHeartsExcludingCSides"] = maxCrystalHeartsExcludingCSides; slotData["summitStamp"] = false; slotData["farewellStamp"] = false; self.Strawberries.Amount = totalStrawberries; self.Strawberries.OutOf = maxStrawberryCount; } // figure out if some hearts are customized, and store it in DynData so that a IL hook can access it later. SaveData oldInstance = SaveData.Instance; SaveData.Instance = self.SaveData; List <string> customJournalHearts = new List <string>(); if (self.SaveData != null) { foreach (AreaStats item in self.SaveData.Areas_Safe) { if (item.ID_Safe > self.SaveData.UnlockedAreas_Safe) { break; } if (!AreaData.Areas[item.ID_Safe].Interlude_Safe && AreaData.Areas[item.ID_Safe].CanFullClear) { string lobbyLevelSetName = GetLobbyLevelSet(item.GetSID()); if (lobbyLevelSetName != null && MTN.Journal.Has("CollabUtils2Hearts/" + lobbyLevelSetName)) { customJournalHearts.Add("CollabUtils2Hearts/" + lobbyLevelSetName); } else { customJournalHearts.Add(null); } } } } new DynData <OuiFileSelectSlot>(self)["collabutils2_customhearts"] = customJournalHearts; SaveData.Instance = oldInstance; // Restore the last area if it was replaced at the beginning of this method. if (savedLastArea != null) { self.SaveData.LastArea_Safe = savedLastArea.Value; } }
private static void onOuiFileSelectSlotShow(On.Celeste.OuiFileSelectSlot.orig_Show orig, OuiFileSelectSlot self) { // If we are currently in a collab map, display the lobby level set stats instead. AreaKey?savedLastArea = null; string collab = collabNames.FirstOrDefault(collabName => self.SaveData?.LevelSet != null && self.SaveData.LevelSet.StartsWith($"{collabName}/") && self.SaveData.LevelSet != $"{collabName}/0-Lobbies"); if (collab != null) { AreaData firstMapFromCollab = AreaData.Areas.FirstOrDefault(area => area.GetLevelSet() == $"{collab}/0-Lobbies"); if (firstMapFromCollab != null) { savedLastArea = self.SaveData.LastArea_Safe; self.SaveData.LastArea_Safe = firstMapFromCollab.ToKey(); self.Strawberries.CanWiggle = false; // prevent the strawberry collect sound from playing. } } orig(self); string collab2 = collabNames.FirstOrDefault(collabName => self.SaveData?.LevelSet == $"{collabName}/0-Lobbies"); if (collab2 != null) { // recompute the stats for the collab. int totalStrawberries = 0; int totalGoldenStrawberries = 0; int totalHeartGems = 0; int totalCassettes = 0; int maxStrawberryCount = 0; int maxGoldenStrawberryCount = 0; int maxStrawberryCountIncludingUntracked = 0; int maxCassettes = 0; int maxCrystalHearts = 0; int maxCrystalHeartsExcludingCSides = 0; // aggregate all stats for the collab level sets. foreach (LevelSetStats stats in self.SaveData.LevelSets) { if (stats.Name.StartsWith($"{collab2}/")) { totalStrawberries += stats.TotalStrawberries; totalGoldenStrawberries += stats.TotalGoldenStrawberries; totalHeartGems += countTotalHeartGemsForMapsThatHaveHearts(stats); totalCassettes += stats.TotalCassettes; maxStrawberryCount += stats.MaxStrawberries; maxGoldenStrawberryCount += stats.MaxGoldenStrawberries; maxStrawberryCountIncludingUntracked += stats.MaxStrawberriesIncludingUntracked; maxCassettes += stats.MaxCassettes; maxCrystalHearts += stats.MaxHeartGems; maxCrystalHeartsExcludingCSides += stats.MaxHeartGemsExcludingCSides; } } DynData <OuiFileSelectSlot> slotData = new DynData <OuiFileSelectSlot>(self); slotData["totalGoldenStrawberries"] = totalGoldenStrawberries; slotData["totalHeartGems"] = totalHeartGems; slotData["totalCassettes"] = totalCassettes; slotData["maxStrawberryCount"] = maxStrawberryCount; slotData["maxGoldenStrawberryCount"] = maxGoldenStrawberryCount; slotData["maxStrawberryCountIncludingUntracked"] = maxStrawberryCountIncludingUntracked; slotData["maxCassettes"] = maxCassettes; slotData["maxCrystalHearts"] = maxCrystalHearts; slotData["maxCrystalHeartsExcludingCSides"] = maxCrystalHeartsExcludingCSides; slotData["summitStamp"] = false; slotData["farewellStamp"] = false; self.Strawberries.Amount = totalStrawberries; self.Strawberries.OutOf = maxStrawberryCount; } // Restore the last area if it was replaced at the beginning of this method. if (savedLastArea != null) { self.SaveData.LastArea_Safe = savedLastArea.Value; } }