Skip to content

Commit

Permalink
Add TRR texture filter (#736)
Browse files Browse the repository at this point in the history
Resolves #726.
  • Loading branch information
lahm86 authored Aug 3, 2024
1 parent ba9961d commit f7f5332
Show file tree
Hide file tree
Showing 14 changed files with 326 additions and 25 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
## [Unreleased](https://github.com/LostArtefacts/TR-Rando/compare/V1.9.1...master) - xxxx-xx-xx
- added options to use textures from specific game areas only in TRR texture randomization (#726)
- fixed key item softlocks in remastered New Game+ when using shuffled item mode (#732, #734)
- fixed wireframe mode potentially exceeding texture limits and preventing levels from loading (#722)
- fixed docile bird monsters causing multiple Laras to spawn in remastered levels (#723)
Expand Down
19 changes: 14 additions & 5 deletions TRRandomizerCore/Editors/RandomizerSettings.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
using TRGE.Core;
using System.Drawing;
using TRRandomizerCore.Secrets;
using TRRandomizerCore.Textures;

namespace TRRandomizerCore.Editors;

Expand Down Expand Up @@ -53,6 +54,8 @@ public class RandomizerSettings
public TextureMode TextureMode { get; set; }
public bool MatchTextureTypes { get; set; }
public bool MatchTextureItems { get; set; }
public bool FilterSourceTextures { get; set; }
public List<TRArea> SourceTextureAreas { get; set; }
public bool PersistTextureVariants { get; set; }
public bool RandomizeWaterColour { get; set; }
public bool RetainMainLevelTextures { get; set; }
Expand Down Expand Up @@ -244,11 +247,10 @@ public void ApplyConfig(Config config)
ReplaceRequiredEnemies = config.GetBool(nameof(ReplaceRequiredEnemies), true);
UseEnemyExclusions = config.GetBool(nameof(UseEnemyExclusions));
ShowExclusionWarnings = config.GetBool(nameof(ShowExclusionWarnings));
ExcludedEnemies = config.GetString(nameof(ExcludedEnemies))
.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries)
ExcludedEnemies = new(config.GetString(nameof(ExcludedEnemies))
.Split(',', StringSplitOptions.RemoveEmptyEntries)
.Select(s => short.Parse(s))
.Where(s => ExcludableEnemies.ContainsKey(s))
.ToList();
.Where(s => ExcludableEnemies.ContainsKey(s)));

GiveUnarmedItems = config.GetBool(nameof(GiveUnarmedItems), true);
UseEnemyClones = config.GetBool(nameof(UseEnemyClones));
Expand All @@ -261,6 +263,11 @@ public void ApplyConfig(Config config)
TextureMode = (TextureMode)config.GetEnum(nameof(TextureMode), typeof(TextureMode), TextureMode.Game);
MatchTextureTypes = config.GetBool(nameof(MatchTextureTypes), true);
MatchTextureItems = config.GetBool(nameof(MatchTextureItems), true);
FilterSourceTextures = config.GetBool(nameof(FilterSourceTextures));
SourceTextureAreas = new(config.GetString(nameof(SourceTextureAreas), string.Join(',', Enum.GetValues<TRArea>()))
.Split(',', StringSplitOptions.RemoveEmptyEntries)
.Select(s => Enum.Parse<TRArea>(s)));

PersistTextureVariants = config.GetBool(nameof(PersistTextureVariants));
RandomizeWaterColour = config.GetBool(nameof(RandomizeWaterColour), true);
RetainMainLevelTextures = config.GetBool(nameof(RetainMainLevelTextures));
Expand Down Expand Up @@ -413,7 +420,7 @@ public void StoreConfig(Config config)
config[nameof(BirdMonsterBehaviour)] = BirdMonsterBehaviour;
config[nameof(RandoEnemyDifficulty)] = RandoEnemyDifficulty;
config[nameof(DragonSpawnType)] = DragonSpawnType;
config[nameof(ExcludedEnemies)] = string.Join(",", ExcludedEnemies);
config[nameof(ExcludedEnemies)] = string.Join(',', ExcludedEnemies);
config[nameof(UseEnemyExclusions)] = UseEnemyExclusions;
config[nameof(ShowExclusionWarnings)] = ShowExclusionWarnings;
config[nameof(SwapEnemyAppearance)] = SwapEnemyAppearance;
Expand All @@ -431,6 +438,8 @@ public void StoreConfig(Config config)
config[nameof(TextureMode)] = TextureMode;
config[nameof(MatchTextureTypes)] = MatchTextureTypes;
config[nameof(MatchTextureItems)] = MatchTextureItems;
config[nameof(FilterSourceTextures)] = FilterSourceTextures;
config[nameof(SourceTextureAreas)] = string.Join(',', SourceTextureAreas);
config[nameof(PersistTextureVariants)] = PersistTextureVariants;
config[nameof(RandomizeWaterColour)] = RandomizeWaterColour;
config[nameof(RetainMainLevelTextures)] = RetainMainLevelTextures;
Expand Down
41 changes: 36 additions & 5 deletions TRRandomizerCore/Randomizers/Shared/TextureAllocator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ public class TextureAllocator<T, R>

public Random Generator { get; set; }
public RandomizerSettings Settings { get; set; }
public List<TRArea> AvailableAreas => new(_texInfo.GameAreas.Keys);

public TextureAllocator(TRGameVersion version)
{
Expand All @@ -40,18 +41,30 @@ public void LoadCutData(TRRScriptedLevel parentLevel, TRGData trgData)
public void Allocate(Func<TRRScriptedLevel, TRGData, Dictionary<T, R>, bool> saveData)
{
Dictionary<TRRScriptedLevel, List<ushort>> textureCache = _trgData.ToDictionary(l => l.Key, l => l.Value.Textures.ToList());
List<ushort> allTextures = new(textureCache.Values.SelectMany(t => t).Distinct());
List<ushort> allTextures = new();
List<TRRScriptedLevel> levels = new(_trgData.Keys);
List<TRRScriptedLevel> levelSwaps = new();

if (Settings.TextureMode == TextureMode.Game)
{
levelSwaps.AddRange(levels);
do
List<TRRScriptedLevel> sourceLevels = FilterSourceLevels(levels);
if (sourceLevels.Count < levels.Count)
{
levelSwaps.Shuffle(Generator);
levelSwaps.AddRange(sourceLevels.RandomSelection(Generator, levels.Count, true));
}
while (levelSwaps.Any(l => levels.IndexOf(l) == levelSwaps.IndexOf(l)));
else
{
levelSwaps.AddRange(levels);
do
{
levelSwaps.Shuffle(Generator);
}
while (levelSwaps.Any(l => levels.IndexOf(l) == levelSwaps.IndexOf(l)));
}
}
else if (Settings.TextureMode == TextureMode.Random)
{
allTextures.AddRange(FilterSourceLevels(levels).SelectMany(l => textureCache[l]).Distinct());
}

Dictionary<T, R> AllocateLevel(TRRScriptedLevel level, TRGData trgData)
Expand Down Expand Up @@ -143,6 +156,24 @@ Dictionary<T, R> AllocateLevel(TRRScriptedLevel level, TRGData trgData)
}
}

private List<TRRScriptedLevel> FilterSourceLevels(List<TRRScriptedLevel> levels)
{
if (!Settings.FilterSourceTextures || Settings.SourceTextureAreas.Count >= _texInfo.GameAreas.Count)
{
return levels;
}

List<TRRScriptedLevel> sourceLevels = new(Settings.SourceTextureAreas
.SelectMany(a => _texInfo.GameAreas[a])
.Select(s => levels.Find(l => l.Is(s))));
if (sourceLevels.Count == 0)
{
throw new InvalidDataException("Unable to match the selected texture areas to source levels.");
}

return sourceLevels;
}

private bool SelectTexture(ushort originalTexture, ref ushort targetTexture,
TRTexCategory category, List<ushort> baseTextures)
{
Expand Down
2 changes: 1 addition & 1 deletion TRRandomizerCore/Resources/TR1/Textures/texinfo.json
Original file line number Diff line number Diff line change
@@ -1 +1 @@
{"Categories":{"Opaque":[15,17,18,19,20,24,25,27,28,30,31,32,34,36,37,38,39,40,41,42,43,44,45,46,47,48,49,52,53,54,55,57,63,65,66,67,68,69,70,72,73,74,81,82,84,86,87,88,91,92,93,94,95,96,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,121,126,127,128,129,130,131,132,133,134,135,136,137,138,140,143,144,145,146,148,149,150,151,152,153,154,155,156,163,164,165,167,168,173,174,177,178,179,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,200,207,208,210,211,212,214,215,216,217,218,221,230,231,232,233,234,235,237,238,239,241,242,243,244,245,249,250,251,252,253,256,257,258,261,262,263,264,265,266,267,268,269,271,272,273,274,275,276,277,278,279,280,281,283,284,285,286,287,288,289,290,292,293,296,297,301,302,303,304,305,307,309,310,311,312,313,314,315,316,320,324,325,326,327,328,329,331,332,335,336,337,338,340,341,342,343,345,346,347,349,350,351,352,353,354,357,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,377,378,379,380,381,382,383,384,385,386,387,388,389,391,392,393,394,395,396,397,401,407,408,409,411,412,413,414,415,416,417,418,419,422,423,424,425,426,427,428,429,430,431,432,433,434,435,438,439,440,441,442,445,446,449,450,451,452,453,455,456,457,459,460,461,463,464,465,466,467,468,469,470,471,472,474,475,476,478,479,480,482,484,485,486,487,488,489,490,491,492,493,494,496,498,499,500,501,502,503,504,505,506,507,510,511,513,514,515,516,519,520,521,522,524,525,526,527,530,532,533,534,535,537,541,542,543,561,562,563,564,565,566,567,568,569,572,573,575,576,577,578,579,580,581,583,584,585,586,587,595,596,597,598,599,600,602,603,604,605,606,607,608,609,610,621,622,623,624,625,626,627,630,631,632,633,635,637,640,641,642,643,645,646,648,650,653,658,660,661,662,663,665,666,668,669,671,672,673,674,676,679,680,681,682,683,684,685,686,688,689,690,691,692,693,694,696,697,698,699,700,701,702,703,704,706,707,709,710,711,714,715,716,717,718,719,721,722,724,725,727,728,729,730,731,732,733,734,735,736,737,738,739,859,1002,1008,1009,1010,1011,1012,1015,2049,2050,2051,2052,3016,3025,3026,3027,3029,3031,3032,3033,3034,3035,3036,3037,3038,3039,3040,3041,3044,3045,3046,3047,3048,3049,3050,3051,3052,4128,5060,5869,7002,7003,7004,7014,7021,7051,7052,7054,7055,7058,7060],"Fixed":[1,2,60,61,254,255,259,454,509,545,546,547,548,549,550,551,552,553,554,555,556,557,559,560,591,592,611,612,613,614,615,616,617,618,619,659,664,667,670,675,678,687,695,800,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,833,835,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,861,862,863,864,866,867,869,870,971,972,973,974,975,976,977,978,979,980,981,982,993,994,995,997,998,999,1006,1480,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2053,2054,3015,3021,3023,3108,7068,7508,7509,7510,7511,9097],"Lever":[59,83,147,222,291,294,306,308,322,339,390,481,544,574,582,634,649,677,708,1003],"Ladder":[],"Transparent":[56,323,330,400,477,588,620,638,639,866]},"Animated":[554,558,571,590,651,652,654,655],"Defaults":{"Transparent":477,"Lever":34},"ItemFlags":[{"GYM.PHD":{}},{"LEVEL1.PHD":{"Door1":16777345,"Door2":16777346,"Door3":130,"Door4":17,"FallingBlock":512,"WallSwitch":4096,"DartEmitter":17039360,"Dart_H":33816576},"LEVEL2.PHD":{"Door1":17,"Door2":17,"Door4":17,"Door5":16777345,"Door6":16777346,"Trapdoor1":8,"FallingBlock":512,"PushBlock1":1024,"WallSwitch":4096,"UnderwaterSwitch":8192,"DartEmitter":17039360,"Dart_H":33816576},"LEVEL3A.PHD":{"Door1":17,"WallSwitch":4096},"LEVEL3B.PHD":{"Door1":20,"Door2":20,"Door3":20,"Door4":320,"Door5":17,"Door6":17,"Door8":17,"FallingBlock":512,"PushBlock1":1024,"WallSwitch":4096,"RollingBall":131072}},{"LEVEL4.PHD":{"Door1":17,"Door2":132,"Door3":129,"Door4":17,"Door5":16777345,"Door6":16777346,"Door7":17,"FallingBlock":512,"PushBlock1":1024,"WallSwitch":4096,"UnderwaterSwitch":8192,"RollingBall":131072},"LEVEL5.PHD":{"Door1":33,"Door2":129,"Door5":17,"Door6":130,"Door7":132,"Door8":17,"PushBlock1":1024,"WallSwitch":4096,"RollingBall":131072},"LEVEL6.PHD":{"Door1":17,"Door2":17,"Door3":17,"Door4":17,"Door5":17,"Door6":130,"Door7":129,"FallingBlock":512,"PushBlock1":1024,"PushBlock2":1024,"SlammingDoor":2048,"WallSwitch":4096},"LEVEL7A.PHD":{"Door1":17,"Door2":17,"Door3":17,"Trapdoor1":8,"FallingBlock":512,"PushBlock1":1024,"PushBlock2":1024,"WallSwitch":4096,"UnderwaterSwitch":8192},"LEVEL7B.PHD":{"Door1":17,"Door2":33,"Door3":17,"Door4":129,"Door5":17,"FallingBlock":512,"PushBlock1":1024,"SlammingDoor":2048,"WallSwitch":4096,"UnderwaterSwitch":8192,"DartEmitter":17039360,"Dart_H":33816576}},{"LEVEL8A.PHD":{"Door1":16777233,"Door2":17,"Door3":16777234,"Door4":33554561,"Door5":33554562,"Trapdoor1":8,"PushBlock1":1024,"WallSwitch":4096,"UnderwaterSwitch":8192,"RollingBall":131072},"LEVEL8B.PHD":{"Door1":17,"Door2":17,"Door5":16777345,"Door6":16777346,"PushBlock1":1024,"WallSwitch":4096},"LEVEL8C.PHD":{"Door1":17,"Door3":129,"Door4":132,"Door5":16777345,"Door6":16777346,"PushBlock1":1024,"SlammingDoor":2048,"WallSwitch":4096,"UnderwaterSwitch":8192}},{"LEVEL10A.PHD":{"Door1":17,"Door2":17,"Door3":16777345,"Door4":16777346,"Trapdoor2":8,"FallingBlock":512,"PushBlock1":1024,"PushBlock2":1024,"PushBlock3":1024,"PushBlock4":1024,"WallSwitch":4096,"RollingBall":131072},"LEVEL10B.PHD":{"Door3":130,"Door4":17,"Door5":17,"Door6":17,"Door7":17,"Door8":17,"Trapdoor2":8,"PushBlock1":1024,"SlammingDoor":2048,"WallSwitch":4096,"UnderwaterSwitch":8192,"RollingBall":131072,"DartEmitter":17039360,"Dart_H":33816576},"LEVEL10C.PHD":{"Door1":17,"Door2":17,"FallingBlock":512,"PushBlock1":1024,"SlammingDoor":2048,"WallSwitch":4096,"RollingBall":131072,"DartEmitter":17039360,"Dart_H":33816576}}]}
{"GameAreas":{"Home":["GYM.PHD"],"Peru":["LEVEL1.PHD","LEVEL2.PHD","LEVEL3A.PHD","LEVEL3B.PHD"],"Greece":["LEVEL4.PHD","LEVEL5.PHD","LEVEL6.PHD"],"Cistern":["LEVEL7A.PHD","LEVEL7B.PHD"],"Egypt":["LEVEL8A.PHD","LEVEL8B.PHD","LEVEL8C.PHD"],"Atlantis":["LEVEL10A.PHD","LEVEL10B.PHD","LEVEL10C.PHD"]},"Categories":{"Opaque":[15,17,18,19,20,24,25,27,28,30,31,32,34,36,37,38,39,40,41,42,43,44,45,46,47,48,49,52,53,54,55,57,63,65,66,67,68,69,70,72,73,74,81,82,84,86,87,88,91,92,93,94,95,96,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,121,126,127,128,129,130,131,132,133,134,135,136,137,138,140,143,144,145,146,148,149,150,151,152,153,154,155,156,163,164,165,167,168,173,174,177,178,179,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,200,207,208,210,211,212,214,215,216,217,218,221,230,231,232,233,234,235,237,238,239,241,242,243,244,245,249,250,251,252,253,256,257,258,261,262,263,264,265,266,267,268,269,271,272,273,274,275,276,277,278,279,280,281,283,284,285,286,287,288,289,290,292,293,296,297,301,302,303,304,305,307,309,310,311,312,313,314,315,316,320,324,325,326,327,328,329,331,332,335,336,337,338,340,341,342,343,345,346,347,349,350,351,352,353,354,357,359,360,361,362,363,364,365,366,367,368,369,370,371,372,373,374,377,378,379,380,381,382,383,384,385,386,387,388,389,391,392,393,394,395,396,397,401,407,408,409,411,412,413,414,415,416,417,418,419,422,423,424,425,426,427,428,429,430,431,432,433,434,435,438,439,440,441,442,445,446,449,450,451,452,453,455,456,457,459,460,461,463,464,465,466,467,468,469,470,471,472,474,475,476,478,479,480,482,484,485,486,487,488,489,490,491,492,493,494,496,498,499,500,501,502,503,504,505,506,507,510,511,513,514,515,516,519,520,521,522,524,525,526,527,530,532,533,534,535,537,541,542,543,561,562,563,564,565,566,567,568,569,572,573,575,576,577,578,579,580,581,583,584,585,586,587,595,596,597,598,599,600,602,603,604,605,606,607,608,609,610,621,622,623,624,625,626,627,630,631,632,633,635,637,640,641,642,643,645,646,648,650,653,658,660,661,662,663,665,666,668,669,671,672,673,674,676,679,680,681,682,683,684,685,686,688,689,690,691,692,693,694,696,697,698,699,700,701,702,703,704,706,707,709,710,711,714,715,716,717,718,719,721,722,724,725,727,728,729,730,731,732,733,734,735,736,737,738,739,859,1002,1008,1009,1010,1011,1012,1015,2049,2050,2051,2052,3016,3025,3026,3027,3029,3031,3032,3033,3034,3035,3036,3037,3038,3039,3040,3041,3044,3045,3046,3047,3048,3049,3050,3051,3052,4128,5060,5869,7002,7003,7004,7014,7021,7051,7052,7054,7055,7058,7060],"Fixed":[1,2,60,61,254,255,259,454,509,545,546,547,548,549,550,551,552,553,554,555,556,557,559,560,591,592,611,612,613,614,615,616,617,618,619,659,664,667,670,675,678,687,695,800,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822,823,824,825,826,827,828,829,833,835,839,840,841,842,843,844,845,846,847,848,849,850,851,852,853,861,862,863,864,866,867,869,870,971,972,973,974,975,976,977,978,979,980,981,982,993,994,995,997,998,999,1006,1480,1496,1497,1498,1499,1500,1501,1502,1503,1504,1505,1506,1507,2000,2001,2002,2003,2004,2005,2006,2007,2008,2009,2010,2011,2013,2014,2015,2016,2017,2018,2019,2020,2021,2022,2023,2024,2025,2026,2027,2028,2029,2030,2031,2032,2033,2034,2035,2036,2037,2038,2039,2040,2041,2042,2043,2044,2045,2046,2047,2048,2053,2054,3015,3021,3023,3108,7068,7508,7509,7510,7511,9097],"Lever":[59,83,147,222,291,294,306,308,322,339,390,481,544,574,582,634,649,677,708,1003],"Ladder":[],"Transparent":[56,323,330,400,477,588,620,638,639,866]},"Animated":[554,558,571,590,651,652,654,655],"Defaults":{"Transparent":477,"Lever":34},"ItemFlags":[{"GYM.PHD":{}},{"LEVEL1.PHD":{"Door1":16777345,"Door2":16777346,"Door3":130,"Door4":17,"FallingBlock":512,"WallSwitch":4096,"DartEmitter":17039360,"Dart_H":33816576},"LEVEL2.PHD":{"Door1":17,"Door2":17,"Door4":17,"Door5":16777345,"Door6":16777346,"Trapdoor1":8,"FallingBlock":512,"PushBlock1":1024,"WallSwitch":4096,"UnderwaterSwitch":8192,"DartEmitter":17039360,"Dart_H":33816576},"LEVEL3A.PHD":{"Door1":17,"WallSwitch":4096},"LEVEL3B.PHD":{"Door1":20,"Door2":20,"Door3":20,"Door4":320,"Door5":17,"Door6":17,"Door8":17,"FallingBlock":512,"PushBlock1":1024,"WallSwitch":4096,"RollingBall":131072}},{"LEVEL4.PHD":{"Door1":17,"Door2":132,"Door3":129,"Door4":17,"Door5":16777345,"Door6":16777346,"Door7":17,"FallingBlock":512,"PushBlock1":1024,"WallSwitch":4096,"UnderwaterSwitch":8192,"RollingBall":131072},"LEVEL5.PHD":{"Door1":33,"Door2":129,"Door5":17,"Door6":130,"Door7":132,"Door8":17,"PushBlock1":1024,"WallSwitch":4096,"RollingBall":131072},"LEVEL6.PHD":{"Door1":17,"Door2":17,"Door3":17,"Door4":17,"Door5":17,"Door6":130,"Door7":129,"FallingBlock":512,"PushBlock1":1024,"PushBlock2":1024,"SlammingDoor":2048,"WallSwitch":4096},"LEVEL7A.PHD":{"Door1":17,"Door2":17,"Door3":17,"Trapdoor1":8,"FallingBlock":512,"PushBlock1":1024,"PushBlock2":1024,"WallSwitch":4096,"UnderwaterSwitch":8192},"LEVEL7B.PHD":{"Door1":17,"Door2":33,"Door3":17,"Door4":129,"Door5":17,"FallingBlock":512,"PushBlock1":1024,"SlammingDoor":2048,"WallSwitch":4096,"UnderwaterSwitch":8192,"DartEmitter":17039360,"Dart_H":33816576}},{"LEVEL8A.PHD":{"Door1":16777233,"Door2":17,"Door3":16777234,"Door4":33554561,"Door5":33554562,"Trapdoor1":8,"PushBlock1":1024,"WallSwitch":4096,"UnderwaterSwitch":8192,"RollingBall":131072},"LEVEL8B.PHD":{"Door1":17,"Door2":17,"Door5":16777345,"Door6":16777346,"PushBlock1":1024,"WallSwitch":4096},"LEVEL8C.PHD":{"Door1":17,"Door3":129,"Door4":132,"Door5":16777345,"Door6":16777346,"PushBlock1":1024,"SlammingDoor":2048,"WallSwitch":4096,"UnderwaterSwitch":8192}},{"LEVEL10A.PHD":{"Door1":17,"Door2":17,"Door3":16777345,"Door4":16777346,"Trapdoor2":8,"FallingBlock":512,"PushBlock1":1024,"PushBlock2":1024,"PushBlock3":1024,"PushBlock4":1024,"WallSwitch":4096,"RollingBall":131072},"LEVEL10B.PHD":{"Door3":130,"Door4":17,"Door5":17,"Door6":17,"Door7":17,"Door8":17,"Trapdoor2":8,"PushBlock1":1024,"SlammingDoor":2048,"WallSwitch":4096,"UnderwaterSwitch":8192,"RollingBall":131072,"DartEmitter":17039360,"Dart_H":33816576},"LEVEL10C.PHD":{"Door1":17,"Door2":17,"FallingBlock":512,"PushBlock1":1024,"SlammingDoor":2048,"WallSwitch":4096,"RollingBall":131072,"DartEmitter":17039360,"Dart_H":33816576}}]}
Original file line number Diff line number Diff line change
@@ -1,5 +1,36 @@
{
"All": [
{
"Comments": "Overwrite an out-of-sight texture with EmeraldRaider91's badge.",
"EMType": 33,
"Bitmap": "Resources\\TR2\\Textures\\Source\\Static\\Landmarks\\EmeraldRaider91\\Segments.png"
},
{
"Comments": "Add the badge to room 21; reset the texture in rooms 32 and 157 to stone.",
"EMType": 21,
"TextureMap": {
"1615": {
"21": {
"Rectangles": [
90,
92
]
}
},
"1516": {
"32": {
"Rectangles": [
2
]
},
"157": {
"Rectangles": [
52
]
}
}
}
},
{
"Comments": "Tweak a slope at the end for easier key item exploration, if enabled.",
"EMType": 7,
Expand Down Expand Up @@ -2609,6 +2640,8 @@
"1863": 1879,
"1709": 1725,
"1678": 1694,
"1557": 1573
"1557": 1573,
"1615": 1631,
"1516": 1536
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit f7f5332

Please sign in to comment.