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)
{
READ(b, unk0);

View file

@ -135,11 +135,21 @@ struct weather
struct weather_group
{
uint32_t unk0; // racing
uint32_t n_segs;
std::string name;
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

View file

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

View file

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

View file

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