#ifndef RAGNAROK_SOURCE_RESOURCE_WORLD_GROUNDRESOURCE_H #define RAGNAROK_SOURCE_RESOURCE_WORLD_GROUNDRESOURCE_H #include "Resource/Resource.h" #include class ResourceBytes; struct ResourceByteReader; struct GroundWaterParameters { /* 0000 */ float level; /* 0004 */ int type; /* 0008 */ float height; /* 000C */ float speed; /* 0010 */ float pitch; /* 0014 */ int animation; }; struct GroundWater { /* 0000 */ GroundWaterParameters parameters; /* 0018 */ std::uint32_t unknown_0018[3]; }; struct GroundResourceContext { ResourceBytes& file; }; class CGndRes : public CRes { public: explicit CGndRes(GroundResourceContext& context); ~CGndRes() override; CGndRes* Create() override; bool Load(const char* name) override; void Unload() override; void Lightmap(int index, unsigned char* output) const; /* 0110 */ int loaded; /* 0114 */ unsigned char major; /* 0115 */ unsigned char minor; /* 0116 */ unsigned char unknown_0116[2]; /* 0118 */ int width; /* 011C */ int height; /* 0120 */ float cellSize; /* 0124 */ int textureCount; /* 0128 */ int tileCount; /* 012C */ int lightmapCount; /* 0130 */ GroundWaterParameters waterDefault; /* 0148 */ int waterWidth; /* 014C */ int waterHeight; /* 0150 */ std::vector waterHeights; /* 015C */ std::vector water; /* 0168 */ std::vector textureNames; /* 0174 */ const unsigned char* lightmaps; /* 0178 */ const unsigned char* legacyLightmapIndices; /* 017C */ const unsigned char* legacyLightmapBytes; /* 0180 */ const unsigned char* tiles; /* 0184 */ const unsigned char* cells; private: bool Parse(ResourceByteReader& input); void ReadWater(ResourceByteReader& input); std::vector m_bytes; GroundResourceContext* m_context; }; static_assert(sizeof(GroundWaterParameters) == 24); static_assert(sizeof(GroundWater) == 36); #endif