diff --git a/Assets/Scripts/Data/QModel.cs b/Assets/Scripts/Data/QModel.cs index d3f7310..a5c07c9 100644 --- a/Assets/Scripts/Data/QModel.cs +++ b/Assets/Scripts/Data/QModel.cs @@ -177,7 +177,9 @@ public struct QAliasFrameDesc public QTriVertex bboxMin; public QTriVertex bboxMax; public int frame; - [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 16)] public string name; + [MarshalAs(UnmanagedType.ByValArray, SizeConst = 16)] public byte[] nameBytes; + + public string Name => QuakeTextMarshaler.GetString(nameBytes); } /// diff --git a/Assets/Scripts/QuakeTextMarshaler.cs b/Assets/Scripts/QuakeTextMarshaler.cs index c01f2a2..07598e6 100644 --- a/Assets/Scripts/QuakeTextMarshaler.cs +++ b/Assets/Scripts/QuakeTextMarshaler.cs @@ -61,6 +61,16 @@ return sb.ToString(); } + + public static string GetString(byte[] bytes) + { + var sb = new StringBuilder(bytes.Length); + for (int i = 0; i < bytes.Length; ++i) + { + sb.Append(CharacterTable[bytes[i]]); + } + return sb.ToString(); + } public void CleanUpManagedData(object managedObj) { diff --git a/Assets/Scripts/Support/AliasModel.cs b/Assets/Scripts/Support/AliasModel.cs index c35edac..46801bc 100644 --- a/Assets/Scripts/Support/AliasModel.cs +++ b/Assets/Scripts/Support/AliasModel.cs @@ -147,7 +147,7 @@ public class AliasModel for (int frameIdx = 0; frameIdx < header.numFrames; ++frameIdx) { // Individual sequences are identified by their prefix - string frameName = AnimationRegex.Match(header.frames[frameIdx].name ?? "").Value; + string frameName = AnimationRegex.Match(header.frames[frameIdx].Name ?? "").Value; if (animName == null) { animName = frameName;