<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-7504661390079698623</id><updated>2011-09-10T07:03:04.087-05:00</updated><category term='scripting'/><category term='building'/><category term='First Look'/><category term='sightseeing'/><category term='miscellaneous'/><category term='metablog'/><category term='texturing'/><category term='Technology'/><category term='envy'/><category term='Jewelry'/><category term='mistakes'/><category term='Tutorial: Scripting'/><title type='text'>Johanna Hyacinth's Second Life Blog</title><subtitle type='html'>A running narrative of what I've managed to make of my Second Life, with tips and tidbits of how to do neat things.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>46</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-4140588159238703224</id><published>2007-08-15T09:14:00.001-05:00</published><updated>2007-08-15T10:47:40.304-05:00</updated><title type='text'>More Fun with Media</title><content type='html'>The release notes for the recent update to the Second Life client said, much to my delight, that streaming video was now available in the Linux client.  Well, a number of us have had trouble getting it to work, even though we've got all the dependencies installed.&lt;br /&gt;&lt;br /&gt;Someone posted, in one of the video troubleshooting threads, that he thought we were all trying to view videos with too high a bitrate, and suggested we go by his store to try out his TVs. In plugging them, he said that they:&lt;br /&gt;&lt;blockquote&gt;can coexist with land media, this allows private landowners to still use their 'pay per view' media to run in their skyboxes and private theatres, without interferring with all their tennants at ground level having their own TV channels, even in the same parcel.&lt;/blockquote&gt;Well, this sounded interesting, especially given my video vendor project, so I dug into the LSL Wiki and saw an option for &lt;a href="http://lslwiki.net/lslwiki/wakka.php?wakka=llParcelMediaCommandList"&gt;llParcelMediaCommandList()&lt;/a&gt; which I hadn't noticed before: &lt;span style="font-weight: bold;"&gt;PARCEL_MEDIA_COMMAND_AGENT&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;When you pass this option in, followed by an avatar's UUID, it doesn't change the media settings for the parcel, like it normally would - it changes the settings just for the specified avatar.&lt;br /&gt;&lt;br /&gt;So if you wanted someone to see a random video when he or she touches a prim, but not affect anyone else, you might do something like this:&lt;br /&gt;&lt;br /&gt;&lt;pre class="lsl"&gt;&lt;span class="datatype"&gt;key&lt;/span&gt; theVideoTexture = &lt;span class="text"&gt;"12345678-9abc-def0-1234-56789abcdef0"&lt;/span&gt;;&lt;br /&gt;&lt;span class="datatype"&gt;string&lt;/span&gt; VideoBaseUrl = &lt;span class="text"&gt;"http://www.myserver.com/videos/"&lt;/span&gt;;&lt;br /&gt;&lt;span class="datatype"&gt;list&lt;/span&gt; RandomVideos = [ &lt;span class="text"&gt;"video1.mov"&lt;/span&gt;, &lt;span class="datatype"&gt;"video2.mov"&lt;/span&gt;,&lt;br /&gt;                     &lt;span class="text"&gt;"video3.mov"&lt;/span&gt;, &lt;span class="text"&gt;"video4.mov"&lt;/span&gt; ];&lt;br /&gt;&lt;br /&gt;PlayVideo( &lt;span class="datatype"&gt;key&lt;/span&gt; theAvatar ) {&lt;br /&gt;   &lt;span class="datatype"&gt;integer&lt;/span&gt; VideoCount = &lt;span class="llfunction"&gt;llGetListLength&lt;/span&gt;( RandomVideos );&lt;br /&gt;   &lt;span class="datatype"&gt;integer&lt;/span&gt; theVideo = (&lt;span class="datatype"&gt;integer&lt;/span&gt;) &lt;span class="llfunction"&gt;llFrand&lt;/span&gt;( VideoCount );&lt;br /&gt;   &lt;span class="datatype"&gt;string&lt;/span&gt; VideoName = &lt;span class="llfunction"&gt;llList2String&lt;/span&gt;( RandomVideos, theVideo );&amp;nbsp;&amp;nbsp;&lt;br /&gt;   llParcelMediaCommandList([&lt;br /&gt;       &lt;span class="constant"&gt;PARCEL_MEDIA_COMMAND_AGENT&lt;/span&gt;, theAvatar,&lt;br /&gt;       &lt;span class="constant"&gt;PARCEL_MEDIA_COMMAND_TEXTURE&lt;/span&gt;, theVideoTexture,&lt;br /&gt;       &lt;span class="constant"&gt;PARCEL_MEDIA_COMMAND_URL&lt;/span&gt;, VideoBaseUrl+VideoName,&lt;br /&gt;       &lt;span class="constant"&gt;PARCEL_MEDIA_COMMAND_LOOP&lt;/span&gt;&lt;br /&gt;   ]);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="state"&gt;default&lt;/span&gt; {&lt;br /&gt;&lt;br /&gt;   &lt;span class="event"&gt;touch_start&lt;/span&gt;( &lt;span class="datatype"&gt;integer&lt;/span&gt; numTouchers ) {&lt;br /&gt;       &lt;span class="datatype"&gt;integer&lt;/span&gt; i;&lt;br /&gt;       &lt;span class="keyword"&gt;for&lt;/span&gt; (i = 0; i &amp;lt; numTouchers; ++i) {&lt;br /&gt;           PlayVideo( &lt;span class="llfunction"&gt;llDetectedKey&lt;/span&gt;( i ));&lt;br /&gt;       }&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;Even though the object is affecting an avatar, and not the parcel, it still follows the parcel media permissions rules. If you don't own the land the object's on, the object must be deeded to the land's group - so it's a good idea to include some way for the object to delete itself when you want it to.  The video texture should be the UUID of a texture on the prim that will be replaced by the video.&lt;br /&gt;&lt;br /&gt;Yesterday, I wrote a video vendor kiosk, similar in operation to some of the JEVN vendors (a main static display button/pay receiver, four smaller buttons for changing the product on the main button, and Previous/Next buttons), with the addition of a large video screen which will show a movie of whatever product is on the main static display.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_WEXTWQoa4_c/RsMTquhzKeI/AAAAAAAAAKg/mY_iq0bt2EE/s1600-h/VideoKiosk1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_WEXTWQoa4_c/RsMTquhzKeI/AAAAAAAAAKg/mY_iq0bt2EE/s400/VideoKiosk1.jpg" alt="" id="BLOGGER_PHOTO_ID_5098940827878762978" border="0" /&gt;&lt;/a&gt;Because it uses the &lt;span style="font-weight: bold;"&gt;PARCEL_MEDIA_COMMAND_AGENT&lt;/span&gt; option, it works without affecting video for any other residents in the parcel, so it doesn't require the parcel to be subdivided to the shop or booth the vendor is in. :)&lt;br /&gt;&lt;br /&gt;Configuration is via notecard, but with all the functionality I put into it, it quickly runs out of space - with only twelve products in the vendor (including landmark, vendor textures, info notecards, and sometimes multiple items per product), available script memory is down to less than 2K. I guess the next step would be a networked vendor which communicates with a Web server, rather than keeping the lists of product names, prices, descriptions, textures, video URLs, and so forth in the script memory.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-4140588159238703224?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/4140588159238703224/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=4140588159238703224' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/4140588159238703224'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/4140588159238703224'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/08/more-fun-with-media.html' title='More Fun with Media'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_WEXTWQoa4_c/RsMTquhzKeI/AAAAAAAAAKg/mY_iq0bt2EE/s72-c/VideoKiosk1.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-9196264074669279580</id><published>2007-08-13T12:55:00.000-05:00</published><updated>2007-08-13T13:06:37.365-05:00</updated><title type='text'>Voice on Linux - partway there</title><content type='html'>Somebody on the Linux Client Users group mentioned a wrapper script to run the Windows voice client in WINE, providing limited functionality of the voice client under Linux. I &lt;a href="http://jira.secondlife.com/browse/VWR-2041"&gt;found the script&lt;/a&gt; attached to an issue in JIRA, then downloaded the Windows client, extracted SLVoice.exe and the libraries it depends on, and copied them into my secondlife directory.&lt;br /&gt;&lt;br /&gt;It works... kind of. It takes forever to get connected to voice, and it disconnects after a very short time - but I did manage to hear somebody say part of a sentence!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-9196264074669279580?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/9196264074669279580/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=9196264074669279580' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/9196264074669279580'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/9196264074669279580'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/08/voice-on-linux-partway-there.html' title='Voice on Linux - partway there'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-962879367836035608</id><published>2007-08-05T23:58:00.001-05:00</published><updated>2007-08-06T08:16:36.834-05:00</updated><title type='text'>HUD Fever</title><content type='html'>A couple of days ago, someone posted a comment on one of my entries, saying that she'd seen the emotion buttons running down the side of some of my screen shots, and asking what HUD lets me do it.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_WEXTWQoa4_c/RrawbehzKdI/AAAAAAAAAKY/oeSKfz0kzmw/s1600-h/Jump+Assist+HUD.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp0.blogger.com/_WEXTWQoa4_c/RrawbehzKdI/AAAAAAAAAKY/oeSKfz0kzmw/s400/Jump+Assist+HUD.jpg" alt="" id="BLOGGER_PHOTO_ID_5095454014514080210" border="0" /&gt;&lt;/a&gt;As a matter of fact, it's a HUD I wrote a few months ago (and which, quite coincidentally, I had put up for sale in &lt;a href="secondlife://Flotsam%20Beach/59/210/22/"&gt;my store&lt;/a&gt; only a couple of hours before she posted her comment).  I love HUDs, and if you design them properly, they can actually be really simple. The example HUD I made for LSL205 (a jump assistance HUD, shown at the right, which lets you select from five different jump strengths) consisted of six prims, one texture, a main script of 19 lines (not including comments and blank lines), and a 28-line script that goes into each of the five buttons.&lt;br /&gt;&lt;br /&gt;I've made quite a few HUDs, come to think of it. There's the class schedule HUD I blogged about a little while ago (which is actually pretty complex, admittedly); the aforementioned emotion HUD; a HUD I made for landscaping (I &lt;span style="font-style: italic;"&gt;loathe&lt;/span&gt; the built-in "Edit Land" tool, I always end up making things look worse than when they started); a favorite-places teleporter HUD; a "PowerPoint" controller HUD...&lt;br /&gt;&lt;br /&gt;Students seemed to have so much fun with the jump assist HUD that I'm planning to teach a workshop just on designing and making HUDs - the one in LSL205 was really only a demonstration of link messages, and I didn't really get into the planning, texturing or physical construction of the HUD.&lt;br /&gt;&lt;br /&gt;Now I just need to decide what the example HUD for the workshop should do. Time to hit the LSL Wiki and look at function names until an idea germinates, I guess.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-962879367836035608?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/962879367836035608/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=962879367836035608' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/962879367836035608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/962879367836035608'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/08/hud-fever.html' title='HUD Fever'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_WEXTWQoa4_c/RrawbehzKdI/AAAAAAAAAKY/oeSKfz0kzmw/s72-c/Jump+Assist+HUD.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-2978872408576535125</id><published>2007-08-04T01:46:00.000-05:00</published><updated>2007-08-04T02:08:16.626-05:00</updated><title type='text'>Video Vendors</title><content type='html'>One of the problems I've found with trying to sell jewelry is that, especially for the finely-detailed pieces, a static image on a vendor doesn't really do it justice. You want to give the customer the ability to see it from all angles, and close up.  Even worse - if you're selling a scripted object, how do you show it in action?&lt;br /&gt;&lt;br /&gt;So today I wrote a simple "video vendor" system for &lt;a href="secondlife://Flotsam%20Beach/59/210/22/"&gt;my store&lt;/a&gt; - individual vendor boxes which, when touched, communicate with a video screen.  The screen sets the parcel's video media URL, resets the texture repeat and offsets on the main face to match the video's dimensions (so that "Auto scale content" doesn't need to be enabled), and starts the video in looped mode.&lt;br /&gt;&lt;br /&gt;Maybe one day I'll even get to see it in action.  The 1.18.1(2) release of the viewer purportedly added streaming video support for Linux users, but many of us can't get it to work.&lt;br /&gt;&lt;br /&gt;(Next, multi-vendors and networked vendors!  Muah ha ha ha ha!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-2978872408576535125?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/2978872408576535125/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=2978872408576535125' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/2978872408576535125'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/2978872408576535125'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/08/video-vendors.html' title='Video Vendors'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-5089308494015805126</id><published>2007-07-26T19:25:00.000-05:00</published><updated>2007-07-26T19:33:39.075-05:00</updated><title type='text'>Shameless Vote Whoring</title><content type='html'>Now that the Mozilla library has been incorporated into the Second Life viewer, it strikes me that it might be possible for the non-working llSetPrimURL() and llRefreshPrimURL() functions &amp;mdash; which were intended to display a Web page on a prim, but which (to my knowledge) have never actually worked &amp;mdash; could be made to trigger a client-side retrieval of the specified Web page, which would then be rendered to a (local) texture and displayed on the prim, in much the same way that media textures are.&lt;br /&gt;&lt;br /&gt;And since the page retrieval would be done client-side, it wouldn't cause any appreciable lag on the Second Life servers.&lt;br /&gt;&lt;br /&gt;I've created a JIRA feature request about this.  If you think it would be nifty too, &lt;a href="https://jira.secondlife.com/browse/SVC-469"&gt;please vote for it!&lt;/a&gt;  Tell your friends! Tell all your alts!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-5089308494015805126?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/5089308494015805126/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=5089308494015805126' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/5089308494015805126'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/5089308494015805126'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/07/shameless-vote-whoring.html' title='Shameless Vote Whoring'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-3074626604310372217</id><published>2007-07-25T13:48:00.000-05:00</published><updated>2007-07-25T13:53:45.852-05:00</updated><title type='text'>Why was I not told this?</title><content type='html'>You can put a script into a prim without having it automatically start running, by holding down the CTRL key as you drag it from your inventory.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-3074626604310372217?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/3074626604310372217/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=3074626604310372217' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/3074626604310372217'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/3074626604310372217'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/07/why-was-i-not-told-this.html' title='Why was I not told this?'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-1508260365579104350</id><published>2007-07-23T19:06:00.000-05:00</published><updated>2007-07-24T06:43:26.689-05:00</updated><title type='text'>Yet More Schedule Stuff</title><content type='html'>In between working on classes (I'm up to five now; the latest one will debut Thursday evening, and will cover dialogs, link messages, HTTP and XML-RPC communication), I've been back at work on more schedule stuff.&lt;br /&gt;&lt;br /&gt;My latest device is a HUD for students, showing the next five classes scheduled to be taught at Rockcliffe:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_WEXTWQoa4_c/RqVC1-hzKVI/AAAAAAAAAJY/IaikNBihswg/s1600-h/RUSLC-Schedule-HUD-1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_WEXTWQoa4_c/RqVC1-hzKVI/AAAAAAAAAJY/IaikNBihswg/s400/RUSLC-Schedule-HUD-1.jpg" alt="" id="BLOGGER_PHOTO_ID_5090548448897476946" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Unfortunately, for the text to be readable, it does have to take up a hefty amount of screen space, so the Rockcliffe logo serves as a minimize/restore button:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_WEXTWQoa4_c/RqVC1-hzKWI/AAAAAAAAAJg/KGlGVYnW1fk/s1600-h/RUSLC-Schedule-HUD-2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_WEXTWQoa4_c/RqVC1-hzKWI/AAAAAAAAAJg/KGlGVYnW1fk/s400/RUSLC-Schedule-HUD-2.jpg" alt="" id="BLOGGER_PHOTO_ID_5090548448897476962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Features include:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;"Class Info" buttons cause it to tell its owner more information about the selected class (full class name, date and time, teacher's name, location, duration, etc.)&lt;/li&gt;&lt;li&gt;"Teleport!" buttons bring up the Map screen, with the classroom location selected&lt;/li&gt;&lt;li&gt;The green "?" button delivers a notecard with usage information&lt;/li&gt;&lt;li&gt;The "Preferences" button brings up a dialog with several options:&lt;/li&gt;&lt;ul&gt;&lt;li&gt;Alarms On - causes the HUD to play a sound and pop up a dialog indicating that one or more classes will be starting in ten to fifteen minutes (and identifying which classes)&lt;/li&gt;&lt;li&gt;Alarms Off - suppresses the class notification&lt;/li&gt;&lt;li&gt;TP to RUSLC - brings up the Map screen, with Rockcliffe's reception area selected&lt;/li&gt;&lt;li&gt;RU Website - Loads the Rockcliffe University Web site into the user's browser&lt;/li&gt;&lt;li&gt;Schedule - Loads the Rockcliffe class schedule into the user's browser&lt;/li&gt;&lt;/ul&gt;&lt;/ul&gt;But the stuff that was the most fun to do is all behind the scenes:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Checks the schedule about once every five minutes&lt;br /&gt;&lt;/li&gt;&lt;li&gt;If a new version is released, the HUD is automatically updated the next time the user visits the Rockcliffe sim&lt;/li&gt;&lt;li&gt;All the hardcoded URLs (the location the script the HUD communicates with to download the schedule, the Rockcliffe Web site, and the schedule Web page) can be changed by the server-side script without requiring a full update, in case of a site move, page relocation, etc.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;When downloading the schedule, it passes version information to the server-side script, so that new features may be implemented without breaking older versions of the HUD&lt;/li&gt;&lt;/ul&gt;One of these days, I will actually finish building my house and make more jewelry...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-1508260365579104350?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/1508260365579104350/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=1508260365579104350' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/1508260365579104350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/1508260365579104350'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/07/yet-more-schedule-stuff.html' title='Yet More Schedule Stuff'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_WEXTWQoa4_c/RqVC1-hzKVI/AAAAAAAAAJY/IaikNBihswg/s72-c/RUSLC-Schedule-HUD-1.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-2624121825918034707</id><published>2007-06-25T09:15:00.000-05:00</published><updated>2007-06-25T10:16:50.538-05:00</updated><title type='text'>Fun fun fun!</title><content type='html'>In between business trips and sickness, I've had precious little SL time lately.  And what time I've had has been spent on Rockcliffe University.&lt;br /&gt;&lt;br /&gt;First, I've been developing and teaching classes in scripting (three have been completed, and I'm nearly done with the fourth).  It's shocking how much time it takes to come up with one class; even though I've already got the first twelve classes outlined, there's lecture text to write (and proofread, and verify to make sure every sentence is accurate), examples to script and test, "Powerpoint" slides to create.  And then go through the lecture a couple of times and try to anticipate students' questions, then rework the text to preemptively answer them...&lt;br /&gt;&lt;br /&gt;But since I can't really play in Second Life while I'm on a trip (I tried once, and my laptop overheated and killed the master boot record of the hard drive, so I won't be doing &lt;i&gt;that&lt;/i&gt; again!), I've been working on the class scheduling application, which has been a lot of fun to do.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_WEXTWQoa4_c/Rn_S1pQqw2I/AAAAAAAAAJQ/s-_YAgDXcs0/s1600-h/RUSLC-ScheduleApplication.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_WEXTWQoa4_c/Rn_S1pQqw2I/AAAAAAAAAJQ/s-_YAgDXcs0/s400/RUSLC-ScheduleApplication.png" alt="" id="BLOGGER_PHOTO_ID_5080010723747873634" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;We're getting a dedicated server set up, which will run a whole bunch of off-the-shelf software (Moodle, forums, etc.), but I developed a customized scheduling database in MySQL, with a PHP frontend.  This will display the upcoming schedule in several formats (the simple list as shown here, a calendar view, an RSS feed, etc.), and permits the teachers to post and modify their own classes.  But where it really shines is in its communication with Second Life.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_WEXTWQoa4_c/Rn_S0pQqw1I/AAAAAAAAAJI/VKRbgpF_2j0/s1600-h/NewScheduleBoard.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_WEXTWQoa4_c/Rn_S0pQqw1I/AAAAAAAAAJI/VKRbgpF_2j0/s400/NewScheduleBoard.jpg" alt="" id="BLOGGER_PHOTO_ID_5080010706568004434" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;First, it automatically updates an in-world schedule board.  Classes will disappear from the board fifteen minutes after they've started, and as new classes are added to the database, they appear on the schedule board.  Unless explicitly overridden, each class displays in an alternating color to make it easier to read the board.  After a week or so of testing, I'll be able to replace the current version in the reception area with the new auto-update board.  Another improvement is in primmage: the new board has 33% more characters (80x24, as opposed to 72x20), while still reducing the number of prims by about 20%.&lt;br /&gt;&lt;br /&gt;Another component which I'm working on now is a smaller board which displays the names of the classes currently in progress, with a "Teleport!" button to take a student directly to the classroom.  Other components will include classroom detectors which send the list of students to the database, to keep track of attendance; and tip jars which record the amounts given during a specific class (for sharing the tips between the university and the individual teachers).&lt;br /&gt;&lt;br /&gt;All this is accomplished with the HTTP and XML-RPC functions of the Linden Scripting Language (which will be the subject of one of the classes in my scripting course).&lt;br /&gt;&lt;br /&gt;Maybe one of these days, I'll have enough free time to actually build a house on the land I'm renting!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-2624121825918034707?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/2624121825918034707/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=2624121825918034707' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/2624121825918034707'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/2624121825918034707'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/06/fun-fun-fun.html' title='Fun fun fun!'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_WEXTWQoa4_c/Rn_S1pQqw2I/AAAAAAAAAJQ/s-_YAgDXcs0/s72-c/RUSLC-ScheduleApplication.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-796010474128658414</id><published>2007-06-13T20:55:00.000-05:00</published><updated>2007-06-13T21:00:08.032-05:00</updated><title type='text'>Hate Voice?</title><content type='html'>Switch to Linux!&lt;br /&gt;&lt;br /&gt;Not only is there no Linux voice-enabled client, but the Lindens steadfastly ignore anyone who comments on the official blog to ask about when we'll get one.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-796010474128658414?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/796010474128658414/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=796010474128658414' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/796010474128658414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/796010474128658414'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/06/hate-voice.html' title='Hate Voice?'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-5540297495576032618</id><published>2007-05-24T08:54:00.000-05:00</published><updated>2007-05-24T09:24:43.718-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='texturing'/><category scheme='http://www.blogger.com/atom/ns#' term='building'/><category scheme='http://www.blogger.com/atom/ns#' term='Jewelry'/><title type='text'>...Sculpted jewelry!</title><content type='html'>A really simple set to start out with, while I design more complex things.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_WEXTWQoa4_c/RlWZkpyJxHI/AAAAAAAAAI4/LI_ye7E3lKU/s1600-h/HeartJewelry.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_WEXTWQoa4_c/RlWZkpyJxHI/AAAAAAAAAI4/LI_ye7E3lKU/s400/HeartJewelry.jpg" alt="" id="BLOGGER_PHOTO_ID_5068125810645910642" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The necklace and the earrings, following my tradition, are scripted so the gem and metal colors can be independently changed.  The sculpted heart has my usual nine colors: amethyst, blue topaz, citrine, diamond, emerald, garnet, ruby, sapphire and topaz.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_WEXTWQoa4_c/RlWf25yJxII/AAAAAAAAAJA/IcGgSh_Sb24/s1600-h/HeartTextures.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_WEXTWQoa4_c/RlWf25yJxII/AAAAAAAAAJA/IcGgSh_Sb24/s400/HeartTextures.jpg" alt="" id="BLOGGER_PHOTO_ID_5068132721248289922" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And I finally have a better store location, on Flotsam Beach.  Part of what makes it better is that I can actually make landmarks and SLURLs which &lt;a href="secondlife://Flotsam%20Beach/59/209/22/"&gt;teleport directly there&lt;/a&gt;.  Also it's bigger, it's not stuck in the back corner of a mall with little foot traffic, and it's in a beautiful new themed sim (an Atlantic beach resort).&lt;br /&gt;&lt;br /&gt;I have to design up a nice floor plan, but until that's done I've just stuck vendor boxes on the walls.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-5540297495576032618?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/5540297495576032618/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=5540297495576032618' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/5540297495576032618'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/5540297495576032618'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/05/sculpted-jewelry.html' title='...Sculpted jewelry!'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_WEXTWQoa4_c/RlWZkpyJxHI/AAAAAAAAAI4/LI_ye7E3lKU/s72-c/HeartJewelry.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-1327795312056665943</id><published>2007-05-10T07:34:00.000-05:00</published><updated>2007-05-10T08:00:26.890-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='texturing'/><category scheme='http://www.blogger.com/atom/ns#' term='building'/><category scheme='http://www.blogger.com/atom/ns#' term='Jewelry'/><title type='text'>More sculpted gemstones</title><content type='html'>...and I get back to my Linux machine to discover that they &lt;span style="font-style: italic;"&gt;still&lt;/span&gt; don't have voice chat in Linux!&lt;br /&gt;&lt;br /&gt;Oh well, at least I can play with the sculpted prims on a decent machine for now. I know gemstones are a trivial example of what's possible with sculpted prims, but I'm excited by the thought of more interesting varieties of stones to make jewelry with.&lt;br /&gt;&lt;br /&gt;Last night I started all my computers (even the ancient ones) working on churning out textures.  This is going to take a looong time - my fastest computer is managing about one texture every hour and forty minutes, and I've got a total of 765 textures to go through (85 gem shapes, and 9 colors for each).   So far I've managed to do 62 of them; at this rate, I might have the complete collection finished by the time sculpted prims debut on the main grid.  What I've got so far (click to enlarge):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_WEXTWQoa4_c/RkMTgoI9YII/AAAAAAAAAIo/6nZ9baMETQU/s1600-h/Snapshot_098.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_WEXTWQoa4_c/RkMTgoI9YII/AAAAAAAAAIo/6nZ9baMETQU/s400/Snapshot_098.bmp" alt="" id="BLOGGER_PHOTO_ID_5062911857346306178" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Those are at the default prim size; obviously they can get much smaller.  I'll need to redo the sculpting textures, though - if you bring it all the way to its boundaries, a sculpted prim is about twice the size of an unsculpted one.  These are all spaced one meter apart; even though they're set to 0.5m in each direction, you can see that they're almost touching each other.&lt;br /&gt;&lt;br /&gt;Sculpted prims can't be cut, twisted, dimpled, skewed or otherwise tortured - so the only way to make something smaller is to change the sculpting texture.  For example, rather than making the color range 0-255 in each channel, you can cut the size in half by making the range 64-191.  Of course, reducing the color range also means reducing the accuracy of your model.  There's also a bug at the moment, where color values that get too close to each other turn the sculptures into plain spheres if you get the camera close to them.&lt;br /&gt;&lt;br /&gt;It's odd, but I think the back sides are even prettier than the fronts (click to enlarge):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_WEXTWQoa4_c/RkMTg4I9YJI/AAAAAAAAAIw/0uQxogBhrc4/s1600-h/Snapshot_099.bmp"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_WEXTWQoa4_c/RkMTg4I9YJI/AAAAAAAAAIw/0uQxogBhrc4/s400/Snapshot_099.bmp" alt="" id="BLOGGER_PHOTO_ID_5062911861641273490" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-1327795312056665943?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/1327795312056665943/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=1327795312056665943' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/1327795312056665943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/1327795312056665943'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/05/more-sculpted-gemstones.html' title='More sculpted gemstones'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_WEXTWQoa4_c/RkMTgoI9YII/AAAAAAAAAIo/6nZ9baMETQU/s72-c/Snapshot_098.bmp' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-2218641862148496287</id><published>2007-05-06T17:28:00.000-05:00</published><updated>2007-05-07T06:38:54.530-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='building'/><title type='text'>Sculpted Prims... with POV-Ray?</title><content type='html'>Wouldn't you know, they debuted sculpted prims &lt;span style="font-style: italic;"&gt;and&lt;/span&gt; the Linux voice client on the beta grid while I'm stuck on a business trip with an ancient Dell laptop that barely runs SL, and no 3D software installed?  So I downloaded a copy of &lt;a href="http://www.povray.org/"&gt;POV-Ray&lt;/a&gt; and set to work on the sculpted prims.&lt;br /&gt;&lt;br /&gt;Now, POV-Ray is nowhere near the best choice for this sort of thing.  It's just a renderer - you have to do all your modeling in another application, or by describing in plain text the mathematical shapes which make up the model.  There's really no good way to accurately turn a CSG model into a texture suitable for sculpted prims.  But I like a challenge, so I faked it as best I could.&lt;br /&gt;&lt;br /&gt;First I made a texture which, when applied to a model, would give it a color based on its position along each of the three axes.  The red component went from 0 where X was -0.5, through 255 where X was +0.5.  Green went from 0 to 255 along the Z axis, again bounded from -0.5 to +0.5 (Y and Z are swapped in POV-Ray from the way they are in Second Life).  And blue went from 0-255 along the Y axis.&lt;br /&gt;&lt;br /&gt;But then the problem was: how to convert this into a texture which could be applied to a sculpted prim in Second Life?&lt;br /&gt;&lt;br /&gt;Because the sculpted prim is mapped like a sphere, the first thing which occurred to me was to put a "spherical" camera in the center of the model, set the model to show up in reflections but be invisible to camera, and then surround the model with a 100% reflective sphere.  This is far from perfect - as I discovered, most "undercuts" in the model don't work properly.  But as long as the model is mostly convex, it works pretty well.  For example, here's a simple bottle I made:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_WEXTWQoa4_c/Rj5aooI9YCI/AAAAAAAAAH4/8QpskFzI_LE/s1600-h/Bottles.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_WEXTWQoa4_c/Rj5aooI9YCI/AAAAAAAAAH4/8QpskFzI_LE/s400/Bottles.jpg" alt="" id="BLOGGER_PHOTO_ID_5061582685227278370" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It's just a 2D Bézier spline rotated around an axis.  Here's the POV-Ray code for it:&lt;br /&gt;&lt;br /&gt;&lt;pre style="border: 1px solid black; margin-left: 0.25in; margin-right: 0.25in; font-size: 8pt; line-height: 10pt; padding-left: 4pt; padding-right: 4pt;"&gt;&lt;br /&gt;#declare t_sculpty = texture {&lt;br /&gt; pigment {&lt;br /&gt;   average&lt;br /&gt;   pigment_map {&lt;br /&gt;     [1 gradient x color_map {[0 rgb 0][1 rgb &lt;1,0,0&gt;]}]&lt;br /&gt;     [1 gradient y color_map {[0 rgb 0][1 rgb &lt;0,0,1&gt;]}]&lt;br /&gt;     [1 gradient z color_map {[0 rgb 0][1 rgb &lt;0,1,0&gt;]}]&lt;br /&gt;   }&lt;br /&gt;   translate -0.5&lt;br /&gt; }&lt;br /&gt; finish { ambient 3 diffuse 0 }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;lathe { bezier_spline 24,&lt;br /&gt; &lt;0.000,0.005&gt;, &lt;0.000,0.005&gt;, &lt;0.102,0.005&gt;, &lt;0.102,0.005&gt;,&lt;br /&gt; &lt;0.102,0.005&gt;, &lt;0.102,0.102&gt;, &lt;0.060,0.154&gt;, &lt;0.214,0.212&gt;,&lt;br /&gt; &lt;0.214,0.212&gt;, &lt;0.370,0.270&gt;, &lt;0.450,0.307&gt;, &lt;0.450,0.410&gt;,&lt;br /&gt; &lt;0.450,0.410&gt;, &lt;0.450,0.511&gt;, &lt;0.450,0.957&gt;, &lt;0.450,0.974&gt;,&lt;br /&gt; &lt;0.450,0.974&gt;, &lt;0.450,0.990&gt;, &lt;0.371,0.997&gt;, &lt;0.352,0.990&gt;,&lt;br /&gt; &lt;0.352,0.990&gt;, &lt;0.332,0.985&gt;, &lt;0.175,0.975&gt;, &lt;0.000,0.975&gt;&lt;br /&gt; sturm&lt;br /&gt; translate y*-0.5&lt;br /&gt; scale &lt;1,-1,1&gt;&lt;br /&gt; texture { t_sculpty }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;sphere { 0, 1.001 inverse&lt;br /&gt; finish { ambient 0 diffuse 0 reflection 1 }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;camera { spherical location 0 look_at z*-1 }&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;(I got the points for the spline by drawing a curve in The GIMP, then hovering the mouse over all the control points and handles in sequence.)  If you render that out to a 64x64 image (using the highest antialiasing you can!), you get this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_WEXTWQoa4_c/Rj5geII9YGI/AAAAAAAAAIY/1CvzpqD_NK8/s1600-h/Bottle-sculpt.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_WEXTWQoa4_c/Rj5geII9YGI/AAAAAAAAAIY/1CvzpqD_NK8/s400/Bottle-sculpt.jpg" alt="" id="BLOGGER_PHOTO_ID_5061589101908418658" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;If you then bring that image into Second Life and use it for the sculpted prim, it'll be a really fat bottle.  (The closer you can get the model to the boundaries of ±0.5 meters, the better the model will ultimately look.)  So I made the bottle as fat as possible in POV-Ray, and then scaled down the prim's X and Y size in Second Life.&lt;br /&gt;&lt;br /&gt;So that was amusing, but not very challenging - time to try something else!  Admittedly, I'm not a great POV-Ray modeler; fortunately, one of my Gmail accounts had a nifty model I'd gotten from another POV-Ray user, and after a little bit of work, I got bits of it into Second Life:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_WEXTWQoa4_c/Rj5aooI9YDI/AAAAAAAAAIA/nqZzy19CMYI/s1600-h/SculptedEnterprise1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_WEXTWQoa4_c/Rj5aooI9YDI/AAAAAAAAAIA/nqZzy19CMYI/s400/SculptedEnterprise1.jpg" alt="" id="BLOGGER_PHOTO_ID_5061582685227278386" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It's untextured yet, but I think it's still pretty recognizable.  Only the primary and secondary hulls are sculpted; the engine nacelles, pylons, "deflector dish" and top/bottom "sensor domes" are regular prims.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_WEXTWQoa4_c/Rj5ao4I9YEI/AAAAAAAAAII/RXxsCz6EYP0/s1600-h/SculptedEnterprise2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_WEXTWQoa4_c/Rj5ao4I9YEI/AAAAAAAAAII/RXxsCz6EYP0/s400/SculptedEnterprise2.jpg" alt="" id="BLOGGER_PHOTO_ID_5061582689522245698" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Because the sculpted prims use a grid of 32x32 points, some of the fine details get lost.  You can see the details at the front of the secondary hull aren't very crisp; neither is the shuttlecraft bay at the back:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_WEXTWQoa4_c/Rj5ao4I9YFI/AAAAAAAAAIQ/giCfzKPbp04/s1600-h/SculptedEnterprise3.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_WEXTWQoa4_c/Rj5ao4I9YFI/AAAAAAAAAIQ/giCfzKPbp04/s400/SculptedEnterprise3.jpg" alt="" id="BLOGGER_PHOTO_ID_5061582689522245714" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Still, it's an awesome addition to the SL modeler's arsenal (and this is only version one of the sculpted prims; Qarl Linden is busy at work on version two).  But it looks like I need to try fighting my way through &lt;a href="http://www.blender.org/"&gt;Blender&lt;/a&gt;'s bizarre interface again if I want to do this right, as I doubt there'll be an exporter for &lt;a href="http://www.hash.com/"&gt;Animation:Master&lt;/a&gt; anytime soon...&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Addendum&lt;/b&gt;: And now a heart-shaped gemstone, textured appropriately!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_WEXTWQoa4_c/Rj8L7II9YHI/AAAAAAAAAIg/ZXAB0EDF8es/s1600-h/SculptedHeartShapedGem.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_WEXTWQoa4_c/Rj8L7II9YHI/AAAAAAAAAIg/ZXAB0EDF8es/s400/SculptedHeartShapedGem.jpg" alt="" id="BLOGGER_PHOTO_ID_5061777616612974706" border="0" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-2218641862148496287?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/2218641862148496287/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=2218641862148496287' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/2218641862148496287'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/2218641862148496287'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/05/sculpted-prims-with-pov-ray.html' title='Sculpted Prims... with POV-Ray?'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_WEXTWQoa4_c/Rj5aooI9YCI/AAAAAAAAAH4/8QpskFzI_LE/s72-c/Bottles.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-2909710967709726229</id><published>2007-04-20T23:51:00.000-05:00</published><updated>2007-04-21T00:44:16.833-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='texturing'/><category scheme='http://www.blogger.com/atom/ns#' term='building'/><category scheme='http://www.blogger.com/atom/ns#' term='scripting'/><title type='text'>Better Mousetrap</title><content type='html'>The schedule board at Rockcliffe University, while it looked nice, I'm told it was quite horrible to actually use.  It required all sorts of strange configuration via notecards, making the weekly schedule change a nightmare.&lt;br /&gt;&lt;br /&gt;I thought there had to be a better way.  So I made a similar board - by tapering a box and then mashing it flat, three different letters could be put on a single prim.  But instead of arcane configuration, I set it up so you could simply drop a notecard on it, and the text of the notecard would be displayed on the schedule board.  Not too bad!&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_WEXTWQoa4_c/Rimc6szz5aI/AAAAAAAAAHo/WLMdjB5EPhs/s1600-h/ScheduleBoard1.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp0.blogger.com/_WEXTWQoa4_c/Rimc6szz5aI/AAAAAAAAAHo/WLMdjB5EPhs/s200/ScheduleBoard1.jpg" alt="" id="BLOGGER_PHOTO_ID_5055744588974908834" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;But it was kind of hard to read, and I thought it might be nice if you could change the colors for each line (or groups of lines by day), and added in a &lt;tt&gt;#color&lt;/tt&gt; command which wouldn't be printed, but would set every subsequent line to the specified color, until it was overridden by another &lt;tt&gt;#color&lt;/tt&gt; command.  (Shown to the right; click image for a larger view.  Classes which had already taken place appear in dim characters.)&lt;br /&gt;&lt;br /&gt;And yet I still wasn't satisfied.  I was already planning a Web-based schedule database, so the teachers could go in and schedule their classes, which would then appear on the &lt;a href="http://www.urockcliffe.ca/"&gt;Web site's calendar&lt;/a&gt; - so why not also automatically update the board whenever the schedule changed, or a class was over?&lt;br /&gt;&lt;br /&gt;This required delving into the XML-RPC functions - which was an interesting learning experience in its own right.  But while I was doing that, someone on the Scripters of Second Life group mentioned offhandedly that you could get five letters onto a prim.  Well, that sounded like a fun challenge - not to mention cutting the number of prims by 40% - so I set about trying to do so.&lt;br /&gt;&lt;br /&gt;Here's a graphic showing the stages of making a 5-letter text segment:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_WEXTWQoa4_c/RimYmMzz5ZI/AAAAAAAAAHg/a3RJjWtaSzA/s1600-h/5-character-prim.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_WEXTWQoa4_c/RimYmMzz5ZI/AAAAAAAAAHg/a3RJjWtaSzA/s400/5-character-prim.jpg" alt="" id="BLOGGER_PHOTO_ID_5055739838741079442" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;First, we start with a prism.  This is the fourth icon on the "Create" pane, between the pyramid and the cylinder.  I've colored the front faces red and black just for reference.&lt;br /&gt;&lt;br /&gt;Second, set the Taper X and Taper Y both to zero, to get rid of the point on the top and make the edges straight.&lt;br /&gt;&lt;br /&gt;Third, set the Path Cut to B=0.2, E=0.8.  This cuts a wedge out of the front of the prism, giving us the faces which I've colored green and white.  Those particular values leave the red and black faces each taking up one-fifth of the prim's width.&lt;br /&gt;&lt;br /&gt;Fourth, set the Hollow to 65.  This cuts into the green and white faces, showing us the interior between them (colored blue.&lt;br /&gt;&lt;br /&gt;Fifth, set the X size all the way down to 0.010, which flattens out the prim as much as possible.&lt;br /&gt;&lt;br /&gt;And sixth, scale the prim so that it gives us a good height-to-width ratio for text.  I scaled it to &lt;0.010,0.964,0.250&gt; so that the letter faces were the same size as the ones on my previous version.&lt;br /&gt;&lt;br /&gt;Next came setting the texture offsets.  If you just tried to put a texture on the faces, they'd look okay on the second and fourth faces, but stretched out somewhat on the first and fifth faces, and REALLY stretched (and backwards!) on the middle face.&lt;br /&gt;&lt;br /&gt;So if we were just going to apply a texture with a single letter to each, we'd have to change the texture repeats and offsets.  From left to right:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Repeat 2.5 horizontal, 1 vertical; offset -0.25 horizontal, 0 vertical.&lt;/li&gt;&lt;li&gt;Leave at the defaults (repeat 1 horizontal, 1 vertical; offset 0 horizontal, 0 vertical).&lt;/li&gt;&lt;li&gt;Repeat 15.4 horizontal (flipped), 1 vertical; offset -0.2 horizontal, 0 vertical.&lt;/li&gt;&lt;li&gt;Leave at the defaults.&lt;/li&gt;&lt;li&gt;Repeat 2.5 horizontal, 1 vertical; offset 0.25 horizontal, 0 vertical.&lt;/li&gt;&lt;/ol&gt;With those settings, you would just need to swap the textures for each face in order to display a different letter.  (I did it somewhat differently, though - I made a texture with the lower 128 ASCII characters arranged in a grid, which requires a bit more computation every time the letters change.)&lt;br /&gt;&lt;br /&gt;I'm still writing the database portion of the system, but to test the XML-RPC communication, I wrote a quick script on my Web site to contact the board in-world, display the version and time, and then include the output of the Linux &lt;tt&gt;fortune&lt;/tt&gt; program, adding &lt;tt&gt;#color&lt;/tt&gt; commands as appropriate:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_WEXTWQoa4_c/RimiE8zz5bI/AAAAAAAAAHw/5hb-dRO-gKU/s1600-h/ScheduleBoard2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_WEXTWQoa4_c/RimiE8zz5bI/AAAAAAAAAHw/5hb-dRO-gKU/s400/ScheduleBoard2.jpg" alt="" id="BLOGGER_PHOTO_ID_5055750262626706866" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now I just need to add in sequence numbers so that if the Web server doesn't receive a response to its communication, it can resend it, and the schedule board won't duplicate the information if it already received it but its response was lost. And then finish writing the database front-end, of course.  But still, not bad for a couple days' work!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-2909710967709726229?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/2909710967709726229/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=2909710967709726229' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/2909710967709726229'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/2909710967709726229'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/04/better-mousetrap.html' title='Better Mousetrap'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_WEXTWQoa4_c/Rimc6szz5aI/AAAAAAAAAHo/WLMdjB5EPhs/s72-c/ScheduleBoard1.jpg' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-8209969817504978192</id><published>2007-04-04T19:27:00.000-05:00</published><updated>2007-04-04T19:59:05.945-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='building'/><category scheme='http://www.blogger.com/atom/ns#' term='sightseeing'/><category scheme='http://www.blogger.com/atom/ns#' term='envy'/><title type='text'>Fantastic Inspiration</title><content type='html'>In &lt;a href="http://slurl.com/secondlife/Spaceport%20Bravo/37/201/22/"&gt;Spaceport Bravo&lt;/a&gt; is the most amazing build I've seen in Second Life so far: a detailed reproduction of the Apollo Lunar Excursion Module.  I thought I was obsessive about detail, but the scope of this build just awed me.&lt;br /&gt;&lt;br /&gt;Lora Chadbourne, the creator of "Snowflake" (as she calls it) tells me it comprises 2370 prims and took her a month to build.  And it shows, from the bracing on the inside of the hatch right down to the prim bolt heads.&lt;br /&gt;&lt;br /&gt;A view of the exterior, compared with a picture I took of the real thing at the Kennedy Space Center:&lt;br /&gt;&lt;table style="margin: 0px auto 10px; display: block; text-align: center; white-space: nowrap; border:none"&gt;&lt;tr&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_WEXTWQoa4_c/RhRHX_K_xZI/AAAAAAAAAHA/D0O4knMKz3A/s1600-h/LEM_02.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_WEXTWQoa4_c/RhRHX_K_xZI/AAAAAAAAAHA/D0O4knMKz3A/s200/LEM_02.jpg" alt="" id="BLOGGER_PHOTO_ID_5049739559609288082" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_WEXTWQoa4_c/RhRHX_K_xYI/AAAAAAAAAG4/fc5WuvVz1Vk/s1600-h/LEM_01.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp0.blogger.com/_WEXTWQoa4_c/RhRHX_K_xYI/AAAAAAAAAG4/fc5WuvVz1Vk/s200/LEM_01.jpg" alt="" id="BLOGGER_PHOTO_ID_5049739559609288066" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Looking in through the front hatch:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_WEXTWQoa4_c/RhRHYPK_xaI/AAAAAAAAAHI/3Yg0W6QAcTs/s1600-h/LEM_05.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_WEXTWQoa4_c/RhRHYPK_xaI/AAAAAAAAAHI/3Yg0W6QAcTs/s200/LEM_05.jpg" alt="" id="BLOGGER_PHOTO_ID_5049739563904255394" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;And the control panels at which the astronauts stood (again compared with the real thing):&lt;br /&gt;&lt;table style="margin: 0px auto 10px; display: block; text-align: center; white-space: nowrap; border:none"&gt;&lt;tr&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_WEXTWQoa4_c/RhRHYfK_xcI/AAAAAAAAAHY/X0hoMn87jn4/s1600-h/LEM_04.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_WEXTWQoa4_c/RhRHYfK_xcI/AAAAAAAAAHY/X0hoMn87jn4/s200/LEM_04.jpg" alt="" id="BLOGGER_PHOTO_ID_5049739568199222722" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_WEXTWQoa4_c/RhRHYfK_xbI/AAAAAAAAAHQ/j4jTJI81Nxk/s1600-h/LEM_03.jpg"&gt;&lt;img style="cursor: pointer;" src="http://bp2.blogger.com/_WEXTWQoa4_c/RhRHYfK_xbI/AAAAAAAAAHQ/j4jTJI81Nxk/s200/LEM_03.jpg" alt="" id="BLOGGER_PHOTO_ID_5049739568199222706" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;br /&gt;Utterly amazing, humbling and inspiring.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-8209969817504978192?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/8209969817504978192/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=8209969817504978192' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/8209969817504978192'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/8209969817504978192'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/04/fantastic-inspiration.html' title='Fantastic Inspiration'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_WEXTWQoa4_c/RhRHX_K_xZI/AAAAAAAAAHA/D0O4knMKz3A/s72-c/LEM_02.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-7590774709324221614</id><published>2007-04-02T06:16:00.000-05:00</published><updated>2007-04-02T06:18:05.663-05:00</updated><title type='text'>In the Webcomics</title><content type='html'>&lt;span style="font-style: italic;"&gt;Sore Thumbs&lt;/span&gt; seems to have &lt;a href="http://sorethumbsonline.com/d/20070402.html"&gt;some familiarity with Second Life&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-7590774709324221614?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/7590774709324221614/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=7590774709324221614' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/7590774709324221614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/7590774709324221614'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/04/in-webcomics.html' title='In the Webcomics'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-1409915524726174886</id><published>2007-03-08T12:46:00.000-05:00</published><updated>2007-03-08T13:31:52.114-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='miscellaneous'/><category scheme='http://www.blogger.com/atom/ns#' term='sightseeing'/><title type='text'>Easily Amused</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_WEXTWQoa4_c/RfBL-aK1sEI/AAAAAAAAAGs/pCgnSW3Ly8Q/s1600-h/CheatingStatue.jpg"&gt;&lt;img style="margin: 0pt 0pt 10px 10px; float: right; cursor: pointer;" src="http://bp0.blogger.com/_WEXTWQoa4_c/RfBL-aK1sEI/AAAAAAAAAGs/pCgnSW3Ly8Q/s400/CheatingStatue.jpg" alt="" id="BLOGGER_PHOTO_ID_5039611518576341058" border="0" /&gt;&lt;/a&gt;I like to stay logged into SL while I'm at work.  (Addicted?  Me?)  With friends in different time zones, it's nice to have the option of hearing the IM chime if they want to talk to me.  But of course while I'm working in RL, my avatar just sits there doing nothing.&lt;br /&gt;&lt;br /&gt;So I made a stone pillar with the "birth-of-venus" animation in it, made a set of skins with the same texture as the pillar, and park myself on it in the &lt;a href="http://slurl.com/Rockcliffe%20I/97/25/27/"&gt;Rockcliffe University arts center&lt;/a&gt; when I know I'm going to be away for a while.  Of course I still breathe and blink, and my name still shows up above my head, so it's obvious that I'm an avatar and not a true work of art like you can find at &lt;a href="http://slurl.com/Tompson/153/97/100/"&gt;Second Louvre&lt;/a&gt; — but it's a more amusing (and decorative) way to go AFK than just standing there slumped forward.&lt;br /&gt;&lt;br /&gt;On a completely unrelated topic, while the main grid was having asset-related issues yesterday, I logged in to the test grid and explored the sewers and tunnels of &lt;a href="http://slurl.com/Gibson/192/233/106/"&gt;Nexus Prime&lt;/a&gt;.  I don't know whether or not it's under active development as a game-within-Second-Life, but what I found there reminded me quite a bit of &lt;a href="http://en.wikipedia.org/wiki/Deus_Ex"&gt;&lt;span style="font-style: italic;"&gt;Deus Ex&lt;/span&gt;&lt;/a&gt; (which is still my favorite computer game, even all these years after its release).  But with so many twisty dark passages, all alike, I'm sure I haven't seen the whole thing.  Even the "always turn right" method doesn't work when you've got passages going up and down as well.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-1409915524726174886?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/1409915524726174886/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=1409915524726174886' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/1409915524726174886'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/1409915524726174886'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/03/easily-amused.html' title='Easily Amused'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_WEXTWQoa4_c/RfBL-aK1sEI/AAAAAAAAAGs/pCgnSW3Ly8Q/s72-c/CheatingStatue.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-5008288257988673850</id><published>2007-03-06T12:15:00.000-05:00</published><updated>2007-03-06T12:42:45.944-05:00</updated><title type='text'>Were they snakes, they would have bitten me.</title><content type='html'>I actually &lt;span style="font-style: italic;"&gt;looked&lt;/span&gt; at the Tools menu today, and saw two items which had previously escaped my notice:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_WEXTWQoa4_c/Re2i0Uom9JI/AAAAAAAAAGc/cmKRm1hbBM4/s1600-h/UsefulTools.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_WEXTWQoa4_c/Re2i0Uom9JI/AAAAAAAAAGc/cmKRm1hbBM4/s400/UsefulTools.png" alt="" id="BLOGGER_PHOTO_ID_5038862577873384594" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I save my changes frequently while I'm working, not only because I'm paranoid, but because all too often I'll have been tweaking something only to find out that I've been half-disconnected and all my changes have been lost.  So I'll take a copy of what I'm working on, after deleting the old version from my inventory so that I don't have dozens of duplicate entries in the Objects folder.&lt;br /&gt;&lt;br /&gt;With "Save Object Back to My Inventory", it updates the copy in the inventory so that it's identical to the in-world instance that you're working on.  So much easier!&lt;br /&gt;&lt;br /&gt;But the really beautiful one is "Save Object Back to Object Contents".  Whenever I've been working on something contained in another object's inventory, I've had to drag it into my main inventory, delete the copy out of the containing object, and then drag the contained object from my main inventory to the containing object's Content tab.  But this tool updates the version in the containing object's content; no need to delete anything or use main inventory as an intermediary.&lt;br /&gt;&lt;br /&gt;I feel like a dork for never having noticed these options before.&lt;br /&gt;&lt;br /&gt;Also, I &lt;span style="font-style: italic;"&gt;love&lt;/span&gt; Class 5 sims and First Look:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_WEXTWQoa4_c/Re2l20om9KI/AAAAAAAAAGk/qtsE0IGc-K4/s1600-h/Class5Sim.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_WEXTWQoa4_c/Re2l20om9KI/AAAAAAAAAGk/qtsE0IGc-K4/s400/Class5Sim.jpg" alt="" id="BLOGGER_PHOTO_ID_5038865919357940898" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;48 users in the sim, and the sim wasn't lagged at all!  LL claims a Class 5 sim will support up to 60 avatars before things start to bog down.  They must put the hamsters on serious steroids to get that kind of performance.&lt;br /&gt;&lt;br /&gt;And thanks to First Look, I was still pulling a respectable 18fps even when 35 of those users were directly in my field of vision.  I hear rumors that, despite what the official blog says about no new viewer download, some of the First Look enhancements will be released into the main viewer tomorrow.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-5008288257988673850?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/5008288257988673850/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=5008288257988673850' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/5008288257988673850'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/5008288257988673850'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/03/were-they-snakes-they-would-have-bitten.html' title='Were they snakes, they would have bitten me.'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_WEXTWQoa4_c/Re2i0Uom9JI/AAAAAAAAAGc/cmKRm1hbBM4/s72-c/UsefulTools.png' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-260845421503679898</id><published>2007-03-03T18:57:00.000-05:00</published><updated>2007-03-03T19:58:45.474-05:00</updated><title type='text'>We're gonna have a party, yeah...</title><content type='html'>Tomorrow (Sunday), to celebrate the opening of our new sim, &lt;a href="http://slurl.com/secondlife/Rockcliffe%20I/96/6/27/"&gt;Rockcliffe University&lt;/a&gt; is throwing a party.  Live music!  Classes!  A DJ!  Dancing!  Uh... more classes!&lt;br /&gt;&lt;br /&gt;Stop by if you feel like it, check out the place, listen to some music, say hello if you'd like.&lt;br /&gt;&lt;blockquote&gt;11:00 AM - Live music: Mel Cheeky&lt;br /&gt;12:00 Noon - Live music: Flaming Moe&lt;br /&gt;1:00 PM - Live Music: kaklick martin&lt;br /&gt;2:00 PM - DJ Doubledown Tantino&lt;br /&gt;&lt;/blockquote&gt;Classes will probably be running throughout the day, but I haven't seen a schedule yet.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-260845421503679898?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/260845421503679898/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=260845421503679898' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/260845421503679898'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/260845421503679898'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/03/were-gonna-have-party-yeah.html' title='We&apos;re gonna have a party, yeah...'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-8516346039562294761</id><published>2007-02-28T12:23:00.000-05:00</published><updated>2007-02-28T13:19:38.142-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Technology'/><title type='text'>Pros and Cons</title><content type='html'>The brouhaha developing over the integrated voice chat is really interesting to me.  I missed all the previous "ZOMG THIS IS THE END OF SL" changes — land fee changes, free accounts, and so forth — so this is my first experience with the wide spectrum of reactions.&lt;br /&gt;&lt;br /&gt;Unlike some of the posters, I can see both sides of the argument.  Speaking as an SL "educator", I think this will be a wonderful tool for teaching classes.  I hate having to cut-and-paste due to the time constraints of disseminating large amounts of information in a fairly short time.  If the students had to wait for me to type everything — and go back and correct typos, because I obsess about that — my hour-long classes would take at least a couple of hours each.  Being able to actually &lt;span style="font-style: italic;"&gt;speak&lt;/span&gt; it — and to let students actually ask their questions at speaking speed, instead of having to wait (sometimes interminably) for them to finish typing them, would be wonderful.&lt;br /&gt;&lt;br /&gt;On the other hand, as I have a friend with profound hearing loss, and another with a bad speech impediment, I can understand the horror that some might feel at this development.  My friend who stutters loves online forums because he can communicate as freely as everyone else; if he played Second Life, I can just imagine how this would affect him.  And then of course there are the gender changers; this will pretty much spell the end of their SL identities.&lt;br /&gt;&lt;br /&gt;I'm personally ambivalent about it; I really look forward to using it as a tool in teaching, but it'll make me feel really self-conscious because I hate the way I sound in recordings.  (Why does it sound so different from the way I sound to myself when I'm speaking?)  And I get stage-fright on conference calls.  But maybe speaking more in SL will help me get over that.  So I don't know.  I'll have to wait and see.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;And at the risk of sounding crabby, I'm getting really tired of the SL blog commenters who always complain about Linden Lab addressing anything but the commenters' pet-peeve bugs.  "How can you waste time on &lt;span style="font-style: italic;"&gt;X&lt;/span&gt; when you haven't fixed &lt;span style="font-style: italic;"&gt;Y&lt;/span&gt;?"  It's like saying "Why are you doctors and scientists trying to cure diabetes, blindness and Alzheimers when you haven't cured cancer yet?"&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-8516346039562294761?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/8516346039562294761/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=8516346039562294761' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/8516346039562294761'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/8516346039562294761'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/02/pros-and-cons.html' title='Pros and Cons'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-43298845883180490</id><published>2007-02-19T15:41:00.000-05:00</published><updated>2007-02-19T15:41:46.364-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='texturing'/><category scheme='http://www.blogger.com/atom/ns#' term='building'/><title type='text'>A Week's Work</title><content type='html'>Wow, has it already been a week since the last time I posted?&lt;br /&gt;&lt;br /&gt;The head of Rockcliffe University, where I teach building (and am writing a scripting course, which hopefully will debut before the end of the month), went and bought an entire sim.  Which means all new classrooms!&lt;br /&gt;&lt;br /&gt;One thing which I thought the old space lacked was actual lecture halls.  So I decided to build one .  Once I got through the inevitable round of "could you change &lt;span style="font-style: italic;"&gt;this&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;this&lt;/span&gt; and &lt;span style="font-style: italic;"&gt;this?&lt;/span&gt;" (never build things "on spec" if you're trying to realize your own vision!), I ended up with this layout:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_WEXTWQoa4_c/Rdn8a1AyQ9I/AAAAAAAAAFg/vGl9jK5LaVU/s1600-h/LectureHallOriginal.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_WEXTWQoa4_c/Rdn8a1AyQ9I/AAAAAAAAAFg/vGl9jK5LaVU/s400/LectureHallOriginal.jpg" alt="" id="BLOGGER_PHOTO_ID_5033331596400411602" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Sure, it'll get the job done, but it's not all that exciting visually.  So I took a couple of days, and wrote the set of scripts I've been planning to write for ages.&lt;br /&gt;&lt;br /&gt;One script, which I dropped into every prim in the build (except the chairs), just sat there until I uttered a command.  Once I did, each prim announced all of its parameters: location, size, rotation, type, hollow, cuts, and so forth.  I copied all that information out of my chat history and pasted it into a text file on my computer.&lt;br /&gt;&lt;br /&gt;Then I ran that text file through a PHP script which I wrote to convert each prim's data into a &lt;a href="http://www.povray.org/"&gt;POV-Ray&lt;/a&gt; object.  POV-Ray is a freeware 3D renderer, which does shadows and other things very nicely.  The great thing about it is that its scene description language uses plain text statements which describe graphics primitives very similar to what's used in Second Life: boxes, cylinders, spheres, tori, and so on!  So my PHP script converted the build into a POV-Ray scene file, which (when rendered out) looked like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_WEXTWQoa4_c/Rdn8bFAyQ-I/AAAAAAAAAFo/TTxvPHD6JCw/s1600-h/LectureHallUntextured.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_WEXTWQoa4_c/Rdn8bFAyQ-I/AAAAAAAAAFo/TTxvPHD6JCw/s400/LectureHallUntextured.jpg" alt="" id="BLOGGER_PHOTO_ID_5033331600695378914" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Not terribly exciting when everything's grey, so I started adding textures to everything.  It's not really easy to add image textures to different surfaces of POV-Ray objects, like it is with Second Life prims, but POV-Ray has some very versatile texturing capabilities in its own right.  After another day or so of writing texture statements, it rendered out like this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_WEXTWQoa4_c/Rdn8bFAyQ_I/AAAAAAAAAFw/b6bOGwxEEWU/s1600-h/LectureHallTextured.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_WEXTWQoa4_c/Rdn8bFAyQ_I/AAAAAAAAAFw/b6bOGwxEEWU/s400/LectureHallTextured.jpg" alt="" id="BLOGGER_PHOTO_ID_5033331600695378930" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I then rendered out orthographic views of pretty much every surface, which gave me image maps I could then upload and apply to the build in Second Life.  This was what took the longest, as I had to calculate the repeats and offsets for pretty much every face.  But in the end, I think it was worth it, as here's what the final result looks like in Second Life:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_WEXTWQoa4_c/Rdn8bVAyRAI/AAAAAAAAAF4/rg5iCeBi5JM/s1600-h/LectureHallFront-Final.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_WEXTWQoa4_c/Rdn8bVAyRAI/AAAAAAAAAF4/rg5iCeBi5JM/s400/LectureHallFront-Final.jpg" alt="" id="BLOGGER_PHOTO_ID_5033331604990346242" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The chairs are kind of lame, unfortunately.  I had made much better textures for them, with rounded backs and seats which appear to curve down in front, but they'll have to wait until the alpha-texture sorting bug is fixed before they make their appearance.&lt;br /&gt;&lt;br /&gt;But regardless of textures, the chairs themselves are very low-prim; each bank of four chairs consists of seven prims, whereas the five-chair banks are only eight prims each.  Through the judicious use of alpha textures, I was able to make them look more complex than they actually are.  They don't stand up to close scrutiny, but they manage to seat 52 people at a cost of only 88 prims (the entire build is 186 prims).&lt;br /&gt;&lt;br /&gt;And here's a view looking from the side of the stage out towards the back of the hall:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_WEXTWQoa4_c/Rdn8bVAyRBI/AAAAAAAAAGA/2Bm4kDQNxn0/s1600-h/LectureHallBack-Final.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_WEXTWQoa4_c/Rdn8bVAyRBI/AAAAAAAAAGA/2Bm4kDQNxn0/s400/LectureHallBack-Final.jpg" alt="" id="BLOGGER_PHOTO_ID_5033331604990346258" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Oh, foo, I just noticed I forgot to make the doors more interesting, with a crash bar and a narrow pane of safety glass and one of those things up in the corner to make it close slowly.&lt;br /&gt;&lt;br /&gt;And no emergency exits!  I hope there aren't any fire code inspectors in Second Life!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-43298845883180490?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/43298845883180490/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=43298845883180490' title='7 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/43298845883180490'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/43298845883180490'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/02/weeks-work.html' title='A Week&apos;s Work'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_WEXTWQoa4_c/Rdn8a1AyQ9I/AAAAAAAAAFg/vGl9jK5LaVU/s72-c/LectureHallOriginal.jpg' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-4885668037462662694</id><published>2007-02-12T14:54:00.000-05:00</published><updated>2007-02-12T08:25:10.078-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scripting'/><title type='text'>Textures and Generators</title><content type='html'>In one of &lt;a href="http://slged.blogspot.com/2007/02/tiling-texture-across-many-panels.html"&gt;recent posts&lt;/a&gt;,  Ged Larsen talks about wrapping a texture around a skirt built by his fantastic LoopRez script.  He sums up his experiment by saying:&lt;br /&gt;&lt;blockquote&gt;&lt;/blockquote&gt;&lt;blockquote&gt;I don't think this script could ever be useful as a releasable tool, though. Essentially, I think for every project, the script would have to be re-coded, which would probably not be worth it.&lt;/blockquote&gt;Of course, to me that sounded like a challenge!  I've been meaning to get back to my own necklace generator and finish up the features I want to have in it, so I pulled it out and started to work.&lt;br /&gt;&lt;br /&gt;But the first thing I needed to do was make mine faster.  Because calculating equal placement on the circumference of an ellipse is extremely complex math, which to be honest I don't understand well enough to translate into LSL.  So I did it the ugly, lazy way.&lt;br /&gt;&lt;br /&gt;In essence, I started from a particular point on the ellipse and gradually increased the angle, bit by bit, until the position represented by that angle was at the distance I wanted it to be, within a certain amount of tolerance.  The lower the tolerance, the longer the process took.  For tiny prim jewelry, that required a really low tolerance.&lt;br /&gt;&lt;br /&gt;So I ripped out all that code and replaced it with something much faster, based on a binary search algorithm.  Basically, it takes two angles: at first, the back of the necklace and the front of the necklace.  Then it picks an angle halfway between the two.  If the angle is too large, it then recalculates between the starting point and the halfway point and tests again.  If the angle is too small, it recalculates between the ending point and the halfway point, repeating until it's gotten within a certain amount of tolerance from the position we actually want.  Then it moves on to the next piece, using the previous piece's location as the starting point to calculate from, and so on until it reaches the front of the necklace.  (The other side is just a mirror image of the first, which is trivial to calculate.)&lt;br /&gt;&lt;br /&gt;It sounds like more work, but even with a narrow tolerance, it's at least four times faster than the old version with a wide tolerance.&lt;br /&gt;&lt;br /&gt;As to the image wrapping: while I can place the image on the prims in the proper location, it doesn't quite look right with the usual tapered cylinders that dresses are made out of; the narrow tops have too much image on them, and the wide bottoms too little.  &lt;span style="font-style: italic;"&gt;That&lt;/span&gt; problem will take a little thinking about.  Perhaps it won't be as noticeable with a fabric pattern as it is with a snapshot.&lt;br /&gt;&lt;br /&gt;Ged asks to see what progress I've made on it; here's a snapshot showing two different "waist sizes", with the same texture wrapped around the "skirt":&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_WEXTWQoa4_c/RdDBLYDvM8I/AAAAAAAAAFU/j-STvYhZigY/s1600-h/WrappedTextures.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_WEXTWQoa4_c/RdDBLYDvM8I/AAAAAAAAAFU/j-STvYhZigY/s400/WrappedTextures.jpg" alt="" id="BLOGGER_PHOTO_ID_5030733184953693122" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;(The image I used was a snapshot of me with my friend Rhetorica and some of her schoolmates.)  The problem I mentioned above is more visible on the smaller "skirt", up at the top.  There's no "poof" to them because I haven't put in code to do so yet.&lt;br /&gt;&lt;br /&gt;The process required that I create a skirt panel and drop in a script, then put the panel into my generator's inventory.  Then, for each panel, the generator calculated the placement, texture offset and texture repeat values.  It then rezzed out all the panels, and then sent the texture information to the script in each one.&lt;br /&gt;&lt;br /&gt;It still has quite a ways to go, and I think I'm going to fork off a skirt generator from my necklace generator, just to make the latter faster yet (the fewer calculations it has to do, the better for speed's sake).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-4885668037462662694?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/4885668037462662694/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=4885668037462662694' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/4885668037462662694'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/4885668037462662694'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/02/textures-and-generators.html' title='Textures and Generators'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_WEXTWQoa4_c/RdDBLYDvM8I/AAAAAAAAAFU/j-STvYhZigY/s72-c/WrappedTextures.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-6992746655436551791</id><published>2007-02-07T10:43:00.000-05:00</published><updated>2007-02-07T11:46:30.564-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='scripting'/><title type='text'>Conundrum!</title><content type='html'>I noticed the other day that some of my scripts were able to execute on no-script land.&lt;br /&gt;&lt;br /&gt;Through the process of elimination, I was able to narrow it down to exactly what combination of factors permitted this to occur, and now I can reproduce it at will — for example, I modified the "Sexy Walk" attachment so it now continues to function in no-script territory; no more monkey walk for me!&lt;br /&gt;&lt;br /&gt;My first thought was, "I should probably report this as a bug."&lt;br /&gt;&lt;br /&gt;My second thought was, "But I could make a mint selling AOs that keep working!"&lt;br /&gt;&lt;br /&gt;My third thought was, "I wonder if this is an exploit.  Do they still offer a bounty on exploits?  And if I don't report it, but sell objects which make use of it, would I get banned?"&lt;br /&gt;&lt;br /&gt;Further research is needed.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-6992746655436551791?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/6992746655436551791/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=6992746655436551791' title='5 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/6992746655436551791'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/6992746655436551791'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/02/conundrum.html' title='Conundrum!'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-6324125547154368859</id><published>2007-02-06T08:20:00.000-05:00</published><updated>2007-02-06T09:44:15.005-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sightseeing'/><category scheme='http://www.blogger.com/atom/ns#' term='First Look'/><title type='text'>Nifty Find</title><content type='html'>Sometimes I'll just look around on the map to see what interesting-sounding sims are nearby.  While doing benchmarks for the First Look viewer, I saw some interesting — but unfortunately inaccessible — sims with names like TextureTest, Bug Island, Island for Misfit Toys and Danger! Danger!&lt;br /&gt;&lt;br /&gt;Looking to the west of First Look Isle, I saw a block of six sims with German names, one of which looked like it had a fort on a promontory of land.&lt;br /&gt; &lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_WEXTWQoa4_c/RciE3UmgYrI/AAAAAAAAAFA/HvNQsY2OYpM/s1600-h/Frisch.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_WEXTWQoa4_c/RciE3UmgYrI/AAAAAAAAAFA/HvNQsY2OYpM/s400/Frisch.jpg" alt="" id="BLOGGER_PHOTO_ID_5028415069917045426" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I had to check it out — and I'm glad I did!  Sitting atop a large hill, surrounded by a lush trees, was a haunting ruined castle, like one of King Ludwig the Mad's notorious projects fallen into disrepair.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_WEXTWQoa4_c/RciCvEmgYpI/AAAAAAAAAEw/TxCEo31Nrfk/s1600-h/Ruined+Castle+1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_WEXTWQoa4_c/RciCvEmgYpI/AAAAAAAAAEw/TxCEo31Nrfk/s400/Ruined+Castle+1.jpg" alt="" id="BLOGGER_PHOTO_ID_5028412729159869074" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;As I walked upon the broken stones, avoiding the sporadic rubble, I espied some familiar objects.  Glowing hands atop pedestals.  A parrot.  An eye-chart.  In a courtyard at the bottom of the castle, a sign read &lt;span style="font-style: italic;"&gt;Willkommen in der Orientierungs Burg&lt;/span&gt;, which even my pathetically rusty German could recognize: Welcome to Orientation Castle.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_WEXTWQoa4_c/RciCvUmgYqI/AAAAAAAAAE4/Bt4TKohsoLY/s1600-h/Ruined+Castle+2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_WEXTWQoa4_c/RciCvUmgYqI/AAAAAAAAAE4/Bt4TKohsoLY/s400/Ruined+Castle+2.jpg" alt="" id="BLOGGER_PHOTO_ID_5028412733454836386" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I've heard mention of a new Orientation Island; I wonder if this is what they will look like.  It's certainly a lot more compact than the existing ones, taking up maybe a sixth of the sim.  And the beach ball has been replaced with a well, into which (I think) the notecard says you're supposed to drop a large rock.  There &lt;span style="font-style: italic;"&gt;is&lt;/span&gt; a "physical" rock on a nearby staircase landing, but it's locked; I can't move it.&lt;br /&gt;&lt;br /&gt;I've been looking around for a similarly upgraded Help Island, but so far haven't found one.  There is a cluster of German-language, standard Orientation Islands just to the south of Frisch, though.  I wonder how many other languages have their own Orientation Islands?&lt;br /&gt;&lt;br /&gt;In sadder news, the Dynamic Reflections option has been removed from the Client-&gt;Rendering menu of the most recent First Look build.  :(  I can still enable it through the Client-&gt;Debug Settings dialog, but it crashes the viewer on my Windows machine immediately.  (It still works on my Linux box, but that's not as powerful.)&lt;br /&gt;&lt;br /&gt;It looks like most of the rendering improvements will be put into the official viewer soon!  :)  Get ready for smoother motion!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-6324125547154368859?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/6324125547154368859/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=6324125547154368859' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/6324125547154368859'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/6324125547154368859'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/02/nifty-find.html' title='Nifty Find'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_WEXTWQoa4_c/RciE3UmgYrI/AAAAAAAAAFA/HvNQsY2OYpM/s72-c/Frisch.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-6884611243064914583</id><published>2007-02-02T21:32:00.000-05:00</published><updated>2007-02-03T14:29:57.224-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='building'/><category scheme='http://www.blogger.com/atom/ns#' term='First Look'/><title type='text'>Oh. My. God.</title><content type='html'>I tried out the First Look viewer yesterday.  I'd put it off, because in the comments about it in the official SL blog, I've read all sorts of wailing and gnashing of teeth about how unstable it is, but I was bored and wanted to see these "render pipeline improvements" for myself.&lt;br /&gt;&lt;br /&gt;It was quite a bit faster (I haven't got exact numbers, but everything was much smoother), until I started playing around with the debug options and found the one to turn on reflections.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_WEXTWQoa4_c/RcTbAkmgYnI/AAAAAAAAAEY/UdtDQ_aLe3w/s1600-h/FirstLookViewer-REFLECTIONS.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_WEXTWQoa4_c/RcTbAkmgYnI/AAAAAAAAAEY/UdtDQ_aLe3w/s400/FirstLookViewer-REFLECTIONS.jpg" alt="" id="BLOGGER_PHOTO_ID_5027383886923981426" border="0" /&gt;&lt;/a&gt;It's not just an image map of the sky sphere overlaid on the texture of shiny objects, the way the current "Shininess" texture setting works — my guess is that every so often (especially when you change position), the viewer renders a 360-degree panoramic image of your point of view, and then overlays &lt;span style="font-style: italic;"&gt;that&lt;/span&gt; image onto shiny objects.&lt;br /&gt;&lt;br /&gt;It's not perfect (for example, in order to see yourself in shiny objects, your point of view has to actually be in front of your avatar; and if you're in mouselook mode, you're either invisible or headless depending on whether or not you've got "Show Avatar in Mouselook" checked in your Graphics Preferences.&lt;br /&gt;&lt;br /&gt;But still, it's phenomenal, and the frame rate with reflections turned on seems pretty comparable to the existing (non-First Look) viewer.  And it didn't crash once while I was using it, though I noticed flexi prims aren't nearly as flexible as they are in the existing viewer, and HUDs tend to flicker madly from time to time.&lt;br /&gt;&lt;br /&gt;While walking around and looking at reflective things, I took a trip to the &lt;a href="http://slurl.com/secondlife/Idea%20City/70/193/40/?title=Design%20Center%20in%20Idea%20City"&gt;Design Center&lt;/a&gt; in Idea City.  It has some nifty tutorials on shadows (using a different technique than baking them right into your textures), and a nice display on microprims.&lt;br /&gt;&lt;br /&gt;One thing that I hadn't managed to figure out with microprims was to make a complete sphere smaller than 0.01 in all dimensions.  In my jewelry, I'd been faking it by stretching a sphere and then dimpling away all but the very tip, and using that as a mostly hemispherical bit, but it was far from perfect.  The Design Center display gave some really good advice: use Hollow, and then apply a transparent texture to the outer skin of the sphere.&lt;br /&gt;&lt;br /&gt;This was great, but the shadows are reversed in the hollow -- at noon, for example, the top of the microsphere would be shadowed while the bottom would be lit.&lt;br /&gt;&lt;br /&gt;I found that by setting the twist on the sphere to -180 for both the begin and end, it will turn the shadows "right side up" and look much better.&lt;br /&gt;&lt;br /&gt;And, oh, how tiny you can get them!  In the image below, the moon on the left is 0.01 in all directions, the smallest SL will let you make it.  To its right is another one, hollowed, twisted and textured, with the hollow set at 10 — a millimeter in diameter.  And to &lt;span style="font-style: italic;"&gt;its&lt;/span&gt; right, the dark grey dot, is one with the hollow set to 1, a tenth of a millimeter wide.  It's almost &lt;span style="font-style: italic;"&gt;too&lt;/span&gt; small; nobody would ever look closely enough to actually see it.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_WEXTWQoa4_c/RcTbA0mgYoI/AAAAAAAAAEg/IE7A8feVpWQ/s1600-h/SmallTinyMicroscopic.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_WEXTWQoa4_c/RcTbA0mgYoI/AAAAAAAAAEg/IE7A8feVpWQ/s400/SmallTinyMicroscopic.jpg" alt="" id="BLOGGER_PHOTO_ID_5027383891218948738" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now to make some jewelry with tiny little spherical gems!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-6884611243064914583?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/6884611243064914583/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=6884611243064914583' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/6884611243064914583'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/6884611243064914583'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/02/oh-my-god.html' title='Oh. My. God.'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp0.blogger.com/_WEXTWQoa4_c/RcTbAkmgYnI/AAAAAAAAAEY/UdtDQ_aLe3w/s72-c/FirstLookViewer-REFLECTIONS.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-1666214345389943209</id><published>2007-01-23T10:17:00.000-05:00</published><updated>2007-01-23T11:38:16.823-05:00</updated><title type='text'>The Lost Art of Communication</title><content type='html'>I was in an empty classroom, working on some visual aids for a class on texturing, when a shirtless, tattooed man walked in.  The conversation was pretty bizarre.&lt;br /&gt;&lt;br /&gt;&lt;div  style="border: 1px solid rgb(112, 127, 112); color: black; background-color: rgb(240, 255, 240); margin-left: 0.25in; margin-right: 0.25in; padding: 4pt; font-family:arial,verdana,helvetica,helv,sans-serif;"&gt;&lt;span style="font-weight: bold;"&gt;Him:&lt;/span&gt; hi&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Me:&lt;/span&gt; Hello.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Him:&lt;/span&gt; your the teacher?&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Me:&lt;/span&gt; I am one of the teachers here at Rockcliffe, yes. :)&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Him:&lt;/span&gt; make me a star&lt;/div&gt;&lt;br /&gt;Now, I assumed that he was demanding that I produce for him a five-pointed star object.  I have no problem helping people learn how to build objects, but being brusquely commanded to work for them, without even so much as a please, makes me ornery.  So, with the old joke about "How do I get to Carnegie Hall?" leaping forth from my memory, I deliberately misinterpreted him.&lt;br /&gt;&lt;br /&gt;&lt;div  style="border: 1px solid rgb(112, 127, 112); color: black; background-color: rgb(240, 255, 240); margin-left: 0.25in; margin-right: 0.25in; padding: 4pt; font-family:arial,verdana,helvetica,helv,sans-serif;"&gt;&lt;span style="font-weight: bold;"&gt;Me:&lt;/span&gt; What instruments do you play?&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Him:&lt;/span&gt; giuttar at real live&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Me:&lt;/span&gt; Well, the first step would be to start playing at clubs which have "open mic nights" in order to get exposure.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Him:&lt;/span&gt; and than??&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Me:&lt;/span&gt; Well, assuming people like what you play, you'll eventually gain a following, and perhaps become a star.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Him:&lt;/span&gt; i think you teach me?&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Me:&lt;/span&gt; I'm afraid I'm not really the person to speak to about that; I'm not a musician and have no experience with performing in SL.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Me: &lt;/span&gt;All the "stars" I see in SL have basically performed until they've gained a following.&lt;/div&gt;&lt;br /&gt;Well, I &lt;i&gt;thought&lt;/i&gt; I'd been deliberately misinterpreting him!  But I decided to make sure what he really meant.&lt;br /&gt;&lt;br /&gt;&lt;div  style="border: 1px solid rgb(112, 127, 112); color: black; background-color: rgb(240, 255, 240); margin-left: 0.25in; margin-right: 0.25in; padding: 4pt; font-family:arial,verdana,helvetica,helv,sans-serif;"&gt;&lt;span style="font-weight: bold;"&gt;Me:&lt;/span&gt; Or was that not the kind of star you were talking about?&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Him:&lt;/span&gt; where can i find the crime lorde here??&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Him:&lt;/span&gt; i mean mafia ORE SO&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Me:&lt;/span&gt; I have no idea whom you might mean. This is a university, not a Mafia stronghold.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Him:&lt;/span&gt; (teleports away)&lt;/div&gt;&lt;br /&gt;Huh?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-1666214345389943209?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/1666214345389943209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=1666214345389943209' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/1666214345389943209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/1666214345389943209'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/01/lost-art-of-communication.html' title='The Lost Art of Communication'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-4912157978503821995</id><published>2007-01-21T13:29:00.000-05:00</published><updated>2007-01-21T15:20:35.759-05:00</updated><title type='text'>Open for Business</title><content type='html'>&lt;a href="http://slurl.com/secondlife/Kaemi/40/231/77"&gt;Johanna Hyacinth Designs&lt;/a&gt; is now open.  I still haven't rerendered  the textures to match the new positions, but I'll get around to it once I muster the enthusiasm.  (I hate having to redo projects, and if I put off opening the store until I get around to it, I might &lt;span style="font-style: italic;"&gt;never&lt;/span&gt; open!)&lt;br /&gt;&lt;br /&gt;Alas, the parcel's landing zone makes it &lt;span style="font-style: italic;"&gt;more&lt;/span&gt; difficult to find my store (my old store's location was great: walk up the ramp right in front of you, last store on the left).&lt;br /&gt;&lt;br /&gt;So now there are two ways to get there:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;When you materialize, walk all the way to the end of the hall, fly out the door, turn left, fly until you come to a similar door on your left, fly in, and I'm the first store there on the far wall (and if you come in this way, alas, all you'll see is a whole wall full of blank vendors which I haven't filled up yet).&lt;/li&gt;&lt;li&gt;When you materialize, turn around, walk out the door, turn right, walk until you come to a similar door on your right, walk all the way down the hall, and I'm the last store on the left.  But at least coming from this direction, most of the vendors hung on the window actually have products for sale.&lt;/li&gt;&lt;/ol&gt;However, I did IM the proprietor of the mall, and she promises to move the landing point to a spot between the two hallway entrances, so hopefully soon it'll just be "go in the door on the left and all the way down the hallway, I'm the last shop on the left."&lt;br /&gt;&lt;br /&gt;I guess I'm going to have to work like mad if I'm going to fill up all those vendors...  I'd put my PDA up for sale (it appears when you start typing, and you hold it in one hand and tap on it with the other), but I made it for me, and I'm a lefty -- so you hold it in the right hand and tap with the left.  Which, since the default "wear" location (and most animations that involve hand-held objects) is the right hand, means that any time you wear most objects (like mugs and glasses, weapons, walking sticks, etc.), the PDA gets detached and you have to wear it again once you drop or detach the other object.  (Even in Second Life, the rest of the dextrocentric world tries to keep us down!)  Maybe I'll make a righty version of the animation, and let the script choose which one to play depending on what hand it's held in...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-4912157978503821995?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/4912157978503821995/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=4912157978503821995' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/4912157978503821995'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/4912157978503821995'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/01/open-for-business.html' title='Open for Business'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-1435435440909397660</id><published>2007-01-19T15:26:00.000-05:00</published><updated>2007-01-19T16:08:00.123-05:00</updated><title type='text'>I'm not dead yet!</title><content type='html'>Okay, so I suck at blogging, apparently.&lt;br /&gt;&lt;br /&gt;Actually I've had to cut way down on my SL time, darn it.  So, what's been going on in the past ten days?&lt;br /&gt;&lt;br /&gt;&lt;ol&gt;&lt;li&gt;I had my store almost completely set up and ready to go, when the owner of the mall it was in decided to renovate.  Now, the purpose was to increase traffic for those of us on the second floor, since people rarely went up there (which I certainly can't complain about), and she did let us keep our same relative positions (well, moving closer to the front might have been nice).  But unfortunately, the proportions and features of the new location are different, so I have to re-render all my textures.  Fooey!&lt;/li&gt;&lt;li&gt;I've started teaching classes at Rockcliffe University.  It's a fledgling school (it just started up at the beginning of this month), and so far the curriculum is limited, but I like the founder's ideas and I would like to see it succeed.  Right now we have four building classes (with a fifth hopefully debuting this weekend), but instead of the follow-a-recipe-by-the-numbers, here's-what-to-do-but-not-why kind of class that I've taken too many of, we're teaching what all the options in the Edit Pane do, and why and how you would want to use them.  I'm also working on a series of classes to teach scripting, which has me very excited.  Hopefully, we can get that course started in February.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;I met &lt;a href="http://slged.blogspot.com/index.html"&gt;Ged Larsen&lt;/a&gt;, who (like me) found the existing necklace generator scripts a little lacking, and set to work building a better mousetrap.  And what a mousetrap he's built!  Whereas mine is slow and ponderous, but gets there in the end, his is snappy and full of mouth-watering bells and whistles.&lt;/li&gt;&lt;li&gt;I downloaded the Open-Source Second Life Viewer code, but alas! it won't compile on my beautiful new 64-bit machine.  Let's see, I can spend even &lt;span style="font-style: italic;"&gt;more&lt;/span&gt; time out of Second Life fixing the code so that it will compile on my system, or just wait until some other enterprising Linux user modifies the code for 64-bit.  Hmm, what to do, what to do?&lt;/li&gt;&lt;li&gt;Yesterday, I finally came up with an easy way to demonstrate how Texture Offsets work, just in time to teach my first class on texturing.  I'll have to take some screenshots once I get off work and put up a post on the issue.&lt;/li&gt;&lt;li&gt;I had an awesome idea for a script this morning, which hopefully I'll find the time to write this weekend.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;Okay, so I haven't really accomplished much.  I'm such a slacker!&lt;br /&gt;&lt;br /&gt;Also, on a completely random tangent: why is it that, when I'm on a dance pad and someone wanders into the casino when all the dance pads are full, &lt;span style="font-style: italic;"&gt;I'm&lt;/span&gt; the person whose dance pad they sit on in hopes of bumping off?  Every single time!  Maybe I should make a mean-looking avatar for when I'm dancing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-1435435440909397660?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/1435435440909397660/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=1435435440909397660' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/1435435440909397660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/1435435440909397660'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/01/im-not-dead-yet.html' title='I&apos;m not dead yet!'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-4093038137518597209</id><published>2007-01-09T00:58:00.000-05:00</published><updated>2007-01-09T02:00:53.921-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='miscellaneous'/><title type='text'>O Happy Day!</title><content type='html'>When I arrived at my vendor-booth-in-progress to make some additions, I noticed that there was a &lt;b&gt;SPACE FOR RENT&lt;/b&gt; sign blocking the booth next to mine.  Dare I hope that the genitalia merchant next to me will be gone?&lt;br /&gt;&lt;br /&gt;(Not that I have anything against genitalia &lt;i&gt;per se&lt;/i&gt;, mind you &amp;mdash; it just kind of clashed with the jewelry I want to sell.)&lt;br /&gt;&lt;br /&gt;Complete tangent: Among the last names that exist in SL are Hartnell, Cushing, Troughton, Pertwee, Baker, Davison, McCoy, McGann, Grant, Broadbent, Lumley, Eccleston and Tennant.  But not Atkinson?  How on Gallifrey could they have missed &lt;i&gt;him?&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-4093038137518597209?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/4093038137518597209/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=4093038137518597209' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/4093038137518597209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/4093038137518597209'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/01/o-happy-day.html' title='O Happy Day!'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-6359013357327862281</id><published>2007-01-08T16:19:00.000-05:00</published><updated>2007-01-08T16:26:15.274-05:00</updated><title type='text'>Geeky Joy!</title><content type='html'>I read at &lt;a href="http://www.secondlifeinsider.com/2007/01/08/second-life-viewer-source-code-released/"&gt;Second Life Insider&lt;/a&gt; that Linden Lab has released the source code for the viewer client.  This means I can compile it to run natively on my new 64-bit Linux machine!   :kermitarms:&lt;br /&gt;&lt;br /&gt;Also, maybe I can hack it so the "Jane Doe has left this session" group messages won't open up a new IM session if that group isn't already open.  That's got to be the most annoying "features" of group chat.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-6359013357327862281?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/6359013357327862281/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=6359013357327862281' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/6359013357327862281'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/6359013357327862281'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/01/geeky-joy.html' title='Geeky Joy!'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-3846810641064278039</id><published>2007-01-07T18:57:00.000-05:00</published><updated>2007-01-07T19:00:19.377-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorial: Scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='metablog'/><title type='text'>A Magic Barrier</title><content type='html'>While I'm getting my little vendor stall ready for its grand opening, I put up a "Coming Soon" barrier across the entrance — I guess I'm a little shy about letting people see my works in progress before I'm happy with the way they look.  (Though I got a great compliment on it from someone yesterday, which totally made my day.)&lt;br /&gt;&lt;br /&gt;Anyway, since the parcel's "landing zone" overrides the landmark I tried to set in my store, if I wanted to get through the barrier to work on it, I had to edit the barrier, set it to phantom, walk through it, and then set it to non-phantom again.  And I'm way too impatient for that (in fact, just about all the programming I do at work is to make &lt;i&gt;my&lt;/i&gt; life easier by automating the tedious tasks I have to do).  So I wrote a little script for the door to set it to phantom when I merely touch it, and then turn itself back to non-phantom after five seconds.&lt;br /&gt;&lt;br /&gt;But I was still too impatient, so I made it do its phantom thing when I walk or fly into it too.  As it demonstrates the use of states, timers, and setting prim parameters, I figured it would make a good post for &lt;a href="http://johannahyacinth.blogspot.com/2006/11/lsl-magic-barrier.html"&gt;part 3 of my scripting tutorials&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-3846810641064278039?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/3846810641064278039/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=3846810641064278039' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/3846810641064278039'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/3846810641064278039'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/01/magic-barrier.html' title='A Magic Barrier'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-858962585525484163</id><published>2007-01-03T11:41:00.000-05:00</published><updated>2007-01-04T13:27:45.447-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='texturing'/><category scheme='http://www.blogger.com/atom/ns#' term='building'/><category scheme='http://www.blogger.com/atom/ns#' term='scripting'/><title type='text'>Baked Textures, attempt 1</title><content type='html'>I took the plunge and rented myself a little vendor stall. Of course, I wanted to make it look nice, and I wanted to try out some texture baking, so I've spent the past couple of days working on that.&lt;br /&gt;&lt;br /&gt;Aimee Weber's &lt;a href="http://aimeeweber.com/Portfolio/AmericanApparel.html"&gt;American Apparel&lt;/a&gt; build changes textures at sunset, and displays a floodlit look at night.  Because I don't own the building my stall is in, I couldn't do much about the exterior — but since my stall has windows on two sides, and is across an aisle from similarly windowed stalls, I decided to change the interior lighting and shadows to match the position of the sun.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object height="350" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/zggduDPC7kI"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/zggduDPC7kI" type="application/x-shockwave-flash" wmode="transparent" height="350" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Every fifteen minutes (except at "night"), it gets the sun's current position and uses that to determine which texture to display.  Fortunately, Linden Lab have been kind enough to provide a function to tell us where the sun is:&lt;br /&gt;&lt;br /&gt;&lt;pre class="lsl"&gt;&lt;span class="datatype"&gt;vector&lt;/span&gt; SunDirection = &lt;span class="llfunction"&gt;llGetSunDirection&lt;/span&gt;();&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;For some reason, the sun doesn't go straight east to west; it's tilted over by about 45 degrees, and the center of its path is somewhat above the grid, so it's below the horizon only one hour out of every four.&lt;br /&gt;&lt;br /&gt;Anyway, making the textures for the store was fairly easy, but time-consuming.  I recreated the entire store, plus some of the surrounding walls, ceiling and floor, using the &lt;a href="http://www.povray.org/"&gt;Persistence of Vision Raytracer&lt;/a&gt; (a free 3D renderer).  I chose POV-Ray over the other 3D packages I have because, like SL, it works with graphics primitives rather than polygon meshes, so it was easy to exactly re-create the geometry.  Also, it can be scripted, so I could just plug in the list of sun positions, and make it light the scene from a different position based on which frame number I was rendering.&lt;br /&gt;&lt;br /&gt;I had to render everything which would receive a baked texture: the wall, the floor, the ceiling, and every visible side of the wooden "bench" which would hold three vendor boxes.  Then upload and apply!  (The uploading was a bit pricey, since I had foolishly chosen to make a new set of textures for every fifteen minutes except nighttime.  I managed to squeeze all the "bench" textures onto a single image for each time slot, but the grand total was still L$480 for only four things to texture — ouch!  Maybe just day/night textures next time after all.)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-858962585525484163?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/858962585525484163/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=858962585525484163' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/858962585525484163'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/858962585525484163'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2007/01/baked-textures-attempt-1.html' title='Baked Textures, attempt 1'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-953221082116275638</id><published>2006-12-29T07:29:00.000-05:00</published><updated>2006-12-29T08:04:29.169-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='texturing'/><category scheme='http://www.blogger.com/atom/ns#' term='envy'/><title type='text'>Tantum Agendum Parvulus Tempus</title><content type='html'>Oh, no!  With the grid down for repair, I've been reading the SL newsletters and the like, and stumbled across the &lt;a href="http://www.aimeeweber.com/Portfolio.html"&gt;portfolio of Aimee Weber&lt;/a&gt;.  Okay, so from what I gather she's really well known in SL, but I guess I don't get out of the sandbox often enough; it's the first time I'd heard of her.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.aimeeweber.com/Portfolio/DoubleSlit.html"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://www.aimeeweber.com/Portfolio/lab_1.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Oh. My. God.  From what she says on the page linked from the image above, she uses "baked textures" (i.e. the shadows are part of the textures themselves).  That is absolutely phenomenal and I MUST LEARN HOW TO DO IT!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.aimeeweber.com/Portfolio/Regina.html"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px;" src="http://www.aimeeweber.com/Portfolio/regina_3.jpg" alt="" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Once the grid comes back up, I have to visit the American Apparel store she built; apparently it swaps textures based on the time of day, so that it's lit up with floodlights at night (with shadows on the walls changing to reflect the changing light sources).&lt;br /&gt;&lt;br /&gt;My guess is that she must reproduce her builds exactly in an external 3D application, texture and light them the way she wants them to look, then render at least a couple of passes for each wall/floor/cabinet/etc. (one for the base textures, with the furniture removed; and another one for the shadow maps with the furniture present), then combine the passes into a single image and apply them to the SL objects.&lt;br /&gt;&lt;br /&gt;Although... in searching through the LSL Wiki for something else, I did run across &lt;a href="http://lslwiki.com/lslwiki/wakka.php?wakka=llSetStatus"&gt;this function&lt;/a&gt;, which includes a mouth-watering flag name: &lt;b&gt;&lt;tt&gt;STATUS_CAST_SHADOWS&lt;/tt&gt;&lt;/b&gt; — &lt;i&gt;"PREVIEW: If set, object casts shadows on other objects (if shadows are enabled)"&lt;/i&gt;  Looks like it's time to try out the preview grid!&lt;br /&gt;&lt;br /&gt;(As if I don't already have &lt;i&gt;enough&lt;/i&gt; things on my SL "To Do" list, and RL Boyfriend isn't already feeling neglected as it is...  If only I could get him sucked into SL too!)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-953221082116275638?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/953221082116275638/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=953221082116275638' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/953221082116275638'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/953221082116275638'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2006/12/tantum-agendum-parvulus-tempus.html' title='Tantum Agendum Parvulus Tempus'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-4411647304391259998</id><published>2006-12-28T18:58:00.001-05:00</published><updated>2006-12-29T07:29:44.748-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='building'/><category scheme='http://www.blogger.com/atom/ns#' term='Jewelry'/><title type='text'>Yet Another Cheapside Hoard Necklace</title><content type='html'>&lt;span style="font-family:georgia;"&gt;Well, I finally hit the ceiling on complex jewelry.  I made another reproduction of a Cheapside Hoard piece — this time, a chain made of alternating square-cut gems and little enameled flowers — but when I'd made a whole necklace out of them, it weighed in at over 500 prims.  Way too many to link!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So I started cutting out links, working from the center back forwards, until I was far enough under 256 that I could use some simpler links for the back.  I used the same links that I made for &lt;a href="http://johannahyacinth.blogspot.com/2006/12/much-better-and-goals-and-obstacles.html"&gt;my first Cheapside Hoard necklace&lt;/a&gt;, but even that was too much; I had to take out the tiny prims which joined the larger ones, and stretch the large ones until they abutted.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_WEXTWQoa4_c/RZRSOgjtORI/AAAAAAAAADw/KpKgcR7LB5Q/s1600-h/Cheapside-Hoard-Square-and-Flower-Necklace1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_WEXTWQoa4_c/RZRSOgjtORI/AAAAAAAAADw/KpKgcR7LB5Q/s320/Cheapside-Hoard-Square-and-Flower-Necklace1.jpg" alt="" id="BLOGGER_PHOTO_ID_5013722694381549842" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I was hoping I could make a two-strand chain, but at a staggering 246 prims for just one half-strand, I guess that's as good as it's going to get.  I'm going back and forth on whether or not to just use a simple prim with a texture mapped onto it for the complex bits.  I mean, sure, there's a feeling of accomplishment at doing it without "cheating", but who really looks that closely at jewelry in Second Life?  (Apart from other jewelers, I suppose).  Would segments this tiny really suffer that much?&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_WEXTWQoa4_c/RZRYWwjtOSI/AAAAAAAAAD4/-tGCqK6AYsY/s1600-h/Cheapside-Hoard-Square-and-Flower-Necklace2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_WEXTWQoa4_c/RZRYWwjtOSI/AAAAAAAAAD4/-tGCqK6AYsY/s320/Cheapside-Hoard-Square-and-Flower-Necklace2.jpg" alt="" id="BLOGGER_PHOTO_ID_5013729433185237282" border="0" /&gt;&lt;/a&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-4411647304391259998?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/4411647304391259998/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=4411647304391259998' title='4 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/4411647304391259998'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/4411647304391259998'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2006/12/yet-another-cheapside-hoard-necklace.html' title='Yet Another Cheapside Hoard Necklace'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_WEXTWQoa4_c/RZRSOgjtORI/AAAAAAAAADw/KpKgcR7LB5Q/s72-c/Cheapside-Hoard-Square-and-Flower-Necklace1.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-5490882930351786878</id><published>2006-12-27T15:28:00.000-05:00</published><updated>2006-12-27T15:29:23.198-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='building'/><category scheme='http://www.blogger.com/atom/ns#' term='Jewelry'/><category scheme='http://www.blogger.com/atom/ns#' term='scripting'/><title type='text'>Quite enough holiday cheer</title><content type='html'>I feel like a slug for not creating anything in SL or posting here in what seems like forever, but alas, the holidays intruded.&lt;br /&gt;&lt;br /&gt;Just getting back into the swing of things (and undertaking my first paying SL job, refurbishing some scripts for someone to cut down on lag and permit multiple instances of the object to coexist), so not really much to show from recent times.&lt;br /&gt;&lt;br /&gt;However, I did make this necklace today:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_WEXTWQoa4_c/RZLRtAjtOPI/AAAAAAAAADY/9FaC5cMYMAI/s1600-h/OvalGemstoneNecklace1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_WEXTWQoa4_c/RZLRtAjtOPI/AAAAAAAAADY/9FaC5cMYMAI/s320/OvalGemstoneNecklace1.jpg" alt="" id="BLOGGER_PHOTO_ID_5013299906390866162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Before the holidays, I also got around to trying to make some movies from within SL, and (once I'd found a codec that actually wrote something to disk!) made a clip showing one of my earlier accessories in motion and uploaded it to YouTube.  And I'm just now getting around to putting it on the blog.&lt;br /&gt;&lt;br /&gt;My first day in SL, I raided the freebie store on Help Island for everything they had, and among them were some prim wings.  "I wonder if I can make wings which flap?" I asked myself.  The answer was "yes, but not very well".  I'll skip the boring explanations of why my first two versions didn't work, and skip straight to Johanna's Bat Wings, Mark III.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;object height="350" width="425"&gt;&lt;param name="movie" value="http://www.youtube.com/v/bmVzM6m4ars"&gt;&lt;param name="wmode" value="transparent"&gt;&lt;embed src="http://www.youtube.com/v/bmVzM6m4ars" type="application/x-shockwave-flash" wmode="transparent" height="350" width="425"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;They're flexi prims, scripted to flap in a way which will resynchronize them within a few seconds if they get out of synch, and they appear and disappear based on whether or not the avatar is flying.  These were kind of tricky; flexi prims get really weird when you rotate them via a script.  When you turn on flexi, the "handles" move from the center of the prim to one edge.  You can rotate it manually with the handles — and it rotates from the edge, like you'd expect — but if you try to rotate it from the script, it'll still rotate from the center.  But if you cut the prim in half, like you do to make a swinging door open along one edge, it doesn't react the way you'd expect.  So I ended up having to do both a rotation &lt;span style="font-style: italic;"&gt;and&lt;/span&gt; a translation in order to keep their edges "anchored" on the shoulder blades.&lt;br /&gt;&lt;br /&gt;And, hey, comments on my other entries!  Time to go answer those...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-5490882930351786878?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/5490882930351786878/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=5490882930351786878' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/5490882930351786878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/5490882930351786878'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2006/12/quite-enough-holiday-cheer.html' title='Quite enough holiday cheer'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_WEXTWQoa4_c/RZLRtAjtOPI/AAAAAAAAADY/9FaC5cMYMAI/s72-c/OvalGemstoneNecklace1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-8946583173973017963</id><published>2006-12-18T09:28:00.000-05:00</published><updated>2006-12-18T13:37:35.883-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='building'/><category scheme='http://www.blogger.com/atom/ns#' term='mistakes'/><title type='text'>Another "oops" moment</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Day 36&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;If you're on a platform hundreds of meters up in the air, don't make a prim and then turn on the "Phantom" and "Physical" checkboxes just to see what will happen.&lt;br /&gt;&lt;br /&gt;What will happen is: as soon as you don't have your phantom physical prim selected for editing anymore, the "Physical" setting will cause it to drop straight down, and the "Phantom" setting will let it go right through the floor.  And then all the way down to the ground, passing through every platform and building in the way.  And then, when it hits the ground, it'll bounce and roll away.  And then it may try to go into a zone where somebody's put up a "no entry" barrier, and bounce away from that.&lt;br /&gt;&lt;br /&gt;But of course since you were hundreds of meters up and it caught you by surprise, by the time you get down to the ground, it's had a huge head start and you have no idea where it's gone.  And the next thing you know, you're dredging the river looking for your prim.  Which is where I finally found mine.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-8946583173973017963?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/8946583173973017963/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=8946583173973017963' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/8946583173973017963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/8946583173973017963'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2006/12/another-oops-moment.html' title='Another &quot;oops&quot; moment'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-8789583440564272078</id><published>2006-12-18T09:14:00.000-05:00</published><updated>2006-12-18T09:39:53.336-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='metablog'/><title type='text'>Scripting Tutorials</title><content type='html'>Natalia inadvertently reminds me that I've been very remiss!  Since the way Second Life does building is very different from the 3D modeling I'm used to, I've been posting neat little tricks that I find while playing around with prims.  But the scripting language is so similar to other programming that I don't even think about it!&lt;br /&gt;&lt;br /&gt;So I'm starting a series of scripting tutorials, in hopes that I can make Linden Scripting Language make sense to someone who's never written a computer program before.&lt;br /&gt;&lt;br /&gt;Now, I don't know how well I'll be able to put things in layman's terms — it can be hard, when you've been doing something for a long time, to break the concepts down clearly and concisely — so I hope (if you read them) that you'll be kind enough to give me some feedback on what I could make clearer, whether I should cover less information per post, or more information, or try to phrase things in a different way, or if I'm even coherent...&lt;br /&gt;&lt;br /&gt;I've put links to the tutorial posts up on the sidebar (I'm back-dating them to before when I started this blog, so that they'll all appear together and they won't clutter up my regular posts, and also putting them in reverse chronological order so that part 1 will appear before part 2 when you read through the archives).  So far I've written two parts; part 1 is just a &lt;a href="http://johannahyacinth.blogspot.com/2006/12/scripting-basics-part-1.html"&gt;tour through the default script&lt;/a&gt; which gets created when you click on the "New Script..." button, and part 2 talks about &lt;a href="http://johannahyacinth.blogspot.com/2006/12/scripting-basics-part-2_18.html"&gt;functions and data types&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-8789583440564272078?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/8789583440564272078/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=8789583440564272078' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/8789583440564272078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/8789583440564272078'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2006/12/scripting-tutorials.html' title='Scripting Tutorials'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-8468572270464594665</id><published>2006-12-17T12:26:00.000-05:00</published><updated>2006-12-17T20:42:49.007-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='building'/><category scheme='http://www.blogger.com/atom/ns#' term='mistakes'/><category scheme='http://www.blogger.com/atom/ns#' term='scripting'/><category scheme='http://www.blogger.com/atom/ns#' term='metablog'/><title type='text'>Oops!</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Day 35&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I tortured a torus into a spindly, curvy shape and made a simple rotation script in it  —  really nothing more than llTargetOmega( &lt;0,0,1&gt;, 10, 0.1 ) — and just for the heck of it, turned on the "Physical" checkbox to see what it would do.&lt;br /&gt;&lt;br /&gt;It hit the ground, fell over, and started rolling away — and it was so spindly, I couldn't select it to turn off the script!  I chased after it, madly right-clicking all the way, and it hit the edge of the sim and disappeared.  A few minutes later, I was notified that it had been returned to my Lost and Found folder because it had dropped off the world, two sims away.  (I wonder if there are any Wild West sims that could use some tumbleweeds?)&lt;br /&gt;&lt;br /&gt;Next time I decide to play around with physical objects, I'm building a corral for them first — and minimizing the script window after I save instead of closing it, so I can uncheck the "running" box if something goes horribly, horribly wrong.&lt;br /&gt;&lt;br /&gt;On a side note, I see that I've used exclamation points in just about every post title so far.  I'm going to have to watch that, or I'll run out of them.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-8468572270464594665?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/8468572270464594665/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=8468572270464594665' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/8468572270464594665'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/8468572270464594665'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2006/12/oops.html' title='Oops!'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-4340308501078788256</id><published>2006-12-17T10:49:00.000-05:00</published><updated>2006-12-17T11:30:28.884-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='texturing'/><category scheme='http://www.blogger.com/atom/ns#' term='building'/><category scheme='http://www.blogger.com/atom/ns#' term='Jewelry'/><title type='text'>Earrings!  And neuroses!</title><content type='html'>&lt;span style="font-weight: bold;"&gt;Day 35&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Last night (and into the wee hours of this morning), I made a set of earrings from the Cheapside Hoard (actually, I think it may have been a pendant — I stupidly forgot to get a picture of the card saying exactly what it was, or include anything in the picture to give a sense of scale — but  I think it looks great as an earring).  When I make (or break down and buy) a decent skin, I'll have to take a picture with them on.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_WEXTWQoa4_c/RYVnnwjtOOI/AAAAAAAAADM/G28NlbLwd14/s1600-h/CheapsideEarring1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_WEXTWQoa4_c/RYVnnwjtOOI/AAAAAAAAADM/G28NlbLwd14/s320/CheapsideEarring1.jpg" alt="" id="BLOGGER_PHOTO_ID_5009524093266770146" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The little tiny rings linking the parts together are toruses, of size &lt;0.020,0.020,0.020&gt;, hollow 95, hole size X=0.25,Y=0.49, profile cut B=0.74,0.76, and a twist of B=180,E=180.  It's the twist that lets them get so tiny — the profile cut leaves just the smallest sliver around the outside edge of the torus, and the twist rotates it around the minor axis until it's the inner edge.&lt;br /&gt;&lt;br /&gt;Once I'd finished the earrings, I had to buy hair that showed my ears!  On the other hand, I didn't have to upload a new set of textures for these, so I suppose I came out ahead.&lt;br /&gt;&lt;br /&gt;It's funny that I'm obsessing about how much L$ I spend in Second Life; in real life I'm a total spendthrift.  "I can't be overdrawn, I still have checks left!"  Maybe I could do better at balancing my RL checkbook if I had a real-time display of my available funds in the upper right corner of my field of vision...  I'm sure in fifty years, or whenever they finally develop brain-interface computers, people will be able to do that!  And I'm stuck here using Excel like a savage!&lt;br /&gt;&lt;br /&gt;Speaking of obsessing, I'm really starting to worry about the cross necklace; I don't see much religious symbolism at all in Second Life.  Does it make me come across as a religious fanatic?  Or am I just neurotic for even worrying about it?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-4340308501078788256?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/4340308501078788256/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=4340308501078788256' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/4340308501078788256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/4340308501078788256'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2006/12/earrings-and-neuroses.html' title='Earrings!  And neuroses!'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_WEXTWQoa4_c/RYVnnwjtOOI/AAAAAAAAADM/G28NlbLwd14/s72-c/CheapsideEarring1.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-4986085543394419086</id><published>2006-12-16T17:21:00.000-05:00</published><updated>2006-12-16T18:10:03.161-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='texturing'/><category scheme='http://www.blogger.com/atom/ns#' term='building'/><category scheme='http://www.blogger.com/atom/ns#' term='Jewelry'/><title type='text'>Much better! (And, goals and obstacles)</title><content type='html'>Day 34&lt;br /&gt;&lt;br /&gt;This morning, I optimized the Necklace Generator — since the necklace should be symmetrical, it's stilly to start in the front and work all the way around.  So now I start halfway through (in the center back), and each time I calculate the position for one link, I just have to flip it across the X axis by negating the Y value, and I have the position for its opposite link in the chain!  That cut the calculation time in half (though it still seems like it takes forever).&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_WEXTWQoa4_c/RYR0LAjtONI/AAAAAAAAADA/R3KRrnnYDQE/s1600-h/FinishedCross.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_WEXTWQoa4_c/RYR0LAjtONI/AAAAAAAAADA/R3KRrnnYDQE/s320/FinishedCross.jpg" alt="" id="BLOGGER_PHOTO_ID_5009256418019981522" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;That's a new, nicer chain.  I kept the basic link shape (it's a torus, size &lt;0.026,0.010,0.010&gt;, profile cut B=0.15,E=0.35, hollow 95), but instead of those flattened disc things I had linking them, I used a tiny little "cord" in between them (actually it's the same thing as the main link, but just brought down to 0.010 in the X size, and the profile cut range was reduced to B=0.20,E=0.30).  You can &lt;span style="font-style: italic;"&gt;just&lt;/span&gt; see them if you click on the above image for the larger version.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;"&gt;&lt;span style="font-size:130%;"&gt;What are my goals?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;I feel like a constant newbie, because I don't have a lot of things.  And I don't have a lot of things because I vowed not to spend any real-world money on Second Life.  It would be so easy to just plunk down $20 for some Linden Dollars (L$5279 at the current exchange rate, quite a bit more than I've been able to amass in over a month of camping chairs, dance pads, Scramble, and the occasional contest prize or gift).  But I'm not fishing for handouts here — if I manage to turn my building and scripting skills into a profitable SL business, there'll be a bit more satisfaction in knowing I started from nothing.&lt;br /&gt;&lt;br /&gt;I didn't get into the game with the intent of starting a business — I just thought it sounded like a neat playground for someone who enjoyed programming and 3D modeling (and besides, my boyfriend is in grad school and I have to find some way to occupy my time while he's got his nose stuck in a book).  But I saw some of the things people were selling, and I thought, "Hey, &lt;span style="font-style: italic;"&gt;I&lt;/span&gt; could do that!  Why &lt;span style="font-style: italic;"&gt;not&lt;/span&gt; give it a try?"&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;span style="font-weight: bold;font-size:130%;" &gt;Obstacles&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;Now, building is free (though I've been told that it used to cost L$ just to rez a prim).  Texturing, on the other hand... if you want to really customize your prim, you have to make the texture yourself.  Each texture costs L$10 to upload, and I create each of my gemstone textures in sets of 9 (amethyst, blue topaz, citrine, diamond, emerald, garnet, ruby, sapphire and topaz).  The rectangular ones need 18 (one set for vertical orientation, one set for horizontal), so that's L$90 or L$180 per set.&lt;br /&gt;&lt;br /&gt;The best place I've found for dancing overnight (and the fact that there are usually open dance pads is part of why it's "best") only pays L$2 per 17 minutes of dancing, so every hour and 25 minutes gives me enough to upload one texture.  One nine-color gem texture set requires over fourteen hours of dancing (assuming the sim doesn't get restarted and lose me all the dancing money I've accrued)!  Fortunately there are other things, like Scramble games, which pay more, but you have to actually &lt;span style="font-style: italic;"&gt;participate&lt;/span&gt;; you can't just sit there.&lt;br /&gt;&lt;br /&gt;&lt;a href="secondlife://Beyond%20The%20Prim/43/224/21"&gt;Technical User Interfacing&lt;/a&gt; offers a Career Course in jewelry, which includes information on how to set up a business (something I really need).  I've talked to a few students who have taken or are taking it, and they all seem to believe it's well worth the L$3000 it costs to take the course.  The last time it was offered, I had only a fraction of the cash to take the course.  I can afford it now, just barely, but my inner skinflint is apoplectic at the thought of spending that much money all at once!  Sigh.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-4986085543394419086?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/4986085543394419086/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=4986085543394419086' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/4986085543394419086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/4986085543394419086'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2006/12/much-better-and-goals-and-obstacles.html' title='Much better! (And, goals and obstacles)'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp3.blogger.com/_WEXTWQoa4_c/RYR0LAjtONI/AAAAAAAAADA/R3KRrnnYDQE/s72-c/FinishedCross.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-2206665428444666363</id><published>2006-12-16T00:47:00.000-05:00</published><updated>2006-12-16T15:05:13.083-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='texturing'/><category scheme='http://www.blogger.com/atom/ns#' term='building'/><category scheme='http://www.blogger.com/atom/ns#' term='Jewelry'/><category scheme='http://www.blogger.com/atom/ns#' term='scripting'/><title type='text'>Success!</title><content type='html'>Day 33&lt;br /&gt;&lt;br /&gt;Well, Johanna's Necklace Generator is &lt;span style="font-style: italic;"&gt;almost&lt;/span&gt; finished!  After two days of fruitless script-bashing, I swallowed my pride and asked for help on the Scripters of Second Life group.  A very polite young man (from Canada, which explains the politeness) spent about an hour and a half with me, ripping out my Euler rotations and replacing them with quaternion math, and then bashing on those until they finally started doing what I needed.&lt;br /&gt;&lt;br /&gt;The Necklace Generator is pretty simple, really — to use, at least!   It's a script which you put into a cylinder, along with an object representing the chain link you want to use.  Edit the script and tell it the name of the link object, how long the link is (which will usually be a little less than the &lt;span style="font-style: italic;"&gt;actual&lt;/span&gt; length, assuming the links go through each other), whether or not you want it to rotate every other link 90 degrees, how far down you want the chain to come in back, and a couple of other things.&lt;br /&gt;&lt;br /&gt;Then you edit your cylinder and stretch it to the dimensions you want.  The dimension along the X axis of the cylinder controls how wide the necklace is from front to back (I know, that should be the Y axis, but that would add a whole new layer of math to everything... no thanks!), the Y dimension controls how wide the necklace is from side to side, and the height of the cylinder controls how far down it comes in front.  (If you set its Z dimension to 0.010, it suppresses the drop entirely.)  How far down it comes in back is controlled by a variable, as mentioned above; it's pretty much a percentage of how far down it comes in front.&lt;br /&gt;&lt;br /&gt;Then you just touch the cylinder, and it thinks for a LONG time, and...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_WEXTWQoa4_c/RYNqBAjtOGI/AAAAAAAAABs/V9R0j1bie2k/s1600-h/NecklaceGenerator1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_WEXTWQoa4_c/RYNqBAjtOGI/AAAAAAAAABs/V9R0j1bie2k/s320/NecklaceGenerator1.jpg" alt="" id="BLOGGER_PHOTO_ID_5008963776128301154" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;...several months later, you have a necklace chain wrapped around the cylinder!  (Well, as long as you leave the cylinder with rotation &lt;0,0,0&gt; — it'll ignore the cylinder's rotation and act like it's unrotated regardless.)  That slice cut out of the cylinder is to remind me which way is "front".  I suppose I'll eventually make a special cylinder texture for the Necklace Generator.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_WEXTWQoa4_c/RYNqBQjtOHI/AAAAAAAAAB0/TyKqc2imL2o/s1600-h/NecklaceGenerator2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_WEXTWQoa4_c/RYNqBQjtOHI/AAAAAAAAAB0/TyKqc2imL2o/s320/NecklaceGenerator2.jpg" alt="" id="BLOGGER_PHOTO_ID_5008963780423268466" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;After seeing it, I'm not really sure I like the style of that link — the rings are so thin they disappear when seen edge-on — but you get the idea.  And from further away, it doesn't look too bad on the &lt;a href="http://johannahyacinth.blogspot.com/2006/12/jewelry.html"&gt;Cheapside Horde cross&lt;/a&gt;.  As you can see below, the rotations aren't perfect, but it's close enough that only a couple minutes' tweaking are enough to bring everything in line, which is still &lt;span style="font-style: italic;"&gt;much&lt;/span&gt; better than having to build the whole chain by hand!&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_WEXTWQoa4_c/RYNqBQjtOII/AAAAAAAAAB8/STNBoGUyAeg/s1600-h/GeneratedNecklace.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_WEXTWQoa4_c/RYNqBQjtOII/AAAAAAAAAB8/STNBoGUyAeg/s320/GeneratedNecklace.jpg" alt="" id="BLOGGER_PHOTO_ID_5008963780423268482" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;The only thing I have left to do is add an option to make it automatically come to a point in front, for pendants and the like.&lt;br /&gt;&lt;br /&gt;Also, I'm trying out some new textures for gems.  I loaded a test pattern texture (I think it was from Robin Wood's in-world &lt;a href="secondlife://Benten/25/115/28"&gt;texture tutorial&lt;/a&gt;) onto a cylinder tortured into a gemstone shape to see how the faces were actually patterned.  After doing a little unrotating, I came up with this texture:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_WEXTWQoa4_c/RYN3pQjtOKI/AAAAAAAAACM/ES5JBbbYK4o/s1600-h/FacetedGemTexture.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_WEXTWQoa4_c/RYN3pQjtOKI/AAAAAAAAACM/ES5JBbbYK4o/s320/FacetedGemTexture.jpg" alt="" id="BLOGGER_PHOTO_ID_5008978761269196962" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Basically, it's a straight-on view of the gemstone's table and crown, taking up the top 80% of the image (I pasted shrunken copies underneath it as a "bleed" area), with the bottom 20% being the crown "unwrapped" with &lt;a href="http://www.gimp.org/"&gt;The GIMP&lt;/a&gt;'s Polar Coords filter (Filters -&gt; Distorts -&gt; Polar Coords, with "To Polar" unchecked), cropped to the area beneath the points of the table and above the curves of the girdle, and then resized vertically to take up the bottom 20%.&lt;br /&gt;&lt;br /&gt;When uploaded to Second Life, and applied to the gemstone, a little massaging the repeats and offsets just a touch, it resulted in this:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_WEXTWQoa4_c/RYN3pgjtOLI/AAAAAAAAACU/Wxy5ATN13-k/s1600-h/TinyGemMapped.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_WEXTWQoa4_c/RYN3pgjtOLI/AAAAAAAAACU/Wxy5ATN13-k/s320/TinyGemMapped.jpg" alt="" id="BLOGGER_PHOTO_ID_5008978765564164274" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;It looks a little blurry, because I made the texture at too small a size.  But that doesn't matter for this particular gem, because unless people are looking &lt;span style="font-style: italic;"&gt;really&lt;/span&gt; closely, they probably won't notice.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_WEXTWQoa4_c/RYNqBQjtOJI/AAAAAAAAACE/CXQ7562IA9w/s1600-h/TinyGem1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_WEXTWQoa4_c/RYNqBQjtOJI/AAAAAAAAACE/CXQ7562IA9w/s320/TinyGem1.jpg" alt="" id="BLOGGER_PHOTO_ID_5008963780423268498" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is the gem on top of a cube sized to &lt;0.010,0.010,0.010&gt; — the smallest you can make a prim in Second Life without resorting to prim torture:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_WEXTWQoa4_c/RYOHNgjtOMI/AAAAAAAAACc/tUqBS9LLxHc/s1600-h/SmallerThanSmall.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_WEXTWQoa4_c/RYOHNgjtOMI/AAAAAAAAACc/tUqBS9LLxHc/s320/SmallerThanSmall.jpg" alt="" id="BLOGGER_PHOTO_ID_5008995876713871554" border="0" /&gt;&lt;/a&gt;The gem's prim is actually &lt;0.020,0.020,0.010&gt;, so it's twice as big around as it could be!  (I needed to make it bigger to get the proper slope for the crown.)  It's a sphere, set to dimple B=0.95, E=1.00, converted into a cylinder, tapered to X=0.95, Y=0.95, and then resized to &lt;0.020,0.020,0.010&gt;.&lt;br /&gt;&lt;br /&gt;If you care to try it, feel free to grab the gemstone texture and put it on the prim!  The table (the flat part on top) should have its horizontal and vertical repeats per face set to 0.400, the rotation to -90.00 degrees, and the vertical offset at 0.1.  The crown (the sloped edges) should be set with a horizontal repeat per face of 1.000, flipped; vertical repeat per face of 4.000, rotation of 0 degrees, a horizontal offset of 0.000, and a vertical offset of 0.300.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;(&lt;span style="font-weight: bold;"&gt;Edit&lt;/span&gt;: For some reason, when I followed my original instructions just to make sure I had them right, they didn't produce the results I expected!  Above are the corrected instructions.)&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-2206665428444666363?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/2206665428444666363/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=2206665428444666363' title='3 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/2206665428444666363'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/2206665428444666363'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2006/12/success.html' title='Success!'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp2.blogger.com/_WEXTWQoa4_c/RYNqBAjtOGI/AAAAAAAAABs/V9R0j1bie2k/s72-c/NecklaceGenerator1.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-5255891353923214075</id><published>2006-12-14T15:42:00.000-05:00</published><updated>2006-12-15T23:29:45.624-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='texturing'/><category scheme='http://www.blogger.com/atom/ns#' term='building'/><category scheme='http://www.blogger.com/atom/ns#' term='Jewelry'/><category scheme='http://www.blogger.com/atom/ns#' term='scripting'/><title type='text'>Jewelry</title><content type='html'>&lt;span style="font-family:georgia;"&gt;&lt;span style="font-weight: bold;"&gt;Day 32&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;So here are some pictures of the jewelry I've made so far.  I'm still not finished with the necklace chain generator, but &lt;strike&gt;I'm getting closer&lt;/strike&gt; (I now have placement on the perimeter of the cylinder &lt;strike&gt;and one rotation&lt;/strike&gt;; I just need &lt;strike&gt;two more&lt;/strike&gt; &lt;b&gt;all three&lt;/b&gt; rotations).&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_WEXTWQoa4_c/RYF8SPKSTXI/AAAAAAAAAAM/CIorOsDz6Is/s1600-h/Locket1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_WEXTWQoa4_c/RYF8SPKSTXI/AAAAAAAAAAM/CIorOsDz6Is/s320/Locket1.jpg" alt="" id="BLOGGER_PHOTO_ID_5008420913361866098" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Above is the first &lt;span style="font-style: italic;"&gt;really&lt;/span&gt; intricate piece I made, it's an attempt to reproduce my grandmother's locket in-world.  The necklace chain was made by hand, and took almost as long as the locket itself.  As with all my jewelry, it's scripted: you can change the color of the metal and the gemstone textures, turn bling on and off, and a couple of other minor things.  It's "actual size", the locket itself is about 5cm tall and 4cm wide.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_WEXTWQoa4_c/RYF_SvKSTYI/AAAAAAAAAAU/MM1mE1LhSHI/s1600-h/Swirlies.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_WEXTWQoa4_c/RYF_SvKSTYI/AAAAAAAAAAU/MM1mE1LhSHI/s320/Swirlies.jpg" alt="" id="BLOGGER_PHOTO_ID_5008424220486684034" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is a matching circlet, bracelet and armband; I was playing around with torturing a torus and the design suggested itself to me.  Like with the locket, you can change the colors — either individually or all pieces at once.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp1.blogger.com/_WEXTWQoa4_c/RYGDdPKSTZI/AAAAAAAAAAc/qMPJK82mYxg/s1600-h/Brooch1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp1.blogger.com/_WEXTWQoa4_c/RYGDdPKSTZI/AAAAAAAAAAc/qMPJK82mYxg/s320/Brooch1.jpg" alt="" id="BLOGGER_PHOTO_ID_5008428798921821586" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;This is a pretty simple brooch.  I mainly made it to showcase a set of gemstone textures I made.  The problem with the usual gemstone textures is that they don't look good when wrapped around a sphere, spheres need to be textured with a Mercator-like projection for minimal distortion.  I rendered a spherical faceted gem in &lt;a href="http://www.povray.org/"&gt;POV-Ray&lt;/a&gt; with an orthographic camera, then used &lt;a href="http://www.gimp.org/"&gt;The GIMP&lt;/a&gt; to perform a reverse polar mapping on it.  That gave me the top hemisphere, so I just cloned the layer, rotated it 180 degrees and moved it down so that its top edge was touching the bottom edge of the original layer.  Flatten, save and upload, &lt;span style="font-style: italic;"&gt;et voilà! &lt;/span&gt;A spherical gem texture that looks good on a sphere!  I also made it in multiple colors:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp2.blogger.com/_WEXTWQoa4_c/RYGDgfKSTaI/AAAAAAAAAAk/dTzV1c1Yk3I/s1600-h/Brooches.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp2.blogger.com/_WEXTWQoa4_c/RYGDgfKSTaI/AAAAAAAAAAk/dTzV1c1Yk3I/s320/Brooches.jpg" alt="" id="BLOGGER_PHOTO_ID_5008428854756396450" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I made nine gem colors in all: amethyst, blue topaz, citrine, diamond, emerald, garnet, ruby, sapphire and topaz.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp3.blogger.com/_WEXTWQoa4_c/RYGEAvKSTbI/AAAAAAAAAAs/aGCBpqvNTP0/s1600-h/CheapsideCross1.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp3.blogger.com/_WEXTWQoa4_c/RYGEAvKSTbI/AAAAAAAAAAs/aGCBpqvNTP0/s320/CheapsideCross1.jpg" alt="" id="BLOGGER_PHOTO_ID_5008429408807177650" border="0" /&gt;&lt;/a&gt;This cross, which hopefully will have a necklace chain sometime before the end of the century, is a reproduction of a piece from the &lt;a href="http://images.google.com/images?q=%22Cheapside%20Hoard%22"&gt;Cheapside Hoard&lt;/a&gt;, a treasure trove of jewelry from around 1600, dug up in the early 1900s.  There are plenty of things I want to make from the Hoard. Above is a rectangular-cut amethyst texture I made; below are garnet and blue topaz (shown with the metal set to gold and silver, respectively).   Actually, I created two textures for each color: one for the gem oriented horizontally, and one for vertical orientation.  Alas, the distortion caused by tapering the box robbed a lot of the detail from the sides of the gems, but it's still not too bad.  There's no bling on this piece, because I found it was just so tiny the bling particles overwhelmed it.  But sometimes subtle is much nicer than flashy.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_WEXTWQoa4_c/RYGEA_KSTcI/AAAAAAAAAA0/t8k_hqPULcQ/s1600-h/CheapsideCrosses.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_WEXTWQoa4_c/RYGEA_KSTcI/AAAAAAAAAA0/t8k_hqPULcQ/s320/CheapsideCrosses.jpg" alt="" id="BLOGGER_PHOTO_ID_5008429413102144962" border="0" /&gt;&lt;/a&gt;The little finial gemstones are almost &lt;span style="font-style: italic;"&gt;too&lt;/span&gt; small, as I mentioned in my previous post; I lost quite a few attempts while making them.  Create a sphere and set its dimple to B=0.98 and E=1.00, then change it to a cylinder.  Taper it to x=0.95 and y=0.95, and then set the size to x=0.010, y=0.010, z=0.010, and you have an incredibly tiny conical &lt;a href="http://en.wikipedia.org/wiki/Frustum"&gt;frustum&lt;/a&gt;.  The rectangular and diamond-shaped pieces were made small (or excessively tiny!) in a similar fashion; dimple a sphere (I think I used B=0.75,E=1), change it into a box, then taper and resize to taste.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_WEXTWQoa4_c/RYGEA_KSTdI/AAAAAAAAAA8/PgQDAuUA4_w/s1600-h/JewelryDisplay.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_WEXTWQoa4_c/RYGEA_KSTdI/AAAAAAAAAA8/PgQDAuUA4_w/s320/JewelryDisplay.jpg" alt="" id="BLOGGER_PHOTO_ID_5008429413102144978" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Just for a little sense of scale, here's a table showing the different pieces of jewelry I've made so far.  The sword isn't really jewelry, but I'm proud of it too.  Most nights, the &lt;a href="secondlife://Beyond%20The%20Prim/43/224/21"&gt;Technical User Interfacing&lt;/a&gt; (or TUi) school holds challenge build competitions: you show up, and when the competition starts, they tell you what the topic is.  You have 45 minutes to create it entirely from scratch (you can use textures and scripts from your inventory, but that's it — all the prims in your build have to be created, textured, and positioned right there).  The topic for that night, obviously, was "swords".  I decided I wanted something ladylike — no point in making something I couldn't use! — so I Googled for images of swords and found a beautiful swept-hilt rapier.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://bp0.blogger.com/_WEXTWQoa4_c/RYGEA_KSTeI/AAAAAAAAABE/2sWf_9KGTio/s1600-h/SwordHilt.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer;" src="http://bp0.blogger.com/_WEXTWQoa4_c/RYGEA_KSTeI/AAAAAAAAABE/2sWf_9KGTio/s320/SwordHilt.jpg" alt="" id="BLOGGER_PHOTO_ID_5008429413102144994" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;I was working right up to the time limit.  I didn't win (well, &lt;span style="font-style: italic;"&gt;I&lt;/span&gt; thought mine looked the best!) but it was fun, and challenging, and I made something I probably wouldn't have otherwise.  Unfortunately, those contests are usually held at 10PM Pacific time, so if I participate on a work night I only get about four hours' sleep.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-5255891353923214075?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/5255891353923214075/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=5255891353923214075' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/5255891353923214075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/5255891353923214075'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2006/12/jewelry.html' title='Jewelry'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://bp1.blogger.com/_WEXTWQoa4_c/RYF8SPKSTXI/AAAAAAAAAAM/CIorOsDz6Is/s72-c/Locket1.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-6900893827507533920</id><published>2006-12-13T09:57:00.000-05:00</published><updated>2007-01-10T16:38:21.194-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='building'/><category scheme='http://www.blogger.com/atom/ns#' term='Jewelry'/><category scheme='http://www.blogger.com/atom/ns#' term='scripting'/><title type='text'>Math is hard, let's go shopping!</title><content type='html'>&lt;span style="font-family: georgia;font-family:georgia;" &gt;&lt;span style="font-weight: bold;"&gt;Day 31&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;I find building jewelry in Second Life to be relaxing, rewarding and aggravating.  "Relaxing" because there's a regularity to it; it's precision work, and I can just let the world fade away as I concentrate on moving little tiny prims around.  It's what I imagine Zen is like, complete focus on a single thing, where time and the physical world are meaningless.&lt;br /&gt;&lt;br /&gt;It's rewarding because there's always the challenge to slice up the prims just a &lt;span style="font-style: italic;"&gt;teeny&lt;/span&gt; bit smaller than they're supposed to go, without getting them so tiny that the client won't render them anymore and they vanish, invisible and unselectable, not to be seen again until the sandbox returns your them because they've been there too long.&lt;br /&gt;&lt;br /&gt;But it's aggravating because if you want to do things perfectly, sometimes you have to do math.  And I hate math.  I'm not good at it, I look at &lt;a href="http://mathforum.org/kb/message.jspa?messageID=4502815&amp;tstart=0"&gt;pages like this&lt;/a&gt; and want to run away.  (And that was the &lt;span style="font-style: italic;"&gt;least&lt;/span&gt; technical (and condescending!) answer in the thread!)&lt;br /&gt;&lt;br /&gt;See, I was trying to build a better mousetrap.  Necklace chains are an enormous pain to do by hand (Zen relaxation is great, but there's only so much of it I can stand).  And there are a few scripts out there which will automate building necklaces, but I haven't found any which do &lt;span style="font-style: italic;"&gt;quite&lt;/span&gt; what I wanted:&lt;br /&gt;&lt;/span&gt;&lt;ol style="font-family: georgia;"&gt;&lt;li&gt;Let the user create a cylinder and stretch it to the desired dimensions, so that the &lt;span style="font-style: italic;"&gt;x&lt;/span&gt;  dimension represents the width of the neck, the &lt;span style="font-style: italic;"&gt;y&lt;/span&gt; dimension represents the front-to-back measurement (including the amount the chain comes forward to lie properly on the chest), and the &lt;span style="font-style: italic;"&gt;z&lt;/span&gt; dimension represents the vertical curve of the chain (coming around the neck, over the shoulders and down the chest).&lt;span style="color: rgb(192, 192, 192);"&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;Keep the spacing of the links constant, with no clustering or gapping if the path is elliptical.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Calculate the proper number of links necessary, based on the length of the links and the distance traveled around the path.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Rotate every other link 90 degrees around the axis of travel, if desired.&lt;br /&gt;&lt;/li&gt;&lt;/ol&gt;&lt;span style="font-family: georgia;"&gt;Doesn't sound too hard, right?&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: georgia;"&gt;Ha!  For starters, there's not even a definitive formula for finding the perimeter of an ellipse — just approximations with varying degrees of accuracy!  I bashed my head against a wall for about eight hours last night and this morning, trying to get the formula in the above-linked page to work, before I finally gave up and resorted to a brute-force approach.  It's not pretty, it's slow as molasses, but at least it works.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: georgia;"&gt;Well, what I've got written &lt;/span&gt;&lt;span style="font-style: italic; font-family: georgia;"&gt;so far&lt;/span&gt;&lt;span style="font-family: georgia;"&gt; works — they took the grid down for updates before I was able to write the code which rotates the individual links into the proper orientation.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: georgia;"&gt;Once I get some decent chains made, I can put up some pictures of my jewelry!&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:georgia;"&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family: georgia;"&gt;Oh, also, a public service announcement: don't try to play Primtionary (like Pictionary, only with prims) if you've had a drink or two.  The results aren't pretty.&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-6900893827507533920?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/6900893827507533920/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=6900893827507533920' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/6900893827507533920'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/6900893827507533920'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2006/12/math-is-hard-lets-go-shopping.html' title='Math is hard, let&apos;s go shopping!'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-5801586062745893819</id><published>2006-12-09T14:04:00.000-05:00</published><updated>2006-12-10T00:17:28.252-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='metablog'/><title type='text'>Here Goes Nothing</title><content type='html'>&lt;span style="font-family:georgia;"&gt;I never thought I would write a blog, but then again I never thought I'd get addicted to an MMORPG, so it just goes to show.&lt;br /&gt;&lt;br /&gt;I used to make fun of my boyfriend for spending hours playing World of Warcrack (instead of paying attention to &lt;span style="font-style: italic;"&gt;me&lt;/span&gt;, like he should have been).  Well, now I guess I've shown him how it feels, because now &lt;span style="font-style: italic;"&gt;he's&lt;/span&gt; the one complaining about being a computer widow.  Turnabout is fair play, bucko!&lt;br /&gt;&lt;br /&gt;Anyway, I was motivated to start this blog when I came across &lt;a href="http://slnatalia.blogspot.com/"&gt;Natalia Zelmanov&lt;/a&gt;'s Second Life blog.  It was interesting seeing all the things she's made, and how she made them.  She has the Mad Costuming Skillz™, and I've found her writings really helpful.  Me, I'm probably strongest as a scripter, but I'm diving into all aspects of SL — building, dressmaking, animating, and so on.&lt;br /&gt;&lt;br /&gt;So here's a journal of my progress through Second Life, starting 28 days after I first logged on.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-5801586062745893819?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/5801586062745893819/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=5801586062745893819' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/5801586062745893819'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/5801586062745893819'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2006/12/here-goes-nothing.html' title='Here Goes Nothing'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-1073155174211013695</id><published>2006-11-30T23:00:00.000-05:00</published><updated>2006-12-18T09:16:58.532-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorial: Scripting'/><title type='text'>Scripting: the basics, part 1</title><content type='html'>LSL, the Linden Scripting Language, is very similar to many modern scripting languages, such as JavaScript or PHP (which themselves have a lot in common with the C programming language and its descendants).&lt;br /&gt;&lt;br /&gt;But not a whole lot of people write scripts in Second Life, maybe because it's a bit scary with all those curly brackets and parentheses and semicolons.  I thought I'd try my hand at being a teacher in SL, since I learned so much in classes my first couple of weeks there, and wanted to "give back" to the community, so I'll use this blog to start organizing my thoughts for what and how I'd like to teach!&lt;br /&gt;&lt;br /&gt;&lt;hr /&gt;&lt;br /&gt;For this first post, let's look at the default "New Script" which gets created when you click the &lt;span style="font-weight: bold;"&gt;New Script…&lt;/span&gt; button in the Content tab of the edit window.  (If you've never tried this before, rez a prim and select the Edit button on the Focus/Move/Edit/Create/Land panel that pops up.  If it's a short window, click on the &lt;span style="font-weight: bold;"&gt;More »&lt;/span&gt; button in the lower right-hand corner.  Then click on the rightmost tab labeled &lt;span style="font-weight: bold;"&gt;Content&lt;/span&gt;, and press the &lt;span style="font-weight: bold;"&gt;New Script…&lt;/span&gt; button.)&lt;br /&gt;&lt;br /&gt;When you create a new script, your prim will say something like "Object: Hello, Avatar!" (assuming you haven't renamed it from its default name of "Object").  Double-click on the script (named, aptly enough, "New Script"), and an edit window will pop up.  The script will look something like this:&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1px solid black; padding: 4pt; margin-left: 0.5in; margin-right: 0.5in; color: black; background-color: rgb(212, 219, 215);"&gt;&lt;pre  style="line-height: 10pt;font-size:8pt;"&gt;&lt;span style="color: rgb(152, 44, 102);"&gt;default&lt;/span&gt;&lt;br /&gt;{&lt;br /&gt;   &lt;span style="color: rgb(0, 102, 152);"&gt;state_entry&lt;/span&gt;()&lt;br /&gt;   {&lt;br /&gt;       &lt;span style="color: rgb(152, 0, 61);"&gt;llSay&lt;/span&gt;(0, &lt;span style="color: rgb(0, 76, 0);"&gt;"Hello, Avatar!"&lt;/span&gt;);&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;span style="color: rgb(0, 102, 152);"&gt;touch_start&lt;/span&gt;(&lt;span style="color: rgb(44, 102, 44);"&gt;integer&lt;/span&gt; total_number)&lt;br /&gt;   {&lt;br /&gt;       &lt;span style="color: rgb(152, 0, 61);"&gt;llSay&lt;/span&gt;(0, &lt;span style="color: rgb(0, 76, 0);"&gt;"Touched."&lt;/span&gt;);&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;&lt;/div&gt;&lt;br /&gt;The first line in the script is "default".  This means that the following code pertains to the object's default state.  (States are an easy way of making the object react different ways to the same stimuli.  If you don't have need of different states, as this script doesn't, then everything happens in the default state.)&lt;br /&gt;&lt;br /&gt;The second line is an opening curly bracket (or curly brace).  Curly braces are used in LSL, as in several other languages, for grouping multiple statements together.  All states and functions must enclose their contents in curly brackets, even if those contents are empty.  (They'll be more useful later on, when we get into conditionals and flow control.)&lt;br /&gt;&lt;br /&gt;The third line is "state_entry()" - this is a function called every time the script enters a state.  If it's located in the &lt;span style="font-weight: bold;"&gt;default&lt;/span&gt; state, it gets called every time the script is saved or reset.  The parentheses appear after every function definition, and enclose the parameters that are passed to the function.  The state_entry() function has no parameters, so there's nothing between the parentheses.&lt;br /&gt;&lt;br /&gt;The fourth line is another curly bracket, this time enclosing the contents of the state_entry() function.  (You'll notice that things are indented, and each time there's a set of curly brackets, everything inside them gets indented another level; this isn't required, but it does make it a lot easier for a human to read if the contents of every nested container are indented by a tab's worth of spaces.)&lt;br /&gt;&lt;br /&gt;The fifth line — the actual contents of the state_entry() function — is a call to a predefined LSL function, &lt;span style="font-weight: bold;"&gt;llSay()&lt;/span&gt;.  (Many predefined LSL functions start with "ll", for Linden Lab.)  This particular function call causes the object to say "Hello, Avatar!" on chat channel 0 (zero), the one players talk on and the only one they can "hear" without some sort of scripted listening device.  The line ends with a semicolon (;), which is put at the end of every statement.&lt;br /&gt;&lt;br /&gt;The sixth line is a closing curly bracket, and as we can see by the way it's indented, it lines up with the opening brace for the state_entry() function.  If you find a script where things are not indented like this, you may have to count the opening and closing braces to find out where things begin and end!&lt;br /&gt;&lt;br /&gt;After a blank line (again, not strictly necessary, but good for readability), we have a new function, &lt;span style="font-weight: bold;"&gt;touch_start()&lt;/span&gt;.  This one is called whenever someone begins touching the object or prim containing the script, and takes one parameter, an integer (whole number, with no decimal point) which indicates the total number of agents (avatars, or players) who have started touching it since the last time it was called.  This is usually just one, unless people touched it simultaneously or the sim is very lagged.  This particular script doesn't do anything with that parameter, but we still need to include it.&lt;br /&gt;&lt;br /&gt;&lt;div style="border: 1px solid rgb(0, 0, 255); padding: 4pt; margin-left: 4pt; margin-right: 4pt; color: rgb(0, 0, 64); background-color: rgb(248, 248, 255); font-size: 90%; line-height: 120%;"&gt;&lt;b&gt;Handy Tip:&lt;/b&gt; When you type a word that the script editor recognizes as a valid LSL keyword, it changes color.  You can hover your mouse pointer over a colored word to see more information about it — for example, if you type the name of a function and hover the mouse pointer over it, it will pop up a little tooltip telling you what parameters it takes, and what kind of data they are.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;Within the curly brackets for touch_start(), we have another llSay() function.  In this particular script, when someone touches the prim or object containing the script, it will say "Touched."&lt;br /&gt;&lt;br /&gt;After the closing curly bracket for the touch_start() function is the closing curly bracket for the default state... and that's the end of the script!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-1073155174211013695?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/1073155174211013695/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=1073155174211013695' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/1073155174211013695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/1073155174211013695'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2006/12/scripting-basics-part-1.html' title='Scripting: the basics, part 1'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-1312195419148358709</id><published>2006-11-30T22:00:00.000-05:00</published><updated>2006-12-18T09:17:11.710-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorial: Scripting'/><title type='text'>Scripting: the basics, part 2</title><content type='html'>In &lt;a href="http://johannahyacinth.blogspot.com/2006/12/scripting-basics-part-1.html"&gt;the first part&lt;/a&gt;, we wrote a couple of functions, and used another one a couple of times, but we didn't really go over what a function is, how it works, or why you would want to use one. Here we will look at functions, and also at the types of data which Second Life scripts can use.&lt;br /&gt;&lt;br /&gt;In LSL, the Linden Scripting Language (and in programming in general), a &lt;span style="font-style: italic;"&gt;function&lt;/span&gt; is a modular unit of code which can optionally be passed a number of &lt;span style="font-style: italic;"&gt;parameters&lt;/span&gt;, and which can optionally return a &lt;span style="font-style: italic;"&gt;value&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;pre class="lsl"&gt;&lt;span class="datatype"&gt;float&lt;/span&gt; quintuple( &lt;span class="datatype"&gt;float&lt;/span&gt; theNumber )&lt;br /&gt;{&lt;br /&gt; &lt;span class="keyword"&gt;return&lt;/span&gt; theNumber * 5.0; &lt;span class="comment"&gt;// Multiply by 5&lt;/span&gt;&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;A silly little example, but it should serve to illustrate the main points of a function.&lt;br /&gt;&lt;br /&gt;First, we have the &lt;span style="font-style: italic;"&gt;function declaration.&lt;/span&gt;  This consists of three parts: the optional  &lt;span style="font-style: italic;"&gt;return type &lt;/span&gt;(in this case, a "float", or floating-point number — a number which can have a decimal point, as opposed to an integer which must be a whole number), the &lt;span style="font-style: italic;"&gt;function name&lt;/span&gt;, and the optional &lt;span style="font-style: italic;"&gt;parameter list&lt;/span&gt;, which shows what kind of data the function expects, and gives it a (hopefully) descriptive name.&lt;br /&gt;&lt;br /&gt;If your function doesn't return a value, leave off the return type.  If it does return a value, the return type must indicate the type of data the function will return (we'll cover data types later on in this post).  The function name is required (otherwise there's no way to call the function).  The parentheses which enclose the parameter list must be present in every function declaration, even if you have no actual parameters.&lt;br /&gt;&lt;br /&gt;Next we have the curly brackets which enclose the statements of the function itself.  Curly brackets are used to group multiple statements into a larger unit.  They are required to enclose the body of a function, even if the body consists of only one statement (as this one does).&lt;br /&gt;&lt;br /&gt;And inside the curly brackets we have a statement which multiplies the parameter by 5, and returns that value.  The statement ends with a semicolon.  After the semicolon are two forward slashes (//) — this starts a &lt;span style="font-style: italic;"&gt;comment&lt;/span&gt;.  You can put anything you want in a comment, but usually comments are used to explain what's going on (either so that somebody else reading your script can understand what your intent is, or when you come back to modify your script months later, &lt;span style="font-style: italic;"&gt;you&lt;/span&gt; can understand what your intent was).&lt;br /&gt;&lt;br /&gt;And finally we have the closing curly bracket, which terminates the function declaration.&lt;br /&gt;&lt;br /&gt;If we were to call this function from elsewhere in the script, it might look something like this:&lt;br /&gt;&lt;pre class="lsl"&gt;&lt;span class="datatype"&gt;float&lt;/span&gt; result = quintuple( 3.0 );&lt;/pre&gt;This line creates a new floating-point variable named "result", and assigns the return value of our "quintuple" function to it.  Since we pass it the number 3.0 as the parameter, and the function multiplies the parameter by 5.0, we should end up with 15.0 in the variable named result.&lt;br /&gt;&lt;br /&gt;Why would you want to use this as a function, rather than just multiplying values directly in your code?  Well, you wouldn't; as I said, this was just a silly example.  But if you have a case where you perform multiple actions on some data, and you have to perform these actions many times from different places in your code, you might turn the actions into a function.  You can also improve the readability of complex code by moving logical groupings of instructions into their own functions.&lt;br /&gt;&lt;br /&gt;And now a word about variables, and the types of data they can represent.&lt;br /&gt;&lt;br /&gt;A &lt;span style="font-style: italic;"&gt;variable&lt;/span&gt; is a way of storing values for later use.  You can store seven types of values in LSL:&lt;br /&gt;&lt;ul&gt;&lt;br /&gt;  &lt;li&gt;&lt;span class="datatype"&gt;integer&lt;/span&gt; - a whole number, with no decimal point. (examples: 0, 1, -27, 42, 2147483647)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;span class="datatype"&gt;float&lt;/span&gt; - a floating-point number, or one with a decimal point. (examples: 0.0, 3.141592654, 17.6, -57.0)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;span class="datatype"&gt;string&lt;/span&gt; - text data.  String values are enclosed in quotes when you define them.  (examples: "Hello, Avatar!", "yes", "no", "I'm sorry, Dave, but I'm afraid I can't do that.", "1942"&lt;sup&gt;1&lt;/sup&gt;)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;span class="datatype"&gt;key&lt;/span&gt; - A special kind of string, which represents something within Second Life.  Key values are also enclosed in quotes when you define them. (example: "c541c47f-e0c0-058b-ad1a-d6ae3a4584d9")&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;span class="datatype"&gt;vector&lt;/span&gt; - a three-part number which represents a 3D position in space.  You can also use vectors to store &lt;span style="font-style:italic;"&gt;Euler rotations&lt;/span&gt;, but we won't get into those quite yet.  The components of a vector are each &lt;span class="datatype"&gt;float&lt;/span&gt; numbers.  (examples: &lt;0,0,0&gt;&lt;sup&gt;2&lt;/sup&gt;, &lt;17.8,32.5,16.0&gt;)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;span class="datatype"&gt;rotation&lt;/span&gt; - similar to a &lt;span class="datatype"&gt;vector&lt;/span&gt;, only with four components.  These are used for quaternion rotations, and will make your brain hurt.  (examples: &lt;0,0,0,1&gt;, &lt;3.141592654,0.0,0.0,1.0&gt;)&lt;/li&gt;&lt;br /&gt;  &lt;li&gt;&lt;span class="datatype"&gt;list&lt;/span&gt; - a special kind of data type which can contain zero or more elements of any other data type.  Lists are signified by square brackets surrounding their elements, which are separated by commas.  We'll get into lists much later.  (examples: [0,1,2,3,4,5], ["Bob", "Mary", "Joe", "Sue"], [], [1, 3.141592654, "Isn't this fun?", &lt;0,0,0&gt;])&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;br /&gt;&lt;br /&gt;1. Even though 1942 is an &lt;span class="datatype"&gt;integer&lt;/span&gt;, you can have a numeric value in a &lt;span class="datatype"&gt;string&lt;/span&gt;.  It's the quotes that make all the difference.&lt;br /&gt;&lt;br /&gt;2. If a &lt;span class="datatype"&gt;float&lt;/span&gt; number has nothing but zeroes after the decimal point, you can &lt;span style="font-style:italic;"&gt;usually&lt;/span&gt; leave off the decimal point; LSL will usually promote it to a &lt;span class="datatype"&gt;float&lt;/span&gt;.  &lt;span style="font-style:italic;"&gt;Usually.&lt;/span&gt;  This is not, however, always the case; certain functions will produce errors if you pass an &lt;span class="datatype"&gt;integer&lt;/span&gt; in a list where a &lt;span class="datatype"&gt;float&lt;/span&gt; is expected.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-1312195419148358709?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/1312195419148358709/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=1312195419148358709' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/1312195419148358709'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/1312195419148358709'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2006/12/scripting-basics-part-2_18.html' title='Scripting: the basics, part 2'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-7504661390079698623.post-4256535661738572344</id><published>2006-11-30T21:00:00.000-05:00</published><updated>2007-01-07T18:54:53.146-05:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Tutorial: Scripting'/><title type='text'>Scripting: the basics, part 3</title><content type='html'>This script is one I wrote for a barrier which prohibits entry unless the barrier's owner touches or collides with it; when this happens, it will set itself to PHANTOM and turn partially transparent for five seconds, and then return to its previous opaque solidity.&lt;br /&gt;&lt;br /&gt;It's also a good demonstration of how to modify prim parameters, set timers, and use multiple states.&lt;br /&gt;&lt;br /&gt;&lt;pre class="lsl"&gt;&lt;span class="state"&gt;default&lt;/span&gt; {&lt;br /&gt;   &lt;span class="function"&gt;collision_start&lt;/span&gt;(&lt;span class="datatype"&gt;integer&lt;/span&gt; total_number) {&lt;br /&gt;       &lt;span class="keyword"&gt;if&lt;/span&gt; (&lt;span class="llfunction"&gt;llDetectedKey&lt;/span&gt;( 0 ) == &lt;span class="llfunction"&gt;llGetOwner&lt;/span&gt;()) &lt;span class="state"&gt;state&lt;/span&gt; open;&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;span class="function"&gt;touch_start&lt;/span&gt;(&lt;span class="datatype"&gt;integer&lt;/span&gt; total_number) {&lt;br /&gt;       &lt;span class="keyword"&gt;if&lt;/span&gt; (&lt;span class="llfunction"&gt;llDetectedKey&lt;/span&gt;( 0 ) == &lt;span class="llfunction"&gt;llGetOwner&lt;/span&gt;()) &lt;span class="state"&gt;state&lt;/span&gt; open;&lt;br /&gt;   }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span class="state"&gt;state&lt;/span&gt; open {&lt;br /&gt;   &lt;span class="function"&gt;state_entry&lt;/span&gt;() {&lt;br /&gt;       &lt;span class="llfunction"&gt;llSetPrimitiveParams&lt;/span&gt;( [&lt;span class="constant"&gt;PRIM_PHANTOM&lt;/span&gt;,&lt;span class="constant"&gt;TRUE&lt;/span&gt;,&lt;br /&gt;                              &lt;span class="constant"&gt;PRIM_COLOR&lt;/span&gt;,4,&lt;1,1,1&gt;,0.75,&lt;br /&gt;                              &lt;span class="constant"&gt;PRIM_COLOR&lt;/span&gt;,2,&lt;1,1,1&gt;,0.75] );&lt;br /&gt;       &lt;span class="llfunction"&gt;llSetTimerEvent&lt;/span&gt;( 5 );&lt;br /&gt;   }&lt;br /&gt;&lt;br /&gt;   &lt;span class="function"&gt;timer&lt;/span&gt;() {&lt;br /&gt;       &lt;span class="llfunction"&gt;llSetPrimitiveParams&lt;/span&gt;( [&lt;span class="constant"&gt;PRIM_PHANTOM&lt;/span&gt;,&lt;span class="constant"&gt;FALSE&lt;/span&gt;,&lt;br /&gt;                              &lt;span class="constant"&gt;PRIM_COLOR&lt;/span&gt;,4,&lt;1,1,1&gt;,1.0,&lt;br /&gt;                              &lt;span class="constant"&gt;PRIM_COLOR&lt;/span&gt;,2,&lt;1,1,1&gt;,1.0] );&lt;br /&gt;       &lt;span class="llfunction"&gt;llSetTimerEvent&lt;/span&gt;( 0 );&lt;br /&gt;       &lt;span class="state"&gt;state default&lt;/span&gt;;&lt;br /&gt;   }&lt;br /&gt;}&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Okay, now the first line in this script is the &lt;span class="default"&gt;default&lt;/span&gt; state.  States are a way for the script to behave differently based on certain criteria; without states, we would have to use variables to keep track of things.  In this script, I have two states: the default state (in which a touch or collision by the owner will "open" the barrier), and the "open" state, in which it opens itself, waits five seconds, and then closes again; in this state, further touches and collisions will do nothing.&lt;br /&gt;&lt;br /&gt;We have two functions in the default state: &lt;span class="function"&gt;collision_start&lt;/span&gt; and &lt;span class="function"&gt;touch_start&lt;/span&gt;.  These two functions are called, if they exist, when an avatar or object starts to collide with the prim containing the script, or when an avatar starts touching the prim containing the script.&lt;br /&gt;&lt;br /&gt;These two functions are passed a parameter, an integer value indicating how many objects or avatars have started colliding with (or touching) the prim.  This number is usually one (it's theoretically possible for two avatars to start colliding with or touching the prim at the exact same instant, but for the sake of simplicity we're going to assume that it's only one).&lt;br /&gt;&lt;br /&gt;As it happens, I want both of these conditions to do exactly the same thing, so the code within each function is identical:&lt;br /&gt;&lt;br /&gt;&lt;pre class="lsl"&gt;       &lt;span class="keyword"&gt;if&lt;/span&gt; (&lt;span class="llfunction"&gt;llDetectedKey&lt;/span&gt;( 0 ) == &lt;span class="llfunction"&gt;llGetOwner&lt;/span&gt;()) &lt;span class="state"&gt;state&lt;/span&gt; open;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="llfunction"&gt;llDetectedKey&lt;/span&gt;() gets the UUID of the object detected by the function.  Index number 0, which we're using here, is the first object or avatar detected.  (We could check the "total_number" variable, and if it's greater than one, we could loop through and check all of them, using &lt;span class="llfunction"&gt;llDetectedKey&lt;/span&gt;( 1 ), &lt;span class="llfunction"&gt;llDetectedKey&lt;/span&gt;( 2 ), and so on.)&lt;br /&gt;&lt;br /&gt;The statement then compares the value returned by &lt;span class="llfunction"&gt;llDetectedKey&lt;/span&gt;() against the key of the person who owns the barrier, which is returned by the &lt;span class="llfunction"&gt;llGetOwner&lt;/span&gt;() function.  If they're equal, then it switches into the &lt;span class="state"&gt;state&lt;/span&gt; I've named "open".&lt;br /&gt;&lt;br /&gt;&lt;div class="tip"&gt;&lt;b&gt;Tip:&lt;/b&gt; The &lt;span class="state"&gt;default&lt;/span&gt; state must occur first in the script.  If you try to insert another state above &lt;span class="state"&gt;default&lt;/span&gt;, the LSL compiler will produce a syntax error when you try to save the script.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;The "open" state contains a function named &lt;span class="function"&gt;state_entry&lt;/span&gt;.  This gets called, if it exists, whenever the script enters the state the function is contained within.  All states may have a &lt;span class="function"&gt;state_entry&lt;/span&gt; function; like with all predefined functions, whichever one exists in the currently active state is the one that gets called.&lt;br /&gt;&lt;br /&gt;The &lt;span class="function"&gt;state_entry&lt;/span&gt; function calls &lt;span class="lslfunction"&gt;llSetPrimitiveParams&lt;/span&gt;().  This is a function which can change nearly every feature of a prim, including what shape it is!  It takes a list of things you want to change, and what you want to change them to.  (The wiki has a &lt;a href="http://lslwiki.com/lslwiki/wakka.php?wakka=llSetPrimitiveParams"&gt;great page&lt;/a&gt; describing all the things it can do.)&lt;br /&gt;&lt;br /&gt;Here, we're changing the &lt;span class="constant"&gt;PRIM_PHANTOM&lt;/span&gt; parameter, and setting it to &lt;span class="constant"&gt;TRUE&lt;/span&gt;.  I also decided to give a little visual feedback, so I'm setting the front and back faces of the barrier to partially transparent.  With &lt;span class="lslfunction"&gt;llSetPrimitiveParams&lt;/span&gt;(), you have to change both the color and the alpha setting simultaneously.  Fortunately, I know that the faces should be completely white, so for each face I pass the &lt;span class="constant"&gt;PRIM_COLOR&lt;/span&gt; keyword (which tells &lt;span class="lslfunction"&gt;llSetPrimitiveParams&lt;/span&gt;() what I want to change), the number of the first face to change, the RGB value &lt;1,1,1&gt; (white), and the alpha value of 0.75, (75% opaque).  I then  pass the same sequence again for the other face.&lt;br /&gt;&lt;br /&gt;&lt;div class="tip"&gt;&lt;b&gt;Tip:&lt;/b&gt; To find out what face you want to change, edit the prim and click on the "Select Texture" radio button in the edit dialog.  You should see crosshairs appear on all faces of the prim.  Click on the face you want to find the number for, and hit Ctrl-Alt-Shift-T.  Your chat window will give you certain information about the texture on that face, including the face number.&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;After setting the prim parameters, I then set a timer event to trigger five seconds later (and subsequently in five-second intervals until the timer is killed), and that's the end of the &lt;span class="function"&gt;state_entry&lt;/span&gt; function.&lt;br /&gt;&lt;br /&gt;The next function is the &lt;span class="function"&gt;timer&lt;/span&gt; function, which gets called when the timer event is triggered.  In this function, I call &lt;span class="llfunction"&gt;llSetPrimitiveParams&lt;/span&gt;() again to reverse the changes I made earlier (I set the &lt;span class="constant"&gt;PRIM_PHANTOM&lt;/span&gt; parameter back to &lt;span class="const"&gt;FALSE&lt;/span&gt;, and set the alpha on the front and back faces to 1.0 (fully opaque).&lt;br /&gt;&lt;br /&gt;The next line kills the timer events (by passing a parameter of 0), and then the next line after that sets the script back into the &lt;span class="state"&gt;default&lt;/span&gt; state again so that it will "listen" for collisions and touches again.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/7504661390079698623-4256535661738572344?l=johannahyacinth.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://johannahyacinth.blogspot.com/feeds/4256535661738572344/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=7504661390079698623&amp;postID=4256535661738572344' title='6 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/4256535661738572344'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/7504661390079698623/posts/default/4256535661738572344'/><link rel='alternate' type='text/html' href='http://johannahyacinth.blogspot.com/2006/11/lsl-magic-barrier.html' title='Scripting: the basics, part 3'/><author><name>Johanna Hyacinth</name><uri>http://www.blogger.com/profile/07465378673741468126</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>6</thr:total></entry></feed>
