03 features - OldStarchy/dnd GitHub Wiki
Room Information
Presents information about players presence and allows room moderation
- Creating rooms
- Inviting others to rooms
- Joining rooms
- Modifying room attributes and information
Messaging
Allows direct messaging between Room Members (GMs and Players)
This represents in-world communication between characters as well as allowing players to interact with the world (via the GM) in ways hidden from other players.
Additionally, the GM may choose to present the players with opportunity to message NPC's, such conversations would be managed by the GM, with tentative plans to use an LLM to fill the role of NPC's.
Character Management
Both Players and GM's can create characters, both PC's and NPC's can be maintained here.
GM's can create both Unique Characters (aka recurring NPCs) and character archetypes used as a template for one-off characters (those that appear during an encounter and are disposed of after their role in the story has ended, e.g. "Goblin 1").
The Unique Characters section allows managing rich information about characters and is flexible to store both arbitrary and structured data.
Character Archetypes at least initially will be fulfilled by the DnD5EAPI service that provides many creatures defined by various DnD literature.
Though recurring characters across games are possible, characters will be scoped to "worlds" (aka Games). As different games follow different rules and mechanics, its not guaranteed that character information will be transferable.
Automation
In many TTRPGs there are automatic state changes that take place during particular events. For example, debuff's like poison may only last a number of turns and can that can be tracked automatically.
Where it makes sense, there will be automations available to help manipulate the game state.
These automations can be customized in a "When X occurs[, if Y], do Z" editor. The capability of this editor will depend on implementation details TBD.
Eg. 1 decrementing debuffs
- When 'end of turn' occurs, do 'For each {current.turn.players}: For each {player.debuffs}: if debuff.timer > 0 decrement debuff timers; if debuf.timer == 0: Remove Debuff {player} {debuff}'
Eg. 2 "popcorn initiative"
- When 'end of turn' occurs,
- do 'For each {current.turn.players}: Add Debuff {player} "already had turn"'
- do 'Set currentTurn.players: {prompt {current player} choice in {current.encounter.players where !"already had turn"}}'
- if {players.every("already had turn")}, do 'Remove Debuff {current.encounter.players} "already had turn"'
Automations will have access to as much structured information about the game state as possible, as well as being able to define and query custom metadata about any object in the game.
Extensibility
Automations will only go so far, ultimately the most customizability will be provided by a plugin system that will provide full kits of new functionality.