2023-08-10 00:10:01 +00:00
|
|
|
#+TITLE: 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 [[*Settings][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][players]] and [[*Objects][objects]].
|
|
|
|
|
|
|
|
***** Exits
|
|
|
|
Exits are connections to other [[*Areas][areas]] or [[*Rooms][rooms]], which could be in another [[*Region][region]]
|
|
|
|
or [[*Dungeons][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][areas]] or [[*Rooms][rooms]], which could be in another [[*Region][region]]
|
|
|
|
or [[*Dungeons][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][dungeon]] may create and destroy the instance of the dungeon.
|
|
|
|
|
|
|
|
** Objects
|
2023-08-11 00:33:32 +00:00
|
|
|
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.
|
|
|
|
|
2023-08-10 00:10:01 +00:00
|
|
|
** Events
|
2023-08-14 00:39:05 +00:00
|
|
|
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.
|
2023-08-11 00:33:32 +00:00
|
|
|
|
2023-08-10 00:10:01 +00:00
|
|
|
** Players
|
2023-08-14 00:39:05 +00:00
|
|
|
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.
|
2023-08-11 00:33:32 +00:00
|
|
|
|
2023-08-10 00:10:01 +00:00
|
|
|
** Abilities
|
2023-08-13 02:19:02 +00:00
|
|
|
Abilities are similar to [[*Uses][uses]], with the distinction of being tied to [[*Players][players]] and
|
|
|
|
not [[*Objects][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.
|
|
|
|
|
2023-08-14 00:39:05 +00:00
|
|
|
*** Character Point Cost
|
|
|
|
The amount of character points it costs to "purchase" the skill, and add it to
|
|
|
|
the player's character.
|
2023-08-13 02:19:02 +00:00
|
|
|
|
|
|
|
*** 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.
|
2023-08-11 00:33:32 +00:00
|
|
|
|
2023-08-10 00:10:01 +00:00
|
|
|
** 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 [[*Worlds][world.]]
|