Skip to content

Commit ca6e226

Browse files
committed
Started working on a better class for 3DS Themes
1 parent 505f160 commit ca6e226

File tree

7 files changed

+658
-19
lines changed

7 files changed

+658
-19
lines changed

3DS/3DS.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,7 @@
102102
<Compile Include="SMDH.cs" />
103103
<Compile Include="ThemeFile.cs" />
104104
<Compile Include="ThemeIconFile.cs" />
105+
<Compile Include="ThemeNew.cs" />
105106
<Compile Include="UI\CFNTViewer.cs">
106107
<SubType>Form</SubType>
107108
</Compile>

3DS/SARC.cs

Lines changed: 11 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@
88
using LibEveryFileExplorer.Files.SimpleFileSystem;
99
using _3DS.UI;
1010
using LibEveryFileExplorer.IO;
11+
using LibEveryFileExplorer.IO.Serialization;
1112

1213
namespace _3DS
1314
{
1415
public class SARC : FileFormat<SARC.SARCIdentifier>, IViewable, IWriteable
1516
{
1617
public SARC(byte[] Data)
1718
{
18-
EndianBinaryReader er = new EndianBinaryReader(new MemoryStream(Data), Endianness.LittleEndian);
19+
EndianBinaryReaderEx er = new EndianBinaryReaderEx(new MemoryStream(Data), Endianness.LittleEndian);
1920
try
2021
{
2122
Header = new SARCHeader(er);
@@ -68,15 +69,9 @@ public SARCHeader()
6869
FileDataOffset = 0;
6970
Unknown = 0x0100;
7071
}
71-
public SARCHeader(EndianBinaryReader er)
72+
public SARCHeader(EndianBinaryReaderEx er)
7273
{
73-
Signature = er.ReadString(Encoding.ASCII, 4);
74-
if (Signature != "SARC") throw new SignatureNotCorrectException(Signature, "SARC", er.BaseStream.Position - 4);
75-
HeaderSize = er.ReadUInt16();
76-
Endianness = er.ReadUInt16();
77-
FileSize = er.ReadUInt32();
78-
FileDataOffset = er.ReadUInt32();
79-
Unknown = er.ReadUInt32();
74+
er.ReadObject(this);
8075
}
8176
public void Write(EndianBinaryWriter er)
8277
{
@@ -87,9 +82,11 @@ public void Write(EndianBinaryWriter er)
8782
er.Write(FileDataOffset);
8883
er.Write(Unknown);
8984
}
90-
85+
[BinaryStringSignature("SARC")]
86+
[BinaryFixedSize(4)]
9187
public String Signature;
9288
public UInt16 HeaderSize;
89+
[BinaryBOM(0xFEFF)]
9390
public UInt16 Endianness;
9491
public UInt32 FileSize;
9592
public UInt32 FileDataOffset;
@@ -107,7 +104,7 @@ public SFAT()
107104
HashMultiplier = 0x65;
108105
Entries = new List<SFATEntry>();
109106
}
110-
public SFAT(EndianBinaryReader er)
107+
public SFAT(EndianBinaryReaderEx er)
111108
{
112109
Signature = er.ReadString(Encoding.ASCII, 4);
113110
if (Signature != "SFAT") throw new SignatureNotCorrectException(Signature, "SFAT", er.BaseStream.Position - 4);
@@ -138,12 +135,9 @@ public void Write(EndianBinaryWriter er)
138135
public class SFATEntry
139136
{
140137
public SFATEntry() { }
141-
public SFATEntry(EndianBinaryReader er)
138+
public SFATEntry(EndianBinaryReaderEx er)
142139
{
143-
FileNameHash = er.ReadUInt32();
144-
FileNameOffset = er.ReadUInt32();
145-
FileDataStart = er.ReadUInt32();
146-
FileDataEnd = er.ReadUInt32();
140+
er.ReadObject(this);
147141
}
148142
public void Write(EndianBinaryWriter er)
149143
{
@@ -169,7 +163,7 @@ public SFNT()
169163
HeaderSize = 8;
170164
Unknown1 = 0;
171165
}
172-
public SFNT(EndianBinaryReader er)
166+
public SFNT(EndianBinaryReaderEx er)
173167
{
174168
Signature = er.ReadString(Encoding.ASCII, 4);
175169
if (Signature != "SFNT") throw new SignatureNotCorrectException(Signature, "SFNT", er.BaseStream.Position - 4);

0 commit comments

Comments
 (0)