Skip to content

Commit

Permalink
fix: fix dmc5 read, fix ArrayItemNew
Browse files Browse the repository at this point in the history
  • Loading branch information
czastack committed Dec 9, 2023
1 parent cb2fbaf commit ef6efed
Show file tree
Hide file tree
Showing 11 changed files with 109 additions and 93 deletions.
20 changes: 0 additions & 20 deletions ChangeLog.txt

This file was deleted.

2 changes: 1 addition & 1 deletion RszTool.App/MainWindow.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,7 @@
</Menu>
<DockPanel Grid.Row="1" Margin="5">
<TextBlock Text="Game version" DockPanel.Dock="Left" Margin="0 0 5 0" VerticalAlignment="Center" />
<ComboBox ItemsSource="{x:Static rsztool:RszDefines.GameNames}" SelectedValue="{Binding GameName}" />
<ComboBox ItemsSource="{x:Static rsztool:RszDefines.GameNames}" SelectedValue="{Binding SaveData.GameName}" />
</DockPanel>
<!-- <dockablz:Layout Grid.Row="2" Margin="8">
<dockablz:Layout.BranchTemplate>
Expand Down
4 changes: 2 additions & 2 deletions RszTool.App/RszTool.App.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@
<UseWPF>true</UseWPF>
<NoWarn>$(NoWarn);CS0067</NoWarn>
<ApplicationManifest>app.manifest</ApplicationManifest>
<AssemblyVersion>0.1.6.0</AssemblyVersion>
<FileVersion>0.1.6.0</FileVersion>
<AssemblyVersion>0.1.7.0</AssemblyVersion>
<FileVersion>0.1.7.0</FileVersion>
</PropertyGroup>

<ItemGroup>
Expand Down
9 changes: 6 additions & 3 deletions RszTool.App/ViewModels/MainWindowModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,22 @@
using System.Diagnostics;
using System.IO;
using System.Text.Json;
using System.Text.Json.Serialization;
using System.Windows;
using System.Windows.Controls;
using Dragablz;
using Microsoft.Win32;
using RszTool.App.Common;
using RszTool.App.Resources;
using RszTool.App.Views;
using RszTool.Common;

namespace RszTool.App.ViewModels
{
public class MainWindowModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler? PropertyChanged;
public ObservableCollection<HeaderedItemViewModel> Items { get; } = new();
public GameName GameName { get; set; } = GameName.re4;
public HeaderedItemViewModel? SelectedTabItem { get; set; }

private BaseRszFileViewModel? CurrentFile =>
Expand Down Expand Up @@ -71,7 +72,7 @@ public void OpenFile(string path)
}
}

string rszJsonFile = $"rsz{GameName}.json";
string rszJsonFile = $"rsz{SaveData.GameName}.json";
if (!File.Exists(rszJsonFile))
{
MessageBoxUtils.Warning(string.Format(Texts.RszJsonNotFound, rszJsonFile));
Expand All @@ -80,7 +81,7 @@ public void OpenFile(string path)

BaseRszFileViewModel? fileViewModel = null;
ContentControl? content = null;
RszFileOption option = new(GameName);
RszFileOption option = new(SaveData.GameName);
switch (RszUtils.GetFileType(path))
{
case FileType.user:
Expand Down Expand Up @@ -287,6 +288,8 @@ public void UpdateHeader()

public class SaveData
{
[JsonConverter(typeof(EnumJsonConverter<GameName>))]
public GameName GameName { get; set; }
public ObservableCollection<string> RecentFiles { get; set; } = new();
}
}
19 changes: 19 additions & 0 deletions RszTool/Enums.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@ public enum RszFieldType : uint
C16,
S8,
U8,
UByte = U8,
S16,
U16,
S32,
Expand Down Expand Up @@ -127,12 +128,30 @@ public enum GameName
re4,
re8,
re7,
re7rt,
dmc5,
mhrise,
sf6,
}


public enum GameVersion
{
unknown,
re7 = 1,
re2 = 2,
dmc5 = re2,
re3 = 3,
re8 = 4,
mhrise = 5,
re2rt = 6,
re3rt = re2rt,
re7rt = re2rt,
re4 = 7,
sf6 = 8,
}


public static class RszDefines
{
public static GameName[] GameNames { get; } = (GameName[])Enum.GetValues(typeof(GameName));
Expand Down
65 changes: 34 additions & 31 deletions RszTool/RszFile/MdfFile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -40,11 +40,11 @@ public class MatHeader : BaseModel
// tdbVersion >= 71, SF6+
public long texIDsOffset;

private readonly int tdbVersion;
private GameVersion Version { get; }

public MatHeader(int tdbVersion)
public MatHeader(GameVersion version)
{
this.tdbVersion = tdbVersion;
Version = version;
}

protected override bool DoRead(FileHandler handler)
Expand All @@ -53,26 +53,26 @@ protected override bool DoRead(FileHandler handler)
handler.Read(ref matNameOffset);
matName = handler.ReadWString(matNameOffset);
handler.Read(ref matNameHash);
if (tdbVersion == 49) handler.Read(ref uknRE7);
if (Version == GameVersion.re7) handler.Read(ref uknRE7);
handler.Read(ref paramsSize);
handler.Read(ref paramCount);
handler.Read(ref texCount);
if (tdbVersion >= 69) handler.Read(ref skip);
if (Version >= GameVersion.re8) handler.Read(ref skip);
handler.Read(ref shaderType);
if (tdbVersion >= 71) handler.Read(ref ukn);
if (Version >= GameVersion.re4) handler.Read(ref ukn);
handler.Read(ref alphaFlags);
if (tdbVersion >= 71) handler.Read(ref ukn1);
if (Version >= GameVersion.re4) handler.Read(ref ukn1);
handler.Read(ref paramHeaderOffset);
handler.Read(ref texHeaderOffset);
if (tdbVersion >= 69)
if (Version >= GameVersion.re8)
{
handler.Read(ref firstMaterialNameOffset);
// firstMaterialName = handler.ReadWString(firstMaterialNameOffset);
}
handler.Read(ref paramsOffset);
handler.Read(ref mmtrPathOffset);
mmtrPath = handler.ReadWString(mmtrPathOffset);
if (tdbVersion >= 71) handler.Read(ref texIDsOffset);
if (Version >= GameVersion.re4) handler.Read(ref texIDsOffset);
return true;
}

Expand All @@ -85,26 +85,26 @@ protected override bool DoWrite(FileHandler handler)
}
handler.Write(ref matNameOffset);
handler.Write(ref matNameHash);
if (tdbVersion == 49) handler.Write(ref uknRE7);
if (Version == GameVersion.re7) handler.Write(ref uknRE7);
handler.Write(ref paramsSize);
handler.Write(ref paramCount);
handler.Write(ref texCount);
if (tdbVersion >= 69) handler.Write(ref skip);
if (Version >= GameVersion.re8) handler.Write(ref skip);
handler.Write(ref shaderType);
if (tdbVersion >= 71) handler.Write(ref ukn);
if (Version >= GameVersion.re4) handler.Write(ref ukn);
handler.Write(ref alphaFlags);
if (tdbVersion >= 71) handler.Write(ref ukn1);
if (Version >= GameVersion.re4) handler.Write(ref ukn1);
handler.Write(ref paramHeaderOffset);
handler.Write(ref texHeaderOffset);
if (tdbVersion >= 69)
if (Version >= GameVersion.re8)
{
// handler.AddStringToWrite(firstMaterialName);
handler.Write(ref firstMaterialNameOffset);
}
handler.Write(ref paramsOffset);
handler.StringTableAdd(mmtrPath);
handler.Write(ref mmtrPathOffset);
if (tdbVersion >= 71) handler.Write(ref texIDsOffset);
if (Version >= GameVersion.re4) handler.Write(ref texIDsOffset);
return true;
}
}
Expand All @@ -118,11 +118,11 @@ public class TexHeader : BaseModel
public long texPathOffset;
public string? texPath;

private readonly int tdbVersion;
private GameVersion Version { get; }

public TexHeader(int tdbVersion)
public TexHeader(GameVersion version)
{
this.tdbVersion = tdbVersion;
Version = version;
}

protected override bool DoRead(FileHandler handler)
Expand All @@ -134,7 +134,7 @@ protected override bool DoRead(FileHandler handler)
texType = handler.ReadWString(texTypeOffset);
texPath = handler.ReadWString(texPathOffset);
// RE3R+
if (tdbVersion >= 68) handler.Skip(8);
if (Version >= GameVersion.re3) handler.Skip(8);
return true;
}

Expand All @@ -151,7 +151,7 @@ protected override bool DoWrite(FileHandler handler)
handler.Write(ref asciiHash);
handler.StringTableAdd(texPath);
handler.Write(ref texPathOffset);
if (tdbVersion >= 68) handler.Skip(8);
if (Version >= GameVersion.re3) handler.Skip(8);
return true;
}
}
Expand All @@ -171,11 +171,11 @@ public class ParamHeader : BaseModel
public int gapSize;
public Vector4 parameter;

private readonly int tdbVersion;
private GameVersion Version { get; }

public ParamHeader(int tdbVersion)
public ParamHeader(GameVersion version)
{
this.tdbVersion = tdbVersion;
Version = version;
}

protected override bool DoRead(FileHandler handler)
Expand All @@ -184,7 +184,7 @@ protected override bool DoRead(FileHandler handler)
handler.Read(ref hash);
handler.Read(ref asciiHash);
// RE3R+
if (tdbVersion >= 68)
if (Version >= GameVersion.re3)
{
handler.Read(ref paramRelOffset);
handler.Read(ref componentCount);
Expand All @@ -209,7 +209,7 @@ protected override bool DoWrite(FileHandler handler)
handler.Write(ref paramNameOffset);
handler.Write(ref hash);
handler.Write(ref asciiHash);
if (tdbVersion >= 68)
if (Version >= GameVersion.re3)
{
handler.Write(ref paramRelOffset);
handler.Write(ref componentCount);
Expand Down Expand Up @@ -249,11 +249,14 @@ public MdfFile(RszFileOption option, FileHandler fileHandler) : base(option, fil
{
return Option.GameName switch
{
GameName.re2 => Option.TdbVersion == 66 ? ".10" : ".21",
GameName.re3 => Option.TdbVersion == 68 ? ".13" : ".21",
GameName.re2 => ".10",
GameName.re2rt => ".21",
GameName.re3 => ".13",
GameName.re3rt => ".21",
GameName.re4 => ".32",
GameName.re8 => ".19",
GameName.re7 => Option.TdbVersion == 49 ? ".6" : ".17",
GameName.re7 => ".6",
GameName.re7rt => ".21",
GameName.dmc5 =>".10",
GameName.mhrise => ".23",
GameName.sf6 => ".31",
Expand All @@ -275,7 +278,7 @@ protected override bool DoRead()
handler.Align(16);
for (int i = 0; i < Header.Data.matCount; i++)
{
MatData matData = new(new(Option.TdbVersion));
MatData matData = new(new(Option.Version));
matData.Header.Read(handler);
MatDatas.Add(matData);
}
Expand All @@ -285,7 +288,7 @@ protected override bool DoRead()
{
for (int i = 0; i < matData.Header.texCount; i++)
{
TexHeader texHeader = new(Option.TdbVersion);
TexHeader texHeader = new(Option.Version);
texHeader.Read(handler);
matData.TexHeaders.Add(texHeader);
}
Expand All @@ -296,7 +299,7 @@ protected override bool DoRead()
{
for (int i = 0; i < matData.Header.paramCount; i++)
{
ParamHeader paramHeader = new(Option.TdbVersion);
ParamHeader paramHeader = new(Option.Version);
paramHeader.Read(handler);
paramHeader.paramAbsOffset = matData.Header.paramsOffset + paramHeader.paramRelOffset;
if (i == 0)
Expand Down
Loading

0 comments on commit ef6efed

Please sign in to comment.