Skip to content

Commit 44a4390

Browse files
committed
Fixed PAL version export
1 parent 0d1ff9e commit 44a4390

2 files changed

Lines changed: 28 additions & 5 deletions

File tree

src/GLTF.cpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -380,8 +380,6 @@ void GLTFExporter::buildAnimations()
380380
tinygltf::Animation anim;
381381
int nodeId = 0;
382382

383-
std::cout << i++ << std::endl;
384-
385383
for (auto a : data.getData())
386384
{
387385
std::vector<float> posTime;

src/main.cpp

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,22 @@ struct DigimonPara
2222
uint8_t padding;
2323
};
2424

25+
struct DigimonParaPAL
26+
{
27+
int32_t boneCount;
28+
int16_t radius;
29+
int16_t height;
30+
uint8_t type;
31+
uint8_t level;
32+
uint8_t special[3];
33+
uint8_t dropItem;
34+
uint8_t dropChance;
35+
int8_t moves[16];
36+
uint8_t padding;
37+
};
38+
2539
static_assert(sizeof(DigimonPara) == 52);
40+
static_assert(sizeof(DigimonParaPAL) == 32);
2641

2742
struct VersionData
2843
{
@@ -31,6 +46,7 @@ struct VersionData
3146
uint32_t nameOffset;
3247
uint32_t paraOffset;
3348
uint32_t skelOffset;
49+
bool isPAL;
3450
};
3551

3652
struct MMDTexture
@@ -41,7 +57,6 @@ struct MMDTexture
4157
struct Entry
4258
{
4359
std::string filename;
44-
DigimonPara para;
4560
std::vector<NodeEntry> skeleton;
4661
std::vector<uint8_t> texture;
4762
};
@@ -67,6 +82,7 @@ constexpr VersionData SLUS_DATA = {
6782
.nameOffset = PSEXE_OFFSET(0x133b44),
6883
.paraOffset = PSEXE_OFFSET(0x12ceb4),
6984
.skelOffset = PSEXE_OFFSET(0x11ce60),
85+
.isPAL = false,
7086
};
7187

7288
constexpr VersionData SLPS_11_DATA = {
@@ -75,6 +91,7 @@ constexpr VersionData SLPS_11_DATA = {
7591
.nameOffset = PSEXE_OFFSET(0x13d844),
7692
.paraOffset = PSEXE_OFFSET(0x13b344),
7793
.skelOffset = PSEXE_OFFSET(0x123780),
94+
.isPAL = false,
7895
};
7996

8097
constexpr VersionData SLPS_10_DATA = {
@@ -83,6 +100,7 @@ constexpr VersionData SLPS_10_DATA = {
83100
.nameOffset = PSEXE_OFFSET(0x13ce24),
84101
.paraOffset = PSEXE_OFFSET(0x13a924),
85102
.skelOffset = PSEXE_OFFSET(0x122e68),
103+
.isPAL = false,
86104
};
87105

88106
constexpr VersionData SLPM_DATA = {
@@ -91,6 +109,7 @@ constexpr VersionData SLPM_DATA = {
91109
.nameOffset = PSEXE_OFFSET(0x13e874),
92110
.paraOffset = PSEXE_OFFSET(0x13c32c),
93111
.skelOffset = PSEXE_OFFSET(0x124728),
112+
.isPAL = false,
94113
};
95114

96115
constexpr VersionData SLES02914_DATA = {
@@ -99,6 +118,7 @@ constexpr VersionData SLES02914_DATA = {
99118
.nameOffset = PSEXE_OFFSET(0x13ac0c),
100119
.paraOffset = PSEXE_OFFSET(0x138b5c),
101120
.skelOffset = PSEXE_OFFSET(0x122dd4),
121+
.isPAL = true,
102122
};
103123

104124
constexpr VersionData SLES03434_DATA = {
@@ -107,6 +127,7 @@ constexpr VersionData SLES03434_DATA = {
107127
.nameOffset = PSEXE_OFFSET(0x13ae00),
108128
.paraOffset = PSEXE_OFFSET(0x138d50),
109129
.skelOffset = PSEXE_OFFSET(0x122de4),
130+
.isPAL = true,
110131
};
111132

112133
constexpr VersionData SLES03435_DATA = {
@@ -115,6 +136,7 @@ constexpr VersionData SLES03435_DATA = {
115136
.nameOffset = PSEXE_OFFSET(0x13add8),
116137
.paraOffset = PSEXE_OFFSET(0x138d28),
117138
.skelOffset = PSEXE_OFFSET(0x122d6c),
139+
.isPAL = true,
118140
};
119141

120142
constexpr VersionData SLES03436_DATA = {
@@ -123,6 +145,7 @@ constexpr VersionData SLES03436_DATA = {
123145
.nameOffset = PSEXE_OFFSET(0x13b7e4),
124146
.paraOffset = PSEXE_OFFSET(0x139734),
125147
.skelOffset = PSEXE_OFFSET(0x122da0),
148+
.isPAL = true,
126149
};
127150

128151
constexpr VersionData SLES03437_DATA = {
@@ -131,6 +154,7 @@ constexpr VersionData SLES03437_DATA = {
131154
.nameOffset = PSEXE_OFFSET(0x13b314),
132155
.paraOffset = PSEXE_OFFSET(0x139264),
133156
.skelOffset = PSEXE_OFFSET(0x122da0),
157+
.isPAL = true,
134158
};
135159

136160
constexpr VersionData VERSION_DATA[] = { SLUS_DATA, SLPS_11_DATA, SLPS_10_DATA, SLPM_DATA, SLES02914_DATA,
@@ -177,17 +201,18 @@ std::vector<Entry> loadDigimonEntries(std::filesystem::path parentPath)
177201
std::vector<MMDTexture> textureData = readFileAsVector<MMDTexture>(parentPath / version.alltimPath);
178202
DigimonFileName* names = reinterpret_cast<DigimonFileName*>(data.data() + version.nameOffset);
179203
DigimonPara* para = reinterpret_cast<DigimonPara*>(data.data() + version.paraOffset);
204+
DigimonParaPAL* paraPAL = reinterpret_cast<DigimonParaPAL*>(data.data() + version.paraOffset);
180205
uint32_t* skelOffset = reinterpret_cast<uint32_t*>(data.data() + version.skelOffset);
181206

182207
for (int i = 0; i < 180; i++)
183208
{
184209
NodeEntry* skeletonOffset = reinterpret_cast<NodeEntry*>(data.data() + skelOffset[i] - 0x80090000);
210+
int32_t boneCount = version.isPAL ? paraPAL[i].boneCount : para[i].boneCount;
185211

186212
Entry entry;
187213
entry.filename = std::string(names[i]);
188-
entry.para = para[i];
189214

190-
for (int32_t j = 0; j < entry.para.boneCount; j++)
215+
for (int32_t j = 0; j < boneCount; j++)
191216
entry.skeleton.push_back(skeletonOffset[j]);
192217

193218
std::copy(textureData[i].buffer, textureData[i].buffer + sizeof(MMDTexture), std::back_inserter(entry.texture));

0 commit comments

Comments
 (0)