Saturday, January 19, 2008

RestrainedLife 1.10 IM commands, cont'd


After much talking, thinking, trial and error and technical difficulties, I have decided NOT to introduce IM commands at all. As a reminder, I wanted to make the viewer execute commands received through object IMs as well as llOwnerSays, provided the object that sends IMs to you passes some very tight tests such as "its group must the same as the parcel you are on", or "its owner must be in your friends list and must be able to map you".

Well the main reason of my step back is that many people are concerned with upcoming unsolicited @version=nnnn IMs from objects that they don't even know, eventually leading them to leave public BDSM areas because of the spam. Truth is, there is no way that I know of to check whether you're using my viewer or not, except by actually asking you with that very message and adapting to the answer or lack thereof. So the reason is social.

Technically I had to adapt too, because when receiving task IMs the viewer does not have a clue about the actual UUID of the object that sent the IM. Presumably because that object could be in another sim, and not even the root prim of its link set. I don't really know why we don't get that UUID but at least we have the owner of the object, along with its position and region, so that would have been possible.

So instead of relying on IMs coming directly from cages, the user will have to wear an attachment to "relay" chat messages from the cage (or furniture, let's not forget furniture designers) to the avatar through llOwnerSay like before. That attachment would decide to relay commands by checking the object against rules very much like the ones I have been describing in pseudocode in my previous post. So basically, what I wanted to do in the viewer will be done in a script instead, which is a sane approach if you ask me.

To be honest I am not totally decided yet. But we're making progress here, and I would like to thank you all for your precious comments and discussions in-world, special thanks going to Chorazin Allen for his very detailed concerns (and also his Relay mockup) and Ariel Moonsoo for commenting here. People who know me well know how difficult it is to convince me of something, 'cause I am more stubborn than a donkey and twice as slow* :)


(* The first one who can tell me where that line comes from and who said it, receives a full shibari set for free, or something else of the same value if they already have it ^_^)

Thursday, January 17, 2008

RestrainedLife and object IMs. Comments welcome !

I've made some progress on the viewer and am about to settle a big gripe of mine since the beginning : the ability to issue commands through object Instant Messages as well as llOwnerSay calls. But first please check the previous blog post for I have edited it to show the advancement of the "not done yet" features for the time being.

Back to task IMs. I am posting about it here and now because I want to extend the capabilities of the viewer to cages and furnitures, without the hassle of a object that the user must wear to relay commands from objects around that they don't own. For instance, you step into a cage, and if you're using the viewer it closes and prevents you from teleporting out. Without support for object IMs the user would have to wear a special attachment that would llOwnerSay everything the cage says, provided it's allowed to etc. Instead of this I want to execute IM commands very much like llOwnerSay commands. It would be so easier for content creators and users.

But it would be so easier for a griefer to take advantage of your vulnerability too ! That's why I have thought about a very tight rule to allow/deny IM commands. Let me show you its pseudocode.

IF I am accepting IM commands (off by default I think)
AND owner is not muted
AND object is not muted
AND object is in the same sim
AND object is close enough (to be determined... 20 m ?)
AND command is not "force remove outfit"
.. IF object is owned by me
.. OR object is owned by a friend who can map me
.. OR object is in the same group than the parcel I'm on
.... execute command


This way there is no need to maintain an internal list of names of the people/objects allowed to control you, as it is managed by the actual friends list. And it is persistent across sessions and installations as well. Less hassle for the user and for me, more clarity for the user. Keep in mind that it doesn't prevent your viewer from being screwed until you relog, so you will have to use the Mute List against malicious users. There is no way around that unless you keep "accept IM commands" turned off. Basically if you're in a "allow cages to keep me prisoner" mode, expect to be more vulnerable.

The critical part is the double OR : either owned by a friend who can see me on the map so that discriminates a lot and still sticks to the relationship between an owner and their subs, or set to the same group than the parcel you're on (not the one the object is on, or you'd have rogue parcels with objects griefing people around) to allow public cages to keep you in (I'm thinking of Deitide, Stonehaven, Bondage Ranch, Bondage Playground...).

I would like to hear your comments about this rule (constructive ones please), knowing that I've already brainstormed a little so I think it will pretty much look like this in the code. But I would like to hear about potential loopholes, exploits, methods I have overlooked and such. I'm asking for your advices because I consider this to be VERY IMPORTANT as it is likely to be used by many content creators soon.

Thank you for your help !


Saturday, January 12, 2008

My progress on RestrainedLife

I thought it would be nice to give you a foretaste of what's going to hit you when RestrainedLife 1.10 is out.

Yes, 1.10, not 1.05, because there will be so many new features that I think it's more like a major version, going way beyond what I had expected for it at first. Don't take this list for granted, everything in there works already except when said otherwise, but don't expect command lines as I could change them prior to release. There is no ETA either, but it's looking good already. And things that are "not done yet" can stay "not done" on release, depending on the time I have.

And when I mention a "force" feature, keep in mind it won't bypass whatever restriction applies to the object or the avatar. For instance, you can't force someone to remove all clothes if they are subject to the "prevent removing clothes" rule. In two words, "force" does not supersede "prevent".

I'll make it quick, here we go :

* Prevent wearing and removing clothes (yes, textures), per layer (shirt, undershirt, pants...) or as a whole.
* Give out the layers occupation the same way it is done with the version, on a given chat channel. The viewer answers 0 (empty) or 1 (worn), without disclosing the name of the clothes (*)
* Force removing clothes. Nasty. There will be no "force wearing clothes", though, as this requires to get them from the target's inventory (*). Perhaps a "force last worn clothes", in case of a mistake, just for convenience, but don't hold your breath.
* Prevent from opening inventory. That's extreme, but it's there. If one or more inventory windows are open when the restriction takes effect, they close automatically and won't reopen.
* Prevent from reading notecards. Yet another popular request, this feature will be loved or hated, depending on people. It does not prevent you from receiving them, but from reading them (and previewing them when received). It won't close all the notecards you had already opened though, for security reasons.
* Force sit on an object (by UUID). I had no idea about how to do it until Shinji Lungu suggested me a clever hack, which works wonders. Thank you Shinji !
* Force unsit.
* Prevent standing up : well of course. How many people requested that one, I don't know. It also prevents you from sitting elsewhere. When you sit on a cross and get chained, you'll stay where you are, period. (right now I'm sitting on a stupid plywood cube at home and I cannot lift my ass away from it. lol).
* Prevent using any non-zero chat channel except some
* Lock an attach point empty to prevent attaching anything to it, or all the attach points (cancelled, it's feasible another way)
* Force detaching whatever is worn on attach point X, or all the attach points (not done yet)
* Give out the list of attach points that are occupied by something, without giving out names, very much like the clothes
* Prevent customizing the teleport invite and reading customized invites sent by others, to go along with NoSendIM and NoReceiveIM.
* Garbage collector for orphaned restrictions (when the object that created them is unrezzed but hasn't removed its restrictions) (not done yet)
* Secure way to send commands to an avatar through object IMs. That's a very important feature that I would like to discuss with some people, I'll even post something about it here before releasing, as it's supposed to be secure but I want to be sure. (not done yet)
* And a couple of bugfixes and loopholes that I will, of course, keep unsaid. Thanks to the people who told me about them !

(*) You'll find out I'm very careful about disclosing private information, even the name of the clothes you wear, and I don't want to mess with the inventory in any way either. I could do it but I won't, because I don't want the viewer to go against the ToS. I hope you understand.


Edit : Updated the "not done yet" features to either "done" or "cancelled", and added new features at the end

Monday, January 7, 2008

A word about the Banesuit

So I've kept myself pretty busy lately, working solely on that Banesuit. First of all, so you get an idea, here are some pictures, and let's talk about its look-and-feel :

The Banesuit as a whole

The Bane Helmet

The rear of the Bane collar

Under one of the numerous punishments (here, lockdown and semi-blindness, static is actually animated in-world)

As some of you already know, this latex is the Powers of Creation black latex skin (yes it's a skin, not an outfit), which is perfect for the overall glossy look described in the novel. What you don't know is that Kai (the creator and owner of PoC) has been kind enough to accept putting a vendor wherever I may choose to set the processing lab at. That way future Banes will buy from this vendor (if they don't have the suit already) without having to move and break the roleplay. The shoes are Graves black boots but they're not part of the outfit, I just like them very much (it's a gift). I'm still torn about the standard shoes, I would think of regular platform ones, but they're not very sexy. You can be a Bane and be sexy, right ? Hehe.

Now the helmet. It is a sculpty made by yours truly, one prim only so easy to resize in all directions independently according to the shape of the head. Its shape is a bit different from the novel, which is a featureless ovoid, but it didn't look good here. This shape looks creepier, with only a nose, no mouth, no eyes, no brows, no hair. Total loss of identity and yet still looking slightly human. I don't think I will texture it either, because making it latex-covered wouldn't look good in my opinion. This helmet is rigged with nasty scripts : a Custodian, a Spy, and very likely an Eudeamon. More on those below.

The collar is purely SL, as there is none in the novel, but I like the look of it and it reinforces the feeling of ownership and total control. It looks a bit like the KDC med posture collar, which I love, but is different enough to not be an issue. It restrains the movements of the neck (it's a posture collar after all) without keeping it still, displays the name of the Bane and has a red LED that lights up when monitoring is on. And there is a tiny print on the back, as seen in the picture above. Guess what the keywords are ?

Now that you know the look of it, let's see what happens when the suit is sealed around the soon-to-be Bane ? The Bane has to activate the Spy script (which is pretty much like the one in the shackles collar), then the Operator locks the helmet and... the Bane cannot remove the outfit anymore, nor wear clothes. She cannot read notecards. She cannot rez, or build anything. She cannot detach the helmet nor the collar. She cannot send or receive IMs or chat. That's all for the basic restrictions but the Custodian is still sleeping. That is, until the Operators leads the Bane to the release area and says "Custodian, initiate full protocols". Then the Custodian comes to life and starts monitoring the Bane for the duration of her sentence.

And what does it do ? It monitors surrounding chat and repeats it to the Bane, with more or less jamming according to the level of deafness punishment. It prevents the Bane from speaking unless a Vox is plugged. It prevents her from entering buildings, from staying around civilians, from running, flying, using devices, listening to conversations, tping too fast. And it becomes less tolerant when violations pile up. Just like in the novel. It also complies with orders coming from the Operator, locally or remotely (with a special Spy remote). There are a bunch of commands actually, and the Bane can be punished on a whim. It will really be an exercise in frustration and obedience. I have made it give feedback very much like in the novel also, to make it more immersive. I swear the Bane will learn to hate her Custodian...

... until it turns into an Eudeamon, if ever. It will depend on a number of factors such as the time spent isolated, the places explored, the violations accumulated. I can't talk about it yet because I'm still in the process of designing it (and no I won't take suggestions). It will of course depend on who can take control of the Bane in lieu of the regular Operator, if any. That area is still blurry but I have some ideas now, that could make it work nicely.

Operators, while having the responsibility of several Banes, are not meant to spend too much time on that task (they have a life, unlike Banes. lol), it's a part-time job so to speak. The Custodian is expected to enforce behavioral restriction but roleplay is necessary or it will get old very quickly. That's why I have chosen not to automate Maintenance, as I think it's a nice opportunity to have face-to-face RP between a Bane and her Operator, allowing the latter to issue concerns to the management when necessary. It breaks isolation for a little while, but also reinforces the feeling of loneliness when it's over and she's sent back in the wild again. But RP is to be limited until the Eudeamon comes to life, on purpose. The Operator will actually take the role of the higher circuits of the Custodian, sending custom messages from time to time just to keep the Banes on their toes, and gathering feelings until they become useful to someone else, special to the Bane...

And that transition is the key. As I said earlier, the isolation is complete except to one person, and it's up to the Bane to find her.


PS : Sorry I am not going to demonstrate the Banesuit anymore, nor give beta versions to people not involved into the project already. It takes way too much time and I need to refrain from showing it off if I wish to finish it one day. Thank you for your understanding.

Wednesday, January 2, 2008

What am I working on again ?

Happy New Year 2008 everyone ! No holidays for me after all... and on top of being at RL work while others were resting, I kept myself pretty busy working in SL as well. So let's see...

Update 1.12 is done, and a few bugs have been spotted. Firstly, I had chosen to lighten the displays in order to get away from the dreaded stack-heap collision (Lockable is always about to explode, it's so big), and have changed the way the timers are shown. By doing so, I have introduced a bug that resets the timers every 24 hours. It's only a display bug, the timers are not actually reset (hence Long Timer, Autolock et al still work) but it's annoying. Secondly, the Give Keys plugin still crashes when there are more than 9 people in 30 m, which happens quite often in Pak. This is a bug I thought to have fixed long ago, and an easy one, but it's still there. Go figure. I'd also like to iron out the RL compatibility scripts and to make them shut up when you're not using the custom viewer. It is easy to do but not reliable because of the random time the avatar takes to rez when first logging on. And there are other features I'd like to add later. So 1.13 (or 1.14 for the superstitious) will be in order.

The Banishment Project (Program ?) is my number one priority. I don't talk about it much these days but I'm working hard on several technical aspects of it. Firstly, the Bane helmet, which took me some time to perfect, is now done and looks... umm... weird. It's a sculpty, black and slightly shining, designed to roughly look like a head with a nose... and that's it. It does look good but so out of this world. I know the one in the novel is just a featureless ovoid shape but I like this shape better (ovoid was looking too dull). It looks like an unfinished statue head, lacking eyes, mouth and hair. If I can I will post a pic or two later. Secondly, the Custodian script is under works and is starting to get big... I can't give too many details but what it will do is both monitor the wearer, punish her by progressively reducing some of her abilities (hear, see, move, touch) according to what she does, where she goes and what the Operator says, and link to the Spy plugin so the they can use it remotely. Oh and just so you know, I am making it as hard and mean as possible. This thing is programmed to make your life miserable, you'll know what I mean when your hearing becomes gradually harder along the time you spend near civilians. Or when your Custodian becomes jumpy and picky because you're scoring too many Violations. And these are but examples. I'm not a sadist, but I get an evil grin every time I code on that thing. It's going to be quite a challenge for every Bane, trust me.

The viewer has been added new features for 1.05 (not released yet but soon). It can now prevent the user from adding and/or removing pieces of clothing, either all of them at the same time or only some specific parts (you can lock shoes, or a corset, or whatever you like). This feature will be great when the Banesuit is sealed, there will be no way to remove it. It can also prevent the user from reading notecards (a popular request from isolation fans), they can be sent and received but neither opened nor previewed, at all. That too will be a good thing for Banishment. And it can prevent the user from opening the inventory windows, and closes them when the restriction takes effect. Nasty and very extreme. Use with caution. I have a couple more features to add before releasing (maybe a way to prevent the user from sending chat messages over any channel but some specific ones) but that shouldn't be too hard. I don't think I'll do the "no-stand" one now though, as it requires me to find a way to force the user to sit somewhere, and I'm not even sure I can do that. I'd also like to base it on Windlight so it looks better.

Finally, I'm not only working. As many of you know already, I've been owned by Miss Candy Delacroix for the last month, and am enjoying it greatly. She is amazing, and can make it hard and enjoyable at the same time. I spend most of my time isolated from everyone but Her, but not enough to cripple friendships or business. As She's not online at all times, I take the occasion to work on my things, hence me being rather productive lately. We're both learning a lot from this experience and She understands me easily, as She's like me a true switch and a bondage fan. I remember Coventina used to say "true Mistresses are true slaves"... it takes a sub to Dom the right way, if you see what I mean. Oh and before you even think about bothering my Miss, don't ask, She is not a professional and is not going to take anybody as a slave. This is between us only.