<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ravenous+Dingo</id>
	<title>Second Life Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.secondlife.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Ravenous+Dingo"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Ravenous_Dingo"/>
	<updated>2026-07-28T09:50:38Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=RavText&amp;diff=824512</id>
		<title>RavText</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=RavText&amp;diff=824512"/>
		<updated>2010-03-25T02:25:24Z</updated>

		<summary type="html">&lt;p&gt;Ravenous Dingo: Undo revision 824502 by Ravenous Dingo (Talk) Undid my change because I did not look at the alternate 5 face prim provided.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
RavText&lt;br /&gt;
A lightweight, multi font, text-on-a-prim display system&lt;br /&gt;
Version 1.0(3) &lt;br /&gt;
&lt;br /&gt;
License:  This is licensed under the terms of the Lesser GPL (LGPL).&lt;br /&gt;
&lt;br /&gt;
This is yet another 10 character display using a 5 faced prim. It does not, however, use any part of the popular [[XyText]] series of scripts.  It is 100% home grown.  It is meant for specialized usage: specifically when one desires a very lightweight script for displaying 10 character basic alphanumeric text.  While it could be expanded to accommodate more characters rather easily, at the moment it just does uppercase alphanumeric plus a few special characters. &lt;br /&gt;
&lt;br /&gt;
The functionality of RavText is limited compared to other text systems, but does have some advantages.  it is definitely not suitable for every application.  Here are the advantages and drawbacks of RavText compared to other systems:&lt;br /&gt;
&lt;br /&gt;
DISADVANTAGES:&lt;br /&gt;
&lt;br /&gt;
1. Limited character set.  Uppercase alphanumeric characters and a few special characters (namely &amp;quot; !@#$%&amp;amp;()&amp;quot;) are supported.  (However, it could easily be expanded to use larger character sets with a few minor modifications and the right texture maps).&lt;br /&gt;
&lt;br /&gt;
2. Lack of special effects or a robust display system.  There are no fade in / fade out effects or any sort of color control, although there is nothing preventing someone from adding them.&lt;br /&gt;
&lt;br /&gt;
3. Currently, the textures can give an annoying flicker under some circumstances when viewed at certain angles on certain displays.&lt;br /&gt;
&lt;br /&gt;
4. Needs some manual configuration when using more than one 5 prim display.  There is no link scanner or any other utility built in.  Individual prims must have their own script and that script must be preconfigured by hand (although it does not take much effort to do so).&lt;br /&gt;
&lt;br /&gt;
5. Not very well commented or documented.  Meh, I&#039;m lazy.&lt;br /&gt;
&lt;br /&gt;
ADVANTAGES:&lt;br /&gt;
&lt;br /&gt;
1. Very lightweight &amp;amp; efficient.  The script is relatively simple, and fast.  It attempts to keep CPU usage to a minimum.&lt;br /&gt;
&lt;br /&gt;
2. &amp;quot;Rezzes&amp;quot; faster.  Partly because of the limited character set, RavText only uses 8 textures per character map, as opposed to the 60+ textures used by XyText derivitives. This tends to result in textures rezzing much faster, and staying in the cache more frequently.  NOTE:  If RavText supported 128 characters instead of the current 45, it would require 64 textures.  This is one of the main reasons I decided to go with uppercase only. I wanted quick rendering basic text.&lt;br /&gt;
&lt;br /&gt;
3. Flexible.  While this version is configured for the standard 5 face configuration, it can be modified to accommodate almost any primface configuration by just editing a few lists.&lt;br /&gt;
&lt;br /&gt;
3. Supports multiple fonts.  Due to the low number of textures required to map the limited RavText character set, it was easy to generate additional display fonts.  Currently, there are 6 possible fonts.&lt;br /&gt;
&lt;br /&gt;
BASIC CONFIGURATION AND CONCEPTS:&lt;br /&gt;
&lt;br /&gt;
RavText uses the variables &amp;quot;panelnum&amp;quot;  and &amp;quot;subpanel&amp;quot; to tell it where it is in your display system.  Each panel is considered to be its own unit and is composed of subpanels. For example, if you wanted to have two blocks of text, each 20 characters long, you would have two panels, each with two subpanels.  Subpanels should be numbered left to right starting with 0.  So text block #1 would be panel 0, with subpanel 0 and 1.  text block 2 would be panel 1, with subpanels 0 and 1 as well.&lt;br /&gt;
&lt;br /&gt;
To set the text on a specific panel, you set the key attribute of a linked message to be &amp;quot;7A&amp;quot;, set the string attribute to be whatever string you want to display.  You would set the number to be 2 raised to the power of the panel number.  You can use -1 to display on all panels.&lt;br /&gt;
&lt;br /&gt;
To change the font, set the key attribute of the link message to be &amp;quot;7F&amp;quot;, set the integer value to be 2 raised to the panel number (or -1 for all panels) and the string to be the font number you want to use (fonts are numbered 0 to 5).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BASIC USAGE:&lt;br /&gt;
&lt;br /&gt;
1. Make a 5 face prim, just like the ones used with current XyText versions. Instructions detailed below.&lt;br /&gt;
&lt;br /&gt;
2. Put the RavText script in the prim.&lt;br /&gt;
&lt;br /&gt;
3. To display text, send a link message to the prim thusly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;TEST MSG!&amp;quot;, &amp;quot;7A&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The value &amp;quot;7A&amp;quot; is the command to display a string of text.  The value -1 basically means all panels.&lt;br /&gt;
&lt;br /&gt;
OK, next lets make a two panel display.  It will display up to 20 characters.&lt;br /&gt;
&lt;br /&gt;
1. make two 5 faced prims. Instructions for a 5 faced prim that works for this are given below.&lt;br /&gt;
&lt;br /&gt;
2. Put RavText scripts in each prim&lt;br /&gt;
&lt;br /&gt;
3. Set the subpanel variable on the rightmost display prim to be 1.  Leave the other subpanel value at 0.&lt;br /&gt;
&lt;br /&gt;
4. Once again, send the link message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;TEST MSG! EXPANDED!&amp;quot;, &amp;quot;7A&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change the font, send the following link message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;3&amp;quot;, &amp;quot;7F&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are a lot more examples I could give, but for now I will leave it as is.  I will try to update this page as I can. &lt;br /&gt;
&lt;br /&gt;
AND NOW, THE CODE:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// RavText&lt;br /&gt;
// Version 1.0(3)&lt;br /&gt;
// Created 2008-09-18&lt;br /&gt;
// A lightweight 10 char / prim text generation system with multiple font support&lt;br /&gt;
// Created by Ravenous Dingo&lt;br /&gt;
// Copyright 2008 owned by the person controlling the Second Life avatar named Ravenous Dingo&lt;br /&gt;
// This code is hereby released under the terms of the LGPL (Lesser GPL) license&lt;br /&gt;
// Associated textures are hereby released to the public domain&lt;br /&gt;
&lt;br /&gt;
float panelnum=0.; // Panels are groups of prims that work as one block of text&lt;br /&gt;
&lt;br /&gt;
integer subpanel=0; // sub panel is the position within the panel block&lt;br /&gt;
&lt;br /&gt;
integer default_font=0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
list fontmap=[&lt;br /&gt;
&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
list corner_map=[&lt;br /&gt;
                    &amp;lt;-0.4225, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.4675, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.807, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.4675, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.515, 0.4675, 0&amp;gt;&lt;br /&gt;
                    ];&lt;br /&gt;
list rep_map=[&lt;br /&gt;
                &amp;lt;0.1525, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.0625, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;-1.0, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.0625, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.155, 0.0625, 0&amp;gt;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
list face_map=[ 3, 7, 4, 6, 1 ];&lt;br /&gt;
&lt;br /&gt;
list cur_texmap=[];&lt;br /&gt;
&lt;br /&gt;
integer numfaces=0;&lt;br /&gt;
&lt;br /&gt;
integer start_idx=0;&lt;br /&gt;
&lt;br /&gt;
string alphamap=&amp;quot; 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%&amp;amp;()&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
integer bitmask=0;&lt;br /&gt;
key kravtext_cmd=&amp;quot;7A&amp;quot;;&lt;br /&gt;
key ksetfont_cmd=&amp;quot;7F&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vector base_offset=&amp;lt;-0.4675, 0.4675, 0&amp;gt;;&lt;br /&gt;
float increment=0.0625;&lt;br /&gt;
&lt;br /&gt;
integer mod=0;&lt;br /&gt;
integer curfont=-1;&lt;br /&gt;
list param=[];&lt;br /&gt;
&lt;br /&gt;
integer indexAlpha(string str)&lt;br /&gt;
{&lt;br /&gt;
    integer idx=llSubStringIndex(alphamap, str);&lt;br /&gt;
    if (idx == -1)&lt;br /&gt;
    {&lt;br /&gt;
        idx=0;&lt;br /&gt;
    }&lt;br /&gt;
    return idx;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
init()&lt;br /&gt;
{&lt;br /&gt;
    composeFonts();&lt;br /&gt;
    mod=llStringLength(alphamap);&lt;br /&gt;
    numfaces=llGetListLength(face_map);&lt;br /&gt;
    bitmask=llRound(llPow(2.,panelnum));&lt;br /&gt;
    start_idx=subpanel * numfaces * 2;&lt;br /&gt;
    loadFont(default_font);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loadFont(integer fontnum)&lt;br /&gt;
{&lt;br /&gt;
    if (fontnum == curfont)&lt;br /&gt;
    {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    list tmp_font=llList2List(fontmap, fontnum * 8, (fontnum * 8) + 7);&lt;br /&gt;
&lt;br /&gt;
    integer i=0;&lt;br /&gt;
    string tfont=&amp;quot;&amp;quot;;&lt;br /&gt;
    integer tfnum=0;&lt;br /&gt;
    integer tidx=0;&lt;br /&gt;
    if (llGetListLength(param) != 0)&lt;br /&gt;
    {&lt;br /&gt;
        for (i=0; i &amp;lt; numfaces; i++)&lt;br /&gt;
        {&lt;br /&gt;
            tidx=(i * 6) + 2;&lt;br /&gt;
            tfont=llList2String(param, tidx);&lt;br /&gt;
            // now find the font index;&lt;br /&gt;
            tfnum=llListFindList(cur_texmap, [tfont]);&lt;br /&gt;
            // get the new font&lt;br /&gt;
            tfont=llList2String(tmp_font, tfnum);&lt;br /&gt;
            // and replace it&lt;br /&gt;
            param=llListReplaceList(param,  [tfont], tidx, tidx);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    curfont=fontnum;&lt;br /&gt;
    cur_texmap=tmp_font;&lt;br /&gt;
    llSetPrimitiveParams(param);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
composeFonts()&lt;br /&gt;
{&lt;br /&gt;
    list sysfixed=[&lt;br /&gt;
                &amp;quot;df574f09-061c-d3fe-07eb-3d0008271bc4&amp;quot;,&lt;br /&gt;
                &amp;quot;ace8bde9-b93e-d667-c03c-45ce826c955d&amp;quot;,&lt;br /&gt;
                &amp;quot;f7c99d89-ff0b-059e-3e3b-625d71799f19&amp;quot;,&lt;br /&gt;
                &amp;quot;eb3e7fea-60f6-6335-a7da-5d0e7dbed0bf&amp;quot;,&lt;br /&gt;
                &amp;quot;627a4675-4db8-f473-b16a-27aeb42e2b6f&amp;quot;,&lt;br /&gt;
                &amp;quot;aa14726b-fab8-7802-cc23-f118455f4354&amp;quot;,&lt;br /&gt;
                &amp;quot;d7808242-a2da-e144-3338-6b005671e6e6&amp;quot;,&lt;br /&gt;
                &amp;quot;60d062d7-b60f-220d-f9dd-189596a796d2&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
    list OCR_A=[&lt;br /&gt;
                &amp;quot;6d788259-709e-cc72-98b4-4ec56986a958&amp;quot;,&lt;br /&gt;
                &amp;quot;c74622f7-5740-1e5f-2a64-69060bf2742e&amp;quot;,&lt;br /&gt;
                &amp;quot;ffa88837-7f13-dbb3-e28c-2e969b9b4737&amp;quot;,&lt;br /&gt;
                &amp;quot;9127b5d8-459f-7d2c-2b3b-2b6c740de94a&amp;quot;,&lt;br /&gt;
                &amp;quot;894d4fc7-6c3c-954c-e7c9-94c687a1ac62&amp;quot;,&lt;br /&gt;
                &amp;quot;f529f498-be68-f5bd-2464-34e5bb4a8cdb&amp;quot;,&lt;br /&gt;
                &amp;quot;b645eb2c-57eb-a420-afbe-cba49bd298d8&amp;quot;,&lt;br /&gt;
                &amp;quot;bf8541e1-d875-96a6-adc3-fbdd38c41f2a&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
    list profont=[&lt;br /&gt;
                &amp;quot;9e83c094-58b1-8375-192f-2e0ef0f06d91&amp;quot;,&lt;br /&gt;
                &amp;quot;fcd34765-3c58-c1df-2c5e-5e96d1491c0c&amp;quot;,&lt;br /&gt;
                &amp;quot;fd232e50-9ed5-3cc0-345e-b08154b9bf97&amp;quot;,&lt;br /&gt;
                &amp;quot;10c5ab5f-49cb-ff40-3023-029caa4a4ff1&amp;quot;,&lt;br /&gt;
                &amp;quot;2956334f-79f3-010b-9be7-fc4811d2adae&amp;quot;,&lt;br /&gt;
                &amp;quot;b0277b5b-dfbf-27c3-47c9-3a120881fe64&amp;quot;,&lt;br /&gt;
                &amp;quot;969a1eb3-acbf-8425-1ddd-4f6a81bdbd58&amp;quot;,&lt;br /&gt;
                &amp;quot;409d587d-a374-4a1b-16d5-9c19a9baf83a&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list cour_new=[&lt;br /&gt;
                &amp;quot;e60aa9ab-7f1c-33ec-3408-37c20cce3c76&amp;quot;,&lt;br /&gt;
                &amp;quot;93eb9bef-dafa-9980-5d25-5adb5614ccc3&amp;quot;,&lt;br /&gt;
                &amp;quot;dd584fae-63e2-6f50-4811-a5b14989020a&amp;quot;,&lt;br /&gt;
                &amp;quot;cf4c4265-64a9-fa64-b18e-47c11fc18aa2&amp;quot;,&lt;br /&gt;
                &amp;quot;1c63839f-ebfa-c9e9-2391-98faa059c7a3&amp;quot;,&lt;br /&gt;
                &amp;quot;533279c5-cd44-daa4-b010-cd7c99e48c72&amp;quot;,&lt;br /&gt;
                &amp;quot;c1731907-6627-7463-2cff-dfa4499559bb&amp;quot;,&lt;br /&gt;
                &amp;quot;88e2bd5c-5c6f-6103-c2fb-db958e31d026&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list bs_vera=[&lt;br /&gt;
                &amp;quot;f88d322e-2f8d-c5d9-544c-293e0c5647c1&amp;quot;,&lt;br /&gt;
                &amp;quot;91546531-86b9-87ec-3dec-2072ebb012ad&amp;quot;,&lt;br /&gt;
                &amp;quot;1a545d8d-f14f-32aa-ad96-1abca948a662&amp;quot;,&lt;br /&gt;
                &amp;quot;d78fa62c-301d-fa10-188a-ee5f6ad87777&amp;quot;,&lt;br /&gt;
                &amp;quot;69e53076-8083-975b-31c0-420f1f5658dc&amp;quot;,&lt;br /&gt;
                &amp;quot;1b5ffc88-96e6-03c0-39c0-e38a6fad981a&amp;quot;,&lt;br /&gt;
                &amp;quot;a1511389-1b45-b7fb-1961-fd02ee57e26d&amp;quot;,&lt;br /&gt;
                &amp;quot;474e449e-f2f3-d5ac-1c63-1be922b3b434&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list sheldon=[&lt;br /&gt;
                &amp;quot;2958c0ac-cba6-a02b-da3e-aec050e3714f&amp;quot;,&lt;br /&gt;
                &amp;quot;cb8faeb7-c87e-c57c-448a-53a718adb3c8&amp;quot;,&lt;br /&gt;
                &amp;quot;572ff18e-d319-6213-ca28-202aeb7dc2e8&amp;quot;,&lt;br /&gt;
                &amp;quot;0bfc28e2-788d-035d-1ac1-ce752d90f89c&amp;quot;,&lt;br /&gt;
                &amp;quot;1fe4af1d-d99b-fe28-fba8-0006527c4c5f&amp;quot;,&lt;br /&gt;
                &amp;quot;f7fb5f59-0275-3ee7-9b54-e9a1ae61b76c&amp;quot;,&lt;br /&gt;
                &amp;quot;5e52d02e-edae-bf73-da61-9e1fe4e1801b&amp;quot;,&lt;br /&gt;
                &amp;quot;ff54400e-050c-7f87-cefd-a396c86d24d6&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    fontmap=sysfixed + OCR_A + profont + cour_new + bs_vera + sheldon;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    link_message(integer sender, integer num, string msg, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if ((id == kravtext_cmd) &amp;amp;&amp;amp; (num &amp;amp; bitmask))&lt;br /&gt;
        {&lt;br /&gt;
            param=[]; // create our primitive param list&lt;br /&gt;
            msg=llToUpper(msg); // make everything upper case&lt;br /&gt;
            integer i=0;&lt;br /&gt;
            integer this_idx=0;&lt;br /&gt;
            integer frame=0;&lt;br /&gt;
            integer tnum=0;&lt;br /&gt;
            integer xinc=0;&lt;br /&gt;
            integer yinc=0;&lt;br /&gt;
            integer fx=0;&lt;br /&gt;
            integer fy=0;&lt;br /&gt;
            float xpos=0.;&lt;br /&gt;
            float ypos=0.;&lt;br /&gt;
&lt;br /&gt;
            integer thisface=0;&lt;br /&gt;
            string thistex=NULL_KEY;&lt;br /&gt;
            vector this_rep=&amp;lt;0.,0.,0.&amp;gt;;&lt;br /&gt;
            for (i=0; i &amp;lt; numfaces; i++)&lt;br /&gt;
            {&lt;br /&gt;
                this_idx = start_idx + (i * 2);&lt;br /&gt;
                frame = ( mod * indexAlpha( llGetSubString( msg, this_idx, this_idx ) ) )&lt;br /&gt;
                        + indexAlpha( llGetSubString( msg, this_idx+ 1, this_idx +1 ) );&lt;br /&gt;
                base_offset=llList2Vector(corner_map, i);&lt;br /&gt;
                this_rep=llList2Vector(rep_map, i);&lt;br /&gt;
                thisface=llList2Integer(face_map, i);&lt;br /&gt;
                xinc = frame % 32;&lt;br /&gt;
                yinc = frame / 32;&lt;br /&gt;
                fx = xinc / 16;&lt;br /&gt;
                fy = yinc / 16;&lt;br /&gt;
                tnum=(fy * 2) + fx;&lt;br /&gt;
                thistex=llList2String(cur_texmap, tnum);&lt;br /&gt;
                xinc = xinc - ( 16 * fx );&lt;br /&gt;
                yinc = yinc - ( 16 * fy );&lt;br /&gt;
                xpos=base_offset.x + (increment * (float)xinc);&lt;br /&gt;
                ypos=base_offset.y - (increment * (float)yinc);&lt;br /&gt;
&lt;br /&gt;
                param += [&lt;br /&gt;
                            PRIM_TEXTURE,&lt;br /&gt;
                            thisface,&lt;br /&gt;
                            thistex,&lt;br /&gt;
                            this_rep,&lt;br /&gt;
                            &amp;lt;xpos, ypos, 0&amp;gt;,&lt;br /&gt;
                            0.&lt;br /&gt;
                            ];&lt;br /&gt;
            }&lt;br /&gt;
            llSetPrimitiveParams(param);&lt;br /&gt;
        }&lt;br /&gt;
        else if ((id == ksetfont_cmd) &amp;amp;&amp;amp; (num &amp;amp; bitmask))&lt;br /&gt;
        {&lt;br /&gt;
            integer fnum=(integer)msg;&lt;br /&gt;
            loadFont(fnum);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Because everyone seems to have a slightly different set of settings for their 5 faced prim, and because we don&#039;t have the description of the exact one that was being used in the original script, I have altered the offsets in the script to match with the 5 faced prim detailed below:&lt;br /&gt;
&lt;br /&gt;
1.   Rez a Prism (I used X=0.01,Y=2.5,Z=1.5. Obviously adjust to taste.)&lt;br /&gt;
&lt;br /&gt;
2.   Path cut: Begin 0.2, End 0.8.&lt;br /&gt;
&lt;br /&gt;
3.   Hollow 65, default shape.&lt;br /&gt;
&lt;br /&gt;
4.   Twist, Taper, Top Shear are all default 0.&lt;br /&gt;
&lt;br /&gt;
5.   Slice Begin and end are default 0, and 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RESPONSE TO NOTE: Its not the speed of rendering the text itself - its the speed at which the client renders the textures.  As I mentioned in the advantages / disadvantages, that&#039;s the man reason for using it.  The very fact that it uses fewer characters means it has a smaller texture &amp;quot;footprint&amp;quot; and renders faster overall in clients due to much fewer textures to load.  I think Jor3l Boa is confusing client rendering with script execution time.  Not an uncommon mistake, but it totally misses the entire point of this script lol.  -Rav&lt;br /&gt;
&lt;br /&gt;
RESPONSE TO RESPONSE NOTE: Yes lol, about the font, is there any script to make it or some files to edit?, would be cool if we can make fonts. And yes, is faster to render but less chars, anyway is good :P (noob note removed) -Jor3l&lt;/div&gt;</summary>
		<author><name>Ravenous Dingo</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=RavText&amp;diff=824502</id>
		<title>RavText</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=RavText&amp;diff=824502"/>
		<updated>2010-03-25T02:20:04Z</updated>

		<summary type="html">&lt;p&gt;Ravenous Dingo: changed a setting on the corner map&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
RavText&lt;br /&gt;
A lightweight, multi font, text-on-a-prim display system&lt;br /&gt;
Version 1.0(3) &lt;br /&gt;
&lt;br /&gt;
License:  This is licensed under the terms of the Lesser GPL (LGPL).&lt;br /&gt;
&lt;br /&gt;
This is yet another 10 character display using a 5 faced prim. It does not, however, use any part of the popular [[XyText]] series of scripts.  It is 100% home grown.  It is meant for specialized usage: specifically when one desires a very lightweight script for displaying 10 character basic alphanumeric text.  While it could be expanded to accommodate more characters rather easily, at the moment it just does uppercase alphanumeric plus a few special characters. &lt;br /&gt;
&lt;br /&gt;
The functionality of RavText is limited compared to other text systems, but does have some advantages.  it is definitely not suitable for every application.  Here are the advantages and drawbacks of RavText compared to other systems:&lt;br /&gt;
&lt;br /&gt;
DISADVANTAGES:&lt;br /&gt;
&lt;br /&gt;
1. Limited character set.  Uppercase alphanumeric characters and a few special characters (namely &amp;quot; !@#$%&amp;amp;()&amp;quot;) are supported.  (However, it could easily be expanded to use larger character sets with a few minor modifications and the right texture maps).&lt;br /&gt;
&lt;br /&gt;
2. Lack of special effects or a robust display system.  There are no fade in / fade out effects or any sort of color control, although there is nothing preventing someone from adding them.&lt;br /&gt;
&lt;br /&gt;
3. Currently, the textures can give an annoying flicker under some circumstances when viewed at certain angles on certain displays.&lt;br /&gt;
&lt;br /&gt;
4. Needs some manual configuration when using more than one 5 prim display.  There is no link scanner or any other utility built in.  Individual prims must have their own script and that script must be preconfigured by hand (although it does not take much effort to do so).&lt;br /&gt;
&lt;br /&gt;
5. Not very well commented or documented.  Meh, I&#039;m lazy.&lt;br /&gt;
&lt;br /&gt;
ADVANTAGES:&lt;br /&gt;
&lt;br /&gt;
1. Very lightweight &amp;amp; efficient.  The script is relatively simple, and fast.  It attempts to keep CPU usage to a minimum.&lt;br /&gt;
&lt;br /&gt;
2. &amp;quot;Rezzes&amp;quot; faster.  Partly because of the limited character set, RavText only uses 8 textures per character map, as opposed to the 60+ textures used by XyText derivitives. This tends to result in textures rezzing much faster, and staying in the cache more frequently.  NOTE:  If RavText supported 128 characters instead of the current 45, it would require 64 textures.  This is one of the main reasons I decided to go with uppercase only. I wanted quick rendering basic text.&lt;br /&gt;
&lt;br /&gt;
3. Flexible.  While this version is configured for the standard 5 face configuration, it can be modified to accommodate almost any primface configuration by just editing a few lists.&lt;br /&gt;
&lt;br /&gt;
3. Supports multiple fonts.  Due to the low number of textures required to map the limited RavText character set, it was easy to generate additional display fonts.  Currently, there are 6 possible fonts.&lt;br /&gt;
&lt;br /&gt;
BASIC CONFIGURATION AND CONCEPTS:&lt;br /&gt;
&lt;br /&gt;
RavText uses the variables &amp;quot;panelnum&amp;quot;  and &amp;quot;subpanel&amp;quot; to tell it where it is in your display system.  Each panel is considered to be its own unit and is composed of subpanels. For example, if you wanted to have two blocks of text, each 20 characters long, you would have two panels, each with two subpanels.  Subpanels should be numbered left to right starting with 0.  So text block #1 would be panel 0, with subpanel 0 and 1.  text block 2 would be panel 1, with subpanels 0 and 1 as well.&lt;br /&gt;
&lt;br /&gt;
To set the text on a specific panel, you set the key attribute of a linked message to be &amp;quot;7A&amp;quot;, set the string attribute to be whatever string you want to display.  You would set the number to be 2 raised to the power of the panel number.  You can use -1 to display on all panels.&lt;br /&gt;
&lt;br /&gt;
To change the font, set the key attribute of the link message to be &amp;quot;7F&amp;quot;, set the integer value to be 2 raised to the panel number (or -1 for all panels) and the string to be the font number you want to use (fonts are numbered 0 to 5).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BASIC USAGE:&lt;br /&gt;
&lt;br /&gt;
1. Make a 5 face prim, just like the ones used with current XyText versions. Instructions detailed below.&lt;br /&gt;
&lt;br /&gt;
2. Put the RavText script in the prim.&lt;br /&gt;
&lt;br /&gt;
3. To display text, send a link message to the prim thusly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;TEST MSG!&amp;quot;, &amp;quot;7A&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The value &amp;quot;7A&amp;quot; is the command to display a string of text.  The value -1 basically means all panels.&lt;br /&gt;
&lt;br /&gt;
OK, next lets make a two panel display.  It will display up to 20 characters.&lt;br /&gt;
&lt;br /&gt;
1. make two 5 faced prims. Instructions for a 5 faced prim that works for this are given below.&lt;br /&gt;
&lt;br /&gt;
2. Put RavText scripts in each prim&lt;br /&gt;
&lt;br /&gt;
3. Set the subpanel variable on the rightmost display prim to be 1.  Leave the other subpanel value at 0.&lt;br /&gt;
&lt;br /&gt;
4. Once again, send the link message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;TEST MSG! EXPANDED!&amp;quot;, &amp;quot;7A&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change the font, send the following link message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;3&amp;quot;, &amp;quot;7F&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are a lot more examples I could give, but for now I will leave it as is.  I will try to update this page as I can. &lt;br /&gt;
&lt;br /&gt;
AND NOW, THE CODE:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// RavText&lt;br /&gt;
// Version 1.0(3)&lt;br /&gt;
// Created 2008-09-18&lt;br /&gt;
// A lightweight 10 char / prim text generation system with multiple font support&lt;br /&gt;
// Created by Ravenous Dingo&lt;br /&gt;
// Copyright 2008 owned by the person controlling the Second Life avatar named Ravenous Dingo&lt;br /&gt;
// This code is hereby released under the terms of the LGPL (Lesser GPL) license&lt;br /&gt;
// Associated textures are hereby released to the public domain&lt;br /&gt;
&lt;br /&gt;
float panelnum=0.; // Panels are groups of prims that work as one block of text&lt;br /&gt;
&lt;br /&gt;
integer subpanel=0; // sub panel is the position within the panel block&lt;br /&gt;
&lt;br /&gt;
integer default_font=0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
list fontmap=[&lt;br /&gt;
&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
list corner_map=[&lt;br /&gt;
                    &amp;lt;-0.4225, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.4675, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.894, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.4675, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.515, 0.4675, 0&amp;gt;&lt;br /&gt;
                    ];&lt;br /&gt;
list rep_map=[&lt;br /&gt;
                &amp;lt;0.1525, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.0625, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;-1.0, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.0625, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.155, 0.0625, 0&amp;gt;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
list face_map=[ 3, 7, 4, 6, 1 ];&lt;br /&gt;
&lt;br /&gt;
list cur_texmap=[];&lt;br /&gt;
&lt;br /&gt;
integer numfaces=0;&lt;br /&gt;
&lt;br /&gt;
integer start_idx=0;&lt;br /&gt;
&lt;br /&gt;
string alphamap=&amp;quot; 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%&amp;amp;()&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
integer bitmask=0;&lt;br /&gt;
key kravtext_cmd=&amp;quot;7A&amp;quot;;&lt;br /&gt;
key ksetfont_cmd=&amp;quot;7F&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vector base_offset=&amp;lt;-0.4675, 0.4675, 0&amp;gt;;&lt;br /&gt;
float increment=0.0625;&lt;br /&gt;
&lt;br /&gt;
integer mod=0;&lt;br /&gt;
integer curfont=-1;&lt;br /&gt;
list param=[];&lt;br /&gt;
&lt;br /&gt;
integer indexAlpha(string str)&lt;br /&gt;
{&lt;br /&gt;
    integer idx=llSubStringIndex(alphamap, str);&lt;br /&gt;
    if (idx == -1)&lt;br /&gt;
    {&lt;br /&gt;
        idx=0;&lt;br /&gt;
    }&lt;br /&gt;
    return idx;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
init()&lt;br /&gt;
{&lt;br /&gt;
    composeFonts();&lt;br /&gt;
    mod=llStringLength(alphamap);&lt;br /&gt;
    numfaces=llGetListLength(face_map);&lt;br /&gt;
    bitmask=llRound(llPow(2.,panelnum));&lt;br /&gt;
    start_idx=subpanel * numfaces * 2;&lt;br /&gt;
    loadFont(default_font);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loadFont(integer fontnum)&lt;br /&gt;
{&lt;br /&gt;
    if (fontnum == curfont)&lt;br /&gt;
    {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    list tmp_font=llList2List(fontmap, fontnum * 8, (fontnum * 8) + 7);&lt;br /&gt;
&lt;br /&gt;
    integer i=0;&lt;br /&gt;
    string tfont=&amp;quot;&amp;quot;;&lt;br /&gt;
    integer tfnum=0;&lt;br /&gt;
    integer tidx=0;&lt;br /&gt;
    if (llGetListLength(param) != 0)&lt;br /&gt;
    {&lt;br /&gt;
        for (i=0; i &amp;lt; numfaces; i++)&lt;br /&gt;
        {&lt;br /&gt;
            tidx=(i * 6) + 2;&lt;br /&gt;
            tfont=llList2String(param, tidx);&lt;br /&gt;
            // now find the font index;&lt;br /&gt;
            tfnum=llListFindList(cur_texmap, [tfont]);&lt;br /&gt;
            // get the new font&lt;br /&gt;
            tfont=llList2String(tmp_font, tfnum);&lt;br /&gt;
            // and replace it&lt;br /&gt;
            param=llListReplaceList(param,  [tfont], tidx, tidx);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    curfont=fontnum;&lt;br /&gt;
    cur_texmap=tmp_font;&lt;br /&gt;
    llSetPrimitiveParams(param);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
composeFonts()&lt;br /&gt;
{&lt;br /&gt;
    list sysfixed=[&lt;br /&gt;
                &amp;quot;df574f09-061c-d3fe-07eb-3d0008271bc4&amp;quot;,&lt;br /&gt;
                &amp;quot;ace8bde9-b93e-d667-c03c-45ce826c955d&amp;quot;,&lt;br /&gt;
                &amp;quot;f7c99d89-ff0b-059e-3e3b-625d71799f19&amp;quot;,&lt;br /&gt;
                &amp;quot;eb3e7fea-60f6-6335-a7da-5d0e7dbed0bf&amp;quot;,&lt;br /&gt;
                &amp;quot;627a4675-4db8-f473-b16a-27aeb42e2b6f&amp;quot;,&lt;br /&gt;
                &amp;quot;aa14726b-fab8-7802-cc23-f118455f4354&amp;quot;,&lt;br /&gt;
                &amp;quot;d7808242-a2da-e144-3338-6b005671e6e6&amp;quot;,&lt;br /&gt;
                &amp;quot;60d062d7-b60f-220d-f9dd-189596a796d2&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
    list OCR_A=[&lt;br /&gt;
                &amp;quot;6d788259-709e-cc72-98b4-4ec56986a958&amp;quot;,&lt;br /&gt;
                &amp;quot;c74622f7-5740-1e5f-2a64-69060bf2742e&amp;quot;,&lt;br /&gt;
                &amp;quot;ffa88837-7f13-dbb3-e28c-2e969b9b4737&amp;quot;,&lt;br /&gt;
                &amp;quot;9127b5d8-459f-7d2c-2b3b-2b6c740de94a&amp;quot;,&lt;br /&gt;
                &amp;quot;894d4fc7-6c3c-954c-e7c9-94c687a1ac62&amp;quot;,&lt;br /&gt;
                &amp;quot;f529f498-be68-f5bd-2464-34e5bb4a8cdb&amp;quot;,&lt;br /&gt;
                &amp;quot;b645eb2c-57eb-a420-afbe-cba49bd298d8&amp;quot;,&lt;br /&gt;
                &amp;quot;bf8541e1-d875-96a6-adc3-fbdd38c41f2a&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
    list profont=[&lt;br /&gt;
                &amp;quot;9e83c094-58b1-8375-192f-2e0ef0f06d91&amp;quot;,&lt;br /&gt;
                &amp;quot;fcd34765-3c58-c1df-2c5e-5e96d1491c0c&amp;quot;,&lt;br /&gt;
                &amp;quot;fd232e50-9ed5-3cc0-345e-b08154b9bf97&amp;quot;,&lt;br /&gt;
                &amp;quot;10c5ab5f-49cb-ff40-3023-029caa4a4ff1&amp;quot;,&lt;br /&gt;
                &amp;quot;2956334f-79f3-010b-9be7-fc4811d2adae&amp;quot;,&lt;br /&gt;
                &amp;quot;b0277b5b-dfbf-27c3-47c9-3a120881fe64&amp;quot;,&lt;br /&gt;
                &amp;quot;969a1eb3-acbf-8425-1ddd-4f6a81bdbd58&amp;quot;,&lt;br /&gt;
                &amp;quot;409d587d-a374-4a1b-16d5-9c19a9baf83a&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list cour_new=[&lt;br /&gt;
                &amp;quot;e60aa9ab-7f1c-33ec-3408-37c20cce3c76&amp;quot;,&lt;br /&gt;
                &amp;quot;93eb9bef-dafa-9980-5d25-5adb5614ccc3&amp;quot;,&lt;br /&gt;
                &amp;quot;dd584fae-63e2-6f50-4811-a5b14989020a&amp;quot;,&lt;br /&gt;
                &amp;quot;cf4c4265-64a9-fa64-b18e-47c11fc18aa2&amp;quot;,&lt;br /&gt;
                &amp;quot;1c63839f-ebfa-c9e9-2391-98faa059c7a3&amp;quot;,&lt;br /&gt;
                &amp;quot;533279c5-cd44-daa4-b010-cd7c99e48c72&amp;quot;,&lt;br /&gt;
                &amp;quot;c1731907-6627-7463-2cff-dfa4499559bb&amp;quot;,&lt;br /&gt;
                &amp;quot;88e2bd5c-5c6f-6103-c2fb-db958e31d026&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list bs_vera=[&lt;br /&gt;
                &amp;quot;f88d322e-2f8d-c5d9-544c-293e0c5647c1&amp;quot;,&lt;br /&gt;
                &amp;quot;91546531-86b9-87ec-3dec-2072ebb012ad&amp;quot;,&lt;br /&gt;
                &amp;quot;1a545d8d-f14f-32aa-ad96-1abca948a662&amp;quot;,&lt;br /&gt;
                &amp;quot;d78fa62c-301d-fa10-188a-ee5f6ad87777&amp;quot;,&lt;br /&gt;
                &amp;quot;69e53076-8083-975b-31c0-420f1f5658dc&amp;quot;,&lt;br /&gt;
                &amp;quot;1b5ffc88-96e6-03c0-39c0-e38a6fad981a&amp;quot;,&lt;br /&gt;
                &amp;quot;a1511389-1b45-b7fb-1961-fd02ee57e26d&amp;quot;,&lt;br /&gt;
                &amp;quot;474e449e-f2f3-d5ac-1c63-1be922b3b434&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list sheldon=[&lt;br /&gt;
                &amp;quot;2958c0ac-cba6-a02b-da3e-aec050e3714f&amp;quot;,&lt;br /&gt;
                &amp;quot;cb8faeb7-c87e-c57c-448a-53a718adb3c8&amp;quot;,&lt;br /&gt;
                &amp;quot;572ff18e-d319-6213-ca28-202aeb7dc2e8&amp;quot;,&lt;br /&gt;
                &amp;quot;0bfc28e2-788d-035d-1ac1-ce752d90f89c&amp;quot;,&lt;br /&gt;
                &amp;quot;1fe4af1d-d99b-fe28-fba8-0006527c4c5f&amp;quot;,&lt;br /&gt;
                &amp;quot;f7fb5f59-0275-3ee7-9b54-e9a1ae61b76c&amp;quot;,&lt;br /&gt;
                &amp;quot;5e52d02e-edae-bf73-da61-9e1fe4e1801b&amp;quot;,&lt;br /&gt;
                &amp;quot;ff54400e-050c-7f87-cefd-a396c86d24d6&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    fontmap=sysfixed + OCR_A + profont + cour_new + bs_vera + sheldon;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    link_message(integer sender, integer num, string msg, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if ((id == kravtext_cmd) &amp;amp;&amp;amp; (num &amp;amp; bitmask))&lt;br /&gt;
        {&lt;br /&gt;
            param=[]; // create our primitive param list&lt;br /&gt;
            msg=llToUpper(msg); // make everything upper case&lt;br /&gt;
            integer i=0;&lt;br /&gt;
            integer this_idx=0;&lt;br /&gt;
            integer frame=0;&lt;br /&gt;
            integer tnum=0;&lt;br /&gt;
            integer xinc=0;&lt;br /&gt;
            integer yinc=0;&lt;br /&gt;
            integer fx=0;&lt;br /&gt;
            integer fy=0;&lt;br /&gt;
            float xpos=0.;&lt;br /&gt;
            float ypos=0.;&lt;br /&gt;
&lt;br /&gt;
            integer thisface=0;&lt;br /&gt;
            string thistex=NULL_KEY;&lt;br /&gt;
            vector this_rep=&amp;lt;0.,0.,0.&amp;gt;;&lt;br /&gt;
            for (i=0; i &amp;lt; numfaces; i++)&lt;br /&gt;
            {&lt;br /&gt;
                this_idx = start_idx + (i * 2);&lt;br /&gt;
                frame = ( mod * indexAlpha( llGetSubString( msg, this_idx, this_idx ) ) )&lt;br /&gt;
                        + indexAlpha( llGetSubString( msg, this_idx+ 1, this_idx +1 ) );&lt;br /&gt;
                base_offset=llList2Vector(corner_map, i);&lt;br /&gt;
                this_rep=llList2Vector(rep_map, i);&lt;br /&gt;
                thisface=llList2Integer(face_map, i);&lt;br /&gt;
                xinc = frame % 32;&lt;br /&gt;
                yinc = frame / 32;&lt;br /&gt;
                fx = xinc / 16;&lt;br /&gt;
                fy = yinc / 16;&lt;br /&gt;
                tnum=(fy * 2) + fx;&lt;br /&gt;
                thistex=llList2String(cur_texmap, tnum);&lt;br /&gt;
                xinc = xinc - ( 16 * fx );&lt;br /&gt;
                yinc = yinc - ( 16 * fy );&lt;br /&gt;
                xpos=base_offset.x + (increment * (float)xinc);&lt;br /&gt;
                ypos=base_offset.y - (increment * (float)yinc);&lt;br /&gt;
&lt;br /&gt;
                param += [&lt;br /&gt;
                            PRIM_TEXTURE,&lt;br /&gt;
                            thisface,&lt;br /&gt;
                            thistex,&lt;br /&gt;
                            this_rep,&lt;br /&gt;
                            &amp;lt;xpos, ypos, 0&amp;gt;,&lt;br /&gt;
                            0.&lt;br /&gt;
                            ];&lt;br /&gt;
            }&lt;br /&gt;
            llSetPrimitiveParams(param);&lt;br /&gt;
        }&lt;br /&gt;
        else if ((id == ksetfont_cmd) &amp;amp;&amp;amp; (num &amp;amp; bitmask))&lt;br /&gt;
        {&lt;br /&gt;
            integer fnum=(integer)msg;&lt;br /&gt;
            loadFont(fnum);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Because everyone seems to have a slightly different set of settings for their 5 faced prim, and because we don&#039;t have the description of the exact one that was being used in the original script, I have altered the offsets in the script to match with the 5 faced prim detailed below:&lt;br /&gt;
&lt;br /&gt;
1.   Rez a Prism (I used X=0.01,Y=2.5,Z=1.5. Obviously adjust to taste.)&lt;br /&gt;
&lt;br /&gt;
2.   Path cut: Begin 0.2, End 0.8.&lt;br /&gt;
&lt;br /&gt;
3.   Hollow 65, default shape.&lt;br /&gt;
&lt;br /&gt;
4.   Twist, Taper, Top Shear are all default 0.&lt;br /&gt;
&lt;br /&gt;
5.   Slice Begin and end are default 0, and 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
RESPONSE TO NOTE: Its not the speed of rendering the text itself - its the speed at which the client renders the textures.  As I mentioned in the advantages / disadvantages, that&#039;s the man reason for using it.  The very fact that it uses fewer characters means it has a smaller texture &amp;quot;footprint&amp;quot; and renders faster overall in clients due to much fewer textures to load.  I think Jor3l Boa is confusing client rendering with script execution time.  Not an uncommon mistake, but it totally misses the entire point of this script lol.  -Rav&lt;br /&gt;
&lt;br /&gt;
RESPONSE TO RESPONSE NOTE: Yes lol, about the font, is there any script to make it or some files to edit?, would be cool if we can make fonts. And yes, is faster to render but less chars, anyway is good :P (noob note removed) -Jor3l&lt;/div&gt;</summary>
		<author><name>Ravenous Dingo</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=RavText&amp;diff=388712</id>
		<title>RavText</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=RavText&amp;diff=388712"/>
		<updated>2009-06-10T21:37:37Z</updated>

		<summary type="html">&lt;p&gt;Ravenous Dingo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
RavText&lt;br /&gt;
A lightweight, multi font, text-on-a-prim display system&lt;br /&gt;
Version 1.0(3) &lt;br /&gt;
&lt;br /&gt;
License:  This is licensed under the terms of the Lesser GPL (LGPL).&lt;br /&gt;
&lt;br /&gt;
This is yet another 10 character display using a 5 faced prim. It does not, however, use any part of the popular [[XyText]] series of scripts.  It is 100% home grown.  It is meant for specialized usage: specifically when one desires a very lightweight script for displaying 10 character basic alphanumeric text.  While it could be expanded to accommodate more characters rather easily, at the moment it just does uppercase alphanumeric plus a few special characters. &lt;br /&gt;
&lt;br /&gt;
The functionality of RavText is limited compared to other text systems, but does have some advantages.  it is definitely not suitable for every application.  Here are the advantages and drawbacks of RavText compared to other systems:&lt;br /&gt;
&lt;br /&gt;
DISADVANTAGES:&lt;br /&gt;
&lt;br /&gt;
1. Limited character set.  Uppercase alphanumeric characters and a few special characters (namely &amp;quot; !@#$%&amp;amp;()&amp;quot;) are supported.  (However, it could easily be expanded to use larger character sets with a few minor modifications and the right texture maps).&lt;br /&gt;
&lt;br /&gt;
2. Lack of special effects or a robust display system.  There are no fade in / fade out effects or any sort of color control, although there is nothing preventing someone from adding them.&lt;br /&gt;
&lt;br /&gt;
3. Currently, the textures can give an annoying flicker under some circumstances when viewed at certain angles on certain displays.&lt;br /&gt;
&lt;br /&gt;
4. Needs some manual configuration when using more than one 5 prim display.  There is no link scanner or any other utility built in.  Individual prims must have their own script and that script must be preconfigured by hand (although it does not take much effort to do so).&lt;br /&gt;
&lt;br /&gt;
5. Not very well commented or documented.  Meh, I&#039;m lazy.&lt;br /&gt;
&lt;br /&gt;
ADVANTAGES:&lt;br /&gt;
&lt;br /&gt;
1. Very lightweight &amp;amp; efficient.  The script is relatively simple, and fast.  It attempts to keep CPU usage to a minimum.&lt;br /&gt;
&lt;br /&gt;
2. &amp;quot;Rezzes&amp;quot; faster.  Partly because of the limited character set, RavText only uses 8 textures per character map, as opposed to the 60+ textures used by XyText derivitives. This tends to result in textures rezzing much faster, and staying in the cache more frequently.  NOTE:  If RavText supported 128 characters instead of the current 45, it would require 64 textures.  This is one of the main reasons I decided to go with uppercase only. I wanted quick rendering basic text.&lt;br /&gt;
&lt;br /&gt;
3. Flexible.  While this version is configured for the standard 5 face configuration, it can be modified to accommodate almost any primface configuration by just editing a few lists.&lt;br /&gt;
&lt;br /&gt;
3. Supports multiple fonts.  Due to the low number of textures required to map the limited RavText character set, it was easy to generate additional display fonts.  Currently, there are 6 possible fonts.&lt;br /&gt;
&lt;br /&gt;
BASIC CONFIGURATION AND CONCEPTS:&lt;br /&gt;
&lt;br /&gt;
RavText uses the variables &amp;quot;panelnum&amp;quot;  and &amp;quot;subpanel&amp;quot; to tell it where it is in your display system.  Each panel is considered to be its own unit and is composed of subpanels. For example, if you wanted to have two blocks of text, each 20 characters long, you would have two panels, each with two subpanels.  Subpanels should be numbered left to right starting with 0.  So text block #1 would be panel 0, with subpanel 0 and 1.  text block 2 would be panel 1, with subpanels 0 and 1 as well.&lt;br /&gt;
&lt;br /&gt;
To set the text on a specific panel, you set the key attribute of a linked message to be &amp;quot;7A&amp;quot;, set the string attribute to be whatever string you want to display.  You would set the number to be 2 raised to the power of the panel number.  You can use -1 to display on all panels.&lt;br /&gt;
&lt;br /&gt;
To change the font, set the key attribute of the link message to be &amp;quot;7F&amp;quot;, set the integer value to be 2 raised to the panel number (or -1 for all panels) and the string to be the font number you want to use (fonts are numbered 0 to 5).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BASIC USAGE:&lt;br /&gt;
&lt;br /&gt;
1. Make a 5 face prim, just like the ones used with current XyText versions.&lt;br /&gt;
&lt;br /&gt;
2. Put the RavText script in the prim.&lt;br /&gt;
&lt;br /&gt;
3. To display text, send a link message to the prim thusly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;TEST MSG!&amp;quot;, &amp;quot;7A&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The value &amp;quot;7A&amp;quot; is the command to display a string of text.  The value -1 basically means all panels.&lt;br /&gt;
&lt;br /&gt;
OK, next lets make a two panel display.  It will display up to 20 characters.&lt;br /&gt;
&lt;br /&gt;
1. make two 5 faced prims.&lt;br /&gt;
&lt;br /&gt;
2. Put RavText scripts in each prim&lt;br /&gt;
&lt;br /&gt;
3. Set the subpanel variable on the rightmost display prim to be 1.  Leave the other subpanel value at 0.&lt;br /&gt;
&lt;br /&gt;
4. Once again, send the link message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;TEST MSG! EXPANDED!&amp;quot;, &amp;quot;7A&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change the font, send the following link message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;3&amp;quot;, &amp;quot;7F&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are a lot more examples I could give, but for now I will leave it as is.  I will try to update this page as I can. &lt;br /&gt;
&lt;br /&gt;
AND NOW, THE CODE:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// RavText&lt;br /&gt;
// Version 1.0(3)&lt;br /&gt;
// Created 2008-09-18&lt;br /&gt;
// A lightweight 10 char / prim text generation system with multiple font support&lt;br /&gt;
// Created by Ravenous Dingo&lt;br /&gt;
// Copyright 2008 owned by the person controlling the Second Life avatar named Ravenous Dingo&lt;br /&gt;
// This code is hereby released under the terms of the LGPL (Lesser GPL) license&lt;br /&gt;
// Associated textures are hereby released to the public domain&lt;br /&gt;
&lt;br /&gt;
float panelnum=0.; // Panels are groups of prims that work as one block of text&lt;br /&gt;
&lt;br /&gt;
integer subpanel=0; // sub panel is the position within the panel block&lt;br /&gt;
&lt;br /&gt;
integer default_font=0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
list fontmap=[&lt;br /&gt;
&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
list corner_map=[&lt;br /&gt;
                    &amp;lt;-0.4225, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.4675, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.894, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.4675, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.515, 0.4675, 0&amp;gt;&lt;br /&gt;
                    ];&lt;br /&gt;
list rep_map=[&lt;br /&gt;
                &amp;lt;0.1525, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.0625, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;-1.0, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.0625, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.155, 0.0625, 0&amp;gt;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
list face_map=[ 3, 7, 4, 6, 1 ];&lt;br /&gt;
&lt;br /&gt;
list cur_texmap=[];&lt;br /&gt;
&lt;br /&gt;
integer numfaces=0;&lt;br /&gt;
&lt;br /&gt;
integer start_idx=0;&lt;br /&gt;
&lt;br /&gt;
string alphamap=&amp;quot; 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%&amp;amp;()&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
integer bitmask=0;&lt;br /&gt;
key kravtext_cmd=&amp;quot;7A&amp;quot;;&lt;br /&gt;
key ksetfont_cmd=&amp;quot;7F&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vector base_offset=&amp;lt;-0.4675, 0.4675, 0&amp;gt;;&lt;br /&gt;
float increment=0.0625;&lt;br /&gt;
&lt;br /&gt;
integer mod=0;&lt;br /&gt;
integer curfont=-1;&lt;br /&gt;
list param=[];&lt;br /&gt;
&lt;br /&gt;
integer indexAlpha(string str)&lt;br /&gt;
{&lt;br /&gt;
    integer idx=llSubStringIndex(alphamap, str);&lt;br /&gt;
    if (idx == -1)&lt;br /&gt;
    {&lt;br /&gt;
        idx=0;&lt;br /&gt;
    }&lt;br /&gt;
    return idx;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
init()&lt;br /&gt;
{&lt;br /&gt;
    composeFonts();&lt;br /&gt;
    mod=llStringLength(alphamap);&lt;br /&gt;
    numfaces=llGetListLength(face_map);&lt;br /&gt;
    bitmask=llRound(llPow(2.,panelnum));&lt;br /&gt;
    start_idx=subpanel * numfaces * 2;&lt;br /&gt;
    loadFont(default_font);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loadFont(integer fontnum)&lt;br /&gt;
{&lt;br /&gt;
    if (fontnum == curfont)&lt;br /&gt;
    {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    list tmp_font=llList2List(fontmap, fontnum * 8, (fontnum * 8) + 7);&lt;br /&gt;
&lt;br /&gt;
    integer i=0;&lt;br /&gt;
    string tfont=&amp;quot;&amp;quot;;&lt;br /&gt;
    integer tfnum=0;&lt;br /&gt;
    integer tidx=0;&lt;br /&gt;
    if (llGetListLength(param) != 0)&lt;br /&gt;
    {&lt;br /&gt;
        for (i=0; i &amp;lt; numfaces; i++)&lt;br /&gt;
        {&lt;br /&gt;
            tidx=(i * 6) + 2;&lt;br /&gt;
            tfont=llList2String(param, tidx);&lt;br /&gt;
            // now find the font index;&lt;br /&gt;
            tfnum=llListFindList(cur_texmap, [tfont]);&lt;br /&gt;
            // get the new font&lt;br /&gt;
            tfont=llList2String(tmp_font, tfnum);&lt;br /&gt;
            // and replace it&lt;br /&gt;
            param=llListReplaceList(param,  [tfont], tidx, tidx);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    curfont=fontnum;&lt;br /&gt;
    cur_texmap=tmp_font;&lt;br /&gt;
    llSetPrimitiveParams(param);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
composeFonts()&lt;br /&gt;
{&lt;br /&gt;
    list sysfixed=[&lt;br /&gt;
                &amp;quot;df574f09-061c-d3fe-07eb-3d0008271bc4&amp;quot;,&lt;br /&gt;
                &amp;quot;ace8bde9-b93e-d667-c03c-45ce826c955d&amp;quot;,&lt;br /&gt;
                &amp;quot;f7c99d89-ff0b-059e-3e3b-625d71799f19&amp;quot;,&lt;br /&gt;
                &amp;quot;eb3e7fea-60f6-6335-a7da-5d0e7dbed0bf&amp;quot;,&lt;br /&gt;
                &amp;quot;627a4675-4db8-f473-b16a-27aeb42e2b6f&amp;quot;,&lt;br /&gt;
                &amp;quot;aa14726b-fab8-7802-cc23-f118455f4354&amp;quot;,&lt;br /&gt;
                &amp;quot;d7808242-a2da-e144-3338-6b005671e6e6&amp;quot;,&lt;br /&gt;
                &amp;quot;60d062d7-b60f-220d-f9dd-189596a796d2&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
    list OCR_A=[&lt;br /&gt;
                &amp;quot;6d788259-709e-cc72-98b4-4ec56986a958&amp;quot;,&lt;br /&gt;
                &amp;quot;c74622f7-5740-1e5f-2a64-69060bf2742e&amp;quot;,&lt;br /&gt;
                &amp;quot;ffa88837-7f13-dbb3-e28c-2e969b9b4737&amp;quot;,&lt;br /&gt;
                &amp;quot;9127b5d8-459f-7d2c-2b3b-2b6c740de94a&amp;quot;,&lt;br /&gt;
                &amp;quot;894d4fc7-6c3c-954c-e7c9-94c687a1ac62&amp;quot;,&lt;br /&gt;
                &amp;quot;f529f498-be68-f5bd-2464-34e5bb4a8cdb&amp;quot;,&lt;br /&gt;
                &amp;quot;b645eb2c-57eb-a420-afbe-cba49bd298d8&amp;quot;,&lt;br /&gt;
                &amp;quot;bf8541e1-d875-96a6-adc3-fbdd38c41f2a&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
    list profont=[&lt;br /&gt;
                &amp;quot;9e83c094-58b1-8375-192f-2e0ef0f06d91&amp;quot;,&lt;br /&gt;
                &amp;quot;fcd34765-3c58-c1df-2c5e-5e96d1491c0c&amp;quot;,&lt;br /&gt;
                &amp;quot;fd232e50-9ed5-3cc0-345e-b08154b9bf97&amp;quot;,&lt;br /&gt;
                &amp;quot;10c5ab5f-49cb-ff40-3023-029caa4a4ff1&amp;quot;,&lt;br /&gt;
                &amp;quot;2956334f-79f3-010b-9be7-fc4811d2adae&amp;quot;,&lt;br /&gt;
                &amp;quot;b0277b5b-dfbf-27c3-47c9-3a120881fe64&amp;quot;,&lt;br /&gt;
                &amp;quot;969a1eb3-acbf-8425-1ddd-4f6a81bdbd58&amp;quot;,&lt;br /&gt;
                &amp;quot;409d587d-a374-4a1b-16d5-9c19a9baf83a&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list cour_new=[&lt;br /&gt;
                &amp;quot;e60aa9ab-7f1c-33ec-3408-37c20cce3c76&amp;quot;,&lt;br /&gt;
                &amp;quot;93eb9bef-dafa-9980-5d25-5adb5614ccc3&amp;quot;,&lt;br /&gt;
                &amp;quot;dd584fae-63e2-6f50-4811-a5b14989020a&amp;quot;,&lt;br /&gt;
                &amp;quot;cf4c4265-64a9-fa64-b18e-47c11fc18aa2&amp;quot;,&lt;br /&gt;
                &amp;quot;1c63839f-ebfa-c9e9-2391-98faa059c7a3&amp;quot;,&lt;br /&gt;
                &amp;quot;533279c5-cd44-daa4-b010-cd7c99e48c72&amp;quot;,&lt;br /&gt;
                &amp;quot;c1731907-6627-7463-2cff-dfa4499559bb&amp;quot;,&lt;br /&gt;
                &amp;quot;88e2bd5c-5c6f-6103-c2fb-db958e31d026&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list bs_vera=[&lt;br /&gt;
                &amp;quot;f88d322e-2f8d-c5d9-544c-293e0c5647c1&amp;quot;,&lt;br /&gt;
                &amp;quot;91546531-86b9-87ec-3dec-2072ebb012ad&amp;quot;,&lt;br /&gt;
                &amp;quot;1a545d8d-f14f-32aa-ad96-1abca948a662&amp;quot;,&lt;br /&gt;
                &amp;quot;d78fa62c-301d-fa10-188a-ee5f6ad87777&amp;quot;,&lt;br /&gt;
                &amp;quot;69e53076-8083-975b-31c0-420f1f5658dc&amp;quot;,&lt;br /&gt;
                &amp;quot;1b5ffc88-96e6-03c0-39c0-e38a6fad981a&amp;quot;,&lt;br /&gt;
                &amp;quot;a1511389-1b45-b7fb-1961-fd02ee57e26d&amp;quot;,&lt;br /&gt;
                &amp;quot;474e449e-f2f3-d5ac-1c63-1be922b3b434&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list sheldon=[&lt;br /&gt;
                &amp;quot;2958c0ac-cba6-a02b-da3e-aec050e3714f&amp;quot;,&lt;br /&gt;
                &amp;quot;cb8faeb7-c87e-c57c-448a-53a718adb3c8&amp;quot;,&lt;br /&gt;
                &amp;quot;572ff18e-d319-6213-ca28-202aeb7dc2e8&amp;quot;,&lt;br /&gt;
                &amp;quot;0bfc28e2-788d-035d-1ac1-ce752d90f89c&amp;quot;,&lt;br /&gt;
                &amp;quot;1fe4af1d-d99b-fe28-fba8-0006527c4c5f&amp;quot;,&lt;br /&gt;
                &amp;quot;f7fb5f59-0275-3ee7-9b54-e9a1ae61b76c&amp;quot;,&lt;br /&gt;
                &amp;quot;5e52d02e-edae-bf73-da61-9e1fe4e1801b&amp;quot;,&lt;br /&gt;
                &amp;quot;ff54400e-050c-7f87-cefd-a396c86d24d6&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    fontmap=sysfixed + OCR_A + profont + cour_new + bs_vera + sheldon;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    link_message(integer sender, integer num, string msg, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if ((id == kravtext_cmd) &amp;amp;&amp;amp; (num &amp;amp; bitmask))&lt;br /&gt;
        {&lt;br /&gt;
            param=[]; // create our primitive param list&lt;br /&gt;
            msg=llToUpper(msg); // make everything upper case&lt;br /&gt;
            integer i=0;&lt;br /&gt;
            integer this_idx=0;&lt;br /&gt;
            integer frame=0;&lt;br /&gt;
            integer tnum=0;&lt;br /&gt;
            integer xinc=0;&lt;br /&gt;
            integer yinc=0;&lt;br /&gt;
            integer fx=0;&lt;br /&gt;
            integer fy=0;&lt;br /&gt;
            float xpos=0.;&lt;br /&gt;
            float ypos=0.;&lt;br /&gt;
&lt;br /&gt;
            integer thisface=0;&lt;br /&gt;
            string thistex=NULL_KEY;&lt;br /&gt;
            vector this_rep=&amp;lt;0.,0.,0.&amp;gt;;&lt;br /&gt;
            for (i=0; i &amp;lt; numfaces; i++)&lt;br /&gt;
            {&lt;br /&gt;
                this_idx = start_idx + (i * 2);&lt;br /&gt;
                frame = ( mod * indexAlpha( llGetSubString( msg, this_idx, this_idx ) ) )&lt;br /&gt;
                        + indexAlpha( llGetSubString( msg, this_idx+ 1, this_idx +1 ) );&lt;br /&gt;
                base_offset=llList2Vector(corner_map, i);&lt;br /&gt;
                this_rep=llList2Vector(rep_map, i);&lt;br /&gt;
                thisface=llList2Integer(face_map, i);&lt;br /&gt;
                xinc = frame % 32;&lt;br /&gt;
                yinc = frame / 32;&lt;br /&gt;
                fx = xinc / 16;&lt;br /&gt;
                fy = yinc / 16;&lt;br /&gt;
                tnum=(fy * 2) + fx;&lt;br /&gt;
                thistex=llList2String(cur_texmap, tnum);&lt;br /&gt;
                xinc = xinc - ( 16 * fx );&lt;br /&gt;
                yinc = yinc - ( 16 * fy );&lt;br /&gt;
                xpos=base_offset.x + (increment * (float)xinc);&lt;br /&gt;
                ypos=base_offset.y - (increment * (float)yinc);&lt;br /&gt;
&lt;br /&gt;
                param += [&lt;br /&gt;
                            PRIM_TEXTURE,&lt;br /&gt;
                            thisface,&lt;br /&gt;
                            thistex,&lt;br /&gt;
                            this_rep,&lt;br /&gt;
                            &amp;lt;xpos, ypos, 0&amp;gt;,&lt;br /&gt;
                            0.&lt;br /&gt;
                            ];&lt;br /&gt;
            }&lt;br /&gt;
            llSetPrimitiveParams(param);&lt;br /&gt;
        }&lt;br /&gt;
        else if ((id == ksetfont_cmd) &amp;amp;&amp;amp; (num &amp;amp; bitmask))&lt;br /&gt;
        {&lt;br /&gt;
            integer fnum=(integer)msg;&lt;br /&gt;
            loadFont(fnum);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NOTE: I tested this and XxyyText with a minor modification (only the render option). RavText toke 0.444653 seconds to render the same text as Xxyy wich toke 0.448598 seconds, nothing significant for me plus Xxyy have more chars. Jor3l Boa&lt;br /&gt;
&lt;br /&gt;
RESPONSE TO NOTE: Its not the speed of rendering the text itself - its the speed at which the client renders the textures.  As I mentioned in the advantages / disadvantages, that&#039;s the man reason for using it.  The very fact that it uses fewer characters means it has a smaller texture &amp;quot;footprint&amp;quot; and renders faster overall in clients due to much fewer textures to load.  I think Jor3l Boa is confusing client rendering with script execution time.  Not an uncommon mistake, but it totally misses the entire point of this script lol.  -Rav&lt;/div&gt;</summary>
		<author><name>Ravenous Dingo</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=RavText&amp;diff=388702</id>
		<title>RavText</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=RavText&amp;diff=388702"/>
		<updated>2009-06-10T21:37:00Z</updated>

		<summary type="html">&lt;p&gt;Ravenous Dingo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
RavText&lt;br /&gt;
A lightweight, multi font, text-on-a-prim display system&lt;br /&gt;
Version 1.0(3) &lt;br /&gt;
&lt;br /&gt;
License:  This is licensed under the terms of the Lesser GPL (LGPL).&lt;br /&gt;
&lt;br /&gt;
This is yet another 10 character display using a 5 faced prim. It does not, however, use any part of the popular [[XyText]] series of scripts.  It is 100% home grown.  It is meant for specialized usage: specifically when one desires a very lightweight script for displaying 10 character basic alphanumeric text.  While it could be expanded to accommodate more characters rather easily, at the moment it just does uppercase alphanumeric plus a few special characters. &lt;br /&gt;
&lt;br /&gt;
The functionality of RavText is limited compared to other text systems, but does have some advantages.  it is definitely not suitable for every application.  Here are the advantages and drawbacks of RavText compared to other systems:&lt;br /&gt;
&lt;br /&gt;
DISADVANTAGES:&lt;br /&gt;
&lt;br /&gt;
1. Limited character set.  Uppercase alphanumeric characters and a few special characters (namely &amp;quot; !@#$%&amp;amp;()&amp;quot;) are supported.  (However, it could easily be expanded to use larger character sets with a few minor modifications and the right texture maps).&lt;br /&gt;
&lt;br /&gt;
2. Lack of special effects or a robust display system.  There are no fade in / fade out effects or any sort of color control, although there is nothing preventing someone from adding them.&lt;br /&gt;
&lt;br /&gt;
3. Currently, the textures can give an annoying flicker under some circumstances when viewed at certain angles on certain displays.&lt;br /&gt;
&lt;br /&gt;
4. Needs some manual configuration when using more than one 5 prim display.  There is no link scanner or any other utility built in.  Individual prims must have their own script and that script must be preconfigured by hand (although it does not take much effort to do so).&lt;br /&gt;
&lt;br /&gt;
5. Not very well commented or documented.  Meh, I&#039;m lazy.&lt;br /&gt;
&lt;br /&gt;
ADVANTAGES:&lt;br /&gt;
&lt;br /&gt;
1. Very lightweight &amp;amp; efficient.  The script is relatively simple, and fast.  It attempts to keep CPU usage to a minimum.&lt;br /&gt;
&lt;br /&gt;
2. &amp;quot;Rezzes&amp;quot; faster.  Partly because of the limited character set, RavText only uses 8 textures per character map, as opposed to the 60+ textures used by XyText derivitives. This tends to result in textures rezzing much faster, and staying in the cache more frequently.  NOTE:  If RavText supported 128 characters instead of the current 45, it would require 64 textures.  This is one of the main reasons I decided to go with uppercase only. I wanted quick rendering basic text.&lt;br /&gt;
&lt;br /&gt;
3. Flexible.  While this version is configured for the standard 5 face configuration, it can be modified to accommodate almost any primface configuration by just editing a few lists.&lt;br /&gt;
&lt;br /&gt;
3. Supports multiple fonts.  Due to the low number of textures required to map the limited RavText character set, it was easy to generate additional display fonts.  Currently, there are 6 possible fonts.&lt;br /&gt;
&lt;br /&gt;
BASIC CONFIGURATION AND CONCEPTS:&lt;br /&gt;
&lt;br /&gt;
RavText uses the variables &amp;quot;panelnum&amp;quot;  and &amp;quot;subpanel&amp;quot; to tell it where it is in your display system.  Each panel is considered to be its own unit and is composed of subpanels. For example, if you wanted to have two blocks of text, each 20 characters long, you would have two panels, each with two subpanels.  Subpanels should be numbered left to right starting with 0.  So text block #1 would be panel 0, with subpanel 0 and 1.  text block 2 would be panel 1, with subpanels 0 and 1 as well.&lt;br /&gt;
&lt;br /&gt;
To set the text on a specific panel, you set the key attribute of a linked message to be &amp;quot;7A&amp;quot;, set the string attribute to be whatever string you want to display.  You would set the number to be 2 raised to the power of the panel number.  You can use -1 to display on all panels.&lt;br /&gt;
&lt;br /&gt;
To change the font, set the key attribute of the link message to be &amp;quot;7F&amp;quot;, set the integer value to be 2 raised to the panel number (or -1 for all panels) and the string to be the font number you want to use (fonts are numbered 0 to 5).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BASIC USAGE:&lt;br /&gt;
&lt;br /&gt;
1. Make a 5 face prim, just like the ones used with current XyText versions.&lt;br /&gt;
&lt;br /&gt;
2. Put the RavText script in the prim.&lt;br /&gt;
&lt;br /&gt;
3. To display text, send a link message to the prim thusly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;TEST MSG!&amp;quot;, &amp;quot;7A&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The value &amp;quot;7A&amp;quot; is the command to display a string of text.  The value -1 basically means all panels.&lt;br /&gt;
&lt;br /&gt;
OK, next lets make a two panel display.  It will display up to 20 characters.&lt;br /&gt;
&lt;br /&gt;
1. make two 5 faced prims.&lt;br /&gt;
&lt;br /&gt;
2. Put RavText scripts in each prim&lt;br /&gt;
&lt;br /&gt;
3. Set the subpanel variable on the rightmost display prim to be 1.  Leave the other subpanel value at 0.&lt;br /&gt;
&lt;br /&gt;
4. Once again, send the link message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;TEST MSG! EXPANDED!&amp;quot;, &amp;quot;7A&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change the font, send the following link message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;3&amp;quot;, &amp;quot;7F&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are a lot more examples I could give, but for now I will leave it as is.  I will try to update this page as I can. &lt;br /&gt;
&lt;br /&gt;
AND NOW, THE CODE:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// RavText&lt;br /&gt;
// Version 1.0(3)&lt;br /&gt;
// Created 2008-09-18&lt;br /&gt;
// A lightweight 10 char / prim text generation system with multiple font support&lt;br /&gt;
// Created by Ravenous Dingo&lt;br /&gt;
// Copyright 2008 owned by the person controlling the Second Life avatar named Ravenous Dingo&lt;br /&gt;
// This code is hereby released under the terms of the LGPL (Lesser GPL) license&lt;br /&gt;
// Associated textures are hereby released to the public domain&lt;br /&gt;
&lt;br /&gt;
float panelnum=0.; // Panels are groups of prims that work as one block of text&lt;br /&gt;
&lt;br /&gt;
integer subpanel=0; // sub panel is the position within the panel block&lt;br /&gt;
&lt;br /&gt;
integer default_font=0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
list fontmap=[&lt;br /&gt;
&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
list corner_map=[&lt;br /&gt;
                    &amp;lt;-0.4225, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.4675, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.894, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.4675, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.515, 0.4675, 0&amp;gt;&lt;br /&gt;
                    ];&lt;br /&gt;
list rep_map=[&lt;br /&gt;
                &amp;lt;0.1525, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.0625, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;-1.0, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.0625, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.155, 0.0625, 0&amp;gt;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
list face_map=[ 3, 7, 4, 6, 1 ];&lt;br /&gt;
&lt;br /&gt;
list cur_texmap=[];&lt;br /&gt;
&lt;br /&gt;
integer numfaces=0;&lt;br /&gt;
&lt;br /&gt;
integer start_idx=0;&lt;br /&gt;
&lt;br /&gt;
string alphamap=&amp;quot; 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%&amp;amp;()&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
integer bitmask=0;&lt;br /&gt;
key kravtext_cmd=&amp;quot;7A&amp;quot;;&lt;br /&gt;
key ksetfont_cmd=&amp;quot;7F&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vector base_offset=&amp;lt;-0.4675, 0.4675, 0&amp;gt;;&lt;br /&gt;
float increment=0.0625;&lt;br /&gt;
&lt;br /&gt;
integer mod=0;&lt;br /&gt;
integer curfont=-1;&lt;br /&gt;
list param=[];&lt;br /&gt;
&lt;br /&gt;
integer indexAlpha(string str)&lt;br /&gt;
{&lt;br /&gt;
    integer idx=llSubStringIndex(alphamap, str);&lt;br /&gt;
    if (idx == -1)&lt;br /&gt;
    {&lt;br /&gt;
        idx=0;&lt;br /&gt;
    }&lt;br /&gt;
    return idx;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
init()&lt;br /&gt;
{&lt;br /&gt;
    composeFonts();&lt;br /&gt;
    mod=llStringLength(alphamap);&lt;br /&gt;
    numfaces=llGetListLength(face_map);&lt;br /&gt;
    bitmask=llRound(llPow(2.,panelnum));&lt;br /&gt;
    start_idx=subpanel * numfaces * 2;&lt;br /&gt;
    loadFont(default_font);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loadFont(integer fontnum)&lt;br /&gt;
{&lt;br /&gt;
    if (fontnum == curfont)&lt;br /&gt;
    {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    list tmp_font=llList2List(fontmap, fontnum * 8, (fontnum * 8) + 7);&lt;br /&gt;
&lt;br /&gt;
    integer i=0;&lt;br /&gt;
    string tfont=&amp;quot;&amp;quot;;&lt;br /&gt;
    integer tfnum=0;&lt;br /&gt;
    integer tidx=0;&lt;br /&gt;
    if (llGetListLength(param) != 0)&lt;br /&gt;
    {&lt;br /&gt;
        for (i=0; i &amp;lt; numfaces; i++)&lt;br /&gt;
        {&lt;br /&gt;
            tidx=(i * 6) + 2;&lt;br /&gt;
            tfont=llList2String(param, tidx);&lt;br /&gt;
            // now find the font index;&lt;br /&gt;
            tfnum=llListFindList(cur_texmap, [tfont]);&lt;br /&gt;
            // get the new font&lt;br /&gt;
            tfont=llList2String(tmp_font, tfnum);&lt;br /&gt;
            // and replace it&lt;br /&gt;
            param=llListReplaceList(param,  [tfont], tidx, tidx);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    curfont=fontnum;&lt;br /&gt;
    cur_texmap=tmp_font;&lt;br /&gt;
    llSetPrimitiveParams(param);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
composeFonts()&lt;br /&gt;
{&lt;br /&gt;
    list sysfixed=[&lt;br /&gt;
                &amp;quot;df574f09-061c-d3fe-07eb-3d0008271bc4&amp;quot;,&lt;br /&gt;
                &amp;quot;ace8bde9-b93e-d667-c03c-45ce826c955d&amp;quot;,&lt;br /&gt;
                &amp;quot;f7c99d89-ff0b-059e-3e3b-625d71799f19&amp;quot;,&lt;br /&gt;
                &amp;quot;eb3e7fea-60f6-6335-a7da-5d0e7dbed0bf&amp;quot;,&lt;br /&gt;
                &amp;quot;627a4675-4db8-f473-b16a-27aeb42e2b6f&amp;quot;,&lt;br /&gt;
                &amp;quot;aa14726b-fab8-7802-cc23-f118455f4354&amp;quot;,&lt;br /&gt;
                &amp;quot;d7808242-a2da-e144-3338-6b005671e6e6&amp;quot;,&lt;br /&gt;
                &amp;quot;60d062d7-b60f-220d-f9dd-189596a796d2&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
    list OCR_A=[&lt;br /&gt;
                &amp;quot;6d788259-709e-cc72-98b4-4ec56986a958&amp;quot;,&lt;br /&gt;
                &amp;quot;c74622f7-5740-1e5f-2a64-69060bf2742e&amp;quot;,&lt;br /&gt;
                &amp;quot;ffa88837-7f13-dbb3-e28c-2e969b9b4737&amp;quot;,&lt;br /&gt;
                &amp;quot;9127b5d8-459f-7d2c-2b3b-2b6c740de94a&amp;quot;,&lt;br /&gt;
                &amp;quot;894d4fc7-6c3c-954c-e7c9-94c687a1ac62&amp;quot;,&lt;br /&gt;
                &amp;quot;f529f498-be68-f5bd-2464-34e5bb4a8cdb&amp;quot;,&lt;br /&gt;
                &amp;quot;b645eb2c-57eb-a420-afbe-cba49bd298d8&amp;quot;,&lt;br /&gt;
                &amp;quot;bf8541e1-d875-96a6-adc3-fbdd38c41f2a&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
    list profont=[&lt;br /&gt;
                &amp;quot;9e83c094-58b1-8375-192f-2e0ef0f06d91&amp;quot;,&lt;br /&gt;
                &amp;quot;fcd34765-3c58-c1df-2c5e-5e96d1491c0c&amp;quot;,&lt;br /&gt;
                &amp;quot;fd232e50-9ed5-3cc0-345e-b08154b9bf97&amp;quot;,&lt;br /&gt;
                &amp;quot;10c5ab5f-49cb-ff40-3023-029caa4a4ff1&amp;quot;,&lt;br /&gt;
                &amp;quot;2956334f-79f3-010b-9be7-fc4811d2adae&amp;quot;,&lt;br /&gt;
                &amp;quot;b0277b5b-dfbf-27c3-47c9-3a120881fe64&amp;quot;,&lt;br /&gt;
                &amp;quot;969a1eb3-acbf-8425-1ddd-4f6a81bdbd58&amp;quot;,&lt;br /&gt;
                &amp;quot;409d587d-a374-4a1b-16d5-9c19a9baf83a&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list cour_new=[&lt;br /&gt;
                &amp;quot;e60aa9ab-7f1c-33ec-3408-37c20cce3c76&amp;quot;,&lt;br /&gt;
                &amp;quot;93eb9bef-dafa-9980-5d25-5adb5614ccc3&amp;quot;,&lt;br /&gt;
                &amp;quot;dd584fae-63e2-6f50-4811-a5b14989020a&amp;quot;,&lt;br /&gt;
                &amp;quot;cf4c4265-64a9-fa64-b18e-47c11fc18aa2&amp;quot;,&lt;br /&gt;
                &amp;quot;1c63839f-ebfa-c9e9-2391-98faa059c7a3&amp;quot;,&lt;br /&gt;
                &amp;quot;533279c5-cd44-daa4-b010-cd7c99e48c72&amp;quot;,&lt;br /&gt;
                &amp;quot;c1731907-6627-7463-2cff-dfa4499559bb&amp;quot;,&lt;br /&gt;
                &amp;quot;88e2bd5c-5c6f-6103-c2fb-db958e31d026&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list bs_vera=[&lt;br /&gt;
                &amp;quot;f88d322e-2f8d-c5d9-544c-293e0c5647c1&amp;quot;,&lt;br /&gt;
                &amp;quot;91546531-86b9-87ec-3dec-2072ebb012ad&amp;quot;,&lt;br /&gt;
                &amp;quot;1a545d8d-f14f-32aa-ad96-1abca948a662&amp;quot;,&lt;br /&gt;
                &amp;quot;d78fa62c-301d-fa10-188a-ee5f6ad87777&amp;quot;,&lt;br /&gt;
                &amp;quot;69e53076-8083-975b-31c0-420f1f5658dc&amp;quot;,&lt;br /&gt;
                &amp;quot;1b5ffc88-96e6-03c0-39c0-e38a6fad981a&amp;quot;,&lt;br /&gt;
                &amp;quot;a1511389-1b45-b7fb-1961-fd02ee57e26d&amp;quot;,&lt;br /&gt;
                &amp;quot;474e449e-f2f3-d5ac-1c63-1be922b3b434&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list sheldon=[&lt;br /&gt;
                &amp;quot;2958c0ac-cba6-a02b-da3e-aec050e3714f&amp;quot;,&lt;br /&gt;
                &amp;quot;cb8faeb7-c87e-c57c-448a-53a718adb3c8&amp;quot;,&lt;br /&gt;
                &amp;quot;572ff18e-d319-6213-ca28-202aeb7dc2e8&amp;quot;,&lt;br /&gt;
                &amp;quot;0bfc28e2-788d-035d-1ac1-ce752d90f89c&amp;quot;,&lt;br /&gt;
                &amp;quot;1fe4af1d-d99b-fe28-fba8-0006527c4c5f&amp;quot;,&lt;br /&gt;
                &amp;quot;f7fb5f59-0275-3ee7-9b54-e9a1ae61b76c&amp;quot;,&lt;br /&gt;
                &amp;quot;5e52d02e-edae-bf73-da61-9e1fe4e1801b&amp;quot;,&lt;br /&gt;
                &amp;quot;ff54400e-050c-7f87-cefd-a396c86d24d6&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    fontmap=sysfixed + OCR_A + profont + cour_new + bs_vera + sheldon;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    link_message(integer sender, integer num, string msg, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if ((id == kravtext_cmd) &amp;amp;&amp;amp; (num &amp;amp; bitmask))&lt;br /&gt;
        {&lt;br /&gt;
            param=[]; // create our primitive param list&lt;br /&gt;
            msg=llToUpper(msg); // make everything upper case&lt;br /&gt;
            integer i=0;&lt;br /&gt;
            integer this_idx=0;&lt;br /&gt;
            integer frame=0;&lt;br /&gt;
            integer tnum=0;&lt;br /&gt;
            integer xinc=0;&lt;br /&gt;
            integer yinc=0;&lt;br /&gt;
            integer fx=0;&lt;br /&gt;
            integer fy=0;&lt;br /&gt;
            float xpos=0.;&lt;br /&gt;
            float ypos=0.;&lt;br /&gt;
&lt;br /&gt;
            integer thisface=0;&lt;br /&gt;
            string thistex=NULL_KEY;&lt;br /&gt;
            vector this_rep=&amp;lt;0.,0.,0.&amp;gt;;&lt;br /&gt;
            for (i=0; i &amp;lt; numfaces; i++)&lt;br /&gt;
            {&lt;br /&gt;
                this_idx = start_idx + (i * 2);&lt;br /&gt;
                frame = ( mod * indexAlpha( llGetSubString( msg, this_idx, this_idx ) ) )&lt;br /&gt;
                        + indexAlpha( llGetSubString( msg, this_idx+ 1, this_idx +1 ) );&lt;br /&gt;
                base_offset=llList2Vector(corner_map, i);&lt;br /&gt;
                this_rep=llList2Vector(rep_map, i);&lt;br /&gt;
                thisface=llList2Integer(face_map, i);&lt;br /&gt;
                xinc = frame % 32;&lt;br /&gt;
                yinc = frame / 32;&lt;br /&gt;
                fx = xinc / 16;&lt;br /&gt;
                fy = yinc / 16;&lt;br /&gt;
                tnum=(fy * 2) + fx;&lt;br /&gt;
                thistex=llList2String(cur_texmap, tnum);&lt;br /&gt;
                xinc = xinc - ( 16 * fx );&lt;br /&gt;
                yinc = yinc - ( 16 * fy );&lt;br /&gt;
                xpos=base_offset.x + (increment * (float)xinc);&lt;br /&gt;
                ypos=base_offset.y - (increment * (float)yinc);&lt;br /&gt;
&lt;br /&gt;
                param += [&lt;br /&gt;
                            PRIM_TEXTURE,&lt;br /&gt;
                            thisface,&lt;br /&gt;
                            thistex,&lt;br /&gt;
                            this_rep,&lt;br /&gt;
                            &amp;lt;xpos, ypos, 0&amp;gt;,&lt;br /&gt;
                            0.&lt;br /&gt;
                            ];&lt;br /&gt;
            }&lt;br /&gt;
            llSetPrimitiveParams(param);&lt;br /&gt;
        }&lt;br /&gt;
        else if ((id == ksetfont_cmd) &amp;amp;&amp;amp; (num &amp;amp; bitmask))&lt;br /&gt;
        {&lt;br /&gt;
            integer fnum=(integer)msg;&lt;br /&gt;
            loadFont(fnum);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
NOTE: I tested this and XxyyText with a minor modification (only the render option). RavText toke 0.444653 seconds to render the same text as Xxyy wich toke 0.448598 seconds, nothing significant for me plus Xxyy have more chars. Jor3l Boa&lt;br /&gt;
&lt;br /&gt;
Its not the speed of rendering the text itself - its the speed at which the client renders the textures.  As I mentioned in the advantages / disadvantages, that&#039;s the man reason for using it.  The very fact that it uses fewer characters means it has a smaller texture &amp;quot;footprint&amp;quot; and renders faster overall in clients due to much fewer textures to load.  I think Jor3l Boa is confusing client rendering with script execution time.  Not an uncommon mistake, but it totally misses the entire point of this script lol.  -Rav&lt;/div&gt;</summary>
		<author><name>Ravenous Dingo</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=RavText&amp;diff=177073</id>
		<title>RavText</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=RavText&amp;diff=177073"/>
		<updated>2008-12-16T19:54:42Z</updated>

		<summary type="html">&lt;p&gt;Ravenous Dingo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header}}&lt;br /&gt;
&lt;br /&gt;
RavText&lt;br /&gt;
A lightweight, multi font, text-on-a-prim display system&lt;br /&gt;
Version 1.0(3) &lt;br /&gt;
&lt;br /&gt;
License:  This is licensed under the terms of the Lesser GPL (LGPL).&lt;br /&gt;
&lt;br /&gt;
This is yet another 10 character display using a 5 faced prim. It does not, however, use any part of the popular [[XyText]] series of scripts.  It is 100% home grown.  It is meant for specialized usage: specifically when one desires a very lightweight script for displaying 10 character basic alphanumeric text.  While it could be expanded to accommodate more characters rather easily, at the moment it just does uppercase alphanumeric plus a few special characters. &lt;br /&gt;
&lt;br /&gt;
The functionality of RavText is limited compared to other text systems, but does have some advantages.  it is definitely not suitable for every application.  Here are the advantages and drawbacks of RavText compared to other systems:&lt;br /&gt;
&lt;br /&gt;
DISADVANTAGES:&lt;br /&gt;
&lt;br /&gt;
1. Limited character set.  Uppercase alphanumeric characters and a few special characters (namely &amp;quot; !@#$%&amp;amp;()&amp;quot;) are supported.  (However, it could easily be expanded to use larger character sets with a few minor modifications and the right texture maps).&lt;br /&gt;
&lt;br /&gt;
2. Lack of special effects or a robust display system.  There are no fade in / fade out effects or any sort of color control, although there is nothing preventing someone from adding them.&lt;br /&gt;
&lt;br /&gt;
3. Currently, the textures can give an annoying flicker under some circumstances when viewed at certain angles on certain displays.&lt;br /&gt;
&lt;br /&gt;
4. Needs some manual configuration when using more than one 5 prim display.  There is no link scanner or any other utility built in.  Individual prims must have their own script and that script must be preconfigured by hand (although it does not take much effort to do so).&lt;br /&gt;
&lt;br /&gt;
5. Not very well commented or documented.  Meh, I&#039;m lazy.&lt;br /&gt;
&lt;br /&gt;
ADVANTAGES:&lt;br /&gt;
&lt;br /&gt;
1. Very lightweight &amp;amp; efficient.  The script is relatively simple, and fast.  It attempts to keep CPU usage to a minimum.&lt;br /&gt;
&lt;br /&gt;
2. &amp;quot;Rezzes&amp;quot; faster.  Partly because of the limited character set, RavText only uses 8 textures per character map, as opposed to the 60+ textures used by XyText derivitives. This tends to result in textures rezzing much faster, and staying in the cache more frequently.  NOTE:  If RavText supported 128 characters instead of the current 45, it would require 64 textures.  This is one of the main reasons I decided to go with uppercase only. I wanted quick rendering basic text.&lt;br /&gt;
&lt;br /&gt;
3. Flexible.  While this version is configured for the standard 5 face configuration, it can be modified to accommodate almost any primface configuration by just editing a few lists.&lt;br /&gt;
&lt;br /&gt;
3. Supports multiple fonts.  Due to the low number of textures required to map the limited RavText character set, it was easy to generate additional display fonts.  Currently, there are 6 possible fonts.&lt;br /&gt;
&lt;br /&gt;
BASIC CONFIGURATION AND CONCEPTS:&lt;br /&gt;
&lt;br /&gt;
RavText uses the variables &amp;quot;panelnum&amp;quot;  and &amp;quot;subpanel&amp;quot; to tell it where it is in your display system.  Each panel is considered to be its own unit and is composed of subpanels. For example, if you wanted to have two blocks of text, each 20 characters long, you would have two panels, each with two subpanels.  Subpanels should be numbered left to right starting with 0.  So text block #1 would be panel 0, with subpanel 0 and 1.  text block 2 would be panel 1, with subpanels 0 and 1 as well.&lt;br /&gt;
&lt;br /&gt;
To set the text on a specific panel, you set the key attribute of a linked message to be &amp;quot;7A&amp;quot;, set the string attribute to be whatever string you want to display.  You would set the number to be 2 raised to the power of the panel number.  You can use -1 to display on all panels.&lt;br /&gt;
&lt;br /&gt;
To change the font, set the key attribute of the link message to be &amp;quot;7F&amp;quot;, set the integer value to be 2 raised to the panel number (or -1 for all panels) and the string to be the font number you want to use (fonts are numbered 0 to 5).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BASIC USAGE:&lt;br /&gt;
&lt;br /&gt;
1. Make a 5 face prim, just like the ones used with current XyText versions.&lt;br /&gt;
&lt;br /&gt;
2. Put the RavText script in the prim.&lt;br /&gt;
&lt;br /&gt;
3. To display text, send a link message to the prim thusly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;TEST MSG!&amp;quot;, &amp;quot;7A&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The value &amp;quot;7A&amp;quot; is the command to display a string of text.  The value -1 basically means all panels.&lt;br /&gt;
&lt;br /&gt;
OK, next lets make a two panel display.  It will display up to 20 characters.&lt;br /&gt;
&lt;br /&gt;
1. make two 5 faced prims.&lt;br /&gt;
&lt;br /&gt;
2. Put RavText scripts in each prim&lt;br /&gt;
&lt;br /&gt;
3. Set the subpanel variable on the rightmost display prim to be 1.  Leave the other subpanel value at 0.&lt;br /&gt;
&lt;br /&gt;
4. Once again, send the link message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;TEST MSG! EXPANDED!&amp;quot;, &amp;quot;7A&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change the font, send the following link message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;3&amp;quot;, &amp;quot;7F&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are a lot more examples I could give, but for now I will leave it as is.  I will try to update this page as I can. &lt;br /&gt;
&lt;br /&gt;
AND NOW, THE CODE:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// RavText&lt;br /&gt;
// Version 1.0(3)&lt;br /&gt;
// Created 2008-09-18&lt;br /&gt;
// A lightweight 10 char / prim text generation system with multiple font support&lt;br /&gt;
// Created by Ravenous Dingo&lt;br /&gt;
// Copyright 2008 owned by the person controlling the Second Life avatar named Ravenous Dingo&lt;br /&gt;
// This code is hereby released under the terms of the LGPL (Lesser GPL) license&lt;br /&gt;
// Associated textures are hereby released to the public domain&lt;br /&gt;
&lt;br /&gt;
float panelnum=0.; // Panels are groups of prims that work as one block of text&lt;br /&gt;
&lt;br /&gt;
integer subpanel=0; // sub panel is the position within the panel block&lt;br /&gt;
&lt;br /&gt;
integer default_font=0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
list fontmap=[&lt;br /&gt;
&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
list corner_map=[&lt;br /&gt;
                    &amp;lt;-0.4225, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.4675, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.894, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.4675, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.515, 0.4675, 0&amp;gt;&lt;br /&gt;
                    ];&lt;br /&gt;
list rep_map=[&lt;br /&gt;
                &amp;lt;0.1525, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.0625, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;-1.0, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.0625, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.155, 0.0625, 0&amp;gt;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
list face_map=[ 3, 7, 4, 6, 1 ];&lt;br /&gt;
&lt;br /&gt;
list cur_texmap=[];&lt;br /&gt;
&lt;br /&gt;
integer numfaces=0;&lt;br /&gt;
&lt;br /&gt;
integer start_idx=0;&lt;br /&gt;
&lt;br /&gt;
string alphamap=&amp;quot; 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%&amp;amp;()&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
integer bitmask=0;&lt;br /&gt;
key kravtext_cmd=&amp;quot;7A&amp;quot;;&lt;br /&gt;
key ksetfont_cmd=&amp;quot;7F&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vector base_offset=&amp;lt;-0.4675, 0.4675, 0&amp;gt;;&lt;br /&gt;
float increment=0.0625;&lt;br /&gt;
&lt;br /&gt;
integer mod=0;&lt;br /&gt;
integer curfont=-1;&lt;br /&gt;
list param=[];&lt;br /&gt;
&lt;br /&gt;
integer indexAlpha(string str)&lt;br /&gt;
{&lt;br /&gt;
    integer idx=llSubStringIndex(alphamap, str);&lt;br /&gt;
    if (idx == -1)&lt;br /&gt;
    {&lt;br /&gt;
        idx=0;&lt;br /&gt;
    }&lt;br /&gt;
    return idx;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
init()&lt;br /&gt;
{&lt;br /&gt;
    composeFonts();&lt;br /&gt;
    mod=llStringLength(alphamap);&lt;br /&gt;
    numfaces=llGetListLength(face_map);&lt;br /&gt;
    bitmask=llRound(llPow(2.,panelnum));&lt;br /&gt;
    start_idx=subpanel * numfaces * 2;&lt;br /&gt;
    loadFont(default_font);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loadFont(integer fontnum)&lt;br /&gt;
{&lt;br /&gt;
    if (fontnum == curfont)&lt;br /&gt;
    {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    list tmp_font=llList2List(fontmap, fontnum * 8, (fontnum * 8) + 7);&lt;br /&gt;
&lt;br /&gt;
    integer i=0;&lt;br /&gt;
    string tfont=&amp;quot;&amp;quot;;&lt;br /&gt;
    integer tfnum=0;&lt;br /&gt;
    integer tidx=0;&lt;br /&gt;
    if (llGetListLength(param) != 0)&lt;br /&gt;
    {&lt;br /&gt;
        for (i=0; i &amp;lt; numfaces; i++)&lt;br /&gt;
        {&lt;br /&gt;
            tidx=(i * 6) + 2;&lt;br /&gt;
            tfont=llList2String(param, tidx);&lt;br /&gt;
            // now find the font index;&lt;br /&gt;
            tfnum=llListFindList(cur_texmap, [tfont]);&lt;br /&gt;
            // get the new font&lt;br /&gt;
            tfont=llList2String(tmp_font, tfnum);&lt;br /&gt;
            // and replace it&lt;br /&gt;
            param=llListReplaceList(param,  [tfont], tidx, tidx);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    curfont=fontnum;&lt;br /&gt;
    cur_texmap=tmp_font;&lt;br /&gt;
    llSetPrimitiveParams(param);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
composeFonts()&lt;br /&gt;
{&lt;br /&gt;
    list sysfixed=[&lt;br /&gt;
                &amp;quot;df574f09-061c-d3fe-07eb-3d0008271bc4&amp;quot;,&lt;br /&gt;
                &amp;quot;ace8bde9-b93e-d667-c03c-45ce826c955d&amp;quot;,&lt;br /&gt;
                &amp;quot;f7c99d89-ff0b-059e-3e3b-625d71799f19&amp;quot;,&lt;br /&gt;
                &amp;quot;eb3e7fea-60f6-6335-a7da-5d0e7dbed0bf&amp;quot;,&lt;br /&gt;
                &amp;quot;627a4675-4db8-f473-b16a-27aeb42e2b6f&amp;quot;,&lt;br /&gt;
                &amp;quot;aa14726b-fab8-7802-cc23-f118455f4354&amp;quot;,&lt;br /&gt;
                &amp;quot;d7808242-a2da-e144-3338-6b005671e6e6&amp;quot;,&lt;br /&gt;
                &amp;quot;60d062d7-b60f-220d-f9dd-189596a796d2&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
    list OCR_A=[&lt;br /&gt;
                &amp;quot;6d788259-709e-cc72-98b4-4ec56986a958&amp;quot;,&lt;br /&gt;
                &amp;quot;c74622f7-5740-1e5f-2a64-69060bf2742e&amp;quot;,&lt;br /&gt;
                &amp;quot;ffa88837-7f13-dbb3-e28c-2e969b9b4737&amp;quot;,&lt;br /&gt;
                &amp;quot;9127b5d8-459f-7d2c-2b3b-2b6c740de94a&amp;quot;,&lt;br /&gt;
                &amp;quot;894d4fc7-6c3c-954c-e7c9-94c687a1ac62&amp;quot;,&lt;br /&gt;
                &amp;quot;f529f498-be68-f5bd-2464-34e5bb4a8cdb&amp;quot;,&lt;br /&gt;
                &amp;quot;b645eb2c-57eb-a420-afbe-cba49bd298d8&amp;quot;,&lt;br /&gt;
                &amp;quot;bf8541e1-d875-96a6-adc3-fbdd38c41f2a&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
    list profont=[&lt;br /&gt;
                &amp;quot;9e83c094-58b1-8375-192f-2e0ef0f06d91&amp;quot;,&lt;br /&gt;
                &amp;quot;fcd34765-3c58-c1df-2c5e-5e96d1491c0c&amp;quot;,&lt;br /&gt;
                &amp;quot;fd232e50-9ed5-3cc0-345e-b08154b9bf97&amp;quot;,&lt;br /&gt;
                &amp;quot;10c5ab5f-49cb-ff40-3023-029caa4a4ff1&amp;quot;,&lt;br /&gt;
                &amp;quot;2956334f-79f3-010b-9be7-fc4811d2adae&amp;quot;,&lt;br /&gt;
                &amp;quot;b0277b5b-dfbf-27c3-47c9-3a120881fe64&amp;quot;,&lt;br /&gt;
                &amp;quot;969a1eb3-acbf-8425-1ddd-4f6a81bdbd58&amp;quot;,&lt;br /&gt;
                &amp;quot;409d587d-a374-4a1b-16d5-9c19a9baf83a&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list cour_new=[&lt;br /&gt;
                &amp;quot;e60aa9ab-7f1c-33ec-3408-37c20cce3c76&amp;quot;,&lt;br /&gt;
                &amp;quot;93eb9bef-dafa-9980-5d25-5adb5614ccc3&amp;quot;,&lt;br /&gt;
                &amp;quot;dd584fae-63e2-6f50-4811-a5b14989020a&amp;quot;,&lt;br /&gt;
                &amp;quot;cf4c4265-64a9-fa64-b18e-47c11fc18aa2&amp;quot;,&lt;br /&gt;
                &amp;quot;1c63839f-ebfa-c9e9-2391-98faa059c7a3&amp;quot;,&lt;br /&gt;
                &amp;quot;533279c5-cd44-daa4-b010-cd7c99e48c72&amp;quot;,&lt;br /&gt;
                &amp;quot;c1731907-6627-7463-2cff-dfa4499559bb&amp;quot;,&lt;br /&gt;
                &amp;quot;88e2bd5c-5c6f-6103-c2fb-db958e31d026&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list bs_vera=[&lt;br /&gt;
                &amp;quot;f88d322e-2f8d-c5d9-544c-293e0c5647c1&amp;quot;,&lt;br /&gt;
                &amp;quot;91546531-86b9-87ec-3dec-2072ebb012ad&amp;quot;,&lt;br /&gt;
                &amp;quot;1a545d8d-f14f-32aa-ad96-1abca948a662&amp;quot;,&lt;br /&gt;
                &amp;quot;d78fa62c-301d-fa10-188a-ee5f6ad87777&amp;quot;,&lt;br /&gt;
                &amp;quot;69e53076-8083-975b-31c0-420f1f5658dc&amp;quot;,&lt;br /&gt;
                &amp;quot;1b5ffc88-96e6-03c0-39c0-e38a6fad981a&amp;quot;,&lt;br /&gt;
                &amp;quot;a1511389-1b45-b7fb-1961-fd02ee57e26d&amp;quot;,&lt;br /&gt;
                &amp;quot;474e449e-f2f3-d5ac-1c63-1be922b3b434&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list sheldon=[&lt;br /&gt;
                &amp;quot;2958c0ac-cba6-a02b-da3e-aec050e3714f&amp;quot;,&lt;br /&gt;
                &amp;quot;cb8faeb7-c87e-c57c-448a-53a718adb3c8&amp;quot;,&lt;br /&gt;
                &amp;quot;572ff18e-d319-6213-ca28-202aeb7dc2e8&amp;quot;,&lt;br /&gt;
                &amp;quot;0bfc28e2-788d-035d-1ac1-ce752d90f89c&amp;quot;,&lt;br /&gt;
                &amp;quot;1fe4af1d-d99b-fe28-fba8-0006527c4c5f&amp;quot;,&lt;br /&gt;
                &amp;quot;f7fb5f59-0275-3ee7-9b54-e9a1ae61b76c&amp;quot;,&lt;br /&gt;
                &amp;quot;5e52d02e-edae-bf73-da61-9e1fe4e1801b&amp;quot;,&lt;br /&gt;
                &amp;quot;ff54400e-050c-7f87-cefd-a396c86d24d6&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    fontmap=sysfixed + OCR_A + profont + cour_new + bs_vera + sheldon;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    link_message(integer sender, integer num, string msg, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if ((id == kravtext_cmd) &amp;amp;&amp;amp; (num &amp;amp; bitmask))&lt;br /&gt;
        {&lt;br /&gt;
            param=[]; // create our primitive param list&lt;br /&gt;
            msg=llToUpper(msg); // make everything upper case&lt;br /&gt;
            integer i=0;&lt;br /&gt;
            integer this_idx=0;&lt;br /&gt;
            integer frame=0;&lt;br /&gt;
            integer tnum=0;&lt;br /&gt;
            integer xinc=0;&lt;br /&gt;
            integer yinc=0;&lt;br /&gt;
            integer fx=0;&lt;br /&gt;
            integer fy=0;&lt;br /&gt;
            float xpos=0.;&lt;br /&gt;
            float ypos=0.;&lt;br /&gt;
&lt;br /&gt;
            integer thisface=0;&lt;br /&gt;
            string thistex=NULL_KEY;&lt;br /&gt;
            vector this_rep=&amp;lt;0.,0.,0.&amp;gt;;&lt;br /&gt;
            for (i=0; i &amp;lt; numfaces; i++)&lt;br /&gt;
            {&lt;br /&gt;
                this_idx = start_idx + (i * 2);&lt;br /&gt;
                frame = ( mod * indexAlpha( llGetSubString( msg, this_idx, this_idx ) ) )&lt;br /&gt;
                        + indexAlpha( llGetSubString( msg, this_idx+ 1, this_idx +1 ) );&lt;br /&gt;
                base_offset=llList2Vector(corner_map, i);&lt;br /&gt;
                this_rep=llList2Vector(rep_map, i);&lt;br /&gt;
                thisface=llList2Integer(face_map, i);&lt;br /&gt;
                xinc = frame % 32;&lt;br /&gt;
                yinc = frame / 32;&lt;br /&gt;
                fx = xinc / 16;&lt;br /&gt;
                fy = yinc / 16;&lt;br /&gt;
                tnum=(fy * 2) + fx;&lt;br /&gt;
                thistex=llList2String(cur_texmap, tnum);&lt;br /&gt;
                xinc = xinc - ( 16 * fx );&lt;br /&gt;
                yinc = yinc - ( 16 * fy );&lt;br /&gt;
                xpos=base_offset.x + (increment * (float)xinc);&lt;br /&gt;
                ypos=base_offset.y - (increment * (float)yinc);&lt;br /&gt;
&lt;br /&gt;
                param += [&lt;br /&gt;
                            PRIM_TEXTURE,&lt;br /&gt;
                            thisface,&lt;br /&gt;
                            thistex,&lt;br /&gt;
                            this_rep,&lt;br /&gt;
                            &amp;lt;xpos, ypos, 0&amp;gt;,&lt;br /&gt;
                            0.&lt;br /&gt;
                            ];&lt;br /&gt;
            }&lt;br /&gt;
            llSetPrimitiveParams(param);&lt;br /&gt;
        }&lt;br /&gt;
        else if ((id == ksetfont_cmd) &amp;amp;&amp;amp; (num &amp;amp; bitmask))&lt;br /&gt;
        {&lt;br /&gt;
            integer fnum=(integer)msg;&lt;br /&gt;
            loadFont(fnum);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ravenous Dingo</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=RavText&amp;diff=161953</id>
		<title>RavText</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=RavText&amp;diff=161953"/>
		<updated>2008-12-01T13:58:43Z</updated>

		<summary type="html">&lt;p&gt;Ravenous Dingo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;RavText&lt;br /&gt;
A lightweight, multi font, text-on-a-prim display system&lt;br /&gt;
Version 1.0(3) &lt;br /&gt;
&lt;br /&gt;
License:  This is licensed under the terms of the Lesser GPL (LGPL).&lt;br /&gt;
&lt;br /&gt;
This is yet another 10 character display using a 5 faced prim. It does not, however, use any part of the popular [[XyText]] series of scripts.  It is 100% home grown.  It is meant for specialized usage: specifically when one desires a very lightweight script for displaying 10 character basic alphanumeric text.  While it could be expanded to accommodate more characters rather easily, at the moment it just does uppercase alphanumeric plus a few special characters. &lt;br /&gt;
&lt;br /&gt;
The functionality of RavText is limited compared to other text systems, but does have some advantages.  it is definitely not suitable for every application.  Here are the advantages and drawbacks of RavText compared to other systems:&lt;br /&gt;
&lt;br /&gt;
DISADVANTAGES:&lt;br /&gt;
&lt;br /&gt;
1. Limited character set.  Uppercase alphanumeric characters and a few special characters (namely &amp;quot; !@#$%&amp;amp;()&amp;quot;) are supported.  (However, it could easily be expanded to use larger character sets with a few minor modifications and the right texture maps).&lt;br /&gt;
&lt;br /&gt;
2. Lack of special effects or a robust display system.  There are no fade in / fade out effects or any sort of color control, although there is nothing preventing someone from adding them.&lt;br /&gt;
&lt;br /&gt;
3. Currently, the textures can give an annoying flicker under some circumstances when viewed at certain angles on certain displays.&lt;br /&gt;
&lt;br /&gt;
4. Needs some manual configuration when using more than one 5 prim display.  There is no link scanner or any other utility built in.  Individual prims must have their own script and that script must be preconfigured by hand (although it does not take much effort to do so).&lt;br /&gt;
&lt;br /&gt;
5. Not very well commented or documented.  Meh, I&#039;m lazy.&lt;br /&gt;
&lt;br /&gt;
ADVANTAGES:&lt;br /&gt;
&lt;br /&gt;
1. Very lightweight &amp;amp; efficient.  The script is relatively simple, and fast.  It attempts to keep CPU usage to a minimum.&lt;br /&gt;
&lt;br /&gt;
2. &amp;quot;Rezzes&amp;quot; faster.  Partly because of the limited character set, RavText only uses 8 textures per character map, as opposed to the 60+ textures used by XyText derivitives. This tends to result in textures rezzing much faster, and staying in the cache more frequently.  NOTE:  If RavText supported 128 characters instead of the current 45, it would require 64 textures.  This is one of the main reasons I decided to go with uppercase only. I wanted quick rendering basic text.&lt;br /&gt;
&lt;br /&gt;
3. Flexible.  While this version is configured for the standard 5 face configuration, it can be modified to accommodate almost any primface configuration by just editing a few lists.&lt;br /&gt;
&lt;br /&gt;
3. Supports multiple fonts.  Due to the low number of textures required to map the limited RavText character set, it was easy to generate additional display fonts.  Currently, there are 6 possible fonts.&lt;br /&gt;
&lt;br /&gt;
BASIC CONFIGURATION AND CONCEPTS:&lt;br /&gt;
&lt;br /&gt;
RavText uses the variables &amp;quot;panelnum&amp;quot;  and &amp;quot;subpanel&amp;quot; to tell it where it is in your display system.  Each panel is considered to be its own unit and is composed of subpanels. For example, if you wanted to have two blocks of text, each 20 characters long, you would have two panels, each with two subpanels.  Subpanels should be numbered left to right starting with 0.  So text block #1 would be panel 0, with subpanel 0 and 1.  text block 2 would be panel 1, with subpanels 0 and 1 as well.&lt;br /&gt;
&lt;br /&gt;
To set the text on a specific panel, you set the key attribute of a linked message to be &amp;quot;7A&amp;quot;, set the string attribute to be whatever string you want to display.  You would set the number to be 2 raised to the power of the panel number.  You can use -1 to display on all panels.&lt;br /&gt;
&lt;br /&gt;
To change the font, set the key attribute of the link message to be &amp;quot;7F&amp;quot;, set the integer value to be 2 raised to the panel number (or -1 for all panels) and the string to be the font number you want to use (fonts are numbered 0 to 5).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BASIC USAGE:&lt;br /&gt;
&lt;br /&gt;
1. Make a 5 face prim, just like the ones used with current XyText versions.&lt;br /&gt;
&lt;br /&gt;
2. Put the RavText script in the prim.&lt;br /&gt;
&lt;br /&gt;
3. To display text, send a link message to the prim thusly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;TEST MSG!&amp;quot;, &amp;quot;7A&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The value &amp;quot;7A&amp;quot; is the command to display a string of text.  The value -1 basically means all panels.&lt;br /&gt;
&lt;br /&gt;
OK, next lets make a two panel display.  It will display up to 20 characters.&lt;br /&gt;
&lt;br /&gt;
1. make two 5 faced prims.&lt;br /&gt;
&lt;br /&gt;
2. Put RavText scripts in each prim&lt;br /&gt;
&lt;br /&gt;
3. Set the subpanel variable on the rightmost display prim to be 1.  Leave the other subpanel value at 0.&lt;br /&gt;
&lt;br /&gt;
4. Once again, send the link message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;TEST MSG! EXPANDED!&amp;quot;, &amp;quot;7A&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change the font, send the following link message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;3&amp;quot;, &amp;quot;7F&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are a lot more examples I could give, but for now I will leave it as is.  I will try to update this page as I can. &lt;br /&gt;
&lt;br /&gt;
AND NOW, THE CODE:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// RavText&lt;br /&gt;
// Version 1.0(3)&lt;br /&gt;
// Created 2008-09-18&lt;br /&gt;
// A lightweight 10 char / prim text generation system with multiple font support&lt;br /&gt;
// Created by Ravenous Dingo&lt;br /&gt;
// Copyright 2008 owned by the person controlling the Second Life avatar named Ravenous Dingo&lt;br /&gt;
// This code is hereby released under the terms of the LGPL (Lesser GPL) license&lt;br /&gt;
// Associated textures are hereby released to the public domain&lt;br /&gt;
&lt;br /&gt;
float panelnum=0.; // Panels are groups of prims that work as one block of text&lt;br /&gt;
&lt;br /&gt;
integer subpanel=0; // sub panel is the position within the panel block&lt;br /&gt;
&lt;br /&gt;
integer default_font=0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
list fontmap=[&lt;br /&gt;
&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
list corner_map=[&lt;br /&gt;
                    &amp;lt;-0.4225, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.4675, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.894, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.4675, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.515, 0.4675, 0&amp;gt;&lt;br /&gt;
                    ];&lt;br /&gt;
list rep_map=[&lt;br /&gt;
                &amp;lt;0.1525, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.0625, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;-1.0, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.0625, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.155, 0.0625, 0&amp;gt;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
list face_map=[ 3, 7, 4, 6, 1 ];&lt;br /&gt;
&lt;br /&gt;
list cur_texmap=[];&lt;br /&gt;
&lt;br /&gt;
integer numfaces=0;&lt;br /&gt;
&lt;br /&gt;
integer start_idx=0;&lt;br /&gt;
&lt;br /&gt;
string alphamap=&amp;quot; 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%&amp;amp;()&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
integer bitmask=0;&lt;br /&gt;
key kravtext_cmd=&amp;quot;7A&amp;quot;;&lt;br /&gt;
key ksetfont_cmd=&amp;quot;7F&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vector base_offset=&amp;lt;-0.4675, 0.4675, 0&amp;gt;;&lt;br /&gt;
float increment=0.0625;&lt;br /&gt;
&lt;br /&gt;
integer mod=0;&lt;br /&gt;
integer curfont=-1;&lt;br /&gt;
list param=[];&lt;br /&gt;
&lt;br /&gt;
integer indexAlpha(string str)&lt;br /&gt;
{&lt;br /&gt;
    integer idx=llSubStringIndex(alphamap, str);&lt;br /&gt;
    if (idx == -1)&lt;br /&gt;
    {&lt;br /&gt;
        idx=0;&lt;br /&gt;
    }&lt;br /&gt;
    return idx;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
init()&lt;br /&gt;
{&lt;br /&gt;
    composeFonts();&lt;br /&gt;
    mod=llStringLength(alphamap);&lt;br /&gt;
    numfaces=llGetListLength(face_map);&lt;br /&gt;
    bitmask=llRound(llPow(2.,panelnum));&lt;br /&gt;
    start_idx=subpanel * numfaces * 2;&lt;br /&gt;
    loadFont(default_font);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loadFont(integer fontnum)&lt;br /&gt;
{&lt;br /&gt;
    if (fontnum == curfont)&lt;br /&gt;
    {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    list tmp_font=llList2List(fontmap, fontnum * 8, (fontnum * 8) + 7);&lt;br /&gt;
&lt;br /&gt;
    integer i=0;&lt;br /&gt;
    string tfont=&amp;quot;&amp;quot;;&lt;br /&gt;
    integer tfnum=0;&lt;br /&gt;
    integer tidx=0;&lt;br /&gt;
    if (llGetListLength(param) != 0)&lt;br /&gt;
    {&lt;br /&gt;
        for (i=0; i &amp;lt; numfaces; i++)&lt;br /&gt;
        {&lt;br /&gt;
            tidx=(i * 6) + 2;&lt;br /&gt;
            tfont=llList2String(param, tidx);&lt;br /&gt;
            // now find the font index;&lt;br /&gt;
            tfnum=llListFindList(cur_texmap, [tfont]);&lt;br /&gt;
            // get the new font&lt;br /&gt;
            tfont=llList2String(tmp_font, tfnum);&lt;br /&gt;
            // and replace it&lt;br /&gt;
            param=llListReplaceList(param,  [tfont], tidx, tidx);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    curfont=fontnum;&lt;br /&gt;
    cur_texmap=tmp_font;&lt;br /&gt;
    llSetPrimitiveParams(param);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
composeFonts()&lt;br /&gt;
{&lt;br /&gt;
    list sysfixed=[&lt;br /&gt;
                &amp;quot;df574f09-061c-d3fe-07eb-3d0008271bc4&amp;quot;,&lt;br /&gt;
                &amp;quot;ace8bde9-b93e-d667-c03c-45ce826c955d&amp;quot;,&lt;br /&gt;
                &amp;quot;f7c99d89-ff0b-059e-3e3b-625d71799f19&amp;quot;,&lt;br /&gt;
                &amp;quot;eb3e7fea-60f6-6335-a7da-5d0e7dbed0bf&amp;quot;,&lt;br /&gt;
                &amp;quot;627a4675-4db8-f473-b16a-27aeb42e2b6f&amp;quot;,&lt;br /&gt;
                &amp;quot;aa14726b-fab8-7802-cc23-f118455f4354&amp;quot;,&lt;br /&gt;
                &amp;quot;d7808242-a2da-e144-3338-6b005671e6e6&amp;quot;,&lt;br /&gt;
                &amp;quot;60d062d7-b60f-220d-f9dd-189596a796d2&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
    list OCR_A=[&lt;br /&gt;
                &amp;quot;6d788259-709e-cc72-98b4-4ec56986a958&amp;quot;,&lt;br /&gt;
                &amp;quot;c74622f7-5740-1e5f-2a64-69060bf2742e&amp;quot;,&lt;br /&gt;
                &amp;quot;ffa88837-7f13-dbb3-e28c-2e969b9b4737&amp;quot;,&lt;br /&gt;
                &amp;quot;9127b5d8-459f-7d2c-2b3b-2b6c740de94a&amp;quot;,&lt;br /&gt;
                &amp;quot;894d4fc7-6c3c-954c-e7c9-94c687a1ac62&amp;quot;,&lt;br /&gt;
                &amp;quot;f529f498-be68-f5bd-2464-34e5bb4a8cdb&amp;quot;,&lt;br /&gt;
                &amp;quot;b645eb2c-57eb-a420-afbe-cba49bd298d8&amp;quot;,&lt;br /&gt;
                &amp;quot;bf8541e1-d875-96a6-adc3-fbdd38c41f2a&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
    list profont=[&lt;br /&gt;
                &amp;quot;9e83c094-58b1-8375-192f-2e0ef0f06d91&amp;quot;,&lt;br /&gt;
                &amp;quot;fcd34765-3c58-c1df-2c5e-5e96d1491c0c&amp;quot;,&lt;br /&gt;
                &amp;quot;fd232e50-9ed5-3cc0-345e-b08154b9bf97&amp;quot;,&lt;br /&gt;
                &amp;quot;10c5ab5f-49cb-ff40-3023-029caa4a4ff1&amp;quot;,&lt;br /&gt;
                &amp;quot;2956334f-79f3-010b-9be7-fc4811d2adae&amp;quot;,&lt;br /&gt;
                &amp;quot;b0277b5b-dfbf-27c3-47c9-3a120881fe64&amp;quot;,&lt;br /&gt;
                &amp;quot;969a1eb3-acbf-8425-1ddd-4f6a81bdbd58&amp;quot;,&lt;br /&gt;
                &amp;quot;409d587d-a374-4a1b-16d5-9c19a9baf83a&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list cour_new=[&lt;br /&gt;
                &amp;quot;e60aa9ab-7f1c-33ec-3408-37c20cce3c76&amp;quot;,&lt;br /&gt;
                &amp;quot;93eb9bef-dafa-9980-5d25-5adb5614ccc3&amp;quot;,&lt;br /&gt;
                &amp;quot;dd584fae-63e2-6f50-4811-a5b14989020a&amp;quot;,&lt;br /&gt;
                &amp;quot;cf4c4265-64a9-fa64-b18e-47c11fc18aa2&amp;quot;,&lt;br /&gt;
                &amp;quot;1c63839f-ebfa-c9e9-2391-98faa059c7a3&amp;quot;,&lt;br /&gt;
                &amp;quot;533279c5-cd44-daa4-b010-cd7c99e48c72&amp;quot;,&lt;br /&gt;
                &amp;quot;c1731907-6627-7463-2cff-dfa4499559bb&amp;quot;,&lt;br /&gt;
                &amp;quot;88e2bd5c-5c6f-6103-c2fb-db958e31d026&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list bs_vera=[&lt;br /&gt;
                &amp;quot;f88d322e-2f8d-c5d9-544c-293e0c5647c1&amp;quot;,&lt;br /&gt;
                &amp;quot;91546531-86b9-87ec-3dec-2072ebb012ad&amp;quot;,&lt;br /&gt;
                &amp;quot;1a545d8d-f14f-32aa-ad96-1abca948a662&amp;quot;,&lt;br /&gt;
                &amp;quot;d78fa62c-301d-fa10-188a-ee5f6ad87777&amp;quot;,&lt;br /&gt;
                &amp;quot;69e53076-8083-975b-31c0-420f1f5658dc&amp;quot;,&lt;br /&gt;
                &amp;quot;1b5ffc88-96e6-03c0-39c0-e38a6fad981a&amp;quot;,&lt;br /&gt;
                &amp;quot;a1511389-1b45-b7fb-1961-fd02ee57e26d&amp;quot;,&lt;br /&gt;
                &amp;quot;474e449e-f2f3-d5ac-1c63-1be922b3b434&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list sheldon=[&lt;br /&gt;
                &amp;quot;2958c0ac-cba6-a02b-da3e-aec050e3714f&amp;quot;,&lt;br /&gt;
                &amp;quot;cb8faeb7-c87e-c57c-448a-53a718adb3c8&amp;quot;,&lt;br /&gt;
                &amp;quot;572ff18e-d319-6213-ca28-202aeb7dc2e8&amp;quot;,&lt;br /&gt;
                &amp;quot;0bfc28e2-788d-035d-1ac1-ce752d90f89c&amp;quot;,&lt;br /&gt;
                &amp;quot;1fe4af1d-d99b-fe28-fba8-0006527c4c5f&amp;quot;,&lt;br /&gt;
                &amp;quot;f7fb5f59-0275-3ee7-9b54-e9a1ae61b76c&amp;quot;,&lt;br /&gt;
                &amp;quot;5e52d02e-edae-bf73-da61-9e1fe4e1801b&amp;quot;,&lt;br /&gt;
                &amp;quot;ff54400e-050c-7f87-cefd-a396c86d24d6&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    fontmap=sysfixed + OCR_A + profont + cour_new + bs_vera + sheldon;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    link_message(integer sender, integer num, string msg, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if ((id == kravtext_cmd) &amp;amp;&amp;amp; (num &amp;amp; bitmask))&lt;br /&gt;
        {&lt;br /&gt;
            param=[]; // create our primitive param list&lt;br /&gt;
            msg=llToUpper(msg); // make everything upper case&lt;br /&gt;
            integer i=0;&lt;br /&gt;
            integer this_idx=0;&lt;br /&gt;
            integer frame=0;&lt;br /&gt;
            integer tnum=0;&lt;br /&gt;
            integer xinc=0;&lt;br /&gt;
            integer yinc=0;&lt;br /&gt;
            integer fx=0;&lt;br /&gt;
            integer fy=0;&lt;br /&gt;
            float xpos=0.;&lt;br /&gt;
            float ypos=0.;&lt;br /&gt;
&lt;br /&gt;
            integer thisface=0;&lt;br /&gt;
            string thistex=NULL_KEY;&lt;br /&gt;
            vector this_rep=&amp;lt;0.,0.,0.&amp;gt;;&lt;br /&gt;
            for (i=0; i &amp;lt; numfaces; i++)&lt;br /&gt;
            {&lt;br /&gt;
                this_idx = start_idx + (i * 2);&lt;br /&gt;
                frame = ( mod * indexAlpha( llGetSubString( msg, this_idx, this_idx ) ) )&lt;br /&gt;
                        + indexAlpha( llGetSubString( msg, this_idx+ 1, this_idx +1 ) );&lt;br /&gt;
                base_offset=llList2Vector(corner_map, i);&lt;br /&gt;
                this_rep=llList2Vector(rep_map, i);&lt;br /&gt;
                thisface=llList2Integer(face_map, i);&lt;br /&gt;
                xinc = frame % 32;&lt;br /&gt;
                yinc = frame / 32;&lt;br /&gt;
                fx = xinc / 16;&lt;br /&gt;
                fy = yinc / 16;&lt;br /&gt;
                tnum=(fy * 2) + fx;&lt;br /&gt;
                thistex=llList2String(cur_texmap, tnum);&lt;br /&gt;
                xinc = xinc - ( 16 * fx );&lt;br /&gt;
                yinc = yinc - ( 16 * fy );&lt;br /&gt;
                xpos=base_offset.x + (increment * (float)xinc);&lt;br /&gt;
                ypos=base_offset.y - (increment * (float)yinc);&lt;br /&gt;
&lt;br /&gt;
                param += [&lt;br /&gt;
                            PRIM_TEXTURE,&lt;br /&gt;
                            thisface,&lt;br /&gt;
                            thistex,&lt;br /&gt;
                            this_rep,&lt;br /&gt;
                            &amp;lt;xpos, ypos, 0&amp;gt;,&lt;br /&gt;
                            0.&lt;br /&gt;
                            ];&lt;br /&gt;
            }&lt;br /&gt;
            llSetPrimitiveParams(param);&lt;br /&gt;
        }&lt;br /&gt;
        else if ((id == ksetfont_cmd) &amp;amp;&amp;amp; (num &amp;amp; bitmask))&lt;br /&gt;
        {&lt;br /&gt;
            integer fnum=(integer)msg;&lt;br /&gt;
            loadFont(fnum);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ravenous Dingo</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=RavText&amp;diff=161943</id>
		<title>RavText</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=RavText&amp;diff=161943"/>
		<updated>2008-12-01T13:33:52Z</updated>

		<summary type="html">&lt;p&gt;Ravenous Dingo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;RavText&lt;br /&gt;
A lightweight, multi font, text-on-a-prim display system&lt;br /&gt;
Version 1.0(3) &lt;br /&gt;
&lt;br /&gt;
License:  This is licensed under the terms of the GPL version 2.&lt;br /&gt;
&lt;br /&gt;
This is yet another 10 character display using a 5 faced prim. It does not, however, use any part of the popular [[XyText]] series of scripts.  It is 100% home grown.  It is meant for specialized usage: specifically when one desires a very lightweight script for displaying 10 character basic alphanumeric text.  While it could be expanded to accommodate more characters rather easily, at the moment it just does uppercase alphanumeric plus a few special characters. &lt;br /&gt;
&lt;br /&gt;
The functionality of RavText is limited compared to other text systems, but does have some advantages.  it is definitely not suitable for every application.  Here are the advantages and drawbacks of RavText compared to other systems:&lt;br /&gt;
&lt;br /&gt;
DISADVANTAGES:&lt;br /&gt;
&lt;br /&gt;
1. Limited character set.  Uppercase alphanumeric characters and a few special characters (namely &amp;quot; !@#$%&amp;amp;()&amp;quot;) are supported.  (However, it could easily be expanded to use larger character sets with a few minor modifications and the right texture maps).&lt;br /&gt;
&lt;br /&gt;
2. Lack of special effects or a robust display system.  There are no fade in / fade out effects or any sort of color control, although there is nothing preventing someone from adding them.&lt;br /&gt;
&lt;br /&gt;
3. Currently, the textures can give an annoying flicker under some circumstances when viewed at certain angles on certain displays.&lt;br /&gt;
&lt;br /&gt;
4. Needs some manual configuration when using more than one 5 prim display.  There is no link scanner or any other utility built in.  Individual prims must have their own script and that script must be preconfigured by hand (although it does not take much effort to do so).&lt;br /&gt;
&lt;br /&gt;
5. Not very well commented or documented.  Meh, I&#039;m lazy.&lt;br /&gt;
&lt;br /&gt;
ADVANTAGES:&lt;br /&gt;
&lt;br /&gt;
1. Very lightweight &amp;amp; efficient.  The script is relatively simple, and fast.  It attempts to keep CPU usage to a minimum.&lt;br /&gt;
&lt;br /&gt;
2. &amp;quot;Rezzes&amp;quot; faster.  Partly because of the limited character set, RavText only uses 8 textures per character map, as opposed to the 60+ textures used by XyText derivitives. This tends to result in textures rezzing much faster, and staying in the cache more frequently.  NOTE:  If RavText supported 128 characters instead of the current 45, it would require 64 textures.  This is one of the main reasons I decided to go with uppercase only. I wanted quick rendering basic text.&lt;br /&gt;
&lt;br /&gt;
3. Flexible.  While this version is configured for the standard 5 face configuration, it can be modified to accommodate almost any primface configuration by just editing a few lists.&lt;br /&gt;
&lt;br /&gt;
3. Supports multiple fonts.  Due to the low number of textures required to map the limited RavText character set, it was easy to generate additional display fonts.  Currently, there are 6 possible fonts.&lt;br /&gt;
&lt;br /&gt;
BASIC CONFIGURATION AND CONCEPTS:&lt;br /&gt;
&lt;br /&gt;
RavText uses the variables &amp;quot;panelnum&amp;quot;  and &amp;quot;subpanel&amp;quot; to tell it where it is in your display system.  Each panel is considered to be its own unit and is composed of subpanels. For example, if you wanted to have two blocks of text, each 20 characters long, you would have two panels, each with two subpanels.  Subpanels should be numbered left to right starting with 0.  So text block #1 would be panel 0, with subpanel 0 and 1.  text block 2 would be panel 1, with subpanels 0 and 1 as well.&lt;br /&gt;
&lt;br /&gt;
To set the text on a specific panel, you set the key attribute of a linked message to be &amp;quot;7A&amp;quot;, set the string attribute to be whatever string you want to display.  You would set the number to be 2 raised to the power of the panel number.  You can use -1 to display on all panels.&lt;br /&gt;
&lt;br /&gt;
To change the font, set the key attribute of the link message to be &amp;quot;7F&amp;quot;, set the integer value to be 2 raised to the panel number (or -1 for all panels) and the string to be the font number you want to use (fonts are numbered 0 to 5).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BASIC USAGE:&lt;br /&gt;
&lt;br /&gt;
1. Make a 5 face prim, just like the ones used with current XyText versions.&lt;br /&gt;
&lt;br /&gt;
2. Put the RavText script in the prim.&lt;br /&gt;
&lt;br /&gt;
3. To display text, send a link message to the prim thusly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;TEST MSG!&amp;quot;, &amp;quot;7A&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The value &amp;quot;7A&amp;quot; is the command to display a string of text.  The value -1 basically means all panels.&lt;br /&gt;
&lt;br /&gt;
OK, next lets make a two panel display.  It will display up to 20 characters.&lt;br /&gt;
&lt;br /&gt;
1. make two 5 faced prims.&lt;br /&gt;
&lt;br /&gt;
2. Put RavText scripts in each prim&lt;br /&gt;
&lt;br /&gt;
3. Set the subpanel variable on the rightmost display prim to be 1.  Leave the other subpanel value at 0.&lt;br /&gt;
&lt;br /&gt;
4. Once again, send the link message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;TEST MSG! EXPANDED!&amp;quot;, &amp;quot;7A&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change the font, send the following link message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;3&amp;quot;, &amp;quot;7F&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are a lot more examples I could give, but for now I will leave it as is.  I will try to update this page as I can. &lt;br /&gt;
&lt;br /&gt;
AND NOW, THE CODE:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// RavText&lt;br /&gt;
// Version 1.0(3)&lt;br /&gt;
// Created 2008-09-18&lt;br /&gt;
// A lightweight 10 char / prim text generation system with multiple font support&lt;br /&gt;
// Created by Ravenous Dingo&lt;br /&gt;
// Copyright 2008 owned by the person controlling the Second Life avatar named Ravenous Dingo&lt;br /&gt;
// This code is hereby released under the terms of the LGPL (Lesser GPL) license&lt;br /&gt;
// Associated textures are hereby released to the public domain&lt;br /&gt;
&lt;br /&gt;
float panelnum=0.; // Panels are groups of prims that work as one block of text&lt;br /&gt;
&lt;br /&gt;
integer subpanel=0; // sub panel is the position within the panel block&lt;br /&gt;
&lt;br /&gt;
integer default_font=0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
list fontmap=[&lt;br /&gt;
&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
list corner_map=[&lt;br /&gt;
                    &amp;lt;-0.4225, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.4675, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.894, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.4675, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.515, 0.4675, 0&amp;gt;&lt;br /&gt;
                    ];&lt;br /&gt;
list rep_map=[&lt;br /&gt;
                &amp;lt;0.1525, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.0625, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;-1.0, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.0625, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.155, 0.0625, 0&amp;gt;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
list face_map=[ 3, 7, 4, 6, 1 ];&lt;br /&gt;
&lt;br /&gt;
list cur_texmap=[];&lt;br /&gt;
&lt;br /&gt;
integer numfaces=0;&lt;br /&gt;
&lt;br /&gt;
integer start_idx=0;&lt;br /&gt;
&lt;br /&gt;
string alphamap=&amp;quot; 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%&amp;amp;()&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
integer bitmask=0;&lt;br /&gt;
key kravtext_cmd=&amp;quot;7A&amp;quot;;&lt;br /&gt;
key ksetfont_cmd=&amp;quot;7F&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vector base_offset=&amp;lt;-0.4675, 0.4675, 0&amp;gt;;&lt;br /&gt;
float increment=0.0625;&lt;br /&gt;
&lt;br /&gt;
integer mod=0;&lt;br /&gt;
integer curfont=-1;&lt;br /&gt;
list param=[];&lt;br /&gt;
&lt;br /&gt;
integer indexAlpha(string str)&lt;br /&gt;
{&lt;br /&gt;
    integer idx=llSubStringIndex(alphamap, str);&lt;br /&gt;
    if (idx == -1)&lt;br /&gt;
    {&lt;br /&gt;
        idx=0;&lt;br /&gt;
    }&lt;br /&gt;
    return idx;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
init()&lt;br /&gt;
{&lt;br /&gt;
    composeFonts();&lt;br /&gt;
    mod=llStringLength(alphamap);&lt;br /&gt;
    numfaces=llGetListLength(face_map);&lt;br /&gt;
    bitmask=llRound(llPow(2.,panelnum));&lt;br /&gt;
    start_idx=subpanel * numfaces * 2;&lt;br /&gt;
    loadFont(default_font);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loadFont(integer fontnum)&lt;br /&gt;
{&lt;br /&gt;
    if (fontnum == curfont)&lt;br /&gt;
    {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    list tmp_font=llList2List(fontmap, fontnum * 8, (fontnum * 8) + 7);&lt;br /&gt;
&lt;br /&gt;
    integer i=0;&lt;br /&gt;
    string tfont=&amp;quot;&amp;quot;;&lt;br /&gt;
    integer tfnum=0;&lt;br /&gt;
    integer tidx=0;&lt;br /&gt;
    if (llGetListLength(param) != 0)&lt;br /&gt;
    {&lt;br /&gt;
        for (i=0; i &amp;lt; numfaces; i++)&lt;br /&gt;
        {&lt;br /&gt;
            tidx=(i * 6) + 2;&lt;br /&gt;
            tfont=llList2String(param, tidx);&lt;br /&gt;
            // now find the font index;&lt;br /&gt;
            tfnum=llListFindList(cur_texmap, [tfont]);&lt;br /&gt;
            // get the new font&lt;br /&gt;
            tfont=llList2String(tmp_font, tfnum);&lt;br /&gt;
            // and replace it&lt;br /&gt;
            param=llListReplaceList(param,  [tfont], tidx, tidx);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    curfont=fontnum;&lt;br /&gt;
    cur_texmap=tmp_font;&lt;br /&gt;
    llSetPrimitiveParams(param);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
composeFonts()&lt;br /&gt;
{&lt;br /&gt;
    list sysfixed=[&lt;br /&gt;
                &amp;quot;df574f09-061c-d3fe-07eb-3d0008271bc4&amp;quot;,&lt;br /&gt;
                &amp;quot;ace8bde9-b93e-d667-c03c-45ce826c955d&amp;quot;,&lt;br /&gt;
                &amp;quot;f7c99d89-ff0b-059e-3e3b-625d71799f19&amp;quot;,&lt;br /&gt;
                &amp;quot;eb3e7fea-60f6-6335-a7da-5d0e7dbed0bf&amp;quot;,&lt;br /&gt;
                &amp;quot;627a4675-4db8-f473-b16a-27aeb42e2b6f&amp;quot;,&lt;br /&gt;
                &amp;quot;aa14726b-fab8-7802-cc23-f118455f4354&amp;quot;,&lt;br /&gt;
                &amp;quot;d7808242-a2da-e144-3338-6b005671e6e6&amp;quot;,&lt;br /&gt;
                &amp;quot;60d062d7-b60f-220d-f9dd-189596a796d2&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
    list OCR_A=[&lt;br /&gt;
                &amp;quot;6d788259-709e-cc72-98b4-4ec56986a958&amp;quot;,&lt;br /&gt;
                &amp;quot;c74622f7-5740-1e5f-2a64-69060bf2742e&amp;quot;,&lt;br /&gt;
                &amp;quot;ffa88837-7f13-dbb3-e28c-2e969b9b4737&amp;quot;,&lt;br /&gt;
                &amp;quot;9127b5d8-459f-7d2c-2b3b-2b6c740de94a&amp;quot;,&lt;br /&gt;
                &amp;quot;894d4fc7-6c3c-954c-e7c9-94c687a1ac62&amp;quot;,&lt;br /&gt;
                &amp;quot;f529f498-be68-f5bd-2464-34e5bb4a8cdb&amp;quot;,&lt;br /&gt;
                &amp;quot;b645eb2c-57eb-a420-afbe-cba49bd298d8&amp;quot;,&lt;br /&gt;
                &amp;quot;bf8541e1-d875-96a6-adc3-fbdd38c41f2a&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
    list profont=[&lt;br /&gt;
                &amp;quot;9e83c094-58b1-8375-192f-2e0ef0f06d91&amp;quot;,&lt;br /&gt;
                &amp;quot;fcd34765-3c58-c1df-2c5e-5e96d1491c0c&amp;quot;,&lt;br /&gt;
                &amp;quot;fd232e50-9ed5-3cc0-345e-b08154b9bf97&amp;quot;,&lt;br /&gt;
                &amp;quot;10c5ab5f-49cb-ff40-3023-029caa4a4ff1&amp;quot;,&lt;br /&gt;
                &amp;quot;2956334f-79f3-010b-9be7-fc4811d2adae&amp;quot;,&lt;br /&gt;
                &amp;quot;b0277b5b-dfbf-27c3-47c9-3a120881fe64&amp;quot;,&lt;br /&gt;
                &amp;quot;969a1eb3-acbf-8425-1ddd-4f6a81bdbd58&amp;quot;,&lt;br /&gt;
                &amp;quot;409d587d-a374-4a1b-16d5-9c19a9baf83a&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list cour_new=[&lt;br /&gt;
                &amp;quot;e60aa9ab-7f1c-33ec-3408-37c20cce3c76&amp;quot;,&lt;br /&gt;
                &amp;quot;93eb9bef-dafa-9980-5d25-5adb5614ccc3&amp;quot;,&lt;br /&gt;
                &amp;quot;dd584fae-63e2-6f50-4811-a5b14989020a&amp;quot;,&lt;br /&gt;
                &amp;quot;cf4c4265-64a9-fa64-b18e-47c11fc18aa2&amp;quot;,&lt;br /&gt;
                &amp;quot;1c63839f-ebfa-c9e9-2391-98faa059c7a3&amp;quot;,&lt;br /&gt;
                &amp;quot;533279c5-cd44-daa4-b010-cd7c99e48c72&amp;quot;,&lt;br /&gt;
                &amp;quot;c1731907-6627-7463-2cff-dfa4499559bb&amp;quot;,&lt;br /&gt;
                &amp;quot;88e2bd5c-5c6f-6103-c2fb-db958e31d026&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list bs_vera=[&lt;br /&gt;
                &amp;quot;f88d322e-2f8d-c5d9-544c-293e0c5647c1&amp;quot;,&lt;br /&gt;
                &amp;quot;91546531-86b9-87ec-3dec-2072ebb012ad&amp;quot;,&lt;br /&gt;
                &amp;quot;1a545d8d-f14f-32aa-ad96-1abca948a662&amp;quot;,&lt;br /&gt;
                &amp;quot;d78fa62c-301d-fa10-188a-ee5f6ad87777&amp;quot;,&lt;br /&gt;
                &amp;quot;69e53076-8083-975b-31c0-420f1f5658dc&amp;quot;,&lt;br /&gt;
                &amp;quot;1b5ffc88-96e6-03c0-39c0-e38a6fad981a&amp;quot;,&lt;br /&gt;
                &amp;quot;a1511389-1b45-b7fb-1961-fd02ee57e26d&amp;quot;,&lt;br /&gt;
                &amp;quot;474e449e-f2f3-d5ac-1c63-1be922b3b434&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list sheldon=[&lt;br /&gt;
                &amp;quot;2958c0ac-cba6-a02b-da3e-aec050e3714f&amp;quot;,&lt;br /&gt;
                &amp;quot;cb8faeb7-c87e-c57c-448a-53a718adb3c8&amp;quot;,&lt;br /&gt;
                &amp;quot;572ff18e-d319-6213-ca28-202aeb7dc2e8&amp;quot;,&lt;br /&gt;
                &amp;quot;0bfc28e2-788d-035d-1ac1-ce752d90f89c&amp;quot;,&lt;br /&gt;
                &amp;quot;1fe4af1d-d99b-fe28-fba8-0006527c4c5f&amp;quot;,&lt;br /&gt;
                &amp;quot;f7fb5f59-0275-3ee7-9b54-e9a1ae61b76c&amp;quot;,&lt;br /&gt;
                &amp;quot;5e52d02e-edae-bf73-da61-9e1fe4e1801b&amp;quot;,&lt;br /&gt;
                &amp;quot;ff54400e-050c-7f87-cefd-a396c86d24d6&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    fontmap=sysfixed + OCR_A + profont + cour_new + bs_vera + sheldon;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    link_message(integer sender, integer num, string msg, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if ((id == kravtext_cmd) &amp;amp;&amp;amp; (num &amp;amp; bitmask))&lt;br /&gt;
        {&lt;br /&gt;
            param=[]; // create our primitive param list&lt;br /&gt;
            msg=llToUpper(msg); // make everything upper case&lt;br /&gt;
            integer i=0;&lt;br /&gt;
            integer this_idx=0;&lt;br /&gt;
            integer frame=0;&lt;br /&gt;
            integer tnum=0;&lt;br /&gt;
            integer xinc=0;&lt;br /&gt;
            integer yinc=0;&lt;br /&gt;
            integer fx=0;&lt;br /&gt;
            integer fy=0;&lt;br /&gt;
            float xpos=0.;&lt;br /&gt;
            float ypos=0.;&lt;br /&gt;
&lt;br /&gt;
            integer thisface=0;&lt;br /&gt;
            string thistex=NULL_KEY;&lt;br /&gt;
            vector this_rep=&amp;lt;0.,0.,0.&amp;gt;;&lt;br /&gt;
            for (i=0; i &amp;lt; numfaces; i++)&lt;br /&gt;
            {&lt;br /&gt;
                this_idx = start_idx + (i * 2);&lt;br /&gt;
                frame = ( mod * indexAlpha( llGetSubString( msg, this_idx, this_idx ) ) )&lt;br /&gt;
                        + indexAlpha( llGetSubString( msg, this_idx+ 1, this_idx +1 ) );&lt;br /&gt;
                base_offset=llList2Vector(corner_map, i);&lt;br /&gt;
                this_rep=llList2Vector(rep_map, i);&lt;br /&gt;
                thisface=llList2Integer(face_map, i);&lt;br /&gt;
                xinc = frame % 32;&lt;br /&gt;
                yinc = frame / 32;&lt;br /&gt;
                fx = xinc / 16;&lt;br /&gt;
                fy = yinc / 16;&lt;br /&gt;
                tnum=(fy * 2) + fx;&lt;br /&gt;
                thistex=llList2String(cur_texmap, tnum);&lt;br /&gt;
                xinc = xinc - ( 16 * fx );&lt;br /&gt;
                yinc = yinc - ( 16 * fy );&lt;br /&gt;
                xpos=base_offset.x + (increment * (float)xinc);&lt;br /&gt;
                ypos=base_offset.y - (increment * (float)yinc);&lt;br /&gt;
&lt;br /&gt;
                param += [&lt;br /&gt;
                            PRIM_TEXTURE,&lt;br /&gt;
                            thisface,&lt;br /&gt;
                            thistex,&lt;br /&gt;
                            this_rep,&lt;br /&gt;
                            &amp;lt;xpos, ypos, 0&amp;gt;,&lt;br /&gt;
                            0.&lt;br /&gt;
                            ];&lt;br /&gt;
            }&lt;br /&gt;
            llSetPrimitiveParams(param);&lt;br /&gt;
        }&lt;br /&gt;
        else if ((id == ksetfont_cmd) &amp;amp;&amp;amp; (num &amp;amp; bitmask))&lt;br /&gt;
        {&lt;br /&gt;
            integer fnum=(integer)msg;&lt;br /&gt;
            loadFont(fnum);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ravenous Dingo</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Category:LSL_Library&amp;diff=161933</id>
		<title>Category:LSL Library</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Category:LSL_Library&amp;diff=161933"/>
		<updated>2008-12-01T13:12:00Z</updated>

		<summary type="html">&lt;p&gt;Ravenous Dingo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|ml=*}}{{RightToc}}&lt;br /&gt;
==Script Library==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em 0.5em 1.5em&amp;quot;&amp;gt;&lt;br /&gt;
Come to this page to see complex examples that show how to combine parts of LSL.&lt;br /&gt;
&lt;br /&gt;
Go to the [[:Category:LSL Examples|LSL Examples]] page to see brief examples of how to use parts of LSL &lt;br /&gt;
&lt;br /&gt;
Why collect complex examples here? Well, ...&lt;br /&gt;
&lt;br /&gt;
There are many [[script|scripts]] that have become buried in the [http://forums.secondlife.com/forumdisplay.php?f=15 Scripting Library forum], were lost with the death of the scripting forums, or sit idle in [[inventory|inventories]] that could be useful and should be more accessible.&lt;br /&gt;
&lt;br /&gt;
Other scripters may be in the same situation. This wiki is a well-suited medium for a script library. Feel free to add your scripts to the script library by creating new pages for them and linking to those pages here.&lt;br /&gt;
&lt;br /&gt;
Note that there are many more scripts in the LSL Library here, but you can&#039;t get to them if you don&#039;t know they exist, because they are subpages now, instead of an automatically updated category.  Good luck searching.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rules for posting: ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em&amp;quot;&amp;gt;&lt;br /&gt;
#Your script must be tested and working. If it&#039;s not, stick it in your user-space until it is. This is a list of working, usable scripts.&lt;br /&gt;
#Add a link to your script&#039;s page here. Link back to this page from your script&#039;s page. Start your page with &amp;lt;nowiki&amp;gt;{{LSL Header}}&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
#Do not add scripts that duplicate the same functionality as an existing script or built in {{LSLGC|Functions|function}}. If yours does, explain why.&lt;br /&gt;
#Do not list simple scripts here. Include those among the [[:Category:LSL Examples|LSL Examples]] instead.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
==LSL Script Library==&lt;br /&gt;
&lt;br /&gt;
{| {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||[[3D Radar]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||Rezzes a ball for each avatar in range. Each ball tracks its own AV and displays distance.&lt;br /&gt;
|-&lt;br /&gt;
||[[AdvancedNotecardReader]]&lt;br /&gt;
||[[Lear Cale|Lear Cale]]&lt;br /&gt;
||Robust configuration notecard reader; supports multiple notecards with same suffix, handles reconfig on inventory change, and does not usurp the default state.&lt;br /&gt;
|-&lt;br /&gt;
||[[AntiDelay Node]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Uses llMessageLinked to stop those pesky delays.&lt;br /&gt;
|-&lt;br /&gt;
||[[AO Overriding Pose Ball]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||No more turning your AO off and on when you sit down&lt;br /&gt;
|-&lt;br /&gt;
||[[ARCFOUR Strong Encryption Implementation]]&lt;br /&gt;
||[[User:Nekow42 Zarf|Nekow42 Zarf]]&lt;br /&gt;
||An LSL implementation of ARCFOUR, the most popular stream cipher still in use. It is licensed under a Creative Commons Attribution 3.0 license.&lt;br /&gt;
|-&lt;br /&gt;
||[[Assembly Programming Language|Assembly-Like Programming Language]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||A compiler that runs assembly-like programs.&lt;br /&gt;
|-&lt;br /&gt;
||[[Associative Array Emulator|Associative Array (Dictionary) Emulator]]&lt;br /&gt;
||[[User:Alynna Vixen|Alynna Vixen]]&lt;br /&gt;
||This library provides a set of functions for using a list as an associative array where string based keys can refer to one or more variant elements.&lt;br /&gt;
|-&lt;br /&gt;
||[[Basic Encryption Modules]]&lt;br /&gt;
||[[User:Beverly Larkin|Beverly Larkin]]&lt;br /&gt;
||Basic encryption scripts, allows you to encrypt a float and shout it to another prim on a randomly chosen channel.&lt;br /&gt;
|-&lt;br /&gt;
||[[Binary Clock v1.1|Binary Clock]]&lt;br /&gt;
||[[User:Fox Diller|Fox Diller]]&lt;br /&gt;
||A Binary Clock.&lt;br /&gt;
|-&lt;br /&gt;
||[[Be happy]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Basic smile attachment script, makes your avatar smile.&lt;br /&gt;
|-&lt;br /&gt;
||[[Blog Feed]]&lt;br /&gt;
||[[User:Kageshen Kirax|Kageshen Kirax]]&lt;br /&gt;
||Displays the latest blog.&lt;br /&gt;
|-&lt;br /&gt;
||[[Builders Buddy|Builder&#039;s Buddy Tool]]&lt;br /&gt;
||[[User:Newfie Pendragon|Newfie Pendragon]]&lt;br /&gt;
||Script to easily move/rotate large builds that exceed the linkable size limit (30 meters).&lt;br /&gt;
|-&lt;br /&gt;
||[[Camera Sync]]&lt;br /&gt;
||[[User:Meyermagic Salome|Meyermagic Salome]] and [[User:Nomad Padar|Nomad Padar]]&lt;br /&gt;
||A system to synchronize the cameras of two avatars.&lt;br /&gt;
|-&lt;br /&gt;
||[[Chatbot]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Compile and run the LSL you type on a channel, faster than you can thru the 2007-08 SL GUI.&lt;br /&gt;
|-&lt;br /&gt;
||[[Chat Logger (GPL)]]&lt;br /&gt;
||[[User:Nobody Fugazi|Nobody Fugazi]]&lt;br /&gt;
||Chat logger which requests permission from participants before recording them.&lt;br /&gt;
|-&lt;br /&gt;
||[[Chat_Relay|Chat Relay]]&lt;br /&gt;
||[[User:grumble Loudon|grumble Loudon]]&lt;br /&gt;
||A Chat relay which can be routed using a path header and won&#039;t echo.&lt;br /&gt;
|-&lt;br /&gt;
||[[Code Racer]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Race two versions of code forever, to see which runs faster.&lt;br /&gt;
|-&lt;br /&gt;
||[[Code Sizer]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Count the bytes compiled from source code, to measure how to write small code.&lt;br /&gt;
|-&lt;br /&gt;
||[[Color conversion scripts|Color Conversion]]&lt;br /&gt;
||[[User:Sally LaSalle|Sally LaSalle]]&lt;br /&gt;
||Convert between Red Green Blue (RGB) and Hue Saturation Value (HSV).&lt;br /&gt;
|-&lt;br /&gt;
||[[Color script]]&lt;br /&gt;
||[[User:Masakazu Kojima|Masakazu Kojima]]&lt;br /&gt;
||Script for changing colors trough a listener with pre-defined colors.&lt;br /&gt;
|-&lt;br /&gt;
||[[Library Combined Library|Combined Library]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Library of mostly encoding and decoding functions, some more useful then others.&lt;br /&gt;
* String functions: Replace / Trim right / Trim left / Trim both&lt;br /&gt;
* Unicode conversion: UTF8 to Unicode / Unicode to UTF8&lt;br /&gt;
* List functions: Replace / Compare&lt;br /&gt;
|-&lt;br /&gt;
||[[Computer:jaycoonlanguage]]&lt;br /&gt;
||[[User:jayco121 Bing|jayco121 Bing]]&lt;br /&gt;
|| A language written in LSL that is meant for my computer (available at the shop).&lt;br /&gt;
|-&lt;br /&gt;
||[[Library_Chat_Relay|Conversation Relay]]&lt;br /&gt;
||[[User:Jippen Faddoul|Jippen Faddoul]]&lt;br /&gt;
||Chat relay which requests permission from participants before relaying their messages. Also includes their attachments. (ToS compliant).&lt;br /&gt;
|-&lt;br /&gt;
||[[Curtain script]]&lt;br /&gt;
||[[User:Zilla Larsson|Zilla Larsson]]&lt;br /&gt;
||A simple script to retract/stretch curtains, blinds, bedcovers and more&lt;br /&gt;
|-&lt;br /&gt;
||[[Dataserver API]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||Dataserver Framework for Notecards.&lt;br /&gt;
|-&lt;br /&gt;
||[[Date Library]]&lt;br /&gt;
||[[User:Corto Maltese|Corto Maltese]]&lt;br /&gt;
|| Date library, based on number of day since march 3rd 1600, can be used to calculate weekday, date differences, and date offset, and date formating.&lt;br /&gt;
|-&lt;br /&gt;
||[[Days in Month]]&lt;br /&gt;
||[[User:IntLibber Brautigan|IntLibber Brautigan]]&lt;br /&gt;
||Clicking on it returns the number of days in the present month. Useful for scripting calendars and tier systems that need to know the number of days in the month at hand or to calculate for any month. Even adjusts for leap years.&lt;br /&gt;
|-&lt;br /&gt;
||[[Day of the Week]]&lt;br /&gt;
||[[User:DoteDote Edison|DoteDote Edison]]&lt;br /&gt;
||Function to get day of the week from [[llGetUnixTime]].&lt;br /&gt;
|-&lt;br /&gt;
||[[Deed Tools]]&lt;br /&gt;
||[[User:Falados Kapuskas|Falados Kapuskas]]&lt;br /&gt;
||Tools that allow the creator to modify Group-Owned (Deeded) Objects via chat.&lt;br /&gt;
|-&lt;br /&gt;
||[[Describe Chatter]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Chat to see yourself as others do.&lt;br /&gt;
|-&lt;br /&gt;
||[[Drink script]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Used mainly for food and drink in Second Life.&lt;br /&gt;
|-&lt;br /&gt;
||[[ClickAndDrag]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| Click and Drag user interface elements using dynamic feedback&lt;br /&gt;
|-&lt;br /&gt;
||[[Dialog Control]]&lt;br /&gt;
||[[User:Nargus Asturias|Nargus Asturias]]&lt;br /&gt;
|| A (not-so) simple dialog control script. Call dialog and receive selected value via link_message(), with built-in timer and link_message() notification on time out. Supports multi-pages dialog and numeric property dialog. Button text and dialog&#039;s returned value can differ.&lt;br /&gt;
|-&lt;br /&gt;
||[[Dialog Menus Control]]&lt;br /&gt;
||[[User:Nargus Asturias|Nargus Asturias]]&lt;br /&gt;
|| An extension to Nargus Dialog Control. This menus control allow multi-level menus through SL dialog system. It can also recall last used menus. Menus are saved and pre-formatted for faster access. Though it is not the fastest, nor most memory efficient, but it should make it easier to use.&lt;br /&gt;
|-&lt;br /&gt;
||[[Dialog NumberPad|Dialog Number Pad]]&lt;br /&gt;
||[[User:DoteDote Edison|DoteDote Edison]]&lt;br /&gt;
||Use a dialog to accept positive integer input from users.&lt;br /&gt;
|-&lt;br /&gt;
||[[Efficiency Tester]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Tests the speed of a function.&lt;br /&gt;
|-&lt;br /&gt;
||[[Email-to-IM|Email2IM]]&lt;br /&gt;
||[[User:DoteDote Edison|DoteDote Edison]]&lt;br /&gt;
||Send IMs to SL friends via email (translate emails from friends into IMs).&lt;br /&gt;
|-&lt;br /&gt;
||[[Fix Small Prims|Fix_Small_Prims]]&lt;br /&gt;
||[[User:Emma Nowhere|Emma Nowhere]]&lt;br /&gt;
||Finds and adjusts the smallest prims in a linkset so that it can be scaled down further.&lt;br /&gt;
|-&lt;br /&gt;
||[[Float2Hex]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Very useful for transporting [[float|floats]].&lt;br /&gt;
|-&lt;br /&gt;
||[[Follower (script)|Follower]]&lt;br /&gt;
||Unknown, uploaded by [[User:Slik Swindlehurst|Slik Swindlehurst]]&lt;br /&gt;
||Makes an object follow the nearest person. Do not use for [[grief|griefing]].&lt;br /&gt;
|-&lt;br /&gt;
||[[Geometric|Geometric Library]]&lt;br /&gt;
||Community Project&lt;br /&gt;
||A substantial amount of various geometric functions for intersection and other purposes of 3D maths.&lt;br /&gt;
|-&lt;br /&gt;
||[[GetTimestampOffset]]&lt;br /&gt;
||[[User:Siann_Beck|Siann Beck]]&lt;br /&gt;
||Returns llGetTimestamp() with an hour offset.&lt;br /&gt;
|-&lt;br /&gt;
||[[Give InvItem every n hours]]&lt;br /&gt;
||[[User:Criz Collins|Criz Collins]]&lt;br /&gt;
||Will give an inventory item on touch only every n hours, even if somebody touches the object more than once. &lt;br /&gt;
|-&lt;br /&gt;
||[[Give random object]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Touch to recieve a random object in the prim&#039;s inventory&lt;br /&gt;
|-&lt;br /&gt;
||[[Google Charts]]&lt;br /&gt;
||[[User:Dedric Mauriac|Dedric Mauriac]]&lt;br /&gt;
||Create links to display raw data as a chart image.&lt;br /&gt;
|-&lt;br /&gt;
||[[Go transparent when walking]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||An attachment that goes invisble when you walk and visible when you don&#039;t walk.&lt;br /&gt;
|-&lt;br /&gt;
||[[Group Privacy]]&lt;br /&gt;
||[[User:Chance Unknown|Chance Unknown]]&lt;br /&gt;
||Security device to insure members of a group can have a private area. Deactivates when nobody present.&lt;br /&gt;
|-&lt;br /&gt;
||[[Group key finder]]&lt;br /&gt;
||[[User:Emmas Seetan| Emmas Seetan]]&lt;br /&gt;
||Touch to find the key of the group&lt;br /&gt;
|-&lt;br /&gt;
||[[Hello Avatar]]&lt;br /&gt;
||Linden Lab&lt;br /&gt;
||SL&#039;s default script.&lt;br /&gt;
|-&lt;br /&gt;
||[[High Altitude Rezzer|High Altitude Rezzer]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||Vehicle that goes straight up and then rezzes objects up to 4,096 meters.&lt;br /&gt;
|-&lt;br /&gt;
||[[Holodeck]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||Home Rezzing System (Open Source).&lt;br /&gt;
|-&lt;br /&gt;
||[[Intra-Region Update Server]]&lt;br /&gt;
||[[User:Emma_Nowhere|Emma Nowhere]]&lt;br /&gt;
||Centrally update objects such as Freeview screens or teleport pads within a region that are configured by notecards or contain modifiable objects or media assets.&lt;br /&gt;
|-&lt;br /&gt;
||[[Interpolation|Interpolation Library]]&lt;br /&gt;
||[[User:Nexii_Malthus|Nexii Malthus]]&lt;br /&gt;
||A small set of interpolation functions.&lt;br /&gt;
|-&lt;br /&gt;
||[[Inventory Menu]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||Inventory Based Menu System.&lt;br /&gt;
|-&lt;br /&gt;
||[[iTunes RPC Email|iTunes RPC]]&lt;br /&gt;
||[[User:Fox Diller|Fox Diller]]&lt;br /&gt;
||iTunes RPC via LSL [[llEmail]] and [[llRemoteDataReply]].&lt;br /&gt;
|-&lt;br /&gt;
||[[Key Pad Door|Keypad Door]]&lt;br /&gt;
||[[User:Tdub Dowler|Tdub Dowler]]&lt;br /&gt;
|| Door and keypad with changeable code. Follow instructions carefully!&lt;br /&gt;
|-&lt;br /&gt;
||[[LSL_languageAPI]]&lt;br /&gt;
||[[User:Gypsy paz|Gypsy Paz]]&lt;br /&gt;
||Multi-lingual API from notecard based language files&lt;br /&gt;
|-&lt;br /&gt;
||[[Last Sound System]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An LSL Last.fm client.&lt;br /&gt;
|-&lt;br /&gt;
||[[Listener Script]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Use to listen to other people&#039;s conversations (Like spying)&lt;br /&gt;
|-&lt;br /&gt;
||[[List2CSV]]&lt;br /&gt;
||[[User:Kunnis Basiat|Kunnis Basiat]]&lt;br /&gt;
||List2CSV &amp;amp; CSV2List that include perserving type and escaping characters.&lt;br /&gt;
|-&lt;br /&gt;
||[[Load URL]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Touch to get a dialog to visit the URL inside the script.&lt;br /&gt;
|-&lt;br /&gt;
||[[Mandelbrot Explorer]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An interactive fractal explorer.&lt;br /&gt;
|-&lt;br /&gt;
||[[Merge Sort]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Implements a Merge Sort in LSL, however this code is 300(ish) times slower than [[llListSort]]. Don&#039;t use this in a script!&lt;br /&gt;
|-&lt;br /&gt;
||[[Minesweeper]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||A simple minesweeper game.&lt;br /&gt;
|-&lt;br /&gt;
||[[Multirezzer|Multirezzer (on collision)]]&lt;br /&gt;
||[[User:Beet Streeter|Beet Streeter]]&lt;br /&gt;
||Spawns up to 10 objects when the object containing the script collides with a user.&lt;br /&gt;
|-&lt;br /&gt;
||[[Name2Key in LSL]]&lt;br /&gt;
||[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
||Get the Name2Key feature inside your scripts. Works even on lastly subscribed avatars.&lt;br /&gt;
|-&lt;br /&gt;
||[[Object to Data v1.2|Object to Data]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Turns an object into text (and back). Allows people to transfer objects through notecards.&lt;br /&gt;
|-&lt;br /&gt;
||[[Open Group Join]]&lt;br /&gt;
||[[User:Alicia Stella|Alicia Stella]]&lt;br /&gt;
||User Touches Object to Join Group from Group Info window, (no bot.)&lt;br /&gt;
|-&lt;br /&gt;
||[[ParseString2List]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Same as [[llParseString2List]] and [[llParseStringKeepNulls]], but not limited to 8 spacers or separators. Thus substitute a call to the [[llParseString2List]] and [[llParseStringKeepNulls]] functions by a call to [[Parse_String_To_List|ParseString2List]] whenever you have more than 8 separators or more than 8 spacers.&lt;br /&gt;
|-&lt;br /&gt;
||[[Pathfinder]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||A potential field based pathfinding library.&lt;br /&gt;
|-&lt;br /&gt;
||[[Phantom Child]]&lt;br /&gt;
||[[User:Aeron Kohime|Aeron Kohime]]&lt;br /&gt;
||Causes a child in a link set to become phantom without the entire object becoming phantom.&lt;br /&gt;
|-&lt;br /&gt;
||[[Phantom Maker]]&lt;br /&gt;
||[[User:Xaviar_Czervik|Xaviar Czervik]]&lt;br /&gt;
||An object that turns avatars into phantoms, without having to remain sitting.&lt;br /&gt;
|-&lt;br /&gt;
||[[PosJump]]&lt;br /&gt;
||[[User:Uchi Desmoulins|Uchi Desmoulins]]&lt;br /&gt;
||A much more efficient alternative to the popular [[warpPos]] function for bypassing 10m distance-moved limitations.&lt;br /&gt;
|-&lt;br /&gt;
||[[Prefix Calculator]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
|| A calculator that evaluates expressions in prefix notation. &lt;br /&gt;
&amp;lt;code&amp;gt;+ 3 4 = 5. * + 1 2 + 3 4 = 14.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||[[Pseudo-random Number Generator]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Generates a Pseudo-random number between -0x7FFFFFFF and 0x7FFFFFFF&lt;br /&gt;
|-&lt;br /&gt;
||[[Random AV Profile Projector]]&lt;br /&gt;
||[[User:Debbie Trilling|Debbie Trilling]]&lt;br /&gt;
||Randomly selects an AV from a crowd &amp;amp; then projects their profile picture as a &#039;holographic&#039; image &lt;br /&gt;
|-&lt;br /&gt;
||[[RavText]]&lt;br /&gt;
||[[User:Ravenous Dingo|Ravenous Dingo]]&lt;br /&gt;
||An alternate to XyText.  This is a lightweight, multiple font 10 character text display system.  It only supports uppercase alphanumeric text and a few special characters, but it is very fast, renders quickly and supports multiple fonts. It is meant for specialized use when all that is desired is basic, fast text display and the extra &amp;quot;bells and whistles&amp;quot; are not needed.&lt;br /&gt;
|-&lt;br /&gt;
||[[Say Region Frames Per Second|Region Frames Per Second]]&lt;br /&gt;
||[[User:Heymeriou Mystakidou|Heymariou Mystakidou]]&lt;br /&gt;
|| Says the region name and frames per second out loud on command.&lt;br /&gt;
|-&lt;br /&gt;
||[[sbDialog]]&lt;br /&gt;
||[[User:Siann_Beck|Siann Beck]]&lt;br /&gt;
||A simple replacement function for [[llDialog]]. It re-orders the button list so that the button values, as passed to it, display left-to-right, top-to-bottom. It also opens a [[llListen|listen]] on the specified channel, and returns the handle.&lt;br /&gt;
|-&lt;br /&gt;
||[[Scheduler]]&lt;br /&gt;
||[[User:Haravikk Mistral|Haravikk Mistral]]&lt;br /&gt;
||Schedule multiple events using a single script timer&lt;br /&gt;
|-&lt;br /&gt;
||[[Script Override Functions]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||bypass default strings, integer etc in chat channel.&lt;br /&gt;
|-&lt;br /&gt;
||[[Self Upgrading Script Enhanced]]&lt;br /&gt;
||[[User:Cron Stardust|Cron Stardust]]&lt;br /&gt;
||Keeps only latest version of the script on prim (even with multiple adds of the same script!)&lt;br /&gt;
|-&lt;br /&gt;
||[[SHA1|SHA1 Hash]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Preforms a SHA1 Hash on an input text. Similar to MD5 only (slightly) more secure.&lt;br /&gt;
|-&lt;br /&gt;
||[[Sim Map Particle Projector]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||Displays a floating map of the sim the script is in.&lt;br /&gt;
|-&lt;br /&gt;
||[[SLateIt]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An augmented virtual reality HUD.&lt;br /&gt;
|-&lt;br /&gt;
||[[SLetanque]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An LSL petanque game.&lt;br /&gt;
|-&lt;br /&gt;
||[[SL Mail V1.2]]&lt;br /&gt;
||[[User:Flennan Roffo|Flennan Roffo]]&lt;br /&gt;
||Second Life mail client V1.2 (released sept&#039;07). Send and receive mail from within Second Life from and to any address. With Address Book function and many chat commands. V1.3 is upcoming soon! &lt;br /&gt;
|-&lt;br /&gt;
||[[SL_NTPoHTTP_v1.1_client|SL NTPoHTTP client]]&lt;br /&gt;
|[[User:SignpostMarv Martin|SignpostMarv Martin]]&lt;br /&gt;
||Second Life Needs Time Parsing over Hyper Text Transfer Protocol&lt;br /&gt;
Emulates the function of [[llGetWallclock]] for any timezone by using SLOpenID&#039;s SLNTPoHTTP service. Also supports ISO 8601 and RFC 2822 timestamps. Script is dependent upon an external service operated by the author!&lt;br /&gt;
|-&lt;br /&gt;
||[[Spiral Staircase Generator]]&lt;br /&gt;
|[[User:Meyermagic Salome|Meyermagic Salome]]&lt;br /&gt;
||Generates nice looking spiral staircases without much hassle.&lt;br /&gt;
|-&lt;br /&gt;
||[[String Compare]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Compares two strings and reliably returns either 1, -1, or 0 if they are the same.&lt;br /&gt;
|-&lt;br /&gt;
||[[Teleport HUD]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||WORKS TO 4096 METERS!! Very user friendly teleport HUD. Add destinations by touching &amp;quot;Add&amp;quot; &amp;amp; naming destination in chat. Automatically gets sim name and coordinates. Will only display the destinations in the sim you are currently in. Demonstrates more advanced list manipulation and stride functions.&lt;br /&gt;
|-&lt;br /&gt;
||[[Texture Menu Management|Texture Management]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||Dialog Menu based Texture Selection.&lt;br /&gt;
|-&lt;br /&gt;
||[[Tic Tac Toe]]&lt;br /&gt;
||[[User:CG Linden|CG Linden]]&lt;br /&gt;
||Step by step demo on how to implement a larger scripting project&lt;br /&gt;
|-&lt;br /&gt;
||[[TightList]]&lt;br /&gt;
||[[User:Strife Onizuka|Revolution Perenti]]&lt;br /&gt;
||Tight List is a family of functions for encoding lists as strings and then decoding them back into lists. &lt;br /&gt;
&lt;br /&gt;
There are two flavors: TightList and TightListType. TightListType preserves types and uses a 6 char header, while TightList uses a 1 char header that doesn&#039;t preserve type. &lt;br /&gt;
|-&lt;br /&gt;
||[[Timer Module]]&lt;br /&gt;
||[[User:Isabelle Aquitaine|Isabelle Aquitaine]]&lt;br /&gt;
||Manage multiple timers via linked messages.&lt;br /&gt;
|-&lt;br /&gt;
||[[Unix2DateTime]]&lt;br /&gt;
|[[User:Flennan Roffo|Flennan Roffo]]&lt;br /&gt;
||Conversion from Unix time (llGetUnixTime()) to date and time string and vice versa.&lt;br /&gt;
|-&lt;br /&gt;
||[[Under Age Boot]]&lt;br /&gt;
|[[User:Chance Unknown|Chance Unknown]]&lt;br /&gt;
||Security device example to teleport home accounts below a minimum age limit; can be useful in combating free griefer accounts.&lt;br /&gt;
|-&lt;br /&gt;
||[[Unmutable Descript Nagger]]&lt;br /&gt;
|[[User:Bobbyb30 Zohari|Bobbyb30 Zohari]]&lt;br /&gt;
||To nag avatars to take off their scripted attatchments.&lt;br /&gt;
|-&lt;br /&gt;
||[[Visitor Logger (Web/Basic) ]]&lt;br /&gt;
|[[User:Buddy Sprocket|Buddy Sprocket]]&lt;br /&gt;
||A very basic visitor logger - log visitors in SL to a text file on your web-site.&lt;br /&gt;
|-&lt;br /&gt;
||[[Vote Simple]]&lt;br /&gt;
|[[User:JB_Kraft|JB Kraft]]&lt;br /&gt;
||Simple vote collector. One avi, one vote.&lt;br /&gt;
|-&lt;br /&gt;
||[[WarpPos]]&lt;br /&gt;
|[[User:Keknehv Psaltery|Keknehv Psaltery]]&lt;br /&gt;
||Non-physical movement without the 10m limit.&lt;br /&gt;
|-&lt;br /&gt;
||[[Window Control]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||For window opacity, helpful for buildings.&lt;br /&gt;
|-&lt;br /&gt;
||[[WHMcs SecondLife plugin]]&lt;br /&gt;
|[[User:Alicia Sautereau|Alicia Sautereau]]&lt;br /&gt;
||Linden Dollar payment plugin for the WHMcs hosting portal.&lt;br /&gt;
|-&lt;br /&gt;
||[[XTEA Strong Encryption Implementation]]&lt;br /&gt;
||[[User:Morse Dillon|Morse Dillon]]&lt;br /&gt;
||An LSL implementation of XTEA (eXtended Tiny Encryption Algorithm).  This is the first known public release of a &#039;real&#039; strong encryption implementation in LSL and is released under the GNU General Public License (GPL).&lt;br /&gt;
|-&lt;br /&gt;
||[[XyText 1.5|XyText]]&lt;br /&gt;
||[[User:Xylor Baysklef|Xylor Baysklef]]&lt;br /&gt;
|| Display text (up to 10 characters) on a prim. Use as many prims as desired.&lt;br /&gt;
|-&lt;br /&gt;
||[[XyyyyzText|XyyyyzText]]&lt;br /&gt;
||[[User:Criz Collins|Criz Collins]]&lt;br /&gt;
|| Display text (up to 10 characters) on a prim. Displays different text for each line instead of one single text, that will be broken into the next lines. Watch here for what that means: http://screencast.com/t/1wMLujLcEO&lt;br /&gt;
|-&lt;br /&gt;
||[[XyzzyText|XyzzyText]]&lt;br /&gt;
||[[User:Thraxis Epsilon|Thraxis Epsilon]] and [[User:Gigs Taggart|Gigs Taggart]]&lt;br /&gt;
|| Display text (up to 10 characters) on a prim. Way more efficient than XyText.&lt;br /&gt;
|-&lt;br /&gt;
||[[Zero Lag Poseball]]&lt;br /&gt;
||[[User:Jippen Faddoul|Jippen Faddoul]]&lt;br /&gt;
||A simple poseball with no lag&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Support Script Library==&lt;br /&gt;
These are scripts in other languages, intended to be run on other systems that support scripts written in LSL&lt;br /&gt;
&lt;br /&gt;
{| {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||[[HTTP Post request to a PHP server]]&lt;br /&gt;
||[[User:Corto Maltese|Corto Maltese]]&lt;br /&gt;
|| This small library allows you to make simple POST requests to your website. The libraries allow you to get your request through the variable $_POST on the server. It also include a basic security mechanism aimed to stop hacking. Comprises of LSL client script and PHP server script.&lt;br /&gt;
|-&lt;br /&gt;
|| Silo&lt;br /&gt;
|| [[User:Zero_Linden|Zero Linden]]&lt;br /&gt;
|| General purpose data store in PHP.  Use this to persist arbitrary data from LSL via [[llHTTPRequest]].  See:&lt;br /&gt;
* [http://www.notabene-sl.com/misc/silo-README.txt README] file&lt;br /&gt;
* [http://www.notabene-sl.com/misc/silo.tgz silo.tgz] tarball&lt;br /&gt;
* forum post [http://forums.secondlife.com/showthread.php?t=119570 Announcement].&lt;br /&gt;
|-&lt;br /&gt;
|| [[User:SignpostMarv Martin/PHP/llXorBase64StringsCorrect|llXorBase64StringsCorrect]]&lt;br /&gt;
|| [[User:SignpostMarv Martin|SignpostMarv Martin]]&lt;br /&gt;
|| An implementation of [[llXorBase64StringsCorrect]] in PHP- should be useful if you&#039;re using llXorBase64StringsCorrect to do cryptography work in LSL2 and posting it out to the web via [[llHTTPRequest]].&lt;br /&gt;
|-&lt;br /&gt;
|| [[User:SignpostMarv Martin/PHP/lsl fu.php|lsl_fu.php]]&lt;br /&gt;
|| [[User:SignpostMarv Martin|SignpostMarv Martin]]&lt;br /&gt;
|| A basic OOP&#039;d PHP Class containing VeloxSeverine&#039;s $_POST fixer and Marv&#039;s own eccentric ideas for &amp;quot;fixing&amp;quot; things.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Articles&#039;&#039;&#039;&lt;br /&gt;
*[[:Category:LSL Examples| Examples]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ravenous Dingo</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=RavText&amp;diff=161923</id>
		<title>RavText</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=RavText&amp;diff=161923"/>
		<updated>2008-12-01T12:33:35Z</updated>

		<summary type="html">&lt;p&gt;Ravenous Dingo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;RavText&lt;br /&gt;
A lightweight, multi font, text-on-a-prim display system&lt;br /&gt;
Version 1.0(3) &lt;br /&gt;
&lt;br /&gt;
License:  This is licensed under the terms of the GPL version 2.&lt;br /&gt;
&lt;br /&gt;
This is yet another 10 character display using a 5 faced prim. It does not, however, use any part of the popular [[XyText]] series of scripts.  It is 100% home grown.  It is meant for specialized usage: specifically when one desires a very lightweight script for displaying 10 character basic alphanumeric text.  While it could be expanded to accommodate more characters rather easily, at the moment it just does uppercase alphanumeric plus a few special characters. &lt;br /&gt;
&lt;br /&gt;
The functionality of RavText is limited compared to other text systems, but does have some advantages.  it is definitely not suitable for every application.  Here are the advantages and drawbacks of RavText compared to other systems:&lt;br /&gt;
&lt;br /&gt;
DISADVANTAGES:&lt;br /&gt;
&lt;br /&gt;
1. Limited character set.  Uppercase alphanumeric characters and a few special characters (namely &amp;quot; !@#$%&amp;amp;()&amp;quot;) are supported.  (However, it could easily be expanded to use larger character sets with a few minor modifications and the right texture maps).&lt;br /&gt;
&lt;br /&gt;
2. Lack of special effects or a robust display system.  There are no fade in / fade out effects or any sort of color control, although there is nothing preventing someone from adding them.&lt;br /&gt;
&lt;br /&gt;
3. Currently, the textures can give an annoying flicker under some circumstances when viewed at certain angles on certain displays.&lt;br /&gt;
&lt;br /&gt;
4. Needs some manual configuration when using more than one 5 prim display.  There is no link scanner or any other utility built in.  Individual prims must have their own script and that script must be preconfigured by hand (although it does not take much effort to do so).&lt;br /&gt;
&lt;br /&gt;
5. Not very well commented or documented.  Meh, I&#039;m lazy.&lt;br /&gt;
&lt;br /&gt;
ADVANTAGES:&lt;br /&gt;
&lt;br /&gt;
1. Very lightweight &amp;amp; efficient.  The script is relatively simple, and fast.  It attempts to keep CPU usage to a minimum.&lt;br /&gt;
&lt;br /&gt;
2. &amp;quot;Rezzes&amp;quot; faster.  Partly because of the limited character set, RavText only uses 8 textures per character map, as opposed to the 60+ textures used by XyText derivitives. This tends to result in textures rezzing much faster, and staying in the cache more frequently.  NOTE:  If RavText supported 128 characters instead of the current 45, it would require 64 textures.  This is one of the main reasons I decided to go with uppercase only. I wanted quick rendering basic text.&lt;br /&gt;
&lt;br /&gt;
3. Flexible.  While this version is configured for the standard 5 face configuration, it can be modified to accommodate almost any primface configuration by just editing a few lists.&lt;br /&gt;
&lt;br /&gt;
3. Supports multiple fonts.  Due to the low number of textures required to map the limited RavText character set, it was easy to generate additional display fonts.  Currently, there are 6 possible fonts.&lt;br /&gt;
&lt;br /&gt;
BASIC CONFIGURATION AND CONCEPTS:&lt;br /&gt;
&lt;br /&gt;
RavText uses the variables &amp;quot;panelnum&amp;quot;  and &amp;quot;subpanel&amp;quot; to tell it where it is in your display system.  Each panel is considered to be its own unit and is composed of subpanels. For example, if you wanted to have two blocks of text, each 20 characters long, you would have two panels, each with two subpanels.  Subpanels should be numbered left to right starting with 0.  So text block #1 would be panel 0, with subpanel 0 and 1.  text block 2 would be panel 1, with subpanels 0 and 1 as well.&lt;br /&gt;
&lt;br /&gt;
To set the text on a specific panel, you set the key attribute of a linked message to be &amp;quot;7A&amp;quot;, set the string attribute to be whatever string you want to display.  You would set the number to be 2 raised to the power of the panel number.  You can use -1 to display on all panels.&lt;br /&gt;
&lt;br /&gt;
To change the font, set the key attribute of the link message to be &amp;quot;7F&amp;quot;, set the integer value to be 2 raised to the panel number (or -1 for all panels) and the string to be the font number you want to use (fonts are numbered 0 to 5).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BASIC USAGE:&lt;br /&gt;
&lt;br /&gt;
1. Make a 5 face prim, just like the ones used with current XyText versions.&lt;br /&gt;
&lt;br /&gt;
2. Put the RavText script in the prim.&lt;br /&gt;
&lt;br /&gt;
3. To display text, send a link message to the prim thusly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;TEST MSG!&amp;quot;, &amp;quot;7A&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The value &amp;quot;7A&amp;quot; is the command to display a string of text.  The value -1 basically means all panels.&lt;br /&gt;
&lt;br /&gt;
OK, next lets make a two panel display.  It will display up to 20 characters.&lt;br /&gt;
&lt;br /&gt;
1. make two 5 faced prims.&lt;br /&gt;
&lt;br /&gt;
2. Put RavText scripts in each prim&lt;br /&gt;
&lt;br /&gt;
3. Set the subpanel variable on the rightmost display prim to be 1.  Leave the other subpanel value at 0.&lt;br /&gt;
&lt;br /&gt;
4. Once again, send the link message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;TEST MSG! EXPANDED!&amp;quot;, &amp;quot;7A&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change the font, send the following link message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;3&amp;quot;, &amp;quot;7F&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are a lot more examples I could give, but for now I will leave it as is.  I will try to update this page as I can. &lt;br /&gt;
&lt;br /&gt;
AND NOW, THE CODE:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// RavText&lt;br /&gt;
// Version 1.0(3)&lt;br /&gt;
// Created 2008-09-18&lt;br /&gt;
// A lightweight 10 char / prim text generation system with multiple font support&lt;br /&gt;
// Created by Ravenous Dingo&lt;br /&gt;
// Copyright 2008 owned by the person controlling the Second Life avatar named Ravenous Dingo&lt;br /&gt;
// This code is hereby released under the terms of the GNU Public License version 2&lt;br /&gt;
// Associated textures are hereby released to the public domain&lt;br /&gt;
&lt;br /&gt;
float panelnum=0.; // Panels are groups of prims that work as one block of text&lt;br /&gt;
&lt;br /&gt;
integer subpanel=0; // sub panel is the position within the panel block&lt;br /&gt;
&lt;br /&gt;
integer default_font=0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
list fontmap=[&lt;br /&gt;
&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
list corner_map=[&lt;br /&gt;
                    &amp;lt;-0.4225, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.4675, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.894, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.4675, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.515, 0.4675, 0&amp;gt;&lt;br /&gt;
                    ];&lt;br /&gt;
list rep_map=[&lt;br /&gt;
                &amp;lt;0.1525, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.0625, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;-1.0, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.0625, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.155, 0.0625, 0&amp;gt;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
list face_map=[ 3, 7, 4, 6, 1 ];&lt;br /&gt;
&lt;br /&gt;
list cur_texmap=[];&lt;br /&gt;
&lt;br /&gt;
integer numfaces=0;&lt;br /&gt;
&lt;br /&gt;
integer start_idx=0;&lt;br /&gt;
&lt;br /&gt;
string alphamap=&amp;quot; 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%&amp;amp;()&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
integer bitmask=0;&lt;br /&gt;
key kravtext_cmd=&amp;quot;7A&amp;quot;;&lt;br /&gt;
key ksetfont_cmd=&amp;quot;7F&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vector base_offset=&amp;lt;-0.4675, 0.4675, 0&amp;gt;;&lt;br /&gt;
float increment=0.0625;&lt;br /&gt;
&lt;br /&gt;
integer mod=0;&lt;br /&gt;
integer curfont=-1;&lt;br /&gt;
list param=[];&lt;br /&gt;
&lt;br /&gt;
integer indexAlpha(string str)&lt;br /&gt;
{&lt;br /&gt;
    integer idx=llSubStringIndex(alphamap, str);&lt;br /&gt;
    if (idx == -1)&lt;br /&gt;
    {&lt;br /&gt;
        idx=0;&lt;br /&gt;
    }&lt;br /&gt;
    return idx;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
init()&lt;br /&gt;
{&lt;br /&gt;
    composeFonts();&lt;br /&gt;
    mod=llStringLength(alphamap);&lt;br /&gt;
    numfaces=llGetListLength(face_map);&lt;br /&gt;
    bitmask=llRound(llPow(2.,panelnum));&lt;br /&gt;
    start_idx=subpanel * numfaces * 2;&lt;br /&gt;
    loadFont(default_font);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loadFont(integer fontnum)&lt;br /&gt;
{&lt;br /&gt;
    if (fontnum == curfont)&lt;br /&gt;
    {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    list tmp_font=llList2List(fontmap, fontnum * 8, (fontnum * 8) + 7);&lt;br /&gt;
&lt;br /&gt;
    integer i=0;&lt;br /&gt;
    string tfont=&amp;quot;&amp;quot;;&lt;br /&gt;
    integer tfnum=0;&lt;br /&gt;
    integer tidx=0;&lt;br /&gt;
    if (llGetListLength(param) != 0)&lt;br /&gt;
    {&lt;br /&gt;
        for (i=0; i &amp;lt; numfaces; i++)&lt;br /&gt;
        {&lt;br /&gt;
            tidx=(i * 6) + 2;&lt;br /&gt;
            tfont=llList2String(param, tidx);&lt;br /&gt;
            // now find the font index;&lt;br /&gt;
            tfnum=llListFindList(cur_texmap, [tfont]);&lt;br /&gt;
            // get the new font&lt;br /&gt;
            tfont=llList2String(tmp_font, tfnum);&lt;br /&gt;
            // and replace it&lt;br /&gt;
            param=llListReplaceList(param,  [tfont], tidx, tidx);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    curfont=fontnum;&lt;br /&gt;
    cur_texmap=tmp_font;&lt;br /&gt;
    llSetPrimitiveParams(param);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
composeFonts()&lt;br /&gt;
{&lt;br /&gt;
    list sysfixed=[&lt;br /&gt;
                &amp;quot;df574f09-061c-d3fe-07eb-3d0008271bc4&amp;quot;,&lt;br /&gt;
                &amp;quot;ace8bde9-b93e-d667-c03c-45ce826c955d&amp;quot;,&lt;br /&gt;
                &amp;quot;f7c99d89-ff0b-059e-3e3b-625d71799f19&amp;quot;,&lt;br /&gt;
                &amp;quot;eb3e7fea-60f6-6335-a7da-5d0e7dbed0bf&amp;quot;,&lt;br /&gt;
                &amp;quot;627a4675-4db8-f473-b16a-27aeb42e2b6f&amp;quot;,&lt;br /&gt;
                &amp;quot;aa14726b-fab8-7802-cc23-f118455f4354&amp;quot;,&lt;br /&gt;
                &amp;quot;d7808242-a2da-e144-3338-6b005671e6e6&amp;quot;,&lt;br /&gt;
                &amp;quot;60d062d7-b60f-220d-f9dd-189596a796d2&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
    list OCR_A=[&lt;br /&gt;
                &amp;quot;6d788259-709e-cc72-98b4-4ec56986a958&amp;quot;,&lt;br /&gt;
                &amp;quot;c74622f7-5740-1e5f-2a64-69060bf2742e&amp;quot;,&lt;br /&gt;
                &amp;quot;ffa88837-7f13-dbb3-e28c-2e969b9b4737&amp;quot;,&lt;br /&gt;
                &amp;quot;9127b5d8-459f-7d2c-2b3b-2b6c740de94a&amp;quot;,&lt;br /&gt;
                &amp;quot;894d4fc7-6c3c-954c-e7c9-94c687a1ac62&amp;quot;,&lt;br /&gt;
                &amp;quot;f529f498-be68-f5bd-2464-34e5bb4a8cdb&amp;quot;,&lt;br /&gt;
                &amp;quot;b645eb2c-57eb-a420-afbe-cba49bd298d8&amp;quot;,&lt;br /&gt;
                &amp;quot;bf8541e1-d875-96a6-adc3-fbdd38c41f2a&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
    list profont=[&lt;br /&gt;
                &amp;quot;9e83c094-58b1-8375-192f-2e0ef0f06d91&amp;quot;,&lt;br /&gt;
                &amp;quot;fcd34765-3c58-c1df-2c5e-5e96d1491c0c&amp;quot;,&lt;br /&gt;
                &amp;quot;fd232e50-9ed5-3cc0-345e-b08154b9bf97&amp;quot;,&lt;br /&gt;
                &amp;quot;10c5ab5f-49cb-ff40-3023-029caa4a4ff1&amp;quot;,&lt;br /&gt;
                &amp;quot;2956334f-79f3-010b-9be7-fc4811d2adae&amp;quot;,&lt;br /&gt;
                &amp;quot;b0277b5b-dfbf-27c3-47c9-3a120881fe64&amp;quot;,&lt;br /&gt;
                &amp;quot;969a1eb3-acbf-8425-1ddd-4f6a81bdbd58&amp;quot;,&lt;br /&gt;
                &amp;quot;409d587d-a374-4a1b-16d5-9c19a9baf83a&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list cour_new=[&lt;br /&gt;
                &amp;quot;e60aa9ab-7f1c-33ec-3408-37c20cce3c76&amp;quot;,&lt;br /&gt;
                &amp;quot;93eb9bef-dafa-9980-5d25-5adb5614ccc3&amp;quot;,&lt;br /&gt;
                &amp;quot;dd584fae-63e2-6f50-4811-a5b14989020a&amp;quot;,&lt;br /&gt;
                &amp;quot;cf4c4265-64a9-fa64-b18e-47c11fc18aa2&amp;quot;,&lt;br /&gt;
                &amp;quot;1c63839f-ebfa-c9e9-2391-98faa059c7a3&amp;quot;,&lt;br /&gt;
                &amp;quot;533279c5-cd44-daa4-b010-cd7c99e48c72&amp;quot;,&lt;br /&gt;
                &amp;quot;c1731907-6627-7463-2cff-dfa4499559bb&amp;quot;,&lt;br /&gt;
                &amp;quot;88e2bd5c-5c6f-6103-c2fb-db958e31d026&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list bs_vera=[&lt;br /&gt;
                &amp;quot;f88d322e-2f8d-c5d9-544c-293e0c5647c1&amp;quot;,&lt;br /&gt;
                &amp;quot;91546531-86b9-87ec-3dec-2072ebb012ad&amp;quot;,&lt;br /&gt;
                &amp;quot;1a545d8d-f14f-32aa-ad96-1abca948a662&amp;quot;,&lt;br /&gt;
                &amp;quot;d78fa62c-301d-fa10-188a-ee5f6ad87777&amp;quot;,&lt;br /&gt;
                &amp;quot;69e53076-8083-975b-31c0-420f1f5658dc&amp;quot;,&lt;br /&gt;
                &amp;quot;1b5ffc88-96e6-03c0-39c0-e38a6fad981a&amp;quot;,&lt;br /&gt;
                &amp;quot;a1511389-1b45-b7fb-1961-fd02ee57e26d&amp;quot;,&lt;br /&gt;
                &amp;quot;474e449e-f2f3-d5ac-1c63-1be922b3b434&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list sheldon=[&lt;br /&gt;
                &amp;quot;2958c0ac-cba6-a02b-da3e-aec050e3714f&amp;quot;,&lt;br /&gt;
                &amp;quot;cb8faeb7-c87e-c57c-448a-53a718adb3c8&amp;quot;,&lt;br /&gt;
                &amp;quot;572ff18e-d319-6213-ca28-202aeb7dc2e8&amp;quot;,&lt;br /&gt;
                &amp;quot;0bfc28e2-788d-035d-1ac1-ce752d90f89c&amp;quot;,&lt;br /&gt;
                &amp;quot;1fe4af1d-d99b-fe28-fba8-0006527c4c5f&amp;quot;,&lt;br /&gt;
                &amp;quot;f7fb5f59-0275-3ee7-9b54-e9a1ae61b76c&amp;quot;,&lt;br /&gt;
                &amp;quot;5e52d02e-edae-bf73-da61-9e1fe4e1801b&amp;quot;,&lt;br /&gt;
                &amp;quot;ff54400e-050c-7f87-cefd-a396c86d24d6&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    fontmap=sysfixed + OCR_A + profont + cour_new + bs_vera + sheldon;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    link_message(integer sender, integer num, string msg, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if ((id == kravtext_cmd) &amp;amp;&amp;amp; (num &amp;amp; bitmask))&lt;br /&gt;
        {&lt;br /&gt;
            param=[]; // create our primitive param list&lt;br /&gt;
            msg=llToUpper(msg); // make everything upper case&lt;br /&gt;
            integer i=0;&lt;br /&gt;
            integer this_idx=0;&lt;br /&gt;
            integer frame=0;&lt;br /&gt;
            integer tnum=0;&lt;br /&gt;
            integer xinc=0;&lt;br /&gt;
            integer yinc=0;&lt;br /&gt;
            integer fx=0;&lt;br /&gt;
            integer fy=0;&lt;br /&gt;
            float xpos=0.;&lt;br /&gt;
            float ypos=0.;&lt;br /&gt;
&lt;br /&gt;
            integer thisface=0;&lt;br /&gt;
            string thistex=NULL_KEY;&lt;br /&gt;
            vector this_rep=&amp;lt;0.,0.,0.&amp;gt;;&lt;br /&gt;
            for (i=0; i &amp;lt; numfaces; i++)&lt;br /&gt;
            {&lt;br /&gt;
                this_idx = start_idx + (i * 2);&lt;br /&gt;
                frame = ( mod * indexAlpha( llGetSubString( msg, this_idx, this_idx ) ) )&lt;br /&gt;
                        + indexAlpha( llGetSubString( msg, this_idx+ 1, this_idx +1 ) );&lt;br /&gt;
                base_offset=llList2Vector(corner_map, i);&lt;br /&gt;
                this_rep=llList2Vector(rep_map, i);&lt;br /&gt;
                thisface=llList2Integer(face_map, i);&lt;br /&gt;
                xinc = frame % 32;&lt;br /&gt;
                yinc = frame / 32;&lt;br /&gt;
                fx = xinc / 16;&lt;br /&gt;
                fy = yinc / 16;&lt;br /&gt;
                tnum=(fy * 2) + fx;&lt;br /&gt;
                thistex=llList2String(cur_texmap, tnum);&lt;br /&gt;
                xinc = xinc - ( 16 * fx );&lt;br /&gt;
                yinc = yinc - ( 16 * fy );&lt;br /&gt;
                xpos=base_offset.x + (increment * (float)xinc);&lt;br /&gt;
                ypos=base_offset.y - (increment * (float)yinc);&lt;br /&gt;
&lt;br /&gt;
                param += [&lt;br /&gt;
                            PRIM_TEXTURE,&lt;br /&gt;
                            thisface,&lt;br /&gt;
                            thistex,&lt;br /&gt;
                            this_rep,&lt;br /&gt;
                            &amp;lt;xpos, ypos, 0&amp;gt;,&lt;br /&gt;
                            0.&lt;br /&gt;
                            ];&lt;br /&gt;
            }&lt;br /&gt;
            llSetPrimitiveParams(param);&lt;br /&gt;
        }&lt;br /&gt;
        else if ((id == ksetfont_cmd) &amp;amp;&amp;amp; (num &amp;amp; bitmask))&lt;br /&gt;
        {&lt;br /&gt;
            integer fnum=(integer)msg;&lt;br /&gt;
            loadFont(fnum);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ravenous Dingo</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Category:LSL_Library&amp;diff=161903</id>
		<title>Category:LSL Library</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Category:LSL_Library&amp;diff=161903"/>
		<updated>2008-12-01T12:24:56Z</updated>

		<summary type="html">&lt;p&gt;Ravenous Dingo: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|ml=*}}{{RightToc}}&lt;br /&gt;
==Script Library==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em 0.5em 1.5em&amp;quot;&amp;gt;&lt;br /&gt;
Come to this page to see complex examples that show how to combine parts of LSL.&lt;br /&gt;
&lt;br /&gt;
Go to the [[:Category:LSL Examples|LSL Examples]] page to see brief examples of how to use parts of LSL &lt;br /&gt;
&lt;br /&gt;
Why collect complex examples here? Well, ...&lt;br /&gt;
&lt;br /&gt;
There are many [[script|scripts]] that have become buried in the [http://forums.secondlife.com/forumdisplay.php?f=15 Scripting Library forum], were lost with the death of the scripting forums, or sit idle in [[inventory|inventories]] that could be useful and should be more accessible.&lt;br /&gt;
&lt;br /&gt;
Other scripters may be in the same situation. This wiki is a well-suited medium for a script library. Feel free to add your scripts to the script library by creating new pages for them and linking to those pages here.&lt;br /&gt;
&lt;br /&gt;
Note that there are many more scripts in the LSL Library here, but you can&#039;t get to them if you don&#039;t know they exist, because they are subpages now, instead of an automatically updated category.  Good luck searching.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rules for posting: ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em&amp;quot;&amp;gt;&lt;br /&gt;
#Your script must be tested and working. If it&#039;s not, stick it in your user-space until it is. This is a list of working, usable scripts.&lt;br /&gt;
#Add a link to your script&#039;s page here. Link back to this page from your script&#039;s page. Start your page with &amp;lt;nowiki&amp;gt;{{LSL Header}}&amp;lt;/nowiki&amp;gt;.&lt;br /&gt;
#Do not add scripts that duplicate the same functionality as an existing script or built in {{LSLGC|Functions|function}}. If yours does, explain why.&lt;br /&gt;
#Do not list simple scripts here. Include those among the [[:Category:LSL Examples|LSL Examples]] instead.&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
==LSL Script Library==&lt;br /&gt;
&lt;br /&gt;
{| {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||[[3D Radar]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||Rezzes a ball for each avatar in range. Each ball tracks its own AV and displays distance.&lt;br /&gt;
|-&lt;br /&gt;
||[[AdvancedNotecardReader]]&lt;br /&gt;
||[[Lear Cale|Lear Cale]]&lt;br /&gt;
||Robust configuration notecard reader; supports multiple notecards with same suffix, handles reconfig on inventory change, and does not usurp the default state.&lt;br /&gt;
|-&lt;br /&gt;
||[[AntiDelay Node]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Uses llMessageLinked to stop those pesky delays.&lt;br /&gt;
|-&lt;br /&gt;
||[[AO Overriding Pose Ball]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||No more turning your AO off and on when you sit down&lt;br /&gt;
|-&lt;br /&gt;
||[[ARCFOUR Strong Encryption Implementation]]&lt;br /&gt;
||[[User:Nekow42 Zarf|Nekow42 Zarf]]&lt;br /&gt;
||An LSL implementation of ARCFOUR, the most popular stream cipher still in use. It is licensed under a Creative Commons Attribution 3.0 license.&lt;br /&gt;
|-&lt;br /&gt;
||[[Assembly Programming Language|Assembly-Like Programming Language]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||A compiler that runs assembly-like programs.&lt;br /&gt;
|-&lt;br /&gt;
||[[Associative Array Emulator|Associative Array (Dictionary) Emulator]]&lt;br /&gt;
||[[User:Alynna Vixen|Alynna Vixen]]&lt;br /&gt;
||This library provides a set of functions for using a list as an associative array where string based keys can refer to one or more variant elements.&lt;br /&gt;
|-&lt;br /&gt;
||[[Basic Encryption Modules]]&lt;br /&gt;
||[[User:Beverly Larkin|Beverly Larkin]]&lt;br /&gt;
||Basic encryption scripts, allows you to encrypt a float and shout it to another prim on a randomly chosen channel.&lt;br /&gt;
|-&lt;br /&gt;
||[[Binary Clock v1.1|Binary Clock]]&lt;br /&gt;
||[[User:Fox Diller|Fox Diller]]&lt;br /&gt;
||A Binary Clock.&lt;br /&gt;
|-&lt;br /&gt;
||[[Be happy]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Basic smile attachment script, makes your avatar smile.&lt;br /&gt;
|-&lt;br /&gt;
||[[Blog Feed]]&lt;br /&gt;
||[[User:Kageshen Kirax|Kageshen Kirax]]&lt;br /&gt;
||Displays the latest blog.&lt;br /&gt;
|-&lt;br /&gt;
||[[Builders Buddy|Builder&#039;s Buddy Tool]]&lt;br /&gt;
||[[User:Newfie Pendragon|Newfie Pendragon]]&lt;br /&gt;
||Script to easily move/rotate large builds that exceed the linkable size limit (30 meters).&lt;br /&gt;
|-&lt;br /&gt;
||[[Camera Sync]]&lt;br /&gt;
||[[User:Meyermagic Salome|Meyermagic Salome]] and [[User:Nomad Padar|Nomad Padar]]&lt;br /&gt;
||A system to synchronize the cameras of two avatars.&lt;br /&gt;
|-&lt;br /&gt;
||[[Chatbot]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Compile and run the LSL you type on a channel, faster than you can thru the 2007-08 SL GUI.&lt;br /&gt;
|-&lt;br /&gt;
||[[Chat Logger (GPL)]]&lt;br /&gt;
||[[User:Nobody Fugazi|Nobody Fugazi]]&lt;br /&gt;
||Chat logger which requests permission from participants before recording them.&lt;br /&gt;
|-&lt;br /&gt;
||[[Chat_Relay|Chat Relay]]&lt;br /&gt;
||[[User:grumble Loudon|grumble Loudon]]&lt;br /&gt;
||A Chat relay which can be routed using a path header and won&#039;t echo.&lt;br /&gt;
|-&lt;br /&gt;
||[[Code Racer]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Race two versions of code forever, to see which runs faster.&lt;br /&gt;
|-&lt;br /&gt;
||[[Code Sizer]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Count the bytes compiled from source code, to measure how to write small code.&lt;br /&gt;
|-&lt;br /&gt;
||[[Color conversion scripts|Color Conversion]]&lt;br /&gt;
||[[User:Sally LaSalle|Sally LaSalle]]&lt;br /&gt;
||Convert between Red Green Blue (RGB) and Hue Saturation Value (HSV).&lt;br /&gt;
|-&lt;br /&gt;
||[[Color script]]&lt;br /&gt;
||[[User:Masakazu Kojima|Masakazu Kojima]]&lt;br /&gt;
||Script for changing colors trough a listener with pre-defined colors.&lt;br /&gt;
|-&lt;br /&gt;
||[[Library Combined Library|Combined Library]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Library of mostly encoding and decoding functions, some more useful then others.&lt;br /&gt;
* String functions: Replace / Trim right / Trim left / Trim both&lt;br /&gt;
* Unicode conversion: UTF8 to Unicode / Unicode to UTF8&lt;br /&gt;
* List functions: Replace / Compare&lt;br /&gt;
|-&lt;br /&gt;
||[[Computer:jaycoonlanguage]]&lt;br /&gt;
||[[User:jayco121 Bing|jayco121 Bing]]&lt;br /&gt;
|| A language written in LSL that is meant for my computer (available at the shop).&lt;br /&gt;
|-&lt;br /&gt;
||[[Library_Chat_Relay|Conversation Relay]]&lt;br /&gt;
||[[User:Jippen Faddoul|Jippen Faddoul]]&lt;br /&gt;
||Chat relay which requests permission from participants before relaying their messages. Also includes their attachments. (ToS compliant).&lt;br /&gt;
|-&lt;br /&gt;
||[[Curtain script]]&lt;br /&gt;
||[[User:Zilla Larsson|Zilla Larsson]]&lt;br /&gt;
||A simple script to retract/stretch curtains, blinds, bedcovers and more&lt;br /&gt;
|-&lt;br /&gt;
||[[Dataserver API]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||Dataserver Framework for Notecards.&lt;br /&gt;
|-&lt;br /&gt;
||[[Date Library]]&lt;br /&gt;
||[[User:Corto Maltese|Corto Maltese]]&lt;br /&gt;
|| Date library, based on number of day since march 3rd 1600, can be used to calculate weekday, date differences, and date offset, and date formating.&lt;br /&gt;
|-&lt;br /&gt;
||[[Days in Month]]&lt;br /&gt;
||[[User:IntLibber Brautigan|IntLibber Brautigan]]&lt;br /&gt;
||Clicking on it returns the number of days in the present month. Useful for scripting calendars and tier systems that need to know the number of days in the month at hand or to calculate for any month. Even adjusts for leap years.&lt;br /&gt;
|-&lt;br /&gt;
||[[Day of the Week]]&lt;br /&gt;
||[[User:DoteDote Edison|DoteDote Edison]]&lt;br /&gt;
||Function to get day of the week from [[llGetUnixTime]].&lt;br /&gt;
|-&lt;br /&gt;
||[[Deed Tools]]&lt;br /&gt;
||[[User:Falados Kapuskas|Falados Kapuskas]]&lt;br /&gt;
||Tools that allow the creator to modify Group-Owned (Deeded) Objects via chat.&lt;br /&gt;
|-&lt;br /&gt;
||[[Describe Chatter]]&lt;br /&gt;
||Anonymous&lt;br /&gt;
||Chat to see yourself as others do.&lt;br /&gt;
|-&lt;br /&gt;
||[[Drink script]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Used mainly for food and drink in Second Life.&lt;br /&gt;
|-&lt;br /&gt;
||[[ClickAndDrag]]&lt;br /&gt;
||[[User:Nexii Malthus|Nexii Malthus]]&lt;br /&gt;
|| Click and Drag user interface elements using dynamic feedback&lt;br /&gt;
|-&lt;br /&gt;
||[[Dialog Control]]&lt;br /&gt;
||[[User:Nargus Asturias|Nargus Asturias]]&lt;br /&gt;
|| A (not-so) simple dialog control script. Call dialog and receive selected value via link_message(), with built-in timer and link_message() notification on time out. Supports multi-pages dialog and numeric property dialog. Button text and dialog&#039;s returned value can differ.&lt;br /&gt;
|-&lt;br /&gt;
||[[Dialog Menus Control]]&lt;br /&gt;
||[[User:Nargus Asturias|Nargus Asturias]]&lt;br /&gt;
|| An extension to Nargus Dialog Control. This menus control allow multi-level menus through SL dialog system. It can also recall last used menus. Menus are saved and pre-formatted for faster access. Though it is not the fastest, nor most memory efficient, but it should make it easier to use.&lt;br /&gt;
|-&lt;br /&gt;
||[[Dialog NumberPad|Dialog Number Pad]]&lt;br /&gt;
||[[User:DoteDote Edison|DoteDote Edison]]&lt;br /&gt;
||Use a dialog to accept positive integer input from users.&lt;br /&gt;
|-&lt;br /&gt;
||[[Efficiency Tester]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Tests the speed of a function.&lt;br /&gt;
|-&lt;br /&gt;
||[[Email-to-IM|Email2IM]]&lt;br /&gt;
||[[User:DoteDote Edison|DoteDote Edison]]&lt;br /&gt;
||Send IMs to SL friends via email (translate emails from friends into IMs).&lt;br /&gt;
|-&lt;br /&gt;
||[[Fix Small Prims|Fix_Small_Prims]]&lt;br /&gt;
||[[User:Emma Nowhere|Emma Nowhere]]&lt;br /&gt;
||Finds and adjusts the smallest prims in a linkset so that it can be scaled down further.&lt;br /&gt;
|-&lt;br /&gt;
||[[Float2Hex]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Very useful for transporting [[float|floats]].&lt;br /&gt;
|-&lt;br /&gt;
||[[Follower (script)|Follower]]&lt;br /&gt;
||Unknown, uploaded by [[User:Slik Swindlehurst|Slik Swindlehurst]]&lt;br /&gt;
||Makes an object follow the nearest person. Do not use for [[grief|griefing]].&lt;br /&gt;
|-&lt;br /&gt;
||[[Geometric|Geometric Library]]&lt;br /&gt;
||Community Project&lt;br /&gt;
||A substantial amount of various geometric functions for intersection and other purposes of 3D maths.&lt;br /&gt;
|-&lt;br /&gt;
||[[GetTimestampOffset]]&lt;br /&gt;
||[[User:Siann_Beck|Siann Beck]]&lt;br /&gt;
||Returns llGetTimestamp() with an hour offset.&lt;br /&gt;
|-&lt;br /&gt;
||[[Give InvItem every n hours]]&lt;br /&gt;
||[[User:Criz Collins|Criz Collins]]&lt;br /&gt;
||Will give an inventory item on touch only every n hours, even if somebody touches the object more than once. &lt;br /&gt;
|-&lt;br /&gt;
||[[Give random object]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Touch to recieve a random object in the prim&#039;s inventory&lt;br /&gt;
|-&lt;br /&gt;
||[[Google Charts]]&lt;br /&gt;
||[[User:Dedric Mauriac|Dedric Mauriac]]&lt;br /&gt;
||Create links to display raw data as a chart image.&lt;br /&gt;
|-&lt;br /&gt;
||[[Go transparent when walking]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||An attachment that goes invisble when you walk and visible when you don&#039;t walk.&lt;br /&gt;
|-&lt;br /&gt;
||[[Group Privacy]]&lt;br /&gt;
||[[User:Chance Unknown|Chance Unknown]]&lt;br /&gt;
||Security device to insure members of a group can have a private area. Deactivates when nobody present.&lt;br /&gt;
|-&lt;br /&gt;
||[[Group key finder]]&lt;br /&gt;
||[[User:Emmas Seetan| Emmas Seetan]]&lt;br /&gt;
||Touch to find the key of the group&lt;br /&gt;
|-&lt;br /&gt;
||[[Hello Avatar]]&lt;br /&gt;
||Linden Lab&lt;br /&gt;
||SL&#039;s default script.&lt;br /&gt;
|-&lt;br /&gt;
||[[High Altitude Rezzer|High Altitude Rezzer]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||Vehicle that goes straight up and then rezzes objects up to 4,096 meters.&lt;br /&gt;
|-&lt;br /&gt;
||[[Holodeck]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||Home Rezzing System (Open Source).&lt;br /&gt;
|-&lt;br /&gt;
||[[Intra-Region Update Server]]&lt;br /&gt;
||[[User:Emma_Nowhere|Emma Nowhere]]&lt;br /&gt;
||Centrally update objects such as Freeview screens or teleport pads within a region that are configured by notecards or contain modifiable objects or media assets.&lt;br /&gt;
|-&lt;br /&gt;
||[[Interpolation|Interpolation Library]]&lt;br /&gt;
||[[User:Nexii_Malthus|Nexii Malthus]]&lt;br /&gt;
||A small set of interpolation functions.&lt;br /&gt;
|-&lt;br /&gt;
||[[Inventory Menu]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||Inventory Based Menu System.&lt;br /&gt;
|-&lt;br /&gt;
||[[iTunes RPC Email|iTunes RPC]]&lt;br /&gt;
||[[User:Fox Diller|Fox Diller]]&lt;br /&gt;
||iTunes RPC via LSL [[llEmail]] and [[llRemoteDataReply]].&lt;br /&gt;
|-&lt;br /&gt;
||[[Key Pad Door|Keypad Door]]&lt;br /&gt;
||[[User:Tdub Dowler|Tdub Dowler]]&lt;br /&gt;
|| Door and keypad with changeable code. Follow instructions carefully!&lt;br /&gt;
|-&lt;br /&gt;
||[[LSL_languageAPI]]&lt;br /&gt;
||[[User:Gypsy paz|Gypsy Paz]]&lt;br /&gt;
||Multi-lingual API from notecard based language files&lt;br /&gt;
|-&lt;br /&gt;
||[[Last Sound System]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An LSL Last.fm client.&lt;br /&gt;
|-&lt;br /&gt;
||[[Listener Script]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Use to listen to other people&#039;s conversations (Like spying)&lt;br /&gt;
|-&lt;br /&gt;
||[[List2CSV]]&lt;br /&gt;
||[[User:Kunnis Basiat|Kunnis Basiat]]&lt;br /&gt;
||List2CSV &amp;amp; CSV2List that include perserving type and escaping characters.&lt;br /&gt;
|-&lt;br /&gt;
||[[Load URL]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||Touch to get a dialog to visit the URL inside the script.&lt;br /&gt;
|-&lt;br /&gt;
||[[Mandelbrot Explorer]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An interactive fractal explorer.&lt;br /&gt;
|-&lt;br /&gt;
||[[Merge Sort]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Implements a Merge Sort in LSL, however this code is 300(ish) times slower than [[llListSort]]. Don&#039;t use this in a script!&lt;br /&gt;
|-&lt;br /&gt;
||[[Minesweeper]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||A simple minesweeper game.&lt;br /&gt;
|-&lt;br /&gt;
||[[Multirezzer|Multirezzer (on collision)]]&lt;br /&gt;
||[[User:Beet Streeter|Beet Streeter]]&lt;br /&gt;
||Spawns up to 10 objects when the object containing the script collides with a user.&lt;br /&gt;
|-&lt;br /&gt;
||[[Name2Key in LSL]]&lt;br /&gt;
||[[User:Maeva Anatine|Maeva Anatine]]&lt;br /&gt;
||Get the Name2Key feature inside your scripts. Works even on lastly subscribed avatars.&lt;br /&gt;
|-&lt;br /&gt;
||[[Object to Data v1.2|Object to Data]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Turns an object into text (and back). Allows people to transfer objects through notecards.&lt;br /&gt;
|-&lt;br /&gt;
||[[Open Group Join]]&lt;br /&gt;
||[[User:Alicia Stella|Alicia Stella]]&lt;br /&gt;
||User Touches Object to Join Group from Group Info window, (no bot.)&lt;br /&gt;
|-&lt;br /&gt;
||[[ParseString2List]]&lt;br /&gt;
||[[User:Strife Onizuka|Strife Onizuka]]&lt;br /&gt;
||Same as [[llParseString2List]] and [[llParseStringKeepNulls]], but not limited to 8 spacers or separators. Thus substitute a call to the [[llParseString2List]] and [[llParseStringKeepNulls]] functions by a call to [[Parse_String_To_List|ParseString2List]] whenever you have more than 8 separators or more than 8 spacers.&lt;br /&gt;
|-&lt;br /&gt;
||[[Pathfinder]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||A potential field based pathfinding library.&lt;br /&gt;
|-&lt;br /&gt;
||[[Phantom Child]]&lt;br /&gt;
||[[User:Aeron Kohime|Aeron Kohime]]&lt;br /&gt;
||Causes a child in a link set to become phantom without the entire object becoming phantom.&lt;br /&gt;
|-&lt;br /&gt;
||[[Phantom Maker]]&lt;br /&gt;
||[[User:Xaviar_Czervik|Xaviar Czervik]]&lt;br /&gt;
||An object that turns avatars into phantoms, without having to remain sitting.&lt;br /&gt;
|-&lt;br /&gt;
||[[PosJump]]&lt;br /&gt;
||[[User:Uchi Desmoulins|Uchi Desmoulins]]&lt;br /&gt;
||A much more efficient alternative to the popular [[warpPos]] function for bypassing 10m distance-moved limitations.&lt;br /&gt;
|-&lt;br /&gt;
||[[Prefix Calculator]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
|| A calculator that evaluates expressions in prefix notation. &lt;br /&gt;
&amp;lt;code&amp;gt;+ 3 4 = 5. * + 1 2 + 3 4 = 14.&amp;lt;/code&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
||[[Pseudo-random Number Generator]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Generates a Pseudo-random number between -0x7FFFFFFF and 0x7FFFFFFF&lt;br /&gt;
|-&lt;br /&gt;
||[[Random AV Profile Projector]]&lt;br /&gt;
||[[User:Debbie Trilling|Debbie Trilling]]&lt;br /&gt;
||Randomly selects an AV from a crowd &amp;amp; then projects their profile picture as a &#039;holographic&#039; image &lt;br /&gt;
|-&lt;br /&gt;
||[[RavText]]&lt;br /&gt;
||[[User:Ravenous Dingo|Ravenous Dingo]]&lt;br /&gt;
||An alternate to XyText.  This is a lightweight, multiple font 10 character text display system.  It only supports uppercase alphanumeric text and a few special characters, but it is very fast, renders quickly and supports multiple fonts. It is meant for specialized use when all that is desired is basic, fast, text display and the extra &amp;quot;bells and whistles&amp;quot; are not needed.&lt;br /&gt;
|-&lt;br /&gt;
||[[Say Region Frames Per Second|Region Frames Per Second]]&lt;br /&gt;
||[[User:Heymeriou Mystakidou|Heymariou Mystakidou]]&lt;br /&gt;
|| Says the region name and frames per second out loud on command.&lt;br /&gt;
|-&lt;br /&gt;
||[[sbDialog]]&lt;br /&gt;
||[[User:Siann_Beck|Siann Beck]]&lt;br /&gt;
||A simple replacement function for [[llDialog]]. It re-orders the button list so that the button values, as passed to it, display left-to-right, top-to-bottom. It also opens a [[llListen|listen]] on the specified channel, and returns the handle.&lt;br /&gt;
|-&lt;br /&gt;
||[[Scheduler]]&lt;br /&gt;
||[[User:Haravikk Mistral|Haravikk Mistral]]&lt;br /&gt;
||Schedule multiple events using a single script timer&lt;br /&gt;
|-&lt;br /&gt;
||[[Script Override Functions]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||bypass default strings, integer etc in chat channel.&lt;br /&gt;
|-&lt;br /&gt;
||[[Self Upgrading Script Enhanced]]&lt;br /&gt;
||[[User:Cron Stardust|Cron Stardust]]&lt;br /&gt;
||Keeps only latest version of the script on prim (even with multiple adds of the same script!)&lt;br /&gt;
|-&lt;br /&gt;
||[[SHA1|SHA1 Hash]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Preforms a SHA1 Hash on an input text. Similar to MD5 only (slightly) more secure.&lt;br /&gt;
|-&lt;br /&gt;
||[[Sim Map Particle Projector]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||Displays a floating map of the sim the script is in.&lt;br /&gt;
|-&lt;br /&gt;
||[[SLateIt]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An augmented virtual reality HUD.&lt;br /&gt;
|-&lt;br /&gt;
||[[SLetanque]]&lt;br /&gt;
||[[User:Babbage Linden|Babbage Linden]]&lt;br /&gt;
||An LSL petanque game.&lt;br /&gt;
|-&lt;br /&gt;
||[[SL Mail V1.2]]&lt;br /&gt;
||[[User:Flennan Roffo|Flennan Roffo]]&lt;br /&gt;
||Second Life mail client V1.2 (released sept&#039;07). Send and receive mail from within Second Life from and to any address. With Address Book function and many chat commands. V1.3 is upcoming soon! &lt;br /&gt;
|-&lt;br /&gt;
||[[SL_NTPoHTTP_v1.1_client|SL NTPoHTTP client]]&lt;br /&gt;
|[[User:SignpostMarv Martin|SignpostMarv Martin]]&lt;br /&gt;
||Second Life Needs Time Parsing over Hyper Text Transfer Protocol&lt;br /&gt;
Emulates the function of [[llGetWallclock]] for any timezone by using SLOpenID&#039;s SLNTPoHTTP service. Also supports ISO 8601 and RFC 2822 timestamps. Script is dependent upon an external service operated by the author!&lt;br /&gt;
|-&lt;br /&gt;
||[[Spiral Staircase Generator]]&lt;br /&gt;
|[[User:Meyermagic Salome|Meyermagic Salome]]&lt;br /&gt;
||Generates nice looking spiral staircases without much hassle.&lt;br /&gt;
|-&lt;br /&gt;
||[[String Compare]]&lt;br /&gt;
||[[User:Xaviar Czervik|Xaviar Czervik]]&lt;br /&gt;
||Compares two strings and reliably returns either 1, -1, or 0 if they are the same.&lt;br /&gt;
|-&lt;br /&gt;
||[[Teleport HUD]]&lt;br /&gt;
||[[User:Jesse Barnett|Jesse Barnett]]&lt;br /&gt;
||WORKS TO 4096 METERS!! Very user friendly teleport HUD. Add destinations by touching &amp;quot;Add&amp;quot; &amp;amp; naming destination in chat. Automatically gets sim name and coordinates. Will only display the destinations in the sim you are currently in. Demonstrates more advanced list manipulation and stride functions.&lt;br /&gt;
|-&lt;br /&gt;
||[[Texture Menu Management|Texture Management]]&lt;br /&gt;
||[[User:Revolution Perenti|Revolution Perenti]]&lt;br /&gt;
||Dialog Menu based Texture Selection.&lt;br /&gt;
|-&lt;br /&gt;
||[[Tic Tac Toe]]&lt;br /&gt;
||[[User:CG Linden|CG Linden]]&lt;br /&gt;
||Step by step demo on how to implement a larger scripting project&lt;br /&gt;
|-&lt;br /&gt;
||[[TightList]]&lt;br /&gt;
||[[User:Strife Onizuka|Revolution Perenti]]&lt;br /&gt;
||Tight List is a family of functions for encoding lists as strings and then decoding them back into lists. &lt;br /&gt;
&lt;br /&gt;
There are two flavors: TightList and TightListType. TightListType preserves types and uses a 6 char header, while TightList uses a 1 char header that doesn&#039;t preserve type. &lt;br /&gt;
|-&lt;br /&gt;
||[[Timer Module]]&lt;br /&gt;
||[[User:Isabelle Aquitaine|Isabelle Aquitaine]]&lt;br /&gt;
||Manage multiple timers via linked messages.&lt;br /&gt;
|-&lt;br /&gt;
||[[Unix2DateTime]]&lt;br /&gt;
|[[User:Flennan Roffo|Flennan Roffo]]&lt;br /&gt;
||Conversion from Unix time (llGetUnixTime()) to date and time string and vice versa.&lt;br /&gt;
|-&lt;br /&gt;
||[[Under Age Boot]]&lt;br /&gt;
|[[User:Chance Unknown|Chance Unknown]]&lt;br /&gt;
||Security device example to teleport home accounts below a minimum age limit; can be useful in combating free griefer accounts.&lt;br /&gt;
|-&lt;br /&gt;
||[[Unmutable Descript Nagger]]&lt;br /&gt;
|[[User:Bobbyb30 Zohari|Bobbyb30 Zohari]]&lt;br /&gt;
||To nag avatars to take off their scripted attatchments.&lt;br /&gt;
|-&lt;br /&gt;
||[[Visitor Logger (Web/Basic) ]]&lt;br /&gt;
|[[User:Buddy Sprocket|Buddy Sprocket]]&lt;br /&gt;
||A very basic visitor logger - log visitors in SL to a text file on your web-site.&lt;br /&gt;
|-&lt;br /&gt;
||[[Vote Simple]]&lt;br /&gt;
|[[User:JB_Kraft|JB Kraft]]&lt;br /&gt;
||Simple vote collector. One avi, one vote.&lt;br /&gt;
|-&lt;br /&gt;
||[[WarpPos]]&lt;br /&gt;
|[[User:Keknehv Psaltery|Keknehv Psaltery]]&lt;br /&gt;
||Non-physical movement without the 10m limit.&lt;br /&gt;
|-&lt;br /&gt;
||[[Window Control]]&lt;br /&gt;
||[[User:Emmas Seetan|Emmas Seetan]]&lt;br /&gt;
||For window opacity, helpful for buildings.&lt;br /&gt;
|-&lt;br /&gt;
||[[WHMcs SecondLife plugin]]&lt;br /&gt;
|[[User:Alicia Sautereau|Alicia Sautereau]]&lt;br /&gt;
||Linden Dollar payment plugin for the WHMcs hosting portal.&lt;br /&gt;
|-&lt;br /&gt;
||[[XTEA Strong Encryption Implementation]]&lt;br /&gt;
||[[User:Morse Dillon|Morse Dillon]]&lt;br /&gt;
||An LSL implementation of XTEA (eXtended Tiny Encryption Algorithm).  This is the first known public release of a &#039;real&#039; strong encryption implementation in LSL and is released under the GNU General Public License (GPL).&lt;br /&gt;
|-&lt;br /&gt;
||[[XyText 1.5|XyText]]&lt;br /&gt;
||[[User:Xylor Baysklef|Xylor Baysklef]]&lt;br /&gt;
|| Display text (up to 10 characters) on a prim. Use as many prims as desired.&lt;br /&gt;
|-&lt;br /&gt;
||[[XyyyyzText|XyyyyzText]]&lt;br /&gt;
||[[User:Criz Collins|Criz Collins]]&lt;br /&gt;
|| Display text (up to 10 characters) on a prim. Displays different text for each line instead of one single text, that will be broken into the next lines. Watch here for what that means: http://screencast.com/t/1wMLujLcEO&lt;br /&gt;
|-&lt;br /&gt;
||[[XyzzyText|XyzzyText]]&lt;br /&gt;
||[[User:Thraxis Epsilon|Thraxis Epsilon]] and [[User:Gigs Taggart|Gigs Taggart]]&lt;br /&gt;
|| Display text (up to 10 characters) on a prim. Way more efficient than XyText.&lt;br /&gt;
|-&lt;br /&gt;
||[[Zero Lag Poseball]]&lt;br /&gt;
||[[User:Jippen Faddoul|Jippen Faddoul]]&lt;br /&gt;
||A simple poseball with no lag&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Support Script Library==&lt;br /&gt;
These are scripts in other languages, intended to be run on other systems that support scripts written in LSL&lt;br /&gt;
&lt;br /&gt;
{| {{Prettytable}}&lt;br /&gt;
|-&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Name&#039;&#039;&#039;&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Creator&#039;&#039;&#039;&lt;br /&gt;
|{{Hl2}}| &#039;&#039;&#039;Description&#039;&#039;&#039;&lt;br /&gt;
|-&lt;br /&gt;
||[[HTTP Post request to a PHP server]]&lt;br /&gt;
||[[User:Corto Maltese|Corto Maltese]]&lt;br /&gt;
|| This small library allows you to make simple POST requests to your website. The libraries allow you to get your request through the variable $_POST on the server. It also include a basic security mechanism aimed to stop hacking. Comprises of LSL client script and PHP server script.&lt;br /&gt;
|-&lt;br /&gt;
|| Silo&lt;br /&gt;
|| [[User:Zero_Linden|Zero Linden]]&lt;br /&gt;
|| General purpose data store in PHP.  Use this to persist arbitrary data from LSL via [[llHTTPRequest]].  See:&lt;br /&gt;
* [http://www.notabene-sl.com/misc/silo-README.txt README] file&lt;br /&gt;
* [http://www.notabene-sl.com/misc/silo.tgz silo.tgz] tarball&lt;br /&gt;
* forum post [http://forums.secondlife.com/showthread.php?t=119570 Announcement].&lt;br /&gt;
|-&lt;br /&gt;
|| [[User:SignpostMarv Martin/PHP/llXorBase64StringsCorrect|llXorBase64StringsCorrect]]&lt;br /&gt;
|| [[User:SignpostMarv Martin|SignpostMarv Martin]]&lt;br /&gt;
|| An implementation of [[llXorBase64StringsCorrect]] in PHP- should be useful if you&#039;re using llXorBase64StringsCorrect to do cryptography work in LSL2 and posting it out to the web via [[llHTTPRequest]].&lt;br /&gt;
|-&lt;br /&gt;
|| [[User:SignpostMarv Martin/PHP/lsl fu.php|lsl_fu.php]]&lt;br /&gt;
|| [[User:SignpostMarv Martin|SignpostMarv Martin]]&lt;br /&gt;
|| A basic OOP&#039;d PHP Class containing VeloxSeverine&#039;s $_POST fixer and Marv&#039;s own eccentric ideas for &amp;quot;fixing&amp;quot; things.&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;box&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== See Also ==&lt;br /&gt;
&amp;lt;div style=&amp;quot;padding: 0.5em&amp;quot;&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Articles&#039;&#039;&#039;&lt;br /&gt;
*[[:Category:LSL Examples| Examples]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;/div&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ravenous Dingo</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=RavText&amp;diff=161893</id>
		<title>RavText</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=RavText&amp;diff=161893"/>
		<updated>2008-12-01T12:20:04Z</updated>

		<summary type="html">&lt;p&gt;Ravenous Dingo: Initial addition.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;RavText&lt;br /&gt;
A lightweight, multi font, text-on-a-prim display system&lt;br /&gt;
Version 1.0(3) &lt;br /&gt;
&lt;br /&gt;
License:  This is licensed under the terms of the GPL.&lt;br /&gt;
&lt;br /&gt;
This is yet another 10 character display using a 5 faced prim. It does not, however, use any part of the popular [[XyText]] series of scripts.  It is 100% home grown.  It is meant for specialized usage: specifically when one desires a very lightweight script for displaying 10 character basic alphanumeric text.  While it could be expanded to accommodate more characters rather easily, at the moment it just does uppercase alphanumeric plus a few special characters. &lt;br /&gt;
&lt;br /&gt;
The functionality of RavText is limited compared to other text systems, but does have some advantages.  it is definitely not suitable for every application.  Here are the advantages and drawbacks of RavText compared to other systems:&lt;br /&gt;
&lt;br /&gt;
DISADVANTAGES:&lt;br /&gt;
&lt;br /&gt;
1. Limited character set.  Uppercase alphanumeric characters and a few special characters (namely &amp;quot; !@#$%&amp;amp;()&amp;quot;) are supported.  (However, it could easily be expanded to use larger character sets with a few minor modifications and the right texture maps).&lt;br /&gt;
&lt;br /&gt;
2. Lack of special effects or a robust display system.  There are no fade in / fade out effects or any sort of color control, although there is nothing preventing someone from adding them.&lt;br /&gt;
&lt;br /&gt;
3. Currently, the textures can give an annoying flicker under some circumstances when viewed at certain angles on certain displays.&lt;br /&gt;
&lt;br /&gt;
4. Needs some manual configuration when using more than one 5 prim display.  There is no link scanner or any other utility built in.  Individual prims must have their own script and that script must be preconfigured by hand (although it does not take much effort to do so).&lt;br /&gt;
&lt;br /&gt;
5. Not very well commented or documented.  Meh, I&#039;m lazy.&lt;br /&gt;
&lt;br /&gt;
ADVANTAGES:&lt;br /&gt;
&lt;br /&gt;
1. Very lightweight &amp;amp; efficient.  The script is relatively simple, and fast.  It attempts to keep CPU usage to a minimum.&lt;br /&gt;
&lt;br /&gt;
2. &amp;quot;Rezzes&amp;quot; faster.  Partly because of the limited character set, RavText only uses 8 textures per character map, as opposed to the 60+ textures used by XyText derivitives. This tends to result in textures rezzing much faster, and staying in the cache more frequently.  NOTE:  If RavText supported 128 characters instead of the current 45, it would require 64 textures.  This is one of the main reasons I decided to go with uppercase only. I wanted quick rendering basic text.&lt;br /&gt;
&lt;br /&gt;
3. Flexible.  While this version is configured for the standard 5 face configuration, it can be modified to accommodate almost any primface configuration by just editing a few lists.&lt;br /&gt;
&lt;br /&gt;
3. Supports multiple fonts.  Due to the low number of textures required to map the limited RavText character set, it was easy to generate additional display fonts.  Currently, there are 6 possible fonts.&lt;br /&gt;
&lt;br /&gt;
BASIC CONFIGURATION AND CONCEPTS:&lt;br /&gt;
&lt;br /&gt;
RavText uses the variables &amp;quot;panelnum&amp;quot;  and &amp;quot;subpanel&amp;quot; to tell it where it is in your display system.  Each panel is considered to be its own unit and is composed of subpanels. For example, if you wanted to have two blocks of text, each 20 characters long, you would have two panels, each with two subpanels.  Subpanels should be numbered left to right starting with 0.  So text block #1 would be panel 0, with subpanel 0 and 1.  text block 2 would be panel 1, with subpanels 0 and 1 as well.&lt;br /&gt;
&lt;br /&gt;
To set the text on a specific panel, you set the key attribute of a linked message to be &amp;quot;7A&amp;quot;, set the string attribute to be whatever string you want to display.  You would set the number to be 2 raised to the power of the panel number.  You can use -1 to display on all panels.&lt;br /&gt;
&lt;br /&gt;
To change the font, set the key attribute of the link message to be &amp;quot;7F&amp;quot;, set the integer value to be 2 raised to the panel number (or -1 for all panels) and the string to be the font number you want to use (fonts are numbered 0 to 5).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
BASIC USAGE:&lt;br /&gt;
&lt;br /&gt;
1. Make a 5 face prim, just like the ones used with current XyText versions.&lt;br /&gt;
&lt;br /&gt;
2. Put the RavText script in the prim.&lt;br /&gt;
&lt;br /&gt;
3. To display text, send a link message to the prim thusly:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;TEST MSG!&amp;quot;, &amp;quot;7A&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The value &amp;quot;7A&amp;quot; is the command to display a string of text.  The value -1 basically means all panels.&lt;br /&gt;
&lt;br /&gt;
OK, next lets make a two panel display.  It will display up to 20 characters.&lt;br /&gt;
&lt;br /&gt;
1. make two 5 faced prims.&lt;br /&gt;
&lt;br /&gt;
2. Put RavText scripts in each prim&lt;br /&gt;
&lt;br /&gt;
3. Set the subpanel variable on the rightmost display prim to be 1.  Leave the other subpanel value at 0.&lt;br /&gt;
&lt;br /&gt;
4. Once again, send the link message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;TEST MSG! EXPANDED!&amp;quot;, &amp;quot;7A&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To change the font, send the following link message:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
llMessageLinked(LINK_SET, -1, &amp;quot;3&amp;quot;, &amp;quot;7F&amp;quot;);&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
There are a lot more examples I could give, but for now I will leave it as is.  I will try to update this page as I can. &lt;br /&gt;
&lt;br /&gt;
AND NOW, THE CODE:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// RavText&lt;br /&gt;
// Version 1.0(3)&lt;br /&gt;
// Created 2008-09-18&lt;br /&gt;
// A lightweight 10 char / prim text generation system with multiple font support&lt;br /&gt;
// Created by Ravenous Dingo&lt;br /&gt;
// Copyright 2008 owned by the person controlling the Second Life avatar named Ravenous Dingo&lt;br /&gt;
// This code is hereby released under the terms of the GNU Public License version 3&lt;br /&gt;
// Associated textures are hereby released to the public domain&lt;br /&gt;
&lt;br /&gt;
float panelnum=0.; // Panels are groups of prims that work as one block of text&lt;br /&gt;
&lt;br /&gt;
integer subpanel=0; // sub panel is the position within the panel block&lt;br /&gt;
&lt;br /&gt;
integer default_font=0;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
list fontmap=[&lt;br /&gt;
&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
list corner_map=[&lt;br /&gt;
                    &amp;lt;-0.4225, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.4675, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.894, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.4675, 0.4675, 0&amp;gt;,&lt;br /&gt;
                    &amp;lt;-0.515, 0.4675, 0&amp;gt;&lt;br /&gt;
                    ];&lt;br /&gt;
list rep_map=[&lt;br /&gt;
                &amp;lt;0.1525, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.0625, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;-1.0, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.0625, 0.0625, 0&amp;gt;,&lt;br /&gt;
                &amp;lt;0.155, 0.0625, 0&amp;gt;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
list face_map=[ 3, 7, 4, 6, 1 ];&lt;br /&gt;
&lt;br /&gt;
list cur_texmap=[];&lt;br /&gt;
&lt;br /&gt;
integer numfaces=0;&lt;br /&gt;
&lt;br /&gt;
integer start_idx=0;&lt;br /&gt;
&lt;br /&gt;
string alphamap=&amp;quot; 1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ!@#$%&amp;amp;()&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
integer bitmask=0;&lt;br /&gt;
key kravtext_cmd=&amp;quot;7A&amp;quot;;&lt;br /&gt;
key ksetfont_cmd=&amp;quot;7F&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
vector base_offset=&amp;lt;-0.4675, 0.4675, 0&amp;gt;;&lt;br /&gt;
float increment=0.0625;&lt;br /&gt;
&lt;br /&gt;
integer mod=0;&lt;br /&gt;
integer curfont=-1;&lt;br /&gt;
list param=[];&lt;br /&gt;
&lt;br /&gt;
integer indexAlpha(string str)&lt;br /&gt;
{&lt;br /&gt;
    integer idx=llSubStringIndex(alphamap, str);&lt;br /&gt;
    if (idx == -1)&lt;br /&gt;
    {&lt;br /&gt;
        idx=0;&lt;br /&gt;
    }&lt;br /&gt;
    return idx;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
init()&lt;br /&gt;
{&lt;br /&gt;
    composeFonts();&lt;br /&gt;
    mod=llStringLength(alphamap);&lt;br /&gt;
    numfaces=llGetListLength(face_map);&lt;br /&gt;
    bitmask=llRound(llPow(2.,panelnum));&lt;br /&gt;
    start_idx=subpanel * numfaces * 2;&lt;br /&gt;
    loadFont(default_font);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
loadFont(integer fontnum)&lt;br /&gt;
{&lt;br /&gt;
    if (fontnum == curfont)&lt;br /&gt;
    {&lt;br /&gt;
        return;&lt;br /&gt;
    }&lt;br /&gt;
    list tmp_font=llList2List(fontmap, fontnum * 8, (fontnum * 8) + 7);&lt;br /&gt;
&lt;br /&gt;
    integer i=0;&lt;br /&gt;
    string tfont=&amp;quot;&amp;quot;;&lt;br /&gt;
    integer tfnum=0;&lt;br /&gt;
    integer tidx=0;&lt;br /&gt;
    if (llGetListLength(param) != 0)&lt;br /&gt;
    {&lt;br /&gt;
        for (i=0; i &amp;lt; numfaces; i++)&lt;br /&gt;
        {&lt;br /&gt;
            tidx=(i * 6) + 2;&lt;br /&gt;
            tfont=llList2String(param, tidx);&lt;br /&gt;
            // now find the font index;&lt;br /&gt;
            tfnum=llListFindList(cur_texmap, [tfont]);&lt;br /&gt;
            // get the new font&lt;br /&gt;
            tfont=llList2String(tmp_font, tfnum);&lt;br /&gt;
            // and replace it&lt;br /&gt;
            param=llListReplaceList(param,  [tfont], tidx, tidx);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    curfont=fontnum;&lt;br /&gt;
    cur_texmap=tmp_font;&lt;br /&gt;
    llSetPrimitiveParams(param);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
composeFonts()&lt;br /&gt;
{&lt;br /&gt;
    list sysfixed=[&lt;br /&gt;
                &amp;quot;df574f09-061c-d3fe-07eb-3d0008271bc4&amp;quot;,&lt;br /&gt;
                &amp;quot;ace8bde9-b93e-d667-c03c-45ce826c955d&amp;quot;,&lt;br /&gt;
                &amp;quot;f7c99d89-ff0b-059e-3e3b-625d71799f19&amp;quot;,&lt;br /&gt;
                &amp;quot;eb3e7fea-60f6-6335-a7da-5d0e7dbed0bf&amp;quot;,&lt;br /&gt;
                &amp;quot;627a4675-4db8-f473-b16a-27aeb42e2b6f&amp;quot;,&lt;br /&gt;
                &amp;quot;aa14726b-fab8-7802-cc23-f118455f4354&amp;quot;,&lt;br /&gt;
                &amp;quot;d7808242-a2da-e144-3338-6b005671e6e6&amp;quot;,&lt;br /&gt;
                &amp;quot;60d062d7-b60f-220d-f9dd-189596a796d2&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
    list OCR_A=[&lt;br /&gt;
                &amp;quot;6d788259-709e-cc72-98b4-4ec56986a958&amp;quot;,&lt;br /&gt;
                &amp;quot;c74622f7-5740-1e5f-2a64-69060bf2742e&amp;quot;,&lt;br /&gt;
                &amp;quot;ffa88837-7f13-dbb3-e28c-2e969b9b4737&amp;quot;,&lt;br /&gt;
                &amp;quot;9127b5d8-459f-7d2c-2b3b-2b6c740de94a&amp;quot;,&lt;br /&gt;
                &amp;quot;894d4fc7-6c3c-954c-e7c9-94c687a1ac62&amp;quot;,&lt;br /&gt;
                &amp;quot;f529f498-be68-f5bd-2464-34e5bb4a8cdb&amp;quot;,&lt;br /&gt;
                &amp;quot;b645eb2c-57eb-a420-afbe-cba49bd298d8&amp;quot;,&lt;br /&gt;
                &amp;quot;bf8541e1-d875-96a6-adc3-fbdd38c41f2a&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
&lt;br /&gt;
    list profont=[&lt;br /&gt;
                &amp;quot;9e83c094-58b1-8375-192f-2e0ef0f06d91&amp;quot;,&lt;br /&gt;
                &amp;quot;fcd34765-3c58-c1df-2c5e-5e96d1491c0c&amp;quot;,&lt;br /&gt;
                &amp;quot;fd232e50-9ed5-3cc0-345e-b08154b9bf97&amp;quot;,&lt;br /&gt;
                &amp;quot;10c5ab5f-49cb-ff40-3023-029caa4a4ff1&amp;quot;,&lt;br /&gt;
                &amp;quot;2956334f-79f3-010b-9be7-fc4811d2adae&amp;quot;,&lt;br /&gt;
                &amp;quot;b0277b5b-dfbf-27c3-47c9-3a120881fe64&amp;quot;,&lt;br /&gt;
                &amp;quot;969a1eb3-acbf-8425-1ddd-4f6a81bdbd58&amp;quot;,&lt;br /&gt;
                &amp;quot;409d587d-a374-4a1b-16d5-9c19a9baf83a&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list cour_new=[&lt;br /&gt;
                &amp;quot;e60aa9ab-7f1c-33ec-3408-37c20cce3c76&amp;quot;,&lt;br /&gt;
                &amp;quot;93eb9bef-dafa-9980-5d25-5adb5614ccc3&amp;quot;,&lt;br /&gt;
                &amp;quot;dd584fae-63e2-6f50-4811-a5b14989020a&amp;quot;,&lt;br /&gt;
                &amp;quot;cf4c4265-64a9-fa64-b18e-47c11fc18aa2&amp;quot;,&lt;br /&gt;
                &amp;quot;1c63839f-ebfa-c9e9-2391-98faa059c7a3&amp;quot;,&lt;br /&gt;
                &amp;quot;533279c5-cd44-daa4-b010-cd7c99e48c72&amp;quot;,&lt;br /&gt;
                &amp;quot;c1731907-6627-7463-2cff-dfa4499559bb&amp;quot;,&lt;br /&gt;
                &amp;quot;88e2bd5c-5c6f-6103-c2fb-db958e31d026&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list bs_vera=[&lt;br /&gt;
                &amp;quot;f88d322e-2f8d-c5d9-544c-293e0c5647c1&amp;quot;,&lt;br /&gt;
                &amp;quot;91546531-86b9-87ec-3dec-2072ebb012ad&amp;quot;,&lt;br /&gt;
                &amp;quot;1a545d8d-f14f-32aa-ad96-1abca948a662&amp;quot;,&lt;br /&gt;
                &amp;quot;d78fa62c-301d-fa10-188a-ee5f6ad87777&amp;quot;,&lt;br /&gt;
                &amp;quot;69e53076-8083-975b-31c0-420f1f5658dc&amp;quot;,&lt;br /&gt;
                &amp;quot;1b5ffc88-96e6-03c0-39c0-e38a6fad981a&amp;quot;,&lt;br /&gt;
                &amp;quot;a1511389-1b45-b7fb-1961-fd02ee57e26d&amp;quot;,&lt;br /&gt;
                &amp;quot;474e449e-f2f3-d5ac-1c63-1be922b3b434&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    list sheldon=[&lt;br /&gt;
                &amp;quot;2958c0ac-cba6-a02b-da3e-aec050e3714f&amp;quot;,&lt;br /&gt;
                &amp;quot;cb8faeb7-c87e-c57c-448a-53a718adb3c8&amp;quot;,&lt;br /&gt;
                &amp;quot;572ff18e-d319-6213-ca28-202aeb7dc2e8&amp;quot;,&lt;br /&gt;
                &amp;quot;0bfc28e2-788d-035d-1ac1-ce752d90f89c&amp;quot;,&lt;br /&gt;
                &amp;quot;1fe4af1d-d99b-fe28-fba8-0006527c4c5f&amp;quot;,&lt;br /&gt;
                &amp;quot;f7fb5f59-0275-3ee7-9b54-e9a1ae61b76c&amp;quot;,&lt;br /&gt;
                &amp;quot;5e52d02e-edae-bf73-da61-9e1fe4e1801b&amp;quot;,&lt;br /&gt;
                &amp;quot;ff54400e-050c-7f87-cefd-a396c86d24d6&amp;quot;&lt;br /&gt;
                ];&lt;br /&gt;
    fontmap=sysfixed + OCR_A + profont + cour_new + bs_vera + sheldon;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        init();&lt;br /&gt;
    }&lt;br /&gt;
    &lt;br /&gt;
    link_message(integer sender, integer num, string msg, key id)&lt;br /&gt;
    {&lt;br /&gt;
        if ((id == kravtext_cmd) &amp;amp;&amp;amp; (num &amp;amp; bitmask))&lt;br /&gt;
        {&lt;br /&gt;
            param=[]; // create our primitive param list&lt;br /&gt;
            msg=llToUpper(msg); // make everything upper case&lt;br /&gt;
            integer i=0;&lt;br /&gt;
            integer this_idx=0;&lt;br /&gt;
            integer frame=0;&lt;br /&gt;
            integer tnum=0;&lt;br /&gt;
            integer xinc=0;&lt;br /&gt;
            integer yinc=0;&lt;br /&gt;
            integer fx=0;&lt;br /&gt;
            integer fy=0;&lt;br /&gt;
            float xpos=0.;&lt;br /&gt;
            float ypos=0.;&lt;br /&gt;
&lt;br /&gt;
            integer thisface=0;&lt;br /&gt;
            string thistex=NULL_KEY;&lt;br /&gt;
            vector this_rep=&amp;lt;0.,0.,0.&amp;gt;;&lt;br /&gt;
            for (i=0; i &amp;lt; numfaces; i++)&lt;br /&gt;
            {&lt;br /&gt;
                this_idx = start_idx + (i * 2);&lt;br /&gt;
                frame = ( mod * indexAlpha( llGetSubString( msg, this_idx, this_idx ) ) )&lt;br /&gt;
                        + indexAlpha( llGetSubString( msg, this_idx+ 1, this_idx +1 ) );&lt;br /&gt;
                base_offset=llList2Vector(corner_map, i);&lt;br /&gt;
                this_rep=llList2Vector(rep_map, i);&lt;br /&gt;
                thisface=llList2Integer(face_map, i);&lt;br /&gt;
                xinc = frame % 32;&lt;br /&gt;
                yinc = frame / 32;&lt;br /&gt;
                fx = xinc / 16;&lt;br /&gt;
                fy = yinc / 16;&lt;br /&gt;
                tnum=(fy * 2) + fx;&lt;br /&gt;
                thistex=llList2String(cur_texmap, tnum);&lt;br /&gt;
                xinc = xinc - ( 16 * fx );&lt;br /&gt;
                yinc = yinc - ( 16 * fy );&lt;br /&gt;
                xpos=base_offset.x + (increment * (float)xinc);&lt;br /&gt;
                ypos=base_offset.y - (increment * (float)yinc);&lt;br /&gt;
&lt;br /&gt;
                param += [&lt;br /&gt;
                            PRIM_TEXTURE,&lt;br /&gt;
                            thisface,&lt;br /&gt;
                            thistex,&lt;br /&gt;
                            this_rep,&lt;br /&gt;
                            &amp;lt;xpos, ypos, 0&amp;gt;,&lt;br /&gt;
                            0.&lt;br /&gt;
                            ];&lt;br /&gt;
            }&lt;br /&gt;
            llSetPrimitiveParams(param);&lt;br /&gt;
        }&lt;br /&gt;
        else if ((id == ksetfont_cmd) &amp;amp;&amp;amp; (num &amp;amp; bitmask))&lt;br /&gt;
        {&lt;br /&gt;
            integer fnum=(integer)msg;&lt;br /&gt;
            loadFont(fnum);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ravenous Dingo</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Ravenous_Dingo&amp;diff=161883</id>
		<title>User:Ravenous Dingo</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Ravenous_Dingo&amp;diff=161883"/>
		<updated>2008-12-01T10:57:22Z</updated>

		<summary type="html">&lt;p&gt;Ravenous Dingo: New page: Just another software engineer.  I dabble in just about everything but particularly enjoy creating games.  I also like working with web to SL networked stuff.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Just another software engineer.  I dabble in just about everything but particularly enjoy creating games.  I also like working with web to SL networked stuff.&lt;/div&gt;</summary>
		<author><name>Ravenous Dingo</name></author>
	</entry>
</feed>