<?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=Clematide+Oyen</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=Clematide+Oyen"/>
	<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/wiki/Special:Contributions/Clematide_Oyen"/>
	<updated>2026-07-26T03:20:12Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Color_conversion_scripts&amp;diff=1187834</id>
		<title>Color conversion scripts</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Color_conversion_scripts&amp;diff=1187834"/>
		<updated>2014-02-23T19:31:50Z</updated>

		<summary type="html">&lt;p&gt;Clematide Oyen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{LSL Header|ml=*}}{{#vardefine:header_title|Color conversion scripts}}&lt;br /&gt;
&lt;br /&gt;
The following functions convert between LSL [[color]] in Red Green Blue (RGB) format and color in Hue Saturation Value (HSV) format.&lt;br /&gt;
The functions are based on &amp;quot;c&amp;quot; algorithms from [http://www.cs.rit.edu/~ncs/color/t_convert.html c color conversion] but required some debugging and extensive re-working to fit them in to LSL.   For a discussion of HSV color format please see the wikipedia entry at  [http://en.wikipedia.org/wiki/HSV_color_space HSV Color]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==RGB to HSV==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// by [[Sally LaSalle]], code released to the public domain under GNU GPL version 3.0 license.&lt;br /&gt;
// you are free to use, and you are free to donate to me if you wish!! :P&lt;br /&gt;
&lt;br /&gt;
// takes an RGB color as a vector, with range &amp;lt;float R[0,1], float G[0,1], float B[0,1]&amp;gt;&lt;br /&gt;
// returns a vector with HSV ranged from &amp;lt;float H[0,360], float S[0,1],  float V[0,1]&amp;gt;&lt;br /&gt;
// H ranges smoothly from Red=0, Yellow=60, Green=120, Cyan=180, Blue=240, Violet=300 and back to Red&lt;br /&gt;
&lt;br /&gt;
vector RGBtoHSV( vector rgb )&lt;br /&gt;
{&lt;br /&gt;
    float R = rgb.x;&lt;br /&gt;
    if (R&amp;lt;0)		// catch malformed input&lt;br /&gt;
        R=0;&lt;br /&gt;
    else if (R&amp;gt;1)&lt;br /&gt;
        R=1;&lt;br /&gt;
    float G = rgb.y;&lt;br /&gt;
    if (G&amp;lt;0)		// catch malformed input&lt;br /&gt;
        G=0;&lt;br /&gt;
    else if (G&amp;gt;1)&lt;br /&gt;
        G=1;&lt;br /&gt;
    float B = rgb.z;&lt;br /&gt;
    if (B&amp;lt;0)		// catch malformed input&lt;br /&gt;
        B=0;&lt;br /&gt;
    else if (B&amp;gt;1)&lt;br /&gt;
        B=1;&lt;br /&gt;
    &lt;br /&gt;
    float H;&lt;br /&gt;
    float S;&lt;br /&gt;
    float V;&lt;br /&gt;
    &lt;br /&gt;
    list rgbList = [R, G, B]; // list used to get min and max&lt;br /&gt;
        &lt;br /&gt;
    float min;&lt;br /&gt;
    float max;&lt;br /&gt;
    float achromatic;  // =1 if R=G=B&lt;br /&gt;
    float delta;&lt;br /&gt;
    &lt;br /&gt;
    vector hsv;  // the return HSV vector&lt;br /&gt;
&lt;br /&gt;
    min = llListStatistics(LIST_STAT_MIN, rgbList); //MIN of ( R, G, B );&lt;br /&gt;
    max = llListStatistics(LIST_STAT_MAX, rgbList); //MAX of ( R, G, B );&lt;br /&gt;
    if (R==G &amp;amp;&amp;amp; G==B)&lt;br /&gt;
        achromatic = 1;  // it is a shade of grey, white or black&lt;br /&gt;
    else&lt;br /&gt;
        achromatic = 0;&lt;br /&gt;
&lt;br /&gt;
    V = max;                    // V = brightness Value form 0 to 1&lt;br /&gt;
    delta = max - min;&lt;br /&gt;
&lt;br /&gt;
    if( max != 0 )&lt;br /&gt;
        S = delta / max;        // S = saturation from 0 to 1&lt;br /&gt;
    else {&lt;br /&gt;
        // R = G = B = 0        // S = 0, V = 0, H = 0&lt;br /&gt;
        S = 0;                  &lt;br /&gt;
        V = 0;                  &lt;br /&gt;
        H = 0;&lt;br /&gt;
        &lt;br /&gt;
        hsv.x = H;&lt;br /&gt;
        hsv.y = S;&lt;br /&gt;
        hsv.z = V;&lt;br /&gt;
        return hsv;             //H = S = V = 0&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    if (achromatic == 1)&lt;br /&gt;
        H = 0;&lt;br /&gt;
    else if( R == max )&lt;br /&gt;
        H = 0 + ( G - B ) / delta;    // between red &amp;amp; yellow&lt;br /&gt;
    else if( G == max )&lt;br /&gt;
        H = 2 + ( B - R ) / delta;    // between yellow &amp;amp; cyan&lt;br /&gt;
    else&lt;br /&gt;
        H = 4 + ( R - G ) / delta;    // between cyan &amp;amp; red&lt;br /&gt;
    &lt;br /&gt;
&lt;br /&gt;
    H *= 60;                	      // H is traditionally a figure between 0 and 360 degrees&lt;br /&gt;
    if( H &amp;lt; 0 )&lt;br /&gt;
        H += 360;&lt;br /&gt;
&lt;br /&gt;
    hsv.x = H;&lt;br /&gt;
    hsv.y = S;&lt;br /&gt;
    hsv.z = V;&lt;br /&gt;
    return hsv;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==HSV to RGB==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// by Sally LaSalle, code released to the public domain under GNU GPL version 3.0 license.&lt;br /&gt;
// you are free to use, and you are free to donate to me if you wish!! :P&lt;br /&gt;
&lt;br /&gt;
// takes a vector encoded Hue Saturation Value (HSV) triplet&lt;br /&gt;
// HSV should be entered with floats the ranges: &amp;lt;float H(0 to 360), float S(0 to 1),float V(0 to 1)&amp;gt;&lt;br /&gt;
// And Returns a vector encode Red Green Blue (RGB) color triplet&lt;br /&gt;
// RGB will be returned with floats in ranges &amp;lt;float R(0 to 1),float G(0 to 1),float B(0 to 1)&amp;gt;&lt;br /&gt;
&lt;br /&gt;
vector HSVtoRGB( vector hsv )&lt;br /&gt;
{&lt;br /&gt;
    integer i;&lt;br /&gt;
	&lt;br /&gt;
     float H = hsv.x;&lt;br /&gt;
     if (H&amp;lt;0)		// catch malformed H input&lt;br /&gt;
	H=0;&lt;br /&gt;
     else if (H&amp;gt;=360)&lt;br /&gt;
	H=0;&lt;br /&gt;
     float S = hsv.y;&lt;br /&gt;
     if (S&amp;lt;0)		// catch malformed S input&lt;br /&gt;
	S=0;&lt;br /&gt;
     else if (S&amp;gt;1)&lt;br /&gt;
	S=1;&lt;br /&gt;
     float V = hsv.z;&lt;br /&gt;
     if (V&amp;lt;0)		// catch malformed V input&lt;br /&gt;
	V=0;&lt;br /&gt;
     else if (V&amp;gt;1)&lt;br /&gt;
	V=1;&lt;br /&gt;
&lt;br /&gt;
    float R;&lt;br /&gt;
    float G;&lt;br /&gt;
    float B;&lt;br /&gt;
    &lt;br /&gt;
    float f; 	    // variables for calculating base color mixing around the &amp;quot;spectrum circle&amp;quot;&lt;br /&gt;
    float p;&lt;br /&gt;
    float q;&lt;br /&gt;
    float t;&lt;br /&gt;
  &lt;br /&gt;
    vector rgb;&lt;br /&gt;
    &lt;br /&gt;
    if( S == 0 ) {  // achromatic (grey) simply set R,G, &amp;amp; B = Value&lt;br /&gt;
        R = V;&lt;br /&gt;
        G = V;&lt;br /&gt;
        B = V;&lt;br /&gt;
&lt;br /&gt;
        rgb.x = R;&lt;br /&gt;
        rgb.y = G;&lt;br /&gt;
        rgb.z = B;&lt;br /&gt;
        return rgb;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    H /= 60;              // Hue factored into range 0 to 5&lt;br /&gt;
    i = llFloor( H );	  // integer floor of Hue&lt;br /&gt;
    f = H - i;            // factorial part of H&lt;br /&gt;
&lt;br /&gt;
    p = V * ( 1 - S );&lt;br /&gt;
    q = V * ( 1 - S * f );&lt;br /&gt;
    t = V * ( 1 - S * ( 1 - f ) );&lt;br /&gt;
&lt;br /&gt;
    if (i==0){&lt;br /&gt;
        R = V;&lt;br /&gt;
        G = t;&lt;br /&gt;
        B = p;&lt;br /&gt;
    } else if (i==1){&lt;br /&gt;
        R = q;&lt;br /&gt;
        G = V;&lt;br /&gt;
        B = p;&lt;br /&gt;
    } else if (i==2){&lt;br /&gt;
        R = p;&lt;br /&gt;
        G = V;&lt;br /&gt;
        B = t;&lt;br /&gt;
    } else if (i==3){&lt;br /&gt;
        R = p;&lt;br /&gt;
        G = q;&lt;br /&gt;
        B = V;&lt;br /&gt;
    } else if (i==4){&lt;br /&gt;
        R = t;&lt;br /&gt;
        G = p;&lt;br /&gt;
        B = V;&lt;br /&gt;
    } else {       &lt;br /&gt;
        R = V;&lt;br /&gt;
        G = p;&lt;br /&gt;
        B = q;&lt;br /&gt;
    }&lt;br /&gt;
   &lt;br /&gt;
    rgb.x = R;&lt;br /&gt;
    rgb.y = G;&lt;br /&gt;
    rgb.z = B;&lt;br /&gt;
    &lt;br /&gt;
    return rgb;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==HSL to RGB==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
//HSL to RGB conversion function. By Cobalt Arkright. Released to the public under GNU GPL version 3.0 license.&lt;br /&gt;
//Takes a vector encoded HSL triplet and outputs a vector encoded RGB triplet.&lt;br /&gt;
&lt;br /&gt;
//Input values should be in the following ranges: &amp;lt;float H(0 to 1), float S(0 to 1), float L(0 to 1)&amp;gt;. In this case, set h360 to &amp;quot;false.&amp;quot;&lt;br /&gt;
//If you wish to use H(0 to 360), leave the boolean value &amp;quot;h360&amp;quot; set to true.&lt;br /&gt;
&lt;br /&gt;
//Edit 12/27/2009: Cleaned up readability, played around a little bit with value calculation, and hopefully everything is more accurate now. failthfulll Moonwall brought it to my attention that the script wasn&#039;t working properly when using H ranges of 0 to 360. Based on my testing, it works now. If anyone else has a problem, feel free to PM me.&lt;br /&gt;
&lt;br /&gt;
vector HSLtoRGB (vector hsl){&lt;br /&gt;
    integer h360 = TRUE;&lt;br /&gt;
    &lt;br /&gt;
    if (h360){&lt;br /&gt;
        //Catch malformed H input for H(0 to 360)&lt;br /&gt;
        if (hsl.x &amp;lt; 0)&lt;br /&gt;
            hsl.x = 0;&lt;br /&gt;
&lt;br /&gt;
        else if (hsl.x &amp;gt; 360)&lt;br /&gt;
            hsl.x = 360;&lt;br /&gt;
        hsl.x = hsl.x / 360;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    else{&lt;br /&gt;
        //Catch malformed H input for H(0 to 1)&lt;br /&gt;
        if (hsl.x &amp;lt; 0) &lt;br /&gt;
            hsl.x = 0;&lt;br /&gt;
&lt;br /&gt;
        else if (hsl.x &amp;gt; 1.0) &lt;br /&gt;
            hsl.x = 1.0;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    //Catch malformed S input&lt;br /&gt;
    if (hsl.y &amp;lt; 0)&lt;br /&gt;
        hsl.y = 0;&lt;br /&gt;
&lt;br /&gt;
    else if (hsl.y &amp;gt; 1.0)&lt;br /&gt;
        hsl.y = 1.0;&lt;br /&gt;
 &lt;br /&gt;
    //Catch malformed L input&lt;br /&gt;
    if (hsl.z &amp;lt; 0)&lt;br /&gt;
        hsl.z = 0;&lt;br /&gt;
&lt;br /&gt;
    else if (hsl.z &amp;gt; 1.0)&lt;br /&gt;
        hsl.z = 1.0;&lt;br /&gt;
 &lt;br /&gt;
    //Declare required variables&lt;br /&gt;
    vector rgb;&lt;br /&gt;
    float q;&lt;br /&gt;
    float p;&lt;br /&gt;
    float tr;&lt;br /&gt;
    float tg;&lt;br /&gt;
    float tb;&lt;br /&gt;
 &lt;br /&gt;
    //Special case: When S = 0, the result is monochromatic, and R = B = G = L.&lt;br /&gt;
    if (hsl.y == 0){&lt;br /&gt;
        rgb.x = rgb.y = rgb.z = hsl.z;&lt;br /&gt;
        return rgb;&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    //Set up temporary values for conversion&lt;br /&gt;
    if (hsl.z &amp;lt; 0.5)&lt;br /&gt;
        q = hsl.z * (1.0 + hsl.y);&lt;br /&gt;
&lt;br /&gt;
    else if (hsl.z &amp;gt;= 0.5) &lt;br /&gt;
        q = hsl.z + hsl.y - (hsl.z * hsl.y);&lt;br /&gt;
    &lt;br /&gt;
    p = 2 * hsl.z - q;&lt;br /&gt;
    &lt;br /&gt;
    tr = hsl.x + (1.0 / 3.0);&lt;br /&gt;
    tg = hsl.x;&lt;br /&gt;
    tb = hsl.x - (1.0 / 3.0);&lt;br /&gt;
 &lt;br /&gt;
    //Normalize temporary R value&lt;br /&gt;
    if (tr &amp;lt; 0)&lt;br /&gt;
        tr = tr + 1.0;&lt;br /&gt;
    &lt;br /&gt;
    else if (tr &amp;gt; 1.0)&lt;br /&gt;
        tr = tr - 1.0;&lt;br /&gt;
 &lt;br /&gt;
    //Normalize temporary G value&lt;br /&gt;
    if (tg &amp;lt; 0)&lt;br /&gt;
        tg = tg + 1.0;&lt;br /&gt;
    &lt;br /&gt;
    else if (tg &amp;gt; 1.0)&lt;br /&gt;
        tg = tg - 1.0;&lt;br /&gt;
 &lt;br /&gt;
    //Normalize temporary B value&lt;br /&gt;
    if (tb &amp;lt; 0)&lt;br /&gt;
        tb = tb + 1.0;&lt;br /&gt;
    &lt;br /&gt;
    else if (tb &amp;gt; 1.0)&lt;br /&gt;
        tb = tb - 1.0;&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
    //Calculate R value&lt;br /&gt;
    if (tr &amp;lt; (1.0 / 6.0))&lt;br /&gt;
        rgb.x = p + ((q - p) * 6 * tr);&lt;br /&gt;
    &lt;br /&gt;
    else if ((1.0 / 6.0) &amp;lt;= tr &amp;amp;&amp;amp; tr &amp;lt; 0.5)&lt;br /&gt;
        rgb.x = q;&lt;br /&gt;
    &lt;br /&gt;
    else if (0.5 &amp;lt;= tr &amp;amp;&amp;amp; tr &amp;lt; (2.0 / 3.0))&lt;br /&gt;
        rgb.x = p + ((q - p) * 6 * ((2.0 / 3.0) - tr));&lt;br /&gt;
    &lt;br /&gt;
    else&lt;br /&gt;
        rgb.x = p;&lt;br /&gt;
 &lt;br /&gt;
    //Calculate G value&lt;br /&gt;
    if (tg &amp;lt; (1.0 / 6.0))&lt;br /&gt;
        rgb.y = p + ((q - p) * 6 * tg);&lt;br /&gt;
    &lt;br /&gt;
    else if ((1.0 / 6.0) &amp;lt;= tg &amp;amp;&amp;amp; tg &amp;lt; 0.5)&lt;br /&gt;
        rgb.y = q;&lt;br /&gt;
    &lt;br /&gt;
    else if (0.5 &amp;lt;= tg &amp;amp;&amp;amp; tg &amp;lt; (2.0 / 3.0))&lt;br /&gt;
        rgb.y = p + (( q - p) * 6 * ((2.0 / 3.0) - tg));&lt;br /&gt;
    &lt;br /&gt;
    else&lt;br /&gt;
        rgb.y = p;&lt;br /&gt;
 &lt;br /&gt;
    //Caluclate B value&lt;br /&gt;
    if (tb &amp;lt; (1.0 / 6.0))&lt;br /&gt;
        rgb.z = p + ((q - p) * 6 * tb);&lt;br /&gt;
    &lt;br /&gt;
    else if ((1.0 / 6.0) &amp;lt;= tb &amp;amp;&amp;amp; tb &amp;lt; 0.5)&lt;br /&gt;
        rgb.z = q;&lt;br /&gt;
    &lt;br /&gt;
    else if (0.5 &amp;lt;= tb &amp;amp;&amp;amp; tb &amp;lt; (2.0 / 3.0))&lt;br /&gt;
        rgb.z = p + ((q - p) * 6 * ((2.0 / 3.0) - tb));&lt;br /&gt;
    &lt;br /&gt;
    else &lt;br /&gt;
        rgb.z = p;&lt;br /&gt;
 &lt;br /&gt;
    //Return the result&lt;br /&gt;
    return rgb;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Amazing what a little bit of readability does. If I ever submit anything else that poorly formatted again, someone please smack me upside the head and tell me to come fix it, please.&lt;br /&gt;
&lt;br /&gt;
==HSV to HSL==&lt;br /&gt;
&lt;br /&gt;
For more info about the difference between HSL and HSV, see the wikipedia entry: [http://en.wikipedia.org/wiki/HSL_and_HSV HSL and HSV]&lt;br /&gt;
 &lt;br /&gt;
Original code most likely from: [http://ariya.blogspot.com/2008/07/converting-between-hsl-and-hsv.html converting-between-hsl-and-hsv.html]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Convert from HSV (hue, saturation, value) to HSL (hue, saturation, luminosity)&lt;br /&gt;
// Created by Michaelangelo David code released to the public domain under GNU GPL version 3.0 license.&lt;br /&gt;
&lt;br /&gt;
vector hsv_to_hsl( vector HSV )&lt;br /&gt;
{&lt;br /&gt;
     vector HSL;  &lt;br /&gt;
     &lt;br /&gt;
     HSL.x = HSV.x;&lt;br /&gt;
     HSL.z = (2 - HSV.y) * HSV.z;&lt;br /&gt;
     HSL.y = HSV.y * HSV.z;&lt;br /&gt;
     if (HSL.z &amp;lt;= 1) HSL.y /= HSL.z;&lt;br /&gt;
     else HSL.y /= (2 - HSL.z);&lt;br /&gt;
     HSL.z /= 2;&lt;br /&gt;
     &lt;br /&gt;
     return HSL;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==HSL to HSV==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// Convert from HSL (hue, saturation, luminosity) to HSV (hue, saturation, value)&lt;br /&gt;
// Created by Michaelangelo David, code released to the public domain under GNU GPL version 3.0 license.&lt;br /&gt;
vector hsl_to_hsv( vector HSL )&lt;br /&gt;
{&lt;br /&gt;
     vector HSV;  &lt;br /&gt;
     HSV.x = HSL.x;&lt;br /&gt;
     HSL.z *= 2;&lt;br /&gt;
     if (HSL.z &amp;lt;= 1) HSL.y *= HSL.z;&lt;br /&gt;
     else HSL.y *= ( 2 - HSL.z);&lt;br /&gt;
     &lt;br /&gt;
     HSV.z = (HSL.z + HSL.y) / 2;&lt;br /&gt;
     HSV.y = (2 * HSL.y) / (HSL.z + HSL.y);&lt;br /&gt;
     &lt;br /&gt;
     return HSV;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== HSL to RGB ==&lt;br /&gt;
I wrote the following two functions since the RGBtoHSL By Cobalt Arkright had a strange bug (math error) when some values was passed to the functions. And I couldn&#039;t find a reverse function for RGB to HSL.&lt;br /&gt;
I tried to find out where the error was but I didn&#039;t succeded in fixing it so i wrote them from the beginning with a different approach. The functions are similar however, just something different in the&lt;br /&gt;
coding.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// HSL to RGB conversion function. By Clematide Oyen (Laura Aastha Bondi).&lt;br /&gt;
// Inspired by a function written by Alec Thilenius in this article: http://stackoverflow.com/questions/2353211/hsl-to-rgb-color-conversion&lt;br /&gt;
// Released to the public under GNU GPL version 3.0 license.&lt;br /&gt;
// Takes a vector encoded HSL triplet and outputs a vector encoded RGB triplet.&lt;br /&gt;
// Input HSL values should be in the standard format used in the LSL with the following ranges: &amp;lt;float H (0 to 1), float S (0 to 1), float L (0 to 1)&amp;gt;.&lt;br /&gt;
// Output is RGB values in the standard format used in the LSL with the following ranges: &amp;lt;float R (0 to 1), float G (0 to 1), float B (0 to 1)&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
vector HslToRgb(vector hsl)&lt;br /&gt;
{&lt;br /&gt;
    float r;&lt;br /&gt;
    float g;&lt;br /&gt;
    float b;&lt;br /&gt;
&lt;br /&gt;
    if (hsl.y == 0.0) // If saturation is 0 the image is monochrome&lt;br /&gt;
        r = g = b = hsl.z;&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        float q;&lt;br /&gt;
        if (hsl.z &amp;lt; 0.5)&lt;br /&gt;
            q = hsl.z * (1.0 + hsl.y);&lt;br /&gt;
        else&lt;br /&gt;
            q = hsl.z + hsl.y - hsl.z * hsl.y;&lt;br /&gt;
        &lt;br /&gt;
        float p = 2.0 * hsl.z - q;&lt;br /&gt;
        &lt;br /&gt;
        r = HueToRgb(p, q, hsl.x + 1.0 / 3.0);&lt;br /&gt;
        g = HueToRgb(p, q, hsl.x);&lt;br /&gt;
        b = HueToRgb(p, q, hsl.x - 1.0 / 3.0);&lt;br /&gt;
    }&lt;br /&gt;
    return &amp;lt;(r), (g), (b)&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
float HueToRgb(float p, float q, float t)&lt;br /&gt;
{&lt;br /&gt;
    if (t &amp;lt; 0.0) t += 1.0;&lt;br /&gt;
    if (t &amp;gt; 1.0) t -= 1.0;&lt;br /&gt;
    if (t &amp;lt; 1.0 / 6.0) return p + (q - p) * 6.0 * t;&lt;br /&gt;
    if (t &amp;lt; 1.0 / 2.0) return q;&lt;br /&gt;
    if (t &amp;lt; 2.0 / 3.0) return p + (q - p) * (2.0 / 3.0 - t) * 6.0;&lt;br /&gt;
    return p;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== RGB to HSL ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// RGB to HSL conversion function. By Clematide Oyen (Laura Aastha Bondi).&lt;br /&gt;
// Inspired by a function written by Alec Thilenius in this article: http://stackoverflow.com/questions/2353211/hsl-to-rgb-color-conversion&lt;br /&gt;
// Released to the public under GNU GPL version 3.0 license.&lt;br /&gt;
// Takes a vector encoded RGB triplet and outputs a vector encoded HSL triplet.&lt;br /&gt;
// Input RGB values should be in the standard format used in the LSL with the following ranges: &amp;lt;float R (0 to 1), float G (0 to 1), float B (0 to 1)&amp;gt;.&lt;br /&gt;
// Output is HSL values in the standard format used in the LSL with the following ranges: &amp;lt;float H (0 to 1), float S (0 to 1), float L (0 to 1)&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
vector RgbToHsl(vector rgb)&lt;br /&gt;
{&lt;br /&gt;
    float r = rgb.x;&lt;br /&gt;
    float g = rgb.y;&lt;br /&gt;
    float b = rgb.z;&lt;br /&gt;
    float h;&lt;br /&gt;
    float s;&lt;br /&gt;
    float l;&lt;br /&gt;
    float max;&lt;br /&gt;
    float min;&lt;br /&gt;
&lt;br /&gt;
    // Looking for the max value among r, g and b&lt;br /&gt;
    if (r &amp;gt; g &amp;amp;&amp;amp; r &amp;gt; b) max= r;&lt;br /&gt;
    else if (g &amp;gt; b) max = g;&lt;br /&gt;
    else max = b;&lt;br /&gt;
    &lt;br /&gt;
    // Looking for the min value among r, g and b&lt;br /&gt;
    if (r &amp;lt; g &amp;amp;&amp;amp; r &amp;lt; b) min = r;&lt;br /&gt;
    else if (g &amp;lt; b) min = g;&lt;br /&gt;
    else min = b;&lt;br /&gt;
&lt;br /&gt;
    l = (max + min) / 2.0;&lt;br /&gt;
    &lt;br /&gt;
    if (max == min)&lt;br /&gt;
    {&lt;br /&gt;
        h = 0.0;&lt;br /&gt;
        s = 0.0;&lt;br /&gt;
    }&lt;br /&gt;
    else&lt;br /&gt;
    {&lt;br /&gt;
        float d = max - min;&lt;br /&gt;
&lt;br /&gt;
        if (l &amp;gt; 0.5) s = d / (2.0 - max - min);&lt;br /&gt;
        else s = d / (max + min);&lt;br /&gt;
        &lt;br /&gt;
        if (max == r) {&lt;br /&gt;
            if (g &amp;lt; b) h = (g - b) / d + 6.0;&lt;br /&gt;
            else h = (g - b) / d;&lt;br /&gt;
        }&lt;br /&gt;
        else if (max == g)&lt;br /&gt;
            h = (b - r) / d + 2.0;&lt;br /&gt;
        else&lt;br /&gt;
            h = (r - g) / d + 4.0;&lt;br /&gt;
        h /= 6.0;&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return &amp;lt;h, s, l&amp;gt;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{LSLC|Library}}&lt;br /&gt;
{{LSLC|Examples}}&lt;/div&gt;</summary>
		<author><name>Clematide Oyen</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:Third_Party_Viewer_Directory&amp;diff=1170831</id>
		<title>Talk:Third Party Viewer Directory</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:Third_Party_Viewer_Directory&amp;diff=1170831"/>
		<updated>2012-07-21T23:45:34Z</updated>

		<summary type="html">&lt;p&gt;Clematide Oyen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Viewer Use&#039;&#039;&#039;: can we get a percentage of users now in mesh capable viewers? [[User:Nalates Urriah|Nalates Urriah]]&lt;br /&gt;
&lt;br /&gt;
In the Firestorm preferences I seen there is an option to send crash reports to phoenixviewer.com &lt;br /&gt;
If the users selected this option, are the crash reports sent to Linden too? If not, can this alter the result of crash statistic for firestorm? How can Linden Lab knows the real number of crashes for firestorm users?&lt;/div&gt;</summary>
		<author><name>Clematide Oyen</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:Third_Party_Viewer_Directory&amp;diff=1157684</id>
		<title>Talk:Third Party Viewer Directory</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:Third_Party_Viewer_Directory&amp;diff=1157684"/>
		<updated>2011-11-11T23:47:06Z</updated>

		<summary type="html">&lt;p&gt;Clematide Oyen: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Viewer Use&#039;&#039;&#039;: can we get a percentage of users now in mesh capable viewers? [[User:Nalates Urriah|Nalates Urriah]]&lt;/div&gt;</summary>
		<author><name>Clematide Oyen</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=Talk:Third_Party_Viewer_Directory&amp;diff=1154355</id>
		<title>Talk:Third Party Viewer Directory</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=Talk:Third_Party_Viewer_Directory&amp;diff=1154355"/>
		<updated>2011-09-27T13:22:41Z</updated>

		<summary type="html">&lt;p&gt;Clematide Oyen: Wrong releases assignments.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Emergency is not 3.0.3 based viewer. It is 1.23 (1.4).&lt;br /&gt;
Imprudence is not 3.0.3 based viewer. It is 1.23 (1.4).&lt;br /&gt;
Firestorm is not 3.0.3 based viewer. It is 3.0.1.&lt;br /&gt;
Ascent project seems dead, web page and download page are unavailable.&lt;br /&gt;
Dolphin viewer is a 3.0.6 based viewer.&lt;/div&gt;</summary>
		<author><name>Clematide Oyen</name></author>
	</entry>
	<entry>
		<id>https://wiki.secondlife.com/w/index.php?title=User:Anylyn_Hax&amp;diff=1108342</id>
		<title>User:Anylyn Hax</title>
		<link rel="alternate" type="text/html" href="https://wiki.secondlife.com/w/index.php?title=User:Anylyn_Hax&amp;diff=1108342"/>
		<updated>2010-11-17T10:55:49Z</updated>

		<summary type="html">&lt;p&gt;Clematide Oyen: /* Viewer 2 and privacy issues */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| style=&amp;quot;color:pink;background-color:#ffeeee;&amp;quot; cellpadding=&amp;quot;20&amp;quot; cellspacing=&amp;quot;0&amp;quot; border=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot; &lt;br /&gt;
!width=&amp;quot;100&amp;quot; align=&amp;quot;left&amp;quot;|[[Image:Anylyn_256_002.jpg|Anylyn Hax, 500 L$ / 30 min]]&lt;br /&gt;
!valign=&amp;quot;top&amp;quot;  align=&amp;quot;left&amp;quot;|&lt;br /&gt;
___TOC___&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== StartAnimation Example ==&lt;br /&gt;
&lt;br /&gt;
For those avatars who need to use another walking animation, other then the one supplied by LL here is a small goodie.&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// I like to use Antoinette Lioncourt&#039;s sexywalk&lt;br /&gt;
// UUID:51e4d6c1-0bf0-f7b9-2cc7-8d7b46baf35b&lt;br /&gt;
// place this script in one of your shoes together with the sexywalk&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        llRequestPermissions(llGetOwner(),PERMISSION_TRIGGER_ANIMATION );&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if(PERMISSION_TRIGGER_ANIMATION &amp;amp; perm)&lt;br /&gt;
        {&lt;br /&gt;
            llSetTimerEvent(.1);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        vector vel = llGetVel();&lt;br /&gt;
            if( llFabs(vel.x) &amp;gt; 0.1)llStartAnimation(&amp;quot;sexywalk&amp;quot;);&lt;br /&gt;
            if( llFabs(vel.x)&amp;lt;= 0.1)llStopAnimation(&amp;quot;sexywalk&amp;quot;);&lt;br /&gt;
    }   &lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
Anylyn Hax 21:43, 1 June 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== llSetPrimitiveParams() Example1 (Human readable output) ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// This ugly hack gives out a piece of Human Readable Code, as demanded&lt;br /&gt;
// by llSetPrimitiveParams. The result of this program comes via llOwnerSay&lt;br /&gt;
// on the chat channel. Its a good idea to cut objectname and date out ;)&lt;br /&gt;
// created by Anylyn Hax in the hot summer of 2007.&lt;br /&gt;
// &lt;br /&gt;
// This program is free software: you can redistribute it and/or modify&lt;br /&gt;
// it under the terms of the GNU General Public License as published by&lt;br /&gt;
// the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
// (at your option) any later version.&lt;br /&gt;
// &lt;br /&gt;
// This program is distributed in the hope that it will be useful,&lt;br /&gt;
// but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
// GNU General Public License for more details.&lt;br /&gt;
// &lt;br /&gt;
// You should have received a copy of the GNU General Public License&lt;br /&gt;
// along with this program.  If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        integer i = 0;&lt;br /&gt;
        integer ce_side = llGetNumberOfSides();&lt;br /&gt;
&lt;br /&gt;
        list booleans = ([&lt;br /&gt;
        &amp;quot;FALSE&amp;quot;,                    // 0&lt;br /&gt;
        &amp;quot;TRUE&amp;quot;                      // 1&lt;br /&gt;
        ]);&lt;br /&gt;
&lt;br /&gt;
        list texgens = ([&lt;br /&gt;
        &amp;quot;PRIM_TEXGEN_DEFAULT&amp;quot;,      // 0&lt;br /&gt;
        &amp;quot;PRIM_TEXGEN_PLANAR&amp;quot;        // 1&lt;br /&gt;
        ]);&lt;br /&gt;
        &lt;br /&gt;
        list holeshape = ([&lt;br /&gt;
        &amp;quot;PRIM_HOLE_DEFAULT&amp;quot;,        //   0  default (matches the prim type: square for box, circle for cylinder, etc.)&lt;br /&gt;
        &amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;PRIM_HOLE_CIRCLE&amp;quot;,         //   16  circle&lt;br /&gt;
        &amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;PRIM_HOLE_SQUARE&amp;quot;,         //   32  square&lt;br /&gt;
        &amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;, &lt;br /&gt;
        &amp;quot;PRIM_HOLE_TRIANGLE&amp;quot;        //   48  triangle&lt;br /&gt;
        ]);&lt;br /&gt;
        &lt;br /&gt;
        list sculpttype = ([&lt;br /&gt;
        &amp;quot;PRIM_SCULPT_TYPE_SPHERE&amp;quot;,  //   1  sphere (Converge top &amp;amp; bottom, stitch left side to right)  &lt;br /&gt;
        &amp;quot;PRIM_SCULPT_TYPE_TORUS&amp;quot;,   //   2  torus (Stitch top to bottom, stitch left side to right)  &lt;br /&gt;
        &amp;quot;PRIM_SCULPT_TYPE_PLANE&amp;quot;,   //   3  plane (No stitching or converging)  &lt;br /&gt;
        &amp;quot;PRIM_SCULPT_TYPE_CYLINDER&amp;quot; //   4  cylinder (Stitch left side to right, leave top and bottom open) &lt;br /&gt;
        ]);&lt;br /&gt;
        &lt;br /&gt;
        list bumpmapping = ([&lt;br /&gt;
        &amp;quot;PRIM_BUMP_NONE&amp;quot;,           //   0  none: no bump map  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_BRIGHT&amp;quot;,         //   1  brightness: generate bump map from highlights  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_DARK&amp;quot;,           //   2  darkness: generate bump map from lowlights  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_WOOD&amp;quot;,           //   3  woodgrain  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_BARK&amp;quot;,           //   4  bark  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_BRICKS&amp;quot;,         //   5  bricks  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_CHECKER&amp;quot;,        //   6  checker  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_CONCRETE&amp;quot;,       //   7  concrete  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_TILE&amp;quot;,           //   8  crustytile  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_STONE&amp;quot;,          //   9  cutstone: blocks  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_DISKS&amp;quot;,          //   10  discs: packed circles  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_GRAVEL&amp;quot;,         //   11  gravel  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_SIDING&amp;quot;,         //   13  siding  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_LARGETILE&amp;quot;,      //   14  stonetile  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_STUCCO&amp;quot;,         //   15  stucco  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_SUCTION&amp;quot;,        //   16  suction: rings  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_WEAVE&amp;quot;           //   17  weave  &lt;br /&gt;
        ]);&lt;br /&gt;
        &lt;br /&gt;
        list shinys = ([&lt;br /&gt;
        &amp;quot;PRIM_SHINY_NONE&amp;quot;,          //   0  none  &lt;br /&gt;
        &amp;quot;PRIM_SHINY_LOW&amp;quot;,           //   1  low  &lt;br /&gt;
        &amp;quot;PRIM_SHINY_MEDIUM&amp;quot;,        //   2  medium &lt;br /&gt;
        &amp;quot;PRIM_SHINY_HIGH&amp;quot;           //   3  high  &lt;br /&gt;
        ]);&lt;br /&gt;
        &lt;br /&gt;
        list materials =([&lt;br /&gt;
        &amp;quot;PRIM_MATERIAL_STONE&amp;quot;,      //  0  stone  &lt;br /&gt;
        &amp;quot;PRIM_MATERIAL_METAL&amp;quot;,      //  1  metal  &lt;br /&gt;
        &amp;quot;PRIM_MATERIAL_GLASS&amp;quot;,      //  2  glass  &lt;br /&gt;
        &amp;quot;PRIM_MATERIAL_WOOD&amp;quot;,       //  3  wood  &lt;br /&gt;
        &amp;quot;PRIM_MATERIAL_FLESH&amp;quot;,      //  4  flesh  &lt;br /&gt;
        &amp;quot;PRIM_MATERIAL_PLASTIC&amp;quot;,    //  5  plastic  &lt;br /&gt;
        &amp;quot;PRIM_MATERIAL_RUBBER&amp;quot;,     //  6  rubber  &lt;br /&gt;
        &amp;quot;PRIM_MATERIAL_LIGHT&amp;quot;       //  7  light &lt;br /&gt;
        ]);&lt;br /&gt;
&lt;br /&gt;
        llOwnerSay(&amp;quot;llSetPrimitiveParams([&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
        list ce_prim_flexible =     llGetPrimitiveParams([PRIM_FLEXIBLE]);          // 21&lt;br /&gt;
        llOwnerSay(&amp;quot;PRIM_FLEXIBLE&amp;quot;+&lt;br /&gt;
            &amp;quot;, &amp;quot;+(string)llList2String(booleans ,llList2Integer(ce_prim_flexible,0))+                // true / false&lt;br /&gt;
            &amp;quot;, &amp;quot;+(string)llList2Integer(ce_prim_flexible,1)+                                            // softness&lt;br /&gt;
            &amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_flexible,2)+                                            // gravity&lt;br /&gt;
            &amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_flexible,3)+                                            // friction&lt;br /&gt;
            &amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_flexible,4)+                                            // wind&lt;br /&gt;
            &amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_flexible,5)+                                            // tension&lt;br /&gt;
            &amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_flexible,6)+&amp;quot;, &amp;quot;);                                    // force&lt;br /&gt;
        ce_prim_flexible =[];&lt;br /&gt;
&lt;br /&gt;
        list ce_prim_material =     llGetPrimitiveParams([PRIM_MATERIAL]);          // 2&lt;br /&gt;
        llOwnerSay(&amp;quot;PRIM_MATERIAL, &amp;quot;+(string)llList2String(materials ,llList2Integer(ce_prim_material,0))+&amp;quot;, &amp;quot;);&lt;br /&gt;
        ce_prim_material = [];&lt;br /&gt;
        &lt;br /&gt;
        list ce_prim_phantom =      llGetPrimitiveParams([PRIM_PHANTOM]);           // 5&lt;br /&gt;
        llOwnerSay(&amp;quot;PRIM_PHANTOM, &amp;quot;+(string)llList2String(booleans ,llList2Integer(ce_prim_phantom ,0))+&amp;quot;, &amp;quot;);&lt;br /&gt;
        ce_prim_phantom = [];&lt;br /&gt;
        &lt;br /&gt;
        list ce_prim_physiks =      llGetPrimitiveParams([PRIM_PHYSICS]);           // 3&lt;br /&gt;
        llOwnerSay(&amp;quot;PRIM_PHYSICS, &amp;quot;+(string)llList2String(booleans ,llList2Integer(ce_prim_physiks ,0))+&amp;quot;, &amp;quot;);&lt;br /&gt;
        ce_prim_physiks = [];&lt;br /&gt;
        &lt;br /&gt;
        list ce_prim_point_light =  llGetPrimitiveParams([PRIM_POINT_LIGHT]);       // 23&lt;br /&gt;
        llOwnerSay(&amp;quot;PRIM_POINT_LIGHT&amp;quot;+&lt;br /&gt;
            &amp;quot;, &amp;quot;+(string)llList2String(booleans ,llList2Integer(ce_prim_point_light,0))+    // true / false&lt;br /&gt;
            &amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_point_light,1)+                              // color&lt;br /&gt;
            &amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_point_light,2)+                               // intensity&lt;br /&gt;
            &amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_point_light,3)+                               // radius&lt;br /&gt;
            &amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_point_light,4)+&amp;quot;, &amp;quot;);                         // falloff&lt;br /&gt;
        ce_prim_point_light = [];&lt;br /&gt;
        &lt;br /&gt;
        list ce_prim_position =     llGetPrimitiveParams([PRIM_POSITION]);          // 6&lt;br /&gt;
        llOwnerSay(&amp;quot;PRIM_POSITION, &amp;quot;+(string)llList2Vector(ce_prim_position ,0)+&amp;quot;, &amp;quot;);&lt;br /&gt;
        ce_prim_position = [];&lt;br /&gt;
        &lt;br /&gt;
        list ce_prim_rotation =     llGetPrimitiveParams([PRIM_ROTATION]);          // 8&lt;br /&gt;
        llOwnerSay(&amp;quot;PRIM_ROTATION, &amp;quot;+(string)llList2Rot(ce_prim_rotation ,0)+&amp;quot;, &amp;quot;);&lt;br /&gt;
        ce_prim_rotation = [];&lt;br /&gt;
        &lt;br /&gt;
        list ce_prim_size =         llGetPrimitiveParams([PRIM_SIZE]);              // 7&lt;br /&gt;
        llOwnerSay(&amp;quot;PRIM_SIZE, &amp;quot;+(string)llList2Vector(ce_prim_size ,0)+&amp;quot;, &amp;quot;);&lt;br /&gt;
        ce_prim_size = [];&lt;br /&gt;
        &lt;br /&gt;
        list ce_prim_temp_on_rez =  llGetPrimitiveParams([PRIM_TEMP_ON_REZ]);       // 4&lt;br /&gt;
        llOwnerSay(&amp;quot;PRIM_TEMP_ON_REZ, &amp;quot;+(string)llList2String(booleans ,llList2Integer(ce_prim_temp_on_rez ,0))+&amp;quot;, &amp;quot;);&lt;br /&gt;
        ce_prim_temp_on_rez = [];&lt;br /&gt;
        &lt;br /&gt;
        list ce_prim_type =         llGetPrimitiveParams([PRIM_TYPE]);              // 9&lt;br /&gt;
        if(llList2Integer(ce_prim_type,0)==0){llOwnerSay(&amp;quot;PRIM_TYPE, PRIM_TYPE_BOX&amp;quot;+&amp;quot;, &amp;quot;+(string)llList2String(holeshape ,llList2Integer(ce_prim_type,1))+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,2)+&amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_type,3)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,4)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,5)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,6)+&amp;quot;, &amp;quot;);}&lt;br /&gt;
        if(llList2Integer(ce_prim_type,0)==1){llOwnerSay(&amp;quot;PRIM_TYPE, PRIM_TYPE_CYLINDER&amp;quot;+&amp;quot;, &amp;quot;+(string)llList2String(holeshape ,llList2Integer(ce_prim_type,1))+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,2)+&amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_type,3)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,4)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,5)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,6)+&amp;quot;, &amp;quot;);}&lt;br /&gt;
        if(llList2Integer(ce_prim_type,0)==2){llOwnerSay(&amp;quot;PRIM_TYPE, PRIM_TYPE_PRISM&amp;quot;+&amp;quot;, &amp;quot;+(string)llList2String(holeshape ,llList2Integer(ce_prim_type,1))+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,2)+&amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_type,3)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,4)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,5)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,6)+&amp;quot;, &amp;quot;);}&lt;br /&gt;
        if(llList2Integer(ce_prim_type,0)==3){llOwnerSay(&amp;quot;PRIM_TYPE, PRIM_TYPE_SPHERE&amp;quot;+&amp;quot;, &amp;quot;+(string)llList2Integer(ce_prim_type,1)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,2)+&amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_type,3)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,4)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,5)+&amp;quot;, &amp;quot;);}&lt;br /&gt;
        if(llList2Integer(ce_prim_type,0)==4){llOwnerSay(&amp;quot;PRIM_TYPE, PRIM_TYPE_TORUS&amp;quot;+&amp;quot;, &amp;quot;+(string)llList2String(holeshape ,llList2Integer(ce_prim_type,1))+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,2)+&amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_type,3)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,4)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,5)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,6)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,7)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,8)+&amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_type,9)+&amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_type,10)+&amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_type,11)+&amp;quot;, &amp;quot;);}&lt;br /&gt;
        if(llList2Integer(ce_prim_type,0)==5){llOwnerSay(&amp;quot;PRIM_TYPE, PRIM_TYPE_TUBE&amp;quot;+&amp;quot;, &amp;quot;+(string)llList2String(holeshape ,llList2Integer(ce_prim_type,1))+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,2)+&amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_type,3)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,4)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,5)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,6)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,7)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,8)+&amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_type,9)+&amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_type,10)+&amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_type,11)+&amp;quot;, &amp;quot;);}&lt;br /&gt;
        if(llList2Integer(ce_prim_type,0)==6){llOwnerSay(&amp;quot;PRIM_TYPE, PRIM_TYPE_RING&amp;quot;+&amp;quot;, &amp;quot;+(string)llList2String(holeshape ,llList2Integer(ce_prim_type,1))+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,2)+&amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_type,3)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,4)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,5)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,6)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,7)+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_type,8)+&amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_type,9)+&amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_type,10)+&amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_type,11)+&amp;quot;, &amp;quot;);}&lt;br /&gt;
        if(llList2Integer(ce_prim_type,0)==7){llOwnerSay(&amp;quot;PRIM_TYPE, PRIM_TYPE_SCULPT&amp;quot;+&amp;quot;, &amp;quot;+(string)llList2String(ce_prim_type,1)+&amp;quot;, &amp;quot;+(string)llList2Integer(ce_prim_type,2)+&amp;quot;, &amp;quot;);}&lt;br /&gt;
        ce_prim_type = [];&lt;br /&gt;
&lt;br /&gt;
        i = 0;&lt;br /&gt;
        list ce_prim_fullbright;&lt;br /&gt;
        while(i &amp;lt;= ce_side) { &lt;br /&gt;
            ce_prim_fullbright =   llGetPrimitiveParams([PRIM_FULLBRIGHT,i]);                  // 20&lt;br /&gt;
            if (ce_prim_fullbright != []) {&lt;br /&gt;
            llOwnerSay(&amp;quot;PRIM_FULLBRIGHT, &amp;quot;+(string)i+&amp;quot;, &amp;quot;+(string)llList2String(booleans ,llList2Integer(ce_prim_fullbright,0))+&amp;quot;, &amp;quot;);&lt;br /&gt;
            ce_prim_fullbright = []; &lt;br /&gt;
            }           &lt;br /&gt;
        i++;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        i = 0;&lt;br /&gt;
        list ce_prim_bump_shiny;&lt;br /&gt;
        while(i &amp;lt;= ce_side) { &lt;br /&gt;
            ce_prim_bump_shiny =   llGetPrimitiveParams([PRIM_BUMP_SHINY,i]);                  // 19&lt;br /&gt;
            if (ce_prim_bump_shiny != []) {&lt;br /&gt;
            llOwnerSay(&amp;quot;PRIM_BUMP_SHINY, &amp;quot;+(string)i+&amp;quot;, &amp;quot;+llList2String(shinys,llList2Integer(ce_prim_bump_shiny,0))+            // shiny&lt;br /&gt;
                &amp;quot;, &amp;quot;+llList2String(bumpmapping ,llList2Integer(ce_prim_bump_shiny,1))+&amp;quot;, &amp;quot;);// bumpmaping&lt;br /&gt;
            ce_prim_bump_shiny = [];&lt;br /&gt;
            }&lt;br /&gt;
        i++;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        i = 0;&lt;br /&gt;
        list ce_prim_color;&lt;br /&gt;
        while(i &amp;lt;= ce_side) { &lt;br /&gt;
            ce_prim_color =  llGetPrimitiveParams([PRIM_COLOR,i]);             // 18&lt;br /&gt;
            if (ce_prim_color != []) {&lt;br /&gt;
            llOwnerSay(&amp;quot;PRIM_COLOR, &amp;quot;+(string)i+&amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_color,0)+&amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_color,1)+&amp;quot;, &amp;quot;);&lt;br /&gt;
            ce_prim_color = [];&lt;br /&gt;
            }&lt;br /&gt;
        i++;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        i = 0;&lt;br /&gt;
        list ce_prim_texgen;&lt;br /&gt;
        while(i &amp;lt;= ce_side) { &lt;br /&gt;
            ce_prim_texgen = llGetPrimitiveParams([PRIM_TEXGEN ,i]);     // 22 &lt;br /&gt;
            if (ce_prim_texgen != []) {&lt;br /&gt;
            llOwnerSay(&amp;quot;PRIM_TEXGEN, &amp;quot;+(string)i+&amp;quot;, &amp;quot;+llList2String(texgens,llList2Integer(ce_prim_texgen,0))+&amp;quot;, &amp;quot;);  // type&lt;br /&gt;
            ce_prim_texgen = [];&lt;br /&gt;
            }&lt;br /&gt;
        i++;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        i = 0;&lt;br /&gt;
        string koma = &amp;quot;&amp;quot;;&lt;br /&gt;
        list ce_prim_texture;&lt;br /&gt;
        while(i &amp;lt;= ce_side) { &lt;br /&gt;
            ce_prim_texture = llGetPrimitiveParams([PRIM_TEXTURE,i]);     // 17&lt;br /&gt;
            if(i &amp;lt; ce_side -1) { koma = &amp;quot;, &amp;quot;; }                                          // we dont put everywhere a komata&lt;br /&gt;
            if (ce_prim_texture != []) {&lt;br /&gt;
            llOwnerSay(&amp;quot;PRIM_TEXTURE, &amp;quot;+(string)i+&lt;br /&gt;
                &amp;quot;, &amp;quot;+(string)llList2String(ce_prim_texture,0)+                      // name&lt;br /&gt;
                &amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_texture,1)+                      // repeats&lt;br /&gt;
                &amp;quot;, &amp;quot;+(string)llList2Vector(ce_prim_texture,2)+                      // offsets&lt;br /&gt;
                &amp;quot;, &amp;quot;+(string)llList2Float(ce_prim_texture,3) + koma);                 // rotation&lt;br /&gt;
            ce_prim_texture = [];&lt;br /&gt;
            koma = &amp;quot;&amp;quot;;&lt;br /&gt;
            }&lt;br /&gt;
        i++;&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        llOwnerSay(&amp;quot;]);&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;//This Script used &amp;quot; + (string)((16384 - llGetFreeMemory())/1024) + &amp;quot; kBytes&amp;quot;);         &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
... and outputs something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[23:00]  Object: llSetPrimitiveParams([&lt;br /&gt;
[23:00]  Object: PRIM_FLEXIBLE, TRUE, 2.000000, 0.300000, 2.000000, 0.000000, 1.000000, &amp;lt;0.01000, 0.00000, 0.01000&amp;gt;, &lt;br /&gt;
[23:00]  Object: PRIM_MATERIAL, PRIM_MATERIAL_WOOD, &lt;br /&gt;
[23:00]  Object: PRIM_PHANTOM, TRUE, &lt;br /&gt;
[23:00]  Object: PRIM_PHYSICS, FALSE, &lt;br /&gt;
[23:00]  Object: PRIM_POINT_LIGHT, TRUE, &amp;lt;1.00000, 1.00000, 1.00000&amp;gt;, 1.000000, 10.000000, 0.750000, &lt;br /&gt;
[23:00]  Object: PRIM_POSITION, &amp;lt;57.18748, 200.57619, 21.45186&amp;gt;, &lt;br /&gt;
[23:00]  Object: PRIM_ROTATION, &amp;lt;0.00000, 0.00000, 0.00000, 1.00000&amp;gt;, &lt;br /&gt;
[23:00]  Object: PRIM_SIZE, &amp;lt;0.76611, 0.76611, 0.76611&amp;gt;, &lt;br /&gt;
[23:00]  Object: PRIM_TEMP_ON_REZ, FALSE, &lt;br /&gt;
[23:00]  Object: PRIM_TYPE, PRIM_TYPE_BOX, PRIM_HOLE_CIRCLE, &amp;lt;0.00000, 1.00000, 0.00000&amp;gt;, 0.099900, &amp;lt;0.00000, 0.00000, 0.00000&amp;gt;, &amp;lt;1.00000, 1.00000, 0.00000&amp;gt;, &amp;lt;0.00000, 0.00000, 0.00000&amp;gt;, &lt;br /&gt;
[23:00]  Object: PRIM_FULLBRIGHT, 0, TRUE, &lt;br /&gt;
[23:00]  Object: PRIM_FULLBRIGHT, 1, TRUE, &lt;br /&gt;
[23:00]  Object: PRIM_FULLBRIGHT, 2, TRUE, &lt;br /&gt;
[23:00]  Object: PRIM_FULLBRIGHT, 3, TRUE, &lt;br /&gt;
[23:00]  Object: PRIM_FULLBRIGHT, 4, TRUE, &lt;br /&gt;
[23:00]  Object: PRIM_FULLBRIGHT, 5, TRUE, &lt;br /&gt;
[23:00]  Object: PRIM_FULLBRIGHT, 6, TRUE, &lt;br /&gt;
[23:00]  Object: PRIM_BUMP_SHINY, 0, PRIM_SHINY_MEDIUM, PRIM_BUMP_CHECKER, &lt;br /&gt;
[23:00]  Object: PRIM_BUMP_SHINY, 1, PRIM_SHINY_MEDIUM, PRIM_BUMP_CHECKER, &lt;br /&gt;
[23:00]  Object: PRIM_BUMP_SHINY, 2, PRIM_SHINY_MEDIUM, PRIM_BUMP_CHECKER, &lt;br /&gt;
[23:00]  Object: PRIM_BUMP_SHINY, 3, PRIM_SHINY_MEDIUM, PRIM_BUMP_CHECKER, &lt;br /&gt;
[23:00]  Object: PRIM_BUMP_SHINY, 4, PRIM_SHINY_MEDIUM, PRIM_BUMP_CHECKER, &lt;br /&gt;
[23:00]  Object: PRIM_BUMP_SHINY, 5, PRIM_SHINY_MEDIUM, PRIM_BUMP_CHECKER, &lt;br /&gt;
[23:00]  Object: PRIM_BUMP_SHINY, 6, PRIM_SHINY_MEDIUM, PRIM_BUMP_CHECKER, &lt;br /&gt;
[23:00]  Object: PRIM_COLOR, 0, &amp;lt;1.00000, 1.00000, 1.00000&amp;gt;, 1.000000, &lt;br /&gt;
[23:00]  Object: PRIM_COLOR, 1, &amp;lt;1.00000, 1.00000, 1.00000&amp;gt;, 1.000000, &lt;br /&gt;
[23:00]  Object: PRIM_COLOR, 2, &amp;lt;1.00000, 1.00000, 1.00000&amp;gt;, 1.000000, &lt;br /&gt;
[23:00]  Object: PRIM_COLOR, 3, &amp;lt;1.00000, 1.00000, 1.00000&amp;gt;, 1.000000, &lt;br /&gt;
[23:00]  Object: PRIM_COLOR, 4, &amp;lt;1.00000, 1.00000, 1.00000&amp;gt;, 1.000000, &lt;br /&gt;
[23:00]  Object: PRIM_COLOR, 5, &amp;lt;1.00000, 1.00000, 1.00000&amp;gt;, 1.000000, &lt;br /&gt;
[23:00]  Object: PRIM_COLOR, 6, &amp;lt;1.00000, 1.00000, 1.00000&amp;gt;, 1.000000, &lt;br /&gt;
[23:00]  Object: PRIM_TEXGEN, 0, PRIM_TEXGEN_PLANAR, &lt;br /&gt;
[23:00]  Object: PRIM_TEXGEN, 1, PRIM_TEXGEN_PLANAR, &lt;br /&gt;
[23:00]  Object: PRIM_TEXGEN, 2, PRIM_TEXGEN_PLANAR, &lt;br /&gt;
[23:00]  Object: PRIM_TEXGEN, 3, PRIM_TEXGEN_PLANAR, &lt;br /&gt;
[23:00]  Object: PRIM_TEXGEN, 4, PRIM_TEXGEN_PLANAR, &lt;br /&gt;
[23:00]  Object: PRIM_TEXGEN, 5, PRIM_TEXGEN_PLANAR, &lt;br /&gt;
[23:00]  Object: PRIM_TEXGEN, 6, PRIM_TEXGEN_PLANAR, &lt;br /&gt;
[23:00]  Object: PRIM_TEXTURE, 0, 89556747-24cb-43ed-920b-47caed15465f, &amp;lt;1.00000, 1.00000, 0.00000&amp;gt;, &amp;lt;0.00000, 0.00000, 0.00000&amp;gt;, 0.000000, &lt;br /&gt;
[23:00]  Object: PRIM_TEXTURE, 1, 89556747-24cb-43ed-920b-47caed15465f, &amp;lt;1.00000, 1.00000, 0.00000&amp;gt;, &amp;lt;0.00000, 0.00000, 0.00000&amp;gt;, 0.000000, &lt;br /&gt;
[23:00]  Object: PRIM_TEXTURE, 2, 89556747-24cb-43ed-920b-47caed15465f, &amp;lt;1.00000, 1.00000, 0.00000&amp;gt;, &amp;lt;0.00000, 0.00000, 0.00000&amp;gt;, 0.000000, &lt;br /&gt;
[23:00]  Object: PRIM_TEXTURE, 3, 89556747-24cb-43ed-920b-47caed15465f, &amp;lt;1.00000, 1.00000, 0.00000&amp;gt;, &amp;lt;0.00000, 0.00000, 0.00000&amp;gt;, 0.000000, &lt;br /&gt;
[23:00]  Object: PRIM_TEXTURE, 4, 89556747-24cb-43ed-920b-47caed15465f, &amp;lt;1.00000, 1.00000, 0.00000&amp;gt;, &amp;lt;0.00000, 0.00000, 0.00000&amp;gt;, 0.000000, &lt;br /&gt;
[23:00]  Object: PRIM_TEXTURE, 5, 89556747-24cb-43ed-920b-47caed15465f, &amp;lt;1.00000, 1.00000, 0.00000&amp;gt;, &amp;lt;0.00000, 0.00000, 0.00000&amp;gt;, 0.000000, &lt;br /&gt;
[23:00]  Object: PRIM_TEXTURE, 6, 89556747-24cb-43ed-920b-47caed15465f, &amp;lt;1.00000, 1.00000, 0.00000&amp;gt;, &amp;lt;0.00000, 0.00000, 0.00000&amp;gt;, 0.000000&lt;br /&gt;
[23:00]  Object: ]);&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Anylyn Hax 15:58, 8 August 2007 (PDT)&lt;br /&gt;
&lt;br /&gt;
== llSetPrimitiveParams() Example2 Human readable using ALL_SIDES ==&lt;br /&gt;
&lt;br /&gt;
2.07.2010 was simply to hot to walk outside :) so I reworked this old script. Don&#039;t worry its mostly cosmetics.&amp;lt;BR /&amp;gt; &lt;br /&gt;
- Due to mono we can now try some more tricks because we have 64k memory to use.&amp;lt;BR /&amp;gt;&lt;br /&gt;
- The functions FormatFloat and FormatVector should simplify the output by using ALL_SIDES and another call with the differences on other sides.&amp;lt;BR /&amp;gt;&lt;br /&gt;
- I used a function called strReplace by Haravikk Mistral for doing string replace.&amp;lt;BR /&amp;gt;&lt;br /&gt;
- The code removes for running time the prim name in order to not have it in your chat output.&amp;lt;BR /&amp;gt;&lt;br /&gt;
- If you want to not have the Timestamp in your output modify this in your Viewer.(Preferences/Text Chat/Chat Options/Show Timestamp in local Chat)&amp;lt;BR /&amp;gt;&lt;br /&gt;
IN this way the output shorts itself dramatically.&amp;lt;BR /&amp;gt;&lt;br /&gt;
Manny thanks to Krull Aeon for pointing the bugs in the last version, regarding the using of double quotes for keys.&amp;lt;BR /&amp;gt;&lt;br /&gt;
Manny thanks also to Flavio Dayafter for the trick to remove the &amp;quot;:&amp;quot; llOwnerSay(&amp;quot;/me  ....... &amp;lt;BR /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
// This ugly hack gives out a piece of Human Readable Code, as demanded&lt;br /&gt;
// by llSetPrimitiveParams. The result of this program comes via llOwnerSay&lt;br /&gt;
// on the chat channel. Its a good idea to cut objectname and date out ;)&lt;br /&gt;
// created by Anylyn Hax in the hot summer of 2007, and reworked in 2010.&lt;br /&gt;
// &lt;br /&gt;
// This program is free software: you can redistribute it and/or modify&lt;br /&gt;
// it under the terms of the GNU General Public License as published by&lt;br /&gt;
// the Free Software Foundation, either version 3 of the License, or&lt;br /&gt;
// (at your option) any later version.&lt;br /&gt;
// &lt;br /&gt;
// This program is distributed in the hope that it will be useful,&lt;br /&gt;
// but WITHOUT ANY WARRANTY; without even the implied warranty of&lt;br /&gt;
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the&lt;br /&gt;
// GNU General Public License for more details.&lt;br /&gt;
// &lt;br /&gt;
// You should have received a copy of the GNU General Public License&lt;br /&gt;
// along with this program.  If not, see &amp;lt;http://www.gnu.org/licenses/&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
// strReplace by Haravikk Mistral&lt;br /&gt;
string strReplace(string str, string search, string replace) {&lt;br /&gt;
    return llDumpList2String(llParseStringKeepNulls((str = &amp;quot;&amp;quot;) + str, [search], []), replace);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string FormatFloat(float number, integer precision)&lt;br /&gt;
{    &lt;br /&gt;
    float roundingValue = llPow(10, -precision)*0.5;&lt;br /&gt;
    float rounded;&lt;br /&gt;
    if (number &amp;lt; 0) rounded = number - roundingValue;&lt;br /&gt;
    else            rounded = number + roundingValue;&lt;br /&gt;
 &lt;br /&gt;
    if (precision &amp;lt; 1) { precision = 1; }       // float is float &lt;br /&gt;
 &lt;br /&gt;
    string result = llGetSubString((string)rounded, 0, llSubStringIndex((string)rounded, &amp;quot;.&amp;quot;) + precision);&lt;br /&gt;
    result = strReplace(result, &amp;quot;.000&amp;quot;, &amp;quot;.0&amp;quot;);&lt;br /&gt;
    result = strReplace(result, &amp;quot;00,&amp;quot;, &amp;quot;0,&amp;quot;);&lt;br /&gt;
    return result;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
string FormatVector(vector hector, integer precision)&lt;br /&gt;
{&lt;br /&gt;
    if(hector == ZERO_VECTOR) { return &amp;quot;ZERO_VECTOR&amp;quot;;} else {&lt;br /&gt;
    if (precision &amp;lt; 1) { precision = 1; }       // a vector contains floats   &lt;br /&gt;
    float roundingValue = llPow(10, -precision)*0.5;&lt;br /&gt;
    float relx; float rely; float relz; float elx; float ely; float elz;&lt;br /&gt;
    elx = hector.x; ely = hector.y; elz = hector.z;&lt;br /&gt;
    &lt;br /&gt;
    if (elx &amp;lt; 0) {relx = elx - roundingValue;} else {relx = elx + roundingValue;}&lt;br /&gt;
    if (ely &amp;lt; 0) {rely = ely - roundingValue;} else {rely = ely + roundingValue;}&lt;br /&gt;
    if (elz &amp;lt; 0) {relz = elz - roundingValue;} else {relz = elz + roundingValue;}&lt;br /&gt;
 &lt;br /&gt;
    string result = &amp;quot;&amp;lt;&amp;quot;+llGetSubString((string)relx, 0, llSubStringIndex((string)relx, &amp;quot;.&amp;quot;) + precision)+&amp;quot;,&amp;quot;+&lt;br /&gt;
                llGetSubString((string)rely, 0, llSubStringIndex((string)rely, &amp;quot;.&amp;quot;) + precision)+&amp;quot;,&amp;quot;+&lt;br /&gt;
                llGetSubString((string)relz, 0, llSubStringIndex((string)relz, &amp;quot;.&amp;quot;) + precision)+&amp;quot;&amp;gt;&amp;quot;;&lt;br /&gt;
    result = strReplace(result, &amp;quot;.000&amp;quot;, &amp;quot;.0&amp;quot;);&lt;br /&gt;
    result = strReplace(result, &amp;quot;00,&amp;quot;, &amp;quot;0,&amp;quot;);&lt;br /&gt;
    result = strReplace(result, &amp;quot;00&amp;gt;&amp;quot;, &amp;quot;0&amp;gt;&amp;quot;);&lt;br /&gt;
    return result;    &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry()&lt;br /&gt;
    {&lt;br /&gt;
        &lt;br /&gt;
        string ce_primname = llGetObjectName(); llSetObjectName(&amp;quot;&amp;quot;);        // thats for you to not cut so much from the chat&lt;br /&gt;
        integer i = 0; integer j =0;&lt;br /&gt;
        integer ce_side = llGetNumberOfSides();&lt;br /&gt;
 &lt;br /&gt;
        list booleans = ([&lt;br /&gt;
        &amp;quot;FALSE&amp;quot;,                    // 0&lt;br /&gt;
        &amp;quot;TRUE&amp;quot;                      // 1&lt;br /&gt;
        ]);&lt;br /&gt;
 &lt;br /&gt;
        list texgens = ([&lt;br /&gt;
        &amp;quot;PRIM_TEXGEN_DEFAULT&amp;quot;,      // 0&lt;br /&gt;
        &amp;quot;PRIM_TEXGEN_PLANAR&amp;quot;        // 1&lt;br /&gt;
        ]);&lt;br /&gt;
 &lt;br /&gt;
        list holeshape = ([&lt;br /&gt;
        &amp;quot;PRIM_HOLE_DEFAULT&amp;quot;,        //   0  default (matches the prim type: square for box, circle for cylinder, etc.)&lt;br /&gt;
        &amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;PRIM_HOLE_CIRCLE&amp;quot;,         //   16  circle&lt;br /&gt;
        &amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&lt;br /&gt;
        &amp;quot;PRIM_HOLE_SQUARE&amp;quot;,         //   32  square&lt;br /&gt;
        &amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;, &lt;br /&gt;
        &amp;quot;PRIM_HOLE_TRIANGLE&amp;quot;        //   48  triangle&lt;br /&gt;
        ]);&lt;br /&gt;
 &lt;br /&gt;
        list sculpttype = ([&lt;br /&gt;
        &amp;quot;PRIM_SCULPT_TYPE_SPHERE&amp;quot;,  //   1  sphere (Converge top &amp;amp; bottom, stitch left side to right)  &lt;br /&gt;
        &amp;quot;PRIM_SCULPT_TYPE_TORUS&amp;quot;,   //   2  torus (Stitch top to bottom, stitch left side to right)  &lt;br /&gt;
        &amp;quot;PRIM_SCULPT_TYPE_PLANE&amp;quot;,   //   3  plane (No stitching or converging)  &lt;br /&gt;
        &amp;quot;PRIM_SCULPT_TYPE_CYLINDER&amp;quot; //   4  cylinder (Stitch left side to right, leave top and bottom open) &lt;br /&gt;
        ]);&lt;br /&gt;
 &lt;br /&gt;
        list bumpmapping = ([&lt;br /&gt;
        &amp;quot;PRIM_BUMP_NONE&amp;quot;,           //   0  none: no bump map  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_BRIGHT&amp;quot;,         //   1  brightness: generate bump map from highlights  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_DARK&amp;quot;,           //   2  darkness: generate bump map from lowlights  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_WOOD&amp;quot;,           //   3  woodgrain  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_BARK&amp;quot;,           //   4  bark  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_BRICKS&amp;quot;,         //   5  bricks  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_CHECKER&amp;quot;,        //   6  checker  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_CONCRETE&amp;quot;,       //   7  concrete  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_TILE&amp;quot;,           //   8  crustytile  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_STONE&amp;quot;,          //   9  cutstone: blocks  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_DISKS&amp;quot;,          //   10  discs: packed circles  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_GRAVEL&amp;quot;,         //   11  gravel  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_SIDING&amp;quot;,         //   13  siding  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_LARGETILE&amp;quot;,      //   14  stonetile  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_STUCCO&amp;quot;,         //   15  stucco  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_SUCTION&amp;quot;,        //   16  suction: rings  &lt;br /&gt;
        &amp;quot;PRIM_BUMP_WEAVE&amp;quot;           //   17  weave  &lt;br /&gt;
        ]);&lt;br /&gt;
 &lt;br /&gt;
        list shinys = ([&lt;br /&gt;
        &amp;quot;PRIM_SHINY_NONE&amp;quot;,          //   0  none  &lt;br /&gt;
        &amp;quot;PRIM_SHINY_LOW&amp;quot;,           //   1  low  &lt;br /&gt;
        &amp;quot;PRIM_SHINY_MEDIUM&amp;quot;,        //   2  medium &lt;br /&gt;
        &amp;quot;PRIM_SHINY_HIGH&amp;quot;           //   3  high  &lt;br /&gt;
        ]);&lt;br /&gt;
 &lt;br /&gt;
        list materials =([&lt;br /&gt;
        &amp;quot;PRIM_MATERIAL_STONE&amp;quot;,      //  0  stone  &lt;br /&gt;
        &amp;quot;PRIM_MATERIAL_METAL&amp;quot;,      //  1  metal  &lt;br /&gt;
        &amp;quot;PRIM_MATERIAL_GLASS&amp;quot;,      //  2  glass  &lt;br /&gt;
        &amp;quot;PRIM_MATERIAL_WOOD&amp;quot;,       //  3  wood  &lt;br /&gt;
        &amp;quot;PRIM_MATERIAL_FLESH&amp;quot;,      //  4  flesh  &lt;br /&gt;
        &amp;quot;PRIM_MATERIAL_PLASTIC&amp;quot;,    //  5  plastic  &lt;br /&gt;
        &amp;quot;PRIM_MATERIAL_RUBBER&amp;quot;,     //  6  rubber  &lt;br /&gt;
        &amp;quot;PRIM_MATERIAL_LIGHT&amp;quot;       //  7  light &lt;br /&gt;
        ]);&lt;br /&gt;
 &lt;br /&gt;
        llOwnerSay(&amp;quot;/me llSetPrimitiveParams([&amp;quot;);&lt;br /&gt;
 &lt;br /&gt;
        list ce_prim_flexible =     llGetPrimitiveParams([PRIM_FLEXIBLE]);          // 21&lt;br /&gt;
        llOwnerSay(&amp;quot;/me\t  PRIM_FLEXIBLE&amp;quot;+&lt;br /&gt;
            &amp;quot;, &amp;quot;+llList2String(booleans ,llList2Integer(ce_prim_flexible,0))+       // true / false&lt;br /&gt;
            &amp;quot;, &amp;quot;+(string)llList2Integer(ce_prim_flexible,1)+                        // softness&lt;br /&gt;
            &amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_flexible,2),3)+                   // gravity&lt;br /&gt;
            &amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_flexible,3),3)+                   // friction&lt;br /&gt;
            &amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_flexible,4),3)+                   // wind&lt;br /&gt;
            &amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_flexible,5),3)+                   // tension&lt;br /&gt;
            &amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_flexible,6),3));                // force&lt;br /&gt;
        ce_prim_flexible =[];&lt;br /&gt;
 &lt;br /&gt;
        list ce_prim_material =     llGetPrimitiveParams([PRIM_MATERIAL]);          // 2&lt;br /&gt;
        llOwnerSay(&amp;quot;/me\t, PRIM_MATERIAL, &amp;quot;+llList2String(materials ,llList2Integer(ce_prim_material,0)));&lt;br /&gt;
        ce_prim_material = [];&lt;br /&gt;
 &lt;br /&gt;
        list ce_prim_phantom =      llGetPrimitiveParams([PRIM_PHANTOM]);           // 5&lt;br /&gt;
        llOwnerSay(&amp;quot;/me\t, PRIM_PHANTOM, &amp;quot;+llList2String(booleans ,llList2Integer(ce_prim_phantom ,0)));&lt;br /&gt;
        ce_prim_phantom = [];&lt;br /&gt;
 &lt;br /&gt;
        list ce_prim_physiks =      llGetPrimitiveParams([PRIM_PHYSICS]);           // 3&lt;br /&gt;
        llOwnerSay(&amp;quot;/me\t, PRIM_PHYSICS, &amp;quot;+llList2String(booleans ,llList2Integer(ce_prim_physiks ,0)));&lt;br /&gt;
        ce_prim_physiks = [];&lt;br /&gt;
 &lt;br /&gt;
        list ce_prim_point_light =  llGetPrimitiveParams([PRIM_POINT_LIGHT]);       // 23&lt;br /&gt;
        llOwnerSay(&amp;quot;/me\t, PRIM_POINT_LIGHT&amp;quot;+&lt;br /&gt;
            &amp;quot;, &amp;quot;+llList2String(booleans ,llList2Integer(ce_prim_point_light,0))+    // true / false&lt;br /&gt;
            &amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_point_light,1),3)+              // color&lt;br /&gt;
            &amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_point_light,2),3)+                // intensity&lt;br /&gt;
            &amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_point_light,3),3)+                // radius&lt;br /&gt;
            &amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_point_light,4),3));               // falloff&lt;br /&gt;
        ce_prim_point_light = [];&lt;br /&gt;
 &lt;br /&gt;
        list ce_prim_position =     llGetPrimitiveParams([PRIM_POSITION]);          // 6&lt;br /&gt;
        llOwnerSay(&amp;quot;/me\t, PRIM_POSITION, &amp;quot;+FormatVector(llList2Vector(ce_prim_position ,0),3));&lt;br /&gt;
        ce_prim_position = [];&lt;br /&gt;
 &lt;br /&gt;
        list ce_prim_rotation =     llGetPrimitiveParams([PRIM_ROTATION]);          // 8&lt;br /&gt;
        llOwnerSay(&amp;quot;/me\t, PRIM_ROTATION, &amp;quot;+(string)llList2Rot(ce_prim_rotation ,0));&lt;br /&gt;
        ce_prim_rotation = [];&lt;br /&gt;
 &lt;br /&gt;
        list ce_prim_size =         llGetPrimitiveParams([PRIM_SIZE]);              // 7&lt;br /&gt;
        llOwnerSay(&amp;quot;/me\t, PRIM_SIZE, &amp;quot;+FormatVector(llList2Vector(ce_prim_size ,0),3));&lt;br /&gt;
        ce_prim_size = [];&lt;br /&gt;
 &lt;br /&gt;
        list ce_prim_temp_on_rez =  llGetPrimitiveParams([PRIM_TEMP_ON_REZ]);       // 4&lt;br /&gt;
        llOwnerSay(&amp;quot;/me\t, PRIM_TEMP_ON_REZ, &amp;quot;+llList2String(booleans ,llList2Integer(ce_prim_temp_on_rez ,0)));&lt;br /&gt;
        ce_prim_temp_on_rez = [];&lt;br /&gt;
 &lt;br /&gt;
        list ce_prim_type =         llGetPrimitiveParams([PRIM_TYPE]);              // 9&lt;br /&gt;
        if(llList2Integer(ce_prim_type,0)==0){llOwnerSay(&amp;quot;/me\t, PRIM_TYPE, PRIM_TYPE_BOX&amp;quot;+&amp;quot;, &amp;quot;+llList2String(holeshape ,llList2Integer(ce_prim_type,1))+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,2),3)+&amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_type,3),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,4),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,5),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,6),3));}&lt;br /&gt;
        if(llList2Integer(ce_prim_type,0)==1){llOwnerSay(&amp;quot;/me\t, PRIM_TYPE, PRIM_TYPE_CYLINDER&amp;quot;+&amp;quot;, &amp;quot;+llList2String(holeshape ,llList2Integer(ce_prim_type,1))+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,2),3)+&amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_type,3),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,4),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,5),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,6),3));}&lt;br /&gt;
        if(llList2Integer(ce_prim_type,0)==2){llOwnerSay(&amp;quot;/me\t, PRIM_TYPE, PRIM_TYPE_PRISM&amp;quot;+&amp;quot;, &amp;quot;+llList2String(holeshape ,llList2Integer(ce_prim_type,1))+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,2),3)+&amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_type,3),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,4),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,5),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,6),3));}&lt;br /&gt;
        if(llList2Integer(ce_prim_type,0)==3){llOwnerSay(&amp;quot;/me\t, PRIM_TYPE, PRIM_TYPE_SPHERE&amp;quot;+&amp;quot;, &amp;quot;+(string)llList2Integer(ce_prim_type,1)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,2),3)+&amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_type,3),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,4),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,5),3));}&lt;br /&gt;
        if(llList2Integer(ce_prim_type,0)==4){llOwnerSay(&amp;quot;/me\t, PRIM_TYPE, PRIM_TYPE_TORUS&amp;quot;+&amp;quot;, &amp;quot;+llList2String(holeshape ,llList2Integer(ce_prim_type,1))+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,2),3)+&amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_type,3),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,4),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,5),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,6),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,7),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,8),3)+&amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_type,9),3)+&amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_type,10),3)+&amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_type,11),3));}&lt;br /&gt;
        if(llList2Integer(ce_prim_type,0)==5){llOwnerSay(&amp;quot;/me\t, PRIM_TYPE, PRIM_TYPE_TUBE&amp;quot;+&amp;quot;, &amp;quot;+llList2String(holeshape ,llList2Integer(ce_prim_type,1))+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,2),3)+&amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_type,3),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,4),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,5),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,6),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,7),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,8),3)+&amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_type,9),3)+&amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_type,10),3)+&amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_type,11),3));}&lt;br /&gt;
        if(llList2Integer(ce_prim_type,0)==6){llOwnerSay(&amp;quot;/me\t, PRIM_TYPE, PRIM_TYPE_RING&amp;quot;+&amp;quot;, &amp;quot;+llList2String(holeshape ,llList2Integer(ce_prim_type,1))+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,2),3)+&amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_type,3),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,4),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,5),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,6),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,7),3)+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_type,8),3)+&amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_type,9),3)+&amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_type,10),3)+&amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_type,11),3));}&lt;br /&gt;
        if(llList2Integer(ce_prim_type,0)==7){llOwnerSay(&amp;quot;/me\t, PRIM_TYPE, PRIM_TYPE_SCULPT&amp;quot;+&amp;quot;, \&amp;quot;&amp;quot;+llList2String(ce_prim_type,1)+&amp;quot;\&amp;quot;, &amp;quot;+(string)llList2Integer(ce_prim_type,2));}&lt;br /&gt;
        ce_prim_type = [];&lt;br /&gt;
 &lt;br /&gt;
        //fullbright&lt;br /&gt;
        list ce_prim_fullbright0 = llGetPrimitiveParams([PRIM_FULLBRIGHT,0]);list ce_prim_fullbright;                   // 20&lt;br /&gt;
        llOwnerSay(&amp;quot;/me\t, PRIM_FULLBRIGHT, ALL_SIDES, &amp;quot;+llList2String(booleans ,llList2Integer(ce_prim_fullbright0,0)) );&lt;br /&gt;
        for(i = 0;i &amp;lt;= ce_side; i++) { &lt;br /&gt;
            ce_prim_fullbright =   llGetPrimitiveParams([PRIM_FULLBRIGHT,i]);&lt;br /&gt;
            if (ce_prim_fullbright != [] &amp;amp;&amp;amp; ce_prim_fullbright0 !=ce_prim_fullbright) {&lt;br /&gt;
            llOwnerSay(&amp;quot;/me\t, PRIM_FULLBRIGHT, &amp;quot;+(string)i+&amp;quot;, &amp;quot;+llList2String(booleans ,llList2Integer(ce_prim_fullbright,0)) ); &lt;br /&gt;
            }&lt;br /&gt;
        } ce_prim_fullbright0 = [];ce_prim_fullbright = [];&lt;br /&gt;
 &lt;br /&gt;
        //shiny &amp;amp; bumpmaping&lt;br /&gt;
        list ce_prim_bump_shiny0 =   llGetPrimitiveParams([PRIM_BUMP_SHINY,0]);list ce_prim_bump_shiny;&lt;br /&gt;
        llOwnerSay(&amp;quot;/me\t, PRIM_BUMP_SHINY, ALL_SIDES, &amp;quot;+llList2String(shinys,llList2Integer(ce_prim_bump_shiny0,0))+  // shiny&lt;br /&gt;
                &amp;quot;, &amp;quot;+llList2String(bumpmapping ,llList2Integer(ce_prim_bump_shiny0,1)) );       // bumpmaping&lt;br /&gt;
        for(i = 0;i &amp;lt;= ce_side; i++) { &lt;br /&gt;
            ce_prim_bump_shiny =   llGetPrimitiveParams([PRIM_BUMP_SHINY,i]);                   // 19&lt;br /&gt;
            if (ce_prim_bump_shiny != [] &amp;amp;&amp;amp; ce_prim_bump_shiny0 != ce_prim_bump_shiny) {&lt;br /&gt;
            llOwnerSay(&amp;quot;/me\t, PRIM_BUMP_SHINY, &amp;quot;+(string)i+&amp;quot;, &amp;quot;+llList2String(shinys,llList2Integer(ce_prim_bump_shiny,0))+  // shiny&lt;br /&gt;
                &amp;quot;, &amp;quot;+llList2String(bumpmapping ,llList2Integer(ce_prim_bump_shiny,1)) );        // bumpmaping&lt;br /&gt;
            }&lt;br /&gt;
        } ce_prim_bump_shiny0 = []; ce_prim_bump_shiny = [];&lt;br /&gt;
 &lt;br /&gt;
        //color&lt;br /&gt;
        list ce_prim_color0 = llGetPrimitiveParams([PRIM_COLOR ,0]);list ce_prim_color;&lt;br /&gt;
        llOwnerSay(&amp;quot;/me\t, PRIM_COLOR, ALL_SIDES, &amp;quot;+FormatVector(llList2Vector(ce_prim_color0,0),3)+&amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_color0,1),3));&lt;br /&gt;
        for(i=0;i &amp;lt;= ce_side;i++) { &lt;br /&gt;
            ce_prim_color =  llGetPrimitiveParams([PRIM_COLOR,i]);                              // 18&lt;br /&gt;
            if (ce_prim_color != [] &amp;amp;&amp;amp; ce_prim_color0 !=ce_prim_color) { &lt;br /&gt;
            llOwnerSay(&amp;quot;/me\t, PRIM_COLOR, &amp;quot;+(string)i+&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_color,0),3)+&amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_color,1),3) );&lt;br /&gt;
            }&lt;br /&gt;
        }ce_prim_color = [];ce_prim_color0 = [];&lt;br /&gt;
 &lt;br /&gt;
        //texgen&lt;br /&gt;
        list ce_prim_texgen0 = llGetPrimitiveParams([PRIM_TEXGEN ,0]);list ce_prim_texgen;&lt;br /&gt;
        llOwnerSay(&amp;quot;/me\t, PRIM_TEXGEN, ALL_SIDES, &amp;quot;+llList2String(texgens,llList2Integer(ce_prim_texgen0,0)));&lt;br /&gt;
        for(i = 0;i &amp;lt;= ce_side ;i++ ) { &lt;br /&gt;
                ce_prim_texgen = llGetPrimitiveParams([PRIM_TEXGEN ,i]);                        // 22 &lt;br /&gt;
            if (ce_prim_texgen != [] &amp;amp;&amp;amp; ce_prim_texgen0!=ce_prim_texgen) {&lt;br /&gt;
                llOwnerSay(&amp;quot;/me\t, PRIM_TEXGEN, &amp;quot;+(string)i+&amp;quot;, &amp;quot;+llList2String(texgens,llList2Integer(ce_prim_texgen,0)) );  // type&lt;br /&gt;
            }&lt;br /&gt;
        }ce_prim_texgen = [];ce_prim_texgen0 = [];&lt;br /&gt;
 &lt;br /&gt;
        //texture&lt;br /&gt;
        list ce_prim_texture0 = llGetPrimitiveParams([PRIM_TEXTURE,0]);list ce_prim_texture;&lt;br /&gt;
        llOwnerSay(&amp;quot;/me\t, PRIM_TEXTURE, ALL_SIDES&amp;quot;+&lt;br /&gt;
                &amp;quot;, \&amp;quot;&amp;quot;+llList2String(ce_prim_texture0,0)+                                       // name&lt;br /&gt;
                &amp;quot;\&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_texture0,1),3)+                       // repeats&lt;br /&gt;
                &amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_texture0,2),3)+                         // offsets&lt;br /&gt;
                &amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_texture0,3),3));                          // rotation&lt;br /&gt;
        for(i = 0;i &amp;lt;= ce_side;i++) {&lt;br /&gt;
            ce_prim_texture = llGetPrimitiveParams([PRIM_TEXTURE,i]);                           // we dont put everywhere a komata&lt;br /&gt;
            if (    ce_prim_texture != [] &amp;amp;&amp;amp; &lt;br /&gt;
                    (   &lt;br /&gt;
                        llList2String(ce_prim_texture0,0) != llList2String(ce_prim_texture,0) ||&lt;br /&gt;
                        llList2Vector(ce_prim_texture0,1) != llList2Vector(ce_prim_texture,1) || &lt;br /&gt;
                        llList2Vector(ce_prim_texture0,2) != llList2Vector(ce_prim_texture,2) || &lt;br /&gt;
                        llList2Float(ce_prim_texture0,3) != llList2Float(ce_prim_texture,3)&lt;br /&gt;
                    ) &lt;br /&gt;
                ) {&lt;br /&gt;
            llOwnerSay(&amp;quot;/me\t, PRIM_TEXTURE, &amp;quot;+(string)i+&lt;br /&gt;
                &amp;quot;, \&amp;quot;&amp;quot;+llList2String(ce_prim_texture,0)+                                        // name&lt;br /&gt;
                &amp;quot;\&amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_texture,1),3)+                        // repeats&lt;br /&gt;
                &amp;quot;, &amp;quot;+FormatVector(llList2Vector(ce_prim_texture,2),3)+                          // offsets&lt;br /&gt;
                &amp;quot;, &amp;quot;+FormatFloat(llList2Float(ce_prim_texture,3),3) );                          // rotation&lt;br /&gt;
            }&lt;br /&gt;
        }ce_prim_texture0 = [];ce_prim_texture = [];&lt;br /&gt;
 &lt;br /&gt;
        llOwnerSay(&amp;quot;/me ]);&amp;quot;);&lt;br /&gt;
        llOwnerSay(&amp;quot;/me //This Script used &amp;quot; + (string)(((4*16384) - llGetFreeMemory())/1024) + &amp;quot; kBytes&amp;quot;);&lt;br /&gt;
        llSetObjectName(ce_primname);                                                           // what you take you must give back&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
would output something like this:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
[20:31]   llSetPrimitiveParams([&lt;br /&gt;
[20:31]         PRIM_FLEXIBLE, FALSE, 0, 0.0, 0.0, 0.0, 0.0, ZERO_VECTOR&lt;br /&gt;
[20:31]       , PRIM_MATERIAL, PRIM_MATERIAL_WOOD&lt;br /&gt;
[20:31]       , PRIM_PHANTOM, FALSE&lt;br /&gt;
[20:31]       , PRIM_PHYSICS, FALSE&lt;br /&gt;
[20:31]       , PRIM_POINT_LIGHT, FALSE, ZERO_VECTOR, 0.0, 0.0, 0.0&lt;br /&gt;
[20:31]       , PRIM_POSITION, &amp;lt;192.339,170.855,87.438&amp;gt;&lt;br /&gt;
[20:31]       , PRIM_ROTATION, &amp;lt;-0.50509, 0.49964, 0.49491, 0.50031&amp;gt;&lt;br /&gt;
[20:31]       , PRIM_TEMP_ON_REZ, FALSE&lt;br /&gt;
[20:31]       , PRIM_TYPE, PRIM_TYPE_BOX, PRIM_HOLE_DEFAULT, &amp;lt;0.20,0.705,0.0&amp;gt;, 0.950, ZERO_VECTOR, &amp;lt;1.0,1.0,0.0&amp;gt;, ZERO_VECTOR&lt;br /&gt;
[20:31]       , PRIM_FULLBRIGHT, ALL_SIDES, FALSE&lt;br /&gt;
[20:31]       , PRIM_BUMP_SHINY, ALL_SIDES, PRIM_SHINY_NONE, PRIM_BUMP_NONE&lt;br /&gt;
[20:31]       , PRIM_COLOR, ALL_SIDES, &amp;lt;1.0,1.0,1.0&amp;gt;, 1.0 &lt;br /&gt;
[20:31]       , PRIM_TEXGEN, ALL_SIDES, PRIM_TEXGEN_DEFAULT &lt;br /&gt;
[20:31]       , PRIM_SIZE, &amp;lt;10.0,10.0,10.0&amp;gt;&lt;br /&gt;
[20:31]       , PRIM_TEXTURE, ALL_SIDES, &amp;quot;d45e98e8-f54c-c6c5-6012-6431184d0a16&amp;quot;, &amp;lt;0.50,2.0,0.0&amp;gt;, ZERO_VECTOR, 1.571&lt;br /&gt;
[20:31]       , PRIM_TEXTURE, 1, &amp;quot;d45e98e8-f54c-c6c5-6012-6431184d0a16&amp;quot;, &amp;lt;2.0,2.0,0.0&amp;gt;, ZERO_VECTOR, 1.571&lt;br /&gt;
[20:31]       , PRIM_TEXTURE, 2, &amp;quot;d45e98e8-f54c-c6c5-6012-6431184d0a16&amp;quot;, &amp;lt;2.0,2.0,0.0&amp;gt;, ZERO_VECTOR, 1.571&lt;br /&gt;
[20:31]       , PRIM_TEXTURE, 3, &amp;quot;d45e98e8-f54c-c6c5-6012-6431184d0a16&amp;quot;, &amp;lt;2.0,2.0,0.0&amp;gt;, ZERO_VECTOR, 1.571&lt;br /&gt;
[20:31]       , PRIM_TEXTURE, 4, &amp;quot;6501bbbc-f754-bfff-dfbe-41f7492a077b&amp;quot;, &amp;lt;1.0,2.10,0.0&amp;gt;, &amp;lt;0.0,0.450,0.0&amp;gt;, 1.571&lt;br /&gt;
[20:31]       , PRIM_TEXTURE, 6, &amp;quot;d45e98e8-f54c-c6c5-6012-6431184d0a16&amp;quot;, &amp;lt;0.50,0.20,0.0&amp;gt;, &amp;lt;0.40,0.280,0.0&amp;gt;, 1.571&lt;br /&gt;
[20:31]   ]);&lt;br /&gt;
[20:31]  //This Script used 40 kBytes&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
If your client does not support to turn of the time you still have to cut cut out &amp;quot;[20:31]  &amp;quot; from the beginning of each line in order to use the output in a code.&lt;br /&gt;
Anylyn Hax 18:50, 4 July 2010 (UTC)&lt;br /&gt;
&lt;br /&gt;
== Spinning DanceBall with random colors ==&lt;br /&gt;
&lt;br /&gt;
People keep asking me how to make a danceball, so I thought I might publish one here and show same time a exemple of how to use the upper Human Readable Output script.&amp;lt;BR /&amp;gt;&lt;br /&gt;
- remember to cut out the PRIM_POSITION and possible the PRIM_ROTATION stanza.&amp;lt;BR /&amp;gt;&lt;br /&gt;
- remember to make (or by) some dances and fill the danceball with up to 11 such animations.&amp;lt;BR /&amp;gt;&lt;br /&gt;
If you like to try to do some animations like dances or other by yourself, I recommend the fantastic work of Vince Invincible and Zi Ree the &amp;lt;I&amp;gt;QAvimator&amp;lt;/I&amp;gt;. It is a free alternative to Poser and Maya, and it runs on Windows, Mac OS X, and Linux. http://www.qavimator.org/&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;lsl&amp;gt;&lt;br /&gt;
list anis;&lt;br /&gt;
integer CHANNEL;&lt;br /&gt;
integer lisi;&lt;br /&gt;
&lt;br /&gt;
MakeTheBall()&lt;br /&gt;
{&lt;br /&gt;
    llSetTimerEvent(10);&lt;br /&gt;
    llSetPrimitiveParams([&lt;br /&gt;
        PRIM_FLEXIBLE, FALSE, 0, 0.0, 0.0, 0.0, 0.0, ZERO_VECTOR&lt;br /&gt;
      , PRIM_MATERIAL, PRIM_MATERIAL_WOOD&lt;br /&gt;
      , PRIM_PHANTOM, FALSE&lt;br /&gt;
      , PRIM_PHYSICS, FALSE&lt;br /&gt;
      , PRIM_POINT_LIGHT, FALSE, ZERO_VECTOR, 0.0, 0.0, 0.0&lt;br /&gt;
      , PRIM_SIZE, &amp;lt;1.5,1.5,1.5&amp;gt;&lt;br /&gt;
      , PRIM_TEMP_ON_REZ, FALSE&lt;br /&gt;
      , PRIM_TYPE, PRIM_TYPE_SPHERE, 0, &amp;lt;0.0,1.0,0.0&amp;gt;, 0.0, ZERO_VECTOR, &amp;lt;0.0,1.0,0.0&amp;gt;&lt;br /&gt;
      , PRIM_FULLBRIGHT, ALL_SIDES, TRUE&lt;br /&gt;
      , PRIM_BUMP_SHINY, ALL_SIDES, PRIM_SHINY_HIGH, PRIM_BUMP_NONE&lt;br /&gt;
      , PRIM_COLOR, ALL_SIDES, &amp;lt;0.705,0.449,0.807&amp;gt;, 1.0&lt;br /&gt;
      , PRIM_TEXGEN, ALL_SIDES, PRIM_TEXGEN_DEFAULT&lt;br /&gt;
      , PRIM_TEXTURE, ALL_SIDES, &amp;quot;42d9ac0b-d423-94f0-9fd5-db3162b0d4ea&amp;quot;, &amp;lt;4.0,12.0,0.0&amp;gt;, &amp;lt;0,0,0&amp;gt;, 0.5&lt;br /&gt;
    ]);&lt;br /&gt;
    llSetTextureAnim(ANIM_ON | SMOOTH | LOOP , ALL_SIDES, 0, 1, 0.0, 1.0, 0.1);&lt;br /&gt;
    anis = [&amp;quot;STOP&amp;quot;];&lt;br /&gt;
    integer a=0;&lt;br /&gt;
    while(a&amp;lt;llGetInventoryNumber(INVENTORY_ANIMATION) &amp;amp;&amp;amp; a&amp;lt;9){anis+=llGetInventoryName(INVENTORY_ANIMATION,a++);};&lt;br /&gt;
    return;    &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
default&lt;br /&gt;
{&lt;br /&gt;
    state_entry(){MakeTheBall();}&lt;br /&gt;
    changed(integer change){if (change &amp;amp; CHANGED_INVENTORY){MakeTheBall();}}&lt;br /&gt;
    timer()&lt;br /&gt;
    {&lt;br /&gt;
        float rot = llFrand(1.0);&lt;br /&gt;
        float gruen = llFrand(1.0);&lt;br /&gt;
        float blau = llFrand(1.0);        &lt;br /&gt;
        //llSetColor(&amp;lt;rot,gruen,blau&amp;gt; , ALL_SIDES );&lt;br /&gt;
        llSetLinkPrimitiveParamsFast(LINK_THIS,[PRIM_COLOR, ALL_SIDES, &amp;lt;rot,gruen,blau&amp;gt;, 1.0]);&lt;br /&gt;
        llSetTimerEvent(llFrand(25.0));&lt;br /&gt;
    }    &lt;br /&gt;
    touch_start(integer total_number){llRequestPermissions(llDetectedKey(0), PERMISSION_TRIGGER_ANIMATION);}&lt;br /&gt;
    run_time_permissions(integer perm)&lt;br /&gt;
    {&lt;br /&gt;
        if (perm &amp;amp; PERMISSION_TRIGGER_ANIMATION)&lt;br /&gt;
        {&lt;br /&gt;
            CHANNEL = llRound(llFrand(-99999999.9));&lt;br /&gt;
            lisi = llListen(CHANNEL,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;,&amp;quot;&amp;quot;);&lt;br /&gt;
            llDialog(llGetPermissionsKey(), &amp;quot;Choose the dance &amp;quot;,anis,CHANNEL);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    listen(integer chan, string name, key id, string mess)&lt;br /&gt;
    {&lt;br /&gt;
        if ( chan==CHANNEL &amp;amp;&amp;amp;  id == llGetPermissionsKey() &amp;amp;&amp;amp;  mess != &amp;quot;STOP&amp;quot;)&lt;br /&gt;
        {llStartAnimation(mess);llListenRemove(lisi);}   &lt;br /&gt;
        if ( chan==CHANNEL &amp;amp;&amp;amp;  id == llGetPermissionsKey() &amp;amp;&amp;amp;  mess == &amp;quot;STOP&amp;quot;)&lt;br /&gt;
        {&lt;br /&gt;
            integer x = 0; while(x &amp;lt; llGetInventoryNumber(INVENTORY_ANIMATION))&lt;br /&gt;
            {llStopAnimation(llGetInventoryName(INVENTORY_ANIMATION, x++));}&lt;br /&gt;
            llListenRemove(lisi);&lt;br /&gt;
        }  &lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/lsl&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Viewer 2 and privacy issues ==&lt;br /&gt;
&lt;br /&gt;
We can see that the viewer 2 is very hardly pushed by the Lindens this days.&lt;br /&gt;
But there are some privacy issues when you let everybody run java scripts on your system.&lt;br /&gt;
As long as the integrated browser accepts all cookies and runs all java scripts, I is not just stupid but irresponsible to  use the viewer2.&lt;br /&gt;
Under this light can someone explain me why I should use the viewer ?&lt;br /&gt;
&lt;br /&gt;
{{Jira Reporter}}{{Skills}}&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Why should you use Internet Explore or Firefox or Opera as internet browser? They allow javascripts as the LL integrated browser. Do you judge a viewer bad because it just integrate an internet browser working like all the other internet browsers in the world?. Just disable cookies and javascripts in the Preferences. There is no reason to NOT use the new great LL viewer. Anyway I wonder where this informations are useful here. Just for gossip? &lt;br /&gt;
There is no Viewer 2 privacy issues. If you are worried about this, start to remove al your internet browsers.&lt;/div&gt;</summary>
		<author><name>Clematide Oyen</name></author>
	</entry>
</feed>