From ddc7cd4295c74581aa625286098b6e9ab55e6863 Mon Sep 17 00:00:00 2001 From: gromchek Date: Sat, 27 Sep 2025 16:17:26 +0300 Subject: [PATCH 1/2] feat(profile): CMapRenderChunk funcs --- .../ida/batch/import_symbols.idc | 62 +++++++++++++++++- .../symbol/gxdevice/func.sym | 2 + .../3.3.5a-windows-386/symbol/handle/func.sym | 1 - profile/3.3.5a-windows-386/symbol/main.sym | 62 +++++++++++++++++- .../3.3.5a-windows-386/symbol/map/func.sym | 2 + .../3.3.5a-windows-386/symbol/map/label.sym | 3 + .../symbol/maprenderchunk/func.sym | 40 +++++++++++ .../symbol/maprenderchunk/label.sym | 7 ++ .../symbol/passenger/func.sym | 1 - .../symbol/texture/func.sym | 3 + .../symbol/texture/label.sym | 1 + .../symbol/worldscene/func.sym | 2 + profile/3.3.5a-windows-386/x64dbg/game.dd32 | Bin 195171 -> 197014 bytes 13 files changed, 180 insertions(+), 6 deletions(-) create mode 100644 profile/3.3.5a-windows-386/symbol/maprenderchunk/label.sym 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 7f474e9..2159a95 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 @@ -258,7 +258,7 @@ static import_symbols() { set_name(0x0047B800, "quicksort"); set_name(0x0047B9E0, "ConvertUTF16toUTF8"); set_name(0x0047BD40, "sgetu8"); - set_name(0x0047BF30, "HandleClose"); + set_name(0x0047BF30, "TextureRelease"); set_name(0x0047BF50, "HandleCreate"); set_name(0x0047BF70, "HandleDuplicate"); set_name(0x0047BF90, "CoordinateSetAspectRatio"); @@ -479,6 +479,7 @@ static import_symbols() { set_name(0x004B5A00, "LoadPredrawnMips"); set_name(0x004B62A0, "TextureIsReadyNow"); set_name(0x004B6580, "TextureSetCacheSize"); + set_name(0x004B6760, "TextureAllocGxTex"); set_name(0x004B6AE0, "TextureCacheUpdate"); set_name(0x004B6CB0, "TextureGetGxTex"); set_name(0x004B7220, "TextureAllocMippedImg"); @@ -487,6 +488,7 @@ static import_symbols() { set_name(0x004B7F80, "TextureInitialize"); set_name(0x004B8070, "LoadBlpMips"); set_name(0x004B81D0, "TextureLoadImage"); + set_name(0x004B8C80, "TextureCreate"); set_name(0x004B9910, "AsyncFileReadProgressCallback"); set_name(0x004B9930, "AsyncFileReadIngameProgressCallback"); set_name(0x004B9B20, "AsyncFileReadPollHandler"); @@ -3092,6 +3094,7 @@ static import_symbols() { set_name(0x00681290, "GxDevCreate"); set_name(0x006813B0, "GxSceneClear"); set_name(0x006813D0, "GxTexUpdate"); + set_name(0x00681450, "GxTexSetWrap"); set_name(0x00681470, "GxTexDestroy"); set_name(0x006814D0, "GxTexCopy"); set_name(0x00681630, "GxQueryCreate"); @@ -3206,6 +3209,7 @@ static import_symbols() { set_name(0x00685A70, "CGxDevice__IRsForceUpdate"); set_name(0x00685B50, "CGxDevice__IRsSync"); set_name(0x00685C60, "CGxDevice__TexCreate"); + set_name(0x00685D40, "CGxDevice__TexSetWrap"); set_name(0x00685E90, "EmergencyMem__Lock"); set_name(0x00685EB0, "CGxDevice__MasterEnableSet"); set_name(0x00685F50, "CGxDevice__RsSet_pointer_to_void"); @@ -4154,9 +4158,11 @@ static import_symbols() { set_name(0x0078F020, "AreaListRegisterLocation"); set_name(0x0078FB00, "CWorldScene__FrustumXform"); set_name(0x00791100, "CWorldScene__FrustumSet"); + set_name(0x00793C30, "CWorldScene__RenderChunksZoneDebug"); set_name(0x00795D40, "CWorldScene__LocateViewer3"); set_name(0x007964A0, "CWorldScene__RenderMapObjDefGroups"); set_name(0x007984A0, "CWorldScene__RenderDetailDoodads"); + set_name(0x007989C0, "CWorldScene__RenderChunksSinglePass"); set_name(0x00799730, "CBarrier__Initialize"); set_name(0x007997D0, "CWorldScene__Initialize"); set_name(0x0079A870, "CWorldScene__Render"); @@ -4169,9 +4175,9 @@ static import_symbols() { set_name(0x0079DFF0, "Particulate__SetTexture"); set_name(0x0079E100, "Particulate__constructor"); set_name(0x0079E730, "CMap__ClearChunkDetailDoodads"); + set_name(0x0079E780, "CMap__ClearChunkBufs"); set_name(0x0079E7C0, "CMap__Initialize"); set_name(0x0079F320, "CMap__Destroy"); - set_name(0x0079F820, "CPassenger__Disable"); set_name(0x007A0530, "CMap__QueryGroundTypeTerrain"); set_name(0x007A0FE0, "CMapEntity__constructor"); set_name(0x007A4C10, "CMap__TestQueryAdd"); @@ -4248,10 +4254,44 @@ static import_symbols() { set_name(0x007B4DF0, "CMap__UpdateArea"); set_name(0x007B5020, "TSList__LinkToHead"); set_name(0x007B5420, "CMap__ProcessChunkLiquidUpdateList"); + set_name(0x007B5500, "CMap__ProcessRenderChunkUpdateList"); set_name(0x007B5950, "CMap__PreUpdateAreas"); set_name(0x007B6110, "CMap__PrepareMapObjDefs"); set_name(0x007B6B00, "CMap__PrepareUpdate"); + set_name(0x007B7320, "CMapRenderChunk__DirtyPools"); + set_name(0x007B7330, "CMapRenderChunk__SetVertexFormat"); + set_name(0x007B7350, "CMapRenderChunk__FreeLayers"); + set_name(0x007B73E0, "CMapRenderChunk__UpdateLoaded"); + set_name(0x007B76F0, "CMapRenderChunk__UnpackAlphaBitsUnfixed4444Mip0"); + set_name(0x007B77D0, "CMapRenderChunk__UnpackAlphaBitsUnfixed4444Mip1"); + set_name(0x007B7A70, "CMapRenderChunk__AllocTexture"); + set_name(0x007B7BD0, "CMapRenderChunk__SelectLights"); + set_name(0x007B7C60, "CMapRenderChunk__UnpackAlphaShadowBitsFixed8888Mip0"); + set_name(0x007B7DC0, "CMapRenderChunk__UnpackAlphaShadowBitsFixed8888Mip1"); + set_name(0x007B8070, "CMapRenderChunk__UnpackAlphaShadowBitsFixed4444Mip0"); + set_name(0x007B8190, "CMapRenderChunk__UnpackAlphaShadowBitsFixed4444Mip1"); + set_name(0x007B85A0, "CMapRenderChunk__UnpackAlphaShadowBitsUnfixed4444Mip0"); + set_name(0x007B8620, "CMapRenderChunk__UnpackAlphaShadowBitsUnfixed4444Mip1"); + set_name(0x007B87F0, "CMapRenderChunk__UnpackAlphaShadowBits"); + set_name(0x007B8E20, "CMapRenderChunk__UnpackAlphaBits"); + set_name(0x007B9250, "CMapRenderChunk__CreateLayer"); + set_name(0x007B9690, "CMapRenderChunk__constructor"); + set_name(0x007B9770, "CMapRenderChunk__CreateLayers"); + set_name(0x007B9830, "CMapRenderChunk__FreeBuf"); + set_name(0x007B9890, "CMapRenderChunk__CreateLayerTexture"); + set_name(0x007B9950, "CMapRenderChunk__UnpackShadowBits"); + set_name(0x007B99B0, "CMapRenderChunk__CreateShaderTexture"); + set_name(0x007B9BC0, "CMapRenderChunk__UpdateLayerGxTexture"); + set_name(0x007B9C20, "CMapRenderChunk__UpdateShadowGxTexture"); + set_name(0x007B9C60, "CMapRenderChunk__UpdateShaderGxTexture"); + set_name(0x007B9D60, "CMapRenderChunk__destructor"); + set_name(0x007B9DE0, "CMapRenderChunk__AllocLayerTexture"); + set_name(0x007B9EE0, "CMapRenderChunk__AllocShadowTexture"); + set_name(0x007B9F90, "CMapRenderChunk__AllocShaderTexture"); + set_name(0x007BA050, "CMapRenderChunk__AllocLayerTextures"); set_name(0x007BA340, "CMapRenderChunk__Initialize"); + set_name(0x007BA3D0, "CMapRenderChunk__DestroyBufs"); + set_name(0x007BA5A0, "CMapRenderChunk__Destroy"); set_name(0x007BA600, "CMapRenderChunk__UpdatePools"); set_name(0x007BD3A0, "CShadowQuery__Initialize"); set_name(0x007BD9F0, "CMap__Preload"); @@ -4339,10 +4379,17 @@ static import_symbols() { set_name(0x007CEEF0, "CChunkLiquid__destructor"); set_name(0x007CF200, "CChunkLiquid__Batch"); set_name(0x007CF9A0, "CChunkLiquid__RenderPrep"); + set_name(0x007CFBE0, "CMapRenderChunk__InitializeVertexShaderConstants"); + set_name(0x007D0050, "CMapRenderChunk__SetVertexShader"); set_name(0x007D02C0, "CMapRenderChunk__RenderPrepBufs"); set_name(0x007D0420, "CMapRenderChunk__UseStreamingBufs"); + set_name(0x007D04A0, "CMapRenderChunk__RenderSetup"); set_name(0x007D05F0, "CMapChunk__LoadDetailDoodadModels"); + set_name(0x007D28B0, "CMapRenderChunk__RenderSinglePassPixelShader"); + set_name(0x007D2D70, "CMapRenderChunk__RenderSinglePassVertexPixelShader"); set_name(0x007D3390, "CMapChunk__CreateDetailDoodads"); + set_name(0x007D3E10, "CMapRenderChunk__SetShaders"); + set_name(0x007D3F70, "CMapRenderChunk__RenderPrep"); set_name(0x007D3FE0, "CMapChunk__CreateDetailDoodadInst"); set_name(0x007D59B0, "CMap__LocateViewerMapObjs"); set_name(0x007D6980, "CMap__LoadTerrainTexture"); @@ -5520,6 +5567,7 @@ static import_symbols() { set_name(0x00ADEEC8, "World__loadMin"); set_name(0x00ADEED4, "World__s_nearClip"); set_name(0x00ADFBC8, "CMap__bPreload"); + set_name(0x00ADFC30, "CMap__s_mapRenderChunkUpdateList"); set_name(0x00ADFC3C, "CMap__s_mapChunkLiquidUpdateList"); set_name(0x00AEEDAC, "CMap__mapChunkPointer"); set_name(0x00AF4998, "g_lightSkyboxDB"); @@ -5895,6 +5943,8 @@ static import_symbols() { set_name(0x00CD860C, "CBarrier__s_mask"); set_name(0x00CD8614, "CWorldScene__s_defaultBlendTexture"); set_name(0x00CD8618, "CWorldScene__s_defaultTexture"); + set_name(0x00CE049E, "CMap__enableTerrainShaderPixel"); + set_name(0x00CE049F, "CMap__enableTerrainShaderVertex"); set_name(0x00CE05D0, "CMap__wdtFilename"); set_name(0x00CE06D0, "CMap__mapName"); set_name(0x00CE07D0, "CMap__mapPath"); @@ -5915,6 +5965,14 @@ static import_symbols() { set_name(0x00D1C4E4, "CDetailDoodad__s_instHeap"); set_name(0x00D1C4F0, "CDetailDoodad__s_bUseShaders"); set_name(0x00D1C4FC, "CDetailDoodad__s_doodadList"); + set_name(0x00D1D058, "CMapRenderChunk__s_bPoolsDirty"); + set_name(0x00D1D05C, "CMapRenderChunk__s_pnEstimateIndex"); + set_name(0x00D1D060, "CMapRenderChunk__s_pnEstimateVertex"); + set_name(0x00D1D064, "CMapRenderChunk__s_gxIndexPool"); + set_name(0x00D1D068, "CMapRenderChunk__s_gxVertexPool"); + set_name(0x00D1D06C, "CMapRenderChunk__s_gxBufVertexFormat"); + set_name(0x00D1D098, "s_defaultTex"); + set_name(0x00D25098, "CMapRenderChunk__s_renderLayersFunc"); set_name(0x00D25308, "s_cvShadowCull"); set_name(0x00D25310, "s_cvShadowScissor"); set_name(0x00D25314, "s_cvShadowInstancing"); diff --git a/profile/3.3.5a-windows-386/symbol/gxdevice/func.sym b/profile/3.3.5a-windows-386/symbol/gxdevice/func.sym index 8c7ca17..9a01044 100644 --- a/profile/3.3.5a-windows-386/symbol/gxdevice/func.sym +++ b/profile/3.3.5a-windows-386/symbol/gxdevice/func.sym @@ -115,3 +115,5 @@ CGxDevice__NewOpenGl 0068BF20 f end=0068BF44 type="CGxDevice* __stdcall func()" CGxDevice__NewD3d9Ex 0068C220 f end=0068C244 type="CGxDevice* __stdcall func()" CGxDevice__ITexWHDStartEnd 006A5EF0 f end=006A5FDF type="void __thiscall func(CGxDevice* this, CGxTex* texId, uint32_t* width, uint32_t* height, uint32_t* baseMip, uint32_t* mipCount)" CGxDevice__TexIsReadyNow 006831C0 f end=006831E7 +CGxDevice__TexSetWrap 00685D40 f end=00685DBF +GxTexSetWrap 00681450 f end=0068146C diff --git a/profile/3.3.5a-windows-386/symbol/handle/func.sym b/profile/3.3.5a-windows-386/symbol/handle/func.sym index e1070a4..4a6a0a4 100644 --- a/profile/3.3.5a-windows-386/symbol/handle/func.sym +++ b/profile/3.3.5a-windows-386/symbol/handle/func.sym @@ -1,3 +1,2 @@ -HandleClose 0047BF30 f end=0047BF46 HandleCreate 0047BF50 f end=0047BF6B HandleDuplicate 0047BF70 f end=0047BF82 diff --git a/profile/3.3.5a-windows-386/symbol/main.sym b/profile/3.3.5a-windows-386/symbol/main.sym index 8e6b38e..4bc6bad 100644 --- a/profile/3.3.5a-windows-386/symbol/main.sym +++ b/profile/3.3.5a-windows-386/symbol/main.sym @@ -254,7 +254,7 @@ j_nullsub_3 0047B760 f quicksort 0047B800 f ; void __cdecl quicksort(unsigned int, unsigned int, int, int (__cdecl *)(unsigned int, unsigned int, int), int) ConvertUTF16toUTF8 0047B9E0 f end=0047BB9C type="int __stdcall func(char* dst, uint32_t dstMaxChars, uint16_t* src, uint32_t srcMaxChars, uint32_t* dstChars, uint32_t* srcChars)" sgetu8 0047BD40 f ; int __cdecl sgetu8(_BYTE *, _DWORD *) -HandleClose 0047BF30 f end=0047BF46 +TextureRelease 0047BF30 f end=0047BF46 HandleCreate 0047BF50 f end=0047BF6B HandleDuplicate 0047BF70 f end=0047BF82 CoordinateSetAspectRatio 0047BF90 f end=0047BFC8 @@ -475,6 +475,7 @@ TextureFreeMippedImg 004B55E0 f end=004B55FE LoadPredrawnMips 004B5A00 f end=004B5BA2 TextureIsReadyNow 004B62A0 f end=004B62C1 TextureSetCacheSize 004B6580 f end=004B65D5 +TextureAllocGxTex 004B6760 f end=004B6920 TextureCacheUpdate 004B6AE0 f end=004B6C47 TextureGetGxTex 004B6CB0 f end=004B6D82 TextureAllocMippedImg 004B7220 f end=004B72F4 type="MipBits* __stdcall func(PIXEL_FORMAT format, uint32_t width, uint32_t height)" @@ -483,6 +484,7 @@ LoadTgaMips 004B78A0 f end=004B7AA0 type="int32_t __usercall func@(char* ex TextureInitialize 004B7F80 f end=004B7FF7 LoadBlpMips 004B8070 f end=004B81CE type="int32_t __usercall func@(char* ext@, char* filename@, int32_t a3, MipBits** mipBits, uint32_t* width, uint32_t* height, uint32_t* isOpaque, uint32_t* alphaBits, PIXEL_FORMAT* dataFormat)" TextureLoadImage 004B81D0 f end=004B8385 type="MipBits* func(const char* filename, uint32_t* width, uint32_t* height, PIXEL_FORMAT* dataFormat, int32_t* isOpaque, CStatus* status, uint32_t* alphaBits, int32_t a8)" +TextureCreate 004B8C80 f end=004B8D6A AsyncFileReadProgressCallback 004B9910 f end=004B9926 AsyncFileReadIngameProgressCallback 004B9930 f end=004B9946 AsyncFileReadPollHandler 004B9B20 f end=004B9BF6 ; AsyncFileReadPollHandler(void const*, void*) @@ -3088,6 +3090,7 @@ GxAdapterDesktopMode 00681220 f type="int32_t __stdcall func(CGxMonitorMode* mod GxDevCreate 00681290 f end=00681301 GxSceneClear 006813B0 f end=006813CD GxTexUpdate 006813D0 f end=006813EC +GxTexSetWrap 00681450 f end=0068146C GxTexDestroy 00681470 f GxTexCopy 006814D0 f end=00681524 GxQueryCreate 00681630 f end=0068165B type="void __stdcall func(CGxQuery** query, EGxQueryType type)" @@ -3202,6 +3205,7 @@ CGxDevice__IRsForceUpdate_EGxRenderState 006859E0 f end=00685A65 type="void __th CGxDevice__IRsForceUpdate 00685A70 f end=00685B4E type="void __thiscall func(CGxDevice* this)" ; CGxDevice::IRsForceUpdate() CGxDevice__IRsSync 00685B50 f end=00685BFE type="void __thiscall func(CGxDevice* this, int32_t force)" CGxDevice__TexCreate 00685C60 f end=00685CCB type="void __thiscall func(CGxDevice* this, EGxTexTarget target, uint32_t width, uint32_t height, uint32_t depth, EGxTexFormat format, EGxTexFormat dataFormat, CGxTexFlags flags, void* userArg, void (*userFunc)(EGxTexCommand, uint32_t, uint32_t, uint32_t, uint32_t, void*, uint32_t*, void**), char* name, CGxTex** texId)" +CGxDevice__TexSetWrap 00685D40 f end=00685DBF EmergencyMem__Lock 00685E90 f end=00685EB0 type="void* __thiscall func(EmergencyMem* this, uint32_t a1)" CGxDevice__MasterEnableSet 00685EB0 f end=00685F33 type="void __thiscall func(CGxDevice* this, EGxMasterEnables state, int32_t enable)" CGxDevice__RsSet_pointer_to_void 00685F50 f end=00685FB0 type="void __thiscall func(CGxDevice* this, EGxRenderState which, void* value)" @@ -4150,9 +4154,11 @@ CWorldParam__GroundEffectDistCallback 0078DB10 f end=0078DB8A AreaListRegisterLocation 0078F020 f end=0078F1EC CWorldScene__FrustumXform 0078FB00 f end=0078FB20 CWorldScene__FrustumSet 00791100 f end=00791120 +CWorldScene__RenderChunksZoneDebug 00793C30 f end=00793D11 CWorldScene__LocateViewer3 00795D40 f end=00795F7F CWorldScene__RenderMapObjDefGroups 007964A0 f end=007968C2 CWorldScene__RenderDetailDoodads 007984A0 f end=00798794 +CWorldScene__RenderChunksSinglePass 007989C0 f end=00798D9F CBarrier__Initialize 00799730 f end=007997C5 CWorldScene__Initialize 007997D0 f end=00799891 CWorldScene__Render 0079A870 f end=0079ADBB @@ -4165,9 +4171,9 @@ Particulate__InitMovement 0079BCC0 f end=0079BE44 Particulate__SetTexture 0079DFF0 f end=0079E080 Particulate__constructor 0079E100 f end=0079E191 CMap__ClearChunkDetailDoodads 0079E730 f end=0079E774 +CMap__ClearChunkBufs 0079E780 f end=0079E7B6 CMap__Initialize 0079E7C0 f end=0079EFD4 CMap__Destroy 0079F320 f end=0079F646 -CPassenger__Disable 0079F820 f end=0079F858 CMap__QueryGroundTypeTerrain 007A0530 f end=007A0699 CMapEntity__constructor 007A0FE0 f end=007A1098 CMap__TestQueryAdd 007A4C10 f end=007A4EDD @@ -4244,10 +4250,44 @@ CMapObjDef__constructor 007B4350 f end=007B44FE CMap__UpdateArea 007B4DF0 f end=007B4F06 TSList__LinkToHead 007B5020 f end=007B50AB ; 00005410 CMap__ProcessChunkLiquidUpdateList 007B5420 f end=007B549A +CMap__ProcessRenderChunkUpdateList 007B5500 f end=007B5589 CMap__PreUpdateAreas 007B5950 f end=007B5CFF CMap__PrepareMapObjDefs 007B6110 f end=007B64ED CMap__PrepareUpdate 007B6B00 f end=007B6ECF +CMapRenderChunk__DirtyPools 007B7320 f end=007B732B +CMapRenderChunk__SetVertexFormat 007B7330 f end=007B7347 +CMapRenderChunk__FreeLayers 007B7350 f end=007B73D5 +CMapRenderChunk__UpdateLoaded 007B73E0 f end=007B7419 +CMapRenderChunk__UnpackAlphaBitsUnfixed4444Mip0 007B76F0 f end=007B77C3 +CMapRenderChunk__UnpackAlphaBitsUnfixed4444Mip1 007B77D0 f end=007B7859 +CMapRenderChunk__AllocTexture 007B7A70 f end=007B7AEA +CMapRenderChunk__SelectLights 007B7BD0 f end=007B7C5D +CMapRenderChunk__UnpackAlphaShadowBitsFixed8888Mip0 007B7C60 f end=007B7DB7 +CMapRenderChunk__UnpackAlphaShadowBitsFixed8888Mip1 007B7DC0 f end=007B8065 +CMapRenderChunk__UnpackAlphaShadowBitsFixed4444Mip0 007B8070 f end=007B8190 +CMapRenderChunk__UnpackAlphaShadowBitsFixed4444Mip1 007B8190 f end=007B8499 +CMapRenderChunk__UnpackAlphaShadowBitsUnfixed4444Mip0 007B85A0 f end=007B861C +CMapRenderChunk__UnpackAlphaShadowBitsUnfixed4444Mip1 007B8620 f end=007B87E5 +CMapRenderChunk__UnpackAlphaShadowBits 007B87F0 f end=007B88CA +CMapRenderChunk__UnpackAlphaBits 007B8E20 f end=007B8F13 +CMapRenderChunk__CreateLayer 007B9250 f end=007B9331 +CMapRenderChunk__constructor 007B9690 f end=007B976B +CMapRenderChunk__CreateLayers 007B9770 f end=007B9821 +CMapRenderChunk__FreeBuf 007B9830 f end=007B9885 +CMapRenderChunk__CreateLayerTexture 007B9890 f end=007B9941 +CMapRenderChunk__UnpackShadowBits 007B9950 f end=007B99A3 +CMapRenderChunk__CreateShaderTexture 007B99B0 f end=007B9BBE +CMapRenderChunk__UpdateLayerGxTexture 007B9BC0 f end=007B9C04 +CMapRenderChunk__UpdateShadowGxTexture 007B9C20 f end=007B9C50 +CMapRenderChunk__UpdateShaderGxTexture 007B9C60 f end=007B9CA0 +CMapRenderChunk__destructor 007B9D60 f end=007B9DDF +CMapRenderChunk__AllocLayerTexture 007B9DE0 f end=007B9EDB +CMapRenderChunk__AllocShadowTexture 007B9EE0 f end=007B9F85 +CMapRenderChunk__AllocShaderTexture 007B9F90 f end=007BA046 +CMapRenderChunk__AllocLayerTextures 007BA050 f end=007BA0E0 CMapRenderChunk__Initialize 007BA340 f end=007BA3C7 +CMapRenderChunk__DestroyBufs 007BA3D0 f end=007BA5A0 +CMapRenderChunk__Destroy 007BA5A0 f end=007BA600 CMapRenderChunk__UpdatePools 007BA600 f end=007BA7B6 CShadowQuery__Initialize 007BD3A0 f end=007BD44D CMap__Preload 007BD9F0 f end=007BDA62 @@ -4335,10 +4375,17 @@ CChunkLiquid__GetTris 007CEB80 f end=007CEC6E CChunkLiquid__destructor 007CEEF0 f end=007CEFC3 CChunkLiquid__Batch 007CF200 f end=007CF78D CChunkLiquid__RenderPrep 007CF9A0 f end=007CF9D2 +CMapRenderChunk__InitializeVertexShaderConstants 007CFBE0 f end=007D004A +CMapRenderChunk__SetVertexShader 007D0050 f end=007D02B4 CMapRenderChunk__RenderPrepBufs 007D02C0 f end=007D0419 CMapRenderChunk__UseStreamingBufs 007D0420 f end=007D049B +CMapRenderChunk__RenderSetup 007D04A0 f end=007D05E6 CMapChunk__LoadDetailDoodadModels 007D05F0 f end=007D069A +CMapRenderChunk__RenderSinglePassPixelShader 007D28B0 f end=007D2D6D +CMapRenderChunk__RenderSinglePassVertexPixelShader 007D2D70 f end=007D300D CMapChunk__CreateDetailDoodads 007D3390 f end=007D3E01 +CMapRenderChunk__SetShaders 007D3E10 f end=007D3F6D +CMapRenderChunk__RenderPrep 007D3F70 f end=007D3FDC CMapChunk__CreateDetailDoodadInst 007D3FE0 f end=007D4091 CMap__LocateViewerMapObjs 007D59B0 f end=007D5CC9 CMap__LoadTerrainTexture 007D6980 f end=007D6A8F @@ -5516,6 +5563,7 @@ World__loadMax 00ADEEC4 l World__loadMin 00ADEEC8 l World__s_nearClip 00ADEED4 l CMap__bPreload 00ADFBC8 l +CMap__s_mapRenderChunkUpdateList 00ADFC30 l CMap__s_mapChunkLiquidUpdateList 00ADFC3C l CMap__mapChunkPointer 00AEEDAC l g_lightSkyboxDB 00AF4998 l type="WowClientDB_LightSkyboxRec" ; 0x15F @@ -5891,6 +5939,8 @@ CBarrier__s_pattern 00CD8608 l CBarrier__s_mask 00CD860C l CWorldScene__s_defaultBlendTexture 00CD8614 l CWorldScene__s_defaultTexture 00CD8618 l +CMap__enableTerrainShaderPixel 00CE049E l +CMap__enableTerrainShaderVertex 00CE049F l CMap__wdtFilename 00CE05D0 l CMap__mapName 00CE06D0 l CMap__mapPath 00CE07D0 l @@ -5911,6 +5961,14 @@ CDetailDoodad__s_alphaRmapTexture 00D1C4E0 l CDetailDoodad__s_instHeap 00D1C4E4 l CDetailDoodad__s_bUseShaders 00D1C4F0 l CDetailDoodad__s_doodadList 00D1C4FC l +CMapRenderChunk__s_bPoolsDirty 00D1D058 l +CMapRenderChunk__s_pnEstimateIndex 00D1D05C l +CMapRenderChunk__s_pnEstimateVertex 00D1D060 l +CMapRenderChunk__s_gxIndexPool 00D1D064 l +CMapRenderChunk__s_gxVertexPool 00D1D068 l +CMapRenderChunk__s_gxBufVertexFormat 00D1D06C l +s_defaultTex 00D1D098 l +CMapRenderChunk__s_renderLayersFunc 00D25098 l s_cvShadowCull 00D25308 l type="CVar*" s_cvShadowScissor 00D25310 l type="CVar*" s_cvShadowInstancing 00D25314 l type="CVar*" diff --git a/profile/3.3.5a-windows-386/symbol/map/func.sym b/profile/3.3.5a-windows-386/symbol/map/func.sym index 21a9c6c..f8d28d7 100644 --- a/profile/3.3.5a-windows-386/symbol/map/func.sym +++ b/profile/3.3.5a-windows-386/symbol/map/func.sym @@ -50,3 +50,5 @@ CMap__LoadArea 007D9A20 f end=007D9A6B CMap__PrepareArea 007D9A70 f end=007D9B0E CMap__ProcessChunkLiquidUpdateList 007B5420 f end=007B549A CMap__ClearChunkDetailDoodads 0079E730 f end=0079E774 +CMap__ClearChunkBufs 0079E780 f end=0079E7B6 +CMap__ProcessRenderChunkUpdateList 007B5500 f end=007B5589 diff --git a/profile/3.3.5a-windows-386/symbol/map/label.sym b/profile/3.3.5a-windows-386/symbol/map/label.sym index 3a4e010..fca04fa 100644 --- a/profile/3.3.5a-windows-386/symbol/map/label.sym +++ b/profile/3.3.5a-windows-386/symbol/map/label.sym @@ -21,3 +21,6 @@ CMap__s_holeMask 00A3FAF0 l CMap__m_areaTable 00CE48D0 l CMap__s_mapChunkLiquidUpdateList 00ADFC3C l CMap__mapChunkPointer 00AEEDAC l +CMap__enableTerrainShaderVertex 00CE049F l +CMap__enableTerrainShaderPixel 00CE049E l +CMap__s_mapRenderChunkUpdateList 00ADFC30 l diff --git a/profile/3.3.5a-windows-386/symbol/maprenderchunk/func.sym b/profile/3.3.5a-windows-386/symbol/maprenderchunk/func.sym index 82e41de..4954cc7 100644 --- a/profile/3.3.5a-windows-386/symbol/maprenderchunk/func.sym +++ b/profile/3.3.5a-windows-386/symbol/maprenderchunk/func.sym @@ -2,3 +2,43 @@ CMapRenderChunk__Initialize 007BA340 f end=007BA3C7 CMapRenderChunk__UpdatePools 007BA600 f end=007BA7B6 CMapRenderChunk__RenderPrepBufs 007D02C0 f end=007D0419 CMapRenderChunk__UseStreamingBufs 007D0420 f end=007D049B +CMapRenderChunk__DirtyPools 007B7320 f end=007B732B +CMapRenderChunk__SetVertexFormat 007B7330 f end=007B7347 +CMapRenderChunk__FreeLayers 007B7350 f end=007B73D5 +CMapRenderChunk__UpdateLoaded 007B73E0 f end=007B7419 +CMapRenderChunk__UnpackAlphaBitsUnfixed4444Mip0 007B76F0 f end=007B77C3 +CMapRenderChunk__UnpackAlphaBitsUnfixed4444Mip1 007B77D0 f end=007B7859 +CMapRenderChunk__AllocTexture 007B7A70 f end=007B7AEA +CMapRenderChunk__SelectLights 007B7BD0 f end=007B7C5D +CMapRenderChunk__UnpackAlphaShadowBitsFixed8888Mip0 007B7C60 f end=007B7DB7 +CMapRenderChunk__UnpackAlphaShadowBitsFixed8888Mip1 007B7DC0 f end=007B8065 +CMapRenderChunk__UnpackAlphaShadowBitsFixed4444Mip0 007B8070 f end=007B8190 +CMapRenderChunk__UnpackAlphaShadowBitsFixed4444Mip1 007B8190 f end=007B8499 +CMapRenderChunk__UnpackAlphaShadowBitsUnfixed4444Mip0 007B85A0 f end=007B861C +CMapRenderChunk__UnpackAlphaShadowBitsUnfixed4444Mip1 007B8620 f end=007B87E5 +CMapRenderChunk__UnpackAlphaShadowBits 007B87F0 f end=007B88CA +CMapRenderChunk__UnpackAlphaBits 007B8E20 f end=007B8F13 +CMapRenderChunk__CreateLayer 007B9250 f end=007B9331 +CMapRenderChunk__constructor 007B9690 f end=007B976B +CMapRenderChunk__CreateLayers 007B9770 f end=007B9821 +CMapRenderChunk__FreeBuf 007B9830 f end=007B9885 +CMapRenderChunk__CreateLayerTexture 007B9890 f end=007B9941 +CMapRenderChunk__UnpackShadowBits 007B9950 f end=007B99A3 +CMapRenderChunk__CreateShaderTexture 007B99B0 f end=007B9BBE +CMapRenderChunk__UpdateLayerGxTexture 007B9BC0 f end=007B9C04 +CMapRenderChunk__UpdateShadowGxTexture 007B9C20 f end=007B9C50 +CMapRenderChunk__UpdateShaderGxTexture 007B9C60 f end=007B9CA0 +CMapRenderChunk__destructor 007B9D60 f end=007B9DDF +CMapRenderChunk__AllocLayerTexture 007B9DE0 f end=007B9EDB +CMapRenderChunk__AllocShadowTexture 007B9EE0 f end=007B9F85 +CMapRenderChunk__AllocShaderTexture 007B9F90 f end=007BA046 +CMapRenderChunk__AllocLayerTextures 007BA050 f end=007BA0E0 +CMapRenderChunk__DestroyBufs 007BA3D0 f end=007BA5A0 +CMapRenderChunk__Destroy 007BA5A0 f end=007BA600 +CMapRenderChunk__InitializeVertexShaderConstants 007CFBE0 f end=007D004A +CMapRenderChunk__SetVertexShader 007D0050 f end=007D02B4 +CMapRenderChunk__RenderSetup 007D04A0 f end=007D05E6 +CMapRenderChunk__RenderSinglePassPixelShader 007D28B0 f end=007D2D6D +CMapRenderChunk__RenderSinglePassVertexPixelShader 007D2D70 f end=007D300D +CMapRenderChunk__SetShaders 007D3E10 f end=007D3F6D +CMapRenderChunk__RenderPrep 007D3F70 f end=007D3FDC diff --git a/profile/3.3.5a-windows-386/symbol/maprenderchunk/label.sym b/profile/3.3.5a-windows-386/symbol/maprenderchunk/label.sym new file mode 100644 index 0000000..450a7f0 --- /dev/null +++ b/profile/3.3.5a-windows-386/symbol/maprenderchunk/label.sym @@ -0,0 +1,7 @@ +CMapRenderChunk__s_renderLayersFunc 00D25098 l +CMapRenderChunk__s_pnEstimateVertex 00D1D060 l +CMapRenderChunk__s_pnEstimateIndex 00D1D05C l +CMapRenderChunk__s_gxVertexPool 00D1D068 l +CMapRenderChunk__s_gxIndexPool 00D1D064 l +CMapRenderChunk__s_bPoolsDirty 00D1D058 l +CMapRenderChunk__s_gxBufVertexFormat 00D1D06C l diff --git a/profile/3.3.5a-windows-386/symbol/passenger/func.sym b/profile/3.3.5a-windows-386/symbol/passenger/func.sym index ebbafa5..064e92c 100644 --- a/profile/3.3.5a-windows-386/symbol/passenger/func.sym +++ b/profile/3.3.5a-windows-386/symbol/passenger/func.sym @@ -1,3 +1,2 @@ CPassenger__GetRawPosition 004F4500 f end=004F45AC CPassenger__PostInit 004F4280 f end=004F429E -CPassenger__Disable 0079F820 f end=0079F858 diff --git a/profile/3.3.5a-windows-386/symbol/texture/func.sym b/profile/3.3.5a-windows-386/symbol/texture/func.sym index 5711c5f..0b7ff5b 100644 --- a/profile/3.3.5a-windows-386/symbol/texture/func.sym +++ b/profile/3.3.5a-windows-386/symbol/texture/func.sym @@ -50,3 +50,6 @@ CBLPFile__Open 006AFF10 f end=006AFFCF type="int32_t __thiscall func(CBLPFile* t CBLPFile__LockChain2 006AFFD0 f end=006B012E type="int32_t __thiscall func(CBLPFile* this, char* fileName, PIXEL_FORMAT format, MipBits** images, uint32_t mipLevel, int32_t a6)" TextureIsReadyNow 004B62A0 f end=004B62C1 TextureGetGxTex 004B6CB0 f end=004B6D82 +TextureRelease 0047BF30 f end=0047BF46 +TextureAllocGxTex 004B6760 f end=004B6920 +TextureCreate 004B8C80 f end=004B8D6A diff --git a/profile/3.3.5a-windows-386/symbol/texture/label.sym b/profile/3.3.5a-windows-386/symbol/texture/label.sym index 9e366c6..f0697fa 100644 --- a/profile/3.3.5a-windows-386/symbol/texture/label.sym +++ b/profile/3.3.5a-windows-386/symbol/texture/label.sym @@ -1,3 +1,4 @@ s_pixelFormatToMipBitsCache 009F1074 l CBLPFile__s_eightBitAlphaLookup 00AD90B0 l type="uint8_t[16]" CBLPFile__s_oneBitAlphaLookup 00AD90C0 l type="uint8_t[2]" +s_defaultTex 00D1D098 l diff --git a/profile/3.3.5a-windows-386/symbol/worldscene/func.sym b/profile/3.3.5a-windows-386/symbol/worldscene/func.sym index bebb3db..c75c630 100644 --- a/profile/3.3.5a-windows-386/symbol/worldscene/func.sym +++ b/profile/3.3.5a-windows-386/symbol/worldscene/func.sym @@ -5,3 +5,5 @@ CWorldScene__LocateViewer3 00795D40 f end=00795F7F CWorldScene__RenderMapObjDefGroups 007964A0 f end=007968C2 CWorldScene__Render 0079A870 f end=0079ADBB CWorldScene__RenderDetailDoodads 007984A0 f end=00798794 +CWorldScene__RenderChunksZoneDebug 00793C30 f end=00793D11 +CWorldScene__RenderChunksSinglePass 007989C0 f end=00798D9F diff --git a/profile/3.3.5a-windows-386/x64dbg/game.dd32 b/profile/3.3.5a-windows-386/x64dbg/game.dd32 index c6a645a3d347066ffec8691af70a7a26c5d416b1..f629045d036f7c90f198536db0fbee0a8818a90d 100644 GIT binary patch delta 50010 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 delta 48247 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 From e38ccdc48e89142647b60b5ab6a1e5986ddba8df Mon Sep 17 00:00:00 2001 From: gromchek Date: Sat, 27 Sep 2025 16:18:34 +0300 Subject: [PATCH 2/2] feat(profile): CMapRenderChunk struct --- profile/3.3.5a-windows-386/include/main.h | 1 + .../3.3.5a-windows-386/include/map/CMapArea.h | 4 +- .../include/map/CMapRenderChunk.h | 57 +++++++++++++++++++ 3 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 profile/3.3.5a-windows-386/include/map/CMapRenderChunk.h diff --git a/profile/3.3.5a-windows-386/include/main.h b/profile/3.3.5a-windows-386/include/main.h index 79ffb79..dc238a9 100644 --- a/profile/3.3.5a-windows-386/include/main.h +++ b/profile/3.3.5a-windows-386/include/main.h @@ -84,6 +84,7 @@ #include "map/CMapObj.h" #include "map/CChunkLiquid.h" #include "map/CDetailDoodadInst.h" +#include "map/CMapRenderChunk.h" #include "net/message.h" diff --git a/profile/3.3.5a-windows-386/include/map/CMapArea.h b/profile/3.3.5a-windows-386/include/map/CMapArea.h index 97f9777..efddac1 100644 --- a/profile/3.3.5a-windows-386/include/map/CMapArea.h +++ b/profile/3.3.5a-windows-386/include/map/CMapArea.h @@ -99,8 +99,8 @@ struct CMapChunk float distToCamera; CAaBox bbox2; - void* detailDoodadInstPtr; - void* renderChunkPtr; + void* detailDoodadInst; + void* renderChunk; int32_t unk_AC; int32_t areaId; diff --git a/profile/3.3.5a-windows-386/include/map/CMapRenderChunk.h b/profile/3.3.5a-windows-386/include/map/CMapRenderChunk.h new file mode 100644 index 0000000..cbd29bb --- /dev/null +++ b/profile/3.3.5a-windows-386/include/map/CMapRenderChunk.h @@ -0,0 +1,57 @@ +#ifndef CMAPRENDERCHUNK_H +#define CMAPRENDERCHUNK_H + +DECLARE_STRUCT(CMapRenderChunkLayer); +DECLARE_STRUCT(CMapRenderChunk); + +#include "system/types.h" +#include "texture/texture.h" +#include "tempest/vector.h" +#include "gx/buffer.h" + +struct CMapChunk; + +struct CMapRenderChunkLayer +{ + int16_t flags; + int16_t layerIndex; + CTexture* texture; + int32_t unkIndex; + int32_t unkValue; + CMapRenderChunk* owner; +}; + +struct CMapRenderChunk +{ + CMapRenderChunk* renderChunkPtr1; + CMapRenderChunk* renderChunkPtr2; + uint8_t unkFlags; + uint8_t layersCount; + int16_t unk_0A; + int32_t unk_0C; + + CMapChunk* mapChunkPtr1; + CMapChunk* mapChunkPtr2; + + C3Vector vec1; + C3Vector vec2; + float radius; + + CMapRenderChunkLayer layers[4]; + + CTexture* terrainBlendTexture; + CTexture* shadowTexture; + + CGxBuf* vertexBuf; + CGxBuf* indicesBuf; + + int32_t unk_94; + int32_t unk_98; + int16_t unk_9C; + int16_t unk_9E; + int32_t unk_A0; + int32_t unk_A4; +}; + + +#endif \ No newline at end of file