Actually yes he does.. its in the Chaos Lord's ebps code:
GameData["possess_ext"]["requirements"] = Reference([[tables\requirements.lua]])
GameData["possess_ext"]["requirements"]["required_1"] = Reference([[requirements\required_research.lua]])
GameData["possess_ext"]["requirements"]["required_1"]["hide_the_button_when_failed"] = false
GameData["possess_ext"]["requirements"]["required_1"]["is_display_requirement"] = false
GameData["possess_ext"]["requirements"]["required_1"]["research_must_not_be_complete"] = false
GameData["possess_ext"]["requirements"]["required_1"]["research_name"] = "research\\chaos_daemon_prince_research.lua"
GameData["possess_ext"]["requirements"]["required_10"] = Reference([[requirements\required_structure.lua]])
GameData["possess_ext"]["requirements"]["required_10"]["is_display_requirement"] = true
GameData["possess_ext"]["requirements"]["required_10"]["structure_name"] = "ebps\\races\\chaos\\structures\\chaos_hq.lua"
GameData["possess_ext"]["requirements"]["required_11"] = Reference([[requirements\required_none.lua]])
GameData["possess_ext"]["requirements"]["required_11"]["is_display_requirement"] = false
GameData["possess_ext"]["requirements"]["required_2"] = Reference([[requirements\required_none.lua]])
GameData["possess_ext"]["requirements"]["required_2"]["is_display_requirement"] = false
GameData["possess_ext"]["requirements"]["required_3"] = Reference([[requirements\required_none.lua]])
GameData["possess_ext"]["requirements"]["required_3"]["is_display_requirement"] = false
GameData["possess_ext"]["requirements"]["required_4"] = Reference([[requirements\required_none.lua]])
GameData["possess_ext"]["requirements"]["required_4"]["is_display_requirement"] = false
GameData["possess_ext"]["requirements"]["required_5"] = Reference([[requirements\required_none.lua]])
GameData["possess_ext"]["requirements"]["required_5"]["is_display_requirement"] = false
GameData["possess_ext"]["requirements"]["required_6"] = Reference([[requirements\required_none.lua]])
GameData["possess_ext"]["requirements"]["required_6"]["is_display_requirement"] = false
GameData["possess_ext"]["requirements"]["required_7"] = Reference([[requirements\required_none.lua]])
GameData["possess_ext"]["requirements"]["required_7"]["is_display_requirement"] = false
GameData["possess_ext"]["requirements"]["required_8"] = Reference([[requirements\required_none.lua]])
GameData["possess_ext"]["requirements"]["required_8"]["is_display_requirement"] = false
GameData["possess_ext"]["requirements"]["required_9"] = Reference([[requirements\required_none.lua]])
GameData["possess_ext"]["requirements"]["required_9"]["is_display_requirement"] = false
GameData["possess_ext"]["research_to_revert"] = "chaos_daemon_prince_research"
GameData["possess_ext"]["show_possession_ui_button"] = true
GameData["possess_ext"]["squad_replacement_name"] = "chaos_squad_daemon_prince"
That was introduced in Dark Crusade. Its the same exact code as the Necron Lord uses:
GameData["possess_ext"]["requirements"] = Reference([[tables\requirements.lua]])
GameData["possess_ext"]["requirements"]["required_1"] = Reference([[requirements\required_research.lua]])
GameData["possess_ext"]["requirements"]["required_1"]["hide_the_button_when_failed"] = false
GameData["possess_ext"]["requirements"]["required_1"]["is_display_requirement"] = false
GameData["possess_ext"]["requirements"]["required_1"]["research_must_not_be_complete"] = false
GameData["possess_ext"]["requirements"]["required_1"]["research_name"] = "research\\necron_ctan_research.lua"
GameData["possess_ext"]["requirements"]["required_10"] = Reference([[requirements\required_none.lua]])
GameData["possess_ext"]["requirements"]["required_10"]["is_display_requirement"] = false
GameData["possess_ext"]["requirements"]["required_11"] = Reference([[requirements\required_none.lua]])
GameData["possess_ext"]["requirements"]["required_11"]["is_display_requirement"] = false
GameData["possess_ext"]["requirements"]["required_2"] = Reference([[requirements\required_none.lua]])
GameData["possess_ext"]["requirements"]["required_2"]["is_display_requirement"] = false
GameData["possess_ext"]["requirements"]["required_3"] = Reference([[requirements\required_none.lua]])
GameData["possess_ext"]["requirements"]["required_3"]["is_display_requirement"] = false
GameData["possess_ext"]["requirements"]["required_4"] = Reference([[requirements\required_none.lua]])
GameData["possess_ext"]["requirements"]["required_4"]["is_display_requirement"] = false
GameData["possess_ext"]["requirements"]["required_5"] = Reference([[requirements\required_none.lua]])
GameData["possess_ext"]["requirements"]["required_5"]["is_display_requirement"] = false
GameData["possess_ext"]["requirements"]["required_6"] = Reference([[requirements\required_none.lua]])
GameData["possess_ext"]["requirements"]["required_6"]["is_display_requirement"] = false
GameData["possess_ext"]["requirements"]["required_7"] = Reference([[requirements\required_none.lua]])
GameData["possess_ext"]["requirements"]["required_7"]["is_display_requirement"] = false
GameData["possess_ext"]["requirements"]["required_8"] = Reference([[requirements\required_none.lua]])
GameData["possess_ext"]["requirements"]["required_8"]["is_display_requirement"] = false
GameData["possess_ext"]["requirements"]["required_9"] = Reference([[requirements\required_none.lua]])
GameData["possess_ext"]["requirements"]["required_9"]["is_display_requirement"] = false
GameData["possess_ext"]["research_to_revert"] = ""
GameData["possess_ext"]["show_possession_ui_button"] = true
GameData["possess_ext"]["squad_replacement_name"] = ""
GameData["possess_ext"]["squad_replacement2_name"] = "necron_night_bringer"
GameData["possess_ext"]["squad_replacement3_name"] = "necron_deceiver_squad"
There are a few user faction mods that used this code for a while and using the DoPossess as follows in their tactic file:
function DeathGuardLordTactic:DoAbilities()
-- Try to possess and become Daemon Prince
if (self.squad_ai:IsInCombat() and self.squad_ai:CanPossess()) then
self.squad_ai:DoPossess()
end
This is the code Arkhan used for the NL back in DarkCrusade before Relic screwed it due to not having exported function for DoPossess() when the user has 2 options for a possession rather than just one. The above code works 100% more reliably and causes the AI to immediately possess a unit when the prereqs are satisfied (and in combat).