Did you try using the lua registerHookFunction for forcing text position?
& narration text is not linked to your character hence why you have to set the position for each one you create. But if you use the hookFunction then you can leave narration text positions at 0,0 & it will sort it out itself automatically.
local pos
function adaptedTextPosition(text)
if text:getLink(VTextOwner):isEmpty() then
pos = {x = game.ScrollPosition.x + (game.WindowResolution.x / 2), y = game.ScrollPosition.y + (game.WindowResolution.y - 50)}
text:setValue(VTextPosition, pos)
return true
end
return false
end
registerHookFunction("setTextPosition", "adaptedTextPosition")
-- it automatically centers text to center of x based on current scroll position & it offsets y by 50 pixels from bottom of viewport based on current scroll position.
This is automatically applied to all displayed text started with the display narration text action part.
There is also an hook available for positioning action text too.
P.S: I almost forgot to mention that the script (above) should be added as a definition script to the script section of the engine. Scripts are definition by default when you create them, so just create a new script & copy/paste the script from the code block above into it.