Enables

From wowdev
Revision as of 12:45, 22 May 2020 by Karliky (talk | contribs) (Created page with "'''Enables''' are how WoW rendering engine controls how the world is painted into your screen. We call it '''Enables''' because that's what the reverse engineering suggests. A...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

Enables are how WoW rendering engine controls how the world is painted into your screen. We call it Enables because that's what the reverse engineering suggests. Altough you may see it called "rendering flags" too.

This is how a normal render pipeline works for any WoW version (pseudocode).

Wow.exe-> StormStaticEntryPoint
Wow.exe-> OnPaint
Wow.exe-> PaintScreen 
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

So as you can see, the stars, planets, clouds and environment stuff is first painted, 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) as the last step.

You should know that poking these Enables may crash your client, specially in early versions of the game (alpha, vanilla, tbc)


The following list of addreses can be used to find Enables in the mentioned versions:

['0.5.3']:
renderFlags: 0xA4046C,
renderFlagsDefault: 0x07104B73
['0.8.0']:
renderFlags: 0xA96C30,
renderFlagsDefault: 0x1F900B77
['1.1.2']:
renderFlags: 0x69FE7C,
renderFlagsDefault: 0x1F110F77
['1.8.0']:
renderFlags: 0x7EC93C,
renderFlagsDefault: 0x9F110F77
['1.12.0']:
renderFlags: 0x87B2A4,
renderFlagsDefault: 0x9F910F77
['2.4.3']:
renderFlags: 0x9A4510,
renderFlagsDefault: 0x1F104F73
['3.3.5a']:
renderFlags: 0x8D774C,
renderFlagsDefault: 0x1F104F73
['4.3.4']:
renderFlags: 0xA741A8,
renderFlagsDefault: 0x0001BFFF
['5.4.8']:
renderFlags: 0xE371D4,
renderFlagsDefault: 0x0001BFFF
['6.2.3']:
renderFlags: 0xF8422C,
renderFlagsDefault: 0x00011FFF
['7.2.5']:
renderFlags: 0x102FF3C,
renderFlagsDefault: 0x7FF7FFFF
['7.3.5']:
renderFlags: 0x1252CC0,
renderFlagsDefault: 0x7FF7FFFF

Where renderFlags is the location of Enables in the memory (WoW.exe + renderFlags) and renderFlagsDefault is the default value for that version, just in case you have to reset it.

Depending on the WoW version you may see a different rendering mode as none all modes are supported in all the clients. And in all years of development these have evolved for obviously reasons.

WoW Alpha 0.5.3 is quite special on how Enables work, as you may see some rendering flags that doesn't exist in Vanilla and above.

M2 Collision Boxes