Skip to content

Commit 326cecf

Browse files
committed
Impl more TotK tags
1 parent 7279edf commit 326cecf

File tree

6 files changed

+165
-2
lines changed

6 files changed

+165
-2
lines changed

src/Models/MessageStudio/BinaryText/ModuleSystemTagResolver.cs

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,39 @@ public class ModuleSystemTagResolver : ITagResolver
1616
public string? GetName(ushort group, ushort type)
1717
{
1818
return (group, type) switch {
19+
(0, 0) => RubyTag.NAME,
20+
(0, 2) => FontSizeTag.NAME,
1921
(0, 3) => FontColorTag.NAME,
22+
(0, 4) => PageBreakTag.NAME,
23+
(2, 1) => FlagTag.STRING_NAME,
24+
(2, 2) => FlagTag.INT_NAME,
25+
(2, 9) => FlagTag.FLOAT_NAME,
2026
_ => null
2127
};
2228
}
2329

2430
public (ushort, ushort)? GetGroupAndType(ReadOnlySpan<char> name)
2531
{
2632
return name switch {
33+
RubyTag.NAME => (0, 0),
34+
FontSizeTag.NAME => (0, 2),
2735
FontColorTag.NAME => (0, 3),
36+
PageBreakTag.NAME => (0, 4),
37+
FlagTag.STRING_NAME => (2, 1),
38+
FlagTag.INT_NAME => (2, 2),
39+
FlagTag.FLOAT_NAME => (2, 9),
2840
_ => null
2941
};
3042
}
3143

3244
public bool WriteBinaryUtf16(RevrsWriter writer, ushort group, ushort type, in TagParams @params)
3345
{
3446
return (group, type) switch {
47+
(0, 0) => RubyTag.WriteUtf16(writer, @params),
48+
(0, 2) => FontSizeTag.WriteUtf16(writer, @params),
3549
(0, 3) => FontColorTag.WriteUtf16(writer, @params),
50+
(0, 4) => PageBreakTag.WriteUtf16(writer),
51+
(2, 1) or (2, 2) or (2, 9) => FlagTag.WriteUtf16(writer, @params),
3652
_ => false
3753
};
3854
}
@@ -45,7 +61,11 @@ public bool WriteBinaryUtf8(RevrsWriter writer, ushort group, ushort type, in Ta
4561
public bool WriteText(StringBuilder sb, ushort group, ushort type, Span<byte> data)
4662
{
4763
return (group, type) switch {
64+
(0, 0) => RubyTag.WriteText(sb, data),
65+
(0, 2) => FontSizeTag.WriteText(sb, data),
4866
(0, 3) => FontColorTag.WriteText(sb, data),
67+
(0, 4) => true,
68+
(2, 1) or (2, 2) or (2, 9) => FlagTag.WriteText(sb, data),
4969
_ => false
5070
};
5171
}
Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
using MessageStudio.Formats.BinaryText.Components;
2+
using MessageStudio.Formats.BinaryText.Extensions;
3+
using Revrs;
4+
using System.Runtime.InteropServices;
5+
using System.Text;
6+
7+
namespace NxEditor.EpdPlugin.Models.MessageStudio.BinaryText.Tags;
8+
9+
public class FlagTag
10+
{
11+
public const string FLOAT_NAME = "IntFlag";
12+
public const string INT_NAME = "FloatFlag";
13+
public const string STRING_NAME = "StringFlag";
14+
15+
private const string NAME_PARAM = "Name";
16+
private const string UNKNOWN_PARAM_1 = "Unknown1";
17+
private const string UNKNOWN_PARAM_2 = "Unknown2";
18+
19+
public static bool WriteUtf16(RevrsWriter writer, in TagParams @params)
20+
{
21+
ReadOnlySpan<char> name = @params.Get<string>(NAME_PARAM);
22+
ReadOnlySpan<byte> nameRawBytes = MemoryMarshal.Cast<char, byte>(name);
23+
24+
writer.Write((ushort)(
25+
sizeof(ushort) + nameRawBytes.Length +
26+
sizeof(ushort) + sizeof(ushort)));
27+
28+
writer.Write((ushort)nameRawBytes.Length);
29+
writer.Write(nameRawBytes);
30+
31+
writer.Write(@params.Get<ushort>(UNKNOWN_PARAM_2));
32+
writer.Write(@params.Get<ushort>(UNKNOWN_PARAM_1));
33+
return true;
34+
}
35+
36+
public static bool WriteText(StringBuilder sb, Span<byte> data)
37+
{
38+
RevrsReader reader = RevrsReader.Native(data);
39+
40+
ushort rawNameLength = reader.Read<ushort>();
41+
42+
sb.OpenParam(NAME_PARAM);
43+
sb.Append(MemoryMarshal.Cast<byte, char>(reader.ReadSpan<byte>(rawNameLength)));
44+
sb.CloseParam();
45+
46+
sb.OpenParam(UNKNOWN_PARAM_1);
47+
sb.Append(reader.Read<ushort>());
48+
sb.CloseParam();
49+
50+
sb.OpenParam(UNKNOWN_PARAM_2);
51+
sb.Append(reader.Read<ushort>());
52+
sb.CloseParam();
53+
return true;
54+
}
55+
}

src/Models/MessageStudio/BinaryText/Tags/FontColorTag.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
using MessageStudio.Formats.BinaryText.Components;
2-
using Revrs.Extensions;
2+
using MessageStudio.Formats.BinaryText.Extensions;
33
using Revrs;
4+
using Revrs.Extensions;
45
using System.Text;
5-
using MessageStudio.Formats.BinaryText.Extensions;
66

77
namespace NxEditor.EpdPlugin.Models.MessageStudio.BinaryText.Tags;
88

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using MessageStudio.Formats.BinaryText.Components;
2+
using MessageStudio.Formats.BinaryText.Extensions;
3+
using Revrs;
4+
using Revrs.Extensions;
5+
using System.Text;
6+
7+
namespace NxEditor.EpdPlugin.Models.MessageStudio.BinaryText.Tags;
8+
9+
public class FontSizeTag
10+
{
11+
public const string NAME = "FontSize";
12+
13+
private const string FONT_SIZE_PARAM = "Scale";
14+
15+
public static bool WriteUtf16(RevrsWriter writer, in TagParams @params)
16+
{
17+
writer.Write<ushort>(sizeof(ushort));
18+
writer.Write(@params.Get<ushort>(FONT_SIZE_PARAM));
19+
return true;
20+
}
21+
22+
public static bool WriteText(StringBuilder sb, Span<byte> data)
23+
{
24+
sb.OpenParam(FONT_SIZE_PARAM);
25+
sb.Append(data.Read<ushort>());
26+
sb.CloseParam();
27+
return true;
28+
}
29+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using Revrs;
2+
3+
namespace NxEditor.EpdPlugin.Models.MessageStudio.BinaryText.Tags;
4+
5+
public class PageBreakTag
6+
{
7+
public const string NAME = "Break";
8+
9+
public static bool WriteUtf16(RevrsWriter writer)
10+
{
11+
writer.Write<ushort>(0);
12+
return true;
13+
}
14+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
using MessageStudio.Formats.BinaryText.Components;
2+
using MessageStudio.Formats.BinaryText.Extensions;
3+
using Revrs;
4+
using System.Runtime.InteropServices;
5+
using System.Text;
6+
7+
namespace NxEditor.EpdPlugin.Models.MessageStudio.BinaryText.Tags;
8+
9+
public class RubyTag
10+
{
11+
public const string NAME = "Ruby";
12+
13+
private const string CHAR_SPAN_PARAM = "SpanChars";
14+
private const string TEXT_PARAM = "Text";
15+
16+
public static bool WriteUtf16(RevrsWriter writer, in TagParams @params)
17+
{
18+
ReadOnlySpan<char> name = @params.Get<string>(TEXT_PARAM);
19+
ReadOnlySpan<byte> nameRawBytes = MemoryMarshal.Cast<char, byte>(name);
20+
21+
writer.Write((ushort)(sizeof(ushort) + sizeof(ushort) + nameRawBytes.Length));
22+
writer.Write(@params.Get<ushort>(CHAR_SPAN_PARAM));
23+
24+
writer.Write((ushort)nameRawBytes.Length);
25+
writer.Write(nameRawBytes);
26+
27+
return true;
28+
}
29+
30+
public static bool WriteText(StringBuilder sb, Span<byte> data)
31+
{
32+
RevrsReader reader = RevrsReader.Native(data);
33+
34+
sb.OpenParam(CHAR_SPAN_PARAM);
35+
sb.Append(reader.Read<ushort>());
36+
sb.CloseParam();
37+
38+
ushort rawNameLength = reader.Read<ushort>();
39+
sb.OpenParam(TEXT_PARAM);
40+
sb.Append(MemoryMarshal.Cast<byte, char>(reader.ReadSpan<byte>(rawNameLength)));
41+
sb.CloseParam();
42+
43+
return true;
44+
}
45+
}

0 commit comments

Comments
 (0)