BunnyHugger goes up to the board and writes, "I. Doors, II. Rooms, III. MUFs for atmosphere!" BunnyHugger has to hop up on a chair whenever she wants to write on the board. Beltrami gives thumbs up and swiftly sits. Claude shuts up and watches. BunnyHugger says, "That's our lesson plan for today. Although, if anyone has homework to show off, we can do that first." J.P. steps off of the floating disk that carried him up. J.P. has arrived. BunnyHugger says, "Hi there, J.P." You say, "Well... kind of..." BunnyHugger says, "I was just saying that if anyone wanted to show off any homework assignments, we can slate that first." Beltrami waves to J.P.! BunnyHugger says, "What have you got, Claude? I know you said you'd already built a zombie in the past." Beltrami holds up a finger. Claude nodnods, and looks at Beltrami. BunnyHugger says, "OK, that's great. Claude first, then Beltrami?" Dropped. BunnyHugger says, "Aha! I think I've seen him before." BunnyHugger says, "Can you tell us how he's controlled?" Claude ta-daa! Proceeds to wind up Clanky. "I guess! He's been around for a while." Joshua drops Terrence. Clanky whirrs to life and waves, looking around cutely. You say, "Well, I have an action on me, with a little MPI on @succ." BunnyHugger says, "What's the MPI look like?" Claude quotes: {null:{force:#20219,{&arg}}} BunnyHugger says, "Yes, that's really similar to the action I have on my quick and dirty zombies. Null just tells MPI not to print anything out, which can end up being important if you're using certain MPI primitives which like to blurt whatever you just did to the room for no good reason." BunnyHugger says, "This is part of why MPI seems like some weird moon man language to me." BunnyHugger winks. You say, "I see!" BunnyHugger says, "But Joshua is going to tell everyone more about MPI after this course finishes. I've only just gotten my feet wet in it a tiny bit." Terrence blinks as he tumbles out of a yote's pocket, despite being bigger than the yote. Terrence is a young, growing foxkit. Standing about 5' tall on digigrade hindpaws, he peers out at the world with big, cute blue eyes which threaten to be overtaken by his unruly blonde headhair. The front of his torso and cheeks area nice white fluff, as is the tip of his tail. His primary coloration is a nice fox orange, and his "gloves" and "socks" are a charcoal black. He appears to be about 14 years old. The foxkit is attired in a dark grey t-shirt and camo cargo pants, both of which look well worn from days of playing outside. The pant pockets seem to have some items in them, but it's hard to tell what. He looks friendly enough, usually grinning with a tail swishing as he looks about. Carrying: Nerf Bat of Doom Joshua tells Terrence to go sit down until it's his turn. Beltrami grins. Terrence complies, and goes to sit, watching to see what Beltrami's cooked up! BunnyHugger says, "Now, last time, Joshua was saying he puts his control function on a @fail, with the philosophy that it's better not to run do-nothing.muf unnecessarily (though of course you must still link to it to avoid your action being stolen by someone else). Personally, this is just a difference of philosophy between us. I think there's no serious harm in running do-nothing, since we run programs all the darned time, like every time we use 'say' on this MUF. Probably 'pose' too for that matter." Austin says, "Yes, pose is another program." BunnyHugger says, "And because at least for beginners, it's more intuitive to run stuff on a success than on a fail." BunnyHugger says, "But, in any case, either 'works' -- it's a matter of philosophy and what you think 'best practice' is." Claude nodnods. BunnyHugger giggles, "I said 'on this MUF,' I meant 'MUCK,' but you can see how my brain went in that direction." >:) BunnyHugger says, "MUF MUF MUF YAY" Chitter pokes BunnyHugger! BunnyHugger ahems. BunnyHugger says, "Beltrami, what have you got?" Beltrami's ears wiggle and she nods...she takes the You Are Here map and sets it down in front of BunnyHugger. BunnyHugger says, "Aw, great!" Beltrami pats it...she winds her hand counterclockwise and looks shyly down. Beltrami (touch)es the You Are Here map to examine New Town. BunnyHugger says, "Right, it's your previous week's homework." Beltrami nods. BunnyHugger looks around. "Where did you set it? I don't see it." Beltrami blinks. Beltrami drops You Are Here Map. BunnyHugger says, "Ah, there it is." BunnyHugger (touch)es the You Are Here map to examine New Town. Austin (touch)es the You Are Here map to examine New Town. BunnyHugger says, "Oh, wow." The map base is half an ellipsoid, skinny like a football, with the tall end poking into the air. The surface is a powder-blue matted surface, with several silvery patches, reflectie, and inviting a touch. New Town Map +----+ +---+ +---+ +-----+ +---+ | |----------| |----------| |----------| |- - - - - | | +----+ +---+ +---+ +-----+ +---+ Newspaper 200 Beck 100 Beck New Town Under Office | St | St | Center Construction | | | Candor Allegheny Pavilion Terrace Bistro Lunastar Juice Shapeshifters Club You say, "Cool!" Beltrami touches her chin. BunnyHugger says, "I see my rowhouses!" Joshua (touch)es the You Are Here map to examine New Town. BunnyHugger says, "Now, I'd guess you'll want to lock your map when you put it in New Town so people can't pick it up and run off with it, say, on Hallowe'en night." Beltrami nods! BunnyHugger says, "When you 'touch' it, does it work by calling a {list:}?" Beltrami nods. BunnyHugger says, "Cool. I wanted to talk about {list:} a little bit today. I'd guess most folks here have used it in some fashion. It's the best way to write a description that's more than one line long." Joshua nods. BunnyHugger says, "To enter the list editor, you use 'lsedit' -- and the command syntax is: 'lsedit ='" You say, "Right!" BunnyHugger says, "Then the most basic way to call the list is with the little bit of MPI: {list:} When I'm writing something quick and dirty, I often just do: lsedit thing=desc and then @desc thing={list:desc} Of course, if you want to switch between different descs on a thing, you probably want to use something more descriptive than 'desc'. Meliora Park has 'falldesc' 'winterdesc' etc." You say, "Ooh!" BunnyHugger says, "You have to be careful though, because if something up the environment tree also has 'desc' stored on it, and you forget to actually put a 'desc' list on the item, when you look at it, you're going to see the desc of whatever's closest on the tree that has a list named that." Claude writes that down! BunnyHugger says, "It'll look up the tree for the property if it doesn't find it on the item. I've had that result in weird stuff sometimes. n.n" BunnyHugger says, "We'll talk more about the environment tree a little later, so don't worry if you don't know about that yet." Beltrami nodnods. BunnyHugger says, "Good job, Beltrami." BunnyHugger says, "OK, Joshua, you brought something, er, someone too?" Joshua nods, and scritches behind Terrence's ears. Terrence nuzzles into the scritches. BunnyHugger says, "Hi there!" Clanky wobbles over to Terrence and hugs. Joshua ruffs, "This is Terrence. He's currently a part of an ongoing plot here. I figured I'd bring him along and count him as my homework, since I fashioned him in the traditional way." Terrence hugs Clanky! BunnyHugger says, "I remember from last time that your zombie action is much more sophisticated than what Claude and I were showing. You accounted for a possible failure if someone doesn't enter an argument after the command." Skyler has teleported in. Skyler has arrived. Skyler raises his nose high in the air, sniffing, and falls backward. Skyler waves! Joshua waves BunnyHugger looks at Skyler, flummoxed. You say, "Hello!" Joshua nods, "I did, let me grab that..." Austin says, "Ah ... hi, Skyler?" Joshua {with:puppet,$kel,{if:{&arg},{force:{&puppet}, {&arg}},You must enter something for {name:{&puppet}} to do.}} Joshua ruffs, "He's registered as $kel on me, as his name was previously Kelketek'. Also part of the current plot :)" Skyler doesn't mean to interrupt! PLease go on. BunnyHugger says, "I can sort of read, or guess, at that MPI, but I don't know how to write it well yet. I'll learn that soon. n.n" Joshua nodnods. Austin says, "It's not so bad as it might look. Mostly the nested { marks make it look harder." BunnyHugger says, "All right, if no one else has homework to show today, we'll get back to building." Joshua must now idle, because his plumbing is now filling with the neighbor's waste. BunnyHugger says, "YIKES." BunnyHugger says, "Er, good luck." Austin eeps. You say, "Take care!" BunnyHugger says, "First topic is doors. Doors is just what I'm calling 'exits between two rooms.'" Claude earperks. BunnyHugger says, "As you all probably remember, an exit is really just an action that is linked to a room. So you can create and then link it the usual way, by using @action east=here and @link here=#2341 (just an example, assuming #2341 is the destination room). But, in the special case of actions linked to rooms, in other words exits, there's a simpler syntax that can be used. As I told Claude last week, it amounts to the same thing, but is more convenient for the purposes of building." BunnyHugger corrects, '@link east=#2341' that should say. BunnyHugger says, "But the easier way to do this when building rooms and doors is to use '@open'." BunnyHugger says, "If you ever need to remember this, of course, 'help @open' will tell you all the syntax." BunnyHugger says, "'@open East;e' would create an action in this room called 'East;e' but not link it to anything. The first name is the one that gets used by the obvious exits program, and the other is an alias." BunnyHugger says, "Obviously, though, you don't want an unlinked exit around, so you can do '@open east;e=#2341' and in one fell swoop, create the action, attach it to the current room, and link it to #2341." BunnyHugger says, "By the way, you can do this to link local actions to programs too. It doesn't know the difference of whether the linked thing is another room or not. It just always creates an action in the current room and links it to whatever. So you could do '@open push button=$nothing' and it would create an action in the current room called 'push button' and link it to do-nothing." BunnyHugger says, "Keep in mind that if you don't want an action or exit in a room to show up in the obvious exits list, you can @set push button=D to set it dark. That stops it from showing up. obv-exits.muf doesn't know the difference between a door and a program-running action so it'll list them all." Beltrami nods. BunnyHugger says, "The building code here on SpinDizzy says that exits should be left obvious unless there's a good reason to have them dark, like it's a maze or puzzle or something." Terrence keeps listening intently, and takes notes. BunnyHugger says, "But that's for door type exits. Actions of other kinds are often set dark because it would be silly to have them in the obvious exits list." BunnyHugger says, "OK. One last thing -- last time Joshua told you about reg names. I should note that when you use @open, you can also assign a reg name to your exit. The syntax for that is: @open East;e=#2341=eastexit would also assign the name $eastexit for your personal use, at the same time." Claude nodnods. BunnyHugger says, "Don't forget about setting @succ/@osucc/@drop/@odrop, as we talked about before. It's good building practice." BunnyHugger says, "And also, actions can be described! People forget to do this." Joshua raises a paw. BunnyHugger says, "@desc east=That direction looks misty and forboding." BunnyHugger says, "Yes?" Joshua ruffs, "How can we check to see if we've set all of the messages we should?" BunnyHugger says, "Good question!" BunnyHugger says, "There's an awesome command for that!" BunnyHugger says, "IT's called '@check'." You say, "There is?" Type @check and it will report on little missing parts of descriptions -- such as exits with no @succ message. BunnyHugger says, "Yes! I guess that's not well advertised. STand in a room you own and just enter '@check' and you'll get a whole list of what you forgot." BunnyHugger says, "It tells you what exits in the room are missing any of the success/drop messages or a description." Claude writes that down too. "What an useful invention." BunnyHugger says, "Descriptions can be very useful. A desc on an action can tell people how to use it (and often that's how it works here with globals)." BunnyHugger says, "A desc on an exit will tell people what to expect over there, and adds color to things." BunnyHugger says, "I often look at exits and am disappointed by their not having descs." BunnyHugger says, "Also, we have a global here called 'sge' that I think I've mentioned before." You say, "Indeed." BunnyHugger says, "If you can't be bothered to write a unique message for all that stuff, 'sge ' sets it all for you using a generic template." BunnyHugger says, "It stands for 'set generic exit (messages)'." You say, "And then you can customize as inspiration strikes." BunnyHugger says, "Right." Joshua nods, "I always use sge. Even if I could do more detailed exits, I feel it makes the least assumptions on the player. Seeing that it says 'You walk over to x' when you're, say, a floating balloon, might be distracting." Joshua ruffs, "Sge just says that you 'go there'" Joshua ruffs, "Or similar." BunnyHugger says, "It says 'you leave for' I think." BunnyHugger says, "I do like to override its exit descriptions sometimes, though." BunnyHugger says, "It describes exits by saying 'In that direction you see...' and giving the room desc. I don't always necessarily want that if I'm going for something atmospheric. But, it's personal taste." Joshua nodnods. BunnyHugger says, "Another last couple of things: when you open an exit to a room, obviously you must own the room you're creating the exit in. You must either own the room that you're linking to, or else it must be set L, in which case anyone can make exits to it. Most grid squares are L; they're supposed to be L by default but sometimes people turn that off because no one can stop them. >;)" BunnyHugger says, "L is Link_OK, of course." BunnyHugger says, "Remember that an unlinked exit can be chowned by anyone. Furthermore, any exit on a room you own can be @chowned by you regardless of whether it is set C." BunnyHugger says, "So if you end up owning a room that used to be someone else's, and all their exits are still on it, you can (and probably should) then @chown all those exits to yourself also." You say, "Ah, so that's why I couldn't fix an exit once. It's not automatic, I still have to @chown it." BunnyHugger says, "Right!" BunnyHugger says, "Now, I've just presented my magic @claim program to the wizcorps." Garrison steps off of the floating disk that carried her up. Garrison has arrived. You say, "Hello, Garrison!" BunnyHugger says, "No word yet on whether they'll allow it. It requires the big W flag so it's a tough sell." Garrison waves Beltrami waves to Garrison! BunnyHugger says, "But if they accept it, one thing it'll do is go through and @chown all the exits of something you're taking possession of, for you." Garrison waves back. BunnyHugger says, "Hi!" Garrison says, "Sorry I'm late, had a few rl things to get through" BunnyHugger says, "All right, that's my talk about doors. Now, of course, doors are no good without ROOMS to put 'em in." Austin says, "I don't know. There's something kind of pure about a room-less door." Austin says, "Or, a Scary Door." You say, "A door in the middle of nowhere?" BunnyHugger says, "To create a room, you use '@dig'. If you just '@dig Funhouse' you will create a room called Funhouse, and it will report to you the DBREF of the room and tell you it's been made. You can then start linking it somewhere by @open-ing exits on it. But, an important thing a lot of people don't know or understand about rooms, is that they have a 'parent'. If you examine any room you own it'll show its parent up at the top." BunnyHugger says, "Does anyone know what it means to talk about a room's 'parent'?" BunnyHugger looks at the class, smiling. Skyler nods. "I do...in a way I can /try/ to describe. ;)" Claude tilts his head. Beltrami nods? Austin says, "I do too. It's something wizards keep running up against." Joshua certainly can. BunnyHugger says, "Skyler, want to explain it?" Skyler says, "Well, the idea of a parent room is, if you @dig your own room, it will always have a parent. That parent room's properties 'pass down' to your own room. It saves you from having to set a bunch of stuff on 'every single similar room'. So like..." Skyler says, "We have an 'outdoors environment room' you can put your own rooms in, so they show the sky." Skyler says, "That." BunnyHugger says, "Right." BunnyHugger says, "Let me put it this way -- here's a fascinating metaphysical fact about the structure of the MUCK that takes a while for a new player to get used to." BunnyHugger says, "Everything in the MUCK is inside something else, with the exception of the primal room, #0." BunnyHugger says, "Did I just blow your mind?" Mel steps off of the floating disk that carried her up. Mel has arrived. You say, "Hello!" Beltrami grins. Mel waves. Beltrami waves to Mel! Joshua waves to mel. Joshua Mel, even BunnyHugger says, "When the MUCK is brand new and just installed, it has two objects in it, #0 and #1, the first room and the first player ("God")." Mel cows Mel! Her spots become cowy again. Austin says, "The mind-blowing thing is the primal room is 'Kansas'." Claude grins. BunnyHugger says, "Yes, on this MUCK it's "Kansas" so if you see something that says its origin is 'Kansas' you know it's something on Room Zero." BunnyHugger says, "On my personal MUCK it's 'The Noumenon.'" Mel drawls, "Instead of, say, Kolob?" You say, "More interestingly, the parent room is by default the one you were in when you gave the @dig command." BunnyHugger says, "That's right, Claude, I was going to get to that. Exactly so." Mel drawls, "The Noumenon. Doot doo, do do do." Joshua ruffs, "It is (theoretically, I've never done it) possible to fragment a MUCK and have a second root room." BunnyHugger says, "Wow, that's weird." BunnyHugger says, "Actually let me correct that slightly Claude -- it'll default to the first room that's set to be an environment room, from the room you @dig from. For a lot of people, that'll be the Outdoors Environment Room or whatever." BunnyHugger says, "A lot of times, in other words, it'll be 'whatever the parent of the room you just dug from is.'" Joshua ruffs, "It would be easier to do it in ProtoMUCK, as ProtoMUCK has the ability to change database entries directly. You would do it by setting a room's location to #-1. Then you would fix the 'next' attribute from its previous parent room to the item that was its 'next' field, and then set the new root's next field to #-1" You say, "Oh, all right. *scribble scribble*" BunnyHugger says, "But back to structure: normally, anyway, everything in the MUCK is either inside Room Zero or inside something that's inside something that's.... inside Room Zero. Except, of course, Zero itself." Joshua ruffs, "If you don't have that power, you can edit the DB by paw." BunnyHugger says, "This includes rooms: every room is 'inside' another room, which is ultimately what is meant by 'parent'. The parent is really the room your room is 'in.' If you examine a parent room, you'll see all the rooms that are its children listed in its 'contents'! Weird stuff!" BunnyHugger says, "And, a room will 'inherit' things from not just its parent, but its grandparent (the room its parent is in), great-grandparent, etc. Ultimately the big grandparent of all rooms is #0. This is why we can use global actions that are actually attached to #0. 'sing' for instance is a fun little global we have. 'Sing' is actually an action attached to #0." BunnyHugger says, "Likewise, the global exits we have, such as 'rose', are exits that are on #0, so every room has access to them." Claude nodnods. BunnyHugger says, "So let's say you have a forest area, and you want to make a shortcut that will always take people in the forest to a campfire in the middle of it, no matter where in the forest they are. What you would want to do is create your own environment room, call it something that will make sense to you like 'Claude's Forest Environment Room', and have it be the parent of all of your forest. Then you could put an exit on the environment room called 'campfire' that would always take forest hikers to the fire." Claude writes that down too. BunnyHugger says, "You could also have local commands like a 'map' that always shows people in the forest a map of it. All that good stuff, you could put on your environment room!" BunnyHugger says, "Now, MUF programs can take advantage of what's called the 'environment tree' too. For instance, I have a program I've written elsemuck that serves as a 'smell' global, and if you smell a room that doesn't have a local smell property set, it goes up the environment tree until it finds one, so you could have a whole area smell the same by setting a prop on the environment room. Whether a program does this or not will depend on the programmer." BunnyHugger says, "And this brings back the discussion of using the list editor to make descriptions and stuff, earlier." Beltrami nods? BunnyHugger says, "Because {list:} will, if not specified otherwise, find that list on whatever's the 'closest' environment room where a list of that name exists. That's why if you set {list:desc} on something but forget to actually edit a desc onto it, looking at that item is going to show the closest thing in the tree that DOES have a list called 'desc' on it." BunnyHugger says, "This can be a useful feature!" BunnyHugger says, "In the apartments I just built, all the apartments have a default description that the new owner can change." You say, "So that's how it's done." BunnyHugger says, "I put the description in a list on the environment room that I created for the apartment complex, so when the rooms are created by the apartment manager program, it puts {list:newapartmentdesc} or something like that as the description, and that list is actually on the environment room." BunnyHugger says, "Now, to allow others to use your room as an environment room, you can flag it A, 'Abode.'" Austin says, "Couldn't really have a large, thematically linked area without environment room lists, really." You say, "Oh? I thought abode was just so you can make your home in somebody's room." J.P. has disconnected. BunnyHugger says, "An environment room also has to be set L." BunnyHugger says, "This is another example of contextual flags, which comes up a lot. n.n" You say, "Everything has a context. :)" BunnyHugger says, "But as Austin says, environment rooms allow for large areas to be built more easily. When I first went to build Edgeworld Park, I was a doofus and didn't make an environment room for it, which I later realized was important." BunnyHugger says, "Partly because Jaxen bopped me on the head about it." Joshua ruffs, "Context is the greatest bane of anyone who has to try to understand the MUCK source code -.-" BunnyHugger says, "Now, if you do create one, you'll want to make sure you choose *its* parent wisely. The parent of my row houses environment room is the MUCK's environment room called 'Indoors'." BunnyHugger says, "Because 'Outdoors' shows the weather and sky and I don't want that in a row house's interior!" You say, "Right!" [OOC] Claude says, "Or Perl, Joshua. :P" BunnyHugger says, "So who knows HOW to set the parent of a room, after it's already been built? If you want to change its current parent?" [OOC] Joshua cries. Claude raises a paw. BunnyHugger says, "Claude?" Austin grins. You say, "There is an @parent command." Austin says, "There is?" Joshua ruffs, "There is?" BunnyHugger says, "There is?!" BunnyHugger looks dumbfounded. I don't see that here. Joshua ruffs, "I don't see it" ?FILE NOT FOUND ERROR (Type "help" or "globals" for help.) BunnyHugger says, "Me either. I'm not sure we have that here!" Joshua ruffs, "Is that a MUX thing?" You say, "Huh... I'm sure it's called *something*..." BunnyHugger says, "Well, there may be global ways that some MUCKs do it..." Joshua ruffs, "I promise you the answer is much more obtuse." Joshua :) Austin says, "I'd be a good idea to have one, sure." BunnyHugger says, "But the basic way to do it on MUCK is to teleport. Because after all, the parent of a room is the room it's IN." You say, "Because I remember not being able to move an exit between rooms without it." You say, "Ah, right! Teleport!" BunnyHugger says, "So @tel <# of room>=<# of parent>" Claude facepaws. "One day, you'd think I'll remember it..." BunnyHugger says, "And this goes for the environment rooms too. To put my Edgeworld Park Outdoor Environment Room into the Outdoor Environment Room, I teleported it there, so that rooms in Edgeworld would have the Outdoor Environment Room as their 'grandparent.'" BunnyHugger says, "By the way, the outdoor/indoor basic environment rooms, which are the grandparents of most rooms here on SD, have the reg names '$outdoors' and '$indoors'." BunnyHugger says, "So if you want your stuff to show the sky, use $outdoors. If you don't, use $indoors. >:) And $outdoors/$indoors have #0 as their own parent, so inherit all the stuff that's global across the MUCK." You say, "Do we have other general-purpose environment rooms?" BunnyHugger says, "I know there's a Sky Environment Room for the sky grid... I'm not sure what others there are. Do you know of any more, Austin or Skyler?" BunnyHugger says, "Oh, there are ones for the different 'regions' of SD." Joshua ruffs, "@reg will give you a listing of all sorts of crazy things you could play with." BunnyHugger says, "E.g. 'New Territories Environment Room'. They determine which chaotic scenes get shown in unclaimed rooms." BunnyHugger says, "Those scenes are called with MPI that uses lists stored on the environment room." Joshua ruffs, "We have leash?" Joshua squints at it. BunnyHugger hehs. BunnyHugger says, "Now, as mentioned earlier, one thing that often drives new players crazy, is that when you @dig a room, its parent defaults to the first environment room up the tree from the room you dug from, so it's generally going to have the same parent as the room you were standing in when you entered @dig." Austin says, "I'm not positive. Unfortunately we don't have a central registry and it's not like there's a distinctive marker flag. Most people list environment rooms with 'Environment Room' in the name, though. THere's 74 of those, but a lot of them are local in intent." BunnyHugger says, "But you can override that, and often should. One thing that frustrates people who don't know about parents, is that when they dig their house from their grid square, it ends up showing the weather indoors." Austin huhs. Yeah, we do have leash. Joshua ruffs, "I think editroom has some built in envrionment room manager thing. But I'm not sure how all that works." Joshua ruffs, "I doubt it works properly with M1." Joshua ruffs, "Not that..." Joshua ruffs, "I would know how it works..." Joshua ruffs, "Or anything..." BunnyHugger says, "So! @dig Funhouse=$edgeworldenv (provided I have reg'd my room with that name) or @dig Funhouse= would dig the room AND set its immediate parent at the same time! Yay!" Claude scribbles that! BunnyHugger says, "Of course, once I have the first room in my area with that parent, digging the rest of them will also default to it, provided I'm standing in the newly parented room when I do it. >:D" BunnyHugger says, "And it's been set A." BunnyHugger says, "Finally, as usual, you can set the regname when you @dig a room. So, to dig, set the parent, and set the regname at the same time: @dig Funhouse=$edgeworldenv=funhouse would dig it, set its environment room to the Edgeworld Environment, and give it the regname $funhouse." BunnyHugger bounces. Joshua yips! BunnyHugger says, "I advise you all to make an environment room whenever you build a large area, even if you don't have an idea of what to put on it yet." BunnyHugger says, "It'll come in handy later." Claude nods. Hmm. Joshua agreeeez. BunnyHugger says, "And that's my talk about building Rooms! You all now know pretty much all the basics, and next time I'm just going to talk to you a little bit about using the public MUF library for special effects. Next time should be our last class. I'll be giving you a practical final exam at that time to take home, and then we'll meet once more to do the written exam, but that might be at a different time than usual since the Sunday after we'll be at Furfright." Beltrami nods. BunnyHugger says, "I can just kind of make appointments with everyone who wants to take it, probably, if people can't make the rescheduled time I choose." Claude yay! BunnyHugger says, "And those who pass both will receive a certificate of building competence and be ready to move on to MPI class." Joshua ruffs, "Right, and I should start on the curriculum on that. x.x" Mel has disconnected. BunnyHugger says, "I don't have any specific homework for next time, except to finish any of the previous assignments you haven't gotten to yet. >:)" Beltrami nods. BunnyHugger says, "And class is dismissed!"