From 5d62ed2b5cba5e3db46384b490ad8063cabbe9ff Mon Sep 17 00:00:00 2001 From: lahm86 <33758420+lahm86@users.noreply.github.com> Date: Sun, 9 Jun 2024 15:58:02 +0100 Subject: [PATCH] Fix alias priorities This only affected TRR because of the way we merge the PDP files, but ultimately this performs a better check on alias priorities before import i.e. if the level already has an alias of a type and it's the "chosen one", remove the other's blob before proceeding. TR3 aliases for Lara misc are ignored because none contain critical commands like ending the level. --- TRDataControl/Transport/TRDataImporter.cs | 15 ++++++++++----- TRLevelControl/Helpers/TR1TypeUtilities.cs | 17 +++++++++++++++++ TRLevelControl/Helpers/TR2TypeUtilities.cs | 15 +++++++++++++++ 3 files changed, 42 insertions(+), 5 deletions(-) diff --git a/TRDataControl/Transport/TRDataImporter.cs b/TRDataControl/Transport/TRDataImporter.cs index 8f505fa4..eefcbf94 100644 --- a/TRDataControl/Transport/TRDataImporter.cs +++ b/TRDataControl/Transport/TRDataImporter.cs @@ -159,17 +159,22 @@ private void CleanAliases() private void ValidateBlobList(List modelTypes, List importBlobs) { - Dictionary> detectedAliases = new(); - foreach (T entity in modelTypes) + Dictionary> detectedAliases = new(); + foreach (T type in modelTypes) { - if (Data.IsAlias(entity)) + T inferredType = type; + if (Data.AliasPriority?.ContainsKey(type) ?? false) { - T masterType = Data.TranslateAlias(entity); + inferredType = Data.GetLevelAlias(LevelName, type); + } + if (Data.IsAlias(inferredType)) + { + T masterType = Data.TranslateAlias(inferredType); if (!detectedAliases.ContainsKey(masterType)) { detectedAliases[masterType] = new(); } - detectedAliases[masterType].Add(entity); + detectedAliases[masterType].Add(inferredType); } } diff --git a/TRLevelControl/Helpers/TR1TypeUtilities.cs b/TRLevelControl/Helpers/TR1TypeUtilities.cs index cf9da983..c8b6c8d5 100644 --- a/TRLevelControl/Helpers/TR1TypeUtilities.cs +++ b/TRLevelControl/Helpers/TR1TypeUtilities.cs @@ -6,6 +6,23 @@ public static class TR1TypeUtilities { public static readonly Dictionary>> LevelAliases = new() { + [TR1Type.LaraMiscAnim_H] = new() + { + [TR1Type.LaraMiscAnim_H_General] = + new() { TR1LevelNames.CAVES, TR1LevelNames.VILCABAMBA, TR1LevelNames.FOLLY, TR1LevelNames.COLOSSEUM, TR1LevelNames.CISTERN, TR1LevelNames.TIHOCAN }, + [TR1Type.LaraMiscAnim_H_Valley] = + new() { TR1LevelNames.VALLEY }, + [TR1Type.LaraMiscAnim_H_Qualopec] = + new() { TR1LevelNames.QUALOPEC }, + [TR1Type.LaraMiscAnim_H_Midas] = + new() { TR1LevelNames.MIDAS }, + [TR1Type.LaraMiscAnim_H_Sanctuary] = + new() { TR1LevelNames.SANCTUARY }, + [TR1Type.LaraMiscAnim_H_Atlantis] = + new() { TR1LevelNames.ATLANTIS }, + [TR1Type.LaraMiscAnim_H_Pyramid] = + new() { TR1LevelNames.PYRAMID }, + }, [TR1Type.FlyingAtlantean] = new() { [TR1Type.BandagedFlyer] = diff --git a/TRLevelControl/Helpers/TR2TypeUtilities.cs b/TRLevelControl/Helpers/TR2TypeUtilities.cs index 370b4d9f..499e5dd5 100644 --- a/TRLevelControl/Helpers/TR2TypeUtilities.cs +++ b/TRLevelControl/Helpers/TR2TypeUtilities.cs @@ -19,6 +19,21 @@ public static class TR2TypeUtilities [TR2Type.LaraAssault] = new() { TR2LevelNames.ASSAULT }, }, + [TR2Type.LaraMiscAnim_H] = new() + { + [TR2Type.LaraMiscAnim_H_Wall] = + new() { TR2LevelNames.GW }, + [TR2Type.LaraMiscAnim_H_Venice] = + new() { TR2LevelNames.BARTOLI }, + [TR2Type.LaraMiscAnim_H_Unwater] = + new() { TR2LevelNames.RIG, TR2LevelNames.DA, TR2LevelNames.FATHOMS, TR2LevelNames.DORIA, TR2LevelNames.DECK }, + [TR2Type.LaraMiscAnim_H_Ice] = + new() { TR2LevelNames.COT, TR2LevelNames.CHICKEN }, + [TR2Type.LaraMiscAnim_H_Xian] = + new() { TR2LevelNames.FLOATER, TR2LevelNames.LAIR }, + [TR2Type.LaraMiscAnim_H_HSH] = + new() { TR2LevelNames.HOME } + }, [TR2Type.Barracuda] = new() { [TR2Type.BarracudaIce] =