BF Pose HUD update V1.1

A long time ago, back in 2014, I wrote a pose HUD so I could take posed photographs in regions where I couldn’t rez a pose stand.  I put this on the marketplace, and it seems that this is something that a lot of people want, as I’ve certainly sold a few!

The original was very simple, with a just a “Next”, “Previous”, and “Stop” button.  All you had to do was wear it and you were all set to go.

A few years later, I wrote a better version that allows you to pose yourself, or any other avatar that grants you permissions.  People had seen some of my photographs and asked me if I’d photograph them, and instead of giving them a copy of the HUD, I wrote the improved version to pose other people.  I’m retiring the old original pose HUD and updating it with the new improved version.

As well as allowing you to pose other people, the new HUD fixes the other major restriction to posing.  You find that perfect spot, and the owner has it set so you can’t run a script!  If you find yourself in the situation where you want to use the HUD in a no-script area, simply attach it somewhere you can run a script and teleport to your no-script area, and the HUD will continue to work.

The HUD’s interface has been updated so you don’t have to guess what the buttons do any more (although the old version was pretty self explanatory).  You can see the pose navigation screen in the new ad (my, those system layer jeans look fetching haha):

And the first screen you see allows you to choose to pose yourself or someone else:

 

 

I hope you enjoy the improved functionality!


BF Bird Box update V3.0

During the course of updating all my scripted products, I decided to chase down a report that I received about the bird box stopping for no apparent reason.  I run copies of the boxes at my house and Eden, the club that I co-manage, and I’ve never experienced this problem, but apparently one of my customers has, a number of times.  This was not a major issue for them, they just restarted the box and everything was fine, but things like this bug me (pardon the pun).

Although the script for the box employs some very sophisticated programming techniques, I was obviously still learning the quirks of LSL when I wrote it, because I found a newbie mistake with the code that under very certain circumstances could cause the script to halt when it lost track of a player.

Having found the bug in the code, I was able to create the scenario that caused the bug to trigger, and could then reproduce the bug.  So I refactored that part of the script to use “proper” LSL techniques to squish it 🙂

While I was in the code, I added a few new features.

Some people, including me, have multiple parcels on a region.  Previously, if the box detected that this was so, and that it could move objects into a parcel that it wasn’t on, it would do this.  I’ve now added a new configuration parameter called “push_to_others” that enables or disables this.

If you set the parameter to 1, it will send players to all parcels it discovers owned by the same owner of the parcel it’s on, and if you set it to 0, it won’t.

I also decided to also make the “circle” function of the box much more versatile.

The original box allowed you to specify a minimum and maximum radius for a circle that was centered on the box.  This allowed you to create a circle or “torus” that would constrain the sounds to that area.

The drawback with the original design was that the circle applied to all levels, which was usually not what you wanted.  I’ve fixed this in the new version too.  You can now specify a circle (not torus any more) per level by setting a center and a radius.  Note the circle no longer needs to be centered on the box.

If you’re using the old max_radius and min_radius parameters to set a circle, you will need to update your configuration for this version.  The documentation explains how the new parameters work, but to summarize, it’s just a matter of specifying a center and radius in the level description.  So a level with a circle might look like:


level=(height:22, max:3, chance:60, notecard:birds, center:<190,45,0>, radius:10)

Using both these new parameters in tandem is a great way to get certain sounds on one parcel and not on another without having to use two boxes, one for each parcel.

The documentation has been updated for these new features, but if you have any questions or something is unclear to you, contact me and I’ll do my best to help you out!


Product updates

TL;DR

I’m releasing a lot of product updates due to a changed workflow.  Skip to the bottom of the article to see which ones.  Most products will see small or no functional changes that won’t effect your use of the product.  If you’re really paying attention, you might see the memory footprints of the objects go down.  Products that have significant functional changes are highlighted and link to articles covering their changes.

What’s going on?

During the time I’ve been creating content for Second Life, I’ve actively tried to make my customers happy by making support a priority.  This means that I’ll drop what I’m doing and come and help you solve whatever problem you’re having, until you’re a happy camper.  This attitude has sometimes left me confused about which script is where and in what object.

Tracking script versions in SL is hard, far harder than it should be.  I should know, I’ve been a software developer for my entire career (although I now run the team instead of actively code) and I track software changes all the time.  SL doesn’t make it easy, there’s not even a supported way to insert a version number into a script!  You have to hand code it, and that previously meant hand coding it in every copy of the script in-world.

So, I’ve decided that I’m going to rigidly standardize my workflow, and I’m going to standardize it around a build system that includes running code through LSL PyOptimizer.

As the optimizer is not part of Firestorm, input (the script) and output all happen on my computer and not in-world.  To save myself copying and pasting the processed script into multiple copies of objects in-world, my in-world scripts now consist of just an #include directive to include the optimizer’s output.  There are two sides to this.

Firstly, I get the benefit of far less confusion over which in-world script I changed to fix your problem.  I can no longer change a script in-world, I have to edit it on my computer and run it through the workflow.  There is only one place the script resides, and it’s right there on my computer in a version controlled repository.

Secondly, you get the benefit of far more memory miserly scripts due to the optimizer.  The less memory used in a region, the faster it’s going to go.

And lastly, there’s a downside (there’s always a downside).  The downside is that it might take me a few more minutes/hours/days to solve a problem if you experience one, because I can’t get instant gratification by editing the script in-world right there in front of you.  I have to run the workflow.  And as that takes my focus off the viewer, I won’t try and fix a problem on the spot like I have in the past.

As you might imagine, after creating for over eight years, I have a lot of script to change over to this new system, and you’d be right.  I’ve been working on it in all my free time in SL since just after the New Year, and I’m happy to say I’ve finally completed the work for all the scripted products I sell.  I won’t mention the dozens and dozens of scripted objects I’ve created that I don’t sell.  They’re next!.

Changed Products

In the next few days, I plan to redeliver the following products to customers that have purchased them in the past (if you can see this article, marketplace and my store vendors have already been updated, so you can request a redelivery, or wait until I send you the update):

Product nameOld VersionNew Version
BF Build PlatformV1.0V1.1
BF Wind ChimesV1.2V1.3
BF Wind SculptV1.1V1.2
BF Globe on StandV1.1V1.2
BF Paper FanV1.0V1.1
BF Simple Skate HUDV1.0V1.1
BF “Swingin’ on the moon” ClockV1.0V1.1
BF Paper LampV1.0V1.1
BF Rain of StarsV1.0V1.1
BF Pose HUDV1.0V1.1
BF Music boxV1.1V1.2
BF Love NoteV1.0V1.1
BF Word ScramblesV1.2V1.3
BF Bird Box DemoX02-031V3.0
BF Bird BoxX02-031V3.0
BF Coffee Tin Bird BoxX02-031V3.0
BF TelescopeV3.10V4.0
BF Carbon Truss TelescopeV1.32V4.0
BF SDSS DisplayV1.22V4.0

The version numbers are listed so you can see if you have the latest delivery.  The new version number is in the description of each box containing the product, and those boxes are no modify, so there should be less confusion as to which box is which version too!

There are a few footnotes to explain things you may find strange in the table.  And if the name is a link, it links to a post explaining exactly what has changed with the product because you might have to change your configuration, or the way you use the product (hopefully for the better!).

Questions?

If you have any questions about any of this, please don’t hesitate to contact me either in-world by IMing me or dropping me a notecard, or you can use the contact form on this website or email my support email address, and I’ll get right back to you.


[1] This version number format is a holdover from days when I used to program in assembler.  I’m not sure how I managed to go a number of years without noticing that it was formatted like this.  A number like V3.0 is far easier for you to understand.
[2] There’s a large jump in the version number here.  Don’t worry, you didn’t miss out on anything!  As the scripts that make up the telescope system are now shared between all three systems, it was getting tedious to maintain multiple version numbers that were in effect, meaningless.  So I decided to jump all three systems to a common version number.