Friday, August 19, 2022

Mesmerizer 1.7.0 and Owner HUD 1.1 release, and surprise new product preview

Product Release

The new Mesmerizer and Owner HUD are in vendors now.  As always, links to my vendors can be found in the stickies to the right of this blog.  The new functionality is described here.

The Mesmerizer will also be up on Marketplace shortly.  I discovered that the Owner HUD and the TranceCaster are not yet up on MP - I will rectify that, but it may take a day or two.


CSD Blindfold

I have a new small product that will be launched soon - a latex blindfold.  While there are plenty of blindfolds on the market, this one has a couple of interesting features:

  • It is designed to emulate a real blindfold in that the sub should be given no clues as to where they are, other than by recognizing voices.  So, when the blindfold is active, as well as preventing the sub from seeing, the location and nearby avatars are hidden, but their true identities are shown in local chat.
  • It is a PAN device, so it can be controlled via the sub's Mesmerizer as an alternative to a conventional menu.  This has two consequences:  The Mesmerizer can be used if the blindfold is hard to click on due to hair or other obstructions, and also the blindfold can be controlled remotely if the sub's Mesmerizer is connected to a Communications Hub.

The device is very simple - it has just three controls: Lock/Unlock, Wear/Remove and Blind/Unblind.  Blind/Unblind specifies whether the blindfold should restrict the wearer's vision etc, or whether it should simply act as a non-functional prop for RP.  Wear/Remove makes the blindfold visible or hidden, and if it is set to Blind, the restrictions are applied only when the blindfold is visible.  Lock/Unlock locks the blindfold against removal.  If the wearer locks it, then they may unlock it.  However, if someone else locks it, the wearer cannot unlock, although anyone else can - it is just a piece of latex tied around the sub's head, after all.

I expect the blindfold to be in vendors soon, along with an update to the AutoInstaller to handle image notecards.

Monday, August 8, 2022

TranceCaster bugfix, Mesmerizer 1.7.0 and Owner HUD 1.1 Preview

A fairly substantial update that covers multiple products in the CHAOS line is on its way.  But before I talk more about that, there is a minor update to the new TranceCaster.  There was a small bug in TranceCaster 1.0 that prevented the menu from working properly if the TranceCaster contained more than 18 trance scripts.  I've fixed this and put a new version 1.0.1 in vendors.   Get your update from any of my vendors, or any CasperVend vendor by choosing "Redeliver" from the menu.

I do have a somewhat more significant update to the TranceCaster in the works, so if you have any suggestions for new functionality, now would be a great time to let me know.

Now onto the preview announcements.

CHAOS Mesmerizer 1.7.0

There are three important new features in Mesmerizer 1.7.0:  better support for images with parameters, camera control, and improved legibility of on-screen text.

Enhanced image support

In Mesmerizer 1.6.6, I introduced the show2 family of commands that extended the Mesmerizer's image display capability to support non-square images as well as moving images.  show2 commands take an extra parameter that can specify things such as the aspect ratio of the image, its opacity, and for a moving image, how many frames per second should be displayed and how those frames are laid out within the image texture.  So a command to display a moving image might look something like this:

/99 show2 306942ab-2bda-bd53-6d18-5dda710af8a6 "alpha=1.0;animate=7:8:10"

This works, but it's a bit complicated to type.  The CHAOS Visualizer doesn't yet support these "extended" textures (although that's on my to-do list), so you don't really have any option other than to type it each time.  I suppose you could define a macro in the Owner's HUD, but you're limited to only something like 11 macros.  It would be far better to have the images somehow include that parameter information so that it doesn't have to be specified each time. 

Mesmerizer 1.7.0 allows images to be defined by a notecard.  Image notecards are named with a prefix "Image:" and they contain the information in the parameters above that are supplied to show2.  For instance, I could create a notecard in my Mesmerizer called Image:animatedHands that contains the following:

alpha=1.0
animate=7:8:10
texture=306942ab-2bda-bd53-6d18-5dda710af8a6

This would allow me to simply say:

/99 show "animatedHands"

to get the same effect as the show2 command above, without having to type the parameters explicitly.

What's actually going on here is that when you issue a show or show2 command with the first parameter foo, the Mesmerizer will first look for a notecard called Image:foo, and if it finds one, it will use the information in that notecard to find the actual texture as well as display parameters.   If the original command was a show2 family command, the command could specify its own display parameters, which would override those same parameters in the notecard.  So with the notecard above, I could say:

/99 show2 "animatedHands" "alpha=0.6"

to get the same moving image, but with 40% transparency.

The pics command will now display both "raw" textures and Image: notecards.   A new picinfo command displays the contents of an Image: notecard.  It takes the notecard name (without the leading "Image:") as a parameter.   So if the above notecard Image:animatedHands is present, then

/99 picinfo "animated Hands"

would show:

Details for image "animatedHands":
alpha=1.0
animate=7:8:10
texture=306942ab-2bda-bd53-6d18-5dda710af8a6


Camera Control

I've often been in a situation where I want to point out something in-world to a sub.  Whether this is a vendor in a store or a spiral on the wall, I've often wished I could bring my sub's camera to a point of my choosing.   That's what the camera control feature does.

The new lookat command and its slightly simpler lookat2 variant force the sub's camera to focus on a specific thing.   The commands take the following form:

lookat2 target cpos 

lookat target cpos fov

Both commands specify the thing to look at in their first parameter.  This can be an object name, the key of an object, or coordinates.  The second parameter specifies where the camera will be.  This is specified as either relative or absolute coordinates.  lookat takes a third parameter which is the field of view in degrees that should be used; lookat2 uses the sub's current field of view. 

The cpos (camera position) parameter needs more explanation.  In its simplest form, it can be expressed as a set of x,y,z coordinates, e.g. "<23.0, 124, 25>".  You can also express this as a set of relative coordinates, by using + or - symbols in the various coordinate positions.  An omitted coordinate is taken to mean "+0".   For instance, a camera position of "<+1,-1,>" means that the camera is placed 1m East and 1m South of the target, and at the same height as the target.

The angle brackets surrounding coordinates are optional.

When lookat is in effect, the sub's camera is locked in place.  The freecam command will release it.

There is also a new mouselook command that takes a boolean parameter ("on" or "off") to indicate whether to force mouselook.  Note that the behavior of this command is rather different between viewers that implement the original RLV (e.g. Marine's viewer) and those that implement RLVa (e.g Firestorm).  In viewers using the original RLV, this command will activate mouselook; in RLVa viewers, it simply locks the camera to the center of the sub's head.   This looks rather weird, and can best be thought of as a strong encouragement for them to go into "real" mouselook.

The Owner HUD has been enhanced to make use of this new feature as described below.

Improved text legibility

Since its initial release, the Mesmerizer has used hover-text to display on-screen messages (both within and outside of trance).  This has the advantage of simplicity, but the small size of the text can make it difficult to read.   I've made various attempts to alleviate this problem (for instance supporting cycling colors to help make the text more visible against a variety of backgrounds), but the best solution would be to increase the font size.  Mesmerizer 1.7.0 does this, by using the Open Source FURWARE text.  I've used this to create a text display of 8 lines of 128 characters each.  You can switch between the original hover-text and the larger FURWARE text using the new textstyle command, which takes a parameter that is one of "small" or "large":

textstyle large uses FURWARE with a font that lets the lines stretch most of the way across the screen.  This is the default.

textstyle small uses the original hover-text implementation.

I've retained the original hovertext because the FURWARE implementation does have one drawback.  It uses prims to display the text, so when it's in use the middle portion of the screen is covered with those prims, and even if a given prim isn't displaying any text it will still obstruct mouse-clicks.  To alleviate this, when the text is cleared the FURWARE prims are moved off-screen.  But if you wish to leave text visible while the sub is doing something else and may want to interact with in-world objects, you should probably switch to textstyle small so that their mouse won't be obstructed.

All of the commands relating to text work with FURWARE as they did with the original hover-text (even color cycling).

This only affects text written with the text and text2 commands.  Subliminals continue to use hover-text

CHAOS Owner HUD 1.1

As mentioned above, the Owner HUD has been enhanced to support the new camera controls.  CHAOS Owner HUD 1.1 adds buttons (under the "Misc" tab) to send a lookat command based on the owner's current camera.  This allows you to set your own camera to a precise position and then press the "Send Cam" button to move the sub's camera to that same place.  This mostly removes the need to ever bother with constructing a complicated lookat or lookat2 command manually.  There is a corresponding "Free Cam" button to release the targeted sub's camera, as well as a "Free My Cam" button which releases just the wearer's camera, in the event that you were included in the HUD's targets.

Futures


As mentioned above, I intend to add support for "extended" textures to the CHAOS Visualizer.  I haven't yet started on this, but I don't think it will be a major piece of work.  Similarly, the AutoInstaller needs a little work to add support for Image: notecards.

While the Mesmerizer and Owner HUD updates should be in vendors within the next few days, it'll be a little longer before the Visualizer and AutoInstaller get their updates.

Sunday, June 12, 2022

Announcing CHAOS TranceCaster 1.0 and The Enforcer 2.0

 The TranceCaster as described in the previous post is in vendors now, along with The Enforcer 1.2, which is a required update in order to use the TranceCaster.  I will be uploading both products to MP soon, but as always you can get an update from any of my vendors (links in the stickies on the right of this blog), regardless of whether you originally purchased from MP or from a vendor.

The next releases will likely be the long-promised CHAOS RoboCollar and a Mesmerizer update.  I've described the RoboCollar previously.  The RoboCollar will likely come with a wireless trickle-charging station, with a fast-charging station as a separate optional product.  The fast-charging station will be a device that the sub has to sit on, whereas the included trickle-charger has the ability to slowly charge any nearby collar.  A collar option specifies whether the collar can be charged wirelessly, and if so whether the charger must belong to an owner.

The most significant features of the next Mesmerizer release will be a redesign of how images can be specified, and support for camera control.  The new show2 commands, introduced in Mesmerizer 1.6.6, provide support for images of different aspect ratios as well as moving images.  Mesmerizer 1.6.7 will support a new way of loading images into the Mesmerizer to provide defaults for these settings, which will allow the original show commands to take advantage of these new features.  The show2 family of commands is still useful if you wish to override the default settings for a particular image.  This will allow trance scripts, for instance, to more easily incorporate moving images, although Mesmerizer 1.6.7 will also allow these parameters to be specified explicitly within the script, as they already can be in TranceCaster trance scripts.

Camera control is still in the planning stage, but will support some new vision restrictions (e.g. how far away the sub is allowed to move their camera, forced mouse-look) as well as the ability to move the sub's camera to specific places.   An update to the Owner's HUD will use this feature to let an owner cause their sub's camera to move to where their own camera is focused.

Tuesday, May 24, 2022

New product preview: The CHAOS TranceCaster

CHAOS TranceCaster

If you write Mesmerizer trances for a sub, you generally want to modify them as the sub becomes accustomed to them.  You might want to speed up an induction as the sub become more adept at trancing. You may want to add new suggestions to the trance as they internalize the original ones.  And you may want to remove or rewrite parts that have caused confusion or resistance.

You could do this by maintaining a working copy of the trance script notecard and using a CHAOS AutoInstaller to periodically upload the current version into the sub's Mesmerizer.  But this requires that the sub visit the location of their AutoInstaller to receive the update, and it requires you to visit that location to upload the updated trance script.  And if you want to use your script with multiple subs, you have to visit and upload it to each of their AutoInstallers.

An ideal solution would be to use The Enforcer.  And indeed, it is possible to write EnforcerScript to start a hypnosis session and to periodically send lines of text to the sub.  However, this either requires an event to run for the duration of the trance (which is bad practice - each running event script consumes memory, so you want to keep each script as short as possible to minimize the chance of having many event scripts running simultaneously), or to divide a trance into many "scriptlets" running as a series of delayed events (which is very clumsy and has its own performance issues).  What's wanted is a way to run "trance scripts" that don't compete with Enforcer events.  And that's what the new TranceCaster is.

The CHAOS TranceCaster allows you to run trances centrally, via The Enforcer.  You drop a trance script notecard into the CHAOS TranceCaster, and it can then be played back to any sub either via the TranceCaster menu, or via an Enforcer command.  The syntax of a TranceCaster script is the same as the syntax used for Mesmerizer trances with a few minor differences, making it relatively easy to develop and test scripts in the TranceCaster, and then move them via an AutoInstaller into a sub's Mesmerizer if you prefer them to run locally.

Extensions to trance script syntax

When a script runs within the TranceCaster, it is created with a namespace that can be used in variable expansions withing the trance.  This can be used to personalize a trance script - for instance to insert the sub's name into a trance script that can be use with multiple subs.  This leads to the most important difference between running a script within the TranceCaster versus running it in the Mesmerizer:  that variables could potentially be expanded either using the variable definitions in the target Mesmerizer or the definitions in the current namespace.  This is similar to how symbols can be expanded within EnforcerScript, where a symbol preceded by a single dollar symbol is expanded using The Enforcer's namespaces, whereas a symbol preceded by two dollar signs is converted to a single dollar symbol and passed to the target Mesmerizer, where it will be expanded using Mesmerizer symbols.  The same convention is used in TranceCaster scripts: the use of a single dollar symbol will translate the symbol within the TranceCaster, using the Namespace that the script was started with, while a double dollar symbol will be replaced by a single dollar symbol and passed to the target Mesmerizer.

Note that this is different to Mesmerizer trance scripts which use only a single dollar to mean "expand using Mesmerizer symbols".  Moving a script from the TranceCaster to the Mesmerizer will therefore require some small modifications.

Enforcer events can be initiated from a trance script using the new !event=name script command.  This will fire the named event within The Enforcer, running it for the user who the trance is running for, and passing the same namespace that the trance script is using.  Typically, !event would be used at the end of a trance script, if further processing by The Enforcer is wanted, although you can create events at any point during a trance script.

I have also added support in background images for the new features of the show2 family of Mesmerizer commands introduced in Mesmerizer 1.6.6.  This allows you to have background images that are not square, or that are animated.  To recap, background images are defined within a trance using the !bgpics=pic1, pic2, … syntax, or the related !addbgpics=pic1, pic2, … or !rembgpics=pic1, pic2, …  commands.  In Mesmerizer trance scripts, pic1 and pic2 etc, are either keys or names of images.  In Trance Library scripts, these keys or names can be followed by a semicolon and a string that will be used as the second parameter of a show2 family command.  For instance, !bgpics=306942ab-2bda-bd53-6d18-5dda710af8a6;alpha=1.0;animate=7:8:10 will display the background image as a 56-frame animation, fully opaque.  I will likely extend support for this syntax to Mesmerizer trance scripts in the next Mesmerizer release, so this is likely to be only a short-term difference.  Note that if a picture is referenced by name (as opposed to by key), then either the named texture must reside within the target's Mesmerizer, or if it resides within the TranceCaster, then it must be a full-perm texture.

One final difference is that the !pause=n command is not appropriate in a TranceCaster script, since !pause is intended for live trancing, in conjunction with the resume Mesmerizer command.

Running a trance script

Running a trance script requires The Enforcer 1.2, which will be released at the same time as the TranceCaster.   Before you can run a trance, you have to connect the TranceCaster to The Enforcer as an external controller.  You do this via The Enforcer's Cntrllers menu option.  With the TranceCaster rezzed nearby, select Find New…  from the Cntrllers menu - this will scan the region for unassociated controllers, and present you with a menu of any that were found.  Choose the TranceCaster, and the hovertext above the TranceCaster should indicate that it is now connected.  If you wish, you can change the name that The Enforcer will use to access the TranceCaster by first selecting it via the Current… choice in the Cntrllers menu, and picking Rename from the resulting menu.  Now it is ready to run trance scripts.

To run a trance script, first you have to place the script notecard in the contents of the TranceCaster.  Once a trance script is present, you can either run it manually via the TranceCaster's Scripts… menu, or from within an EnforcerScript program using the new EnforcerScript !runscript command.

!runscript takes two parameters: the name of the TranceCaster, and the name of the script to be run from within it.  So if your TranceCaster is called "My library" and the script you want to run is called "Example script", you would run this trance by the following EnforcerScript command:

!runscript My Library::Example script

Note that both the library name and the script name are case-sensitive.  The trance script will run for the same user that the EnforcerScript program is running for, and will be given a copy of the current namespace to be used for any single-dollar symbol expansions needed by the trance script.

Since a trance script can invoke an EnforcerScript program, and an EnforcerScript program can invoke a trance script, it's possible to create complex programs that switch back and forth between the two, with data being passed between them in a Namespace.  For instance, you could introduce random branching within a scripted trance by having the first segment of the trance generate an Enforcer event when it ends, and that Enforcer event would then choose the next segment to play.  Since a namespace is passed back and forwards between The Enforcer and the TranceCaster, it's possible to use this technique to create counted loops in a scripted trance, maintaining the loop counter as a variable that's incremented (and checked against a limit) each time the Enforcer event runs.

Using Mesmerizer trance scripts

As noted above, TranceCaster scripts and Mesmerizer scripts are very similar, the main difference being the use of $$ in a TranceCaster script to indicate symbol expansion withing the Mesmerizer, whereas a Mesmerizer script uses a single $-symbol for this purpose.  To simplify moving scripts between the TranceCaster and the Mesmerizer, a future update to the TranceCaster may treat trance scripts named with a leading "Script:" prefix as being Mesmerizer trances, interpreting a single dollar symbol to indicate variable expansion within the Mesmerizer, and not interpreting a double-dollar symbol at all.  So for now, you should avoid using the "Script:" prefix for TranceCaster notecard names.

Availability

The CHAOS TranceCaster and The Enforcer 1.2 are in final testing, and should be released later this month, barring unforeseen bugs.  Actually, I think "unforeseen" is superfluous when talking about bugs.




Wednesday, March 2, 2022

Mesmerizer 1.6.6

Another small Mesmerizer update, version 1.6.6, is in vendors and on Marketplace.  Mesmerizer 1.6.6 increases the options for image display.  Previously, the Mesmerizer could display images using the show family of commands.  These commands were (and still are) limited to using a square aspect ratio for display; they also don't support animated textures.  Mesmerizer 1.6.6 adds variants of the show commands - show2, showflash2, showlong2 and showstart2 - that each take an additional string parameter that allows the behavior to be changed.

The new parameter is a series of keyword=value assertions, separated by semicolons.  The following keywords are supported:

  • aspect - set the aspect ratio, or the image width divided by its height.  So a 16x9 display would have an aspect ratio of about 1.78, whereas the default image display has an aspect ratio of 1.0.  If omitted, 1.0 is assumed.  The image is always displayed to fill the screen height, and the width of the image is adjusted according to the aspect ratio.

  • alpha - set the alpha or opacity of this image.  1.0 is fully opaque; 0 is completely transparent.  If you don't specify an alpha value, the default image alpha will be used (which can in turn be set via the regular alpha command).
  • animate - animate the image.  The associated value is closely related to the string that defines how a custom spiral is animated in the setspiral command.   Images can be animated either by having them rotate, or by treating the image as a series of frames that are displayed in sequence.  Here are some examples:

animate=2.0 - rotate the texture at 2 radians per second

animate=4:8:10.0 - treat the texture as an array of 8 rows each containing 4 frames, and display the frames in sequence at 10 frames per second.  Loop back to the start after all 32 frames have been displayed

animate=[6]4:2:8.0 - treat the texture as an array of 2 rows of 4 frames, but only show the first 6 frames before repeating; display at 8 frames per second. 

Any of these animations may be played in reverse by putting a "-" symbol at the start.

If the animate keyword is omitted, then the full image will be displayed as a static picture.

So a command like:

/99 showstart2 306942ab-2bda-bd53-6d18-5dda710af8a6 "alpha=1.0;animate=7:8:10"

will treat the texture as 8 rows of 7 frames, and display those frames in sequence at 10 frames per second, with an opacity of 1.0 (fully opaque).

Each of the original showshowflashshowlong and showstart commands is equivalent to the corresponding new command, with the extra parameter given as an empty string.  So, for instance:

/99 show texture

is exactly equivalent to 

/99 show2 texture ""

Bugfix

In addition to the new show2 family of commands, Mesmerizer 1.6.6 includes a small refactorization to give more memory to the code that manipulates the #RLV folder.  Previously, a very large #RLV folder could sometimes cause this code to run out of memory.

A timing bug when restoring RLV restrictions on login is also partially addressed, although I'm not particularly happy with the way I solved the issue and will probably address it in a different way in a future release.