SilverMUD/notes/SilverMUD-Design.org

116 lines
5.0 KiB
Org Mode
Raw Normal View History

#+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.
** 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
** 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
** 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
** 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.]]