Tuesday, September 9, 2008

my voice drowns deep underground

I'm not best pleased to do this, but...I must issue a warning.

Brookhaven Hospital is not safe. And I do not mean, it is not safe in that it is a horror themed attraction, in that it's a tribute to Silent Hill's Brookhaven Hospital. Miss Becky Book has built a fairly impressive tribute to the source of some of Mary's nightmares, and--for all it's all on one level--what I've seen of it has been genuinely creepy, as well as game-authentic.

Unfortunately, that's not where the terror started.

Though Sir ZenMondo Wormser claims no responsibility, in fact, attributes what happened entirely to user error, this, near as I can figure, is what happened. I can only claim personal knowledge of four to which this has happened, but four, in my opinion, is more than enough.

I am a Silent Hill fan. It's no secret. Anything that even lightly touches on the source material resonates with me, so, when scanning for haunted attractions for this season upcoming, I was originally overjoyed to find Brookhaven. But the first night we went through, I dragged an item from my inventory into an object on the site--it's something of a puzzle, with prizes; one must hold down the Ctrl key, drag the item from the objects folder which one has found earlier, into the item it goes with, to open/unlock/reveal the next piece of the puzzle--and then watched in stupefaction as a subfolder of my notecards fed into the locker. I could not stop it, I could not alter it, I could not stop the flow--and there were notecards in that folder that contained, shall we say, highly personal information I would rather have stabbed someone else's child rather than reveal.

In a state of mild panic, I messaged Sir ZenMondo, who reassured me that no harm was done, that the object would auto-delete anything dragged to it, that neither he nor Miss Book had been sent a parcel containing said notecards, and that it was just a glitch. A glitch, by the way, he reinforced by saying it hardly ever happened, and likely wouldn't happen again.

More fool I, for believing him.

We ended up leaving that night, Mr. Allen and I, but Mr. Allen wished to return, so a few nights later, I, Mr. Allen, and Miss Neome Graves returned to Brookhaven. We managed to open the locker without incident and retrieved a very nicely detailed jersey jacket, featuring the image of Pyramid Head. Then we went deeper into the structure.

On one wall we saw a picture of a seminude woman, wrapped in a wisp of blue cloth, with one prim arm reaching out of the picture. We pondered for a moment, and then remembered--the copper ring we'd found! It was sheer mischance that sent Miss Neome to drag the ring onto the arm first.

What happened next still makes my heart sink.

The painting calmly, and with no notice whatsover, swallowed every item in her clothing folder. Now, unlike me, she sorts by color or maker, mostly, but her default clothing folder held most of the items she'd received by the now-defunct raffle trades at Bare Rose Tokyo, along with special scavenger hunt items, staff-only gifts (some of which are now discontinued), and items from other designers, including Draconic Lionheart, hyasynth Tiramisu, and Szentasha Salome, and Damen Gorilla of Adam & Eve.

She has no hope of recovering everything she lost--something over three hundred items and, as noted, many no longer made, many impossible to acquire again--in one moment of following the game at Brookhaven. This was worse than panic-inducing--this was a gut-punch to me, watching, and the loss to Miss Neome was staggering in the extreme.

All I could think of to do was send a notecard, explaining what had happened in detail, to Sir ZenMondo as the scripter, and Miss Becky Book as the builder.

Miss Book, to her eternal credit in my eyes, wrote me the instant she received the notecard, asking what she could do. She flew to the scene of the devastation, checking the locker for any remaining notecards--she found none, most thankfully--then moving to the painting of the Blue Lady.

She managed to retrieve, and carefully packaged up for us, eighty-four random items from the Blue Lady painting, and sent it to us. Mr. Allen sent me a script to list all items in chat, so we could compare them to items she'd lost. This is where things truly got dark.

Of the eighty-four items we received, eighty-two were objects of attire that Miss Neome had not even known she'd lost. So that pushed her total loss of clothing, shoes, AOs and objects to over three hundred items, three hundred and sixteen to be precise.

The two not on that list? Wandering shoe-forms that she did not previously own. Which leads me to my conclusion that there is a fourth woman this has happened to, on a list that includes myself, Miss Neome, and Miss Becky Book herself.

Miss Book sent the package to me, as I said, for later sending to Miss Neome, and offered what limited funds she had as some small form of recompense. As I thought it was truly a script error at that point, and thus, not her fault, though it was her attraction, I explained that we were both grateful for the offer, but we could not lay this at her feet.

No, it was the responsibility of the scripter. Which brings us to Sir ZenMondo Wormser. Who took over a day to get back to me after sending the notecard to him. Who spoke with me only after I initiated contact, after that day. And who then, with apparent blithe disregard of any element of conscience, disregarded all responsibility and blamed Miss Neome for the error.

I admit, I know Sir ZenMondo somewhat well, so, though I had hoped for some financial recompense for her savagely gutted inventory, to help her reacquire beloved pieces that she could, I knew it would not happen. What annoyed me further was his insistence that there was nothing he could do at all, and that it was her fault for dragging the items into the painting.

I have no idea where to turn at this point. Conversation with a staffer at Linden Labs resulted in no result of consequence. Sir ZenMondo's customer service is clearly lacking. And I truly believe blaming Miss Book would be the height of rudeness, and unfair to boot.

So I am left with this warning. If you do choose to go to Brookhaven...know you may leave lighter by far than you went. And that you may lose more than your peace of mind.

13 comments:

Tateru Nino said...

That's very interesting, actually. It points to either very sloppy mousing (which, given what you've said, does not seem to be the case) or a REALLY huge bug in the viewer.

Neither scripts nor objects can select or control what they receive - the viewer has to send a list of items to the simulator to transfer to the object. If the viewer is sending the wrong list... by golly, that's one SERIOUS bug. Very concerning indeed.

I might sit down and see if I can reproduce the glitch. It sounds like it wouldn't be too hard - but I'd better use a test alt for it, since even if I own both ends, it sounds like I could lose objects if the problem shows up.

Emilly Orr said...

That's what most worried me. When it happened to Miss Book, she lost something like a hundred items from one folder--but she assumed it was something she had done, was embarrassed, and didn't say anything.

I 'lost'--in the sense that they were deleted once in the locker object, but were not deleted from inventory--an entire subfolder of notecards. I know, however, that upon ctrl-selecting the key, in objects, that the key was the only object highlighted, and the only object dragged over. And I did not release ctrl until the key object was over the locker object.

Miss Neome said she may have held down the ctrl key only so far as the object leaving her inventory--but in any case, neither the notecards default folder nor the clothing default folder are near the objects folder--and neither were selected when the transfer was made.

In addition, we've done private tests with both objects I've made, and objects Mr. Allen has created, and ctrl-dragging inventory objects into them--and nothing copied over but what we'd selected and dragged.

I am not--and I informed Sir ZenMondo of this--blaming the script wholly for this. But I am saying it's contributing somehow, and it does point to a serious potential bug in the viewer.

Adding to the problem--Neome is on the standard client browser, I'm on Nicholaz Eye Candy F--so that's two different browsers for SL that the same bug is occurring within.

It's very, very worrying.

ZenMondo Wormser said...

There is nothing within LSL that can "suck things from your inventory". Here posted are the scripts used in the Locker and Blue Lady (and giving away the puzzle) if you can find where it can take anything not given to the object in which the script resides do let me know.



list gOld_Inventory; //This stores the Inventory since the last function call.
//It is global so it persists between function calls.
//It may also be handy to have a list of your object's inventory.

//Function GetNewInventoryName by ZenMondo Wormser

list GetNewInventoryName()
{
list found_new = []; //This list will contain the names of New Inventory items.
integer inventory_type = INVENTORY_ALL; //Change to look at inventory type you want.

integer inventory_num = llGetInventoryNumber(inventory_type);


list new_inventory = []; //This list will contain the current inventory.
integer counter = 0;

while(counter < inventory_num)
{
new_inventory = (new_inventory=[]) + new_inventory + llGetInventoryName(inventory_type, counter);
counter ++;
}

integer list_length = llGetListLength(new_inventory);

counter = 0;

list scratch;

while(counter < list_length)
{
scratch = llList2List(new_inventory, counter, counter);

if(llListFindList(gOld_Inventory, scratch) == -1) //New Inventory Object
{

found_new += llList2String(scratch,0); //Add the name of the new inventory item to the found_new list
}

counter ++;


}

gOld_Inventory = new_inventory; //Store the Inventory List to be compared the next time the function is called.
return found_new; //Return a list of the new inventory items.
}


default
{
state_entry()
{
llAllowInventoryDrop(TRUE);
GetNewInventoryName(); //Populate the list.

}

touch_start(integer total_number)
{
llSay(0, "This is locked, maybe I can find the key?");
}

changed(integer mask)
{
if(mask & (CHANGED_ALLOWED_DROP | CHANGED_INVENTORY))
{
list new_inv = GetNewInventoryName();


string new_item = llList2String(new_inv, 0);

if(new_item == "Key")
{
llSay(0, "You open the locker and find a box");
llRezObject("!", llGetPos() + <0, -1, 0> * llGetRot(), ZERO_VECTOR, llGetRot(), 11811);
}
else
{
llSay(0, new_item + " has no effect.");
}

llRemoveInventory(new_item);

GetNewInventoryName();

}
}


}

-------------------------------


list gOld_Inventory; //This stores the Inventory since the last function call.
//It is global so it persists between function calls.
//It may also be handy to have a list of your object's inventory.

//Function GetNewInventoryName by ZenMondo Wormser

list GetNewInventoryName()
{
list found_new = []; //This list will contain the names of New Inventory items.
integer inventory_type = INVENTORY_ALL; //Change to look at inventory type you want.

integer inventory_num = llGetInventoryNumber(inventory_type);


list new_inventory = []; //This list will contain the current inventory.
integer counter = 0;

while(counter < inventory_num)
{
new_inventory = (new_inventory=[]) + new_inventory + llGetInventoryName(inventory_type, counter);
counter ++;
}

integer list_length = llGetListLength(new_inventory);

counter = 0;

list scratch;

while(counter < list_length)
{
scratch = llList2List(new_inventory, counter, counter);

if(llListFindList(gOld_Inventory, scratch) == -1) //New Inventory Object
{

found_new += llList2String(scratch,0); //Add the name of the new inventory item to the found_new list
}

counter ++;


}

gOld_Inventory = new_inventory; //Store the Inventory List to be compared the next time the function is called.
return found_new; //Return a list of the new inventory items.
}


default
{
state_entry()
{
llAllowInventoryDrop(TRUE);
GetNewInventoryName(); //Populate the list.

}

touch_start(integer total_number)
{
llSay(0, "She stands alone");
llSleep(2);
llSay(0, "dreaming of the love that is gone");
llSleep(2);
llSay(0, "staring at the mark on her hand");
llSleep(2);
llSay(0, "crying for the lost expression of love.");
}

changed(integer mask)
{
if(mask & (CHANGED_ALLOWED_DROP | CHANGED_INVENTORY))
{
list new_inv = GetNewInventoryName();

integer list_len = llGetListLength(new_inv);
integer counter;

for(counter = 0; counter < list_len; counter++)
{
string new_item = llList2String(new_inv, counter);

if(new_item == "copper ring")
{
llSay(0, "The Blue Lady sighs, and the door unlocks.");
llSay(-22822, "open sesame");
}
else
{
llSay(0, new_item + " has no effect.");
}

llRemoveInventory(new_item);

GetNewInventoryName();
}
}
}


}

Becky Book said...

It did hapen to me once and what happened was I went to my recent items folder and grabbed the ring that was there, without paying attention to what was highlighted(I assumed only recent items were in the recent items folder) I grabbed the ring and dropped it onto the picture, my whole inventory folder was highlighted so it took stuff until the script broke. I dont actually know how much I lost because i dont pay that much attention, but it wwas alot. I added this warning to the instruction card: PLEASE NOTE: Make certain that ONLY the ring is highlighted in your inventory BEFORE you drop it in the place with the red frame or you could lose inventory items!

Becky Book said...

I just reproduced it. what happed was I had multiple items in my recent items folder. for this case it was notecards. i had previously had the notecard folder selected. when i went to crab the ring, I was already holding down cntrl, effectivley selecting the notecard folder and the copper ring. so when i drug it into the box, all my notecards went too. I did this in a non scripted box. Again I am very sorry this happened and I did change the notecard to have a warning, and if there is anything I can do please let me know.
thank you
Becky Book

Emilly Orr said...

Zen: if it's nothing whatsoever to do with your script, then I'll apologize, but none of our tests (granted, not using your scripts) have shown anything like this.

Miss Book: This makes a bit of sense, actually. If we can verify what Neome did before tracking down the copper ring, was to change outfits, or some such--then the client is somehow remembering the last folder selected and adding it in?

That's still problematic, it's still serious, but at least it's somewhat explainable.

Fawkes Allen said...

Yes, I just went and did this myself.

As I've said many times it's not the script that's the issue, it's a glitch in the SL Inventory System.

Mind you, though there was no way to know this would happen at first. Finding a way around it would definitely be worth the time. Whether it sends the object to a central depository first.

Returning the object would be best, but LSL sadly doesn't send any indentifying information on who dropped the object. A feature that's sorely needed sadly.

However, to explain, yes what Miss Book said is right. If you hold Control then drag the object from inventory, versus clicking it, then holding control, the previously selected folder/object will be selected as well. THIS IS A BUG, and should be reported by someone on the JIRA, sadly I can't, but someone who knows how too would be supported by those affected and more I'm sure.

Fawkes Allen said...

Actually, I just realized it's not a glitch. It's not good, but it's working as expected. Which is when you Ctrl Select another object, it gets selected as well. Just like Shift + Selecting an object selects all objects between them as well.

I think SL needs to change the button used when dragging an object into another prim. ALT, or ALT+CTRL perhaps. Because the first behavior, of hitting CTRL and selecting, is the expected behavior on all programs.

Emilly Orr said...

I keep going over this, and this is what doesn't make sense.

You're saying if I hit Crtl and then the object, I am leaving the previous folder I was working in selected, and thus dragging them both into the object.

And that makes sense. That makes a lot of sense.

But that's not what I did. I opened Objects. In Objects, I selected the key. I held down Ctrl, dragged the key to the locker, and a subfolder of my notecards folder with a different title (being a subfolder) was copied over).

Now, might I have been working in that folder previous? It's entirely possible. Do I think I had that folder still 'active', still selected, as I dragged the key over?

That's where I say, I don't remember that. I remember Objects > key > Ctrl-drag > why are all my notecards copying over....

And that's a problem.

Becky Book said...

actually you would not have to open the objects folder in recent items, it defaults to open folders. what would have selected it was closing another folder, then going to the ring later

Emilly Orr said...

That's what we're trying to figure out.

If we only have the objects folder selected, and drag things in from it, it should--if it copies additional objects at all--copy items *from* there. As opposed to other folders, which may or may not be selected.

We've tried selecting objects, holding down Ctrl, copying over; dragging objects over, THEN holding down Ctrl; holding down Ctrl *after* selection, and dragging it over; and nothing shows that same copy-over-everything behavior.

This is puzzling.

Neome said...

Well, first off, I wasn't in my recent items tab, I was in my regular inventory. I opened up my objects folder, clicked on the ring, made sure that it was highlighted, held control and dragged it onto the arm of the painting. I am quite certain that I did not click on any other item in my inventory, nor did I have multiple items highlighted. Yet somehow, it decided to transfer the contents of my clothing folder (which is not in my objects folder)into the arm. And unlike handing them over to another person, it didn't ask for any sort of confirmation when transferring over the no copy items.

Emilly Orr said...

That's a good point, too. In nearly every transaction type I've experienced in SL, when one is offering nocopy items, the client asks if this is really what I wanted to do. It's that pause that most computer programs are geared make--do I really want to transfer this nocopy item? Do I really want to empty my trash folder? Do I realize if I move this pose into my AO, I won't have it in my inventory?

With the notecards transfer, they were not set with any particular permissions. But with most of what you lost, Neome, they were set to nocopy. And you weren't asked--the items transferred over and into the painting silently. (Well, apart from lines and lines of green spam, which didn't stop for a full minute after you'd logged out of SL.)