Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add TRR texture filter #736

Merged
merged 4 commits into from
Aug 3, 2024
Merged
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
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
Loading