ExploreNet User's Manual

Version 3.2e

Charles E. Hughes, J. Michael Moshell

Computer Science Department and

Institute for Simulation and Training

University of Central Florida

Document JMM95.17

28 June 1995

EXECUTIVE SUMMARY

ExploreNet is an experimental general-purpose two dimensional graphics-based communications environment. ExploreNet has special features to support simulation-based role-playing games for educational purposes, and cooperative learning of many kinds. The basic philosophy of ExploreNet's creators was to facilitate the creation of cartoon-like networked "virtual worlds" in which the participants are visible to each other as animated figures. ExploreNet was inspired by LucasArts' Habitat system (Morningstar 91.) Educational uses of ExploreNet are proposed and explored in (Moshell 94.) This document focuses on how to set up, use and extend ExploreNet.

The design goals are

1. To make ExploreNet simple enough that it can be useful and entertaining when used by sixth graders (or even adults) within a minute of first encountering it. This goal has largely been achieved.

2. To enable ExploreNet to operate on 486 PCs equipped with Microsoft Windows and Internet addresses. Ultimately we'd like to support a wider variety of platforms, but in June 1995 this is where we are; and

3. Ultimately, to make ExploreNet powerful enough to serve as its own authoring environment, in the spirit of MUSEs[1]. This is not true for the current version.

ExploreNet software and this manual are Copyright (c) 1995 by the University of Central Florida. All rights reserved. We expect to make ExploreNet available without charge for educational use in July of 1995, but will reserve rights to the software to prevent its inappropriate use.

Contents

0. The Nature of this Document

1. Tutorial Introduction to ExploreNet

2. A Network Session

3. Constructing a New World

4. Constructing Behaviors

References

APPENDIX A: Installing ExploreNet

APPENDIX B: Preparing Your Site for Networking ExploreNet

APPENDIX C: Editing Text with the NotePad Text Editor

APPENDIX D: Known Bugs in the Software

APPENDIX E: Error Messages

APPENDIX F: Glossary and Index

APPENDIX G: Behaviors, Action Verbs and Predicates

This project is sponsored by the University of Central Florida. Additional support has been provided by AT&T, AutoDesk, Lotus Development Corp., MicroSoft and Nanyang Technological University of Singapore, for which the authors are most grateful.

0. The Nature of this Document

This manual has four main parts and a collection of Appendices. The first part introduces the user to ExploreNet and guides the user through a simple non-networked scenario. Users should be able to carry out the actions described in this section without any prior computer experience, although setting up ExploreNet on your computer does require some know-how. Appendix A assists in that set-up process.

Part two explains how to join and participate in a networked session with two to four players. This can be done "long distance" in conjunction with a server and players elsewhere, or locally by setting up your own server. Appendix B describes how to set up your computer for accessing ExploreNet remotely. It also explains how to set up your own server so as to conduct networked sessions without accessing UCF. This setup process requires some knowledge of the Internet and networking.

The third part describes how to construct and extend scenarios. Because ExploreNet is a prototype and is far from a buttoned-up, bullet-proof system, a fair amount of computer skill is required for this authoring task. Version 3 does not contain a full suite of built-in authoring tools. It is necessary to use other resources such as Autodesk Animator Pro or Aldus Photoshop to construct graphical actors (called "characters"), props and scenes. One's favorite text editor is used to modify the script files which describe the scenes that make up a world, and to describe the behaviors of characters and props. Appendix C briefly describes how text is edited with the NotePad editor of Microsoft Windows, though any text editor can be used if it can read and write raw text files.

The fourth part is a reference section which describes each of the presently available action classes which can be specified for the characters and props, and also specifies the structure of macro sequences - that is, behaviors you can construct for yourself.

Additional appendices provide lists of known bugs and error messages. Finally, a Glossary and Index assist the reader in figuring out what it all means.

1. A Tutorial Introduction to ExploreNet

The initial demo scenario only provides two characters, and is designed for play by two people. If you're alone, then you will alternate between controlling one, then the other character in one window. This simple introductory scenario is named Zora's World; because DOS only supports 8-letter file names, we abbreviate this as ZWORLD. In this world, you play the role of a nine year old African-American girl named Zora. You explore a world consisting of three scenes; meet another character named Jake, and learn how characters and props work.

'Zora' is actually Zora Neale Hurston, an African-American writer from Eatonville, Florida. Stories about her childhood, and African-American folklore she collected, inspired the first virtual worlds that were built in ExploreNet.

We assume you have ExploreNet installed and ready to run. If not, see Appendix A.

To start ExploreNet on a machine where it's installed:

Run Windows if it's not already running.

Double click the Smalltalk/V Windows icon.

Inside this window you will see a big red V with the words "ExploreNet V3.2a" underneath. (It may say "3.2b" or "3.2c" etc, as versions are developed.) You will see other things, too; ignore them. There might be several red V's; just choose the one that says 3.2 (ignore "client" and "server" versions.)

Double click on the big red 'V'.

It will take about 40 seconds for ExploreNet to load into memory. You will come to a bright green screen, across the top of which are listed five options with "choose-one" buttons:

* No Network * Run History * Network Server * Network Client * Quit

The text below the buttons says" Select running mode by clicking mouse on appropriate button."

For this demonstration, you should click on the "No Network" button.

The green screen disappears for a few seconds. Two possible things could then happen:

- If there is only one world in the WORLDS folder, you will immediately be taken to that world.

- If there are more than one world in the WORLDS folder, you will then see a series of small square pictures with captions. One of them says ZWORLD. The picture over ZWORLD is of a brown dog. You can click on the labels under the pictures to get a description of what's in that world, or click on the pictures to start up the respective worlds.

Click on the dog. This is a signal to load up the ZWORLD demonstration and start it.

It takes perhaps 60 seconds to load the files for ZWORLD on a typical 486. A screen will show you that the scenes, characters and props are loading[2]. Below each scene's name will appear the names of the props being loaded into that scene. At the end of the list, the characters Zora and Jake are loaded.

You should now see a house with a porch, and a small girl (Zora) Across the top of the screen you will see small buttons labelled QUIT, HOUSE, RESTART, REPLAY, and DIALOG, and larger buttons labelled ZORA and JAKE. The meanings of these buttons:

In the left group:

QUIT takes you out of the current virtual world (ZWORLD), back to the green button menu where you can choose whether to enter a networked session, another stand-alone session, or quit altogether.

HOUSE provides background information about this scene. This button always displays the name of the current scene, and provides information about the scene if you click the button.

RESTART resets characters to their initial positions and conditions, and clears out all the stored dialog.

DIALOG provides a script of everything that anyone's "said" (typed) up to this point.

REPLAY displays each action of every character that was initiated on this workstation or which happened while this workstation was watching. (Obviously it won't replay things that weren't seen here.) Pauses, very common in actual interaction, are not reproduced in their full duration; in fact, not at all.

ZORA. Clicking this button selects the Zora character as the one to which your commands will be directed. As the first character, she's initially selected.

JAKE selects Jake the dog. Right now you can't see him, but if you click on his button, the screen display will change to show his current scene. He's sitting in a scene that contains a puddle.

Try that now. Click on JAKE's button. You should see a small brown dog in a blue pond. We'll play with him later. For now, click on ZORA's button again to return to the scene with the red house.

A scene consists of five kinds of things:

* The background; in this case, a red house for Zora and a blue pond for Jake, the dog.

* characters - people, critters, etc. that can serve as symbols for the players in the game ... e. g. Zora and Jake.

* props - e. g. a lantern and other things, to be seen shortly.

* portals (exits) - they're not visible. We'll lead you to them.

* regions - these are rectangular areas, also not visible, where characters are permitted to go. We're not actually using regions right now, but they're useful in structuring more complex story environments.

The background is just a flat picture. It was painted with a paint program.

The Mouse. Most PC mice have two buttons; a few have three. In ExploreNet, all the buttons do the same thing, so we'll just refer to the button from now on.

* Characters (live characters in the story, controlled by your computer)

* Ghosts (characters being controlled by another computer on the net)

* Props (like stage-properties: things to use in the story)

* Exits (ways to leave this scene for some other scene)

The cursor will change into a small symbol, depending on what you're pointing at. A small box with a P in it stands for "Prop"; a small human means you're pointing at a character in the story. A footprint means you've found an exit to another scene.

Characters are symbols for human players. (The symbols may look like animals, aliens, or anything you wish to "inhabit.") Choose any point on the screen, point at it with the cursor and click the mouse button; the character which you are currently controlling will move to that point in the scene (specifically, you point where you want the character's FEET to be.) Right now the active character is Zora.

Try this now. Click on the door of the house. Zora walks there. She's a bit large for the doorway; but who's perfect?

Point at Zora and click. The menu will list a number of behaviors that Zora can exhibit, including:

Identify

About Face

Kneel Down

Choose "Identify" with a click. The resulting message box tells you a little about the character Zora.

You can also open the action menu of a character by clicking on the character's control button (at the top of the screen).

Scene information is always available. Click on the button at the top of the screen that is marked INFO and learn something about this first scene. This INFO option can be used by the story designer to give hints, or background information of any kind. In this demo it's a straightforward guide through the (very simple) maze.

Let's take that hint. Click on the far left edge of the path displayed on the screen. Zora will walk right off the screen, and a new scene will come into view. She just used a "portal" or an exit, which we'll discuss later.

In this new scene, there's a forked road that leads straight across to the left side. You will see a lantern a bit below Zora's location. It's a prop. Let's explore this lantern.

Props can have any number of behaviors. The simple ones in this world don't have very many behaviors, though. If you Click on this lantern, you will see a list of things it can do. It's pretty boring: all it can do right now is give information about itself. If, however, Zora comes close enough to the lamp (move her closer if necessary, so that her feet are right above the lantern) a second prop-behavior is added to the lamp's menu: "PICK UP".

Select "pick up" from the lamp's menu with a click. The lantern disappears.

Now select Zora's menu with a click. One of her behavioral options is now "Drop Lantern", which if selected, will cause Zora to drop the lantern back into the scene.

Zora's Journey Continues. We're back in the green path scene.

Have Zora walkto the left side of the screen.

An invisible portal there leads to the dog/puddle scene, and we find our friend Jake. If someone else were playing the 'Jake' role on another computer, he would have seen Zora arrive on the left side of his screen. Zora is now going to speak to the dog.

Just start typing a greeting: "Hello, dog!"

At the top of the screen above Zora, the text "Hello, dog!" appears. This text would simultaneously appear on all the computers sharing this world, if they happened to be looking at this screen. Let's now pretend we're playing Jake the dog.

Click on Jake's button to direct actions to him. You can see Zora's words at the top of the screen. Reply to her by pressing the spacebar, then typing "Hello, human. Did you bring lunch?"

More Prop Actions. In this scene, we also see a flower. It's happy to see you there, and will reveal this fact if someone tells it to.

Click on the flower, then select SMILE. You will see the flower change her state to a smiling face. Look at her menu again with a click, and you will see the options BE NORMAL and WEEP. Try either of them.

You've now seen most (but not all) of ExploreNet's main features demonstrated. The variety of behaviors of characters and props is endless, because they're built into each new world by the world's designers. To become a world designer, see section 3 below. Meanwhile, if you are ready to try using ExploreNet on a network, there's always Section 2.

2. A Network Session

This section assumes that your system is set up and ready to work in the networked mode, either locally within your lab or long-distance via the server at the University of Central Florida. To set up for either circumstance, see Appendix B.

If you are not running ExploreNet, start it up by clicking on the ExploreNet icon in the V32WIN folder. If you are running a stand-alone session, go to the "running mode" screen by Clicking the QUIT button. Now select the "Network Client" option.

THE FOLLOWING SECTION IS UNDER REVISION AND MAY NOT CONFORM TO TODAY'S EXPLORENET BEHAVIOR.

Running a Local Session of ExploreNet. Start ExploreNet running on the server machine. Make sure that all clients and the server have the same EXPLORE.NET files in place. Select the option "Run Server" from the green menu. Select the world you want to support. In our tutorial example, we are using ZWORLD. We assume you're running just one server. If not, see the following subsection.

The server will display a white screen that invites you to select the characters to be controlled by this station. Above the screen are buttons which correspond to each character. These are to be used to choose any characters which the server will control.

Now, notify anyone who is to use a client to start their ExploreNet clients by going to the green menu (Quit from any active ExploreNet sessions to get to this menu, or start ExploreNet if it's not running). Have each select the "Run Client" option.

Clients show the same screen as the server. Each client can choose one or more characters to control, except that the server has to have at least one. If its operator hasn't chosen a character when one is left, the server will automatically choose the last one. If a client has gotten no characters by the time the scenario runs, the client returns to the green screen.

As soon as all the characters are chosen by either clients or the server, the world session begins. The white transcript screen will show each scene, prop and character's name as it is loaded. Once all the world's components are loaded, the world begins to operate as described in Section 1 of this manual.

Any client can quit the world by simply clicking on the QUIT button. When this happens, that server's character doesn't do anything more (unless requested by the other players through the character's second-person pop-up action menu.) When the server operator clicks on the QUIT button, the session is over and all clients automatically quit.

Single vs. Multiple Servers. If two or more servers' IP addresses are provided in the Explore.cfg file (see Appendix B), the client application will be given a choice of servers. Each server's description will include its IP address and the name of the world it's currently running. Only those worlds which have corresponding world-files available on the client will be offered. The descriptions are in the green screen's descriptive list. A menu also appears, listing the IP addresses. Choose the one you want to join.

Why didn't we list the worlds, instead of the addresses, in this menu? Well, there may be multiple servers running copies of the same world. We need a more friendly nomenclature than IP addresses, but haven't got it yet.

Running a long-distance Session of ExploreNet. At this early phase of experimentation, we recommend that a phone call be made to the operator of the server to make sure everything is ready. The number at UCF's Digital Media Lab is 407 823 6532. Your collaborator at UCF will tell you when the server is operating and ExploreNet is running, and which world has been selected for use by the server. You can then start your client(s) as described above.

Technically there is no difference between a long distance and an in-lab session, since IP addresses are being used in either case. It's just harder to know if the server is ready, etc. If you try to run a client and the server isn't ready, the client reports that it didn't find a willing server.

3. Constructing a New World

Plug-Ins. We use a handy shareware accessory called Plug-Ins, from Plannet Crafters. This provides a little icon just to the right of the put-away box in a Window, which provides instant access to tools. You can put ExploreNet in this list, and you can get at NotePad and your graphics tools via the plug-in control, even in the midst of an ExploreNet session. ExploreNet won't actually pick up the results of any changes you make until you go back out to the green screen and start another session. That still saves you the time required to re-start the ExploreNet software.

See "Plug-Ins" in the Glossary for addresses and contact information.

Tools. It is convenient to use NotePad (a built-in Windows accessory) for text editing. For quick guidance on how to do this, see Appendix C. We expect that you will use Windows' File Manager for duplicating, renaming and deleting files.

We recommend that you begin by modifying some of the existing files, such as ZWORLD, by slightly changing some behaviors, substituting your own .BMP files, etc. Once you master the basics, you can then get adventurous and build your own worlds.

Creating a background can be done with almost any PC paintbox program that is capable of producing a .bmp (bitmap) file in indexed 8-bit .BMP mode. The background scene should be 640 by 400 pixels and should use the ExploreNet Custom palette. In PhotoShop, this palette can be constructed by taking the System palette, setting the first color (upper leftmost box) to RGB=(0,0,0) and the last color (lower right box) to RGB=(255,255,255). Or, you can 'lift' the standard palette from any ExploreNet scene or object.

Creating objects (props and characters) can also be done with the above tools. The principal constraints are two:

a) Objects should be fairly small, so that they don't overwhelm the scene in which they're acting. Standing human figures should be 144 (high) by approximately 80 (wide) pixels (the exact width depends on the proportions of the character.). Animal characters should be about 72 pixels tall and as wide as needed, proportionately. Props can be any size that is appropriate for humans and animals at the above scale.

b) Objects must be drawn with BLACK backgrounds, so that they will animate properly and not bring along a rectangular surround with them. In particular the background must be of the black we just added to the palette; namely (0,0,0).

Animation Sequences. For both characters and props, you can store a sequence of slightly different poses to achieve animation. For Zora, we have ZORA1.BMP up through ZORA8.BMP devoted to walking, and ZORA9..17 devoted to kneeling. In the World files (extension .WLD) described below you will see how the walking poses are distinguished from others. When a character is initially loaded, it is assumed to be facing to the right. If you subsequently fly it toward the left, the bitmap is automatically reversed so that the character always flies forward.

World files. Figure 1 (at the end of this Manual) is a "road map" to the types of files that describe an ExploreNet world. There are four subdirectories of the EXPLORE.NET directory. The three relevant ones are called OBJECTS, SCENES and WORLDS. We begin with the WORLDS directory, and work our way outward.

The overall structure of a world is stored in a file in the directory C:\EXPLORE.NET\WORLDS. Our example is called ZWORLD.WLD. You can examine and modify it by using the Smalltalk Class Hierarchy Browser File/Open command. "ZWORLD.WLD" looks like this:

ZWORLD.WLD

:scenes in the two-actor demo "ZWORLD"

house pathway puddle

:character pose-counts, and initial positions

zora 8+ 9 100 800 800 house

:Zora has 8 walking poses and 9 others (kneeling)

jake 8 40 800 800 puddle

: -- we see that Jake doesn't appear until the puddle scene.

The lines of text beginning with a colon are comments. The lines in between the comments carry the actual description of the world. The characters are first listed, then their pose-count and initial positions are described. In the case of a character which doesn't make its initial appearance in the first scene, its scene assignment is stated in the character's descriptive line.

Seems reasonable, eh? The scenes are stored in subdirectory named EXPLORE.NET\SCENES, the characters and props are stored in a directory named EXPLORE.NET\OBJECTS.

The data structures cited in the ZWORLD.WLD file shows x, y and z locations, but Explorenet is a 2d system. In fact we're using a "Chinese perspective" trick; motion in the z direction (into the screen) is represented in the display by increasing the object's vertical position in the image. For initialization purposes, we just set z equal to the y value. We haven't yet developed user-driven methods for moving in and out along the z-axis. We'll shortly encounter some uses for the z-coordinate, when placing props for maximum effectiveness.

Now let's see, what information is missing? Aha, props and portals!

In fact, information about props and portals' locations is stored with each scene's descriptive file. So let's go look at one of those. When we open C:\EXPLORE.NET\SCENES, we see the following (among other things):

pathway.bmp <-- the bitmap image of the pathway scene

pathway.inf <--- the file describing the "information" display

pathway.prp <-- the file describing the props for this scene

pathway.xit <-- the file describing the exits for this scene

Here's the file for "pathway.prp."

:prop, number of poses, and its location (x y z)

lantern 1 400 750 750

tree 8 700 600 600

It says that there are 2 props in this scene; the first one is named 'lantern', has 1 pose, and is located at 400, 750, 750 in virtual space. The tree has 8 poses because it can be animated.

A neat trick. What if you want TWO trees? Well, you just give them two names, such as leftOak and rightOak, and you do the following:

:prop, number of poses, and its location (x y z)

leftOak (tree) 8 300 600 600

rightOak (tree) 8 700 600 600

This takes the files for the image and behavior of a tree from the disk files named 'tree', but it makes two copies of them in memory. One copy is called leftOak and another is called rightOak. (Actually it's more complicated than that but you can just imagine two copies of everything.) These two trees will have the same behaviors and user-defined actions, in the files named tree.beh and tree.act. If you did provide a file named leftOak.beh, it would replace the "generic" tree behavior with specific behavior for the leftOak.

This technique of using a (filename) as a source for information about an object can also be used for scenes. In the File Structures illustration at the end of this manual, for instance, you will see that the scene-defining line of the ZWORLD.WLD file looks like

house (redhouse) pathway;

puddle (meadow)

Which means that the 'house' scene is getting its information from the 'redhouse' scene files; the 'pathway' scene is getting its information from 'pathway' files, and the puddle gets its info from the meadow files.

Action Regions. In order to prevent characters from getting into parts of the scene that don't make sense, we can use region files such as the following:

PATHWAY.RGN

:upper left corner; width; height of the only region in the Pathway scene

0 300 1000 700

The coordinate system for an ExploreNet scene, by the way, has the origin in the upper left corner of the screen; 'x' is to the right and 'y' is downward. Both start at 0 (origin) and range up to 999 at the screen's edges farthest from the origin.

This region begins at (0,300); that is, left-justified and 300 units (30%) of the way down from the top to the bottom. Its width is 1000, i. e. the full screen, and its height is 700, i. e. the 70% of the screen remaining after you exclude the top 30% which is the sky. None of this world's characters will be allowed into the sky.

In later versions of ExploreNet we may allow different characters to go to different regions; presently they all follow the same rules. If there were multiple regions, a character can walk about only within the overlapping group of regions in which it finds itself when arriving through a portal. In fact, in version 3, any single movement must begin and end in the same region. For this reason we usually just use one big rectangular region at the present.

There is a default action region in each scene which prevents characters from destroying the dialog text at the top of the screen. We generally don't use regions very in scenarios these days, but they're available.

Exits. Let's see how we can get out of the scene named 'house'. The file 'house.xit' is structured as follows.

:condition for passing through the portal (''ALWAYS'=nothing stops you)

ALWAYS

:which scene do you go to?

pathway

:where do you emerge in that scene (x, y)?

900 500

:upper left (x,y) and (width, height) of the exit in pixels:

0 0 100 1000

:consequences of passing through the portal

NONE

This file's successive lines tell us this story:

- there is only one exit from the scene "House".

- It is always active (no conditions are imposed.)

- It leads to the scene "pathway".

- Your character emerges in "pathway" at x=900, y=500 and the same z position that it had in the "house" scene. If you had only mentioned one number, it would be taken as x and the y value would be inherited from the character's location in the previous scene.

- the exit's upper left corner is located at (0,0), which is the lower left corner of the screen. It is 100 pixels wide and 1000 pixels tall.

- the condition N/A means not-applicable; there is no condition. If your movement ends within the portal, you go to the new scene.

- the consequences. N/A means that no attribute was set when you went through the portal. Attributes are explained in section 4 below.

Constructing Regions and Exits. A special behavior called 'cursor' is available. When you include the word 'cursor' in an object's behavior-file, the option "Tell Where" appears in the Click menu. This option opens a window which reports the current position (x,y) of the bottom center of the character or prop. This can be used to probe around and find the most useful locations for exits, regions, props etc. Then you go and modify the .prp (prop), .rgn (region) or .xit (exit) files associated with the scene.

Also reported are "Extent from Old", which helps to determine the third and fourth numbers in an exit or region. These numbers are relative displacements from the last place you used this feature, which presumably would have been the upper left corner of the exit or region you wish to create.

We also provide an object named Locator which can be used as a cursor character for these purposes. Locator looks like this:

Props and Characters. The only essential differences between props and characters are these:

1) A character may own a window. This window may be on a separate computer or may be a shared window on a single machine. In this case, the character owns the window only if it is the most recently selected character in that window.

2) A character obeys certain commands only when they are sent to it from its own window (and presumably from its 'actor', the human being playing the role represented by the character. Props accept commands from anyone.

Characters and props are both ExploreNet Objects, and any comments henceforth referring to objects are intended both for characters and props.

The behavior of an object is described in a Behavior file, such as TREE.BEH. It's one of our simplest kinds of files, because all it contains is a list of the built-in behavior classes to which this object belongs.

:list of actions

possession turner

This means that, in the action menu of the tree, there will appear two options due to these two classes:

PICK UP

ABOUT FACE

The 'pick up' command only becomes visible when a character is close to the object. The 'about face' command allows the tree to 'face' left and right (which is pretty useless, given the current drawings of the tree.)

The available behaviors are listed in Appendix G.

4. Constructing Actions (User-defined Behaviors)

We expect and hope that the techniques described in Section 3 above will be comprehensible to world-builders who are not programmers. The use of pre-defined behaviors in a simple list of desired behaviors should not be too challenging a concept. However, with this method, the repertoire of possible actions is pretty much limited to the behaviors provided with a given release of ExploreNet.

Two kinds of more complex behaviors can be constructed by world-builders. Questions and answers can be provided by special props, which often appear in the guise of 'autonomous characters' (in D&D terminology, 'non-player characters', NPC.) Compound series of behaviors ("macros") can also be constructed from built-in primitive behaviors. We discuss these two capabilities in the two following sections.

Constructing Actions

For a world-builder to create more complex behaviors without recourse to the tool-builders, it was necessary to define a kind of miniature programming language. We refer to behaviors which the user can define as 'actions'. Before we can explain the structure of macros, we must introduce the notion of attributes.

Attributes. An attribute in ExploreNet is a simple integer variable, which 'belongs' to an object (character or prop.) An attribute can be interpreted as describing part of the state of a prop or character (such as having learned something or acquired a capability.) Attributes are motivated by a similar idea in Dungeons and Dragons, in which properties of players such as courage, strength or wisdom are kept as scores, and incremented and decremented during the game. Attributes in ExploreNet are declared, incremented, decremented, tested, reset and deleted in a very simple fashion.

Attributes are created and given an initial value of 1 by simply mentioning their names. The places where this can occur are

1. In the 'consequences' portion of an exit.

2. In the 'consequences' portion of a user-defined behavior, the same situation applies for the creation of new attributes.

3. In the creation of question-asking and answer-giving autonomous objects, attributes are also used. These uses will be discussed in the section of the manual concerning those capabilites.

The things that can happen to an attribute are each mediated by a one-character symbol, as follows. We use the attribute "strong" as an example.

~strong

If the attribute 'strong' has a nonzero value, this command sets the value to zero (false). Thus the object is now regarded as not being strong.

+strong

This increments the value of the 'strong' attribute by 1. If this attribute was zero or nonexistent, a new attribute is created and given a value of 1.

-strong

This decrements the value of the 'strong' attribute by 1.

strong

This forces the attribute's value to 1, no matter how large it is.

In turn, when attributes appear in conditions, they can appear in several forms.

strong

This means that if the attribute 'strong' has value of 1 or greater, then the conditional action in question occurs.

~strong

This means that the conditional action only occurs if the attribute is not present, or has zero value.

Attributes are always referred to in an attribute predicate, which looks like this:

attributes(strong ~beautiful)

The "predicate" is really attributes() and its "argument list" is the two attribute expressions 'strong' and '~beautiful.'

Object Predicates. There are also some conditions which depend not on attributes, but on what objects are present in the scene.

lantern

This means that the named ExploreNet object (prop or character), such as the lantern, is in the scene and visible on the ground.

~lantern

This means that the named object must NOT be in the scene for this condition be true. The object may be in the possession of a character in the scene; since it's not visible on the ground, this condition would be true.

Possessions are mentioned in a predicate named 'possessions()', which works just like the attributes predicate. For instance

possessions(hammer ~lantern)

would be TRUE only if the person had a hammer and no lantern.

Neighbor Predicates. Another useful class of tests is to tell whether the current object is in the same scene with another object. The predicate 'neighbor (egg hen)' would mean that the current object is in the same scene with both the egg and the hen, at the same time.) You can test for the presence of props or characters with this predicate.

Predicates for Which Object? If you are defining a behavior for Zora, and you just use a predicate like neighbor(cat) to see if she was close to the cat. However if you needed to know that the cat was close to a mouse (while defining Zora's behavior) you could test for Cat.neighbor(mouse).

In general, if you don't name an object, the predicate refers to the object for whom the action is being defined. If you wanted to make this totally clear, you could either say Zora.neighbor(etc...) or self.neighbor. Both these would have the same meaning as neighbor(etc...).

User defined Actions. If an object (e. g. TREE) has a properly constructed action file (TREE.ACT) then it will have some user-defined actions. Here is an example of an action file.

TREE.ACT

:condition for installing action 1

attributes (~grown)

:menu command for action 1

Grow

:the action that occurs

sequence 1 8 1

:the consequence for attributes:

grown

:-----------------

:condition for installing action 2

attributes (grown)

:menu command for action 2

Shrink

:the action that occurs

sequence 8 1 -1

:the consequence for attributes:

~grown

This is fairly self explanatory. There are two actions defined. The first says that if an object with the behavior 'user' has an attribute named 'grown' that has value 0, then

1. Place the command 'Grow' in its action menu, and

2. When that action is selected, execute the command

sequence 1 8 1

Which in fact means to step through the first 8 poses of the character's bit-maps, one pose at a time.

3. When the action is complete, assign to the attribute 'grown' a value of 1.

The complementary action called 'Shrink' is similarly defined.

More complex actions. To this point we've only seen one-piece actions, like "sequence 8 1 -1". To construct a more complex action consisting of several steps, we must separate the steps by semicolons. If they require multiple lines, we must use the back-slash \ as the last character on a line, to extend it.

Consider the following example of a complex action which Zora can perform as part of the 'EggQuest' world.

:This action requires that Zora have a lantern and be near the firewood.

possessions(lantern) neighbors (firewd)

:When those conditions are true, the following appears in Zora's menu

Light Fire with Lantern

:When that menu entry is selected, the following sequence of actions occurs:

flyNearObject firewd; fly 0 10; pause 100; \

firewd.ignite

:No changes are made to Zora's attributes.

NONE

Conditional Actions. The IF command allows you to make PART of an action sequence conditional. The basic syntax is as shown in this example:

if Zora.possessions(lantern) Zeke.possessions(firewood) Fire.ignite

This would check to see if Zora has a lantern and Zeke has the firewood. It that were true, then the fire would be told to ignite. This entire construct would consist of one action in an action sequence.

The only way that conditions can be nested is if you define a new action (such as Fire.ignite) and put conditions inside it.

General Issues about action sequences. ExploreNet3 scripts are not expressed in a general purpose programming language. A major and obvious omission is that there is no way to repeat a section of code. Cunning programmers may decide to try to create recursive actions (those which call themselves.) This won't work, and may cause crashes if we weren't clever enough in detecting your attempts.

The purpose of this system is to tell simple stories in which most of the complex actions are produced by the participants, not by crafty programmers. We expect to build more powerful programming tools into the next version based on the storytelling needs that emerge from this year's experiments.

Questions and Answers

There are two classes of behavior which cause props to be able to ask and answer questions. Assigning an object the behavior named "inquirer" causes a menu item "Ask Player" to appear in the object's action menu, along with any other actions you have provided to that object. Selecting that action produces a menu containing a series of questions. By selecting one of these, you are causing the character to "ask the player" (the human, i. e. yourself) a question. You must then provide an answer. Attributes (and thus the course of the story) are changed, depending on your answers.

Similarly, the behavior called "sage" causes an option titled "Answer Player" to appear in the object's action menu. When this option is selected,

a sub-menu appears and displays a series of topics (questions to be asked by the player.) You can select any of the listed topics (thus "asking the question") and receive the corresponding piece of information. Both inquirers and sages' scripts can contain conditions, so that the questions and answers can change as the simulation's state evolves. Let's look at examples.

Inquirer. The following sample script shows how an inquirer works.

CHIEF.BEH

:list of behaviors

inquirer

This is pretty obvious. Let's move on to the file which specifies the questions and answers.

CHIEF.QA

:condition for this question to appear in the menu

ALWAYS

:question 1 is:

How many cents does it take to buy gum?

:answer 1 is:

2

:consequences of correct answer (changes to attributes of character:)

smart

:----------- second question would follow, if more were used.

We see that the character's 'smart' attribute gets set to 1 when the player successfully answers the question. At present, ExploreNet doesn't accept a very wide range of answers (like '2 cents' or 'two cents'); the answer is a precise template. That is, the exact string of characters provided in the QA file must occur for the answer to be considered correct.

Sages. A sage tells you things. Because all the actual initiative in ExploreNet comes from the players, you actually have to trigger the sage's actions by selecting a topic from the action menu of the sage object. Here's an example of a behavior file.

KING.BEH

:list of actions

sage

The question/answer file in this case is fairly complex. You may want to hop to the commentary below the example.

KING.QA

:-------------- 1 ---------------

:

:condition for utterance 1:

attributes(~friend ~informed ~annoying ~unwilling)

:the topic (question which player may ask)

How much does the gum cost?

:answer

I'll tell you when I get to know you better.

:----note: This means 'the next time you ask me', because

:----we set the 'friend' attribute to show we've been asked once.

:consequences .. in this case, marking the character as a friend

friend

:

:-------------- 2 ---------------

:

:condition for utterance 2:

attributes(friend)

:Topic:

How much does the gum cost?

:answer

Well, since you're a friend, try 2 cents. (Just type 2).

:consequences

~friend informed

:----note: Now 'friend'=0, 'informed'=1.

:

:---------------3-----------------

:

:condition for utterance 3:

attributes(informed) neighbors (~lantern)

: question (topic) to be asked if the player is 'informed' (see 2

: above, but the lantern is NOT in the scene.

How much does the gum cost?

:answer

Hey, I already told you. How about a little gift?

: Commentary: The 'sage' is just a prop, and cannot possess

: a gift. The only way we can give it to him, is to put it down in

: the scene. We only ask this question if it's NOT there yet.

:consequences

N/A

:

:---------------4-----------------

:

:condition for utterance 4:

attributes(informed) possessions(lantern)

:question

How much does the gum cost?

:answer

OK, it's 2 cents. Don't forget it this time.

:consequences

~informed annoying

:

:-----------------5----------------

:

:condition for utterance 5:

attributes(annoying)

:question

How much does the gum cost?

:answer (sage is getting tired of this silly question.)

Not again. You better find somebody else to ask.

:consequences

~annoying unwilling

: commentary: By setting 'unwilling'=1, this sequence

: prevents the whole cycle from starting with utterance 1

: in the future. The sage will never again willingly answer

: this five-ply gum question (during this session.)

:

:---------------6-----------------

:

:condition for utterance 6 (it's unconditional)

ALWAYS

:question

How do I get out of here?

:answer

There's a portal in the front of the hut

:consequences (none: blank line required)

N/A

:-------End of Utterance 6

Notice that in this example, five of the six questions are variants on the same theme, but because of the conditions, only one of the 'gum' questions will actually appear in the menu at a given time.

Also notice that the five gum questions are chained together in such a way as to cause them to occur one after the other, if the player does the right thing. Despite the large apparent number of possible states that can be generated with four attributes, only these five can actually occur (unless some other question/answer or other action starts changing these attributes.)

The above example of how to chain together questions and answers should be regarded as a starting point for how you can chain together causes and effects of all kinds, to 'steer' the player's experience within an ExploreNet world.

References

Curtis, Pavel (1992). "Mudding: Social Phenomena in Text-Based Virtual Realities." Proceedings of DIAC T92. Available via anonymous ftp from parcftp.xerox.com, pub/MOO/papers/DIAC92 in two versions: .{ps, txt}.

Morningstar, Chip and Farmer, F. Randall. "The Lessons of Lucasfilm's Habitat" in Cyberspace: First Steps. Michael Benedikt, ed. MIT Press, Cambridge, MA. 1991.

Moshell, J. Michael and Hughes, Charles E. "The Virtual Academy: Networked Simulation and the Future of Education. in Proceedings of the IMAGINA Conference, Monte Carlo, Monaco, 16-18 February 1994.

Stephenson, Neal. Snow Crash. Bantam Books, New York. 1991.

APPENDIX A: Installing ExploreNet

We assume that you have installed Win32 and Smalltalk/V for Win32 on a 486 PC with 8 meg of RAM and a large hard drive, and worked through at least some of the Smalltalk tutorial manual. The Smalltalk system should be stored in a folder named v32win, hanging off the C: root; and should be associated with an icon titled "Smalltalk/V for Win32". This is the configuration you'll have if you used the automatic installation procedure provided with Smalltalk.

Installing ExploreNet is easy. Use the Windows File Manager to do the following things:

1) Save any existing file named V.EXE in the Smalltalk/V directory named C:v32win This is the original Smalltalk image file; you may need it later for activities unrelated to ExploreNet. One way to save it is to rename it VOLD.EXE, or any other name that helps you remember what is in it. You also need to rename the CHANGE.LOG file.

2) From ExploreNet Distribution Disk 1, copy the files V.EXE, V32VM20.dll and WINSOCK.DLL directly into the V32WIN directory. The V32 file is a modified Smalltalk/V library which contains the special cursor objects to display cursors that designate one's own or another's character, prop, and exit.

3) Copy from ExploreNet Distribution Disk 2, the complete directory named Explore.Net and install it directly on the C: drive. If you have any older Explore.Net directory there, rename it first. We don't want to mix the old with the new.

4) There may be a few spare pieces of the scenario back on Disk 1. Re-insert Disk 1. If it contains any directories named OBJECTS, SCENES or WORLDS, copy their contents into the corresponding directories inside C:\EXPLORE.NET.

5) Use the Windows File Manager to create an icon within the V32WIN folder, and associate it with C:\V32WIN\V.EXE. Name it "ExploreNet 3.1e".

Now you're ready to run.

PROBLEMS

If anything happened that you didn't understand or couldn't fix, delete all the files that have been added to the system and start over with the installation procedure. You may even have to re-install Smalltalk/V, though this level of problem is getting rarer as things settle down.

If that doesn't work, call or write or visit Charlie Hughes (ceh@cs.ucf.edu), 407 823 2341.

APPENDIX B: Installing a Network to support ExploreNet

First, you need to install ExploreNet, according to Appendix A. In addition, from Installation Disk 2's EXPLORE.NET subdirectory, make sure you copied the file Explore.cfg into the EXPLORE.NET directory. If you open this file with a text editor, you will see that it contains a four-byte Internet address. This is the IP numeric address which ExploreNet will use when it attempts to reach the server.

If two or more servers' IP addresses are provided (one per line in the Explore.cfg file) the client application using this Explore.cfg file will be given a choice of servers. Each server's description will include its IP address and the name of the world it's currently running. Only those worlds which have corresponding world-files available on the client will be offered.

If you plan to run a local session, you must determine the IP address of the machine upon which you want to run your server and install it into this file, adding to or replacing the UCF IP number (Make a note of the UCF number for future use, if you remove it!)

Now return to Section 2 for a walk-through of a networked session.

APPENDIX C: Editing Files with NotePad

It's a simple process, folks. NotePad follows all the Windows conventions for handling documents. The main thing to know about is that you can use the Associate feature of the File Manager to set things up so that whenever you click on a file that is displayed in the File Manager, its associated application opens. We want to create associations from files with the following extensions:

.wld

.inf

.beh

.act

.xit

.rgn

.qa

.cfg

to Notepad. Do this before you start running ExploreNet. To do this, open Windows' File Manager. Open its FILE menu; select Associate. Specify the desired extension, and select NotePad as the application. Do this for each of the above file types. Now, it is very easy to jump back and forth between ExploreNet (at the world-selection window, where you see all the little square pictures and choose a world) and File Manager; double click on the file you want to change; change it, save it and resume working with ExploreNet.

We use the PlugIn shareware desk accessory, which makes it possible to "hop" right out of an ExploreNet session and access the File Manager. Press (alt-tab); that is, hold down the alt key and press tab, and you find yourself in the general Windows screen you had before you started ExploreNet. Then pull down the PlugIn icon, select File Manger.

Alternatively if you don't use NotePad, you can arrange your Windows desk-top so that File Manager is easy to get to. In fact it might be kept open, if you have enough RAM space.

You can change the text files that define an ExploreNet world, then go back out to the green menu (via the QUIT button) and select the world again. This causes the files to be re-loaded into RAM, and thus you see the results of your changes. This is only feasible when you're not running networked, because you would have to find a way to send your changes to the other sites, in networked mode.

A final hint: When you first use the OPEN option, select "All file types". Now as long as you are working with Notepad (and not closing/re-opening it) you will see all the .wld, .beh etc. files. If you don't do this, it'll continually revert to trying to display only the .txt files, which is a nuisance.

We're working on it!

APPENDIX D: Known Bugs in the Software

As of 6/28/95 these are no known bugs.

APPENDIX E: Error Messages

These are the most common error messages that result from errors in world-building. Any other error messages you encounter are probably due to system failures and should be reported to Charlie Hughes at the address above.

<We need to trigger some errors so as to populate this section. It has been a while since we've done that and most of the errors in previous manuals are now handled appropriately.>

APPENDIX F: Glossary cum Index

Act File. A file with the extension .act which specifies user-defined behaviors for objects. Section 4.

Action Verb: These are the building blocks from which you construct user-defined behaviors, in Act files. See Appendix G or Section 4.

Action Menu: if you point the mouse cursor at any object and press the right button, you will see a list of choices for what the object will do. A click selects an action. Click outside the menu to select no action.

When the action menu of a character is being used by a character's actor, it contains all possible actions. If it is being used by a "second person" (someone other than the actor) a smaller set of actions is possible; they are usually requests to the character, rather than "direct orders". The FOLLOW request is an example of one of the actions you can request of someone else's character.

Section 1, 3,4.

Action Region: a rectangular area of a scene. When used, action regions are the only areas where characters can move. They are used to prevent characters from doing implausible or undesirable things. There is a default action region in each scene which prevents characters from destroying the dialog text at the top of the screen. Section 3.

Avatar. In Indian religious thought, an avatar is a manifestation on earth of a deity or spiritual being. In the Habitat system (Morningstar 91) the term denotes what we refer to in Explorenet as a "Character" (q. v.) Independently of the Habitat system, Neal Stephenson coined an equivalent useage in the delightful novel Snow Crash (Stephenson 92.)

Background: a flat colored image, usually 640 x 400 pixels. This serves as the foundation for a scene (q. v.).Sections 1, 3.

Behavior: One of the built-in kinds of things that objects can do. See Appendix G for a list of all the behaviors currently provided, or Section 3 for discussion.

Behavior File: a file with the extension .beh which accompanies any object that has non-trivial behaviors. Section 3.

Character: a cartoon figure within the ExploreNet system, which is controlled by a live human being called the actor for this character. An actor can control more than one character, by alternating between them (or perhaps by using two computers at the same time.) When a character passes through a portal to another scene, the scene on the computer changes to follow the character. Section 1.

Client: a program which is being used by an individual or a group of users sitting in front of a single computer. The client is communicating via another program called the server with other client programs. Sections 1, 2, appendix B.

Cursor: a behavior. Section 3.

Cycler: a behavior. Section 3.

Dialog: This main control button provides a script of everything that anyone's "said" (typed) up to this point. This should be in a scrollable box, but it isn't yet in V3.1e. To make the box go away, press the Enter key. Section 1.

Exit: a region in a scene which, when entered by a character, causes a change of scene. Exits may have conditions attached to them. Sections 1, 3.

Flyer: a behavior. Section 3.

Follow: This is an action that can be requested of someone else's character, or in fact of a prop. If the actor agrees, the character follows "you" (your character) wherever it goes. To make an object capable of becoming a follower, put the "follower" behavior into its behavior file.

Follower: a behavior. Section 3.

Identify: this option is in the action menu of every object (character and prop.) It produces a small screen with textual information about the object. Sections 1, 3.

Info: This main control button provides background information about the current scene. Section 1.

Inquirer: a behavior. Section 3.

Invisibility: see vanisher. Section 3.

Plug-Ins. A neat screen management accessory which is "share-ware"; you can get it for free and try it out. If you like it, you then send the maker a specified fee. Plug-Ins is available from

Plannet Crafters Inc.

P. O. Box 450

Alpharetta, Ga. 30239-0450

FAX 404 740 9821

73040.334@compuserv.com

AOL: DMANDELL 1

Genie: D.MANDELL1

Prodigy: VSFB48A

Their bulletin board is located at 404 740 8543.

Portal: another word for Exit, q. v. Section 1.

Possession: a behavior. Section 3.

Props: objects in a world which can be manipulated, but which do not normally serve as an animated "person". Section 1.

Quit: This main control button takes you out of the current virtual world (ZWORLD), back to the green button menu where you can choose whether to enter a networked session, another stand-alone session, or quit altogether. Section 1.

Replay: ExploreNet can replay the actions that have taken place so far. Just press the REPLAY button; but if you've been playing for a while, the replay may also take a while. Section 1.

Region: a rectangular area, not visible, where characters are permitted to go. We're not actually using regions right now, but they're useful in structuring more complex story environments. Section 3.

Restart: this main control button resets characters to their initial positions and conditions, and clears out all the stored dialog. Section 1.

Sage: a behavior. Section 3.

Scene: The basic component of an ExploreNet World, a scene consists of a background, props, characters, exits and regions. Section 1.

Server: a program which gathers together information from client programs and broadcasts information to them. Sections 1, 2, appendix B.

Talker: a behavior. Section 3.

User: a special behavior, which announces that there are user-defined actions associated with this object. Sections 3, 4.

Vanisher: a behavior. Section 3.

Zoomer: a behavior. Section 3.

Appendix G: Behaviors, Action Verbs and Predicates

BEHAVIORS

While most of these built-in behaviors will ultimately be usable with all objects, in this version most of them only apply to props. Those which can be used with props are marked with P; those that be used with characters are marked with (C). The square-bracketed commands are used in the creation of user-defined actions. They are more fully explained in the following section.

cursor (C) - this causes the current (x,y) location of the bottom center of the active character to be reported. Also reported is the change since the last report. This is useful for measuring a scene to construct exits and activity regions. [cursor]. Puts TELL WHERE into the user's menu.

cycler (P) - continuously animates through all poses. This could be used for a ceiling fan, a flashing lightning bolt or neon sign, or any kind of prop that you want to use to liven up the scene.[cycle, stopCycling]

flyer (P) - shuttles back and forth from left to right screen edges until you tell it to quit. Puts FLY in the menu. [flyAround]

follower (C,P) - follows the character around until you tell it to quit. Puts FOLLOW into the object's menu; then STOP FOLLOWING once activated. [follow]

inquirer (C,P) - makes an object into a question-asker, which will present your character with a list of questions. See section on 'questions and answers' below. An additional .qa (question/answer) file is needed.

possession (P) - makes a prop eligible for being picked up and carried off by a character. Puts PICK UP into the object's menu. [canBePossessed, cannotBePossessed, drop objName, pickUp objName]

sage (C,P) - makes a prop into a question-answerer, something like the opposite of an inquirer. See the section on 'questions and answers' below.

toggler (P) - puts TOGGLE in the menu. This will cause the next pose of an n-pose object to be displayed. If there are only two poses, you really do get a toggling effect. This is very similar to 'zoomer.' [toggle]

turner (P) - puts About Face into the menu of a prop. (Characters already have this command.)

vanisher (C) - causes the character to become invisible on all screens except the one which owns (controls) it. Puts "Become Invisible" in the menu. An invisible character shows "Make Visible" in its menu. [becomeInvisible, becomeVisible]

zoomer (P) - cycles an object between pose 1 and pose 2, which we assume is an enlarged image. Puts ZOOM in the menu; when something is zoomed, it puts UNZOOM in the menu. [zoom, unZoom]

ACTION VERBS

Items in <angle brackets> are positive numbers. Items in double angle brackets <<>> can be positive or negative numbers (but not zero.) Square brackets mean that the item is optional.

Action verbs can all be directed at specific objects; for instance, in the definition of a method for Zora to pick flowers, the following might be included:

Flower.becomeInvisible

This would direct the flower to disappear when she picks it. If, however, her script had instead included the instruction

becomeInvisible

or its equivalent expression

self.becomeInvisible

then Zora herself would have become invisible (on everybody's screen except that of the person controlling her.)

The [object] in the following list is just a reminder that an optional object can be named at that point as the one to do the requested action. The 'objName' which is occasionally seen is a reference to another object; for instance, Zora might have an action sequence which includes

Zeke.pickUp lantern

In this case, Zeke would be induced to pick up the lantern, when this compound action in Zora's repertoire was being executed.

The * denotes that this action verb works for props but not for characters.

[object.]becomeInvisible - see Vanisher in the Behavior section

[object.]becomeVisible - see Vanisher in the Behavior section

* [object.]canBePossessed - makes object into a Possession

* [object.]cannotBePossessed - makes object not be a Possession

* [object.]cycle - see Cycler in the Behavior section

[object.]drop objName - causes the object to be un-

possessed & to become visible.

* [object.]flyAround - see Flyer in the Behavior section

[object.]fly <<x y>> - walk (cycle) while moving a distance (x,y) [object.]flyToPosition <x y> - walk (cycle) while moving to (x,y)

[object.]flyToObject objName - walk (cycle) and go to the obj.

[object.]flyNearObject objName - walk (cycle) and go near obj.

[object.]pause <milliseconds> - entire system pauses that long.

[object.]pickUp objName - active object picks up named object

[object.]rollOver - object appears upside down. do again -> rightside up.

[object.]say text - the object will speak.

[object.]sequence <start> [<stop> [<interval> [<repeat>]]]

* [object.]stopCycling - see Cycler in the Behavior section.

* [object.]stopFlying - see Flyer in the Behavior section.

* [object.]toggle - see Toggler in the Behavior section.

* [object.]unZoom - see Zoomer in the Behavior section.

* [object.]zoom - likewise -

In addition, you can use any behavior that is defined for any object. If the object is Jake and its action's menu name is, for instance, Go Jump in Lake, you would issue the command

Jake.GoJumpInLake

Obviously you have to take the spaces out of the menu name, to create the action name.

Conditional Actions. These tools allow you to make PART of an action sequence conditional. The basic syntax is as shown in this example:

if Zora.possessions(lantern) Zeke.possessions(firewood) Fire.ignite

This would check to see if Zora has a lantern and Zeke has the firewood. It that were true, then the fire would be told to ignite. This entire construct would consist of one action in an action sequence.

The only way that conditions can be nested is if you define a new action (such as Fire.ignite) and put conditions inside it.

PREDICATES

The following are items which have values of TRUE or FALSE. These are the only things that can appear in the conditional line of a portal or an .act file action description.

Curly brackets {} mean "a list of one or more"

ALWAYS or PRIVATE

These refer to the object to whom the action belongs:

attributes ({attribute names and ~attribute names})

neighbors({object names and ~object names})

possessions( ... ) : object names and ~object names

These refer to some other object. If you want to be explicit about defining a self-referential object, replace 'object' with the word 'self'. If you want to check on Jake's attributes, you would use Jake.attributes(brave) or whatever.

object.attributes({attribute names and ~attribute names})

object.neighbors( ... ) : object names and ~object names

object.possessions( ... ) : object names and ~object names