Skip to content
lsl.devlsl.devLSL Dev

llSetText

function
Function syntax
llSetText(
  1. string text,// Floating text string to display.
  2. vector color,// Color vector in RGB <R, G, B> (values from 0.0 to 1.0).
  3. float alpha// Transparency value to set, from 0.0 (clear) to 1.0 (solid).
);
Energy
10

Displays text that hovers over the prim with specific color and translucency (specified with alpha).

How to use
llSetText("", ZERO_VECTOR, 0.0);
  • If more than one llSetText is called (By reset,interaction or script state) within a prim the latest call will take priority over the previous.
  • text is limited to 254 bytes (compare Limits) in UTF-8 encoding. If the string is longer it will be truncated to 254 bytes, and any multibyte characters getting split will be removed entirely.
  • An unbroken line of text of a great length may be broken automatically into two lines (one above the other).
  • text can be seen through walls and other object. Be considerate of neighbors in malls and apartment buildings.
  • Visibility distance increases with prim size.
  • Removing the script or deactivating it will not remove a prim’s text property. Floating text is not dependent on a script for its continued existence but only when wanting to change it.
  • To remove a prim’s text, use the following:
Preferred method to remove a prim’s floating textSecond method does the same effect-wise.
// empty string & black & transparent
llSetText("", ZERO_VECTOR, 0);
// empty string & black & transparent
llSetText("", <0.0, 0.0, 0.0>, 0.0);
  • Vertical whitespace is removed from the end of the text string, so if you want vertical whitespace put any character (like a space) on the last line.
  • Multiple linebreaks with empty lines are converted to a single linebreak, so add a whitespace character on every line you want to skip:
GoodBad
vector COLOR_WHITE = <1.0, 1.0, 1.0>;
float OPAQUE = 1.0;
llSetText("Monkeys\n \n \n \n \n ", COLOR_WHITE, OPAQUE);
vector COLOR_WHITE = <1.0, 1.0, 1.0>;
float OPAQUE = 1.0;
llSetText("Monkeys\n\n\n\n\n", COLOR_WHITE, OPAQUE);
  • Measurements showed a high impact of process time when doing numerous iterations in a while loop. For approx. 65 thousand iterations the process times are ca. 5 seconds without floating text, 24 seconds with llSetText and 96 seconds when using llSetPrimitiveParams in combination with PRIM_TEXT. Thats why you are not advised to make excessive use of changing a prim’s text within such iterations.
Example of how llSetText could be used to show prim’s name in green text:
default
{
state_entry()
{
vector COLOR_GREEN = <0.0, 1.0, 0.0>;
float OPAQUE = 1.0;
// prim's name (not necessarily object's)
llSetText(llGetObjectName(), COLOR_GREEN, OPAQUE );
// delete the script as we only needed it to change the floating text property
llRemoveInventory(llGetScriptName());
}
}
By default the floating text will appear on a single line. However, it can be spread over multiple lines by using a line break "\n" (read SplitLine in section ‘See Also’).

LSL has four string escape codes:

  • \n for a new line
  • \\ for a backslash
  • \t for a tab
  • \" for a double-quote
ColorCode
NAVY<0.000, 0.122, 0.247>
BLUE<0.000, 0.455, 0.851>
AQUA<0.498, 0.859, 1.000>
TEAL<0.224, 0.800, 0.800>
OLIVE<0.239, 0.600, 0.439>
GREEN<0.180, 0.800, 0.251>
LIME<0.004, 1.000, 0.439>
YELLOW<1.000, 0.863, 0.000>
ORANGE<1.000, 0.522, 0.106>
RED<1.000, 0.255, 0.212>
MAROON<0.522, 0.078, 0.294>
FUCHSIA<0.941, 0.071, 0.745>
PURPLE<0.694, 0.051, 0.788>
WHITE<1.000, 1.000, 1.000>
SILVER<0.867, 0.867, 0.867>
GRAY<0.667, 0.667, 0.667>
BLACK<0.000, 0.000, 0.000>

The x, y & z components of the vector are used to represent red, green, and blue respectively. The range is different from traditional RGB, instead of being 0 -> 255, LSL uses 0 -> 1. <1.0, 1.0, 1.0> represents “white” and <0.0, 0.0, 0.0> represents “black”:

// white & opaque
llSetText("I am white", <1.0, 1.0, 1.0>, 1.0);
Example 3
vector myColor;// defaults to ZERO_VECTOR or <0.0, 0.0, 0.0> which is black
llSetText("I am black and 30% transparent.", myColor, 0.7);
llSleep(7.5); // before: <0.0, 0.0, 0.0> black
myColor.x = 1.0;// now: <1.0, 0.0, 0.0> red
llSetText("I am now red and 10% transparent.", myColor, 0.9);
If alpha is 1.0 it means the text is fully opaque (alpha), 0.0 would make it completely transparent (invisible):
llSetText("green text with alpha 0.7", <0.0, 1.0, 0.0>, 0.7);
llSetText("white text with alpha 0.4\n60% transparent", <1.0, 1.0, 1.0>, 0.4);
llSetText("white text with alpha 1.0\nfully opaque", <1.0, 1.0, 1.0>, 1.0);
// next to lines have the same effect
llSetText("invisible black text with alpha 0.0\nfully transparent", ZERO_VECTOR, 0);
llSetText("invisible black text with alpha 0.0\nfully transparent", <0.0, 0.0, 0.0>, 0.0);
Example 5
// two lines of orange text
llSetText("I am\non two lines!", <1.0, 0.4, 0.0>, 1.0);

Drag this script out of inventory onto an object to erase its set text:

// http://wiki.secondlife.com/wiki/llSetText
default
{
state_entry()
{
// remove floating text (empty string & black & 100% transparent)
llSetText("", ZERO_VECTOR, 0.0);
// delete the script as we only needed it to change the floating text property
llRemoveInventory(llGetScriptName());
}
}

Code to easily specify appearance of hovertext:

24 collapsed lines
vector NAVY = <0, 0.122, 0.247>;
vector BLUE = <0, 0.455, 0.851>;
vector AQUA = <0.498, 0.859, 1 >;
vector TEAL = <0.224, 0.8, 0.8 >;
vector OLIVE = <0.239, 0.6, 0.439>;
vector GREEN = <0.18, 0.8, 0.251>;
vector LIME = <0.004, 1 , 0.439>;
vector YELLOW = <1 , 0.863, 0 >;
vector ORANGE = <1 , 0.522, 0.106>;
vector RED = <1 , 0.255, 0.212>;
vector MAROON = <0.522, 0.078, 0.294>;
vector FUCHSIA = <0.941, 0.071, 0.745>;
vector PURPLE = <0.694, 0.051, 0.788>;
vector WHITE = <1 , 1 , 1 >;
vector SILVER = <0.867, 0.867, 0.867>;
vector GRAY = <0.667, 0.667, 0.667>;
vector BLACK = <0.000, 0.000, 0.000>;
string hoverText = "TEXT GOES HERE";
vector hoverColor = LIME;// set predefined color or any RGB color vector in float form
float hoverAlpha = 1.0; // Sets the text's transparency, 1.0 being opaque, while 0.0 would be transparent
default
{
state_entry()
{
llSetText(hoverText, hoverColor, hoverAlpha);
}
}

To make hovertext when using linked prims you can use this simple function:

mySetLinkText(integer linknum, string text, vector color, float alpha) {
llSetLinkPrimitiveParamsFast(linknum, [PRIM_TEXT, text, color, alpha]);
}
// For example:
default
{
touch_start(integer total_number)
{
mySetLinkText(LINK_SET, "TEST", <0, 1, 0>, 0.5);
}
}

To actually display text on a prim, see XyzzyText, or consider using parcel prim Media options (useful only if you have control over the land’s media settings.)


The function displays text that hover over the prim’s center, the prim position. The height over the center is proportional to the prim’s Z-dimension exclusively

  • It doesn’t matter how the prim is rotated, so if Z is smaller than X and Y the text may be seen on the prim

From the issue templates included by the wiki article:

  • SVC-4539 (bug): llSetText is not working with special characters.
  • BUG-11077 (nf): Set Floating Text Colour and Alpha Only
  • Examples: SplitLine — Insert ‘new line’ escape codes at certain positions of a string
  • Useful snippet: llGetObjectPermMask — Label an object with text and newlines to give away or sell
  • escape codes — for details on how and when they work
Original wiki source

Some wiki templates and tables need their original context. View this article on the Second Life Wiki. Technical wording and examples are retained from the source; historical guidance may differ from current behavior.