Rockshop 101
One of my favourite authors of all times, Douglas Adams, once coined an expression encapsulating the basis of evolution – he said “The secret is to keep banging the rocks together guys”.
I love this sentiment – chipping away at stuff that is not clear to seek clarity; being accurate to seek accuracy … thank goodness my brain is still accommodating enough to let me learn new stuff. So I delve [all be it tentatively] into the murky depths of object scripting for the first time …
So I needed a workshop, and found a collection of rocks in the standard object bin, so decided to partially construct WonkyHenge so I could sacrifice things in the name of the new deity – knowledge.
My mission was to begin to explore object scripting, because that is where the smarts of an interactive environment will lie. Deftly I delved into the object properties and in minutes was scaling objects in X, Y and Z, easy peasy.
To something new…
There are a number of things an object can “detect” – events for those of you familiar with event-drive, object oriented programming. The “Create” event is useful – you can tell the object to do stuff when it is first rezzed [encountered] by a player – useful for size, initial appearance etc. Scripts can be “stacked inside the action field
command; command; command or
command part, other part, other part; command part, other part etc.
Annoyingly, a de-bugger is NOT present, so if there is even ONE error in the script, none of it works and you get NO error message, no on-screen display [and oddly sometimes your object even disappears into an unreachable place], nothing except a non-working object [if you are lucky]. From a noob perspective this is fine because you do not get beaten up as normal programming/scripting languages do with pages of indecipherable error codes … but, some feed back would be nice.
When an object is “Activated” [left clicked on], it knows – you can get it to do stuff when it detects such a click – very useful. The first thing I tried was the “move” command.
activate move -2 2 0 noloop time=5 wait=3
= when clicked on, move backwards 2m in the x direction, up 2 m in the y direction and do not change your z position, do this thing once, take 5 seconds to do it, wait 3 seconds before un-doing it.
Nice, slidey-door [think star trek, and an accompanying and very satisfying “wooshing” sound] sorted. Automatically translating objects is nice, fairly easy to control and it can be done on create or triggered by a click also.
Translation is not that dissimilar in concept to rotation, except the controls that Activeworlds use are a little interesting [different from what I was expecting, but manageable]
activate rotate 0 0 5 time=3 noloop wait=3 smooth
= on click, rotate at 5 rpm on the z-axis, do not keep repeating this, rotate for a total time of 3 seconds, smoothly, wait 3 seconds before un-doing the movement at the same speed. Easy – the opening door thing sorted. Just gotta learn how to move the axis of rotation – some objects have their axes plumb centre and so a door that has a “hinge” in the middle is a little odd.
Objects, on create, can be named – this name can be used programatically. In the above rockshop experiment, I spawned a big rock and called it “fred” – conveniently I could call other things “fred” as well – the name does NOT have to be unique in the collection of things that I create. Also usefully, a thing called “fred” that I make is DIFFERENT to a thing called “fred” that some one else makes – this is a good thing as side-effects caused by scripts someone else wrote using names you did not were already taken would be really really annoying but more importantly, very difficult to debug.
I then made 2 other rocks, and programmed them to reach out to things called “fred” and change their appearance:
activate color name=fred red
= when you are clicked on, look for objects owned by this citizen that are called “fred” and apply a red texture to them.
I rinsed and repeated to make a blue one, and added into “fred” an activate command that re-applied “granite” as a texture to it when you clicked on “fred”, itself so you can do a colour cycle and return to the base state if you wanted.
That objects can be aware and effect others is a terrific discovery [well, I say discovery, because it was for me, I know accomplished Activeworlds builders will be wondering what this dweeb is lathering on about].
I had convinced myself that the land of scripting must be pained and difficult, so was avoiding it. Having some success and more importantly finally getting what is happening, I am now eager to beaver away in the rock shop to see what else the world can let me do
I can see you quiver with antici …[wait for it] … pation…
Epiphane at Ikea
We went recently to Ikea [a Swedish shop of everything] on a particular mission, we had a list. In particular we were looking for a replacement to a vegetable peeler that we had bought years back and really liked [sadly, it is getting blunt so naturally we thought a replacement was a good idea]. [CUT TO THE CHASE]
Everything at Ikea has a Swedish name, most unpronounceable and none of the names gives a hint as to what is in the box, or to an ignorant aussie [that is me] what it might be useful for. Annoyingly [well, it is a brilliant marketing ploy actually] you have to traverse a maze, literally, of room mock-ups, where some of the products are showcased in-situ so you can see what they look like, how they might be combined, how colours and fabrics look together and so on. It is designed to distract you from your central mission, and even the hardest of hearts end up buying the bag of tea-lights that was on special next to the luscious and cozy looking lounge mock-up, the mini-chalk board that was on special [two for the price of one, only this week] hanging on a rack beside the kids bedroom mockup and so on.
Now this maze consumed much of my day, I looked amongst the kitchen mock-ups for artily placed utensils that gave a clue about my peeler, I studiously examined bargain bins in the hope they were on special. I scoured the homewares section with no luck, coursed the kitchen solutions department finding almost but not entirely the wrong things, entered the warehouse and searched amongst the canyon-like aisles, carefully reading shelf labels and viewing thumbnails of a myriad of things, hoping to recognise amongst the impossible to pronounce names something that looked like my vegetable peeler to no avail. It was frustrating, exhausting and more annoyingly it took up time that I did not really have.
After much trudging, a trolley full of things that we did not realise we needed until we saw them, and their perfectly reasonable prices we stumbled across the rarest of commodities – a shop assistant and I asked the tall, blonde thing about my quest – the search for this one particular peeler.
He popped on a terminal, performed a simple search and told me that product has been discontinued. He searched using a tool that was on the Ikea Website – something I [to my shame] had not even considered using prior to the trip.
We receive regularly [being put on their snail-mail list after the first visit – you remember, when the Ikea first opened, it had a “ball room” and our kids, then little tykes played in there whilst we browsed, anxiously hoping they were all right] their annual catalogue faithfully snailmailed to our home. The catalogues are lush, shiny and full of similar mock-ups, whole rooms and so on showing product being used – all themed and grouped according to living area.
Now, if you are searching for a chair, for instance, there is no one place to look, as “chairs” might appear in multiple sections of the catalogue, and although there is a “seat” section, not all chairs are there, indeed not all available to purchase chairs are in the catalogue as the print run clearly has limited pages and they want to feature “some” of their range.
Interestingly, however, on further investigation of the WEB catalogue, everything is there, every product [past, unavailable and present in-stock]. You get “meta” information – dimensions, available colours, a “thumbnail” of the item with a click to zoom web 2-ish feel, items are categorised into a product tree with breadcrumb trail navigation to explore and so on – a “modern tool” for finding things.
Epiphane
Our “object yard” in-world should break with the established convention of being an instantiated warehouse and get with the times. The ActiveWorlds client has an integrated WEB BROWSER – what is to stop us building a web catalogue of all available objects that can be used, provide categories for browsing and examining them WITHOUT having to POP a copy of everything?
This makes sense on a bunch of levels – blowout in browser cache occurs when you visit the object yard – your browser caches a copy of everything, regardless of whether you use it [3456 objects left to download…] – this is silly when all you really need is a “starter object” – a place holder object like a lump of clay, say, and the NAME of the object you want to build. To select an appropriate object, a THUMBNAIL [possibly with a click to zoom] along with other meta details [like dimensions, textures used, size if cell capacity is an indication of storage consumed and NAME in a copy-paste able form].
This also streamlines builds, as out of world, you could browse and select, collaborate and get ready a “pick list” so you are able, realistically, to PLAN before the build – brainstorm, share, swap ideas etc. – this is sensible, right, to encourage our in-worlders to plan, design and then build?
Some FACTS: most of this meta data ALREADY EXISTS on the activeworlds help page [no thumbnails, sadly, but that is a minor thing, surely we could get someone to make them], dimensions, textures etc. are already there – example of “walk objects” . I do not know how “clever” the in-world browser is, and whether it could, for instance, “talk” to the object, “telling” it what to become based on what the searcher has found – this would be very cool [an “apply” button of sorts].
I am guessing that someone at Activeworlds has a complete catalogue – they make, package and SELL this content, and they commissioned its design and manufacture. I hazard to suggest they could provide this meta data to us in a form that would allow us to build a web-catalogue that could be used in-world and obviate the need for an object yard. More importantly, if the list is categorised it would allow us to SEARCH – watching kids work, when they want something the SEARCH for it [yes, admittedly most jump straight onto Google, but none the less the idea of using a search engine is not new and not silly] – it is a contemporary 21C skill and something we should provide as a basic service to our builders.
The list/web catalogue could be extensible, branded and pretty. It could allow us to easily add new clusters of objects [by updating things in the object path when new types of things are needed and making appropriate additions to the catalogue] and it could be organised – categories of objects would not be hard, and we could have subsetted versions for different audiences, and the language could suit them – from toddler [click on the pretty] to tweenie [that one is soooo lame, but that one is, like, cool].
I am, however, confused as to why this is not done. Seriously. Genuinely flummoxed as to how builders in ActiveWorlds put up with the status quo because the status is not … quo. Just because that is how it has been done it does not predicate how it CAN be done. I must be missing something important, because this is sensible, surely … so why is it NOT an option? Can anyone enlighten me? Is there anyone actually reading this? Is the idea worthy of further exploration? How would we make such enquiries?
There was movement at the station …
So an object exists in 3D, right … that means they have absolute coordinates relative to some “origin”. In addition, they have 3 axes of rotation, commonly labelled X, Y and Z:
The object axes and the world axes may coincide, particularly if you are building straight things – that run north-south for instance, but may not also, if they have been rotated around, say, the Y axis. Thankfully after RTFM I found a bunch of key combinations that make movement of objects a little less pained:
Movement is in increments of 0.5, 0.05 and 0.01 units [I am assuming meters here, although I have yet to measure an avatar against an object to see if that scale is accurate. Arrow keys and the “+” and “-” keys move north/south/west/east/up/down – all very sensible. Shift with the same keys reduces the scale one notch, shift+control reduces it even further. Useful to know when gross then fine movement prior to alignment is necessary – again, all very straight forward if moving according to the compass. Any mathematician will, however, tell you it gets more complicated if the object is rotated slightly – as a change may not distribute itself evenly across the axes involved in the movement [*shakes fist at Pythagoras and his hippopotenuse*].
I also discovered mouse equivalents of most of these – once r-clicked to select, the mouse roller rotated on an axis, dragging moved it quickly n/s or w/e and so on, so rapid gross placement is also possible prior to final alignment and tidying up using more precise controls. Object alignment and seams between objects seem to be really important – overlap can cause some object seams to strobe oddly – something with the world engine and its rendering routines – this is particularly evident on floor pieces as you move over them.
Logic [yee gods, using logic already] would dictate that an object is easier to construct plumb first, then rotate it as a whole later if necessary [mental note: try to remember this]. Like a noob, I rushed to try something complicated – a geodesic dome, composed of sides made up of 6 equilateral triangle pieces [I found such a piece at my last visit to the Object Yard]. Aligning the pieces on each hexagonal facet was fairly straight forward, I then selected all of the objects and saved that as an object group – curiously to my local HDD. Then I was able to “pop” instances of the object group [although, strangely, each of the pieces of that group were still considered separate, still to work out how to “stick” bits together so they behave as one – nothing obvious has emerged yet]. Constructing the dome from the hexagonal facets helped me realise I know nothing of the angles involved and that will necessitate some research – I was guessing and that did not turn out well – the seams were messy, misaligned and in the end I just trashed it.
Rotation is conveniently achieved in scalable units of 15°, 1.5º and 0.1º – again, if the object is plumb these rotations can be relied on – combination roll, yaw and tilt complicate this however indicating that a PLAN might not be a bad idea when considering the structure of a constructed object.
Right-clicking on the object selects it and pops up an object properties dialog box – this box lets you edit some things, or records others – interestingly it lets you play with the position directly [so long as you know the absolute world coordinates that you are building in]. The dialog only echoes the rotation – this is annoying as I would like to type in the rotation I want directly.
The “Action” section of the object properties box is where it starts to get interesting – here you can script the object – in the above example, I made it 3x it’s original height using a “create scale” command. There appear to be heaps of things you can do here – stretching and distorting however can make the object look a little stretched also, so care is needed – I suspect some objects will scale terribly, given their textures stretch also [as opposed to tile – interestingly I cannot find how to get a texture to tile as of yet, early days though].
I notice you can assign an owner in the object properties also – I wonder if you can programmatically do this – that way if you spawn an object you could “give” it to the person who wanted it? Something else to explore. I also notice a “cell limit” and do not know what this means either. Some more research is warranted.
The Yard
So, I have to play with building in an active world and I have realised what a complete noob I am. This is not a new feeling, but one that I commonly encounter when using a new metaphor for 3D construction. The _only_ 3D product I have instantly felt comfortable and productive in from the start was Bryce. In this program, you use “primitives” [a collection of simple bits of geometry that you scale, rotate, distort and composite into more complex things] and then apply textures, lighting and presto you have a 3D thing. In a program like Bryce there is a way of importing polygon meshes for irregular objects that just cannot be made easily from prims.
In SecondLife, [duplicated in OpenSIM] you get a similar collection of prims, and familiar manipulation tools – rotate, distort, scale, texture and so on, so the skills-transfer meant I [and, interestingly my students who had some Bryce experience prior to entering our school hosted OpenSIM] was up and making things in 2L quickly. I liked the intuitive controls and the precise control you could exert on things [via absolute world coordinated, using numbers and stuff CAD geeks love] after you have roughly dragged things to sort of where you wanted them – I find building by eye is fairly fast, having lots of experience in vector art programs like CorelDraw and similar.
So I wander into a piece of blank space in Q2 and look for the object create trick … looking, looking, r-click on someone else’s object and low and behold, there is a “clone” feature so I have my own copy of an object someone else “made”. Now to customise it … looking, looking. There are gross scale, position and rotation controls … good, although they tend to jump in huge increments. By keyboard mashing I discovered you can reduce the scale of the change with the shift and control keys … good. There are also quick to use grid alignment, useful if you are making … square things … good. How to change the object itself …
An active world object has a name, change that and you get a different instance of an object from some mythical “object bank” stored somewhere on the host server [or wherever the nominated “object path” is … note to self, find this repository and gain access so I can add new things there – presumably web access, will have to ask a techie]. Seems you manupulate instances of base objects, which is one approach – you have a central “library” of things, and the world is populated by popped instances. this approach is the same as my MUD’s Objectorium and Beastiary [databases of in-world things that form the fabric of room decorations].
The trick is knowing what the objects are called and what they look like, and their dimensions, and the textures they are rendered in, …and their colour and style – no too much to want to know I suppose … one approach, which I have seen in a couple of Activeworlds is to form an “Object Yard” which is a little like a “Bunnings” from hell. I say from hell here advisedly, but, really, all hardware shops give me the heebie jeebies because in the dozens of aisles I can never find that exact thing I am looking for. It is why I am an anxious mess when sent out to the supermarket with a list from “she who must be obeyed”. Choice is a wonderful thing…
…so I wandered around until my world browser started slowing a little, some serious lag cut in and stuff started appearing before me … random stuff … arranged in rows. I noticed on the status line there was “5000 items left to download” and I thought … funny … until the other internauts in our house started winging about the notwerk lag.
I had stumbled across the Q2 Object Yard – 8ish stories high, thousands of instantiated object types – oddly, what also looked to me like copies of things with minute differences. See something you like, clone it, move it to your building site and build on. It got me thinking of smarter ways to present build options but I wonder how flavoured those thoughts are with stuff I am more familiar with?
I recognised objects I had seen used by the primary kids in their constructions and wondered how they would cope in such a supermarket [my guess is fairly badly]. The “sameness” in actual student builds may have been a product of one person seeing something another builder had used and, rather than necessarily searching for something better, used that. The worlds largest consumer markets work this way so why should it be any different in-world? There does not appear to be any catalogue. no search tool … where will our google-kinde be without such tools?
I have not found a player “inventory” or similar personal container [where you can store your own objects, like a shopping cart or simple cardboard box] nor a simple way to copy-paste but assume there is one [as I think even the iPhone lets you do this now, I think?].
I have noticed you can add a script to objects to scale and mask them, but have yet to fully explore this option. I have flipped and rotated, raised and lowered but have yet to find a way to “group” clusters of objects [or indeed “lock” them to avoid accidentally nudging them]. I have not found how to apply textures yet, have not found how to add textures [or list those available] but assume you can, nor have I found how to associate a sound/event or behaviour to these objects, but assume you can.
I have much to learn. When all else fails, RTFM [there is a manual? tutorials? exemplars? out-world expertise?], or talk to experts … time to do both.
Pre-Build
Asked for and was given [many thanks Lissa] “God” access to an Activeworlds project called Q2. Logging in I was presented with a plethora of structures, themed under “The Year of Creativity” which was 2009’s motto [who knew?] where a coordinator and a bunch of mentors let primary school students [years 5-7 I think] loose in a world, taught them to build and asked them to plan and construct around themes of “Fair, Healthy, Strong, Green and Smart”. The challenge posed was to envisage and represent in navigable 3D something that demonstrably connected with one of these themes. The real challenge was to connect back to something that would benefit the state.
The degree of sophistication that was achieved in builds varied, the intent and obvious enthusiasm did not. Kids really got into this constructionist and constructivist activity. On this level that interests me – having seem myself how passionate learners get when presented with open-ended tools and allowed to exercise their imagination. Given an overwhelming collection of objects to build from, and some basic construction advice, the metaview is impressive.
Kids being kids, extra, unrelated stuff was added [notes to each other, explosions, fast cars etc] but central ideas were strong. So long as this in-world activity was surrounded by sound pedagogy, had a design and collaboration phase and was not merely a meet and make session I see this as an incredibly rich adjunct to what must have been really powerful conversations in classrooms between teacher and student, student and student, student and mentor, teacher and mentor. the real power of a platform is that is facilitates transformation of information in to knowledge and wisdom.
How, then, is this different from giving them a box of LEGO and asking them to do the same activity?
Although that seems like a trivial question, it is seated in important discussion. If kids use pre-fabs to stick together things in 3D that represent concepts and ideas, how is it different to the real world activity – glue, cardboard and poster paint, plasticine, styrofoam and pasta pictures? If time is limited, and the build process complex, this can necessitate a “sameness” between constructions and this is neither good or bad, merely a product of the process – what can we do to value-ad this? What out-world scaffolding will make the in-world activities take on rich and valuable meaning to learners? Why will it bet better to do this in-world rather than out?
Do not get me wrong, I am not raining on anyone’s parade here, I am however mindful of the pedagogy, and conscious that when we make a place for kids to make things in, they will need skills to not merely use a “cookie cutter” approach as a solution, content – rich content – will need to be implicit and part of what they do, and the tools will need to make sense.
So, time to explore the building tools I think…