Leprechaun
Leprechaun is a public-domain mud library for
DGD
and its kernel library. So far, the Leprechaun system library has the
following features:
- Middle-weight Objects
- Light-weight objects that emulate some properties of persistent
objects, notably callouts. They can be used for the bulk of items in a
mud.
- Object Numbers
- Persistent and middle-weight objects are assigned globally unique
object numbers. Objects can be found by number. Object numbers are
essential in avoiding automatic duplication of middle-weight objects when
referencing them across execution rounds.
- Inventory System
- Classic inventory system with inventories, environments, and
vetoable object movement. Only persistent objects can be environments.
Moving an object from one environment to another is an atomic operation.
Environments fascilitate middle-weight objects.
- Program Database
- The object manager tracks all program issues in the mud, including
the kernel and system auto objects. The program issues can be explored as
a directory tree using the
pls command.
- Creator Arguments
- Pass arguments to the
create() function when creating
persistent clones and light-weight objects.
- Hidden Master Objects
- The master objects of clonable and light-weight objects are hidden.
Like inheritable objects, they cannot be found or called by name.
- Atomic Object Creation
- An object can undo its creation by raising an error in the
create() function.
- Restrictions on Undefined Functions
- Only inheritable objects can have undefined functions. (For now, this
also means that objects with undefined functions cannot be privately
inherited.)
- Idiomatic Design
- Designed with multi-processing and swapping in mind.
The Leprechaun distribution also includes a game library under
development, intended to showcase the features of the system library. The
game library currently has the following features:
- The game objects consist of rooms, creatures, and items. Items are
further refined into weapons, armor pieces, containers, and heaps.
- Command parser for game commands. It generates action objects. Action
objects can also be created programmatically, for instance by an AI.
- Action objects are enqueued in creatures.
- Dynamic attribute system with bonuses from race, guild, and
equipment.
- Various utility libraries of reusable functions.
For more information, see the
project page at
GitHub.