From 1ee786d629018e63034bdfe8a4457ec180cf5fb0 Mon Sep 17 00:00:00 2001 From: Ted John Date: Tue, 26 Dec 2023 23:37:40 +0000 Subject: [PATCH] Add initial work for CV generation --- IntelOrca.Biohazard.BioRand.Tests/TestInfo.cs | 9 +- IntelOrca.Biohazard.BioRand/BaseRandomiser.cs | 59 +- IntelOrca.Biohazard.BioRand/DataManager.cs | 3 + .../EnemyRandomiser.cs | 23 +- .../RECV/ReCvDoorHelper.cs | 15 + .../RECV/ReCvEnemyHelper.cs | 84 +++ .../RECV/ReCvEnemyIds.cs | 97 +++ .../RECV/ReCvItemHelper.cs | 568 ++++++++++++++++++ .../RECV/ReCvItemIds.cs | 161 +++++ .../RECV/ReCvRandomiser.cs | 206 +++++++ IntelOrca.Biohazard.BioRand/Rdt.cs | 42 +- .../ReInstallConfig.cs | 8 +- .../data/recv/rdt.json | 126 ++++ biohazard-utils | 2 +- biorand/GameLocationBox.xaml.cs | 48 +- biorand/MainWindow.xaml | 44 +- biorand/MainWindow.xaml.cs | 202 +++++-- biorand/RandoAppSettings.cs | 3 + biorand/resources/recvx.png | Bin 0 -> 114108 bytes 19 files changed, 1568 insertions(+), 132 deletions(-) create mode 100644 IntelOrca.Biohazard.BioRand/RECV/ReCvDoorHelper.cs create mode 100644 IntelOrca.Biohazard.BioRand/RECV/ReCvEnemyHelper.cs create mode 100644 IntelOrca.Biohazard.BioRand/RECV/ReCvEnemyIds.cs create mode 100644 IntelOrca.Biohazard.BioRand/RECV/ReCvItemHelper.cs create mode 100644 IntelOrca.Biohazard.BioRand/RECV/ReCvItemIds.cs create mode 100644 IntelOrca.Biohazard.BioRand/RECV/ReCvRandomiser.cs create mode 100644 IntelOrca.Biohazard.BioRand/data/recv/rdt.json create mode 100644 biorand/resources/recvx.png diff --git a/IntelOrca.Biohazard.BioRand.Tests/TestInfo.cs b/IntelOrca.Biohazard.BioRand.Tests/TestInfo.cs index f27f898d9..2710ae038 100644 --- a/IntelOrca.Biohazard.BioRand.Tests/TestInfo.cs +++ b/IntelOrca.Biohazard.BioRand.Tests/TestInfo.cs @@ -7,11 +7,14 @@ internal static class TestInfo { public static string GetInstallPath(int game) { + var fileName = $"re{game + 1}"; + if (game == 3) + fileName = "recvx"; var places = new[] { - $@"D:\games\re{game + 1}", - $@"F:\games\re{game + 1}", - $@"M:\games\re{game + 1}" + $@"D:\games\re{fileName}", + $@"F:\games\re{fileName}", + $@"M:\games\re{fileName}" }; foreach (var place in places) diff --git a/IntelOrca.Biohazard.BioRand/BaseRandomiser.cs b/IntelOrca.Biohazard.BioRand/BaseRandomiser.cs index 0a8cfef50..80876c538 100644 --- a/IntelOrca.Biohazard.BioRand/BaseRandomiser.cs +++ b/IntelOrca.Biohazard.BioRand/BaseRandomiser.cs @@ -158,6 +158,13 @@ private Dictionary GetRdtChecksums(string dataPath, int player, Rd return result; } + protected virtual RandomizedRdt ReadRdt(FileRepository fileRepository, RdtId rdtId, string path, string modPath) + { + var rdtBytes = fileRepository.GetBytes(path); + var rdt = GameDataReader.ReadRdt(BiohazardVersion, rdtId, rdtBytes, path, modPath); + return rdt; + } + private GameData ReadGameData(FileRepository fileRepository, int player, RdtId[] rdtIds, bool mod) { var rdts = new List(); @@ -168,8 +175,7 @@ private GameData ReadGameData(FileRepository fileRepository, int player, RdtId[] try { var srcPath = mod ? modRdtPath : rdtPath; - var rdtBytes = fileRepository.GetBytes(srcPath); - var rdt = GameDataReader.ReadRdt(BiohazardVersion, rdtId, rdtBytes, srcPath, modRdtPath); + var rdt = ReadRdt(fileRepository, rdtId, srcPath, modRdtPath); rdts.Add(rdt); } catch @@ -193,13 +199,18 @@ public void Generate(RandoConfig config, IRandoProgress progress) var reConfig = InstallConfig; var installPath = reConfig.GetInstallPath(BiohazardVersion); + if (BiohazardVersion == BioVersion.BiohazardCv) + { + installPath = Path.GetDirectoryName(installPath); + } + var originalDataPath = GetDataPath(installPath); var modPath = Path.Combine(installPath, @"mod_biorand"); var fileRepo = new FileRepository(originalDataPath, modPath); if (reConfig!.IsEnabled(BioVersion.Biohazard3)) { - var dataPath = GetDataPath(reConfig.GetInstallPath(BioVersion.Biohazard3)); var re3randomizer = new Re3Randomiser(reConfig, null); + var dataPath = re3randomizer.GetDataPath(reConfig.GetInstallPath(BioVersion.Biohazard3)); re3randomizer.AddArchives(dataPath, fileRepo); } @@ -339,19 +350,23 @@ public void GenerateRdts(RandoConfig config, IRandoProgress progress, FileReposi using (progress.BeginTask(config.Player, $"Changing player character")) playerActors = ChangePlayerCharacters(config, logger, gameData, fileRepository); - var voiceRandomiser = new VoiceRandomiser( - BiohazardVersion, - logger, - fileRepository, - config, - fileRepository.DataPath, - fileRepository.ModPath, - gameData, - map, - randomVoices, - NpcHelper, - DataManager, - playerActors); + VoiceRandomiser? voiceRandomiser = null; + if (config.RandomNPCs || config.RandomEvents) + { + voiceRandomiser = new VoiceRandomiser( + BiohazardVersion, + logger, + fileRepository, + config, + fileRepository.DataPath, + fileRepository.ModPath, + gameData, + map, + randomVoices, + NpcHelper, + DataManager, + playerActors); + } NPCRandomiser? npcRandomiser = null; if (config.RandomNPCs) @@ -370,21 +385,21 @@ public void GenerateRdts(RandoConfig config, IRandoProgress progress, FileReposi NpcHelper, DataManager, playerActors, - voiceRandomiser); + voiceRandomiser!); var selectedActors = GetSelectedActors(config); if (selectedActors.Length == 0) { throw new BioRandUserException("No NPCs selected."); } npcRandomiser.SelectedActors.AddRange(selectedActors); - RandomizeNPCs(config, npcRandomiser, voiceRandomiser); + RandomizeNPCs(config, npcRandomiser, voiceRandomiser!); npcRandomiser.Randomise(); } } if (config.RandomCutscenes) { - voiceRandomiser.Randomise(); + voiceRandomiser!.Randomise(); } EnemyRandomiser? enemyRandomiser = null; @@ -763,19 +778,21 @@ private void CreateBackgrounds(RandoConfig config, FileRepository fileRepository { try { - var src = DataManager.GetData(BiohazardVersion, "bg.png"); if (BiohazardVersion == BioVersion.Biohazard1) { + var src = DataManager.GetData(BiohazardVersion, "bg.png"); CreateBackgroundRaw(config, src, fileRepository.GetModPath("data/title.pix")); CreateBackgroundPng(config, src, fileRepository.GetModPath("type.png")); } else if (BiohazardVersion == BioVersion.Biohazard2) { + var src = DataManager.GetData(BiohazardVersion, "bg.png"); CreateBackgroundPng(config, src, fileRepository.GetModPath("common/data/title_bg.png")); CreateBackgroundPng(config, src, fileRepository.GetModPath("common/data/type00.png")); } - else + else if (BiohazardVersion == BioVersion.Biohazard3) { + var src = DataManager.GetData(BiohazardVersion, "bg.png"); CreateBackgroundRaw(config, src, fileRepository.GetModPath("data/etc/type00.pix")); CreateBackgroundTim(config, src, fileRepository.GetModPath("data_j/etc2/titlej.dat")); CreateBackgroundTim(config, src, fileRepository.GetModPath("data_j/etc2/titletgs.dat")); diff --git a/IntelOrca.Biohazard.BioRand/DataManager.cs b/IntelOrca.Biohazard.BioRand/DataManager.cs index f48a14db2..c9b946057 100644 --- a/IntelOrca.Biohazard.BioRand/DataManager.cs +++ b/IntelOrca.Biohazard.BioRand/DataManager.cs @@ -42,6 +42,8 @@ public string GetPath(BioVersion version, string path) return GetPath("re2", path); case BioVersion.Biohazard3: return GetPath("re3", path); + case BioVersion.BiohazardCv: + return GetPath("recv", path); default: throw new NotImplementedException(); } @@ -131,6 +133,7 @@ private string GetSubPath(BioVersion version, string basePath) BioVersion.Biohazard1 => Path.Combine("re1", basePath), BioVersion.Biohazard2 => Path.Combine("re2", basePath), BioVersion.Biohazard3 => Path.Combine("re3", basePath), + BioVersion.BiohazardCv => Path.Combine("recv", basePath), _ => throw new NotImplementedException(), }; } diff --git a/IntelOrca.Biohazard.BioRand/EnemyRandomiser.cs b/IntelOrca.Biohazard.BioRand/EnemyRandomiser.cs index d2bcefa10..9fdafa0e2 100644 --- a/IntelOrca.Biohazard.BioRand/EnemyRandomiser.cs +++ b/IntelOrca.Biohazard.BioRand/EnemyRandomiser.cs @@ -83,7 +83,7 @@ private void GatherEsps() { foreach (var rdt in _gameData.Rdts) { - var embeddedEffects = rdt.RdtFile.EmbeddedEffects; + var embeddedEffects = GetEmbeddedEffects(rdt.RdtFile); for (var i = 0; i < embeddedEffects.Count; i++) { var ee = embeddedEffects[i]; @@ -486,7 +486,7 @@ private void AddRequiredEsps(RandomizedRdt rdt, byte enemyType) return; var rdtFile = rdt.RdtFile; - var embeddedEffects = rdtFile.EmbeddedEffects; + var embeddedEffects = GetEmbeddedEffects(rdtFile); var missingIds = espIds.Except(embeddedEffects.Ids).ToArray(); if (missingIds.Length == 0) return; @@ -499,7 +499,7 @@ private void AddRequiredEsps(RandomizedRdt rdt, byte enemyType) } var rdtBuilder = rdtFile.ToBuilder(); - rdtBuilder.EmbeddedEffects = new EmbeddedEffectList(rdtFile.Version, existingEffects.ToArray()); + SetEmbeddedEffects(rdtBuilder, new EmbeddedEffectList(rdtFile.Version, existingEffects.ToArray())); if (rdt.Version == BioVersion.Biohazard3) { var bb = (Rdt2.Builder)rdtBuilder; @@ -807,6 +807,23 @@ private void DetachPartner(RdtId rdtId) } } + private EmbeddedEffectList GetEmbeddedEffects(IRdt rdt) + { + if (rdt is Rdt2 rdt2) + { + return rdt2.EmbeddedEffects; + } + throw new NotSupportedException(); + } + + private void SetEmbeddedEffects(IRdtBuilder builder, EmbeddedEffectList value) + { + if (builder is Rdt2.Builder builder2) + { + builder2.EmbeddedEffects = value; + } + } + public struct EnemyPosition : IEquatable { public RdtId RdtId { get; set; } diff --git a/IntelOrca.Biohazard.BioRand/RECV/ReCvDoorHelper.cs b/IntelOrca.Biohazard.BioRand/RECV/ReCvDoorHelper.cs new file mode 100644 index 000000000..7e906436b --- /dev/null +++ b/IntelOrca.Biohazard.BioRand/RECV/ReCvDoorHelper.cs @@ -0,0 +1,15 @@ +namespace IntelOrca.Biohazard.BioRand.RECV +{ + internal class ReCvDoorHelper : IDoorHelper + { + public byte[] GetReservedLockIds() => new byte[0]; + + public void Begin(RandoConfig config, GameData gameData, Map map) + { + } + + public void End(RandoConfig config, GameData gameData, Map map) + { + } + } +} diff --git a/IntelOrca.Biohazard.BioRand/RECV/ReCvEnemyHelper.cs b/IntelOrca.Biohazard.BioRand/RECV/ReCvEnemyHelper.cs new file mode 100644 index 000000000..1db95c1ba --- /dev/null +++ b/IntelOrca.Biohazard.BioRand/RECV/ReCvEnemyHelper.cs @@ -0,0 +1,84 @@ +using System; +using IntelOrca.Biohazard.Script.Opcodes; + +namespace IntelOrca.Biohazard.BioRand.RECV +{ + internal class ReCvEnemyHelper : IEnemyHelper + { + public void BeginRoom(RandomizedRdt rdt) + { + } + + public string GetEnemyName(byte type) + { + switch (type) + { + case ReCvEnemyIds.Zombie: + return "ZOMBIE"; + default: + return $"EM_{type:X2}"; + } + } + + public int GetEnemyTypeLimit(RandoConfig config, int difficulty, byte type) + { + var limit = new byte[] { 4, 8, 12, 16 }; + var index = Math.Min(limit.Length - 1, difficulty); + return limit[index]; + } + + public SelectableEnemy[] GetSelectableEnemies() => new[] + { + new SelectableEnemy("Bat", "Black", ReCvEnemyIds.Bat), + new SelectableEnemy("Zombie", "LightGray", ReCvEnemyIds.Zombie), + new SelectableEnemy("Hunter", "IndianRed", ReCvEnemyIds.Hunter), + new SelectableEnemy("Bandersnatch", "Cyan", ReCvEnemyIds.Bandersnatch), + new SelectableEnemy("Zombie Dog", "Black", ReCvEnemyIds.ZombieDog) + }; + + public bool IsEnemy(byte type) + { + return type < ReCvEnemyIds.Unknown43; + } + + public bool IsUniqueEnemyType(byte type) + { + switch (type) + { + case ReCvEnemyIds.Bat: + case ReCvEnemyIds.Hunter: + case ReCvEnemyIds.Bandersnatch: + case ReCvEnemyIds.Zombie: + case ReCvEnemyIds.ZombieDog: + return false; + default: + return true; + } + } + + public void SetEnemy(RandoConfig config, Rng rng, SceEmSetOpcode enemy, MapRoomEnemies enemySpec, byte enemyType) + { + } + + public bool ShouldChangeEnemy(RandoConfig config, SceEmSetOpcode enemy) + { + return false; + } + + public bool SupportsEnemyType(RandoConfig config, RandomizedRdt rdt, bool hasEnemyPlacements, byte enemyType) + { + return true; + } + + public bool IsZombie(byte type) => type == ReCvEnemyIds.Zombie; + + public byte[] GetReservedEnemyIds() => new byte[] { }; + + public byte[] GetEnemyDependencies(byte enemyType) => new byte[0]; + + public byte[] GetRequiredEsps(byte enemyType) + { + throw new NotImplementedException(); + } + } +} diff --git a/IntelOrca.Biohazard.BioRand/RECV/ReCvEnemyIds.cs b/IntelOrca.Biohazard.BioRand/RECV/ReCvEnemyIds.cs new file mode 100644 index 000000000..10f507527 --- /dev/null +++ b/IntelOrca.Biohazard.BioRand/RECV/ReCvEnemyIds.cs @@ -0,0 +1,97 @@ +namespace IntelOrca.Biohazard.BioRand.RECV +{ + internal static class ReCvEnemyIds + { + public const short Unknown = -2; + public const short None = -1; + public const byte Zombie = 1; + public const byte GlupWorm = 2; // Boss + public const byte BlackWidow = 3; + public const byte ZombieDog = 4; + public const byte Hunter = 5; + public const byte Moth = 6; + public const byte Bat = 7; + public const byte Bandersnatch = 9; + public const byte Ant = 10; + public const byte Spotter = 11; + public const byte AlexiaAshford = 12; // Boss + public const byte AlexiaAshfordB = 13; // Boss + public const byte AlexiaAshfordC = 14; // Boss + public const byte Nosferatu = 15; // Boss + public const byte MutatedSteve = 17; // Boss + public const byte Tyrant = 19; // Boss + public const byte AlbinoidInfant = 21; + public const byte AlbinoidAdult = 22; // Boss + public const byte GiantBlackWidow = 23; // Boss + public const byte BabyBlackWidow = 24; + public const byte AnatomistZombie = 26; // Boss + public const byte Tenticle = 29; + public const byte AlexiaBaby = 30; + + // Normal enemies? + public const byte Unknown0 = 0; + public const byte Unknown8 = 8; + public const byte Unknown10 = 10; + public const byte Unknown11 = 11; + public const byte Unknown16 = 16; + public const byte Unknown20 = 20; + public const byte Unknown24 = 24; + public const byte Unknown25 = 25; + + // Cinematic models + public const byte Unknown43 = 43; + public const byte Unknown42 = 42; + public const byte Unknown44 = 44; + public const byte Unknown47 = 47; + + public const byte Unknown51 = 51; + public const byte Unknown52 = 52; + public const byte Unknown53 = 53; + public const byte Unknown54 = 54; + public const byte Unknown55 = 55; + public const byte Unknown56 = 56; + public const byte Unknown58 = 58; + public const byte Unknown59 = 59; + + public const byte Unknown60 = 60; + public const byte Unknown61 = 61; + public const byte Unknown62 = 62; + public const byte Unknown63 = 63; + public const byte Unknown65 = 65; + public const byte Unknown66 = 66; + public const byte Unknown67 = 67; + public const byte Unknown68 = 68; + public const byte Unknown69 = 69; + + public const byte Unknown70 = 70; + public const byte Unknown71 = 71; + public const byte Unknown72 = 72; + public const byte Unknown73 = 73; + public const byte Unknown74 = 74; + public const byte Unknown75 = 75; + public const byte Unknown76 = 76; + public const byte Unknown77 = 77; + public const byte Unknown78 = 78; + public const byte Unknown79 = 79; + + public const byte Unknown81 = 81; + public const byte Unknown82 = 82; + public const byte Unknown83 = 83; + public const byte Unknown84 = 84; + public const byte Unknown85 = 85; + public const byte Unknown87 = 87; + public const byte Unknown88 = 88; + public const byte Unknown89 = 89; + + public const byte Unknown90 = 90; + public const byte Unknown91 = 91; + public const byte Unknown92 = 92; + public const byte Unknown93 = 93; + public const byte Unknown94 = 94; + public const byte Unknown95 = 95; + public const byte Unknown96 = 96; + public const byte Unknown97 = 97; + public const byte Unknown98 = 98; + public const byte Unknown99 = 99; + } +} diff --git a/IntelOrca.Biohazard.BioRand/RECV/ReCvItemHelper.cs b/IntelOrca.Biohazard.BioRand/RECV/ReCvItemHelper.cs new file mode 100644 index 000000000..67a2c115c --- /dev/null +++ b/IntelOrca.Biohazard.BioRand/RECV/ReCvItemHelper.cs @@ -0,0 +1,568 @@ +using System; + +namespace IntelOrca.Biohazard.BioRand.RECV +{ + internal class ReCvItemHelper : IItemHelper + { + public byte[] GetAmmoTypeForWeapon(byte type) + { + switch (type) + { + case ReCvItemIds.Handgun: + case ReCvItemIds.HandgunGlock17: + return new[] { ReCvItemIds.HandgunBullets }; + case ReCvItemIds.BowGun: + return new[] { ReCvItemIds.BowGunArrows }; + case ReCvItemIds.AssaultRifle: + return new[] { ReCvItemIds.ARifleBullets }; + case ReCvItemIds.SniperRifle: + return new[] { ReCvItemIds.RifleBullets }; + case ReCvItemIds.Shotgun: + return new[] { ReCvItemIds.ShotgunShells }; + case ReCvItemIds.GrenadeLauncher: + return new[] { + ReCvItemIds.AcidRounds, + ReCvItemIds.FlameRounds, + ReCvItemIds.GrenadeRounds, + ReCvItemIds.BOWGasRounds + }; + case ReCvItemIds.Magnum: + return new[] { ReCvItemIds.MagnumBullets }; + default: + return new byte[0]; + } + } + + public byte[] GetDefaultWeapons(RandoConfig config) + { + return new byte[0]; + } + + public string GetFriendlyItemName(byte type) + { + return GetItemName(type); + } + + public byte[] GetInitialKeyItems(RandoConfig config) + { + return new[] { ReCvItemIds.Lighter }; + } + + public int[]? GetInventorySize(RandoConfig config) + { + return new[] { 8 }; + } + + public ItemAttribute GetItemAttributes(byte item) + { + switch (item) + { + case ReCvItemIds.RocketLauncher: + case ReCvItemIds.AssaultRifle: + case ReCvItemIds.SniperRifle: + case ReCvItemIds.Shotgun: + case ReCvItemIds.HandgunGlock17: + case ReCvItemIds.GrenadeLauncher: + case ReCvItemIds.BowGun: + case ReCvItemIds.CombatKnife: + case ReCvItemIds.Handgun: + case ReCvItemIds.CustomHandgun: + case ReCvItemIds.LinearLauncher: + return ItemAttribute.Weapon; + case ReCvItemIds.HandgunBullets: + case ReCvItemIds.MagnumBullets: + case ReCvItemIds.ShotgunShells: + case ReCvItemIds.GrenadeRounds: + case ReCvItemIds.AcidRounds: + case ReCvItemIds.FlameRounds: + case ReCvItemIds.BowGunArrows: + return ItemAttribute.Ammo; + case ReCvItemIds.M93RPart: + return ItemAttribute.Weapon; + case ReCvItemIds.FAidSpray: + case ReCvItemIds.GreenHerb: + case ReCvItemIds.RedHerb: + case ReCvItemIds.BlueHerb: + case ReCvItemIds.MixedHerb2Green: + case ReCvItemIds.MixedHerbRedGreen: + case ReCvItemIds.MixedHerbBlueGreen: + case ReCvItemIds.MixedHerb2GreenBlue: + case ReCvItemIds.MixedHerb3Green: + case ReCvItemIds.MixedHerbGreenBlueRed: + return ItemAttribute.Heal; + case ReCvItemIds.MagnumBulletsInsideCase: + return ItemAttribute.Ammo; + case ReCvItemIds.InkRibbon: + return ItemAttribute.InkRibbon; + case ReCvItemIds.Magnum: + return ItemAttribute.Weapon; + case ReCvItemIds.GoldLugers: + return ItemAttribute.Key; + case ReCvItemIds.SubMachineGun: + return ItemAttribute.Weapon; + case ReCvItemIds.BowGunPowder: + case ReCvItemIds.GunPowderArrow: + return ItemAttribute.Gunpowder; + case ReCvItemIds.BOWGasRounds: + case ReCvItemIds.MGunBullets: + return ItemAttribute.Ammo; + case ReCvItemIds.GasMask: + return ItemAttribute.Key; + case ReCvItemIds.RifleBullets: + return ItemAttribute.Ammo; + case ReCvItemIds.DuraluminCaseUnused: + return 0; + case ReCvItemIds.ARifleBullets: + return ItemAttribute.Ammo; + case ReCvItemIds.AlexandersPierce: + case ReCvItemIds.AlexandersJewel: + case ReCvItemIds.AlfredsRing: + case ReCvItemIds.AlfredsJewel: + return ItemAttribute.Key; + case ReCvItemIds.PrisonersDiary: + case ReCvItemIds.DirectorsMemo: + case ReCvItemIds.Instructions: + return ItemAttribute.Document; + case ReCvItemIds.Lockpick: + case ReCvItemIds.GlassEye: + case ReCvItemIds.PianoRoll: + case ReCvItemIds.SteeringWheel: + case ReCvItemIds.CraneKey: + case ReCvItemIds.Lighter: + case ReCvItemIds.EaglePlate: + return ItemAttribute.Key; + case ReCvItemIds.SidePack: + return ItemAttribute.Special; + case ReCvItemIds.MapRoll: + case ReCvItemIds.HawkEmblem: + case ReCvItemIds.QueenAntObject: + case ReCvItemIds.KingAntObject: + case ReCvItemIds.BiohazardCard: + return ItemAttribute.Key; + case ReCvItemIds.DuraluminCaseM93RParts: + return ItemAttribute.Weapon; + case ReCvItemIds.Detonator: + case ReCvItemIds.ControlLever: + case ReCvItemIds.GoldDragonfly: + case ReCvItemIds.SilverKey: + case ReCvItemIds.GoldKey: + case ReCvItemIds.ArmyProof: + case ReCvItemIds.NavyProof: + case ReCvItemIds.AirForceProof: + case ReCvItemIds.KeyWithTag: + case ReCvItemIds.IDCard: + return ItemAttribute.Key; + case ReCvItemIds.Map: + return ItemAttribute.Document; + case ReCvItemIds.AirportKey: + case ReCvItemIds.EmblemCard: + case ReCvItemIds.SkeletonPicture: + case ReCvItemIds.MusicBoxPlate: + case ReCvItemIds.GoldDragonflyNoWings: + case ReCvItemIds.Album: + case ReCvItemIds.Halberd: + case ReCvItemIds.Extinguisher: + case ReCvItemIds.Briefcase: + case ReCvItemIds.PadlockKey: + case ReCvItemIds.TG01: + case ReCvItemIds.SpAlloyEmblem: + case ReCvItemIds.ValveHandle: + case ReCvItemIds.OctaValveHandle: + case ReCvItemIds.MachineRoomKey: + case ReCvItemIds.MiningRoomKey: + case ReCvItemIds.BarCodeSticker: + case ReCvItemIds.SterileRoomKey: + case ReCvItemIds.DoorKnob: + case ReCvItemIds.BatteryPack: + case ReCvItemIds.HemostaticWire: + case ReCvItemIds.TurnTableKey: + case ReCvItemIds.ChemStorageKey: + case ReCvItemIds.ClementAlpha: + case ReCvItemIds.ClementSigma: + case ReCvItemIds.TankObject: + case ReCvItemIds.SpAlloyEmblemUnused: + return ItemAttribute.Key; + case ReCvItemIds.AlfredsMemo: + return ItemAttribute.Document; + case ReCvItemIds.RustedSword: + case ReCvItemIds.Hemostatic: + case ReCvItemIds.SecurityCard: + return ItemAttribute.Key; + case ReCvItemIds.SecurityFile: + return ItemAttribute.Document; + case ReCvItemIds.AlexiasChoker: + case ReCvItemIds.AlexiasJewel: + case ReCvItemIds.QueenAntRelief: + case ReCvItemIds.KingAntRelief: + case ReCvItemIds.RedJewel: + case ReCvItemIds.BlueJewel: + case ReCvItemIds.Socket: + case ReCvItemIds.SqValveHandle: + case ReCvItemIds.Serum: + case ReCvItemIds.EarthenwareVase: + case ReCvItemIds.PaperWeight: + case ReCvItemIds.SilverDragonflyNoWings: + case ReCvItemIds.SilverDragonfly: + case ReCvItemIds.WingObject: + case ReCvItemIds.Crystal: + case ReCvItemIds.GoldDragonfly1Wing: + case ReCvItemIds.GoldDragonfly2Wings: + case ReCvItemIds.GoldDragonfly3Wings: + return ItemAttribute.Key; + case ReCvItemIds.File: + return ItemAttribute.Document; + case ReCvItemIds.PlantPot: + case ReCvItemIds.PictureB: + return ItemAttribute.Key; + case ReCvItemIds.DuraluminCaseBowGunPowder: + return ItemAttribute.Gunpowder; + case ReCvItemIds.DuraluminCaseMagnumRounds: + return ItemAttribute.Ammo; + case ReCvItemIds.BowGunPowderUnused: + return ItemAttribute.Gunpowder; + case ReCvItemIds.EnhancedHandgun: + return ItemAttribute.Ammo; + case ReCvItemIds.Memo: + return ItemAttribute.Document; + case ReCvItemIds.BoardClip: + case ReCvItemIds.Card: + return ItemAttribute.Key; + case ReCvItemIds.NewspaperClip: + return ItemAttribute.Document; + case ReCvItemIds.LugerReplica: + case ReCvItemIds.QueenAntReliefComplete: + return ItemAttribute.Key; + case ReCvItemIds.FamilyPicture: + case ReCvItemIds.FileFolders: + return ItemAttribute.Document; + case ReCvItemIds.RemoteController: + return ItemAttribute.Key; + case ReCvItemIds.QuestionA: + return ItemAttribute.Document; + case ReCvItemIds.M1P: + return ItemAttribute.Weapon; + case ReCvItemIds.CalicoBullets: + return ItemAttribute.Ammo; + case ReCvItemIds.ClementMixture: + return ItemAttribute.Gunpowder; + case ReCvItemIds.PlayingManual: + case ReCvItemIds.QuestionB: + case ReCvItemIds.QuestionC: + case ReCvItemIds.QuestionD: + return ItemAttribute.Document; + case ReCvItemIds.EmptyExtinguisher: + return 0; + case ReCvItemIds.SquareSocket: + return ItemAttribute.Key; + case ReCvItemIds.QuestionE: + return ItemAttribute.Document; + case ReCvItemIds.CrestKeyS: + case ReCvItemIds.CrestKeyG: + return ItemAttribute.Key; + default: + return 0; + } + } + + public byte GetItemId(CommonItemKind kind) + { + switch (kind) + { + case CommonItemKind.HandgunAmmo: + return ReCvItemIds.HandgunBullets; + case CommonItemKind.InkRibbon: + return ReCvItemIds.InkRibbon; + case CommonItemKind.FirstAid: + return ReCvItemIds.FAidSpray; + case CommonItemKind.HerbG: + return ReCvItemIds.GreenHerb; + case CommonItemKind.HerbGG: + return ReCvItemIds.MixedHerb2Green; + case CommonItemKind.HerbGGG: + return ReCvItemIds.MixedHerb3Green; + case CommonItemKind.HerbGR: + return ReCvItemIds.MixedHerbRedGreen; + case CommonItemKind.HerbGB: + return ReCvItemIds.MixedHerbBlueGreen; + case CommonItemKind.HerbGGB: + return ReCvItemIds.MixedHerb2GreenBlue; + case CommonItemKind.HerbGRB: + return ReCvItemIds.MixedHerbGreenBlueRed; + case CommonItemKind.HerbR: + return ReCvItemIds.RedHerb; + case CommonItemKind.HerbB: + return ReCvItemIds.BlueHerb; + case CommonItemKind.Knife: + return ReCvItemIds.CombatKnife; + default: + throw new NotImplementedException(); + } + } + + public string GetItemName(byte type) + { + return _itemNames[type]; + } + + public double GetItemProbability(byte type) + { + return 0.1; + } + + public int GetItemQuantity(RandoConfig config, byte item) + { + return 1; + } + + public byte GetItemSize(byte type) + { + switch (type) + { + case ReCvItemIds.M1P: + return 2; + default: + return 1; + } + } + + public byte GetMaxAmmoForAmmoType(byte type) + { + var a = GetItemAttributes(type); + if ((a & ItemAttribute.Ammo) != 0) + return 30; + return 1; + } + + public byte[] GetWeaponGunpowder(byte weapon) + { + return new byte[0]; + } + + public WeaponKind GetWeaponKind(byte item) + { + switch (item) + { + case ReCvItemIds.Handgun: + case ReCvItemIds.HandgunGlock17: + return WeaponKind.Sidearm; + case ReCvItemIds.BowGun: + case ReCvItemIds.AssaultRifle: + case ReCvItemIds.SniperRifle: + case ReCvItemIds.Shotgun: + case ReCvItemIds.SubMachineGun: + case ReCvItemIds.M1P: + return WeaponKind.Primary; + case ReCvItemIds.LinearLauncher: + case ReCvItemIds.GrenadeLauncher: + case ReCvItemIds.RocketLauncher: + case ReCvItemIds.Magnum: + return WeaponKind.Powerful; + default: + return WeaponKind.None; + } + } + + public byte[] GetWeapons(Rng rng, RandoConfig config) + { + return new[] { + ReCvItemIds.Handgun, + ReCvItemIds.RocketLauncher, + ReCvItemIds.AssaultRifle, + ReCvItemIds.SniperRifle, + ReCvItemIds.Shotgun, + ReCvItemIds.HandgunGlock17, + ReCvItemIds.GrenadeLauncher, + ReCvItemIds.BowGun, + ReCvItemIds.Magnum, + ReCvItemIds.SubMachineGun, + ReCvItemIds.M1P, + }; + } + + public byte? GetWeaponUpgrade(byte weapon, Rng rng, RandoConfig config) + { + switch (weapon) + { + case ReCvItemIds.Handgun: + return ReCvItemIds.CustomHandgun; + } + return null; + } + + public bool HasGunPowder(RandoConfig config) => false; + + public bool HasInkRibbons(RandoConfig config) => true; + + public bool IsItemInfinite(byte type) => false; + + public bool IsOptionalItem(RandoConfig config, byte type) + { + return false; + } + + public bool IsRe2ItemIdsDiscardable(byte type) + { + return false; + } + + public bool IsWeaponCompatible(byte player, byte item) => true; + + private static string[] _itemNames = new[] + { + "None", + "RocketLauncher", + "AssaultRifle", + "SniperRifle", + "Shotgun", + "HandgunGlock17", + "GrenadeLauncher", + "BowGun", + "CombatKnife", + "Handgun", + "CustomHandgun", + "LinearLauncher", + "HandgunBullets", + "MagnumBullets", + "ShotgunShells", + "GrenadeRounds", + "AcidRounds", + "FlameRounds", + "BowGunArrows", + "M93RPart", + "FAidSpray", + "GreenHerb", + "RedHerb", + "BlueHerb", + "MixedHerb2Green", + "MixedHerbRedGreen", + "MixedHerbBlueGreen", + "MixedHerb2GreenBlue", + "MixedHerb3Green", + "MixedHerbGreenBlueRed", + "MagnumBulletsInsideCase", + "InkRibbon", + "Magnum", + "GoldLugers", + "SubMachineGun", + "BowGunPowder", + "GunPowderArrow", + "BOWGasRounds", + "MGunBullets", + "GasMask", + "RifleBullets", + "DuraluminCaseUnused", + "ARifleBullets", + "AlexandersPierce", + "AlexandersJewel", + "AlfredsRing", + "AlfredsJewel", + "PrisonersDiary", + "DirectorsMemo", + "Instructions", + "Lockpick", + "GlassEye", + "PianoRoll", + "SteeringWheel", + "CraneKey", + "Lighter", + "EaglePlate", + "SidePack", + "MapRoll", + "HawkEmblem", + "QueenAntObject", + "KingAntObject", + "BiohazardCard", + "DuraluminCaseM93RParts", + "Detonator", + "ControlLever", + "GoldDragonfly", + "SilverKey", + "GoldKey", + "ArmyProof", + "NavyProof", + "AirForceProof", + "KeyWithTag", + "IDCard", + "Map", + "AirportKey", + "EmblemCard", + "SkeletonPicture", + "MusicBoxPlate", + "GoldDragonflyNoWings", + "Album", + "Halberd", + "Extinguisher", + "Briefcase", + "PadlockKey", + "TG01", + "SpAlloyEmblem", + "ValveHandle", + "OctaValveHandle", + "MachineRoomKey", + "MiningRoomKey", + "BarCodeSticker", + "SterileRoomKey", + "DoorKnob", + "BatteryPack", + "HemostaticWire", + "TurnTableKey", + "ChemStorageKey", + "ClementAlpha", + "ClementSigma", + "TankObject", + "SpAlloyEmblemUnused", + "AlfredsMemo", + "RustedSword", + "Hemostatic", + "SecurityCard", + "SecurityFile", + "AlexiasChoker", + "AlexiasJewel", + "QueenAntRelief", + "KingAntRelief", + "RedJewel", + "BlueJewel", + "Socket", + "SqValveHandle", + "Serum", + "EarthenwareVase", + "PaperWeight", + "SilverDragonflyNoWings", + "SilverDragonfly", + "WingObject", + "Crystal", + "GoldDragonfly1Wing", + "GoldDragonfly2Wings", + "GoldDragonfly3Wings", + "File", + "PlantPot", + "PictureB", + "DuraluminCaseBowGunPowder", + "DuraluminCaseMagnumRounds", + "BowGunPowderUnused", + "EnhancedHandgun", + "Memo", + "BoardClip", + "Card", + "NewspaperClip", + "LugerReplica", + "QueenAntReliefComplete", + "FamilyPicture", + "FileFolders", + "RemoteController", + "QuestionA", + "M1P", + "CalicoBullets", + "ClementMixture", + "PlayingManual", + "QuestionB", + "QuestionC", + "QuestionD", + "EmptyExtinguisher", + "SquareSocket", + "QuestionE", + "CrestKeyS", + "CrestKeyG" + }; + } +} diff --git a/IntelOrca.Biohazard.BioRand/RECV/ReCvItemIds.cs b/IntelOrca.Biohazard.BioRand/RECV/ReCvItemIds.cs new file mode 100644 index 000000000..4a4e77d92 --- /dev/null +++ b/IntelOrca.Biohazard.BioRand/RECV/ReCvItemIds.cs @@ -0,0 +1,161 @@ +namespace IntelOrca.Biohazard.BioRand.RECV +{ + internal static class ReCvItemIds + { + public const byte None = 0x00; + public const byte RocketLauncher = 0x01; + public const byte AssaultRifle = 0x02; + public const byte SniperRifle = 0x03; + public const byte Shotgun = 0x04; + public const byte HandgunGlock17 = 0x05; + public const byte GrenadeLauncher = 0x06; + public const byte BowGun = 0x07; + public const byte CombatKnife = 0x08; + public const byte Handgun = 0x09; + public const byte CustomHandgun = 0x0A; + public const byte LinearLauncher = 0x0B; + public const byte HandgunBullets = 0x0C; + public const byte MagnumBullets = 0x0D; + public const byte ShotgunShells = 0x0E; + public const byte GrenadeRounds = 0x0F; + public const byte AcidRounds = 0x10; + public const byte FlameRounds = 0x11; + public const byte BowGunArrows = 0x12; + public const byte M93RPart = 0x13; + public const byte FAidSpray = 0x14; + public const byte GreenHerb = 0x15; + public const byte RedHerb = 0x16; + public const byte BlueHerb = 0x17; + public const byte MixedHerb2Green = 0x18; + public const byte MixedHerbRedGreen = 0x19; + public const byte MixedHerbBlueGreen = 0x1A; + public const byte MixedHerb2GreenBlue = 0x1B; + public const byte MixedHerb3Green = 0x1C; + public const byte MixedHerbGreenBlueRed = 0x1D; + public const byte MagnumBulletsInsideCase = 0x1E; + public const byte InkRibbon = 0x1F; + public const byte Magnum = 0x20; + public const byte GoldLugers = 0x21; + public const byte SubMachineGun = 0x22; + public const byte BowGunPowder = 0x23; + public const byte GunPowderArrow = 0x24; + public const byte BOWGasRounds = 0x25; + public const byte MGunBullets = 0x26; + public const byte GasMask = 0x27; + public const byte RifleBullets = 0x28; + public const byte DuraluminCaseUnused = 0x29; + public const byte ARifleBullets = 0x2A; + public const byte AlexandersPierce = 0x2B; + public const byte AlexandersJewel = 0x2C; + public const byte AlfredsRing = 0x2D; + public const byte AlfredsJewel = 0x2E; + public const byte PrisonersDiary = 0x2F; + public const byte DirectorsMemo = 0x30; + public const byte Instructions = 0x31; + public const byte Lockpick = 0x32; + public const byte GlassEye = 0x33; + public const byte PianoRoll = 0x34; + public const byte SteeringWheel = 0x35; + public const byte CraneKey = 0x36; + public const byte Lighter = 0x37; + public const byte EaglePlate = 0x38; + public const byte SidePack = 0x39; + public const byte MapRoll = 0x3A; + public const byte HawkEmblem = 0x3B; + public const byte QueenAntObject = 0x3C; + public const byte KingAntObject = 0x3D; + public const byte BiohazardCard = 0x3E; + public const byte DuraluminCaseM93RParts = 0x3F; + public const byte Detonator = 0x40; + public const byte ControlLever = 0x41; + public const byte GoldDragonfly = 0x42; + public const byte SilverKey = 0x43; + public const byte GoldKey = 0x44; + public const byte ArmyProof = 0x45; + public const byte NavyProof = 0x46; + public const byte AirForceProof = 0x47; + public const byte KeyWithTag = 0x48; + public const byte IDCard = 0x49; + public const byte Map = 0x4A; + public const byte AirportKey = 0x4B; + public const byte EmblemCard = 0x4C; + public const byte SkeletonPicture = 0x4D; + public const byte MusicBoxPlate = 0x4E; + public const byte GoldDragonflyNoWings = 0x4F; + public const byte Album = 0x50; + public const byte Halberd = 0x51; + public const byte Extinguisher = 0x52; + public const byte Briefcase = 0x53; + public const byte PadlockKey = 0x54; + public const byte TG01 = 0x55; + public const byte SpAlloyEmblem = 0x56; + public const byte ValveHandle = 0x57; + public const byte OctaValveHandle = 0x58; + public const byte MachineRoomKey = 0x59; + public const byte MiningRoomKey = 0x5A; + public const byte BarCodeSticker = 0x5B; + public const byte SterileRoomKey = 0x5C; + public const byte DoorKnob = 0x5D; + public const byte BatteryPack = 0x5E; + public const byte HemostaticWire = 0x5F; + public const byte TurnTableKey = 0x60; + public const byte ChemStorageKey = 0x61; + public const byte ClementAlpha = 0x62; + public const byte ClementSigma = 0x63; + public const byte TankObject = 0x64; + public const byte SpAlloyEmblemUnused = 0x65; + public const byte AlfredsMemo = 0x66; + public const byte RustedSword = 0x67; + public const byte Hemostatic = 0x68; + public const byte SecurityCard = 0x69; + public const byte SecurityFile = 0x6A; + public const byte AlexiasChoker = 0x6B; + public const byte AlexiasJewel = 0x6C; + public const byte QueenAntRelief = 0x6D; + public const byte KingAntRelief = 0x6E; + public const byte RedJewel = 0x6F; + public const byte BlueJewel = 0x70; + public const byte Socket = 0x71; + public const byte SqValveHandle = 0x72; + public const byte Serum = 0x73; + public const byte EarthenwareVase = 0x74; + public const byte PaperWeight = 0x75; + public const byte SilverDragonflyNoWings = 0x76; + public const byte SilverDragonfly = 0x77; + public const byte WingObject = 0x78; + public const byte Crystal = 0x79; + public const byte GoldDragonfly1Wing = 0x7A; + public const byte GoldDragonfly2Wings = 0x7B; + public const byte GoldDragonfly3Wings = 0x7C; + public const byte File = 0x7D; + public const byte PlantPot = 0x7E; + public const byte PictureB = 0x7F; + public const byte DuraluminCaseBowGunPowder = 0x80; + public const byte DuraluminCaseMagnumRounds = 0x81; + public const byte BowGunPowderUnused = 0x82; + public const byte EnhancedHandgun = 0x83; + public const byte Memo = 0x84; + public const byte BoardClip = 0x85; + public const byte Card = 0x86; + public const byte NewspaperClip = 0x87; + public const byte LugerReplica = 0x88; + public const byte QueenAntReliefComplete = 0x89; + public const byte FamilyPicture = 0x8A; + public const byte FileFolders = 0x8B; + public const byte RemoteController = 0x8C; + public const byte QuestionA = 0x8D; + public const byte M1P = 0x8E; + public const byte CalicoBullets = 0x8F; + public const byte ClementMixture = 0x90; + public const byte PlayingManual = 0x91; + public const byte QuestionB = 0x92; + public const byte QuestionC = 0x93; + public const byte QuestionD = 0x94; + public const byte EmptyExtinguisher = 0x95; + public const byte SquareSocket = 0x96; + public const byte QuestionE = 0x97; + public const byte CrestKeyS = 0x98; + public const byte CrestKeyG = 0x99; + public const byte Unknown = 0xFF; + } +} diff --git a/IntelOrca.Biohazard.BioRand/RECV/ReCvRandomiser.cs b/IntelOrca.Biohazard.BioRand/RECV/ReCvRandomiser.cs new file mode 100644 index 000000000..3388fd1bd --- /dev/null +++ b/IntelOrca.Biohazard.BioRand/RECV/ReCvRandomiser.cs @@ -0,0 +1,206 @@ +using System; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using IntelOrca.Biohazard.Extensions; +using IntelOrca.Biohazard.Room; +using IntelOrca.Biohazard.Script; + +namespace IntelOrca.Biohazard.BioRand.RECV +{ + public class ReCvRandomiser : BaseRandomiser + { + private AfsFile? _rdxAfs; + private RandomizedRdt[] _rdts = new RandomizedRdt[204]; + + protected override BioVersion BiohazardVersion => BioVersion.BiohazardCv; + internal override IDoorHelper DoorHelper { get; } = new ReCvDoorHelper(); + internal override IItemHelper ItemHelper { get; } = new ReCvItemHelper(); + internal override IEnemyHelper EnemyHelper => new ReCvEnemyHelper(); + internal override INpcHelper NpcHelper { get; } = null; + internal override string BGMPath => throw new NotImplementedException(); + + public ReCvRandomiser(ReInstallConfig installConfig, IBgCreator? bgCreator) + : base(installConfig, bgCreator) + { + } + + protected override RdtId[] GetRdtIds(string dataPath) + { + return _rdxLnkRdtIdOrder + .Where(x => !string.IsNullOrEmpty(x)) + .Select(RdtId.Parse) + .ToArray(); + } + + private int GetRdxFileIndex(RdtId id) + { + for (var i = 0; i < _rdxLnkRdtIdOrder.Length; i++) + { + var szRdtId = _rdxLnkRdtIdOrder[i]; + if (string.IsNullOrEmpty(szRdtId)) + continue; + + if (RdtId.Parse(szRdtId) == id) + return i; + } + return -1; + } + + protected override string GetDataPath(string installPath) + { + return Path.Combine(installPath, "data"); + } + + protected override string GetRdtPath(string dataPath, RdtId rdtId, int player, bool mod) + { + return Path.Combine(dataPath, "RDX_LNK.AFS"); + } + + protected override RandomizedRdt ReadRdt(FileRepository fileRepository, RdtId rdtId, string path, string modPath) + { + if (_rdxAfs == null) + { + _rdxAfs = new AfsFile(File.ReadAllBytes(path)); + } + + var fileIndex = GetRdxFileIndex(rdtId); + if (_rdts[fileIndex] != null) + return _rdts[fileIndex]; + + var prs = new PrsFile(_rdxAfs.GetFileData(fileIndex)); + var rdt = new RdtCv(prs.Uncompressed); + var rrdt = new RandomizedRdt(rdt, rdtId); + rrdt.Ast = CreateAst(rdt); + _rdts[fileIndex] = rrdt; + return rrdt; + } + + public override string GetPlayerName(int player) => "Claire"; + + internal FileRepository CreateRepository(string installPath, string? modPath = null) + { + var repo = new FileRepository(installPath, null); + AddArchives(installPath, repo); + return repo; + } + + internal void AddArchives(string installPath, FileRepository fileRepo) + { + var dataPath = GetDataPath(installPath); + foreach (var path in Directory.GetFiles(dataPath, "rofs*.dat")) + { + fileRepo.AddRE3Archive(path); + } + } + + public override bool ValidateGamePath(string path) + { + return File.Exists(Path.Combine(path, "rofs1.dat")); + } + + internal void AddMusicSelection(BgmRandomiser bgmRandomizer, ReInstallConfig reConfig, double volume) + { + var dataPath = GetDataPath(reConfig.GetInstallPath(BiohazardVersion)); + var srcBgmDirectory = Path.Combine(dataPath, BGMPath); + bgmRandomizer.AddToSelection(GetBgmJson(), srcBgmDirectory, ".WAV", volume); + } + + public override void Generate(RandoConfig config, IRandoProgress progress, FileRepository fileRepository) + { + var reConfig = InstallConfig; + if (config.RandomBgm) + { + if (MusicAlbumSelected(config, "RE1") && !reConfig.IsEnabled(BioVersion.Biohazard1)) + { + throw new BioRandUserException("RE1 installation must be enabled to use RE1 assets."); + } + if (MusicAlbumSelected(config, "RE2") && !reConfig.IsEnabled(BioVersion.Biohazard2)) + { + throw new BioRandUserException("RE2 installation must be enabled to use RE2 assets."); + } + } + if (!reConfig.IsEnabled(BioVersion.Biohazard3)) + { + throw new BioRandUserException("RE3 installation must be enabled to randomize RE3."); + } + + config.RandomEnemyPlacement = false; + config.RandomInventory = false; + config.RandomCutscenes = false; + config.RandomEvents = false; + config.RandomBgm = false; + + GenerateRdts(config, progress, fileRepository); + + // base.Generate(config, progress, fileRepository); + + using (progress.BeginTask(null, "Compressing room files")) + { + Directory.CreateDirectory(Path.Combine(fileRepository.ModPath, "data")); + WriteRdxAfs().Data.WriteToFile(Path.Combine(fileRepository.ModPath, "data", "RDX_LNK.AFS")); + } + } + + private AfsFile WriteRdxAfs() + { + if (_rdxAfs == null) + throw new Exception(); + + var builder = _rdxAfs.ToBuilder(); + var parellelOptions = new ParallelOptions() + { + MaxDegreeOfParallelism = 32 + }; + Parallel.For(0, _rdts.Length, parellelOptions, i => + { + var rrdt = _rdts[i]; + if (rrdt != null) + { + var prs = PrsFile.Compress(rrdt.RdtFile.Data); + builder.Replace(i, prs.Data); + } + }); + return builder.ToAfsFile(); + } + + protected override string[] GetDefaultNPCs() + { + return new[] { "claire", "steve", "chris", "rodrigo", "alfred", "alexia" }; + } + + private ScriptAst? CreateAst(RdtCv rdt) + { + var result = new ScriptAst(); + return result; + } + + private static string[] _rdxLnkRdtIdOrder = new[] + { + "100", + "101", + "102", + "", // 102 again + "103", + "", // 103 again + "104", + "105", + "106", + "107", + "108", + "109", + "10A", + "10B", + "10C", + "", // "10D", + "10F", + // "10F", again + // green, 2 herbs + // navy proof, 2 hebs + // navy proof, 2 hebs + // navy proof, 2 hebs + // HG ammo + // HG ammo + }; + } +} diff --git a/IntelOrca.Biohazard.BioRand/Rdt.cs b/IntelOrca.Biohazard.BioRand/Rdt.cs index ccfbf6938..804d99c0a 100644 --- a/IntelOrca.Biohazard.BioRand/Rdt.cs +++ b/IntelOrca.Biohazard.BioRand/Rdt.cs @@ -124,20 +124,31 @@ public void RemoveDoorUnlock(int id) public void SetItem(byte id, ushort type, ushort amount) { - foreach (var item in Items) + if (Version == BioVersion.BiohazardCv) { - if (item.Id == id) - { - item.Type = type; - item.Amount = amount; - } + var rdtBuilder = ((RdtCv)RdtFile).ToBuilder(); + var item = rdtBuilder.Items[id]; + item.Type = type; + rdtBuilder.Items[id] = item; + RdtFile = rdtBuilder.ToRdt(); } - foreach (var reset in Resets) + else { - if (reset.Id == id && reset.SCE == 2 && reset.Data0 != 0) + foreach (var item in Items) + { + if (item.Id == id) + { + item.Type = type; + item.Amount = amount; + } + } + foreach (var reset in Resets) { - reset.Data0 = type; - reset.Data1 = amount; + if (reset.Id == id && reset.SCE == 2 && reset.Data0 != 0) + { + reset.Data0 = type; + reset.Data1 = amount; + } } } } @@ -314,7 +325,9 @@ public void Save() ms.Position = patch.Key; bw.Write(patch.Value); } - if (Version == BioVersion.Biohazard1) + if (Version == BioVersion.BiohazardCv) + RdtFile = new RdtCv(ms.ToArray()); + else if (Version == BioVersion.Biohazard1) RdtFile = new Rdt1(ms.ToArray()); else RdtFile = new Rdt2(Version, ms.ToArray()); @@ -326,8 +339,11 @@ public void Save() PrependOpcodes(); AddCustomScript(); - Directory.CreateDirectory(Path.GetDirectoryName(ModifiedPath!)!); - File.WriteAllBytes(ModifiedPath!, RdtFile.Data.ToArray()); + if (ModifiedPath != null) + { + Directory.CreateDirectory(Path.GetDirectoryName(ModifiedPath)!); + File.WriteAllBytes(ModifiedPath, RdtFile.Data.ToArray()); + } } private void UpdateEmrs() diff --git a/IntelOrca.Biohazard.BioRand/ReInstallConfig.cs b/IntelOrca.Biohazard.BioRand/ReInstallConfig.cs index a9c95ba1e..60c7f9b27 100644 --- a/IntelOrca.Biohazard.BioRand/ReInstallConfig.cs +++ b/IntelOrca.Biohazard.BioRand/ReInstallConfig.cs @@ -4,8 +4,8 @@ namespace IntelOrca.Biohazard.BioRand { public class ReInstallConfig { - private string[] _installPath = new string[3]; - private bool[] _enabled = new bool[3]; + private string[] _installPath = new string[4]; + private bool[] _enabled = new bool[4]; public bool EnableCustomContent { get; set; } public bool RandomizeTitleVoice { get; set; } = true; @@ -42,6 +42,8 @@ public string GetInstallPath(BioVersion version) return GetInstallPath(1); case BioVersion.Biohazard3: return GetInstallPath(2); + case BioVersion.BiohazardCv: + return GetInstallPath(3); default: throw new InvalidOperationException(); } @@ -57,6 +59,8 @@ public bool IsEnabled(BioVersion version) return IsEnabled(1); case BioVersion.Biohazard3: return IsEnabled(2); + case BioVersion.BiohazardCv: + return IsEnabled(3); default: throw new InvalidOperationException(); } diff --git a/IntelOrca.Biohazard.BioRand/data/recv/rdt.json b/IntelOrca.Biohazard.BioRand/data/recv/rdt.json new file mode 100644 index 000000000..b3cf63e0b --- /dev/null +++ b/IntelOrca.Biohazard.BioRand/data/recv/rdt.json @@ -0,0 +1,126 @@ +{ + "beginEndRooms": [ + { + "start": "100", + "end": "10A" + } + ], + "rooms": { + "100": { + "doors": [ + { + "target": "101" + } + ] + }, + "101": { + "doors": [ + { + "target": "100" + }, + { + "target": "102" + } + ], + "items": [ + { + "id": 0, + "type": 31, + "amount": 1 + }, + { + "id": 1, + "type": 12, + "amount": 15 + } + ] + }, + "102": { + "doors": [ + { + "target": "101" + }, + { + "target": "103" + } + ] + }, + "103": { + "doors": [ + { + "target": "102" + }, + { + "target": "105" + }, + { + "target": "10A" + } + ] + }, + "104": { + "doors": [ + { + "target": "109" + } + ] + }, + "105": { + "doors": [ + { + "target": "103" + }, + { + "target": "106" + }, + { + "target": "108" + } + ] + }, + "106": { + "doors": [ + { + "target": "105" + }, + { + "target": "107" + } + ] + }, + "107": { + "doors": [ + { + "target": "106" + } + ] + }, + "108": { + "doors": [ + { + "target": "105" + }, + { + "target": "109" + } + ] + }, + "109": { + "doors": [ + { + "target": "104" + }, + { + "target": "108" + } + ] + }, + "10A": { + "doors": [ + { + "target": "103" + } + ] + } + } +} diff --git a/biohazard-utils b/biohazard-utils index 2b950930c..d758ee934 160000 --- a/biohazard-utils +++ b/biohazard-utils @@ -1 +1 @@ -Subproject commit 2b950930ca76bf920b4d33e5a8351b0414df2c14 +Subproject commit d758ee93430fcce30265553579f38a42d3ad8bb0 diff --git a/biorand/GameLocationBox.xaml.cs b/biorand/GameLocationBox.xaml.cs index 0ac43d008..5985b4c0a 100644 --- a/biorand/GameLocationBox.xaml.cs +++ b/biorand/GameLocationBox.xaml.cs @@ -1,8 +1,5 @@ using System; -using System.Collections.Generic; -using System.Collections.ObjectModel; using System.IO; -using System.Linq; using System.Windows; using System.Windows.Controls; using System.Windows.Media; @@ -52,6 +49,8 @@ public string SelectedExecutable get => cbExecutables.SelectedItem?.ToString(); } + public bool IsIso { get; set; } + public GameLocationBox() { InitializeComponent(); @@ -81,7 +80,10 @@ private void ValidatePath(string path) { if (File.Exists(path)) { - path = Path.GetDirectoryName(path); + if (!IsIso) + { + path = Path.GetDirectoryName(path); + } } var eventArgs = new PathValidateEventArgs(); @@ -111,18 +113,34 @@ private void InvokeChanges() private void btnBrowse_Click(object sender, RoutedEventArgs e) { - var dialog = new OpenFileDialog(); - dialog.Title = $"Select {Header} / Biohazard Game Location"; - if (Directory.Exists(txtGameDataLocation.Text)) - dialog.InitialDirectory = txtGameDataLocation.Text; - dialog.Filter = "Executable Files (*.exe)|*.exe"; - dialog.CheckFileExists = false; - dialog.CheckPathExists = false; - var window = Window.GetWindow(this); - if (dialog.ShowDialog(window) == true) + if (IsIso) { - ValidatePath(dialog.FileName); - SetExecutableList(Path.GetDirectoryName(dialog.FileName), Path.GetFileName(dialog.FileName)); + var dialog = new OpenFileDialog(); + dialog.Title = $"Select {Header} / Biohazard Game Location"; + if (Directory.Exists(txtGameDataLocation.Text)) + dialog.InitialDirectory = txtGameDataLocation.Text; + dialog.Filter = "ISO image (*.iso)|*.iso"; + var window = Window.GetWindow(this); + if (dialog.ShowDialog(window) == true) + { + ValidatePath(dialog.FileName); + } + } + else + { + var dialog = new OpenFileDialog(); + dialog.Title = $"Select {Header} / Biohazard Game Location"; + if (Directory.Exists(txtGameDataLocation.Text)) + dialog.InitialDirectory = txtGameDataLocation.Text; + dialog.Filter = "Executable Files (*.exe)|*.exe"; + dialog.CheckFileExists = false; + dialog.CheckPathExists = false; + var window = Window.GetWindow(this); + if (dialog.ShowDialog(window) == true) + { + ValidatePath(dialog.FileName); + SetExecutableList(Path.GetDirectoryName(dialog.FileName), Path.GetFileName(dialog.FileName)); + } } } diff --git a/biorand/MainWindow.xaml b/biorand/MainWindow.xaml index 56414e538..92d8b7266 100644 --- a/biorand/MainWindow.xaml +++ b/biorand/MainWindow.xaml @@ -48,9 +48,10 @@ - - - + + + + @@ -105,6 +106,7 @@ + Enable @@ -279,23 +281,25 @@ ToolTip="Average quantity of ammunition per ammunition pick up. Highest setting will allow a maximum of 60 handgun bullets in a pickup, or 30 shotgun shells." /> - Random inventory - Weapon 1: - - None - Random - Sidearm - Primary - Powerful - - Weapon 2: - - None - Random - Sidearm - Primary - Powerful - + + Random inventory + Weapon 1: + + None + Random + Sidearm + Primary + Powerful + + Weapon 2: + + None + Random + Sidearm + Primary + Powerful + + Item Pickup Distribution diff --git a/biorand/MainWindow.xaml.cs b/biorand/MainWindow.xaml.cs index 83ccad4c7..b3e4053c1 100644 --- a/biorand/MainWindow.xaml.cs +++ b/biorand/MainWindow.xaml.cs @@ -17,6 +17,7 @@ using IntelOrca.Biohazard.BioRand.RE1; using IntelOrca.Biohazard.BioRand.RE2; using IntelOrca.Biohazard.BioRand.RE3; +using IntelOrca.Biohazard.BioRand.RECV; namespace IntelOrca.Biohazard.BioRand { @@ -77,10 +78,12 @@ private void LoadSettings() gameLocation1.Location = _settings.GamePath1; gameLocation2.Location = _settings.GamePath2; gameLocation3.Location = _settings.GamePath3; + gameLocationCV.Location = _settings.GamePathCv; gameLocation1.IsChecked = _settings.GameEnabled1; gameLocation2.IsChecked = _settings.GameEnabled2; gameLocation3.IsChecked = _settings.GameEnabled3; + gameLocationCV.IsChecked = _settings.GameEnabledCv; gameLocation1.SetExecutableList(_settings.GamePath1, _settings.GameExecutable1); gameLocation2.SetExecutableList(_settings.GamePath2, _settings.GameExecutable2); @@ -89,6 +92,7 @@ private void LoadSettings() gameLocation1.IsSettingsLoaded = true; gameLocation2.IsSettingsLoaded = true; gameLocation3.IsSettingsLoaded = true; + gameLocationCV.IsSettingsLoaded = true; chkEnableCustomContent.IsChecked = !_settings.DisableCustomContent; chkRandomizeTitleVoice.IsChecked = _settings.RandomizeTitleVoice; @@ -100,13 +104,14 @@ private void LoadSettings() _settings.Seed1 = new RandoConfig().WithSeed(_random.Next(0, RandoConfig.MaxSeed)).ToString(); _settings.Seed2 = new RandoConfig().WithSeed(_random.Next(0, RandoConfig.MaxSeed)).ToString(); _settings.Seed3 = new RandoConfig().WithSeed(_random.Next(0, RandoConfig.MaxSeed)).ToString(); + _settings.SeedCv = new RandoConfig().WithSeed(_random.Next(0, RandoConfig.MaxSeed)).ToString(); if (lastVersion != default) { SelectedGame = 5; } } - var seed = SelectedGame == 0 ? _settings.Seed1 : SelectedGame == 1 ? _settings.Seed2 : _settings.Seed3; + var seed = SelectedGame == 0 ? _settings.Seed1 : SelectedGame == 1 ? _settings.Seed2 : SelectedGame == 2 ? _settings.Seed3 : _settings.SeedCv; if (seed == null) { RandomizeSeed(); @@ -122,10 +127,12 @@ private void SaveSettings() _settings.GamePath1 = gameLocation1.Location; _settings.GamePath2 = gameLocation2.Location; _settings.GamePath3 = gameLocation3.Location; + _settings.GamePathCv = gameLocationCV.Location; _settings.GameEnabled1 = gameLocation1.IsChecked == true; _settings.GameEnabled2 = gameLocation2.IsChecked == true; _settings.GameEnabled3 = gameLocation3.IsChecked == true; + _settings.GameEnabledCv = gameLocationCV.IsChecked == true; _settings.GameExecutable1 = gameLocation1.SelectedExecutable; _settings.GameExecutable2 = gameLocation2.SelectedExecutable; @@ -148,6 +155,9 @@ private void SaveSettings() case 2: _settings.Seed3 = _config.ToString(); break; + case 3: + _settings.SeedCv = _config.ToString(); + break; } _settings.Save(); } @@ -638,9 +648,11 @@ private ReInstallConfig GetInstallConfig() config.SetEnabled(0, _settings.GameEnabled1); config.SetEnabled(1, _settings.GameEnabled2); config.SetEnabled(2, _settings.GameEnabled3); + config.SetEnabled(3, _settings.GameEnabledCv); config.SetInstallPath(0, _settings.GamePath1); config.SetInstallPath(1, _settings.GamePath2); config.SetInstallPath(2, _settings.GamePath3); + config.SetInstallPath(3, _settings.GamePathCv); return config; } @@ -888,21 +900,21 @@ private void gameListView_SelectionChanged(object sender, SelectionChangedEventA using (SuspendEvents()) { - if (index == 5) + if (index == 6) { panelNew.Visibility = Visibility.Visible; panelInfo.Visibility = Visibility.Hidden; panelConfig.Visibility = Visibility.Hidden; panelRando.Visibility = Visibility.Hidden; } - else if (index == 4) + else if (index == 5) { panelNew.Visibility = Visibility.Hidden; panelInfo.Visibility = Visibility.Visible; panelConfig.Visibility = Visibility.Hidden; panelRando.Visibility = Visibility.Hidden; } - else if (index == 3) + else if (index == 4) { panelNew.Visibility = Visibility.Hidden; panelInfo.Visibility = Visibility.Hidden; @@ -915,36 +927,22 @@ private void gameListView_SelectionChanged(object sender, SelectionChangedEventA panelInfo.Visibility = Visibility.Hidden; panelConfig.Visibility = Visibility.Hidden; panelRando.Visibility = Visibility.Visible; - if (index == 2) - { - sliderGunpowder.Visibility = Visibility.Visible; - } - else - { - _config.RatioGunpowder = 0; - sliderGunpowder.Visibility = Visibility.Hidden; - } + dropdownVariant.Visibility = index == 1 ? Visibility.Visible : Visibility.Hidden; - if (index == 1) - { - chkRandomEvents.Visibility = Visibility.Visible; - } - else - { - chkRandomEvents.Visibility = Visibility.Collapsed; - } UpdatePlayerDropdowns(); + UpdateItems(); UpdateEnemies(); UpdateEnemySkinList(); - UpdateNPCList(); + UpdateCutscenes(); UpdateBGMList(); + UpdateNPCList(); UpdateLogButtons(); } } - if (index >= 0 && index <= 2) + if (index >= 0 && index <= 3) _config.Game = (byte)(index + 1); _settings.LastSelectedGame = index; _settings.Save(); @@ -970,6 +968,8 @@ private BaseRandomiser GetRandomizer(int index) return new Re2Randomiser(installConfig, new BiorandBgCreator()); case 2: return new Re3Randomiser(installConfig, new BiorandBgCreator()); + case 3: + return new ReCvRandomiser(installConfig, new BiorandBgCreator()); default: return null; } @@ -985,6 +985,8 @@ private string GetGameLocation() return _settings.GamePath2; case 2: return _settings.GamePath3; + case 3: + return _settings.GamePathCv; default: return null; } @@ -1041,6 +1043,27 @@ private void gameLocation_Validate(object sender, PathValidateEventArgs e) e.Message = "Directory looks good!"; } + private void gameLocationCV_Validate(object sender, PathValidateEventArgs e) + { + if (!File.Exists(e.Path)) + { + e.Message = "File does not exist!"; + e.IsValid = false; + return; + } + + if (new FileInfo(e.Path).Length != 1883996160) + { + e.Message = "Image is not the expected version!"; + e.IsValid = false; + return; + } + + + e.IsValid = true; + e.Message = "ISO looks good!"; + } + private void gameLocation_Changed(object sender, EventArgs e) { SaveSettings(); @@ -1059,7 +1082,7 @@ private int? SelectedGame get { var index = (gameListView.SelectedItem as GameMenuItem)?.Game; - if (index > 2) + if (index > 3) return null; return index; } @@ -1088,34 +1111,61 @@ private void btnLog1_Click(object sender, RoutedEventArgs e) private void UpdatePlayerDropdowns() { - var randomizer = GetRandomizer(); - chkPlayer.Visibility = Visibility.Visible; - - var dropdownLabels = new[] { lblPlayer0, lblPlayer1 }; - var dropdowns = new[] { dropdownPlayer0, dropdownPlayer1 }; - for (int i = 0; i < 2; i++) + if (SelectedGame >= 2) { - var label = dropdownLabels[i]; - var dropdown = dropdowns[i]; - label.Text = $"{randomizer.GetPlayerName(i)} becomes:"; - var items = new List() { "Random" }; - items.AddRange(randomizer.GetPlayerCharacters(i)); - dropdown.ItemsSource = items; - if (dropdown.SelectedIndex == -1) - dropdown.SelectedIndex = 0; + chkPlayer.Visibility = Visibility.Hidden; + } + else + { + var randomizer = GetRandomizer(); + var dropdownLabels = new[] { lblPlayer0, lblPlayer1 }; + var dropdowns = new[] { dropdownPlayer0, dropdownPlayer1 }; + for (int i = 0; i < 2; i++) + { + var label = dropdownLabels[i]; + var dropdown = dropdowns[i]; + label.Text = $"{randomizer.GetPlayerName(i)} becomes:"; + var items = new List() { "Random" }; + items.AddRange(randomizer.GetPlayerCharacters(i)); + dropdown.ItemsSource = items; + if (dropdown.SelectedIndex == -1) + dropdown.SelectedIndex = 0; + } + + if (SelectedGame >= 2) + { + lblPlayer1.Visibility = Visibility.Collapsed; + dropdownPlayer1.Visibility = Visibility.Collapsed; + } + else + { + lblPlayer1.Visibility = Visibility.Visible; + dropdownPlayer1.Visibility = Visibility.Visible; + } + chkSwapCharacters.Visibility = SelectedGame != 2 ? Visibility.Visible : Visibility.Hidden; + chkPlayer.Visibility = Visibility.Visible; } + } + private void UpdateItems() + { if (SelectedGame == 2) { - lblPlayer1.Visibility = Visibility.Collapsed; - dropdownPlayer1.Visibility = Visibility.Collapsed; + sliderGunpowder.Visibility = Visibility.Visible; } else { - lblPlayer1.Visibility = Visibility.Visible; - dropdownPlayer1.Visibility = Visibility.Visible; + _config.RatioGunpowder = 0; + sliderGunpowder.Visibility = Visibility.Hidden; + } + if (SelectedGame == 3) + { + panelRandomInventory.Visibility = Visibility.Hidden; + } + else + { + panelRandomInventory.Visibility = Visibility.Visible; } - chkSwapCharacters.Visibility = SelectedGame != 2 ? Visibility.Visible : Visibility.Hidden; } private void UpdateEnemies() @@ -1127,18 +1177,54 @@ private void UpdateEnemies() items.Add(new SliderListItem(enemy.Name, 4, 7)); } listEnemies.ItemsSource = items; + if (SelectedGame == 3) + { + chkRandomEnemyPlacements.Visibility = Visibility.Hidden; + } + else + { + chkRandomEnemyPlacements.Visibility = Visibility.Visible; + } } private void UpdateEnemySkinList() { - var randomizer = GetRandomizer(); - var enemySkins = randomizer.GetEnemySkins(); - listEnemySkins.Names = enemySkins - .Select(x => x.Name) - .ToArray(); - listEnemySkins.ToolTips = enemySkins - .Select(x => x.ToolTip) - .ToArray(); + if (SelectedGame == 3) + { + chkEnemySkins.Visibility = Visibility.Hidden; + } + else + { + var randomizer = GetRandomizer(); + var enemySkins = randomizer.GetEnemySkins(); + listEnemySkins.Names = enemySkins + .Select(x => x.Name) + .ToArray(); + listEnemySkins.ToolTips = enemySkins + .Select(x => x.ToolTip) + .ToArray(); + chkEnemySkins.Visibility = Visibility.Visible; + } + } + + private void UpdateCutscenes() + { + if (SelectedGame == 3) + { + chkCutscenes.Visibility = Visibility.Hidden; + } + else + { + chkCutscenes.Visibility = Visibility.Visible; + if (SelectedGame == 1) + { + chkRandomEvents.Visibility = Visibility.Visible; + } + else + { + chkRandomEvents.Visibility = Visibility.Collapsed; + } + } } private void UpdateNPCList() @@ -1152,8 +1238,16 @@ private void UpdateNPCList() private void UpdateBGMList() { - var randomizer = GetRandomizer(); - listBGMs.Names = randomizer.GetMusicAlbums(); + if (SelectedGame == 3) + { + chkRngBgm.Visibility = Visibility.Collapsed; + } + else + { + var randomizer = GetRandomizer(); + listBGMs.Names = randomizer.GetMusicAlbums(); + chkRngBgm.Visibility = Visibility.Visible; + } } private void UpdateLogButtons() @@ -1168,7 +1262,7 @@ private void UpdateLogButtons() var hyperlink = btn.Inlines.FirstInline as Hyperlink; hyperlink.Inlines.Clear(); hyperlink.Inlines.Add($"{randomizer.GetPlayerName(i)} Log"); - btn.Visibility = i == 1 && SelectedGame == 2 ? Visibility.Collapsed : Visibility.Visible; + btn.Visibility = i == 1 && SelectedGame >= 2 ? Visibility.Collapsed : Visibility.Visible; } } diff --git a/biorand/RandoAppSettings.cs b/biorand/RandoAppSettings.cs index dd93f9221..956cd8b0c 100644 --- a/biorand/RandoAppSettings.cs +++ b/biorand/RandoAppSettings.cs @@ -10,16 +10,19 @@ public class RandoAppSettings public string Seed1 { get; set; } public string Seed2 { get; set; } public string Seed3 { get; set; } + public string SeedCv { get; set; } public int? LastSelectedGame { get; set; } public string GamePath1 { get; set; } public string GamePath2 { get; set; } public string GamePath3 { get; set; } + public string GamePathCv { get; set; } public bool GameEnabled1 { get; set; } public bool GameEnabled2 { get; set; } public bool GameEnabled3 { get; set; } + public bool GameEnabledCv { get; set; } public string GameExecutable1 { get; set; } public string GameExecutable2 { get; set; } diff --git a/biorand/resources/recvx.png b/biorand/resources/recvx.png new file mode 100644 index 0000000000000000000000000000000000000000..fa952f32e98512107ce2029ea00f8052b05dace6 GIT binary patch literal 114108 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 xQ@2ByBwZ;hl|