Skip to content

Commit

Permalink
Enforce consistent code style
Browse files Browse the repository at this point in the history
  • Loading branch information
Sewer56 committed Aug 10, 2023
1 parent 8cb6839 commit ee603ff
Show file tree
Hide file tree
Showing 3 changed files with 63 additions and 44 deletions.
34 changes: 20 additions & 14 deletions p5rpc.modloader/Merging/Tbl/P3PTblMerger.cs
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
using CriFs.V2.Hook.Interfaces;
using FileEmulationFramework.Lib.Utilities;
using Persona.Merger.Cache;
using Persona.Merger.Patching.Tbl.FieldResolvers.P3P;
using Persona.Merger.Patching.Tbl;
using PAK.Stream.Emulator.Interfaces;
using PAK.Stream.Emulator.Interfaces.Structures.IO;
using Persona.Merger.Cache;
using Persona.Merger.Patching.Tbl;
using Persona.Merger.Patching.Tbl.FieldResolvers.P3P;
using static p5rpc.modloader.Merging.Tbl.TblMerger;

namespace p5rpc.modloader.Merging.Tbl;

internal class P3PTblMerger : IFileMerger
{
private readonly MergeUtils _utils;
private readonly ICriFsRedirectorApi _criFsApi;
private readonly Logger _logger;
private readonly MergedFileCache _mergedFileCache;
private readonly ICriFsRedirectorApi _criFsApi;
private readonly IPakEmulator _pakEmulator;
private readonly MergeUtils _utils;

internal P3PTblMerger(MergeUtils utils, Logger logger, MergedFileCache mergedFileCache, ICriFsRedirectorApi criFsApi, IPakEmulator pakEmulator)
internal P3PTblMerger(MergeUtils utils, Logger logger, MergedFileCache mergedFileCache,
ICriFsRedirectorApi criFsApi, IPakEmulator pakEmulator)
{
_utils = utils;
_logger = logger;
Expand All @@ -39,7 +40,7 @@ public void Merge(string[] cpks, ICriFsRedirectorApi.BindContext context)
PatchTbl(pakFiles, @"init_free.bin\battle\PERSONA.TBL", TblType.Persona, cpks),
PatchTbl(pakFiles, @"init_free.bin\battle\SKILL.TBL", TblType.Skill, cpks),
PatchTbl(pakFiles, @"init_free.bin\battle\UNIT.TBL", TblType.Unit, cpks),
PatchTbl(pakFiles, @"init_free.bin\init\itemtbl.bin", TblType.Item, cpks),
PatchTbl(pakFiles, @"init_free.bin\init\itemtbl.bin", TblType.Item, cpks)
};

Task.WhenAll(tasks.Select(x => x.AsTask())).Wait();
Expand All @@ -49,9 +50,11 @@ private async ValueTask PatchTbl(RouteGroupTuple[] pakFiles, string tblPath, Tbl
{
var route = tblPath.Substring(0, tblPath.LastIndexOf('\\'));
var tblName = Path.GetFileName(tblPath);
List<string> candidates = FindInPaks(pakFiles, route, tblName);
var candidates = FindInPaks(pakFiles, route, tblName);
if (type is TblType.Message)
{
candidates.AddRange(FindInPaks(pakFiles, @"init_free.bin\battle", "MSGTBL.bmd"));
}
else if (type is TblType.AiCalc)
{
candidates.AddRange(FindInPaks(pakFiles, @"init_free.bin\battle", "enemy.bf"));
Expand All @@ -65,7 +68,7 @@ private async ValueTask PatchTbl(RouteGroupTuple[] pakFiles, string tblPath, Tbl
var pathInCpk = '\\' + tblPath.Substring(0, dirIndex);
var pathInPak = tblPath.Substring(dirIndex + 1);

if (!_utils.TryFindFileInAnyCpk(pathInCpk, cpks, out var cpkPath, out var cpkEntry, out int fileIndex))
if (!_utils.TryFindFileInAnyCpk(pathInCpk, cpks, out var cpkPath, out var cpkEntry, out var fileIndex))
{
_logger.Warning("Unable to find TBL in any CPK {0}", tblPath);
return;
Expand All @@ -88,12 +91,13 @@ private async ValueTask PatchTbl(RouteGroupTuple[] pakFiles, string tblPath, Tbl
await Task.Run(async () =>
{
_logger.Info("Merging {0} with key {1}.", tblPath, cacheKey);
await using var cpkStream = new FileStream(cpkPath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
await using var cpkStream =
new FileStream(cpkPath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
using var reader = _criFsApi.GetCriFsLib().CreateCpkReader(cpkStream, false);
using var extractedPak = reader.ExtractFile(cpkEntry.Files[fileIndex].File);
var extractedTbl = _pakEmulator.GetEntry(new MemoryStream(extractedPak.RawArray), pathInPak);
if(extractedTbl == null)
if (extractedTbl == null)
{
_logger.Error($"Unable to extract {pathInPak} from {pathInCpk}");
return;
Expand Down Expand Up @@ -134,7 +138,7 @@ private static async Task<byte[]> PatchTable(TblType type, byte[] extractedTable

private async Task<byte[]> PatchMsgTable(byte[] extractedTable, List<string> candidates)
{
byte[][] bmds = new byte[5][];
var bmds = new byte[5][];
var bmdFile = candidates.FirstOrDefault(x => x.EndsWith("MSGTBL.bmd", StringComparison.OrdinalIgnoreCase));
if (bmdFile != null)
{
Expand All @@ -154,8 +158,10 @@ private async Task<byte[]> PatchMsgTable(byte[] extractedTable, List<string> can

private async Task<byte[]> PatchAiCalc(byte[] extractedTable, List<string> candidates)
{
byte[][] bfs = new byte[18][];
var bfFiles = candidates.Where(x => x.EndsWith("enemy.bf", StringComparison.OrdinalIgnoreCase) || x.EndsWith("friend.bf", StringComparison.OrdinalIgnoreCase));
var bfs = new byte[18][];
var bfFiles = candidates.Where(x =>
x.EndsWith("enemy.bf", StringComparison.OrdinalIgnoreCase) ||
x.EndsWith("friend.bf", StringComparison.OrdinalIgnoreCase));
foreach (var bfFile in bfFiles)
{
_logger.Info($"Embedding {bfFile} into AICALC.TBL");
Expand Down
43 changes: 25 additions & 18 deletions p5rpc.modloader/Merging/Tbl/P4GTblMerger.cs
Original file line number Diff line number Diff line change
@@ -1,23 +1,24 @@
using CriFs.V2.Hook.Interfaces;
using FileEmulationFramework.Lib.Utilities;
using Persona.Merger.Cache;
using Persona.Merger.Patching.Tbl.FieldResolvers.P4G;
using Persona.Merger.Patching.Tbl;
using PAK.Stream.Emulator.Interfaces;
using PAK.Stream.Emulator.Interfaces.Structures.IO;
using Persona.Merger.Cache;
using Persona.Merger.Patching.Tbl;
using Persona.Merger.Patching.Tbl.FieldResolvers.P4G;
using static p5rpc.modloader.Merging.Tbl.TblMerger;

namespace p5rpc.modloader.Merging.Tbl;

internal class P4GTblMerger : IFileMerger
{
private readonly MergeUtils _utils;
private readonly ICriFsRedirectorApi _criFsApi;
private readonly Logger _logger;
private readonly MergedFileCache _mergedFileCache;
private readonly ICriFsRedirectorApi _criFsApi;
private readonly IPakEmulator _pakEmulator;
private readonly MergeUtils _utils;

internal P4GTblMerger(MergeUtils utils, Logger logger, MergedFileCache mergedFileCache, ICriFsRedirectorApi criFsApi, IPakEmulator pakEmulator)
internal P4GTblMerger(MergeUtils utils, Logger logger, MergedFileCache mergedFileCache,
ICriFsRedirectorApi criFsApi, IPakEmulator pakEmulator)
{
_utils = utils;
_logger = logger;
Expand All @@ -39,7 +40,7 @@ public void Merge(string[] cpks, ICriFsRedirectorApi.BindContext context)
PatchTbl(pakFiles, @"init_free.bin\battle\PERSONA.TBL", TblType.Persona, cpks),
PatchTbl(pakFiles, @"init_free.bin\battle\SKILL.TBL", TblType.Skill, cpks),
PatchTbl(pakFiles, @"init_free.bin\battle\UNIT.TBL", TblType.Unit, cpks),
PatchTbl(pakFiles, @"init_free.bin\init\itemtbl.bin", TblType.Item, cpks),
PatchTbl(pakFiles, @"init_free.bin\init\itemtbl.bin", TblType.Item, cpks)
};

Task.WhenAll(tasks.Select(x => x.AsTask())).Wait();
Expand All @@ -49,22 +50,25 @@ private async ValueTask PatchTbl(RouteGroupTuple[] pakFiles, string tblPath, Tbl
{
var route = tblPath.Substring(0, tblPath.LastIndexOf('\\'));
var tblName = Path.GetFileName(tblPath);
List<string> candidates = FindInPaks(pakFiles, route, tblName);
var candidates = FindInPaks(pakFiles, route, tblName);
if (type is TblType.Message)
{
candidates.AddRange(FindInPaks(pakFiles, @"init_free.bin\battle", "MSGTBL.bmd"));
else if(type is TblType.AiCalc)
}
else if (type is TblType.AiCalc)
{
candidates.AddRange(FindInPaks(pakFiles, @"init_free.bin\battle", "enemy.bf"));
candidates.AddRange(FindInPaks(pakFiles, @"init_free.bin\battle", "friend.bf"));
}

if (candidates.Count == 0) return;

var extIndex = tblPath.IndexOf('.');
var dirIndex = tblPath.IndexOf('\\', extIndex);
var pathInCpk = '\\' + tblPath.Substring(0, dirIndex);
var pathInPak = tblPath.Substring(dirIndex + 1);

if (!_utils.TryFindFileInAnyCpk(pathInCpk, cpks, out var cpkPath, out var cpkEntry, out int fileIndex))
if (!_utils.TryFindFileInAnyCpk(pathInCpk, cpks, out var cpkPath, out var cpkEntry, out var fileIndex))
{
_logger.Warning("Unable to find TBL in any CPK {0}", tblPath);
return;
Expand All @@ -87,20 +91,21 @@ private async ValueTask PatchTbl(RouteGroupTuple[] pakFiles, string tblPath, Tbl
await Task.Run(async () =>
{
_logger.Info("Merging {0} with key {1}.", tblPath, cacheKey);
await using var cpkStream = new FileStream(cpkPath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
await using var cpkStream =
new FileStream(cpkPath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
using var reader = _criFsApi.GetCriFsLib().CreateCpkReader(cpkStream, false);
using var extractedPak = reader.ExtractFile(cpkEntry.Files[fileIndex].File);
var extractedTbl = _pakEmulator.GetEntry(new MemoryStream(extractedPak.RawArray), pathInPak);
if(extractedTbl == null)
if (extractedTbl == null)
{
_logger.Error($"Unable to extract {pathInPak} from {pathInCpk}");
return;
}
// Then we merge
byte[] patched;
switch(type)
switch (type)
{
case TblType.Message:
patched = await PatchMsgTable(extractedTbl.Value.ToArray(), candidates);
Expand Down Expand Up @@ -133,9 +138,9 @@ private async Task<byte[]> PatchTable(TblType type, byte[] extractedTable, List<

private async Task<byte[]> PatchMsgTable(byte[] extractedTable, List<string> candidates)
{
byte[][] bmds = new byte[5][];
var bmds = new byte[5][];
var bmdFile = candidates.FirstOrDefault(x => x.EndsWith("MSGTBL.bmd", StringComparison.OrdinalIgnoreCase));
if(bmdFile != null)
if (bmdFile != null)
{
_logger.Info($"Embedding {bmdFile} into MSG.TBL");
bmds[4] = await File.ReadAllBytesAsync(bmdFile);
Expand All @@ -153,9 +158,11 @@ private async Task<byte[]> PatchMsgTable(byte[] extractedTable, List<string> can

private async Task<byte[]> PatchAiCalc(byte[] extractedTable, List<string> candidates)
{
byte[][] bfs = new byte[11][];
var bfFiles = candidates.Where(x => x.EndsWith("enemy.bf", StringComparison.OrdinalIgnoreCase) || x.EndsWith("friend.bf", StringComparison.OrdinalIgnoreCase));
foreach(var bfFile in bfFiles)
var bfs = new byte[11][];
var bfFiles = candidates.Where(x =>
x.EndsWith("enemy.bf", StringComparison.OrdinalIgnoreCase) ||
x.EndsWith("friend.bf", StringComparison.OrdinalIgnoreCase));
foreach (var bfFile in bfFiles)
{
_logger.Info($"Embedding {bfFile} into AICALC.TBL");
var index = bfFile.EndsWith("friend.bf", StringComparison.OrdinalIgnoreCase) ? 9 : 10;
Expand Down
30 changes: 18 additions & 12 deletions p5rpc.modloader/Merging/Tbl/P5RTblMerger.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,21 +2,22 @@
using CriFsV2Lib.Definitions.Utilities;
using FileEmulationFramework.Lib.Utilities;
using Persona.Merger.Cache;
using Persona.Merger.Patching.Tbl.FieldResolvers.P5R.Name;
using Persona.Merger.Patching.Tbl.FieldResolvers.P5R;
using Persona.Merger.Patching.Tbl;
using Persona.Merger.Patching.Tbl.FieldResolvers.P5R;
using Persona.Merger.Patching.Tbl.FieldResolvers.P5R.Name;
using static p5rpc.modloader.Merging.MergeUtils;

namespace p5rpc.modloader.Merging.Tbl;

internal class P5RTblMerger : IFileMerger
{
private readonly MergeUtils _utils;
private readonly ICriFsRedirectorApi _criFsApi;
private readonly Logger _logger;
private readonly MergedFileCache _mergedFileCache;
private readonly ICriFsRedirectorApi _criFsApi;
private readonly MergeUtils _utils;

internal P5RTblMerger(MergeUtils utils, Logger logger, MergedFileCache mergedFileCache, ICriFsRedirectorApi criFsApi)
internal P5RTblMerger(MergeUtils utils, Logger logger, MergedFileCache mergedFileCache,
ICriFsRedirectorApi criFsApi)
{
_utils = utils;
_logger = logger;
Expand Down Expand Up @@ -46,13 +47,14 @@ public void Merge(string[] cpks, ICriFsRedirectorApi.BindContext context)
Task.WhenAll(tasks.Select(x => x.AsTask())).Wait();
}

private async ValueTask PatchTbl(Dictionary<string, List<ICriFsRedirectorApi.BindFileInfo>> pathToFileMap, string tblPath, TblType type, string[] cpks)
private async ValueTask PatchTbl(Dictionary<string, List<ICriFsRedirectorApi.BindFileInfo>> pathToFileMap,
string tblPath, TblType type, string[] cpks)
{
if (!pathToFileMap.TryGetValue(tblPath, out var candidates))
return;

var pathInCpk = RemoveR2Prefix(tblPath);
if (!_utils.TryFindFileInAnyCpk(pathInCpk, cpks, out var cpkPath, out var cpkEntry, out int fileIndex))
if (!_utils.TryFindFileInAnyCpk(pathInCpk, cpks, out var cpkPath, out var cpkEntry, out var fileIndex))
{
_logger.Warning("Unable to find TBL in any CPK {0}", pathInCpk);
return;
Expand All @@ -72,7 +74,8 @@ private async ValueTask PatchTbl(Dictionary<string, List<ICriFsRedirectorApi.Bin
await Task.Run(async () =>
{
_logger.Info("Merging {0} with key {1}.", tblPath, cacheKey);
await using var cpkStream = new FileStream(cpkPath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
await using var cpkStream =
new FileStream(cpkPath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite);
using var reader = _criFsApi.GetCriFsLib().CreateCpkReader(cpkStream, false);
using var extractedTable = reader.ExtractFile(cpkEntry.Files[fileIndex].File);
Expand All @@ -85,23 +88,26 @@ await Task.Run(async () =>
// Then we store in cache.
var item = await _mergedFileCache.AddAsync(cacheKey, sources, patched);
_utils.ReplaceFileInBinderInput(pathToFileMap, tblPath, Path.Combine(_mergedFileCache.CacheFolder, item.RelativePath));
_utils.ReplaceFileInBinderInput(pathToFileMap, tblPath,
Path.Combine(_mergedFileCache.CacheFolder, item.RelativePath));
_logger.Info("Merge {0} Complete. Cached to {1}.", tblPath, item.RelativePath);
});
}

private async Task<byte[]> PatchNameTable(ArrayRental extractedTable, List<ICriFsRedirectorApi.BindFileInfo> candidates)
private async Task<byte[]> PatchNameTable(ArrayRental extractedTable,
List<ICriFsRedirectorApi.BindFileInfo> candidates)
{
var table = ParsedNameTable.ParseTable(extractedTable.RawArray);
var otherTables = new ParsedNameTable[candidates.Count];
for (int x = 0; x < otherTables.Length; x++)
for (var x = 0; x < otherTables.Length; x++)
otherTables[x] = ParsedNameTable.ParseTable(await File.ReadAllBytesAsync(candidates[x].FullPath));

var diff = NameTableMerger.CreateDiffs(table, otherTables);
return NameTableMerger.Merge(table, diff).ToArray();
}

private static async Task<byte[]> PatchTable(TblType type, ArrayRental extractedTable, List<ICriFsRedirectorApi.BindFileInfo> candidates)
private static async Task<byte[]> PatchTable(TblType type, ArrayRental extractedTable,
List<ICriFsRedirectorApi.BindFileInfo> candidates)
{
var patcher = new P5RTblPatcher(extractedTable.Span.ToArray(), type);
var patches = new List<TblPatch>(candidates.Count);
Expand Down

0 comments on commit ee603ff

Please sign in to comment.