Skip to content
lsl.devlsl.devLSL Dev

LlSetText

Looking for the current API? Open the llSetText reference →

Wiki description

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

Caveats

  • 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 text Second 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:
Good Bad
    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.

Examples

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').

String escape codes:

LSL has four string escape codes:
  • \n for a new line
  • \\ for a backslash
  • \t for a tab
  • \" for a double-quote

Color & Alpha

Color Code
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);
    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);

Multiple lines

//  two lines of orange text

    llSetText("I am\non two lines!", <1.0, 0.4, 0.0>, 1.0);

Helper functions

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:
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);
    }
}

Notes

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

See also: articles

Shared wiki helpers

The original page also injects shared parameter notes, caveats or issue information through these helpers. Their conditional MediaWiki logic is not reproduced here; inspect the preserved helper source for additional material.

Template::PRIM TEXT

Template:Issues/SVC-4539

Original shared helper source (conditional wiki logic is not evaluated)
{{Issues|SVC-4539|[[llSetText]] is not working with special characters.|type=bug|status=res}}

Template:Issues/BUG-11077

Original shared helper source (conditional wiki logic is not evaluated)
{{Issues|BUG-11077|Set Floating Text Colour and Alpha Only|type=nf}}
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.