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.
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
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.