[17:04] Dr. Samantha Wright: So tonight's presentation is on the personality system. It's easy to get into using it in a basic sense, but pretty tricky to fully master without some documentation. [17:04] Dr. Samantha Wright: So far, the only documentation that's available out there is actually pretty ancient, in the 8.0.5 manual. [17:05] Dr. Samantha Wright: A lot of little things have been added to the system since then, here and there, especially in 8.2, so I figured out was time to do a proper roundup of what we've got in store. [17:05] Dr. Samantha Wright: And... because for some bizarre reason, the frequency of questions I got about personalities specifically went up tenfold after Robots 101. So rather than chasing people around with form answers—boom, presentation time. [17:06] Presentation: Slide 2 [17:06] Eri: Then you can just give them a link and say, "Shut up and read that." [17:07] Dr. Samantha Wright: Exactly. [17:07] Dr. Samantha Wright: So we're going to cover three big topics tonight, and hopefully we'll have everyone out of here within about an hour. We'll go head-to-toe on personas, talk about gender and why the system is so complicated, and then, for something a little different, look at how packages are made and deployed. [17:08] Dr. Samantha Wright: We've got a special treat, of sorts, for everyone tonight, which is the public availability of xnebula:0 for package uploads. The code still needs a bit more tweaking to prevent decidedly... malicious behavior, but the functionality is there and should be fun for everyone to use. [17:08] Presentation: Slide 3 [17:08] Presentation: Slide 4 [17:09] Floor 4: Opening door 4 [17:09] Floor 3: Opening door 3 [17:10] Dr. Samantha Wright: Persona files must be named starting with "p_". They can contain spaces, but only about twelve letters can fit on a dialog button in most fonts, so you'll generally want to keep it short. For consistency, we usually recommend simple lower case names. [17:11] Dr. Samantha Wright: A persona is meant to represent an altered state of mind and behavior. Traditionally, we like to think the unit has access to all of its memories when in a persona, just... that it suddenly starts acting as if it has a bunch of experience doing character acting for a given role. [17:12] Dr. Samantha Wright: A persona does four things when activated, all performed by the _cortex module, which also manages the speech pipeline: request a px_ script be executed if present, remove the last persona's RLV folder and add its own, change the speech/tone marker sound effect, and change the preset messages. [17:12] Presentation: Slide 5 [17:13] Dr. Samantha Wright: This slide shows, in detail, the recommended format for a modern, complete persona file. As you can see, it's changed a little bit from some of the older personas the system comes with, and from the format described in the 8.0.5 manual. [17:13] Dr. Samantha Wright: Instead of one speech sound, we have three. [17:13] Dr. Samantha Wright: And instead of a fixed list of unnamed messages that the cortex automatically associates with the correct dot-command keywords, you can actually specify them. [17:14] Dr. Samantha Wright: The keywords, that is. [17:14] Presentation: Slide 6 [17:15] Dr. Samantha Wright: The first subject is RLV folder loading. Personas only mess with this when they're removed or added, although at the insistence of one of our junior technicians we're going to be looking into making them refresh on boot-up, since a persona actually does remain active after shutdown. [17:16] Dr. Samantha Wright: The RLV command we use to do this is @attachover, so subfolders don't get loaded. We'll be exploiting that in an upcoming version (because of the same junior technician) to add subdirectories for negation, i.e., things that should be removed when the persona is loaded, but we don't have that yet. [17:16] Eri raises her hand. [17:16] Eri: Allllll me. [17:17] Dr. Samantha Wright: Yes. Yes indeed. [17:17] Dr. Samantha Wright grinds her teeth. [17:17] Dr. Samantha Wright: Folders are unloaded before the next persona is loaded, so this is pretty safe. [17:17] Presentation: Slide 7 [17:18] Dr. Samantha Wright: So before I was talking about altered states of mind. Most people think of #RLV as a haven for clothes and stuff—not necessarily. You could, just as easily, put an AO in there, or some fancy special effect like a hiccup gadget. [17:18] Dr. Samantha Wright: Changing animation overriders was the original intended use, in fact. [17:18] Dr. Samantha Wright: Since some people *do* want outfit changing, though, we're working on a big machine that will do that for you. More like a wardrobe and less like an easy-and-quick-instant-fix thing. [17:19] : Eri has a built-in 3D printer. Be jelly. [17:19] Presentation: Slide 8 [17:19] t3z: Hmm could we perhaps have a Wear folder arebsque command that we could use in IfEq etc? [17:19] Dr. Samantha Wright: Not necessary; you can do it yourself with something like: remark @@attachover:~NS/default=force [17:21] Dr. Samantha Wright: The next feature is the tone marker: that's the noise you make when you talk. We originally called these 'speech markers' or, 'moans', and the terminology is inconsistent throughout the documentation, but most of the system itself sticks to 'tone' now. [17:22] Dr. Samantha Wright: The second line of the file is the only place these are read from; they can't be anywhere else. And, as it says here, depending on your gender setting and the contents of the file, you may make some fairly different noises. [17:23] Eri: Ah, bugger. I was hoping the sounds were randomly selected. I guess basing them on gender is good, too. [17:23] Dr. Samantha Wright: Most older personas were developed only with consideration for gynoids, so logically if only one marker is present, neuter and male units will default to the built-in default sounds instead. [17:24] Dr. Samantha Wright: There's definitely a lot of potential for hooking and extending this. One proposal has been to look for punctuation and to change the tone accordingly, making them real 'tone' markers. It's a neat idea, but a lot of work, and frankly a lot less informative than a single, consistent sound for each persona. [17:24] Presentation: Slide 5 [17:24] Dr. Samantha Wright: So in our example... [17:25] Dr. Samantha Wright: The neuter sound is the UUID beginning with 45, the female sound is sxd-mmm, which is built in, and the masculine sound is the UUID beginning with b3. [17:25] Presentation: Slide 9 [17:25] Dr. Samantha Wright: Okay. On to the meat: the preset messages. [17:26] Dr. Samantha Wright: Historically this was just a sequence of messages separated by pipes; the cortex read them in, and then matched them to the command names using a default dictionary. [17:26] Dr. Samantha Wright: To maintain backward compatibility, if a message *does* lack a name in the new format, it will be associated with the next unused command in the default dictionary. [17:27] Dr. Samantha Wright: This is incredibly confusing. You should not do it. [17:27] Dr. Samantha Wright: For example, if we were to add a message to our demonstration persona without a name, since the first message was actually called ".yes" instead of ".y", we'd end up defining ".y". [17:28] Dr. Samantha Wright: In general, we strongly recommend always using the 'name := message' format to make your work more legible. [17:28] Presentation: Slide 10 [17:28] Dr. Samantha Wright: But there *is* a price to this—it eats up characters, and the persona loads slightly slower. [17:29] Dr. Samantha Wright: You should be able to actually load up quite a few messages in total; there's no hardcoded limit, but every extra message increases the likelihood that speaking (any speaking at all) will cause a stack-heap collision during text processing. So... be careful with it. [17:29] Presentation: Slide 11 [17:29] Dr. Samantha Wright: The other core feature of the persona system is px_ script execution. If a px_ file is present when the persona is active—it checks every time—then it will be run by Arabesque. It has to be in user memory too. [17:30] Presentation: Slide 12 [17:30] Dr. Samantha Wright: We'll be looking at an example of a px script in a little bit. [17:30] Dr. Samantha Wright: But first, we'll need to introduce the gender system completely. [17:30] Presentation: Slide 13 [17:31] Dr. Samantha Wright: There are two ways of controlling your gender parameters, through the @gender command and through the manage > identity > gender menu. [17:31] Dr. Samantha Wright: Right now, almost all of the software in the system is designed to avoid gendered pronouns and /me actions that would be revealing of these settings, but the system actually has full access to them and can use them in all sorts of places, including scripts and personas. [17:32] Dr. Samantha Wright: In a barebones installation of Companion with no custom personas, though, you usually only notice the voice gender, since it selects your tone marker. [17:32] Presentation: Slide 14 [17:32] Dr. Samantha Wright: Here are the default gendered pronouns and how they're used. [17:32] Dr. Samantha Wright: When you select an option, or type in a custom value, these are what you're changing. [17:33] Dr. Samantha Wright: The parts of the table header row that are bold and underlined show the short form that's incorporated into the actual substitution variable name. [17:34] Dr. Samantha Wright: If you want to say "He takes his dog with him", for example, you'd put "$p_subj takes $p_pos with $p_obj ^H." in a script. [17:34] Dr. Samantha Wright: If you don't recall what ^H does, you'll want to refer back to Robots 102; that removes the space, which is required for proper substitutions to work. [17:35] Dr. Samantha Wright: Again, the physical and mental genders are importantly different. We want to make it possible for units to think they're inanimate while physically having a gender, and vice-versa. [17:35] Eri: I rather like the fact that there's a difference set for inanimate and neuter. [17:35] Dr. Samantha Wright nods. "We skipped the inclusion of a hermaphrodite set because there are a lot of variants and, honestly, they've largely fallen out of use in the last five or so years." [17:36] Presentation: Slide 15 [17:36] Dr. Samantha Wright: So here's what the persona file looks like, again. Now you can read what those orange keywords are: by default, they'd be itself and its. [17:36] t3z: Oh before I forget, you might also want to explain for newer people how to find the persona cards in prim 18. I was here for years and only learned that when I came to NS :) [17:37] Dr. Samantha Wright: Right; we covered that completely in Robots 101. The slides for it are available online. [17:37] t3z: Ah ok, sorry I missed that :) [17:37] Presentation: Slide 16 [17:37] Eri: http://support.nanite-systems.com/ [17:37] Eri: Link supplied! [17:38] Dr. Samantha Wright: Here's what a px_ script file looks like with pronouns—notice the lack of closing $ on the variable names, because the substitution works somewhat differently. [17:38] Dr. Samantha Wright: This is the p_lustful from amerish-personas, edited to remove some of the painful phrasing and have decent pronoun substitutions instead. [17:40] Dr. Samantha Wright: We talked a lot about the way variables are used in script files during the last lecture, so all that you need to worry about to read this is that program rolls a three-sided die, gets a number from 0 to 2, and executes the messages with "ifeq mm ". [17:40] Dr. Samantha Wright: Note that since these examples are all poses, they're physical pronouns rather than mental ones. [17:40] Presentation: Slide 17 [17:40] Dr. Samantha Wright: Okay. Any questions so far? As always, these slides will be posted online after we're done. [17:43] Dr. Samantha Wright: So as t3z mentioned, it's a pain in the ass to manually edit everything in your user memory every time you want to install a persona. Working on it—okay, that's one thing, but giving to someone else? Really annoying. [17:43] Presentation: Slide 18 [17:43] Dr. Samantha Wright: Fortunately, we thought of a solution to that, over a year ago, but until now, access has been pretty much limited to us. [17:44] Dr. Samantha Wright: For this next part, you'll need a copy of the SDK; I've copied the free vendor up here for easy access. [17:45] Presentation: Slide 19 [17:46] Dr. Samantha Wright: Packages are fairly simple; the __xanadu-package script reads everything out of the bundle and copies it over into the memory card. [17:46] Dr. Samantha Wright: If it's a script, then it'll transfer that too, loading it correctly with the PIN. [17:47] Dr. Samantha Wright: The actual Xanadu mechanism consists of: 1. server gives package to controller, 2. controller rezzes package (with unit's ownership flag), 3. package transfers files. [17:48] Dr. Samantha Wright: A malicious person could put all kinds of nasty things in a package that activate the moment you rez it, so be sure you trust the people you're dealing with. [17:48] Dr. Samantha Wright: Since this is all very new turf, there are a lot of security precautions we still have to put in place, like determining who the creator of a package really is. [17:48] Dr. Samantha Wright: We'll talk more about that in a second. [17:49] Dr. Samantha Wright: Alongside the package header script, you also need an uninstall script and a copy of the readme. [17:49] Presentation: Slide 20 [17:49] Dr. Samantha Wright: When you submit your package by ctrl-dragging it from your inventory into xnebula:0, make sure you put a copy of the readme on there, too. That will let people see what it's about before you put it up. [17:50] Presentation: Slide 21 [17:50] Dr. Samantha Wright: So, more about security. [17:50] DAX/2 kir0bea: Oh, wait, you're saying we can upload our own packages to the server now? I thought this was acting as its own mini-server. [17:51] Dr. Samantha Wright: Correct. The server code has problems with listing updates still. [17:51] DAX/2 kir0bea: ...Correct? The former or latter? [17:51] Dr. Samantha Wright: Former. [17:51] Dr. Samantha Wright: So I'm not releasing it yet. [17:52] Dr. Samantha Wright: Additionally, I need to add code that prevents multiple users from uploading different versions of the same package. It's no good if kir0beas-awesome-script_1.0 gets hidden behind kir0beas-awesome-script_1.1 which actually deletes everything in your user memory and rezzes a bunch of physics-enabled dildos. [17:53] Dr. Samantha Wright: So with that in mind, for now, I'll be carefully screening everything, regularly, that's on the server. [17:53] DAX/2 kir0bea: As it probably should be. [17:54] DAX/2 kir0bea: Heavily curated, that is. [17:54] Dr. Samantha Wright: And I'm going to ask you all to NOT upload the default disk prim I gave you. Make sure your packages have your *own* creator name on them. That will reduce the chance of alteration, since they can be made no-modify. [17:54] Dr. Samantha Wright: Your disks can be anything, just make sure they're phantom. [17:54] Presentation: Slide 19 [17:55] Dr. Samantha Wright: So the last file that goes in a package is the ~ script. This is how the Xanadu client knows you have the package installed. [17:55] Dr. Samantha Wright: No ~ script, and it's irremovable. This could be actually OK if you have a maintenance script that deletes itself after it runs. [17:56] Dr. Samantha Wright: The ~ script is *just* the list of filenames of stuff in the package, except for the ~ file itself and the __xanadu-package file. [17:56] Dr. Samantha Wright: For example, instructor_2.2 has this: [17:56] Dr. Samantha Wright: instructor_2.2_info instructor-core instructor-data [17:56] Dr. Samantha Wright: This is also used to remove the old version of the package before an update is installed. [17:56] Presentation: Slide 22 [17:57] Dr. Samantha Wright: Okay. That's it for tonight. Finished on time! Amazing. [17:57] Presentation: Slide 23