Revisions to Architecture

Revisions documents changes to the structure of the mud and java added in the Domisilica version of PALplates. I've updated the PALplates database so that it runs with the Domisilica java code wherever possible. Any changes of that sort are documented in revisions. Domisilica may do some things PALplates doesn't, however, and those are also documented in revisions

SubArctic Revisions documents changes to the library made in the reimplementation from java to SubArctic. The reimplementation should still work with the original databases.

PALplates Architecture

Overall Plan

Mud is the backend, java is the user interface/front end.

images + type + action information is stored in the mud for all objects that the UI might display.

The UI loads an app (PALplate.PALplate & PALplate.mud.MudClient) which will recieve information about changes. It's static. Anything which wants to be told about changes (eg apps running in other frames) must register itself with that app.

anytime a change occurs in the mud, the mud code calls some code which broadcasts info about the change ... (not yet implemented)

Java Stuff

Mud Stuff

The mud I'm using is LambdaMOO 1.8p5 with the October, 1994 database (the newest one I could find that didn't have any bugs). Lots of information about lambdaMOO is available. Also, there's some good elisp code around for editing muds and visiting them in. The mud is required to run on palweb for security reasons. It's located in ~jmankoff/MOO, if it's not running, you need to type restart test.db. I should probably move this to ~palplate. Here's my bookmarks about muds:

In order to implement mud stuff, I made very few changes to the core database: I changed the #0 object to have two new properties -- room_class and exit_class. These properties are used much in the same way as player_class -- they point at the class which should be the default for all rooms or exits created. I also changed two lines of the @dig function (in the builder class) -- it now uses $room_class instead of $room as the default when it creates a new room and $exit_class instead of $exit as the default when it creates a new exit.

I then had $player_class point at Generic PALplate Player (#266), $room_class point at Generic PALplate Room (#87), and $exit_class point at Generic PALplate Exit (#96)

Some other notes:

Room hierarchy:

Generic Objects:

Generic Palplate Room:

Generic PALplate Player

Generic PALplate Exit (#96)

Generic PALplate Note (#230) Inherits from #232 (Generic PALplate Container)

Generic PALplate Container (#232) Inherits from ... <other stuff> .... #233 (Generic PALplate Thing)

Generic PALplate Thing (#233). Sets up the basic object attributes that the java code needs to represent any object in the mud. Usually, all of these props and functions are overriden.

Java <==> Mud communication

Ok, here goes:

The Java programs communicate with the mud by sending commands that you could just as easily type at a prompt. The commands all take a tag as their last argument, plus any other relevant arguments.

When the mud responds, it prefixes it's response with #@# tag <results>

Commands:

 

Images

 Design of a Plate Front Screen

When a PALplate boots, it knows the <number? name?> of the room it belongs in ... that's reasonable assuming that it's just the name on the door of the room where it hangs. (how does this affect a plate in the entryway or hallway of a building?)

So that's a *name* (even though it's numerical)

Why not make that the name of a particular guest character? That character's home would then be the correct room for that PALplate ...

Ok, assuming I can do that, when the PALplate connects, it will automatically be in the right place. What happens then?

  1. it runs @showApps to find out what applications should be in the ToolBar
  2. It runs @checkNotes to find out if any objects in the room have notes on them (for example, the if the generic printer object had a note on it, that wolud show up on all printers, so any rooms with printers in them would display that note ...)
  3. look and feel:
    1. the top frame contains the toolbar where @showApps stuff is displayed.
    2. the lower frame contains three panels -- a noteDisplay and a suggestionsDisplay and a personalShelf
  4. noteDisplay is actually the thing that runs @checkNotes. It orders them somehow, and displays the top one along with some words saying how many there are. By clicking on the lower left corner, users can view the next in line, and so on. There is also a way to bring up a blank sheet and write on it. (or do we allow users to write on top of any note they view? Users can drag a note onto their personalShelf. On the mud side, the reference to that object is moved from a list no wherever it was to a list on the user's body.
  5. suggestionsDisplay has a list of all suggestions made by people. Instead of displaying them on top of eachother, they are actually displayed in listbox format. The list is gotten in a similar way to @checkNotes -- with @checkSuggestions ... might even look teh same on teh mud side?
  6. the personalShelf is just objects contained in teh shelf. It displayes them (how?) ...

User Interface Observations on current demo ...

it's really hard to use teh paidnt application. That's *got* to improve if we want the every day user to have the patience to use it (eg francoise).

Also, she wants to wipe out bad stuff ... even when using the erase button, she wipes.


Copyright © 1996 FX Palo Alto Laboratory, Inc. For problems or questions regarding this web contact Jen Mankoff. Last updated July 09, 1996.