README.md (3175B)
1 # rpgsheet 2 3 `rpgsheet` is a CLI/TUI character sheet application for tabletop RPGs. 4 5  6 7 ## Dependencies: 8 * `rolldice` for, uh, rolling dice 9 * `bc` for calculations 10 11 ## Features 12 * **System-agnostic:** Character sheets are stored as YAML files, and the data structure is not designed with a particular TTRPG system (ie dnd5e). You can make a template for your favorite system! This is also a bit of a downside; `rpgsheet` is quite usable, but you might miss some niceties that it could provide if it knew more about your specific system. 13 * **Flexible:** You can define whatever tabs or windows you want for your character sheet! The template is just a starting point. 14 * **Auto-rolling:** As long as your system uses dice rolls that can be represented with the standard `NUMdFACES+MOD` notation, you can easily define actions which will automatically be rolled. 15 * **Auto-calculation:** You can define values in your character sheet which are dependent on other values. For instance, you can define a hard-coded `proficiency` value, and then define your shortsword attack modifier as `3+proficiency`. (For DnD, you probably actually want a hard-coded `strength` ability score, then a `STR` value defined as `(strength-10)/2`, then define your shortsword attack as `STR+proficiency`.) 16 17 ## Unimplemented planned features 18 * Configurable controls 19 * Be able to have a tab with multiple rows of windows 20 21 ## Planned related projects 22 * `dndsheet` -- `rpgsheet` but with a streamlined dnd5e-specific interface which, given a sheet following a particular standard, can provide an experience tailored to the system. 23 24 ## Installation 25 Install Nim and run: 26 27 `nimble install rpgsheet` 28 29 You can also clone this repo and then run this in the directory: 30 31 `nimble install` 32 33 # The sheet format 34 Sheets are stored as YAML files. Keys are limited to alphanumeric characters, plus `_`, `~`, and `'`. When displayed "nicely" in the interface, `_` is converted to a space, and `~` to a hyphen. 35 36 All window names and expressions (items that go in windows) must have unique names. 37 38 Here is an extremely pared-down design so you can see the structure: 39 ```yaml 40 name: Character Name 41 class: Character Class 42 level: 1 43 tabs: 44 - main: 45 - stats 46 - inventory 47 - attacks: 48 - weapons 49 - spells 50 expressions: # items that appear in the windows 51 strength: 52 modifier: 15 # use `modifier` for flat values 53 window: stats 54 STR: 55 # Modifiers can be defined in terms of 56 # other diceless expressions 57 modifier: (strength-10)/2 58 window: stats 59 sword_attack: # we cannot have two expressions named `sword` 60 dice: d20 # must be in NUMdSIDES format; no modifiers 61 modifier: STR # here is where your modifier goes 62 window: weapons 63 # Extra information, shown at the bottom of the screen 64 desc: Swing your really cool sword 65 sword: 66 # Note that you don't need to supply dice or modifiers 67 desc: Your really cool sword 68 window: inventory 69 # will be displayed as "Carl's Terrifyingly-hideous Face" 70 carl's_terrifyingly~hideous_face: 71 dice: 8d12 72 desc: 9th level. Oh god, oh no, look away if you want to live. 73 window: spells 74 ```