Mud-Dev FAQ
Last modified: 20 September 1999
14 November 1999
1. Introduction
2. Frequently Asked Questions
3. Previous Topics
4. Scenarios
5. Resources
6. Glossary
7. Changes, To Do & Acknowledgements
Please email any corrections, suggestions or constructive criticisms
to Marian Griffith at gryphon@iaehv.nl
Recent Changes:
991114 -- New moderator (Marian Griffith)
990920 -- Resources: Added Raph Koster's website, gaming section.
Glossary: New terms include full world reset, PK, psychological
disinhibition, world state and virtual sociopath.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~
1. Introduction
The following may also be found at the list's homepage straddled at
<URL:
http://www.kanga.nu/lists/listinfo/mud-dev/>.
--<cut>--
List charter
The MUD Development mailing list is not platform, language or game specific,
but concentrates on discussing the design and implementation of any and all
MUD servers and systems. Another large related topic is game design. This
does not mean that the details of a specific server or game design point
can't be discussed in excruciating detail, or even that server or game
source can't be bandied about and picked over, just that the list isn't to
become a religious stomping ground for your platform, language, server, or
hobby horse of choice. The topic definition is not limited to technical
areas: social engineering, cultural considerations, applicability of
technical addresses to "soft" problems, and other less rigorous avenues of
investigation are also fair game.
The goal is high signal, low noise. The MUD Development list is NOT an
email version of the rec.games.mud.* newsgroups.
--<cut>--
Also from the same page is a message for the commercially orientated amongst
us:
--<cut>--
Note from the list owner
The list has a number of members who work professionally in the field. Their
presence raises certain concerns for intellectual property, trade secrets,
copyrights, etc for the list and for list postings. The below should give an
overview of this area, what I expect of list members, commercially
affiliated
or otherwise, as well as the intended character of the list.
As list owner I expect all list members to be responsible for what they
post.
The rules are obvious: If there is something your company or affiliations
does not want publicised, then don't post it to the list. If you see one of
your commercial or other partners post something to the list that shouldn't
have been, then don't bring it up on the list -- take it to direct email.
Raising such issues on the list will be used as an excuse for removing
membership.
Please do not use this as an alibi to start adding disclaimers to your
posts.
You are the members on this list, not your companies. If it isn't your
opinion don't write it. If you are reporting someone else's opinion, state
it as such.
If a post is written as a representative of your company or affiliation,
then
identify it as such. Adding a signature which identifies your affiliation
is
not enough. That can be too easily automated and is not an explicit
statement
of representation. A leading paragraph identifying the source or
representation placed above all the textual body including the attributions,
will do (keep it short).
Commercial grandstanding, advertisements, chest puffing, or other forms of
promotion are not appreciated on the list and will be rewarded with removal
of
membership. The list is an expressly non-commercial venue. It is intended as
an intelligent and free discussion by peers in the field, both hobbyist and
professional.
Membership of the list is not a right. You are here as my guests. This is a
private list run as a personal contribution to the field. I trust the list's
membership to behave accordingly.
Posting to the list may be considered analagous to having a conversation in
my
living room using bull horns while the windows are open and everyone has
tape
recorders. There is no secrecy, or control of the dissemination of data once
it is posted.
And on a final note: Attempting to invalidate or discourage a discussion or
avenue of investigation on the list because it strays too close to a
commercial project's field or other such interest will be deemed an
intentional personal insult and due cause for permanent removal from the
list along with all associates.
Thankyou.
J C Lawrence, MUD-Dev list owner.
--<cut>--
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~
2. Frequently Asked Questions
1. What should I do now I have joined?
If you have not already, please read the rec.games.mud.* FAQs to
familiarise yourself with all the different sorts of muds out there, see
<URL:
http://www.cs.okstate.edu/~jds/mudfaqs.html>. Take some time to
browse through the list's webpage. It may be found at
<URL:
http://www.kanga.nu/lists/listinfo/mud-dev/>.
2. How do I post?
Posting on the list is a privilege which may be obtained from the list
owner (who resides at mud-dev-owner@kanga.nu). It is suggested you lurk for
a while to get a gist of how things work on the list. When you do approach
the list owner for posting privileges, attach your intended posting.
3. What is the accepted standard for posting?
In short: No more than 80 columns wide, and only use 7bit ASCII. If
you are posting from a country/language which uses "special"
characters, such as with umlauts or other diacritical marks, then
please ensure that your mailer properly MIME wraps them. Most modern
mailers will do this properly.
MIME, HTML, RichText and similar are discouraged. This encludes
"vcard" attachments from NetScape mail and similar. Small MIME
attachments, such as a graphic used to illustrate a point discussed in
the text of a message are acceptable. The guiding rule is that the
brunt of the value of a message must always be in the text.
A reply to another posting must have at least the name of the original
author if your mailer does not automatically prepend one, eg:
[Bubba]
>On 4 Jan 98 at 22:20, Boffo wrote:
>> Buffy <Buffy@players-r-us.com> wrote:
>>> I just found a cool mud at <URL:
http://web.mud.com>
>>
>> Golly Gosh! Cover me in eggs and flour and bake me for 40 minutes!
These are commonly referred to on the list as "attributions".
Web pages are usually referenced in angled brackets as above.
When quoting a log from a game, put at least two spaces at the start
of each line so that when it is quoted it does not become confused
with other conversation text:
--<example>--
I have a maze in my game:
> look
You are in a maze of twistly little passages, all alike.
Isn't it neat?
--<example>--
Will be quoted as:
--<example>--
>I have a maze in my game:
>
> > look
> You are in a maze of twistly little passages, all alike.
>
>Isn't it neat?
--<example>--
Use a bit of common sense when quoting. Include enough of the
original message to make sense; no more or less. Avoid quoting an
entire post with a one line reply (btw, one line replies are bad :).
Also, don't be afraid to change the subject heading to something more
relevant if the topic has strayed somewhat (usually happens to most
threads).
Oh yeah, and a sensibly sized signature.
4. What is meant by high signal to noise ratio?
The noisy postings include messages which essentially say "I agree!"
and add no extra value, or those that do not relate to the purpose of
the list (like what you had for dinner, how your codebase/driver is
clearly superior to all others in existence and why language such and
such is better than such and such). Try to keep on topic and you
won't go wrong. However, the list is infamous for long postings which
start with one topic and end up rambling on about something else
completely different towards the end. But so long as it is regarding
muds...
5. I just made a post about such and such but no one responded to it!
There could be several reasons why no one has answered to your
posting. If it was to start a new thread, it could have been that the
topic has just recently been discussed. Try waiting a while before
bring it back up again. If it was in answer to a current thread,
other list members will have read it but just might not have anything
to say on that point right then.
6. What's all this Bubba business?
Bubba, Boffo, Buffy and friends are all typical mud players bred for
test scenarios devised by various list members. Originally procreated
by J C Lawrence (how, I don't wish to know), they have since come into
widespread use amongst the mud usenet groups (much to J C's amusement).
7. Aaargh! The traffic is too much!
Perhaps switching to the daily digest mode would help?
Go to <URL:
http://www.kanga.nu/lists/listinfo/mud-dev/>, enter your
subscribed email address at the bottom, and then edit your subscription
options as appropriate.
8. How do I access the archives?
List traffic is archived daily and housed at:
<URL:
http://www.kanga.nu/archives/MUD-Dev-L/>
9. How do I turn off the list while I'm on holiday?
Go to <URL:
http://www.kanga.nu/lists/listinfo/mud-dev/>, enter your
subscribed email address at the bottom, and then edit your subscription
options as appropriate.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~
3. Previous Topics
Here's a list of practically all the topics discussed since the list's
creation up to the end of Dec 98 (early traffic may be missing):
Server design:
Affects vs. spoofs
Security concerns of spoofs
Component based bodies vs. aggregate bodies vs. atomic bodies
Rooms vs. coordinate spaces vs. mixed forms of the two
Methods of handling coordinate spaces: neighborhoods, tree forms
R-Trees, R*-Trees, 3d arrays, Quad/Oct trees
Automated population containers
Event models
Internal process models
Security models
Multi-threaded server design [conflicts resolution?]
Database design for a server
Use of transactional databases in a MUD server
How to avoid resets
Parsing systems, and language development tools
Design of internal MUD languages
Variations on event-driven design
Disk vs. memory based designs for MUD servers
IO Socket efficiencies.
Telnet protocol and terminal emulation
Design of Object IDs and Object ID recycling
Artificial probability systems
Virtual rooms, virtual objects, virtual mobiles
Sending mail from within a mud server
String handling and memory
Verb handling - global vs. local vs. mixed
Generic objects
Object assemblies
Collision detection
Client scripting and scripting prevention
Graphical interfaces
Must have books for programmers
Web vs. Telnet
Game design:
Classes of players and what they want from a game
Levels vs. level-less vs. abstracted levels vs. level-comparatives
Keeping a goal progression without levels
Handling of character inventory and representation of inventory
Families and their impacts on clans, multi-charring, and tactics
Character senses, representation and extension
Re-usable quests or plotlines
Generic quest creation systems
Rumor systems, handling rumor propagation, and rumor decay
Races
Placement of characters in the MUD-world predator totem-pole
Handling of character death as an in-game event
Perma-death vs. resurrection
Economic systems (and lessons learnt by prior experiments)
Energy-style ecologies and economies
Ecologies for MUD worlds
Inter-player communication systems
Perceived danger levels for characters
NPC AI, goal-oriented NPCs, intelligently automating NPCs
Player characters as NPCs/monsters
Nutrition
Wounds and trauma systems
Combat systems (round based, no rounds, interactive, etc.)
Combat messages
Combat scripting and action
Dynamic descriptions and perception
Views on the "undead"
User command interface design
All about bows, longbows, crossbows, etc.
Festivals and in-game mud games
Supporting both RPers and GOPers
Virtual chemistry/alchemy
In-game political and social structures
Implementing mundane professions (or Nation of Shopkeepers)
Methods of integrating PK (coexistence with non-PK)
Handling poison and disease
Inebriation and drugs
Dragons - a number of viewpoints
Spoken and written languages
Food - interesting or irritating
Starting characters or creating characters
Amalgamud specification document
Alignment vs. reputation
Character positions and rank point system
Automatic name generation
Learning and skill progression
Classless systems and profession-based systems
Physics and the mud universe
Hard sci-fi vs. science fantasy
Character places of their own
Character henchmen and servants
Thieves - ideas
Allowing players to affect the world
Group play and group dynamics
Spells and spell-casting systems
Characters - heroes, nobodies, or prey species
Game balance
Hive minds
Traps and riddle lists
Representing character stats - numeric, descriptive and graphic
Settings for mud worlds
List members' inspirational fantasy and sci-fi books
Handling and building of large trackless areas
Gods and deity systems
Mud Administration/Philosophy
Lorry's document on wizarding
The morality of logging and snooping
Problems with socializers
Social control and engineering
Dealing with "problem" players
Is the virtual world real?
Gender issues
Bartle's mud papers
The purpose of mudding
Motivating builders and coders
Role-play vs. Game-Only Play discussion
PK vs. Non-PK discussions
The infamous rape discussion
Habitat papers and anecdotes
Overriding players' control of the character
The following is a list of topics that appeared on the MudDev list in
1998...
Server Design:
Event handling
Socket programming
Task parsing
Byte code
Java and Javascript
Dynamic module loading
DBs and Events
Java threading
Let's build a compiler
Version control
Intermud communication
Nested coordinate spaces
Persistent storage
Transport layer UDP vs TCP
Atomic functions
Algorithms for storing free space
Mapping - creating bitmaps
Using SQL databases
Mapping data into RDBMs
DevMUD project
Game Design:
Mud economy
Vast areas in muds
Time travel and logging
Unique items
Gods and worshippers
Senses
Terrain rendering
Simulating future history
Ultima Online's reputation system
Bad game designs (What we hate about muds)
Handling log out
There can be only one
GRUMPS
Character development
Teleportation code
Avatars
Leaving characters in the game
Mud school
Regulating player created objects
In game bulletin boards
Level-less muds
Describe concept
World persistence
Random numbers
Charm
Combat intelligence
Darkness visibility
Thoughts on languages
Recursive look
Equipment fitting
Implementing god
Marian's tailor problem
Room descriptions
Prescience rules/handling telepathy
Map-making programs
Stack-based NPC AI
Multiple currencies
Command parsing
Affordances and Social method
Fun vs. realism
Client Design:
Netscape Clients
Netscape Gecko
CORBA, RMI, DCOM
Graphical Mud perspective
3D perspective
Net protocols for mudding
Client side caching
Using HTML in muds
Trusting the client/ security
DIS - client/server protocol
Mud Administration/Philosophy:
Administrative Responsibility
Impact of the Web on muds
PK debate summary
The MLI project
XShipwars
The Darkhole tests
Wired on Ultima Online
CGDC summary
Golgotha
Laws of Online worlds
Analysis and specification
Mud web sites
What is a mud?
Storytelling vs. Simulation
[courtesy of Jon A. Lambert]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~
4. Scenarios
Standard scenarios used to demonstrate various mechanisms.
Dragon's Dinner - Alexander Weidt
~~~~~~~~~~~~~~~
/(o__. _____| \ |OcO|
---------/|-/|-( ,__)-------| | |--------+++++++++/|_| - |_
-----------
/\/ |/ |/ _ \++++++C+O+M+P+L|E+X+I+T+Y+++++O+F+++/f| `-' |
|\/ / \/ "++++++D+|+S+T+R+I+B+U+T+E+D+( u| |
___| . .____. /______________|
"|++++++S+Y+S+T+E+M+S+\n|_)___(_/-----------
_| /| |_ || |_ |____| | "++++++++\| | | | \
/__/LL__,) LL__,) | / (__|__) \
Pretty picture depicting the famous `` Dragon's Dinner'' problem, by
Jutta Degener.
The Dragon's dinner problem
---------------------------
One of the original goals for the DOME project was to provide a
parallel/distributed execution envirionment for an LPmud game
driver. LPmud is programmed in a langauge called LPC, which is derived
from C and enriched with constructs to enable object oriented
programming, complex data types such as associative arrays and lambda
closures. This is interpreted by the game driver which provides single
threaded execution semantics. Items in the game are represented by
LPC objects which provide methods specifiying how they interact with
other objects in the game.
Consider the following problem (dubbed "Dragon's Dinner"). Assume, in
an asynchronous distributed system, that there are two room objects
(r1, r2) and a door object (d) that connects them. R1 contains a
hungry dragon (hd) and r2 contains an adventurer (a). The door is
currently open, the adventurer has just fled from r1 and is about to
close the door. The dragon, on the other hand, wants to go after the
adventurer. Code for the dragon is something like:
if (d->is_open())
hd->move_to(r2);
And the code for closing the door is something like:
d->close();
Now what if the following happens: The thread that executes the
dragon's action has checked that the door is indeed open, while the
other thread which is concurrently executing on a different processor,
closes the door. This succeeds and the adventurer sees the door
closing. However, when control returns to the dragon's thread, it
still believes that the door is open and steps through it, much to the
surprise of the adventurer who sees the dragon walking through a
closed door, before being devoured by the dragon.
Naturally this is merely a race-condition dictated by the asynchronous
execution of two data-dependent threads. The main goal of the DOME
project is to provide a system where the component objects can be
programmed in a sequential fashion, but have the run-time support
resolve such race-conditions (in a deadlock free manner) so that
parallel execution can be achieved.
Alexander Weidt [June 1995]
Uncertainty model - JC Lawrence
~~~~~~~~~~~~~~~~~
Uncertainty model: A representation model for a MUD world or objects based
on the following principles:
There are three types of objects in the world:
1) objects which have an uncertain state
2) objects which have a certain state.
3) objects which don't exist but retain a certain state.
The state in question about an object can be its exact identity (eg, not
just a key but the key to Castle Krak, not just a worn out sword but The
Sword of the Great God Goo Goo, etc), or the exact state of that
identified object (a gun vs a loaded gun vs a toy gun vs broken gun etc).
The terms:
-- All objects are indeterminate (unidentified) until identified (see
#1). Such objects are referred to as "ur-objects", or occassionally
"meta-objects".
-- Upon identification ur-objects are "realised" and become
"normal-objects".
-- Objects that have been lost and are thus candidates for becoming
ur-objects again, or otherwise torn down are termed "lost-objects" or
"limbo-objects".
The underlieing concept is that the resolution of the identity of an
object is done at the last possible minute. All ur-objects have the same
innate possibilities of being any matching normal-object. The decision on
whether any particular ur-object is actually any particular normal-object
is done only at the moment of successful identification (eg an ur-key
sucessfully opens Castle Krak).
The Stamp Collector's Dilemma - Dr. Cat
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Lots of people might like stamp collecting in your virtual
world. But those who do will never play with those who like other
features. Should you have stamp collecting in your world?" We know
that there are a wide range of features that people find enjoyable
in online worlds. We also know that some of these features are in
conflict with one another. Given the above, we don't yet know if it
is possible to have a successful world that incorporates all the
features, or whether the design must choose to exclude some of them
in order to keep the players happy.
The Tailor Problem - Marian Griffith
~~~~~~~~~~~~~~~~~~
Suppose Marian is (role)playing a tailor and in the game that is
a feasible profession. She learns the requisite skills and enjoys
her work, designing clothing for other players, and the opportunity
it provides to talk with many other players.
Along comes Boffo who doesn't like Marian, Tailors in general or is
just in a bad mood. He attacks, and kills, Marian, loots her shop
and leaves her to pick up the pieces.
The question now is: who should protect Marian from this? Marian
herself, being a tailor, has neither the skill nor the interest
in learning to fight and should arguably not be bothered with it.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~
5. Resources
Anything notable and mud related that should be read/investigated.
Webpages:
A Rape in Cyberspace
<URL:
http://www.apocalypse.org/pub/u/lpb/muddex/vv.html>
The infamous article by Julian Dibbell.
How it really happened...
<URL:
http://www.apocalypse.org/pub/u/lpb/muddex/bartle.txt>
Richard Bartle's early history of MUDs.
Imaginary Realities
<URL:
http://imaginaryrealities.imaginary.com>
Online mud orientated magazine.
Killers Have More Fun
<URL:
http://www.wired.com/wired/6.05/ultima.html>
An article by Amy Jo Kim.
Lucasfilm's Habitat
<URL:
http://www.communities.com/company/papers/lessons.html>
<URL:
http://race-server.race.u-tokyo.ac.jp/RACE/TGM/Mud/habitat.html>
<URL:
http://www.communities.com/people/crock/habitat.html>
<URL:
http://beta.communities.com/>
Detailed documents about an ambitious graphical mud. [JCL]
Lydia Leong's MUD resource collection
<URL:
http://www.godlike.com/muds/>
[Raph K]
Marian Griffith's !Overlord project
<URL:
http://www.iaehv.nl/users/gryphon>
Full of information useful to mud designer/admins.
MUDDex
<URL:
http://www.apocalypse.org/pub/u/lpb/muddex/>
A collection of documents including Bartle's, Dibbell's mentioned
above. [Raph K]
Raph Koster's Website, Gaming Section
<URL:
http://mud.sig.net/raph/gaming/>
<URL:
http://mud.sig.net/raph/gaming/links.html>
Lead designer on Ultima Online, plenty of snippets on muds, particularly
those pertaining UO itself. Many of the above sites are index in the
links section. Raph's Laws of Online World Design can also be found
here.
Muds:
AlphaWorld: <URL:
http://www.cs.cuc.edu/~sopwith/aw/>
Anyone care to comment?
AmigaMUD: <URL:
telnet://mud.myrias.com:23>
Chris Gray's custom mud. Moving site. [Jun 1998]
Armageddon: <URL:
telnet://ginka.armageddon.org:4050>
To my knowledge the ONLY truly successful full-bore RP environment
based on a Diku-style server with full combat and the like. Often
cited as such at any rate. [Raph K]
Aturion Dynasty: <URL:
http://aturion.com:4444>
Almost all the muds done by Owen Emlen have interesting design
features to them too. [Raph K]
[See also EmlenMud II]
Avalon: <URL:
http://www.avalon-rpg.com>
Commercial text muds. Avalon has an interesting newbie tutorial
mode, and room description generation code that is nifty
too. [Raph K]
Cold: <URL:
telnet://ice.cold.org:1138>
A branch off the ColdMUD (below) using the Genesis driver, sometimes
referred to as Cold/Genesis or ColdX/Genesis.
ColdMUD: <
ftp://ftp.kanga.nu/pub/MUD/Servers/ColdMUD/>
ColdMUD is for all intents and purposes dead. Greg Hudson officially
stopped development of it back in 1994, and I just 'branched' the
ColdX/Genesis from it, rather than making an issue with people and
continuing to call my development of it 'ColdMUD'. [Brandon Gillespie]
CoolMUD: <URL:
http://csclub.uwaterloo.ca/u/sfwhite/coolftp>
Incredibly elegant server design. [JCL]
Dark Sun Online: <URL:
http://www.ssionline.com>
Commercial graphical mud with turn-based combat in a real-time
environment. [Raph K]
DartMUD: <URL:
telnet://dartmud.com:2525>
A very ambitious LP mud with lots of good ideas which never seemed
to have gelled together correctly. Plenty of bugs. A sequel is
being worked on.
DragonRealms (Gemstone): <URL:
http://dragonrealms.net>
Gemstone was and prolly still is the most popular mud in the
world, period. It evolved into DragonRealms. [Raph K]
Duris: <URL:
telnet://duris.org:6666>
A pk mud with economy?! [Down? Jul 1998]
Eternal City, The: <URL:
http://www.bignetwork/hc/ec>
Commercial mud using the Cold server.
EmlenMud II: <URL:
http://degu.cs.indiana.edu:6669/em2.html>
Looks like Owen Emlen is in the process of making a new mud.
Furcadia: <URL:
http://www.realtime.net/furcadia/>
A commercial graphical mud by Dr. Cat.
LambdaMOO: <URL:
http://vesta.physics.ucla.edu/~smolin/lambda/>
One of the pages for this MOO.
LegendMUD: <URL:
telnet://mud.aus.sig.net:9999>
The first classless mud, strange diku/LP hybrid. See Raph
Koster's bio.
Medievia: <URL:
telnet://medievia.intersphere.com:4000>
The most popular free gaming mud I know of. Pioneered the use of
things like in-game spam ads for themselves and lack of due credit
given for code (:P) but also has things like ASCII map terrain,
large algorithmically generated areas, etc. [Raph K]
M59: <URL:
http://www.3do/meridian>
Ask Mike S.
Mortal Conquest: <URL:
telnet://199.74.98.37:9999>
That game I can't remember with the whities and the darkies. [JCL]
By Own Emlen. [Down, 1st March]
MUD2: <URL:
telnet://mud2.com:23>
<URL:
http://www.mud2.com>
A licensed copy run by Bartle.
MUQ: <URL:
http://www5.biostr.washington.edu/~jsp/muq.html>
Northern Lights:
<URL:
http://www.ludd.luth.se/mud/aber/northern_lights.html>
<URL:
telnet://aber.ludd.luth.se:6715>
Realms, The: <URL:
http://www.realmserver.com>
Realms is a commercial graphical mud from Sierra.
Shades: <URL:
telnet://games.world.co.uk:23>
TODO - get Bartle's comment here.
Toril: <URL:
telnet://torilmud.com:9999>
One of two offshoots of Sojourn (other being Duris).
Trash: <URL:
http://games.world.co.uk>
Somewhere in the webpage with Shades. [Down, Sept 1998]
Tron: <URL:
telnet://polaris.king.ac.uk:3000>
An out and out pk mud, more of an arcade game using ASCII maps than
a mud in the conventional sense. Not one for the faint hearted.
Should you want a game but can't find anyone, drop me a bell.
Start learning with disc or spider. Be prepared to break your
keyboard. [Ling]
UOL: <URL:
http://www.ultimaonline.com>
Ask Raph K.
Worlds of Carnage: <URL:telnet//carnage.labs.emich.edu:4000>
The first Diku mud with an internal scripting language, called
"easyacts." This code formed the basis of the MobProgs put into
Merc 2.2. LegendMUD is a spiritual offshoot of Carnage, and Cythera is
a literal offshoot. (Interestingly, Damion Schubert, a designer on
M59, was also a Carnage immort alum). Imperium Gothique's scripting
was derived from either mobprogs or Carnage, not sure which. Carnage
definitely had a lot of influence on the world of Dikudom. [Raph K]
Notable muds yet to be found:
IOWA Project, The:
TODO - dig up references in Bartle's MUD survey, browse LambdaMOO
ftp site and MUDDev.
Keywords: MirrorWorld, Gods, Pippin ("Pip") Caudry.
Island:
Did this not die some time back? [Tho Keegan may yet resurrect it]
MUD1:
Although MUD2 is up above.
Sojourn:
Died. Will have to hang. Unlikely to find any info. Spawned Toril
and Duris, main difference being the way PK is handled. Search
Dejanews for references? (thanx Raph K)
Not so mud related webpages.
ANSI and VT terminal codes in general:
<URL:
http://www.cs.utk.edu/~shuford/terminal_index.html>
And in case you wanted to know more about VT-### in particular:
<URL:
http://www.sdsu.edu/doc/texi/screen_10.html>
<URL:
http://www.mhri.edu.au/~pdb/dataformats/vt100.html>
Or ANSI terminals:
<URL:
http://www.mhri.edu.au/~pdb/dataformats/ansi.html>
AI Nodes/ANN:
<URL:
http://206.107.246.21/packhste/5/>
Amit's Games Programming Page:
<URL:
http://www-cs-students.stanford.edu/~amitp/gameprog.html>
Anti-Mac interface:
<URL:
http://www.acm.org/cacm/AUG96/antimac.htm>
BSP trees:
<URL:
http://reality.sgi.com/bspfaq/index.shtml>
Image formats (esp PPM):
<URL:
http://www.dcs.ed.ac.uk/~mxr/gfx/2d-lo.html>
R-Trees:
<URL:
http://www.cs.cuhk.hk/~drsam/methods.html>
VR programming tutorial:
<URL:
http://www.cs.virginia.edu/~rg3h/networkVR/paper.html>
Programming references to get the budding scratch mud coder started:
BSD Sockets: A Quick And Dirty Primer
<URL:
http://world.std.com/~jimf/papers/sockets/sockets.html>
With other relevant papers pointed to by:
<URL:
http://www-users.cs.umn.edu/%7ebentlema/unix/>
Vic Metcalfe's (vic@brutus.tlug.org) unix-socket FAQ can be found at
Text version:
<URL:
http://unlser1.unl.csi.cuny.edu/faqs/sock-faq/usenet/unix-socket-faq.us
enet>
<URL:
http://www.ibrado.com/sock-faq/usenet/unix-socket-faq.usenet>
HTML version:
<URL:
http://unlser1.unl.csi.cuny.edu/faqs/sock-faq/html/unix-socket-faq.html
>
<URL:
http://www.ibrado.com/sock-faq/html/unix-socket-faq.html>
There's a nice leader page for the FAQ with other related pointers at:
<URL:
http://unlser1.unl.csi.cuny.edu/faqs/sock-faq/html/unix-socket-faq-1.ht
ml>
<URL:
http://www.ibrado.com/sock-faq/>
The TCP/IP applications FAQ can be found at (of course):
<URL:
http://www.faqs.org/faqs/internet/tcp-ip/applications-FAQ/index.html>
The TCP/IP FAQ from comp.protocols.tcp-ip (probably also on news.answers
etc) can be found at:
<URL:
http://www.dc.net/ilazar/tcpipfaq/default.htm>
The raw IP networking FAQ (most interesting to those of use doing
custom clients or server inter-connects) can be found at:
<URL:
http://www.whitefang.com/rin/>
The TCP/IP resources list has all sorts of useful pointers:
<URL:
http://www.faqs.org/faqs/internet/tcp-ip/resource-list/index.html>
Including the various BSD socket programming tutorials:
<URL:
http://ftp.std.com/homepages/jimf/sockets.html>
<URL:
http://ccnga.uwaterloo.ca/~mvlioy/stuff/ipc_intro_tut.txt>
<URL:
http://ccnga.uwaterloo.ca/~mvlioy/stuff/ipc_adv_tut.txt >
The Unix Refence desk is another good reference:
<URL:
http://www.geek-girl.com/unix.html>
As is Unix Guru Universe:
<URL:
http://www.ugu.com/>
And of course, W R Steven's page:
<URL:
http://www.kohala.com/~rstevens/>
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~
6. Glossary of Terms
The list has managed to come up with its own jargon. Here are some of
the current buzzwords:
Cooperative role-playing: Refers to a specific kind of RP where each
player's personal 'storyline' is paramount. All players are aware
of, and sensitive to, the needs of each player for their story, and
all actions are completely consentual. This is a type of play often
found on MUSHes.
Event: A system design alternative to polling loops. Objects generate
events, which are processed in their proper order by the event
handler. This is frequently clearer and far more efficient,
especially with large numbers of objects. Examples are a torch
generating an event to burn out in two hours, or a spell generating
an event for an earthquake to occur in four seconds.
The following is a compilable example of generic event-handling code in
C courtesy of Adam Wiggins.
---<begin code>---
#include <stdio.h>
typedef float Tick; /* Time counter type */
/* Defines for event types */
#define EVENT_ALPHA 0
#define EVENT_BETA 1
#define EVENT_GAMMA 2
#define NUM_EVENTS (EVENT_GAMMA + 1)
/* The event structure itself */
typedef struct SEvent
{
int Type; /* EVENT_x */
Tick RipenTime; /* time at which event ripens */
void *Data; /* any extra data to be
passed to the callback function */
struct SEvent *Next;
} Event;
/* Defininiton for the callback function type */
typedef void (*EventCallback)(void *);
#define EVENT(x) void (x)(void *)
/* Event function prototypes - these should be defined somewhere else, like
so:
EVENT(EventAlpha)
{
code to execute on event completion;
}
*/
EVENT(EventAlpha);
EVENT(EventBeta);
EVENT(EventGamma);
/* Master list of event callbacks, by type */
EventCallback EventCallBacks[NUM_EVENTS] { EventAlpha, EventBeta, EventGamma };
Event *EventList = NULL; /* Master event list */
Tick GameTick = 0; /* Current game time */
/* Call this to add an event "time" ticks into the future */
void AddEvent(int type, Tick time, void *data)
{
Event *newEvent, *e, *prev;
/* Sanity checking */
if (time <= 0)
return;
/* Create the event */
newEvent = (Event *)malloc(sizeof(Event));
newEvent->Type = type;
newEvent->RipenTime = GameTick + time;
newEvent->Data = data;
/* Descend the list until a later event is found */
for (e = EventList; e && e->RipenTime < newEvent->RipenTime; e e->Next)
prev = e;
// Insert the new event before that event
newEvent->Next = e;
if (prev)
prev->Next = newEvent;
else
EventList = newEvent;
}
/* Call the function below during your update loop */
/* The parameter is how many game ticks have passed since the last update */
void EventUpdate(Tick ticks)
{
Event *e, *next;
int update = 0;
GameTick += ticks;
/* Execute each event that is due to ripen */
for (e = EventList; e && e->RipenTime <= GameTick; e = e->Next)
{
(*EventCallBacks[e->Type])(e->Data);
update = 1;
}
/* Second pass, delete all ripened events */
/* This part is done in a seperate pass in case one of the event
callbacks
adds a new event, to avoid munging up the event linked list */
if (update)
{
for (e = EventList; e && e->RipenTime <= GameTick; e = next)
{
next = e->Next;
free(e);
}
EventList = e;
}
}
---<end code>---
Faucet->Drain economy: A virtual economic system wherein there is an
ongoing influx of new items into the game (usually via a reset model)
and a hopefully corresponding outflow, usually accomplished through
object attrition involving equipment danage, rent fees, etc. It is worth
noting that traditionally, designers have been unable to easily come up
with a big enough drain to handle all the 'water.' This is as opposed to
a "Closed economy" in which an attempt is made to close the loop,
creating new objects only when old ones are used up. [Raph K]
Fixed random seeding: Using a fixed value (such as a character's
unique ID, or the character's position in XYZ space) to seed the
random number generator, assuring that the same random number will
always be rolled if the circumstances are exactly the same, but
requiring no storage. This allows parts of the world or its
behaviours to be dynamically generated from the seed value as
needed, and yet to have each "new copy" be the same as all the
others because the seed calue hasn't changed.
Fluidity of Identity: Referring to the difficulty of positively identifying
a single person who takes many guises in a game world. Any particular
action against one of those guises is fairly ineffective; they choose
another and continue. This makes it very difficult to pin down
troublemakers. ATtempts at identifying people based on their hostname
(site deny/allow), e-mail address (email registration), credit card number
(for commercial ventures), or just asking really, really nicely are all
easily circumvented, especially when it is easy to create new characters
or
accounts (that is, the process is short and automated). This frequently
makes it difficult to implement 'real world' solutions to in-game problems
such as psychotic killing sprees. Once you catch someone and lock them
away
or put them to death in RL, they are gone. When you do this on most muds,
they just log on two seconds later with another character.
Full world reset, aka "groundhog day" muds: Muds wherein resets occur
globally, simultaneously (sf reset and repop). [RaphK]
Functional roleplaying: A kind of gaming, whilst GoP motivated, is heavily
tailored to the in-game reality. There's no thee's or thou's, or even
pretension of IC/OOC separation, but an awful lot of attention is spent
by the player in working his character thru the game realities rules as
it controls and affects his character. Examples would include
negotiation of reputation and influence systems, votes, political systems,
clans and guilds and other similar structures, etc. Appearance is not
the key. Function is. [JCL]
Global namespace: Referring to the fact that most muds rely on characters
(and sometimes other objects) are given a single and unique name.
Typing 'who' on most muds gives you a list of these; if you see
someone named Bob you know that he is the only Bob in the world, and
can't be confused with anyone else. This is as compared to a system
of generated descriptions to which players can attach proper names
as they please, which may or may not overlap or match up with the
names assigned by other players.
GoP: Short for 'game-oriented play' or possible 'goal-oriented play'.
This is usually a competitive style of play usually oriented around
the accumlation of various resources (money, power, combat ability).
Levels: For the purpose of keeping discussions generic, this term may be
used as an abstract measurement of a character's ability, skill or
expertise whether the game system is level-based or skill-based.
Eg: "If a low level character tries XXX a high level character..."
The precise details are not of interest as opposed to the impact and
result of the undefined imbalance.
Lockless server or DB:
Events request objects from the DB.
If the object is not in the cache, the DB loads the object.
The DB replies to the event with a read-only shared reference to the
object.
The event is added to the "interested parties" list for the object.
If the event attempts to modify the object, a new local, event-specific
copy of the object is made, and the changes are made to that. A copy
of the original reference however is still kept.
The event (loosely) attempts to keep track of what members of the
object it referenced.
During the execution of an event. all external IO is buffered and held.
Upon the event terminating it compares its copy of the original object
(the local reference) with the object that's actually in the DB (may
have been changed by events commiting during the current event's
execution). Some intelligence is attempted here to only compare those
values etc which were referenced by the event.
Should the original copy and the current-in-DB copy compare OK, then
the event commits, the IO is released, and all its changes in its
written-to copies are commited atomically. This is the
Compare&Commit, or C&C.
If the C&C fails, the event is thrown away, all the copies are released,
the IO is discarded, and the event is rescheduled to try again.
There is also some background intelligence here where the DB watches
the objects that are affected by event's C&C'ing, and will signal the
other events that are members of those object's interested party list
that they may be invalidated by the other event's C&C and so should
kill themselves and reschedule.
ref: DEMOS and the DOME project (JCL)
Markup language: An internal set of codes used by a server to generate
semi-dynamic messages. An example is "%c dives %I %o" which might result
in "Bubba dives behind the wall", "A woman dives into the pool", or
any number of other strings.
mud or MUD: It is not an acronym. It is a collective term for all the
types of games discussed on this list, including both RP and GoP.
[NB: Another description may be found at the list's homepage
<URL:
http://www.kanga.nu/lists/listinfo/mud-dev/> ]
Mule: Character created on goal-orientated muds those sole purpose is to
supplement a player's primary character by supplying services such as
equipment repair. Mules usually have skills that cannot be obtained
without creating a new character but are perceived to be undesirable to
play. For example, an alchemist class could be considered unenjoyable
to play but due to their special ability to repair equipment, the regular
players create mule alchemists just to access that ability.
Object: Because most of the servers discussed here are
object-oriented, the word object is being used in its general
programming sense to include characters, locations, inanimate items,
and so forth, rather than referring to only inanimate items as is
typical in some mud servers.
PK, player-killing: The intentional killing of a player character by
another player, with or without the first player's prior knowledge,
agreement, or consent. [JCL]
Psychological disinhibition: The term for when people act less inhibited
than normally because of circumstance. All behaviors online tend to become
less inhibited, and the greater the absence of identity cues for the
people
you are interacting with, the less inhibited the behaviors tend to get.
[RaphK]
Realism: This is not necessarily corespondance to the real world, but
rather refers to internal consistency. In many cases using the
working of real world systems (physics, for example) is a good
example for how to build a consistent system for a game world.
To quote:
"This is, of course, partially my invention, to suit the gaming world
we are working on, and is not intended to mirror Real Life - just to
borrow enough bits and pieces from it, so that it is recognized as
somewhat structured (rather than totally whimsical) to the player."
- Holly Sommer
Repop: See Reset.
Reset: Usually a function called in a mud at irregular intervals, the
purpose of which is to put back the game, or some fragment of the
game or game world into a known state. Typically this might mean
locking an opened door, or resurrecting an NPC that was killed by a
player and putting him back to guard the door, Resets and repops
are common on games that promote repetitive actions for advancement.
Skill net: A single layered skill web. Skills are directly weighted to
each other. See skill web (NY)
Skill tree: A skill system where skills have a single parent and
several children. A skills at the bottom of the tree being very
specialised. Skills higher up the tree will affect the value of
skills further down.
Skill web: a non-heirarchical two layered skill system wherin each
skill is weight-related to an arbitrary number of attributes, and
the improvement of skills therefore automatically improves related
skills. Examples of skills might be rowing and flycasting, examples
of attributes, strength (upper arm) and precision (forearm).
[Note: I triple weight my skill web, so that there are direct
connections to the condition of the character's body and mind, and
so that the resiliance of same are improved by conditioning. Nathan Y]
[Note 2: The web is modeled after a simple neural net design I found in
Dr. Dobbs' Journal. Nathan Y]
Verb binding: Attaching verbs to an object, such as 'fly' to a
jetpack. The command essentially does not exist when you don't have
the jetpack.
Virtual sociopath: a player who acts sociopathically in terms of the mud
(eg, shows no empathy towards any other players and therefore is a willing
killer of them) but who is perfectly normal in real life--someone whose
disassociation from others only occurs in an online setting, because of
their lack of empathic connections to other players. See "psychological
disinhibition." [RaphK]
World state: a mud which saves world state is one in which there is
persistence not only of characters but also of objects other than
characters. Worlds which do not save world state (such as muds derived
from Dikus) only save character data and the world itself (other than its
static map) is not persistent over reboots. A snippet from my website:
--->
The "middle layer" referred to is the one of the three layers of
significance in a virtual world: that which is the static database, that
which is the play of data on said static database, and that which is the
dataset of players themselves. Depending on the method of state-saving of
the mud, they may save one, two, or all three of these things. As an
example, a classic Diku saves only the third layer: players. Ultima Online
saves both players and the environment. A typical MUSH saves players, the
environment, and also the actual map and setting which holds the
environment, since MUSHes allow dynamic alteration of the static data.
Some
early muds did not save any of the three, and thus were not truly
"persistent."
<---
[RaphK]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~
7. Changes, To Do & Acknowledgements
990613 -- Frequently Asked Questions: Brought up to date with current
affairs.
990514 -- Resources: New link to Imaginary Realities, a mud magazine.
990417 -- General correction of Frequently Asked Questions. However,
have not been able to get to kanga to verify new addresses.
990321 -- Scenarios: Added two more scenarios, The Stamp Collector's Dilemma
by Dr. Cat and The Tailor Problem by Marian Griffith.
Glossary: Appended generic event-handling C source code to the
term
"event" courtesy of Adam Wiggins.
Added new definition, "mule".
990112 -- The Members: Whole section removed. Look forward to an HTML
version to appear on kanga sometime soon (this weekend hopefully).
981213 -- The Members: Updated Adam Wiggins' bio. Subjectively stripped
the bios of members that haven't posted recently, includes:
John Bertogio; Reed Copsey, Jr; Marc Eyrignoux; David Love (aka
Sauron); Katrina McClelan; and Greg Munt. Expect the whole
section to go in favour of an HTML version in the New Year
integrating the thread titled "Current Projects".
981110 -- Just found a long lost email for FAQ alterations.
FAQ: Changed MUD-Dev links from /index.html to /
The Members: Minor alterations to JCL's bio.
Resources: Link and brief for original ColdMUD added.
More links for Habitat added.
Displaced programmming links with those supplied by
JCL.
980907 -- Resources: All things ansi and telnet related added.
980811 -- The Members: Matthew R. Sheahan's bio added.
Greg Underwood's bio amended.
Resources: Amit's Games Programming Page added.
Whole bunch of programming references added.
Glossary: "Fluidity of Identity" added.
980708 -- Snipped signatures from members' bios suggested by Alex Oren. :(
Minor typo and adjustments suggested by JCL. Overdue addition
of MUDDex and Lydia Leong's MUD resource collection to Resources.
"Faucet->Drain economy" term for Glossary added. Stole list
charter from homepage to act as a welcome message of sorts.
Small reorganisation of sections 1,2,3. Added Bartle's early
MUD history to web link in Resources. The Bungle link in
Resources
disappeared, added back in, though different site. Quietly
dropped
Derrick Jones' bio (was empty).
980506 -- Moved the changes list to a section in the back, only the most
changes since the last post appear here now. Appended Holly
Sommer quote to "realism" glossary term. Added "functional
roleplaying" glossary term. Updated Frequently Asked Questions.
Added networking tutorial web link to Resources. Added Bungle
web link to Resources.
980428 -- New scenarios section,a couple more glossary terms and more
member's bios.
980308 -- Mailing list invite.
980301 -- Even more addresses for the resource section.
980201 -- More bios, more addresses for the resource section.
980107 -- Added a few more questions. Previous topics now has its own
universe as suggested by Adam Wiggins. Plonked in a resources
section. Took out standard technical terms as suggested by Adam
Wiggins.
971201 -- FAQ created.
To Do:
Conventions of example scenarios (Bubba, Boffo, Buffy, etc)
List of references for specific scenarios/docs (Habitat/Great God GooGoo,
Crystalline Tree, recognising Sting in the weapons shop, etc).
Solutions for the scenarios?
Obtain addresses for the muds in the resource section.
Statement of topic definition (cf welcome message).
Update previous topics section.
Acknowledgments:
Everyone on the list who contributed with a bio, everyone on the
list who posts and special thanks to Jon A. Lambert, Adam Wiggins,
Nathan Yospe, Raph Koster and lastly but definitely not the least,
J C Lawrence.
--
Yes - at last - You. I Choose you. Out of all the world,
out of all the seeking, I have found you, young sister of
my heart! You are mine and I am yours - and never again
will there be loneliness ...
Rolan Choosing Talia,
Arrows of the Queen, by Mercedes Lackey