Skip to content

Commit

Permalink
Add shuffled items mode (LostArtefacts#692)
Browse files Browse the repository at this point in the history
  • Loading branch information
lahm86 authored May 31, 2024
1 parent af49c76 commit 85c4a7a
Show file tree
Hide file tree
Showing 36 changed files with 844 additions and 352 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@
- added gun holsters to Lara's robe outfit in TR2 (#672)
- added an option to stack rewards with secrets in TR1 and TR3, rather than using reward rooms (#687)
- added separate secret audio for TR1 and TR3 when not using reward rooms (#687)
- added an option to shuffle items rather than randomize their types and locations in each level (#625)
- fixed several potential key item softlocks in TR2 (#691)
- fixed a key item softlock in Crash Site (#662)
- fixed incorrect item and mesh positions in Home Sweet Home when mirrored (#676)
- fixed uncontrolled SFX in gym/assault course levels not being linked to the correct setting (#684)
Expand Down
5 changes: 4 additions & 1 deletion TRRandomizerCore/Editors/RandomizerSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ public class RandomizerSettings
public GameMode GameMode { get; set; }
public GlobeDisplayOption GlobeDisplay { get; set; }
public bool HardSecrets { get; set; }
public ItemMode ItemMode { get; set; }
public bool IncludeKeyItems { get; set; }
public bool AllowReturnPathLocations { get; set; }
public ItemRange KeyItemRange { get; set; }
Expand Down Expand Up @@ -140,7 +141,7 @@ public class RandomizerSettings
public bool RandomizeItemTypes { get; set; }
public bool RandomizeItemPositions { get; set; }

public bool ReassignPuzzleItems => (RandomizeEnemies && CrossLevelEnemies) || (RandomizeItems && IncludeKeyItems);
public bool ReassignPuzzleItems => (RandomizeEnemies && CrossLevelEnemies) || (RandomizeItems && (ItemMode == ItemMode.Shuffled || IncludeKeyItems));

public bool RandomizeVfx { get; set; }
public Color VfxFilterColor { get; set; }
Expand Down Expand Up @@ -209,6 +210,7 @@ public void ApplyConfig(Config config)

RandomizeItems = config.GetBool(nameof(RandomizeItems));
ItemSeed = config.GetInt(nameof(ItemSeed), defaultSeed);
ItemMode = (ItemMode)config.GetEnum(nameof(ItemMode), typeof(ItemMode), ItemMode.Default);
IncludeKeyItems = config.GetBool(nameof(IncludeKeyItems), true);
KeyItemRange = (ItemRange)config.GetEnum(nameof(KeyItemRange), typeof(ItemRange), ItemRange.Medium);
AllowEnemyKeyDrops = config.GetBool(nameof(AllowEnemyKeyDrops), true);
Expand Down Expand Up @@ -377,6 +379,7 @@ public void StoreConfig(Config config)

config[nameof(RandomizeItems)] = RandomizeItems;
config[nameof(ItemSeed)] = ItemSeed;
config[nameof(ItemMode)] = ItemMode;
config[nameof(IncludeKeyItems)] = IncludeKeyItems;
config[nameof(KeyItemRange)] = KeyItemRange;
config[nameof(AllowEnemyKeyDrops)] = AllowEnemyKeyDrops;
Expand Down
14 changes: 5 additions & 9 deletions TRRandomizerCore/Editors/TR1ClassicEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -64,11 +64,7 @@ protected override int GetSaveTarget(int numLevels)

if (Settings.RandomizeItems)
{
target += numLevels;
if (Settings.IncludeKeyItems)
{
target += numLevels;
}
target += 2 * numLevels;
}

if (Settings.RandomizeSecretRewardsPhysical)
Expand Down Expand Up @@ -235,7 +231,7 @@ protected override void SaveImpl(AbstractTRScriptEditor scriptEditor, TRSaveMoni
// - this allows for accounting for newly added items.
if (!monitor.IsCancelled && Settings.RandomizeItems)
{
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Randomizing standard items");
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Randomizing items");
itemRandomizer.Randomize(Settings.ItemSeed);
}

Expand Down Expand Up @@ -274,10 +270,10 @@ protected override void SaveImpl(AbstractTRScriptEditor scriptEditor, TRSaveMoni
environmentRandomizer.Randomize(Settings.EnvironmentSeed);
}

if (!monitor.IsCancelled && Settings.RandomizeItems && Settings.IncludeKeyItems)
if (!monitor.IsCancelled && Settings.RandomizeItems)
{
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Randomizing key items");
itemRandomizer.RandomizeKeyItems();
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Finalizing item randomization");
itemRandomizer.FinalizeRandomization();
}

if (!monitor.IsCancelled)
Expand Down
14 changes: 5 additions & 9 deletions TRRandomizerCore/Editors/TR1RemasteredEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,7 @@ protected override int GetSaveTarget(int numLevels)

if (Settings.RandomizeItems)
{
target += numLevels;
if (Settings.IncludeKeyItems)
{
target += numLevels;
}
target += 2 * numLevels;
}

if (Settings.RandomizeSecretRewardsPhysical)
Expand Down Expand Up @@ -142,7 +138,7 @@ protected override void SaveImpl(AbstractTRScriptEditor scriptEditor, TRSaveMoni

if (!monitor.IsCancelled && Settings.RandomizeItems)
{
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Randomizing standard items");
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Randomizing items");
itemRandomizer.Randomize(Settings.ItemSeed);
}

Expand Down Expand Up @@ -181,10 +177,10 @@ protected override void SaveImpl(AbstractTRScriptEditor scriptEditor, TRSaveMoni
environmentRandomizer.Randomize(Settings.EnvironmentSeed);
}

if (!monitor.IsCancelled && Settings.RandomizeItems && Settings.IncludeKeyItems)
if (!monitor.IsCancelled && Settings.RandomizeItems)
{
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Randomizing key items");
itemRandomizer.RandomizeKeyItems();
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Finalizing item randomization");
itemRandomizer.FinalizeRandomization();
}

if (!monitor.IsCancelled)
Expand Down
31 changes: 14 additions & 17 deletions TRRandomizerCore/Editors/TR2ClassicEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -61,15 +61,11 @@ protected override int GetSaveTarget(int numLevels)

if (Settings.RandomizeItems)
{
target += numLevels;
target += 2 * numLevels;
if (Settings.RandomizeItemSprites)
{
target += numLevels;
}
if (Settings.IncludeKeyItems)
{
target += numLevels;
}
}

if (Settings.RandomizeStartPosition)
Expand All @@ -90,8 +86,6 @@ protected override int GetSaveTarget(int numLevels)
{
// 3 for multithreading cross-level work
target += Settings.CrossLevelEnemies ? numLevels * 3 : numLevels;
// And again for eliminating unused enemies
target += numLevels;
}

if (Settings.RandomizeTextures)
Expand All @@ -109,6 +103,9 @@ protected override int GetSaveTarget(int numLevels)
// Environment randomizer always runs
target += numLevels * 2;

// Enemy adjuster always runs
target += numLevels;

return target;
}

Expand Down Expand Up @@ -168,7 +165,7 @@ protected override void SaveImpl(AbstractTRScriptEditor scriptEditor, TRSaveMoni

// Texture monitoring is needed between enemy and texture randomization
// to track where imported enemies are placed.
if (!monitor.IsCancelled && Settings.RandomizeEnemies)
if (!monitor.IsCancelled)
{
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Adjusting enemy entities");
new TR2EnemyAdjuster
Expand Down Expand Up @@ -226,12 +223,6 @@ protected override void SaveImpl(AbstractTRScriptEditor scriptEditor, TRSaveMoni
}.Randomize(Settings.SecretSeed);
}

if (!monitor.IsCancelled && Settings.RandomizeItems)
{
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Randomizing standard items");
itemRandomizer.Randomize(Settings.ItemSeed);
}

if (!monitor.IsCancelled && Settings.ReassignPuzzleItems)
{
// P2 items are converted to P3 in case the dragon is present as the dagger type is hardcoded.
Expand All @@ -247,6 +238,12 @@ protected override void SaveImpl(AbstractTRScriptEditor scriptEditor, TRSaveMoni
}.AdjustModels();
}

if (!monitor.IsCancelled && Settings.RandomizeItems)
{
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Randomizing items");
itemRandomizer.Randomize(Settings.ItemSeed);
}

if (!monitor.IsCancelled && Settings.RandomizeEnemies)
{
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Randomizing enemies");
Expand Down Expand Up @@ -283,10 +280,10 @@ protected override void SaveImpl(AbstractTRScriptEditor scriptEditor, TRSaveMoni
environmentRandomizer.Randomize(Settings.EnvironmentSeed);
}

if (!monitor.IsCancelled && Settings.RandomizeItems && Settings.IncludeKeyItems)
if (!monitor.IsCancelled && Settings.RandomizeItems)
{
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Randomizing key items");
itemRandomizer.RandomizeKeyItems();
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Finalizing item randomization");
itemRandomizer.FinalizeRandomization();
}

if (!monitor.IsCancelled)
Expand Down
14 changes: 5 additions & 9 deletions TRRandomizerCore/Editors/TR2RemasteredEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,7 @@ protected override int GetSaveTarget(int numLevels)

if (Settings.RandomizeItems)
{
target += numLevels;
if (Settings.IncludeKeyItems)
{
target += numLevels;
}
target += 2 * numLevels;
}

if (Settings.RandomizeStartPosition)
Expand Down Expand Up @@ -121,7 +117,7 @@ protected override void SaveImpl(AbstractTRScriptEditor scriptEditor, TRSaveMoni

if (!monitor.IsCancelled && Settings.RandomizeItems)
{
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Randomizing standard items");
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Randomizing items");
itemRandomizer.Randomize(Settings.ItemSeed);
}

Expand Down Expand Up @@ -161,10 +157,10 @@ protected override void SaveImpl(AbstractTRScriptEditor scriptEditor, TRSaveMoni
environmentRandomizer.Randomize(Settings.EnvironmentSeed);
}

if (!monitor.IsCancelled && Settings.RandomizeItems && Settings.IncludeKeyItems)
if (!monitor.IsCancelled && Settings.RandomizeItems)
{
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Randomizing key items");
itemRandomizer.RandomizeKeyItems();
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Finalizing item randomization");
itemRandomizer.FinalizeRandomization();
}

if (!monitor.IsCancelled)
Expand Down
14 changes: 5 additions & 9 deletions TRRandomizerCore/Editors/TR3ClassicEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -74,11 +74,7 @@ protected override int GetSaveTarget(int numLevels)

if (Settings.RandomizeItems)
{
target += numLevels;
if (Settings.IncludeKeyItems)
{
target += numLevels;
}
target += 2 * numLevels;
}

if (Settings.RandomizeSecretRewardsPhysical)
Expand Down Expand Up @@ -226,7 +222,7 @@ protected override void SaveImpl(AbstractTRScriptEditor scriptEditor, TRSaveMoni
//so we need to make sure the enemy rando can know this in advance.
if (!monitor.IsCancelled && Settings.RandomizeItems)
{
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Randomizing standard items");
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Randomizing items");
itemRandomizer.Randomize(Settings.ItemSeed);
}

Expand Down Expand Up @@ -280,10 +276,10 @@ protected override void SaveImpl(AbstractTRScriptEditor scriptEditor, TRSaveMoni
environmentRandomizer.Randomize(Settings.EnvironmentSeed);
}

if (!monitor.IsCancelled && Settings.RandomizeItems && Settings.IncludeKeyItems)
if (!monitor.IsCancelled && Settings.RandomizeItems)
{
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Randomizing key items");
itemRandomizer.RandomizeKeyItems();
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Finalizing item randomization");
itemRandomizer.FinalizeRandomization();
}

if (!monitor.IsCancelled)
Expand Down
14 changes: 5 additions & 9 deletions TRRandomizerCore/Editors/TR3RemasteredEditor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -39,11 +39,7 @@ protected override int GetSaveTarget(int numLevels)

if (Settings.RandomizeItems)
{
target += numLevels;
if (Settings.IncludeKeyItems)
{
target += numLevels;
}
target += 2 * numLevels;
}

if (Settings.RandomizeSecretRewardsPhysical)
Expand Down Expand Up @@ -130,7 +126,7 @@ protected override void SaveImpl(AbstractTRScriptEditor scriptEditor, TRSaveMoni

if (!monitor.IsCancelled && Settings.RandomizeItems)
{
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Randomizing standard items");
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Randomizing items");
itemRandomizer.Randomize(Settings.ItemSeed);
}

Expand Down Expand Up @@ -184,10 +180,10 @@ protected override void SaveImpl(AbstractTRScriptEditor scriptEditor, TRSaveMoni
environmentRandomizer.Randomize(Settings.EnvironmentSeed);
}

if (!monitor.IsCancelled && Settings.RandomizeItems && Settings.IncludeKeyItems)
if (!monitor.IsCancelled && Settings.RandomizeItems)
{
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Randomizing key items");
itemRandomizer.RandomizeKeyItems();
monitor.FireSaveStateBeginning(TRSaveCategory.Custom, "Finalizing item randomization");
itemRandomizer.FinalizeRandomization();
}

if (!monitor.IsCancelled)
Expand Down
7 changes: 7 additions & 0 deletions TRRandomizerCore/Helpers/ItemMode.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
namespace TRRandomizerCore.Helpers;

public enum ItemMode
{
Default,
Shuffled,
}
Loading

0 comments on commit 85c4a7a

Please sign in to comment.