Automatic Vehicles

You are currently browsing the archive for the Automatic Vehicles category.

Beginning a piece of writing by apologising for not having written previously is most appallingly gauche, and you will not, dear reader, find me doing such a thing. I would like instead to add a few observations regarding the latest Scripting Abilities sent our way by the beloved Laboratory, in particular those dealing with Parcels.

dangerous anarchist tramIt has always been a source of much irritation to me when constructing Automatic Vehicles that they were unable to check before entering a particular area whether they were likely to vanish into the Mists of the Asset Server, roaming around and mournfully ringing their little bells until finding their way back into my Lost And Found compartment, to join their fellows. In fact, so many trams have entered my Lost And Found that they have actually created their own system of government, which pretends to be a parliamentary democracy but is in fact a poorly-disguised and oppressive oligarchy that keeps plywood cubes as a de facto slave class. I really must go in there at some point and unlink a few of the most prominent, pour encourager les autres.

Nowadays, however, one is able to head off any attempts at self-organisation by the contents of one’s inventory by careful use of the functions llGetParcelMaxPrims and llGetParcelPrimCount. By checking the path ahead at regular intervals to see whether the entrance of the vehicle into a parcel ahead will push said parcel’s prim count over its allotted limit, one can see when a course would lead to disappearance, and make alternative arrangements. The precise nature of the arrangements are of course a slight problem, but I would think that such things as moving ahead using “WarpPos” or perhaps returning home would work. A proper automaton would look for an alternative route, but public transport is meant to be predictable - one cannot have trams deciding that they prefer taking shortcuts, or would rather take a turn around the lake to feed the ducks, leaving potential passengers abandoned, confused and cross. I have not actually yet implemented this but plan to do so when I am able.

Whilst on the subject, it also means that the “re-rezzers” (which recreate trams and balloons which meet a sticky end) can now check that the parcel that they are on is actually capable of supporting the vehicle to be rezzed at all. Currently they cannot, as I have previously mentioned, and must attempt to do so and then check whether they have been successful, which is wasteful and annoying.

~*~

One function with which I have been actively playing is llGetParcelDetails, which enables one at last to actually see what parcel one is on. It is not of course perfect. The owner and group functions return a key rather than a name, and as others of the scripting persuasion will know it is a pain, and a slow pain, to get the names of agents from keys - and, I believe, impossible to get the names of groups from their keys, though doubtless some young thing will come along and show me to be an ignoramus on that score.

In most of Caledon, the parcels are deeded to groups, and as I test most of these gadgets in Caledon I was mostly unable to get any owner names at all. Some of the most recent areas such as Caledon Victoria City use the “covenant” system which does mean that the tenant is listed as the owner - all well and good but still a pain.

Small version of Victoria City map That aside, I made myself a device which can be used to create a map of the parcels in a particular sim, something which is not at the moment accessible from the world map, which, while much prettier than anything I can do, just shows construction and terrain rather than boundaries. If you would care to visit the following:

Second Life Sim Parcel Maps

you will perhaps see what I mean, though I do warn those of a delicate disposition that the colours are not perhaps the most aesthetic.

At this point you may wish to skip to the end of this piece… there are two sides to this, as usual: the sim mapping device within SL, and the sim mapping server upon my Aethernet Box. The former divides the map up into four metre chunks and retrieves the details from the middle of each spot in sequence - so, it starts at (2,2,0), then (4,2,0) and so on, until it gets to (254,254,0).

It goes by rows - the data for a row are transmitted as a series of records of where a parcel starts and what its name and description are. So, if Parcel A starts at the bottom left corner (2,2,0) and continue on to (62,2,0), with Parcel B starting at (66,2,0) and continuing for the rest of that Y-position, it will send to the map server the information

row,0
0,Parcel A
16,Parcel B

The numbers here refer to the particular 4m square rather than the exact X or Y position of its centre. If a row is actually the same as the last one, the scanner sends nothing at all, which cuts down on the amount of data to be sent.

This information is stored in a temporary file once received, and once the entire sim has been scanned it puts it all together to create a (very messy and inefficient) page displaying the map. There is obviously more to the technical side than this but I am starting to bore even myself and will thus cut this a little short; suffice to say that any half-competent apprentice in the field of PHP could do such a thing, it is really just opening and writing to files and creating arrays and all that malarkey.

One thing that does interest me is that the system stores every map rather than overwriting the existing one for a sim each time, which would enable a historically- or research-minded person to see how the occupancy and usage of a sim has changed over time. (There are no archive pages or such at the moment, I only made it yesterday, but it is part of the plan to put them in.) I was considering setting up the scanner to, say, do a scan of Caledon every week - the scanner itself could be made to move about between sims, it does have to be in the same sim as that which it is scanning.

~*~

a pickpocketOriginators and propagators of Urban Myths upon the Grid will be most disappointed to hear that there is still no function which enables the creation of “land scanners” which allow automatic purchasing of land set for sale at L$1, since there is still no way to tell what the purchase price is or if the thing is for sale at all, let alone buy it automatically.

The practice of Land Swooping is as far as I can see a purely human-powered endeavour, with some odious weasel sitting there clicking “Search” again and again, like an urchin waiting on the street, watching for passers-by who unwisely reveal their Purses, Wallets or Mobile Telegraphic Equipment, whereupon the little beast will swoop in and relieve them of their valuables. In the Other World of course the thief does not usually hang around to taunt the victim and tell them they deserved it, since such practices are illegal there and invite Attention from the Constabulary or even Immediate Retribution by the Injured Party.

Whilst investigating the latest tram fiasco in Port Caledon, due to prim limits in the parcel just across the bridge (as usual), I endeavoured to show Zeppelin Duesberg (who was in attendance) that when one sits upon an object it does not fall foul of prim-limit-returnment.

Except that when I sat down on the tram, and waited for it to cross the bridge, I did fall foul of it. The tram was returned, I was plunged into limbo and forced to relog. This should absolutely not happen.

Heaven forfend that I ever be accused of being a complaining type, but when things do not operate as they are meant to, and make a fool of me when I am trying to demonstrate things, I become slightly irate.

Incidentally, please do not litter the public areas of Caledon with boxes, bicycles or bisected barnacles - it frequently obstructs the tram, and I am protective regarding the tram, and you would not wish me to have to hunt you down, really, would you?

Yet again I manage to hibernate through another assault by Parties Unknown on the Grid; it is convenient for me that such things tend to occur during times of rest for me. Others have had some harrowing experiences, it seems:

The embankment next to the landing point in Rodeo is getting waterlogged and has started to slide in a few places. I was out in the muck, trying to clean off the landing stone and stabilize the hillside when an object whizzed by me. Then another. Pretty soon the air was full of them and I had to fight them off with the shovel to get away. Especially hard to do since they were trans. I ran to the south and then east into Stinson. I could hear one of them following me the whole way. I swung blindly a few times and managed to knocked it to the ground. Upon impact it became visible and split in two. I watched in frustration as it began to regenerate itself into two complete copies.

While they were making their repairs I ducked into the small cave in the southeast part of Stinson and made my way to the back wall. I didn’t have much time. I could hear the two prims powering up to full and knew they would detect me soon.

To be quite honest I have been absent for a while; I confess to being in one of my periods of ill-humour, and the only thing that I have been building recently is a Pneumatic Pistol, using a small steam engine to compress air that is then used to propel a projectile. The longer one builds up pressure, the more power the resulting shot possesses, but once full pressure is reached (indicated by a whistle) it must be released immediately, lest the Pistol suffer an overpressure explosion. But really, that is pretty much it, and even that experimentation has mostly has taken place a few hundred metres above the ground in one of my larger flying machines. Hey ho.

Sometimes I take a trip around Caledon when it is quiet, or fix the tram system, which has been irritating of late. When the Tram Rezzer vanishes, there is no Tram Rezzer Rezzer to replace it, and it would likely not work anyway as the original Rezzer only vanishes when the parcel becomes full, so any replacement would vanish shortly as well. One alternative would be different locations for trams to appear, each checking on each other, so that if Caledon II’s Rezzer suffers a mishap, trams begin at Caledon I or Port Caledon. Perhaps. (Have I said all this before? I am concerned that I begin to repeat myself with such stuff.)

I’m sure that any person of sufficient powers of concentration to be willing to hack through the thick, obscuring undergrowth of verbiage that makes up my Journal in the faint hope that, in sufficient time, they will clear aside one last creeper to find King Solomon’s Mine revealed (or more likely a deserted quarry and a small squalid shop selling badly-painted souvenirs) has had the experience of becoming so engrossed in some project or other in Second Life that they completely forget to perform some vital task, such as - for the gentlemen - trimming one’s moustache before meeting one’s friends at the club for a snifter, or - for the ladies - reloading one’s revolver before facing down Giant Man-Apes near, though clearly not precisely at, the centre of the Earth.

With this in mind I present a small automaton known as the NagBot. Once in existence, the NagBot will wait until its owner is actually in the world, and then begin to remind them of tasks which they really should complete.

NagBot: Can't you get your act together and finish that
project?
NagBot: Stop wasting time and brush the hedgehog!

The NagBot begins by reminding after five minutes, but with each reminder the interval halves, so that the next is after two-and-a-half, the next one after one-and-a-quarter and so on down to a minimum time of ten seconds. (As set.) One cannot escape from the NagBot anywhere on the grid, and it cannot be bargained with, it cannot be reasoned with, it absolutely will not stop until you are logged out. Actually, if it hears you speaking in its vicinity it will just nag you more.

The script for this device can be found here:

Do modify any of the variables in CAPITAL_LETTERS; their purpose should be adequately explained.

On a separate note I have been working on more detailed, and larger, explosions. After some watching of assorted pieces of cinema I came up with a smallish explosive device last night involving three separate particle effects:


An Explosive Test on Vimeo

The part of this which I was most interested in getting right was the flaming cloud of gas that usually results from any interesting explosion. In this example it appears only quite briefly, but one resulting from different components would appear quite differently. Having bright flames mixed in with black smoke was quite tricky, and is still not perfect, though in my mind nothing I do ever is in any case. The next step I think will be to have a convincing pattern of dust and debris coming up from the ground, either as a mushroom cloud or a ground “ring” effect depending on the altitude of the blast, and perhaps a larger explosion involving a huge roiling cloud of flame moving upwards.

And on a final note, through Tinselman I see that Qarl has been breeding blimps, a subject which I believe I have mentioned before in the context of trams and am still somewhat fascinated by. I shall be adding a few more comments to said entry in due course.

Recently I decided to entirely replace my existing shop with what I consider to be a much more aesthetically pleasing, and spacious, building; the shop floor is a now a broad, high-ceilinged, iron-framed gallery. Clearly I had to retain the breakable windows, and clearly I had to retain a balloon deck from which visitors might board the Touring Dirigible. (Even considering its antiquity, the Dirigible is still very popular. It would probably be worth me renovating it a little as, well, it is a little ugly.)

The ceiling of the gallery is rather high at nine metres or so above floor level, and given that the balloon deck is on the first floor there needs to be some method of reaching it. To begin with I merely placed a large hole through which one could fly, but really, unassisted flight is terribly ungainly and gauche. A large spiral staircase… hm, well, not really me.

I decided upon a balloon-related solution instead. The central component of this is a platform suspended from four balloons, filled of course with my secret formula of lifting gas and thus providing considerably more lift than one might expect from their size. The platform is placed underneath the above-mentioned hole in the first floor. Such a platform, of course, if not strictly controlled would simply rise to the rafters, stay there and be no use to anyone, and so when it is either on the shop floor or at the balloon deck, it is held in place by sturdy bolts.

When the balloon is released from the shop floor it naturally rises upwards, turning slowly, until it reaches the correct elevated position at which point the upper bolts engage. How, though, does it descend? The most straightforward solution would be to have it pulled down by chains, or perhaps drop ballast, but I am certainly not here to provide straightforward solutions, and thus have employed a gigantic Electro-Magnet to pull the platform down again. It sparks and buzzes and pulls the platform down until the lower bolts can be engaged.

Here follows the obligatory video demonstration:


Electro-Magnetic Balloonery on Vimeo

Of course, this is not a traditional electromagnet, which would collapse the entire building, use a ridiculously immense amount of power (I haven’t even bothered calculating this) and brutally rip all of the “bling” from the attachment points of passers-by (perhaps not a terribly bad thing, come to think of it). I am not at liberty to discuss the precise mechanism at this time, I’m afraid, under orders from the Ministry.

Actually I am a little concerned about this and would prefer a more traditional physics-based approach. I may still change it entirely.

Oh, and a quick message to the segment of the population who, upon being given a peculiarly-named object by another peculiarly-named object, have the immediate reaction to rez it upon the ground or other surface: please don’t. One advantage to having one’s own personal Biological Clock running on good old British Summer Time, though, is that periods of Grid-Disruptive Fence-Breaking do tend to occur whilst one is asleep, and be fixed by the time one awakens.

I am fed up unto the back teeth with not being able to have my Instant Messages sent to my Aethernet Mailbox on account of people being untidy and leaving chess pieces out near the Tram Rezzing Device (for the uninitiated, the Device sits near the chessboard in Caledon II, and creates a new tram if the old one has an accident befalling it, but if the area is already full of Primitives, well, it complains to me).

On the other hand, one cannot really complain if one creates a device which behaves in a way which one does not mean it to; it has hardly decided to do this on its own. With this in mind I have made certain modifications to the device. It now, for instance, after a failure to rez a new Tram, waits an hour before trying to rez another one.

If only I could make the trams not tell me when they have been returned either. I do not care. I can find out if necessary. I wonder if STATUS_DIE_AT_EDGE would do this? We shall see.

Furthermore I just noticed that my Touring Dirigible reported a Dataserver Error, which it does when it receives information in the wrong order, which it should never do. I wonder what is causing this? Possibly the general kerfuffling state of the world at the moment.

Addendum (18th September): regarding the above reference to STATUS_DIE_AT_EDGE, the answer is “no it doesn’t”. Boo, I say! Boo and, furthermore, hiss!

The tram has been lost at Caledon (1, 190) - a routine sim-border-crossing mishap, I am sure - and it appears that someone has left the pieces out on the chessboard by the Caledon II telehub again. This, I might say, is where the tram rezzer is. Under the new Harsh Prim Limit Reign, the multiplicity of pieces means that the tram rezzer is unable to rez trams, a fact which it sees fit to contact me concerning every two minutes.

I would be obliged (as already stated here) if any gentle soul reading this in the near future who is able would pop over to Caledon II and put away the pieces. The chessboard is right by the telehub and there is a large button marked… something or other to do with clearing the board, I cannot for the life of me remember exactly what it says but it is quite straightforward. As promised on the mentioned thread, as payment I will write you a limerick.

You know, it would be most useful if scripts were able to detect the current prim allowance at a particular point. And while I am shouting suggestions into the void, I might also say that it would be handy if scripts could detect the parcel name, not that that issue has any connection to this one whatsoever, just a thought.

P.S. Serra Anansi reminds me that if I had not removed my Aetherial Telephone I would be able to contact somebody already there and make the request! Dash it.

P.P.S. All fixed now!

Here, it appears, is the answer to the tram-related issue that I have been encountering… secret release notes!

* Improved prim accounting on parcels
** Counts are correct within 1 frame of the simulator (typically 1/45th of a second)
** The categories for prims on a parcel are: Owner, Group, Other, Selected. The Selected category is new and includes selected objects as well as objects being used as seats (such as vehicles).
** Going over limit with selected objects will not trigger object returns… until they are no longer selected.
** When a parcel owner is over their limit the objects will be returned youngest first in order of Other, Group, Owner. This is NOT new, but mentioned here for completeness.

The bolded section is somewhat inconvenient for the operation of the tram. Let me expound for a moment upon the environment through which it moves. The tram is continually passing through different Parcels of Land, as Caledon is owned by many different people, and the route does not entirely fall along that owned by the State. Many of these Parcels approach their limit for primitives on a regular basis, and it is quite easy for them to near limits even further should someone, say, bring out their latest penny-farthing for the amusement of their companions.

The tram itself is around twenty-five primitives if I am not mistaken, and thus may push the Parcel over said limit. As the youngest and Otherest object, it is therefore in line to be returned first. Prior to this latest change there was a period of grace which allowed the tram to pass through an area, given that it spent little time in a parcel but, it appears, no longer.

Of course when there are folk sitting upon the tram, it is counted as Selected in Mr Andrew Linden’s piece above, and thus will not vanish, which is a blessing, as there is nothing more embarrassing for a mechanic than to have one’s vehicle disappear from under a passenger, sending them to the ground with an ungainly thump and likely spoiling coat-tails or bustles. However, the tram does run for a considerable time without passengers, and this change in behaviour - which I suspected was the case for a while - means that it is returned to my Inventory fairly frequently.

A visitor would likely not notice this at all in fact, since (as is known by all connoisseurs of Vehicular Automata, or at least those who read this Journal) it is recreated at its source within a mere two minutes or less should it ever vanish. The only sign would be if one were actually waiting for its approach. Imagine, if you will entertain me for a moment, the following situation: a young courting couple - call them Edward and Madeleine - decide to take a day out in Caledon. They have a marvelous time of course, promenading along the boulevards, exchanging delightful witticisms with the residents and other visitors, taking in the bracing sea air. Perhaps Edward treats his love to a gift of a splendid pair of shoes, and she him to a finely-made pearl-handled pistol. Or quite possibly vice versa.

The pair are nearing the end of their stay and, after admiring the fine landscape of Port Caledon, are approaching the Caledon I Telehub when they hear a “ting-ting!” “Surely,” advises Edward, “that machine yonder is the famous Caledon Tram, scripted by Ms Ordinal Malaprop and built by Mr Shaunathan Sprocket and Mr Reitsuki Kojima!”

“Oh Edward, how wonderful!” cries Madeleine. “Let’s wait here and jump upon it when it crosses the bridge! I do so love a tram ride! And such beautiful and correctly-spelled detail it has!”

With youthful glee the pair wait by the side of the pathway for the tram to arrive. It draws nearer; they crouch, giggling, ready to leap… and with a complete lack of ceremony, the awaited vehicle disappears.

Madeleine stands and pouts. “Oh Edward!” she exclaims. “I was so looking forward to that! It has entirely vanished! What can have happened?” Perhaps a small tear of frustration appears in the corner of one eye.

Edward draws himself up to his full height, incensed that someone has disappointed his paramour. “Dash it!” he swears, throwing his hat to the ground. “This is surely some sort of problem with the scripting. That Malaprop woman is nothing but a fraud! Come, Madeleine, let us visit some other sim where one does not have to deal with things vanishing in front of one’s face!” And with that they are off, their opinions of Caledon and your author forever spoiled.

Perhaps later, when Edward is enjoying whisky and cigars at a gentleman’s club with his cronies, or Madeleine a shopping expedition with hers (or, again, quite possibly vice versa) they mention to all and sundry how this Ordinal person is surely the least competent inventrix since Mr Benjamin Franklin’s little-known cousin Bob, who sought to test the power of kites by flying lightning.

We really cannot have this sort of thing occurring.

As a minor thing of note, readers interested in the Science of Automatic Vehicles might also be interested in visiting the Third Year Anniversary Celebrations, as detailed on the Second Life Wiki. The monorail that you may travel upon there works upon a similar system to the Caledon Tram, which is not terribly surprising, as I scripted it. The actual car itself was not by me, but by Merle Widget, and the fabulous monorail stations and track are by Lethe Naumova. (The overall style, if there is one, of the Third Year Anniversary Celebrations, or “Three Yak” as I have taken to calling them, I consider to be somewhat “retro” but of a later period - what I term “Gernsback” - than my more usual one. I would say, ’30s to ’50s.)

Plotting monorail course 1.jpg

As with the Tram, one can watch the progress of the monorail and travel directly to it by visiting the Monorail Status Page, and also laugh when it decides to misbehave (which as yet it has failed to do, though I expect it will today after our Regularly Scheduled Down Time). Be warned, if you decide to teleport to its location, that it is somewhat high in the air.

I have “tagged” a group of images with the term “monorail” for your hopeful amusement and interest, to which I will be adding forthwith. One may find far more images in the journal of Ms Mera Pixel.

I do very much advise any reader to visit this Exhibition, even if they despise trams and monorails, as there really are some exceptionally impressive creations to be found there just on a brief wander - not to mention the events that will be taking place. An extensive timetable of the latter can be seen in this entry by Mr Hamlet Au.

Recent viewers of the Tram Status Page will have noticed that it has grown a map, indicating where the tram is, rather than than there simply being a SLurl link.

Tram status page with map

I decided to investigate the Second Life mapping API and, you know, it’s not actually that hard at all. One only needs to know some fairly basic Javascript and one is away. All sorts of possibilities come to mind… perhaps the tram map could include other landmarks, say, or indeed scan so that one might see people around the tram at that time.

Hmm. Really, it is again infuriating that there are not enough hours in the day. There are the camera things to be working on, and changes to the tram itself to make the spelling more correct and it more easily sat upon, and derringers to release, and third birthday monorails to discuss, and… perhaps some reader would be kind enough to offer me some sort of patronage as an official court inventrix? No? Ah.


Edit: Well, at least you will now see that the spelling is correct on the tram, and that sitting on it should be a much easier task. Also, if you are privileged enough to be present when a new tram is rezzed, you will see it fade into existence as it is drawn out of the world of the Asset Server into Second Life. Surely, there are manifold universes within this simple one.

I mentioned in my very late post yesterday that I had introduced a “tram ping” system. This is indeed the case, and I will now say a few more words on the subject.

The Caledon tram has an unfortunate habit of occasionally vanishing, being returned to my inventory when a parcel becomes full, and suchlike. This is obviously inconvenient for passengers, particularly as it is most likely to happen in the busy hours - the evening for North American participants - when I am asleep, and thus cannot pop back to restore service. I have not yet mastered the art of Second Life Somnambulism. It would be possible for me to delegate responsibility for this to another but really, why should they be bothered either?

I had thought for a while that I might put in an automatic system to solve this problem but, as usual, the distractions of passing shiny objects have meant that it is only now that I have done so. The principle is really quite simple. A script is added to the tram which sends, every minute, a message via llHTTPRequest to my Tram Ping Server, with its current location. The server then records this information in a file.

A tram. In Wales. The Tram Rezzer, an invisible phantom block lurking near the Chessboard, checks with the server every two minutes to see when the tram last checked in. If that length of time is greater than two minutes, it assumes that the tram has met with a mishap and creates a new one, which begins on its course once more. Some extra time is granted as a margin of error - it might be that the tram failed to check in due to some networking error, but it is unlikely that this will happen more than once. (If somehow the whole llHTTPRequest structure fell apart and the tram was unable to ping at all, the rezzer would also be unable to check and would not rez any new trams until it was able.)

So far, this system seems to have worked and not flooded Caledon with a plague of trams. (I have a horrible nightmare in which the rezzer goes insane and begins sending out a new tram every two minute until the entire route is a solid mass of smokestacks.) One can also observe the process in action by visiting the tram status page, from where it is possible to get a SLurl to the tram’s current location.

One thing that I am concerned about is the possibility of more than one tram existing, and thus I am thinking of instituting a system whereby each tram that pings the server must have a key on an approved list, and commit suicide out of sheer despair if told by the server that it is not welcome - or perhaps, we might actually want more than one tram, in which case rezzers would have to be able to check for a particular key. Certainly as Caledon grows in size, a central page from where one could view the progress of each public transport route would be most diverting for visitors.

Here’s a thing - why do I have no pictures of the tram in my current gallery? Bother.


A demonstration of the principle has just occurred! In the log (currently on the status page) you can see two lines…

[12:01:46] Tram last pinged 136s ago, trying to rez new one
[12:01:46] New tram rezzed, key b372b1d4-1ee3-0a3e-682d-42fa7c5586d7

These coincide with the message that I received just beforehand:

Date: Thu, 15 Jun 2006 04:59:42 -0700 (PDT)

The object ‘Second Life’ has sent you a message from Second Life:
Your object ‘Caledon Trolley v0.36′ has been returned to your inventory lost and found folder from parcel ‘Commonwealth of Caledon’ at Caledon II 93, 190.

Why this happened, who can say? However, the system seems to have worked perfectly in correcting the matter. Beforehand, there would have been no tram for six or seven hours.

  • pollution for power generators - they should produce some form of waste product

    • waste prims
    • plants that grow on waste prims
    • herbivores to eat the plants
    • carnivores to eat the herbivores, and also any unwary passers-by
  • carnivores can’t tell when they’ve eaten someone

    • if someone leaves sensor range directly after an attack, they’re probably dead
  • the tram keeps disappearing at odd times, after sim resets, and so on

    • an automatic rez device is a good idea
    • I wrote one
    • the tram pings a server with its current location every minute if it is alive
    • the rezzer asks the server when the tram last pinged, and, if it is not within a certain time, it assumes that the tram has died somehow and rezzes another one
    • see the status page at http://ordinalmalaprop.com/caledon/tram/
  • ankles I need to spend some time on my appearance for a change

    • I have bought a skin from Robin Sojourner, who was most helpful and kind when it came to modifications and information
    • most skins don’t have freckles
    • anyone having seen me will know that freckles are a major part of my appearance
    • freckles were not a problem to add, but I need to have them added on the body as well as the face, which was something that I forgot and now need to have done
    • Ms Sojourner has been very accommodating as to this request as well
    • I have bought a modifiable hair set from her as well which I have tinted and tailored to my own style
    • I am currently wearing clothes called “The Alchemist In Verde”
      • I can’t remember where they came from (later edit: they are from Silver Rose, by Yuriko Muromachi)
      • they are also meant to be worn by gentlemen, but never mind, they look good on me I believe
      • I am also wearing two-tone anthracite/black boots from Lassitude & Ennui, which are terrific
    • I feel slightly embarrassed about such vanity, concentrating on parts of myself which nobody else will ever see, but, really, not very embarrassed
  • I really need to put some of the products that I have been developing up for sale, such as the Derringer and perhaps the Flare Gun

    • and I also need to pay attention to issues relating to Second Life’s Third Birthday Event
    • it is odd when one’s reality is younger than one is

The Caledon Tram is now complete. Well, it is at least running, trundling the streets of Caledon, Caledon II and Port Caledon and occasionally stopping and tinging a little bell for folk to jump onto it. It is also operating, it seems, reliably, which is really rather important for public transport and something that I wish would be more appreciated by Transport Ministries in the Other World.

It has taken me some time to script this device, which perhaps it should not have, given its relative simplicity. The core of the tram is the same notecard reader which powers my balloons (the Touring Dirigible is still at the Lighthouse, incidentally) but the movement is, this time, nonphysical, as I believe I have mentioned before.

I recently discovered that there are people unaware of the difference, so, a quick description: physical movement involves physical objects, which must pass through intervening space, may collide with other objects, bounce off them, twist through the air and so on. One can set the physics flag on an object quite simply from the “edit” menu, and then grab said object and throw it about if you so desire, or use scripting functions to apply forces to it. Physical Non-physical movement involves nonphysical objects, like the majority of the scenery that you see around you in Second Life. These can be repositioned using the function llSetPos, and rotated with llSetRot. They do not react to the presence of other objects unless scripted to, which explains why, if one stands in front of the moving tram, one is not actually flattened by it but instead startled as it passes right through one’s body.

The tram’s linear motor is really a timer that triggers a number of subscripts via linked message, each one calling llSetPos to move it a tiny distance ahead, so that the overall effect is of relatively smooth movement… this is not actually as smooth as physical movement but in practice, not so bad. One peculiar quirk of nonphysical vehicles seems to be that, if someone is actually controlling them directly, they traverse SL in a manner far more smooth than if they are without a controlling avatar… however we do not really have the option of a permanent tram driver (perhaps, a profession for new residents in the future?)

The instructional notecard mostly contains a series of waypoints between which the tram moves, and its behaviour is predictable upon reaching each one:

1. read for the next waypoint;
2. find out its direction relative to the current position;
3. turn on the spot to face that direction;
4. repeatedly move forward a small fraction of that directional vector until reaching it.

The turning part gave me an appalling headache and the process exemplifies, I think, the simple principle “don’t believe anything you tell yourself“. The sub-process of turning can be laid out as follows:

1. which direction am I facing in now? (llRot2Fwd(llGetRot()));
2. which direction should I be facing in? (llVecNorm(targetPos - llGetPos()));
3. what is the angle between these two directions? (llAngleBetween(direction1, direction2));
4. if this angle is not within one turning increment, repeatedly rotate around the Z-axis by that increment in a suitable direction until it is;
5. do one final rotation to face the target.

Now, clearly if the destination is clockwise of the actual facing of the tram, one should turn clockwise, and similarly for anticlockwise, or the tram will spin around far too much and look daft. However, and here is the embarrassing bit, I had become convinced for some unknown reason that llAngleBetween would return a value greater than PI if one vector was to the left of the other. I have absolutely no idea how I decided that this was the case since it isn’t, but I had taken that as one of my hypotheses and did not question it for ages, with the result that the tram rotated on the spot in an annoying fashion with me shouting “ARGH WHY ARE YOU DOING THIS YOU STUPID THING” when in fact it was I who was the stupid one. Let this be a lesson to you, dear reader - we are all idiots, particularly me.

The tram, however, regardless of script untidiness and possible improvements, is now running, and people have told me that they enjoy riding it and find it a most pleasant addition to Caledon and that makes it all worthwhile. (I have been invited to possibly develop a similar system for Second Life’s Third Birthday Celebrations, so it may reach a wider audience.)

~ * ~

Whilst I did script the tram, the actual building and texturing work was done by those master craftsmen Reitsuki Kojima and Shaunathan Sprocket, and it is they who one needs to thank for its elegant two-wheeled steam-powered design. Scripts are nothing without an actual tram to put them in and those gentlemen deserve the lion’s share of praise. If it were left up to me doubtless the trolley would be a box with rivets on it, and nobody would think it pleasant to ride at all.

~ * ~

Those of you hoping for a view of my Stretched Metaphor may have to wait for a little while, as I have become distracted, but I can tell you that it involved eggs.

I am a patient soul. One has to be if one wishes to appropriately instruct the Difference Engine. I am quite prepared to manipulate symbols for hours on end to make the forthcoming Caledon Tram operate consistently, and have done so already, for many, many hours. At the moment all that it lacks is smooth rotation at its turning points, which should be a simple task, even given that, as my fellow scripters will know, Quaternions are the Devil’s Work and very easy to make mistakes with.

Something I am not prepared to put up with is the ridiculous frequency of unconnected problems whenever I require to test the latest version of the tram, freezing, slowing down, moving in reverse on occasion, or simply being thrown out of the universe and having to re-enter. I am sorry. As I said, I am a patient soul, but this is…

*marshals self, removes unladylike language*

nonsense. One might as well try to build things in Rausch, where at least the random removals of oneself from the area have understandable reasons behind them, enthusiastically hostile fellow-travellers. Here, it is the blind universe that I am fighting and I do not like it.

Perhaps one should only be creating small, portable things, or ones which do not move around a lot.

Anyone walking the paths of Caledon on Sunday might well have been greeted by, first of all, the sight of myself perched upon a fair-sized tram; second of all, the sight of said tram repeatedly and awkwardly colliding with buildings and newspaper dispensing devices and rental payment machines as it attempted to turn ridiculously tight corners; and thirdly, my cursing the damned thing and the damned layout of Caledon and the bridges and everything under the simulated sun.

The construction of a reliable, vehicle-based transport system inside an existing landscape designed for people to walk around is simply not practical. Either one knocks down a number of houses, hopefully evicting the tenants beforehand - unlikely to be popular - or one uses vehicles which are not reliant on infrastructure (*ahem*, balloons, *ahem*) or one simply does not use vehicles.

Much as I vastly prefer having moving objects in Second Life being physical, the time does come when one must accept the limitations of physical objects and particularly vehicular physics. They hate travelling between sims, for a start, and routinely behave bizarrely. They frequently stop working inexplicably when asked or forced to sleep. They are easily knocked off-course, blocked by a simple plywood cube in their path or pushed around by vandals, and yes, even Caledon has experienced a number of attempts at vandalism - Port Caledon, I am told, was attacked by hundreds of beachballs on Saturday.

Simply put, physical objects are at the mercy of almost everything, and this is not something that makes for a good, regular, transit system. I certainly cannot be there at all times to put the things back in place myself, and whilst mechanisms for self-defence and self-correction can be scripted - my touring dirigible, for instance, corrects its own course and can easily survive a few unexpected bumps - they will never be perfectly satisfactory.

In contrast, a non-physical vehicle, one that is moved and rotated by a number of tiny calls to llSetPos and llSetRot, is almost impossible to vandalise, considerably more reliable and precise, and can effectively ignore the presence of obstacles (since it moves through them). Why are such things not used more often? Well, the last point really is also a flaw - a vehicle which moves through all solid objects is just not very believable, and also not terribly useful in environments possessing “fake ground” (prims textured to appear to be ground or rocks or suchlike).

Vehicles should not move through solid objects without a very good reason, and it is not practical to have them look for objects in front of them first, since it is currently impossible to detect the size of an object with a sensor. Say, for instance, I am standing in front of a wall. If I wish to detect its presence with a sensor I must first of all have the centre of the wall inside the arc in which I am detecting. Secondly, when llDetectedPos tells me the position of the wall, it will be the position of that centre. Which is frankly not a lot of use given as I have no way of finding out the extent of that wall. It could be one metre long, ten metres long, who can tell?

Really, LSL needs a function which takes two points and tells you what, if anything, is between them. Surely this would not be too difficult. I have simulated this using, ironically, physical objects - I have a “detector gun” which shoots out a projectile in a straight line that informs the firer of what it has hit - but I suspect that using that continuously to tell a vehicle whether it is on top of something or bumping into something is not practical. (Remaining on top of an object for instance I can see as particularly problematic; how can one fire a projectile downwards when there is no room so to do?)

Dear reader, I do understand that you are probably now most tired of these complaints of mine, and thus I will conclude this piece. Rather than continue to grapple with the production of a physics vehicle tram I shall be creating what I believe is known as a “proof of concept” design, illustrating that one moved non-physically can be both graceful and reliable, and in many cases nobody would ever notice the difference, particularly if a gentle push were involved should one happen into its path.

My balloons, however, will remain physical, as they are my own personal toys rather than the backbone of a public transportation system, and encounter fewer obstacles such as litter, pedestrians etc. Ducks, occasionally.

Creative Commons License
This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 License.