Change Text Position

From The Official Visionaire Studio: Adventure Game Engine Wiki
Revision as of 15:37, 28 August 2023 by EK (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Name Type By
Change text Position Definition Various


This script sets (character or narration) text to a fixed position on screen.


Instructions

Visionaire offers a function hook for changing the text position. You find some examples on how to implement it below, but the script you need depends on which texts you want to handle and where you want to place them.

Add one of the scripts to the Visionaire Studio Script Editor, set the script as a definition script and change it according to your needs.


Scripts

Basic setup

This basic example shows how to set up the hook function. It handles character and narration texts.

-- Hook function
function txtPos(text)
  -- Define the new text position
  text.Position = {x = 300, y = 300}
  
  -- Return true to tell the engine that the text position is handled by this hook function
  return true
end

-- Register the hook function for the "setTextPosition" operation
registerHookFunction("setTextPosition", "txtPos")


Distinguish by owner

Query the owner of the text, if you want to set the text position only for texts spoken by a certain character.

function txtPos(text)
  -- Only handle texts spoken by the character named "hero"
  if text.Owner.name == "hero" then
    text.Position = {x = 300, y = 300}
    
    return true
  end
  
  -- Return false to let the engine ignore the hook function, if the "if" query wasn't met
  return false
end

registerHookFunction("setTextPosition", "txtPos")


Change the query to handle all character texts or all narration texts.

  -- Handle character texts only
  if text.Owner.tableId == eCharacters then
  ...

  -- Only handle narration texts
  if text.Owner.tableId == eGame then
  ...


Scrolling scenes

The text position is defined in relation to the scene, not to the visible screen. So if your scene is larger than the game resolution (and thus scrollable), you have to take the current scroll position into account (this code also works if your scene equals the game resolution of course, because the scroll position is always [0,0] then).

function txtPos(text)
  if text.Owner.tableId == eCharacters then
    -- Define the new text position on the screen
    text.Position = {x = 300 + game.ScrollPosition.x, y = 300 + game.ScrollPosition.y}
 
    return true
  end
  
  return false
end

registerHookFunction("setTextPosition", "txtPos")


This will set the horizontal position to center. Make sure to set the text alignment to "center" in the game properties, too.

  -- Set the text position horizontally centered
   text.Position = {x = game.WindowResolution.x/2 + game.ScrollPosition.x, y = 300 + game.ScrollPosition.y}
  ...