We’ve updated Kitely today with several big improvements. We now support the Environmental Enhancement Project (EEP), which allows changing the world’s environment: its sky, water, etc. We’ve also added the option to sell EEP settings in Kitely Market. And finally, we’ve added support for many new and updated scripting functions, in both LSL and OSSL.
A Note About OpenSim 0.9.2
Kitely runs the latest stable release of OpenSim, which is currently OpenSim 0.9.1.1 (along with over 600 proprietary improvements of our own). Most of the changes in today’s update were taken from OpenSim 0.9.2, which is currently in development and isn’t finished yet. We value stability, so normally we wouldn’t integrate code from an unreleased version of OpenSim. We prefer to wait until OpenSim’s bugs have been ironed out through testing on other grids. However, in this case we had good reasons to integrate some features from OpenSim 0.9.2 even though it hasn’t been released yet.
The reason we added the Environment Enhancements is that the previous environment system (WindLight) doesn’t work with modern viewers anymore, so it was important to provide a replacement.
We added the new and modified scripting functions from OpenSim 0.9.2 for two reasons. First, some of these functions are required in order to work with the Environment Enhancements. Second, some of you have asked us to add the new scripting functions so that you’ll be able to start using them.
We want to take this opportunity to thank Ubit Umarov for his continued work on improving OpenSim: he wrote the vast majority of these features, and he’s working hard on getting OpenSim 0.9.2 finished and released.
Environment Enhancements
You can now use the new Environment system in your worlds. If you look at your Region or Parcel settings, you’ll see that the Environment tab has changed: instead of showing Windlight settings, now it shows EEP settings. The world has an overall environment, and optionally parcels can override that environment. You can also create a private environment just for your avatar.
Another change is that OAR files now include the region and the parcels’ environments. (OAR files did not include Windlight settings, so this is a big improvement.)
Kitely now supports a new type of asset, called Settings (short for “Environment Settings”). This asset has three sub-types: Day Cycle, Sky and Water. You can add items of this type to your inventory, and you can also include them in products that you sell in Kitely Market. If you want to sell standalone Settings assets then we’ve added a new category for this purpose: Landscaping and Plants > Environments.
Migrating from Windlight to EEP
If you have Windlight settings in your regions then they will be converted to EEP automatically.
If you have Windlight settings in your parcels then they will not be converted to EEP automatically. That’s because unlike region settings, the parcel settings aren’t stored on the server. Instead, they are stored in XML files on your PC. In order to migrate them to EEP you will need to do the following:
1. Identify the Presets used in your parcels. For example, suppose that you have a parcel that has the following line in its description:
/*Windlight Sky: "[TOR] BIG SUN - Awwyeah" Water: "[TOR] Watermelon juice"*/
This means that the parcel is using the preset called “[TOR] BIG SUN – Awwyeah” for its Sky, and the preset called “[TOR] Watermelon juice” for its Water.
2. Locate these presets (as XML files) on your PC. There are two directories that can contain Presets: in Firestorm, and in your local settings.
The Firestorm presets are located in the following directory:
- Windows: C:\Program Files\FirestormOS-Releasex64\app_settings\windlight
- Mac: /Applications/FirestormOS-Releasex64.app/Contents/Resources/app_settings/windlight
In the example above, both of the presets can be found in the Firestorm directory. However, if you don’t find the presets in this directory then look for them in your personal presets directory, which is at:
- Windows: C:\Users\YOUR_NAME\AppData\Roaming\Firestorm_x64\user_settings\windlight
- Mac: ~/Library/Application Support/Firestorm/user_settings/windlight
If you can’t find the Presets in either of these locations then they never worked, because the viewer wouldn’t have found them either.
If you do find the Presets then convert them into the new Settings assets. This requires Firestorm 6.4.13. Select from the menu: World > Environment > Bulk Import, and then select the specific type of asset that you are importing. This adds Settings items to your inventory, in the “Settings” folder. You can then use these items to set the parcels’ environments.
Scripting Changes
This update includes many scripting changes. In some cases these changes are very significant because they don’t affect only the scripting functions (in LSL or OSSL), but also how OpenSim works at a basic level. The next few sections describe these changes.
Most of the new functions may be called by anyone, i.e. they don’t have a Threat Level.
New Environment Functions
The following functions allow working with the Environment, or with related aspects (such as the current time).
- llGetDayLength
- llGetRegionDayLength
- llGetDayOffset
- llGetRegionDayOffset
- llGetSunDirection (this function is actually not new, but it’s related to the other functions so it’s worth mentioning)
- llGetRegionSunDirection
- llGetMoonDirection
- llGetRegionMoonDirection
- llGetSunRotation
- llGetRegionSunRotation
- llGetMoonRotation
- llGetRegionMoonRotation
- osReplaceParcelEnvironment– may be called by anyone who has permission to edit the parcel
- osReplaceRegionEnvironment – may be called by anyone who has permission to edit the region
- osReplaceAgentEnvironment – may be called by the world owner or one of the estate managers
- osResetEnvironment – may be called by anyone who has permission to edit the parcel or the region (depending on which environment is being reset)
Other New Functions
- osSetSitActiveRange
- osSetLinkSitActiveRange
- osGetSitActiveRange
- osGetLinkSitActiveRange
- osSetStandTarget
- osSetLinkStandTarget
- osGetStandTarget
- osGetLinkStandTarget
- osSetParcelMusicURL – same permissions as osSetParcelMediaURL
- osParticleSystem
- osLinkParticleSystem
- osClearObjectAnimations
- osNpcLookAt – currently anyone can apply this to any NPC, but this may change in the future
- osSHA256
Deleted and Deprecated Functions
The following functions shouldn’t be used anymore.
- osSunGetParam / osGetSunParam
- osSunSetParam / osSetSunParam
- osSetEstateSunSettings
- osSetStateEvents
Changed Behavior
The following functions have changed their behavior.
- llTarget, llRotTarget – the events at_target and not_at_target used to be sent to every script in every prim in the object, but now they are sent only to the script that called llTarget or llRotTarget.
- llGiveInventoryList
- The items must have Copy permission. They also need Transfer permission if they’re being given to a different avatar.
- The destination object must be Moveable.
- The destination object must allow receiving incoming items.
- Can’t give scripts to other users (but you can give them other types of items).
- The script now sleeps a bit whenever this function is used: 3 seconds when giving to a user, or 100 ms when giving to an object.
- Changing a prim’s scale (using llSetScale, or one of the functions like llSetLinkPrimitiveParamsFast) didn’t show the scale change until the object was selected, or manipulated in some way. This has been fixed.
- If an LSL or OSSL function encounters an error then the script sleeps for 1 second
- llStartObjectAnimation, llStopObjectAnimation – you can now specify one of the system default animations (vs animations in the object’s inventory)
- llStartAnimation, llStopAnimation, llStartObjectAnimation, llStopObjectAnimation, osAvatarPlayAnimation, osAvatarStopAnimation – you can now specify the system default animations by their name instead of by their UUID
- osOwnerSaveAppearance, osAgentSaveAppearance, osNpcSaveAppearance – added an option to specify whether to save HUDs in the notecard or not
- llList2Vector, llList2Rot – now they automatically convert string elements into rotation and vector
- llList2Json – fixed a bug that occurred if any of the elements in the string was an empty string
- llPassCollisions – when used with the parameter “2”, now it doesn’t pass collisions (previously it did)
- osInviteToGroup – doesn’t send an invitation if the user is already a member of the group (returns 2 in this case)
- osInviteToGroup, osEjectFromGroup – improved the check for whether the user has the necessary group powers (Invite or Eject). Previously only the specific user’s powers were checked, but now we also check the powers that belong to the user’s Roles.
- llGetLinkKey – support parameter LINK_THIS
- llBreakLink, osForceBreakLink
- Allow breaking the prim that is hosting the script
- Automatically stand up all avatars that are sitting on the object
- osStopSound – supports parameters LINK_SET, LINK_ALL_OTHERS, LINK_ALL_CHILDREN
- llXorBase64 , llXorBase64Strings, llXorBase64StringsCorrect – fixed their implementation
- llLoadURL – can’t be called from group-owned prims
- llGetEnv – supports new parameters “whisper_range”, “chat_range” and “shout_range”
- osSlerp – added a new variant that accepts vectors instead of rotations
- osTeleportObject – works on phantom prims
Other Changes
We increased the number of products that are displayed in each Kitely Market page to 24 products (previously we showed 15 products).
We’ve fixed the following bug: put a script in a prim; lock the prim; restart the viewer; unlock the prim; and try to view the script. Previously you couldn’t view the script, but now you’ll be able to.