Skip to content

Commit 7b784da

Browse files
committed
Added more version data
1 parent 4dcfa67 commit 7b784da

1 file changed

Lines changed: 92 additions & 9 deletions

File tree

src/main.cpp

Lines changed: 92 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,18 @@ struct Entry
4848
};
4949

5050
// data
51+
/*
52+
* name para skel
53+
* SLUS_010.32 0x133B44 0x12CEB4 0x11ce60
54+
* SLPS_017.97 0x13d844 0x13b344 0x123780 (1.1)
55+
* SLPS_017.97 0x13CE24 0x13A924 0x122E68 (1.0)
56+
* SLPM_804.02 0x13e874 0x13c32c 0x124728
57+
* SLES_029.14 0x13AC0C 0x138B5C 0x122DD4
58+
* SLES_034.34 0x13AE00 0x138D50 0x122DE4
59+
* SLES_034.35 0x13ADD8 0x138D28 0x122D6C
60+
* SLES_034.36 0x13B7E4 0x139734 0x122DA0
61+
* SLES_034.37 0x13B314 0x139264 0x122DA0
62+
*/
5163
constexpr uint32_t PSEXE_OFFSET(uint32_t offset) { return offset - 0x90000; }
5264

5365
constexpr VersionData SLUS_DATA = {
@@ -58,14 +70,72 @@ constexpr VersionData SLUS_DATA = {
5870
.skelOffset = PSEXE_OFFSET(0x11ce60),
5971
};
6072

61-
constexpr VersionData SLPS_DATA = {
73+
constexpr VersionData SLPS_11_DATA = {
6274
.psexePath = "SLPS_017.97",
6375
.alltimPath = "CHDAT/ALLTIM.TIM",
6476
.nameOffset = PSEXE_OFFSET(0x13d844),
6577
.paraOffset = PSEXE_OFFSET(0x13b344),
6678
.skelOffset = PSEXE_OFFSET(0x123780),
6779
};
6880

81+
constexpr VersionData SLPS_10_DATA = {
82+
.psexePath = "SLPS_017.97",
83+
.alltimPath = "CHDAT/ALLTIM.TIM",
84+
.nameOffset = PSEXE_OFFSET(0x13ce24),
85+
.paraOffset = PSEXE_OFFSET(0x13a924),
86+
.skelOffset = PSEXE_OFFSET(0x122e68),
87+
};
88+
89+
constexpr VersionData SLPM_DATA = {
90+
.psexePath = "SLPM_804.02",
91+
.alltimPath = "CHDAT/ALLTIM.TIM",
92+
.nameOffset = PSEXE_OFFSET(0x13e874),
93+
.paraOffset = PSEXE_OFFSET(0x13c32c),
94+
.skelOffset = PSEXE_OFFSET(0x124728),
95+
};
96+
97+
constexpr VersionData SLES02914_DATA = {
98+
.psexePath = "SLES_029.14",
99+
.alltimPath = "CHDAT/ALLTIM.TIM",
100+
.nameOffset = PSEXE_OFFSET(0x13ac0c),
101+
.paraOffset = PSEXE_OFFSET(0x138b5c),
102+
.skelOffset = PSEXE_OFFSET(0x122dd4),
103+
};
104+
105+
constexpr VersionData SLES03434_DATA = {
106+
.psexePath = "SLES_034.34",
107+
.alltimPath = "CHDAT/ALLTIM.TIM",
108+
.nameOffset = PSEXE_OFFSET(0x13ae00),
109+
.paraOffset = PSEXE_OFFSET(0x138d50),
110+
.skelOffset = PSEXE_OFFSET(0x122de4),
111+
};
112+
113+
constexpr VersionData SLES03435_DATA = {
114+
.psexePath = "SLES_034.35",
115+
.alltimPath = "CHDAT/ALLTIM.TIM",
116+
.nameOffset = PSEXE_OFFSET(0x13add8),
117+
.paraOffset = PSEXE_OFFSET(0x138d28),
118+
.skelOffset = PSEXE_OFFSET(0x122d6c),
119+
};
120+
121+
constexpr VersionData SLES03436_DATA = {
122+
.psexePath = "SLES_034.36",
123+
.alltimPath = "CHDAT/ALLTIM.TIM",
124+
.nameOffset = PSEXE_OFFSET(0x13b7e4),
125+
.paraOffset = PSEXE_OFFSET(0x139734),
126+
.skelOffset = PSEXE_OFFSET(0x122da0),
127+
};
128+
129+
constexpr VersionData SLES03437_DATA = {
130+
.psexePath = "SLES_034.37",
131+
.alltimPath = "CHDAT/ALLTIM.TIM",
132+
.nameOffset = PSEXE_OFFSET(0x13b314),
133+
.paraOffset = PSEXE_OFFSET(0x139264),
134+
.skelOffset = PSEXE_OFFSET(0x122da0),
135+
};
136+
137+
constexpr VersionData VERSION_DATA[] = { SLUS_DATA, SLPS_11_DATA, SLPS_10_DATA, SLPM_DATA, SLES02914_DATA,
138+
SLES03434_DATA, SLES03435_DATA, SLES03436_DATA, SLES03437_DATA };
69139
// functions
70140

71141
template<typename T> std::vector<T> readFileAsVector(std::filesystem::path path)
@@ -78,19 +148,32 @@ template<typename T> std::vector<T> readFileAsVector(std::filesystem::path path)
78148
return data;
79149
}
80150

151+
VersionData getVersion(std::filesystem::path parentPath)
152+
{
153+
VersionData version;
154+
155+
if (std::filesystem::exists(parentPath / SLPS_10_DATA.psexePath))
156+
{
157+
auto size = std::filesystem::file_size(parentPath / SLPS_10_DATA.psexePath);
158+
159+
if (size == 0xAF000)
160+
return SLPS_11_DATA;
161+
else if (size == 0xAE000)
162+
return SLPS_10_DATA;
163+
}
164+
165+
for (VersionData v : VERSION_DATA)
166+
if (std::filesystem::exists(parentPath / v.psexePath)) return v;
167+
168+
return SLUS_DATA;
169+
}
170+
81171
std::vector<Entry> loadDigimonEntries(std::filesystem::path parentPath)
82172
{
83173
using DigimonFileName = char[8];
84174

85-
VersionData version;
86-
if (std::filesystem::exists(parentPath / SLUS_DATA.psexePath))
87-
version = SLUS_DATA;
88-
else if (std::filesystem::exists(parentPath / SLPS_DATA.psexePath))
89-
version = SLPS_DATA;
90-
else
91-
return {};
92-
93175
std::vector<Entry> digimonEntries;
176+
VersionData version = getVersion(parentPath);
94177
std::vector<uint8_t> data = readFileAsVector<uint8_t>(parentPath / version.psexePath);
95178
std::vector<MMDTexture> textureData = readFileAsVector<MMDTexture>(parentPath / version.alltimPath);
96179
DigimonFileName* names = reinterpret_cast<DigimonFileName*>(data.data() + version.nameOffset);

0 commit comments

Comments
 (0)