This commit is contained in:
lzwdgc 2022-12-20 21:06:37 +03:00
parent c0e6a2226e
commit 74bffbda51
5 changed files with 48 additions and 22 deletions

View file

@ -73,15 +73,6 @@ void weather::load(const buffer &b)
} }
} }
void weather_group::load(const buffer &b)
{
READ(b, n_segs);
segments.resize(n_segs);
READ_STRING_N(b, name, 0xA0);
for (auto &s : segments)
s.load(b);
}
void water::load(const buffer &b) void water::load(const buffer &b)
{ {
READ(b, unk0); READ(b, unk0);

View file

@ -135,11 +135,21 @@ struct weather
struct weather_group struct weather_group
{ {
uint32_t unk0; // racing
uint32_t n_segs; uint32_t n_segs;
std::string name; std::string name;
std::vector<weather> segments; std::vector<weather> segments;
void load(const buffer &b); void load(const buffer &b, bool aim_racing = false) {
if (aim_racing) {
READ(b, unk0);
}
READ(b, n_segs);
segments.resize(n_segs);
READ_STRING_N(b, name, 0xA0);
for (auto &s : segments)
s.load(b);
}
}; };
struct water struct water

View file

@ -42,19 +42,16 @@ void water_segment::load(const buffer &b)
wg.load(b); wg.load(b);
} }
void weather_segment::load(const buffer &b)
{
wg.load(b);
}
header_segment *header::create_segment(const buffer &b) header_segment *header::create_segment(const buffer &b)
{ {
HeaderSegmentType type; HeaderSegmentType type;
READ(b, type); READ(b, type);
header_segment *segment = 0; header_segment *segment = 0;
switch (type) switch (type) {
{ /*case HeaderSegmentType::unk0:
segment = new unk_segment;
break;*/
case HeaderSegmentType::water: case HeaderSegmentType::water:
segment = new water_segment; segment = new water_segment;
break; break;
@ -76,7 +73,7 @@ header_segment *header::create_segment(const buffer &b)
void header::load(const buffer &b) void header::load(const buffer &b)
{ {
READ(b, unk0); READ(b, version);
READ_WSTRING(b, name1); READ_WSTRING(b, name1);
READ_WSTRING(b, name2); READ_WSTRING(b, name2);
READ(b, width); READ(b, width);
@ -84,6 +81,10 @@ void header::load(const buffer &b)
READ(b, n_header_segs); READ(b, n_header_segs);
segments.resize(n_header_segs); segments.resize(n_header_segs);
READ_STRING_N(b, name, 0xA0); READ_STRING_N(b, name, 0xA0);
if (version == ver::aim_racing) {
uint32_t unk0[4];
READ(b, unk0);
}
for (auto &s : segments) for (auto &s : segments)
{ {
s = create_segment(b); s = create_segment(b);

View file

@ -34,6 +34,7 @@ using Height = float;
enum class HeaderSegmentType : uint32_t enum class HeaderSegmentType : uint32_t
{ {
//unk0 = 0,
water = 1, water = 1,
weather = 2, weather = 2,
}; };
@ -41,29 +42,47 @@ enum class HeaderSegmentType : uint32_t
struct header_segment struct header_segment
{ {
HeaderSegmentType type; HeaderSegmentType type;
uint32_t unk0; uint32_t unk0; // version?
uint32_t len; uint32_t len;
virtual void load(const buffer &b) = 0; virtual void load(const buffer &b) = 0;
}; };
struct unk_segment : public header_segment {
std::string name;
void load(const buffer &b) override {
uint32_t unk0[6];
READ(b, unk0);
READ_STRING_N(b, name, 0xA0);
}
};
struct water_segment : public header_segment struct water_segment : public header_segment
{ {
water_group wg; water_group wg;
virtual void load(const buffer &b) override; void load(const buffer &b) override;
}; };
struct weather_segment : public header_segment struct weather_segment : public header_segment
{ {
weather_group wg; weather_group wg;
virtual void load(const buffer &b) override; void load(const buffer &b) override {
wg.load(b);
}
}; };
struct header struct header
{ {
uint32_t unk0; enum class ver : uint32_t {
aim12 = 0x100,
aim_racing = 0x101,
};
ver version;
std::wstring name1; std::wstring name1;
std::wstring name2; std::wstring name2;
uint32_t width; uint32_t width;

View file

@ -475,6 +475,11 @@ void block::header::load(const buffer &b)
else else
READ(b, unk2[2]); // unk4_0 - related to unk4 - some vector3f READ(b, unk2[2]); // unk4_0 - related to unk4 - some vector3f
READ(b, unk4); READ(b, unk4);
if (gameType == GameType::AimR) {
// not always?
float unk;
READ(b, unk);
}
} }
void block::load(const buffer &b) void block::load(const buffer &b)