From 18168eeb55db230d1672a2242b5ef518caffec14 Mon Sep 17 00:00:00 2001 From: gromchek Date: Sun, 23 Nov 2025 21:47:52 +0300 Subject: [PATCH 1/3] feat(profile): Weather funcs --- profile/3.3.5a-windows-386/symbol/packetlist/func.sym | 10 ++++++++++ profile/3.3.5a-windows-386/symbol/weather/func.sym | 6 ++++++ 2 files changed, 16 insertions(+) create mode 100644 profile/3.3.5a-windows-386/symbol/packetlist/func.sym diff --git a/profile/3.3.5a-windows-386/symbol/packetlist/func.sym b/profile/3.3.5a-windows-386/symbol/packetlist/func.sym new file mode 100644 index 0000000..9dc5aac --- /dev/null +++ b/profile/3.3.5a-windows-386/symbol/packetlist/func.sym @@ -0,0 +1,10 @@ +Packet__RainDrop__constructor 00786920 f end=0078698C +Packet__RainPatter__constructor 00786990 f end=00786A1A +PacketList__Packet__RainDrop__Alloc 00787920 f end=00787A0F +PacketList__Packet__RainPatter__Alloc 00787A10 f end=00787AFF +PacketList__Packet__SnowFlake__Alloc 00787B00 f end=00787BEF +PacketList__Packet__SandGrain__Alloc 00787BF0 f end=00787CDF +PacketList__Packet__RainDrop__destructor 00788C10 f end=00788D44 +PacketList__Packet__RainPatter__destructor 00788D50 f end=00788E84 +PacketList__Packet__SnowFlake__destructor 00788E90 f end=00788FC4 +PacketList__Packet__SandGrain__destructor 00788FD0 f end=00789104 \ No newline at end of file diff --git a/profile/3.3.5a-windows-386/symbol/weather/func.sym b/profile/3.3.5a-windows-386/symbol/weather/func.sym index 3ed9f75..f728901 100644 --- a/profile/3.3.5a-windows-386/symbol/weather/func.sym +++ b/profile/3.3.5a-windows-386/symbol/weather/func.sym @@ -36,3 +36,9 @@ Sand__constructor 0078CF20 f end=0078D0A8 Weather__Clear 0078D0B0 f end=0078D12A Weather__Update 0078D170 f end=0078D53C Weather__destructor 0078D540 f end=0078D602 +Rain__SetStormIntensity 007840B0 f end=00784133 +Rain__RealizePacket 007843E0 f end=007844ED +Snow__SetStormIntensity 007844F0 f end=00784573 +Sand__SetStormIntensity 00784580 f end=007845E2 +Rain__InitDrop 00785140 f end=00785637 +Rain__UpdatePacket 00785640 f end=00785875 From 93fdfe1a796f725d6cae272b563533a7a0e1bf1a Mon Sep 17 00:00:00 2001 From: gromchek Date: Sun, 23 Nov 2025 21:48:19 +0300 Subject: [PATCH 2/3] feat(profile): Weather packet structs --- .../3.3.5a-windows-386/include/map/Weather.h | 304 +++++++++++++++++- 1 file changed, 301 insertions(+), 3 deletions(-) diff --git a/profile/3.3.5a-windows-386/include/map/Weather.h b/profile/3.3.5a-windows-386/include/map/Weather.h index cbc6b24..13e7ab3 100644 --- a/profile/3.3.5a-windows-386/include/map/Weather.h +++ b/profile/3.3.5a-windows-386/include/map/Weather.h @@ -2,9 +2,307 @@ #define WEATHER_H DECLARE_STRUCT(Weather); +DECLARE_STRUCT(Mists); +DECLARE_STRUCT(Rain); +DECLARE_STRUCT(Snow); +DECLARE_STRUCT(Sand); +DECLARE_STRUCT(PacketList_Packet_RainDrop); +DECLARE_STRUCT(Packet_RainDrop); +DECLARE_STRUCT(RainDropParticle); +DECLARE_STRUCT(RainParticleBuffer); + +DECLARE_STRUCT(PacketList_Packet_RainPatter); +DECLARE_STRUCT(Packet_RainPatter); +DECLARE_STRUCT(RainPatterParticle); +DECLARE_STRUCT(RainPatterParticleBuffer); + +DECLARE_STRUCT(PacketList_Packet_SnowFlake); +DECLARE_STRUCT(Packet_SnowFlake); +DECLARE_STRUCT(SnowFlakeParticle); +DECLARE_STRUCT(SnowFlakeParticleBuffer); + +DECLARE_STRUCT(PacketList_Packet_SandGrain); +DECLARE_STRUCT(Packet_SandGrain); +DECLARE_STRUCT(SandGrainParticle); +DECLARE_STRUCT(SandGrainParticleBuffer); + +#include "tempest/box.h" #include "system/types.h" #include "tempest/vector.h" +#include "texture/texture.h" +#include "gx/shader.h" +#include "gx/buffer.h" + +struct Mists +{ + void** vtable; + C3Vector position; + uint32_t unk_10; + uint32_t unk_14; + uint32_t unk_18; + float scale; + uint32_t unk_20; + float rotationSpeed; + float fadeSpeed; + uint32_t unk_2C; + float opacity; + float lifeTime; + float spawnRate; + uint8_t unk_3C; + uint8_t padding[3]; + CTexture* mistTexture; + uint32_t particleCount; + uint32_t unk_48; + uint32_t unk_4C; + uint32_t unk_50; +}; + +struct SandGrainParticle +{ + C3Vector position; + C3Vector velocity; + float lifetime; + float size; +}; + +struct SandGrainParticleBuffer +{ + uint32_t particleCount; + SandGrainParticle particles[6144]; +}; + +struct Packet_SandGrain +{ + Packet_SandGrain* prev; + Packet_SandGrain* next; + + SandGrainParticleBuffer particlesBuffer; + + uint32_t currParticle; + uint32_t packetStartTick; + uint32_t packetEndTick; + float packetBuildTime; + + uint32_t field_C007; + uint32_t field_C008; + uint32_t field_C009; + + CGxPool* gxPool; + CGxBuf* vertexBufHandle; +}; + +struct PacketList_Packet_SandGrain +{ + int32_t unk_00; + Packet_SandGrain* prev; + Packet_SandGrain* next; + int32_t activePacketsCount; + int32_t freePacketsCount; + int32_t unk_14; + Packet_SandGrain* unk_18; + Packet_SandGrain* unk_1C; +}; + +struct Sand +{ + int32_t useWeatherShaders; + CAaBox bbox; + Mists mists; + + PacketList_Packet_SandGrain sandGrainPacketList; + + Packet_SandGrain* sandGrainPacketPtr; + float unk_94; + CGxShader* shader; + float unk_9C; +}; + +struct SnowFlakeParticle +{ + C3Vector position; + C3Vector velocity; + float lifetime; + float size; +}; + +struct SnowFlakeParticleBuffer +{ + uint32_t particleCount; + SnowFlakeParticle particles[6144]; +}; + +struct Packet_SnowFlake +{ + Packet_SnowFlake* prev; + Packet_SnowFlake* next; + + SnowFlakeParticleBuffer particlesBuffer; + + uint32_t currParticle; + uint32_t packetStartTick; + uint32_t packetEndTick; + float packetBuildTime; + + uint32_t field_C007; + uint32_t field_C008; + uint32_t field_C009; + + CGxPool* gxPool; + CGxBuf* vertexBufHandle; +}; + +struct PacketList_Packet_SnowFlake +{ + int32_t unk_00; + Packet_SnowFlake* prev; + Packet_SnowFlake* next; + int32_t activePacketsCount; + int32_t freePacketsCount; + int32_t unk_14; + Packet_SnowFlake* unk_18; + Packet_SnowFlake* unk_1C; +}; + +struct Snow +{ + int32_t useWeatherShaders; + CAaBox bbox; + Mists mists; + + //PacketList_Packet_SnowFlake snowFlakePacketList; + int32_t unk_70; + void* unk_74; + void* unk_78; + int32_t activePacketsCount; + int32_t freePacketsCount; + int32_t unk_84; + void* unk_88; + void* unk_8C; + //end + + Packet_SnowFlake* snowFlakePacketPtr; + float unk_94; + CTexture* snowFlakeTex; + CGxShader* shaderPtr; + int32_t unk_A0; + int32_t unk_A4; +}; + +struct RainPatterParticle +{ + C3Vector position; + float lifetime; + float size; + float unk; +}; + +struct RainPatterParticleBuffer +{ + uint32_t particleCount; + RainPatterParticle particles[6144]; +}; + +struct Packet_RainPatter +{ + Packet_RainPatter* prev; + Packet_RainPatter* next; + + RainPatterParticleBuffer particlesBuffer; + + uint32_t currParticle; + uint32_t packetStartTick; + uint32_t packetEndTick; + float packetBuildTime; + + uint32_t field_9007; + uint32_t field_9008; + uint32_t field_9009; + + CGxPool* gxPool; + CGxBuf* vertexBufHandle; +}; + +struct PacketList_Packet_RainPatter +{ + int32_t unk_00; + Packet_RainPatter* prev; + Packet_RainPatter* next; + int32_t activePacketsCount; + int32_t freePacketsCount; + int32_t unk_14; + Packet_RainPatter* unk_18; + Packet_RainPatter* unk_1C; +}; + +struct RainDropParticle +{ + C3Vector position; + C3Vector velocity; + CImVector color; + float size; + float unk; +}; + +struct RainParticleBuffer +{ + uint32_t particleCount; + RainDropParticle particles[6144]; +}; + +struct Packet_RainDrop +{ + Packet_RainDrop* prev; + Packet_RainDrop* next; + + RainParticleBuffer particlesBuffer; + + uint32_t currParticle; + uint32_t packetStartTick; + uint32_t packetEndTick; + float packetBuildTime; + + uint32_t field_D807; + uint32_t field_D808; + uint32_t field_D809; + + CGxPool* gxPool; + CGxBuf* vertexBufHandle; +}; + +struct PacketList_Packet_RainDrop +{ + int32_t unk_00; + Packet_RainDrop* prev; + Packet_RainDrop* next; + int32_t activePacketsCount; + int32_t freePacketsCount; + int32_t unk_14; + Packet_RainDrop* unk_18; + Packet_RainDrop* unk_1C; +}; + +struct Rain +{ + int32_t useWeatherShaders; + CAaBox bbox; + Mists mists; + + PacketList_Packet_RainDrop rainDropPacketList; + PacketList_Packet_RainPatter rainPatterPacketList; + + Packet_RainDrop* rainDropPacketPtr; + float unk_B4; // particle lifetime? + Packet_RainPatter* rainPatterPacketPtr; + + CTexture* rainDropTex; + CGxShader* shaderRain; + CTexture* rainDropSplashTex; + CGxShader* shaderPatter; + + float particlesPerFrame; + float intensity; +}; struct Weather { @@ -27,9 +325,9 @@ struct Weather char texturePath[260]; - void* RainPtr; - void* SnowPtr; - void* SandPtr; + Rain* rain; + Snow* snow; + Sand* sand; void* unkObject; From 4e3971454f1bd575100900120af8b32570bf5731 Mon Sep 17 00:00:00 2001 From: gromchek Date: Sun, 23 Nov 2025 21:48:46 +0300 Subject: [PATCH 3/3] chore(build): refresh generated files --- .../ida/batch/import_symbols.idc | 16 + profile/3.3.5a-windows-386/symbol/main.sym | 16 + profile/3.3.5a-windows-386/x64dbg/game.dd32 | Bin 220394 -> 220862 bytes profile/3.3.5a-windows-386/x64dbg/types.json | 957 +++++++++++++++++- 4 files changed, 983 insertions(+), 6 deletions(-) diff --git a/profile/3.3.5a-windows-386/ida/batch/import_symbols.idc b/profile/3.3.5a-windows-386/ida/batch/import_symbols.idc index cd21eb6..b562c96 100644 --- a/profile/3.3.5a-windows-386/ida/batch/import_symbols.idc +++ b/profile/3.3.5a-windows-386/ida/batch/import_symbols.idc @@ -4431,20 +4431,36 @@ static import_symbols() { set_name(0x00783A40, "World__GetFacets@2"); set_name(0x00783B60, "Weather__GetType"); set_name(0x00783B90, "Weather__FillInDefaultPrecipTexturePath"); + set_name(0x007840B0, "Rain__SetStormIntensity"); set_name(0x00784140, "Rain__GetMotionBlurMatrix"); set_name(0x007842D0, "Rain__RealizePacket"); + set_name(0x007843E0, "Rain__RealizePacket@2"); + set_name(0x007844F0, "Snow__SetStormIntensity"); + set_name(0x00784580, "Sand__SetStormIntensity"); set_name(0x007846A0, "Weather__SetType"); set_name(0x00784850, "Weather__SetStormIntensity"); + set_name(0x00785140, "Rain__InitDrop"); + set_name(0x00785640, "Rain__UpdatePacket"); set_name(0x00785880, "Snow__InitFlake"); set_name(0x00785D60, "Snow__UpdatePacket"); set_name(0x00785EA0, "Sand__InitGrain"); set_name(0x00786210, "Sand__UpdatePacket"); set_name(0x00786330, "Mists__CreateMist"); + set_name(0x00786920, "Packet__RainDrop__constructor"); + set_name(0x00786990, "Packet__RainPatter__constructor"); set_name(0x00786E10, "Mists__Render"); set_name(0x00787780, "Weather__constructor"); + set_name(0x00787920, "PacketList__Packet__RainDrop__Alloc"); + set_name(0x00787A10, "PacketList__Packet__RainPatter__Alloc"); + set_name(0x00787B00, "PacketList__Packet__SnowFlake__Alloc"); + set_name(0x00787BF0, "PacketList__Packet__SandGrain__Alloc"); set_name(0x00787CE0, "Rain__UpdatePackets"); set_name(0x00788090, "Snow__UpdatePacketsSW"); set_name(0x00788660, "Sand__UpdatePacketsSW"); + set_name(0x00788C10, "PacketList__Packet__RainDrop__destructor"); + set_name(0x00788D50, "PacketList__Packet__RainPatter__destructor"); + set_name(0x00788E90, "PacketList__Packet__SnowFlake__destructor"); + set_name(0x00788FD0, "PacketList__Packet__SandGrain__destructor"); set_name(0x00789110, "Rain__destructor"); set_name(0x007891B0, "Rain__RenderPatterPacketsSW"); set_name(0x007898A0, "Rain__RenderDropPacketsSW"); diff --git a/profile/3.3.5a-windows-386/symbol/main.sym b/profile/3.3.5a-windows-386/symbol/main.sym index 12beba6..ca48b38 100644 --- a/profile/3.3.5a-windows-386/symbol/main.sym +++ b/profile/3.3.5a-windows-386/symbol/main.sym @@ -4428,20 +4428,36 @@ World__GetFacets 00783910 f end=00783A36 World__GetFacets 00783A40 f end=00783A5E Weather__GetType 00783B60 f end=00783B8C Weather__FillInDefaultPrecipTexturePath 00783B90 f end=00783BCE +Rain__SetStormIntensity 007840B0 f end=00784133 Rain__GetMotionBlurMatrix 00784140 f end=0078426F Rain__RealizePacket 007842D0 f end=007843D9 +Rain__RealizePacket 007843E0 f end=007844ED +Snow__SetStormIntensity 007844F0 f end=00784573 +Sand__SetStormIntensity 00784580 f end=007845E2 Weather__SetType 007846A0 f end=0078484C Weather__SetStormIntensity 00784850 f end=00784A24 +Rain__InitDrop 00785140 f end=00785637 +Rain__UpdatePacket 00785640 f end=00785875 Snow__InitFlake 00785880 f end=00785D55 Snow__UpdatePacket 00785D60 f end=00785E9F Sand__InitGrain 00785EA0 f end=0078620E Sand__UpdatePacket 00786210 f end=00786330 Mists__CreateMist 00786330 f end=00786559 +Packet__RainDrop__constructor 00786920 f end=0078698C +Packet__RainPatter__constructor 00786990 f end=00786A1A Mists__Render 00786E10 f end=00787779 Weather__constructor 00787780 f end=0078791A +PacketList__Packet__RainDrop__Alloc 00787920 f end=00787A0F +PacketList__Packet__RainPatter__Alloc 00787A10 f end=00787AFF +PacketList__Packet__SnowFlake__Alloc 00787B00 f end=00787BEF +PacketList__Packet__SandGrain__Alloc 00787BF0 f end=00787CDF Rain__UpdatePackets 00787CE0 f end=00788090 Snow__UpdatePacketsSW 00788090 f end=00788657 Sand__UpdatePacketsSW 00788660 f end=00788927 +PacketList__Packet__RainDrop__destructor 00788C10 f end=00788D44 +PacketList__Packet__RainPatter__destructor 00788D50 f end=00788E84 +PacketList__Packet__SnowFlake__destructor 00788E90 f end=00788FC4 +PacketList__Packet__SandGrain__destructor 00788FD0 f end=00789104 Rain__destructor 00789110 f end=007891A8 Rain__RenderPatterPacketsSW 007891B0 f end=007898A0 Rain__RenderDropPacketsSW 007898A0 f end=0078A029 diff --git a/profile/3.3.5a-windows-386/x64dbg/game.dd32 b/profile/3.3.5a-windows-386/x64dbg/game.dd32 index a3d05088d9a9d15b8fd979095503c6a5aa01b124..a5b72d45860afa73332b00eb0b3258fcda2ea5f2 100644 GIT binary patch delta 11910 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

Dawxe+lOv^$(wOGl?UwNm@kY3nKT4kSW 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 delta 11324 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 HRoedp(lo%y diff --git a/profile/3.3.5a-windows-386/x64dbg/types.json b/profile/3.3.5a-windows-386/x64dbg/types.json index 68a2869..1528f92 100644 --- a/profile/3.3.5a-windows-386/x64dbg/types.json +++ b/profile/3.3.5a-windows-386/x64dbg/types.json @@ -22823,6 +22823,190 @@ } ] }, + { + "name": "PacketList_Packet_RainDrop", + "size": 32, + "members": [ + { + "type": "int32_t", + "name": "unk_00", + "offset": 0 + }, + { + "type": "Packet_RainDrop*", + "name": "prev", + "offset": 4 + }, + { + "type": "Packet_RainDrop*", + "name": "next", + "offset": 8 + }, + { + "type": "int32_t", + "name": "activePacketsCount", + "offset": 12 + }, + { + "type": "int32_t", + "name": "freePacketsCount", + "offset": 16 + }, + { + "type": "int32_t", + "name": "unk_14", + "offset": 20 + }, + { + "type": "Packet_RainDrop*", + "name": "unk_18", + "offset": 24 + }, + { + "type": "Packet_RainDrop*", + "name": "unk_1C", + "offset": 28 + } + ] + }, + { + "name": "PacketList_Packet_RainPatter", + "size": 32, + "members": [ + { + "type": "int32_t", + "name": "unk_00", + "offset": 0 + }, + { + "type": "Packet_RainPatter*", + "name": "prev", + "offset": 4 + }, + { + "type": "Packet_RainPatter*", + "name": "next", + "offset": 8 + }, + { + "type": "int32_t", + "name": "activePacketsCount", + "offset": 12 + }, + { + "type": "int32_t", + "name": "freePacketsCount", + "offset": 16 + }, + { + "type": "int32_t", + "name": "unk_14", + "offset": 20 + }, + { + "type": "Packet_RainPatter*", + "name": "unk_18", + "offset": 24 + }, + { + "type": "Packet_RainPatter*", + "name": "unk_1C", + "offset": 28 + } + ] + }, + { + "name": "PacketList_Packet_SandGrain", + "size": 32, + "members": [ + { + "type": "int32_t", + "name": "unk_00", + "offset": 0 + }, + { + "type": "Packet_SandGrain*", + "name": "prev", + "offset": 4 + }, + { + "type": "Packet_SandGrain*", + "name": "next", + "offset": 8 + }, + { + "type": "int32_t", + "name": "activePacketsCount", + "offset": 12 + }, + { + "type": "int32_t", + "name": "freePacketsCount", + "offset": 16 + }, + { + "type": "int32_t", + "name": "unk_14", + "offset": 20 + }, + { + "type": "Packet_SandGrain*", + "name": "unk_18", + "offset": 24 + }, + { + "type": "Packet_SandGrain*", + "name": "unk_1C", + "offset": 28 + } + ] + }, + { + "name": "PacketList_Packet_SnowFlake", + "size": 32, + "members": [ + { + "type": "int32_t", + "name": "unk_00", + "offset": 0 + }, + { + "type": "Packet_SnowFlake*", + "name": "prev", + "offset": 4 + }, + { + "type": "Packet_SnowFlake*", + "name": "next", + "offset": 8 + }, + { + "type": "int32_t", + "name": "activePacketsCount", + "offset": 12 + }, + { + "type": "int32_t", + "name": "freePacketsCount", + "offset": 16 + }, + { + "type": "int32_t", + "name": "unk_14", + "offset": 20 + }, + { + "type": "Packet_SnowFlake*", + "name": "unk_18", + "offset": 24 + }, + { + "type": "Packet_SnowFlake*", + "name": "unk_1C", + "offset": 28 + } + ] + }, { "name": "PageTextMaterialRec", "size": 8, @@ -32427,6 +32611,191 @@ } ] }, + { + "name": "Mists", + "size": 84, + "members": [ + { + "type": "void**", + "name": "vtable", + "offset": 0 + }, + { + "type": "C3Vector", + "name": "position", + "offset": 4 + }, + { + "type": "uint32_t", + "name": "unk_10", + "offset": 16 + }, + { + "type": "uint32_t", + "name": "unk_14", + "offset": 20 + }, + { + "type": "uint32_t", + "name": "unk_18", + "offset": 24 + }, + { + "type": "float", + "name": "scale", + "offset": 28 + }, + { + "type": "uint32_t", + "name": "unk_20", + "offset": 32 + }, + { + "type": "float", + "name": "rotationSpeed", + "offset": 36 + }, + { + "type": "float", + "name": "fadeSpeed", + "offset": 40 + }, + { + "type": "uint32_t", + "name": "unk_2C", + "offset": 44 + }, + { + "type": "float", + "name": "opacity", + "offset": 48 + }, + { + "type": "float", + "name": "lifeTime", + "offset": 52 + }, + { + "type": "float", + "name": "spawnRate", + "offset": 56 + }, + { + "type": "uint8_t", + "name": "unk_3C", + "offset": 60 + }, + { + "type": "uint8_t", + "name": "padding", + "arrsize": 3, + "offset": 61 + }, + { + "type": "CTexture*", + "name": "mistTexture", + "offset": 64 + }, + { + "type": "uint32_t", + "name": "particleCount", + "offset": 68 + }, + { + "type": "uint32_t", + "name": "unk_48", + "offset": 72 + }, + { + "type": "uint32_t", + "name": "unk_4C", + "offset": 76 + }, + { + "type": "uint32_t", + "name": "unk_50", + "offset": 80 + } + ] + }, + { + "name": "RainPatterParticle", + "size": 24, + "members": [ + { + "type": "C3Vector", + "name": "position", + "offset": 0 + }, + { + "type": "float", + "name": "lifetime", + "offset": 12 + }, + { + "type": "float", + "name": "size", + "offset": 16 + }, + { + "type": "float", + "name": "unk", + "offset": 20 + } + ] + }, + { + "name": "SnowFlakeParticle", + "size": 32, + "members": [ + { + "type": "C3Vector", + "name": "position", + "offset": 0 + }, + { + "type": "C3Vector", + "name": "velocity", + "offset": 12 + }, + { + "type": "float", + "name": "lifetime", + "offset": 24 + }, + { + "type": "float", + "name": "size", + "offset": 28 + } + ] + }, + { + "name": "SandGrainParticle", + "size": 32, + "members": [ + { + "type": "C3Vector", + "name": "position", + "offset": 0 + }, + { + "type": "C3Vector", + "name": "velocity", + "offset": 12 + }, + { + "type": "float", + "name": "lifetime", + "offset": 24 + }, + { + "type": "float", + "name": "size", + "offset": 28 + } + ] + }, { "name": "CGxMatrixStack", "size": 280, @@ -33221,18 +33590,18 @@ "offset": 56 }, { - "type": "void*", - "name": "RainPtr", + "type": "Rain*", + "name": "rain", "offset": 316 }, { - "type": "void*", - "name": "SnowPtr", + "type": "Snow*", + "name": "snow", "offset": 320 }, { - "type": "void*", - "name": "SandPtr", + "type": "Sand*", + "name": "sand", "offset": 324 }, { @@ -33307,6 +33676,37 @@ } ] }, + { + "name": "RainDropParticle", + "size": 36, + "members": [ + { + "type": "C3Vector", + "name": "position", + "offset": 0 + }, + { + "type": "C3Vector", + "name": "velocity", + "offset": 12 + }, + { + "type": "CImVector", + "name": "color", + "offset": 24 + }, + { + "type": "float", + "name": "size", + "offset": 28 + }, + { + "type": "float", + "name": "unk", + "offset": 32 + } + ] + }, { "name": "ARGLIST", "size": 16, @@ -43636,6 +44036,270 @@ } ] }, + { + "name": "Rain", + "size": 212, + "members": [ + { + "type": "int32_t", + "name": "useWeatherShaders", + "offset": 0 + }, + { + "type": "CAaBox", + "name": "bbox", + "offset": 4 + }, + { + "type": "Mists", + "name": "mists", + "offset": 28 + }, + { + "type": "PacketList_Packet_RainDrop", + "name": "rainDropPacketList", + "offset": 112 + }, + { + "type": "PacketList_Packet_RainPatter", + "name": "rainPatterPacketList", + "offset": 144 + }, + { + "type": "Packet_RainDrop*", + "name": "rainDropPacketPtr", + "offset": 176 + }, + { + "type": "float", + "name": "unk_B4", + "offset": 180 + }, + { + "type": "Packet_RainPatter*", + "name": "rainPatterPacketPtr", + "offset": 184 + }, + { + "type": "CTexture*", + "name": "rainDropTex", + "offset": 188 + }, + { + "type": "CGxShader*", + "name": "shaderRain", + "offset": 192 + }, + { + "type": "CTexture*", + "name": "rainDropSplashTex", + "offset": 196 + }, + { + "type": "CGxShader*", + "name": "shaderPatter", + "offset": 200 + }, + { + "type": "float", + "name": "particlesPerFrame", + "offset": 204 + }, + { + "type": "float", + "name": "intensity", + "offset": 208 + } + ] + }, + { + "name": "Snow", + "size": 168, + "members": [ + { + "type": "int32_t", + "name": "useWeatherShaders", + "offset": 0 + }, + { + "type": "CAaBox", + "name": "bbox", + "offset": 4 + }, + { + "type": "Mists", + "name": "mists", + "offset": 28 + }, + { + "type": "int32_t", + "name": "unk_70", + "offset": 112 + }, + { + "type": "void*", + "name": "unk_74", + "offset": 116 + }, + { + "type": "void*", + "name": "unk_78", + "offset": 120 + }, + { + "type": "int32_t", + "name": "activePacketsCount", + "offset": 124 + }, + { + "type": "int32_t", + "name": "freePacketsCount", + "offset": 128 + }, + { + "type": "int32_t", + "name": "unk_84", + "offset": 132 + }, + { + "type": "void*", + "name": "unk_88", + "offset": 136 + }, + { + "type": "void*", + "name": "unk_8C", + "offset": 140 + }, + { + "type": "Packet_SnowFlake*", + "name": "snowFlakePacketPtr", + "offset": 144 + }, + { + "type": "float", + "name": "unk_94", + "offset": 148 + }, + { + "type": "CTexture*", + "name": "snowFlakeTex", + "offset": 152 + }, + { + "type": "CGxShader*", + "name": "shaderPtr", + "offset": 156 + }, + { + "type": "int32_t", + "name": "unk_A0", + "offset": 160 + }, + { + "type": "int32_t", + "name": "unk_A4", + "offset": 164 + } + ] + }, + { + "name": "Sand", + "size": 160, + "members": [ + { + "type": "int32_t", + "name": "useWeatherShaders", + "offset": 0 + }, + { + "type": "CAaBox", + "name": "bbox", + "offset": 4 + }, + { + "type": "Mists", + "name": "mists", + "offset": 28 + }, + { + "type": "PacketList_Packet_SandGrain", + "name": "sandGrainPacketList", + "offset": 112 + }, + { + "type": "Packet_SandGrain*", + "name": "sandGrainPacketPtr", + "offset": 144 + }, + { + "type": "float", + "name": "unk_94", + "offset": 148 + }, + { + "type": "CGxShader*", + "name": "shader", + "offset": 152 + }, + { + "type": "float", + "name": "unk_9C", + "offset": 156 + } + ] + }, + { + "name": "RainPatterParticleBuffer", + "size": 147460, + "members": [ + { + "type": "uint32_t", + "name": "particleCount", + "offset": 0 + }, + { + "type": "RainPatterParticle", + "name": "particles", + "arrsize": 6144, + "offset": 4 + } + ] + }, + { + "name": "SnowFlakeParticleBuffer", + "size": 196612, + "members": [ + { + "type": "uint32_t", + "name": "particleCount", + "offset": 0 + }, + { + "type": "SnowFlakeParticle", + "name": "particles", + "arrsize": 6144, + "offset": 4 + } + ] + }, + { + "name": "SandGrainParticleBuffer", + "size": 196612, + "members": [ + { + "type": "uint32_t", + "name": "particleCount", + "offset": 0 + }, + { + "type": "SandGrainParticle", + "name": "particles", + "arrsize": 6144, + "offset": 4 + } + ] + }, { "name": "M2ModelBone", "size": 164, @@ -43744,6 +44408,23 @@ } ] }, + { + "name": "RainParticleBuffer", + "size": 221188, + "members": [ + { + "type": "uint32_t", + "name": "particleCount", + "offset": 0 + }, + { + "type": "RainDropParticle", + "name": "particles", + "arrsize": 6144, + "offset": 4 + } + ] + }, { "name": "EvtTimer", "size": 56, @@ -51034,6 +51715,270 @@ } ] }, + { + "name": "Packet_RainPatter", + "size": 147504, + "members": [ + { + "type": "Packet_RainPatter*", + "name": "prev", + "offset": 0 + }, + { + "type": "Packet_RainPatter*", + "name": "next", + "offset": 4 + }, + { + "type": "RainPatterParticleBuffer", + "name": "particlesBuffer", + "offset": 8 + }, + { + "type": "uint32_t", + "name": "currParticle", + "offset": 147468 + }, + { + "type": "uint32_t", + "name": "packetStartTick", + "offset": 147472 + }, + { + "type": "uint32_t", + "name": "packetEndTick", + "offset": 147476 + }, + { + "type": "float", + "name": "packetBuildTime", + "offset": 147480 + }, + { + "type": "uint32_t", + "name": "field_9007", + "offset": 147484 + }, + { + "type": "uint32_t", + "name": "field_9008", + "offset": 147488 + }, + { + "type": "uint32_t", + "name": "field_9009", + "offset": 147492 + }, + { + "type": "CGxPool*", + "name": "gxPool", + "offset": 147496 + }, + { + "type": "CGxBuf*", + "name": "vertexBufHandle", + "offset": 147500 + } + ] + }, + { + "name": "Packet_SnowFlake", + "size": 196656, + "members": [ + { + "type": "Packet_SnowFlake*", + "name": "prev", + "offset": 0 + }, + { + "type": "Packet_SnowFlake*", + "name": "next", + "offset": 4 + }, + { + "type": "SnowFlakeParticleBuffer", + "name": "particlesBuffer", + "offset": 8 + }, + { + "type": "uint32_t", + "name": "currParticle", + "offset": 196620 + }, + { + "type": "uint32_t", + "name": "packetStartTick", + "offset": 196624 + }, + { + "type": "uint32_t", + "name": "packetEndTick", + "offset": 196628 + }, + { + "type": "float", + "name": "packetBuildTime", + "offset": 196632 + }, + { + "type": "uint32_t", + "name": "field_C007", + "offset": 196636 + }, + { + "type": "uint32_t", + "name": "field_C008", + "offset": 196640 + }, + { + "type": "uint32_t", + "name": "field_C009", + "offset": 196644 + }, + { + "type": "CGxPool*", + "name": "gxPool", + "offset": 196648 + }, + { + "type": "CGxBuf*", + "name": "vertexBufHandle", + "offset": 196652 + } + ] + }, + { + "name": "Packet_SandGrain", + "size": 196656, + "members": [ + { + "type": "Packet_SandGrain*", + "name": "prev", + "offset": 0 + }, + { + "type": "Packet_SandGrain*", + "name": "next", + "offset": 4 + }, + { + "type": "SandGrainParticleBuffer", + "name": "particlesBuffer", + "offset": 8 + }, + { + "type": "uint32_t", + "name": "currParticle", + "offset": 196620 + }, + { + "type": "uint32_t", + "name": "packetStartTick", + "offset": 196624 + }, + { + "type": "uint32_t", + "name": "packetEndTick", + "offset": 196628 + }, + { + "type": "float", + "name": "packetBuildTime", + "offset": 196632 + }, + { + "type": "uint32_t", + "name": "field_C007", + "offset": 196636 + }, + { + "type": "uint32_t", + "name": "field_C008", + "offset": 196640 + }, + { + "type": "uint32_t", + "name": "field_C009", + "offset": 196644 + }, + { + "type": "CGxPool*", + "name": "gxPool", + "offset": 196648 + }, + { + "type": "CGxBuf*", + "name": "vertexBufHandle", + "offset": 196652 + } + ] + }, + { + "name": "Packet_RainDrop", + "size": 221232, + "members": [ + { + "type": "Packet_RainDrop*", + "name": "prev", + "offset": 0 + }, + { + "type": "Packet_RainDrop*", + "name": "next", + "offset": 4 + }, + { + "type": "RainParticleBuffer", + "name": "particlesBuffer", + "offset": 8 + }, + { + "type": "uint32_t", + "name": "currParticle", + "offset": 221196 + }, + { + "type": "uint32_t", + "name": "packetStartTick", + "offset": 221200 + }, + { + "type": "uint32_t", + "name": "packetEndTick", + "offset": 221204 + }, + { + "type": "float", + "name": "packetBuildTime", + "offset": 221208 + }, + { + "type": "uint32_t", + "name": "field_D807", + "offset": 221212 + }, + { + "type": "uint32_t", + "name": "field_D808", + "offset": 221216 + }, + { + "type": "uint32_t", + "name": "field_D809", + "offset": 221220 + }, + { + "type": "CGxPool*", + "name": "gxPool", + "offset": 221224 + }, + { + "type": "CGxBuf*", + "name": "vertexBufHandle", + "offset": 221228 + } + ] + }, { "name": "EvtThread", "size": 44,