Tuesday, June 5, 2018

Hardcore RLV

Hi !

You might remember Boy Lane's "Hardcore RLV" version of the RLV, a long time ago. That version, unlike the official RLV, did not have a "RestrainedLove" debug setting to deactivate the RLV features after relogging. If you did not use any other viewer, that made you effectively unable to cheat out of RLV. That was a real thrill.

A few successive attempts were made to make this kind of hardcore RLV totally secure, meaning you really could not use any other viewer to cheat out. That was done essentially by giving your password away or having it scrambled so that you could not log except with one particular viewer. An example of this technique was XtremRLV.

This didn't sit well with Linden Lab, who banned such techniques and stated in the SL ToS that you could not prevent anyone from logging with the viewer of their choice, and that was the end of that.

I'm not here to argue whether to use a hardcore RLV is a good thing or not, as there are two main sides : those who really want it to feel as real as possible, and those who are more into roleplaying. I respect and understand both sides. Besides, people also change with time and may switch sides. Personally I am more on the "RLV must feel real" side, but I did not believe in solutions like XtremRLV for security reasons. A griefer could completely lock you down for good if they got hold of your RLV relay with that kind of thing, and you'd be screwed.

Being on the "RLV must feel real" side, I actually don't like the "RestrainedLove" debug setting that allows the user to turn RLV off, even though it needs a relog afterwards. This is no different from relogging with another viewer, but still, it feels a little too easy. Likewise, I don't like the blacklist feature, since it allows a user to cherry-pick which RLV restrictions they like and which ones they don't like, making scripts unable to identify a RLV by its version. Lastly, I don't like to be allowed to send OOC chat (when you surround with double parenthesis like this : "(( ... ))" ), that too feels like cheating. But then again, I don't like long emotes either. I realize that there are a lot of things that I don't like, maybe I'm getting old and grumpy...  But back to the subject at hand.

Here is a little experiment I'd like to do. I'm releasing a hardcore version of the RLV in which the value of the "RestrainedLove" and "RestrainedLoveBlacklist" debug settings do not matter. The former is always interpreted as being True and the latter is always interpreted as being empty, regardless of their actual value. And no more OOC chat either. This version is on the erestraints.com website alongside the normal one so you can choose whether you want it soft or hard :)

At the time of this writing, the two viewers are exactly the same except for the "hardcore" differences stated above. They will diverge though, and that's where the experiment takes place. I don't actually know how many people are roleplayers and how many prefer it hardcore among the users of the RLV. Usually, like always, I hear only the malcontents, as those who are satisfied with what they have do tend to stay quiet and to just enjoy themselves. I genuinely don't know which direction to take there, so I'm giving you those two choices for now, knowing that I won't have the time to maintain two versions, so eventually one will take precedence over the other. Personally I'd like the hardcore version to prevail, since there are other viewers that offer a way out of RLV anyway (Kokua, Cool VL, FS...). I like the idea of having to download a different viewer in order to get out of RLV instead of just turning a switch off and relogging with the same viewer.

I understand that safewording is difficult on a hardcore RLV. If you are totally restricted (I'm talking IMs blocked, chat blocked, emotes blocked, inventory blocked, essentially turning you into a living furniture), and you need a way out, how to safeword ?

If I were you, I'd do what I did with the Banes going through the Banishment Program, a few years ago. I'd decide up front that a burst of three consecutive blocked IMs means that the sub requires attention and needs to communicate something important, while a burst of five consecutive blocked IMs means to stop immediately (that's your safeword). It works well like that and is simple enough to remember. Besides, if the sub starts spamming you with "*** IM blocked by sender's viewer" messages, eventually you'll wonder if something's wrong.

Anyway, the Hardcore RLV (it's not actually called that, I'm just using this name because that's rings a bell with most people) is available here :

And the MD5 hash of the Windows executable is :

I forgot to change the version of this particular RLV, it will show as like the normal one. But to check if you are using the hardcore one, simply start it with "RestrainedLove" set to False, or gag yourself and try saying something between "((" and "))". The hardcore RLV will not let you speak that way.

I'd be interesting in knowing whether you prefer a soft or a hard RLV for the future. I know that most people don't actually know that there is a debug setting to deactivate the RLV features, and they are disappointed when they find out.

For the developers who use my code in their own viewers, the revisions in my repository containing the changes to deactivate the features stated above are the following :

* Remove OOC : 295a7695d317
* Ignore "RestrainedLove" debug setting : 422d5f4c1359
* Ignore "RestrainedLoveBlacklist" debug setting : 23de52449d9b and b3462a8f788e

Have fun !


Wednesday, May 23, 2018



This blog post is about the new GDPR, aka the European General Data Protection Regulation (PDF in English), and how I (Marine Kelley) comply with it. In this post I'll try to go full disclosure with you about what I know when you purchase or use a product I made.

In a nutshell, the GDPR is a regulation that states that you, as a user, have the right to your privacy and that regulation gives you the right to know what data is processed by a vendor, to whom it is given, and a right to decide what you want to share and even to be forgotten.

Although this is a European regulation and Second Life is managed by Linden Lab which is based in the United States, I believe you have those rights no matter what. I have those rights as a European, and so should you. And as a European, my business should comply with this regulation anyway.

I'm going to try to remain concise here, but in case you don't want to read, here is the tl;dr version :

I do nothing with your data, I know very little about you, and I've followed these principles long before the GDPR was even an idea.

If you want fuller details, read on.

As you may know, there are several ways you as a user may interact with me as a merchant :

- By buying products from a vendor in-world, either from a RealRestraint vendor or a Marine's Goodies vendor.
- By buying products from the Marketplace.
- By contacting me in-world through chat or IM (Instant Message), directly or through a friend when language is an issue.
- By contacting me via email.

Let's start with the most important part : what I know about you. Then I'll explain how I gather these data and what I do with them.

Your data

I know very little about you. Your user name (for example Jane Resident), your display name(s) at the time(s) you interacted with me, the purchases you made, what you said to me when we discussed, the money you spent buying my products, and that's it.

Some of these data are on my hard drives in the form of textual chat logs, the rest is on the Gmail servers because I use Gmail as my primary mail service. All purchase logs go to my Gmail mailbox and sit there until the time I need them. The purchases transactions are also on the LL servers in the form of a Transaction History. None of my other mailboxes receives any data about you.

I do not know anything about your real name or identity, nor do I know anything about your IP address, computer, let alone real world location.

Lastly, I do not share nor sell any of your information to anyone. I did not wait for a regulation to tell me not to, I believe we are all entitled to our privacy.

When buying from a vendor in-world

When you buy a product from either a RealRestraint or a Marine's Goodies vendor, I receive in my mailbox an email from my server stating what you bought, when, from what vendor, for how much money, and if there was an error.

There is also the Linden Lab Transaction History, on which I have no control except consultation. When you make a purchase, paying me money in exchange for a product, a log entry is added to that Transaction History, stating your user name, the amount of money, the time and the location of the vendor.

Some of my RealRestraint vendors belong to my friend Angelina Sinclair, who gets a share of the earnings when buying from one of those vendors. As a result, she is notified when you buy from her by seeing your user name in a popup in her viewer, as well as in her Transaction History.

When opening a box

Nearly every box containing a product I made also contains a small script named "_Inventory", which is responsible for sending me an email when you rez the box. The data contains your user name, the inventory inside the box so I know there was no mistake when packaging the product and nothing was lost during the transfer, but also the slurl pointing to the place where the box was rezzed.

This might raise a privacy concern but in practice I do nothing with that information, which is not something my script is even programmed to send, it is automatically added by SL when sending the email, there's nothing I can do to prevent that, short of using an in-world relay and compounding the system.

When using a product I made

None of my products gathers any information about you nor shares anything with me. RR products do contact my home server once a week to get the "message of the day" and to get notified when an update is available. I do not log those commands nor get any information from them.

When updating a RealRestraint product

When you update a RealRestraint product (with a simple update or a replacement), I know what you update, when, from what updater and if there was an error. All these data are sent to my Gmail mailbox.

When buying a Maison De La Marquise product

When you buy a product from Maison De La Marquise, which is my Marketplace store, I receive an email from Linden Lab containing your user name, your purchase, who you gifted it to if it is a gift, the money you spent, the money I earned (that's what you spent minus 5% and commissions if any) and the time of the purchase.

When communicating with me
When you IM me, two things may happen. If I'm online, our conversation is logged to a particular text file on my hard drive (and on yours too) with your user name, display name and the dates and times. If I'm offline, your messages go to my mailbox, as well as my answers since I can communicate even while offline (thanks LL for that feature !).

When going to my shop in Pak

There is a radar in my booth in Pak that sends the user names of everybody who is present around the parcel to a prim that is located in my home sim. This list is not stored anywhere, it is just displayed as a hovertext that I look at once in a while. When someone leaves the vicinity or logs off there, their name disappears from the list.

I use this radar mainly to check if a specific person (usually a griefer or a troll) is present and if I have to intervene.

When reading this blog

Blogger belongs go Google and they may or may not gather information about you. They do not share any of it with me except for regular, non-identifying statistics and I have no control over what they gather.

When downloading the RLV

The RLV archive is stored in a folder on www.erestraints.com. I do not control any part of this site except for the FTP which I use to upload the RLV, and I get no information about who visits that page, downloads the viewer or when.

When using the RLV

The RLV does not share any data with me or anyone else about your usage you make of it. It stores the same data as the official SL viewer. LL sends me a regular report about crashes and other statistics, but none can identify anybody, they're just numbers and release versions.

The right to erasure

You may request me to erase all data I have about you. This is a manual process and I reserve the right to do it within reasonable delays, and this is what I'll do :

- I'll search your name in my mailbox and erase all entries.
- I'll erase your IM text log from my hard drive.

There are three caveats though :

- I cannot erase that data from the LL servers so my Transaction History will forget about you when it expires. Likewise, I cannot guarantee that Gmail won't keep a copy of the erased data, I have no control over that either. I can only erase what I have control upon.
- I treat my regular customers better than the ones who buy only a product or two from me. This means that when someone requests something from me that goes against normal business practices (like a replacement when the original object was lost, knowing said object was no-copy/trans and I can't be given a proof of the loss), the amount of money you spent with me goes a long way to help me decide if I should help or not. If you want me to erase those data, you may go back from "good customer" to "standard customer" status.
- Technically I do not own any of the data stored on Gmail, even though I own the credentials to access that mailbox. So I'll erase your data from there as an act of good will, but I am in no way required to do so. The only data that I own are the ones on my hard drives, and those are the ones I am required to erase. If you really want Gmail to erase your data from my mailbox once and for all, you have to ask Google.

The right to access

This one is more difficult, because it requires not to erase data but to format it in a reusable way (likely a text file). This is not a problem for IM logs, but it is for purchase logs as they are stored in my mailbox. I don't know if there's a way with Gmail to selectively archive some emails to a hard drive instead of all of them. I know that archiving the whole mailbox takes two days.

The same caveat applies : I do not own the data stored in my Gmail mailbox, even though I own the credentials to access it, so I am not actually required to share what is stored in it.

Sunday, May 20, 2018


Hi there,

Here is the latest version of the RLV which fixes a couple bugs as well as benefits from LL's latest changes, which also fixes several bugs present in the SL viewer (for example the freeze when you first close a window in the viewer). Here is the list of RLV-specific changes :

- fixed : We could not see the result of pressing the "Undo Changes" on the edit window of any wearable or body part, even though the wearable itself was back to its original shape.

- fixed : Made it so the user can be force-teleported even while logging in. Some objects are programmed to force someone to teleport somewhere else as soon as they are detected (consensually, this is not about security orbs), which could fail when the user was simply logging in there as the RLV command would simply be ignored during startup.

You can grab the Windows version here :

The MD5 hash for the Windows executable is :

Alternate download :

Have fun !

Wednesday, April 25, 2018

Update to the Restrained Elegance set

Hello there,

I am proud to announce the complete rework of the Restrained Elegance set, converting it to mesh using materials !

Until now the collar looked like this :

Now it looks like this :

It wasn't looking bad before, but this set has met a lot of success so it was high time it got an upgrade, don't you think ?

If you remember, the Restrained Elegance set was designed from the original real life cuffs set named "Heaven's Hell" by SM-Factory, with a written permission from Hans from SM-Factory to use the design and Hywel from RestrainedElegance to use the name, because it is on RestrainedElegance that you see those cuffs used the most. The design I came up with in SL wasn't bad for the time, but since then I actually acquired a full set of Heaven's Hell made to measure... you can guess where this is going.

I used calipers to reproduce the cuffs and the collar in SL, so your product will now be exactly the same as the RL one. If you own the same set in RL, or if you look closely at the pictures on the website, you'll notice that the front "pyramid" may have different shapes. My cuffs have a pointy pyramid, but some pictures show that piece flat on the front.

I even recorded sounds of me locking, unlocking, inserting and taking keys so you get the real thing. The little jingle you hear in those sounds is the key ring provided by SM-Factory.

Of course, since the shape is now exact, the materials have to be exact as well and I spent a considerable amount of time making sure of that. And by materials I mean there is not just steel. You have over thirty materials at your disposal, some of them being tintable to give you a plethora of options. Some of them, like steel, have a strong baked lighting on top of the dynamic shine, because we can't make mirrors in SL, so that's the only way to simulate reflective surfaces. Others have a lot less baked lighting but still a little to avoid looking plain.

How to update

Before going further, if you are eager to update your set, simply go to one of these locations :

My Little Shop
Chorazin's store
Roper's Dark Playground
Dark Wishes

Once there, click on the updater and follow the instructions. You absolutely need to choose "REPLACE" on the menu instead of "UPDATE" since the objects are completely different. If you do not get a "REPLACE" option, contact me (Marine Kelley) to get a manual replacement.

I forgot to say, this update is of course free.

The materials

Without further ado, let's see what materials you'll get, keeping in mind that the main part, the padlock and the details (the front "pyramid" and the rings) can be textured and tinted independently. I'm also showing the collar from different angles so you see the reflections are dynamic. And of course, the cuffs have the same materials, not just the collar, even though only the collar is displayed in these pictures.

Massive gold

Massive silver

Brass, which is the material used by the padlock by default



Aluminium, notice the dents on the edges

Steel new, this is the default material (the padlock is brass by default)

Steel used, a little more damaged than the one before

Steel alloy, like steel new but with much less baked lighting to make it easier to tint

Steel with a BDSM pattern

Steel with a celtic pattern

Steel with a flower pattern (well it's leaves, really)

Steel with a roman or greek pattern

Steel with runes
This is where the Easter egg is hidden. See the end of this post to find out about it.

Steel with skulls

Steel with studs

Hexagonal pattern, very fashionable, very shiny too

Galvanized iron, cheap look but sturdy, good for prisons

Rough iron

Rusty iron

Old, very old iron

Ruined iron, completely corroded and covered with dust

Corroded bronze

Old statue bronze, at least it's not covered in pigeon poop

Painted clean, tinted green with 10% saturation to make it look military (but you can tint it the color you want as it is white by default)

Painted worn

Painted scratched

Painted distressed

Plastic clean, tinted blue with 80% saturation (like paint this material is white by default), notice the little wear that shows that this is just a rubber coating, the underlying cuff is made of black steel

Plastic worn with more edge damage

Plastic distressed, this one has seen better days !

Legacy shine low, tinted "steel" (which is 50% grey) (*)

Legacy shine medium, this is the exact same shine as the old version of the Elegance set (*)

Legacy shine high, very metallic (*)

(*) The legacy shine refers to the way SL renders a shiny surface without using materials. The "Legacy" materials are there for those among you who can't or don't want to see materials on their cuffs. After all, you probably bought the Restrained Elegance set at a time when materials in SL were not even an idea, and if your computer cannot render materials, your set would be broken by this update if not for these "Legacy" materials.

So that's all the built-in materials in the new Restrained Elegance set. You've seen that the surfaces can also be tinted on top of it, but you can also adjust the tint by choosing a custom saturation and a custom luminosity. This is handy because most of the built-in colors (which are the same ones as the MdlM Latex catsuits so you can make them assorted) are fully saturated, but in the real world most colors are at least slightly desaturated to look more natural so you can do the same here.

EleganceTex plugin

All this customization is done through the new EleganceTex plugin, which is accessible both by the sub and by the keyholder, but the keyholder can choose to deny access to the sub if she wants.

Through this plugin you can :

* Change the materials like shown above
* Choose a tint to replace the possible built-in tint of the chosen material (like Aluminium which is grey)
* Choose the surface to change the material or tint of
* Adjust the saturation and luminosity
* Dull down the shine (you can't make it brighter since this modifies the shine color, not the glossiness) with the "Shine factor" button
* Deny access to the sub with the "Deny" button
* Choose to apply manually or automatically with the "Live" button
* Reset the tint, saturation and luminosity with the "Defaults" button
* Reset the materials back to "Steel new" and "Brass" for the padlock with the "Reset" button

Changing the tint

Some materials come pre-tinted, like "Steel alloy" which is grey by default whereas its texture is actually white. When you tint a surface, its built-in tint is replaced by the one you chose. Be aware though that some other materials do not have a built-in tint yet have a definite color, like Gold or Copper. Those materials have non-white textures so tinting them may lead to surprises. It's best to shade them instead, i.e. diminish the luminosity or choose a grey tint, which is the same thing.

When you have chosen your tint, you may want to adjust its saturation and/or luminosity. This is done independently and if you change the tint later, the saturation and luminosity stay the same. Using the saturation and luminosity is a good way to make a tint look more natural (like above in the pictures with the desaturated green and blue tints) without having to calculate a custom tint and to enter it manually in with the "CUSTOM" button in the "Tints" sub-menu.

The materials that you shouldn't tint but can safely darken are the following ones :

* Gold, but you can tint it princess pink to make pink gold, such a thing exists and it will even shine orangeish

*  Silver because it is naturally medium grey

* Brass because it is naturally brown

* Copper because it is naturally dark brown

* Steel (and its patterns) because it is very metallic, so its baked lighting texture is strong, contrasted and colorful

* Iron rusty, Iron old and Iron ruined because rust is supposed to be reddish

* Corroded and Statue fore the same reason

All the other materials can be safely tinted and they will look good.


The cuffs and the collar are made of metal, that is a given. This means a lot of things when it comes to rendering, in particular how the shine changes when the surface is tinted. Unlike plastics which shine the same color as the lights around them, metals actually tint the reflected light. In fact, the more conductive a material, the more it tints the light it reflects. The human eye is good at telling a metal from a plastic posing as metal, and this is how it manages that.

This means that when you tint your cuffs, the reflected shine is tinted as well. Most of the materials are bare metal so the tint is strong, like here on this steel alloy collar tinted blue :

Notice the shine is blueish there. If it were white instead of blue like the metal, it would look like this :

It looks... I don't know. More polished, maybe, like there is a layer of varnish over the metal. It doesn't look bad, but it does not look the way we would expect from a metal surface, so the shine changes color with the tint you choose instead of staying white.

This leads to interesting results, because some metals have a natural blueish shine, like iron and aluminium, making them shine cold. If you tint an aluminium collar red, it looks like this :

It is not obvious at first glance, but the shine is actually halfway between red and purple, making it look cold, like metal. It really adds to the feel of the surface.

Some materials are halfway between plastic and metal, like the "Paint" materials. Their paint reflects the shine with a slight tint to it depending on the tint you choose, but is not as conductive as bare metal. As for "Plastic" materials, they don't tint the shine at all.

Another interesting thing to note is that darkening a metal does not make it less shiny, so what the shine loses in saturation (because the closer the color is to black or white, the less saturated it is), it gains in luminosity. That way a grey steel will shine as bright as the same steel tinted pure black.

"Steel new" material, Luminosity 100%

The same "Steel new" material, Luminosity 0%, notice the shine stays the same

I've mentioned above that some materials don't react well to tinting, that's the case of "Gold" for example. If you tint your gold collar blue, it becomes green because the texture is yellow (but not plain yellow, which is why I couldn't make the texture white and tint it yellow automatically).

A better idea is to shade it by choosing a lower luminosity, let's say 10%. You can obtain black gold this way :

Classy, isn't it ?

New chains

I have redone the particle chains to make them look better, as the old ones looked too blocky and too big for this set of refined cuffs :


The Engrave plugin, which is used to show a classy word on the side of the cuffs, has been redone to make it easier to use and more flexible. I have also removed the restriction that prevents the wearer from using it when she has the keys, and the forced time to spend in cuffs before you could change the engraving again. Now the keyholder can always use that plugin whenever she likes without restriction. More over, the collar too now contains this plugin so you can get rid of the manual text and show an engraving instead if you so wish.

The plugin now lets you choose the text (it is invisible by default), its color (the choices are the same as in EleganceTex), but also the saturation and luminosity so you can make the color match that of the metal underneath. And if you want, you can make the text glow :

It is easy to make your own textures for the Engrave plugin, which lets you choose a custom UUID (the ID of a texture item in your inventory). To do this, download the following UV map :

Use it in any graphics software like Gimp, Photoshop, Inkscape or Illustrator, write what you want inside the yellow area, which does not take the whole texture so it stays aligned vertically and covers the area between the top and bottom pattern, if any.

The font I used to make the engravings was Scriptina, it's free and very pretty. I added an emboss to it to make the letters look like they are engraved into the metal. Once done, hide the yellow part, export your image as PNG, upload it to SL (it costs L$10) and copy its UUID by right-clicking on the texture in your inventory and selecting "Copy Asset UUID". Then you can enter it with the "CUSTOM" button in the "Text" sub-menu.

Text on the collar

The Text plugin in the Elegance collar has been replaced with the one used in the Vixen collar, which works better than the original Text plugin. That plugin lets you choose the text, enter one yourself, change the color and font, and even choose several colors and fonts in the same text.

Currently the only way to hide the text completely is to click on "CUSTOM" in the "Text" sub-menu and to validate without entering any text, this simply clears the text. I might change that in the future and add a "Visible" button like I did in Engrave, but for now this is the way to do it.

Please note that since the collar now has an Engrave plugin, it is possible to show both the engraving and the text at the same time, but you will usually want to use one or the other.


Another thing that is present in other RealRestraint products but that is new to the Restrained Elegance set is the Style plugin. With it you can choose to hide and show the front parts of the collar and/or cuffs, like in real life. The front "pyramid" is not actually welded to the metal cuff, it can be removed, as well as the ring, giving the cuff or collar a sleeker look :

Of course, if there are chains going to or from the ring, it will show itself. If you lock the collar on "Lock", hide the ring and leash it, the chain won't appear (but the leash will still be effective, the chain is there but just invisible).

You can also use the Style plugin to completely hide the whole set if you want, which hides the cuffs and the chains but does not remove the restrictions.

The button to hide the ring is labeled "no rings", plural, because each cuff and collar actually has three rings, each one showing a different angle (well the collar has six, see below), but only one shows at a time depending on the lock. That way, the chains and rings look a lot more natural.

There's also a little dependency between the arms cuffs and the collar. When you are locked in "hands to collar" (that's the 7th lock, located in the second page of the main menu of the arms cuffs), the collar's ring change to the oblique one. Likewise, if you choose the "overhead" lock (5th lock of the arms cuffs), the horizontal back ring will show on the collar, with a new piece to hold it in place. And if you choose "reverse prayer" (8th lock on the arms cuffs), the back piece will show as well but to hold the vertical back ring.

Finally, you can freely detach the elbow cuffs even when locked on "Lock" (not in other locks), that way you can choose between a complete look and a light look when simply wearing the cuffs as decorations.

The Spy box

As you already know, the Elegance collar contains the Spy plugin, and when it is activated a small plastic box appears behind the collar, with a LED that lights up when the chat listener is active :

There was as much attention to the detail and quality put into this box as in the rest of the product.

Easter egg

Easter was not long ago so why not hide an Easter egg into those cuffs ? In fact, let's play a game.

The first person who finds the Easter egg and tells me what it is, what it means and where it comes from, wins L$2000 worth of products from RealRestraint, Marine's Goodies or Maison De La Marquise, either for them or for their friends. There is a clue somewhere in this very blog post. Happy hunting !

Edit : Not 24 hours after publishing this blog post and releasing the update, Tsubasahane Resident has already found the solution so she wins the prize ! I didn't think somebody would find it so quickly. 

Edit 2 : And after a week of waiting, here is the solution. The Easter Egg is the runes, they are the lyrics of a song sung in Scots Gaelic. The lyrics are :

Fhir a' bhàta
'S tric mi sealltainn on chnoc as àirde
gach àit' an téid thu

Which translates as :

Oh my boatman
I often look from the highest hill
Wherever you go

Where's the song from, you'll ask ? If you haven't guessed already, it's from The Witcher 3 : Wild Hunt, one of the best games of all times. You hear it when you wander in Skellige. Enjoy.

That's all, enjoy your new Elegance cuffs !