Enables: Difference between revisions
(updated render flag description for 3.3.5a according to my latest knowledge) |
(linked my video with detailed explanation of render flags in 3.3.5a) |
||
Line 86: | Line 86: | ||
Throughout all the years of development the list of available Enables and their respective positions has changed a lot. | Throughout all the years of development the list of available Enables and their respective positions has changed a lot. | ||
Certain Bits might not have any effect at all or their purpose hasn't been determined yet. | Certain Bits might not have any effect at all or their purpose hasn't been determined yet. | ||
A video explaining each flag for 3.3.5a can be found [https://youtu.be/9qsCw3Y0-g4 here]. | |||
[1.12.1] | [1.12.1] |
Revision as of 17:03, 31 July 2022
Rendering flags control how the WoW rendering engine paints the world onto the screen. We call them Enables, because that's what the reverse engineering suggests.
This is how a normal render pipeline works for any WoW version (pseudocode):
Wow.exe-> StormStaticEntryPoint Wow.exe-> PaintScreen Wow.exe-> OnPaint Wow.exe-> CGWorldFrame::RenderWorld Wow.exe-> CGWorldFrame::OnWorldRender Wow.exe-> CWorld::Render WoW.exe.DayNightRenderSky WoW.exe.GxSceneClear WoW.exe.DNSky::Render WoW.exe.DNStars::Render WoW.exe.DNPlanet::Render WoW.exe.DNPlanet::Render WoW.exe.DNClouds::Render WoW.exe.CWorldScene::RenderHorizon WoW.exe.CWorldScene::RenderChunks WoW.exe.CWorldScene::RenderMapObjDefGroups WoW.exe.CWorldScene::RenderOcean WoW.exe.CWorldScene::RenderWater WoW.exe.CWorldScene::RenderMagma WoW.exe.GxXformPop WoW.exe.GxRsPop WoW.exe.CWorldScene::RenderDoodads WoW.exe.CWorldScene::RenderObjects Start rendering again
As you can see, the stars, planets, clouds and environment stuff is painted first, then the map ADTs are drawn, RenderMapObjDefGroups are WMOs and get painted after ADTs, then every liquid is painted, after that every M2 (Doodads) are painted too, and finally NPC/Players (RenderObjects).
Offsets & Default Values
The flags are stored in 4 Bytes (= 32 Bits) at a static offset which differs every version. Changing Enables may crash your client - especially earlier versions pre Wrath of the Lich King are prone to this. The following list contains data in the format: [version], offset, default value
[0.5.3] 0x00A4046C 0x07104B73
[0.8.0] 0x00A96C30 0x1F900B77
[1.1.2] 0x0069FE7C 0x1F110F77
[1.8.0] 0x007EC93C 0x9F110F77
[1.12.0] 0x0087B2A4 0x9F910F77
[2.4.3] 0x009A4510 0x1F104F73
[3.3.5a] 0x008D774C 0x1F104F73
[4.3.4] 0x00A741A8 0x0001BFFF
[5.4.8] 0x00E371D4 0x0001BFFF
[6.2.3] 0x00F8422C 0x00011FFF
[7.2.5] 0x0102FF3C 0x7FF7FFFF
[7.3.5] 0x01252CC0 0x7FF7FFFF
Flag Positions
Throughout all the years of development the list of available Enables and their respective positions has changed a lot. Certain Bits might not have any effect at all or their purpose hasn't been determined yet. A video explaining each flag for 3.3.5a can be found here.
[1.12.1] 0x00000001 PixelShaders 0x00000002 Specular 0x00000004 MapObjectTextures 0x00000008 0x00000010 0x00000020 ShowQuery 0x00000040 MapObjectLighting 0x00000080 PortalDisplay 0x00000100 TerrainLowDetail 0x00000200 TerrainShadows 0x00000400 TriangleStrips 0x00000800 TerrainLOD 0x00001000 TerrainDoodadCollisionVisuals 0x00002000 TerrainDoodadAABoxVisuals 0x00004000 0x00008000 TrilinearFiltering 0x00010000 FootPrints 0x00020000 Water 0x00040000 Anisotropic 0x00080000 WaterParticulates 0x00100000 0x00200000 TerrainCulling 0x00400000 PortalVisual 0x00800000 DoodadAnimation 0x01000000 CrappyBatches 0x02000000 BSPRender 0x04000000 MapObjects 0x08000000 Terrain 0x10000000 TerrainDoodads 0x20000000 DisableDoodadFullAlpha 0x40000000 DetailDoodads 0x80000000 ZoneBoundaryVisuals
[3.3.5a] 0x00000001 M2 0x00000002 Terrain 0x00000004 0x00000008 0x00000010 0x00000020 Terrain Culling 0x00000040 M2 / WMO Shadows 0x00000080 0x00000100 WMO 0x00000200 WMO Lighting 0x00000400 Footprints 0x00000800 WMO Textures 0x00001000 WMO Portals 0x00002000 Occluders 0x00004000 M2 Fade 0x00008000 0x00010000 0x00020000 0x00040000 0x00080000 0x00100000 Ground Clutter 0x00200000 Collision 0x00400000 0x00800000 0x01000000 Liquid Surface 0x02000000 Liquid Particles 0x04000000 Mountains 0x08000000 Specular Lighting 0x10000000 RenderObject Shadows 0x20000000 Wireframe 0x40000000 Normals 0x80000000
[6.0.1] 0x00000001 showDoodads 0x00000002 showTerrain 0x00000004 0x00000008 0x00000010 showShadow 0x00000020 showMapObjs 0x00000040 showFootPrints 0x00000080 showDetailDoodads 0x00000100 showLowDetail 0x00000200 showWater 0x00000400 showParticulates 0x00000800 projectedTextures 0x00001000 occlusion 0x00002000 0x00004000 0x00008000 terrainTextureLod 0x00010000 hardware PCF 0x00020000 0x00040000 0x00080000 0x00100000 showPortals 0x00200000 showCollision 0x00400000 showOccluders 0x00800000 showTerrainOccluders 0x01000000 showChunkBatches 0x02000000 debugShowZoneBounds 0x04000000 showQuery 0x08000000 showTris 0x10000000 showNormals 0x20000000 showFlightBounds 0x40000000 terrainHoles 0x80000000
WoW Alpha 0.5.3
This version is quite special in terms of Enables, as some rendering flags don't exist in Vanilla and beyond. One great thing about these Enables is, that they can be used to illuminate some parts of WoW that weren't illumated properly, like Dun Garok.