pain images are an 'emote'
which are played through the function
player::emote(%pl,%data,%spamOverride)
if %data is an image (ie pain images) they are mounted to slot 3
if a player datablock has a field set to true named "useCustomPainEffects"
and has valid %db.painHighImage / %db.painMidImage / %db.painLowImage
it will use those pain images instead
if a datablock does not have a valid image / projectile under one of the 3 datablock pain Images no pain image will be emitted
One thing that works as a workaround for reserved emitter slots is just spawning the emitter at the player's hack transform and having it move every 33 ms until it ends. That way the slot can be used for armors and other mounted images
this would probably look rather stuffty even from the hosts point of view let alone the clients with client prediction and all that jazz
if you really want a good hacky work around
mount an invisible bot with no model to the player an mount an image to that bot