SilverMUD/notes/SilverMUD-Design.org

5.0 KiB

SilverMUD Design Document

What Is The Main Goal Of SilverMUD?

The main goal of SilverMUD is to create a text-based role playing game system that is setting-agnostic, where a game master can create new content through interacting with a Scheme REPL. SilverMUD will tend to favor simple abstractions for game concepts, in order to accomplish being more setting-agnostic and easy to play over the internet.

Concepts:

Worlds

Worlds are a collection of regions and dungeons, tied to a setting.

Regions

Regions are a collection of areas bundled together. This lets them be unloaded and loaded as a group, as well as providing a mechanism for dividing your areas based on locales or otherwise.

Areas

Areas are actual locations a player can be in. They have a description, name, and can hold players and objects.

Exits

Exits are connections to other areas or rooms, which could be in another region or dungeon. They may have a "challenge" to pass, in order to use them, or a requirement to access them in the first place.

Dungeons

Dungeons are similar to a region, but differ in one crucial way; they are instanced, allowing for a single player or party (or potentially multiple) to enter a copy of the dungeon, allowing for setups similar to a MUD or MMO, or easily reusable encounters.

Rooms

Rooms are the dungeon equivalent to areas. They are separated purely to strengthen the distinction between dungeons and regions; this may change to add additional functionality

Exits

Exits are connections to other areas or rooms, which could be in another region or dungeon. They may have a "challenge" to pass, in order to use them, or a requirement to access them in the first place. The exit leading to or from a dungeon may create and destroy the instance of the dungeon.

Objects

Objects are a representation of items that can be in areas, rooms, or player's inventories. They have a name, description, and uses. Looking at an object displays the name, description, and uses.

Uses

Uses are Scheme functions pushed onto the event queue when a player activates them through the use command.

Uses may additionally have a usage requirement, and a visibility requirement.

A usage requirement is a Scheme function that is passed a reference to the player attempting to activate the use. It returns #t or #f, corresponding to the activation being successful or a failure.

A visibility requirement is a Scheme function that is passed a reference to the player viewing the object. It returns #t or #f, corresponding to the use being displayed to the player or hidden.

Properties

Objects may have additional properties that dictate how they can be interacted with. Currently planned properties are:

player-pick-up
Defines whether a object can be moved to a player's inventory from an area or room.
player-put-down
Defines whether a object can be moved from a player's inventory to an area or room.

Events

SilverMUD centers around a central events queue; a queue of Scheme programs, which are spawned in response to most things which happen in the game and mutate the global state. Events are constantly evaluated by a thread which has access to the relevant data structures.

Player commands are parsed from the command format into events by the input thread.

Players

Players will be designed more fully as gameplay aspects are implemented. They currently are planned to have core statistics, skills (setting-specific statistics), abilities, health points, ability points, and character points, which are used to purchase core statistic points, skill points, and abilities.

Abilities

Abilities are similar to uses, with the distinction of being tied to players and not objects. They have a name, description, usage cost, skill point cost, and effect, and a usage requirement.

Usage Cost

The usage cost of an ability refers to the amount of ability energy it costs a player to attempt to activate it using the /activate command.

Character Point Cost

The amount of character points it costs to "purchase" the skill, and add it to the player's character.

Effect

Effects are Scheme functions pushed onto the event queue when a player activates them through the /activate command.

Usage Requirement

Abilities may optionally have a usage requirement. A usage requirement is a Scheme function that is passed a reference to the player attempting to activate the ability. It returns #t or #f, corresponding to the activation being successful or a failure.

Settings

Settings are a combination of definitions of items, custom rules, and other miscellaneous things like common description strings and enemy types. It's somewhat analogous to a sourcebook or rulebook for a traditional table-top RPG, allowing the game to take on different forms and settings depending on which ones are being used. These are loaded as Scheme files in a world.