An open API service indexing awesome lists of open source software.

https://github.com/ly0va/beastvault

Daggerheart plugin for Obsidian.md
https://github.com/ly0va/beastvault

daggerheart obsidian

Last synced: about 1 month ago
JSON representation

Daggerheart plugin for Obsidian.md

Awesome Lists containing this project

README

          

# BeastVault

An [Obsidian.md](https://obsidian.md) plugin for Daggerheart TTRPG GMs to search, edit, and create beautiful adversary & environment stat blocks.

## Features

- Search and insert adversaries & environments from the SRD via commands
- Beautifully render editable stat blocks with intuitive UI
- Roll dice for attack or damage with one click
- Track marked HP, stress, countdowns and feature uses
- Battle points counted in the status bar
- Customizable colors to look pretty in any color theme
- Works in a canvas for [FCG](https://freshcutgrass.app)-style encounter building

### Planned

- [x] Local library support for homebrew stat blocks to search over
- [ ] Filtering and sorting via Bases
- [ ] "Summon" buttons for adversaries/environments that might summon others
- [ ] Ability to mark adversaries with conditions (e.g. Vulnerable, Restrained)

## Installation

### Manual

1. Go to the [latest release](https://github.com/ly0va/beastvault/releases/latest)
2. Download `main.js`, `manifest.json` and `styles.css`
3. Inside your Obsidian vault, create folder `.obsidian/plugins/beastvault`
4. Copy the downloaded files to this folder
5. If Obsidian was open, restart it
6. Navigate to `Settings` > `Community plugins` and enable BeastVault

### Automatic via [BRAT](https://github.com/TfTHacker/obsidian42-brat)

1. Install the [BRAT](obsidian://show-plugin?id=obsidian42-brat) plugin from the community plugins browser
2. Navigate to BRAT settings and click `Add beta plugin`
3. Enter `ly0va/beastvault` as the repository and click `Add plugin`

## Showcase

### Insert from library

Insert an adversary via a command by going `Ctrl+P` > `Insert adversary from library` or using the side ribbon menu.

![Insert an adversary from library](./media/insert.gif)

> [!TIP]
> For quicker access, bind plugin commands to a key combination of your choice from the Hotkeys settings tab.
> I use `Alt+A` to insert an adversary & `Alt+E` to insert an environment.

> [!TIP]
> `Click` threshold buttons to mark the corresponding amount of HP. Use `Alt+Click` to clear it instead.

---

### Homebrew

Make your own homebrew adversary by creating a `daggerheart` code block, or edit an inserted one by clicking the `>` button in the top-right corner.

![Create homebrew adversary](./media/create.png)

> [!TIP]
> You can insert an empty adversary template by using the `Insert adversary template` command.

> [!IMPORTANT]
> Do not use `TAB` in stat blocks. The indents for features must be manually indented with spaces.

---

### Build encounters

Build out full encounters (works in a canvas too!) and track their HP & stress during a session. Marked HP & stress are preserved even after you close Obsidian.

![Canvas encounter](./media/encounter.gif)

> [!TIP]
> Building encounters in a canvas is made much more convenient by enabling node auto-resizing in [this plugin](https://github.com/Developer-Mike/obsidian-advanced-canvas).
> During a playing session, using canvas in read-only mode is recommended.

---

### Library management

Go to `BeastVault settings` > `Library folder location` and enter a folder name. All notes in this folder will be scanned for `daggerheart` codeblocks, which will be available in search.

You can also import adversaries in bulk, by creating `.json` or `.yaml` files in this folder, which can contain a single stat block or an array of stat blocks.
The structure of the stat blocks is documented below.

Additionally, it is possible to enable compatibility with [Fantasy Statblocks](https://github.com/javalent/fantasy-statblocks) in settings.
With this enabled, any FSB-compatible blocks found in the notes inside the library folder will also be available in search, as long as they have `layout: Daggerheart Adversary` or `layout: Daggerheart Environment`.

> [!IMPORTANT]
> - Only entries with a valid string `name` are added to the library.
> - After adding, deleting, or modifying anything in the library, run `Refresh library` either by using the side ribbon menu or the command palette.
> - If an entry has no `hp` and no `stress` fields, it is added as an environment; otherwise - as an adversary.
> - All other fields are optional.

## Reference

The `daggerheart` code block parses the adversary or an environment as [YAML](https://yaml.org) with the following properties:

| Property | Definition | Example |
| --- | --- | --- |
| `name` | Name of the adversary | `Bear` |
| `tier` | Adversary tier | `1` |
| `type` | Type of the adversary | `Bruiser` |
| `desc` | Adversary description | `A large bear with thick fur and powerful claws.` |
| `difficulty` | Adversary difficulty | `14` |
| `weapon` | Name of the adversary's weapon | `Claws` |
| `range` | Range of the adversary's weapon | `Close` |
| `damage` | Amount and type of adversary's weapon damage | `1d8+3 phy` |
| `hp` | Total adversary hitpoint slots | `6` |
| `stress` | Total adversary stress slots | `3` |
| `thresholds` | Adversary thresholds, separated by a `/`; leave blank for minions with 1 HP | `9/17` |
| `attack` | Adversary attack bonus; click to roll for attack | `+1` |
| `xp` | Adversary experiences | `Ambusher +2, Keen Senses +3` |
| `motives` | Adversary's motives and tactics | `Climb, defend territory, pummel, track` |
| `features` | List of feature objects, see table below | |
| `id` | Stat block id, used by the plugin to track marked HP, stress etc; inserted automatically, can be any random string; defaults to `fileName::adversaryName` | `a2sd4vsf` |

`features` properties:

| Property | Definition | Example |
| --- | --- | --- |
| `name` | Name of the feature | `Relentless (2)` |
| `type` | Feature type | `Passive` |
| `desc` | Feature description; supports markdown | `Make a standard attack. On a success, the target is *Vulnerable* until they next act.` |
| `uses` | Uses per scene (for those features that limit them) | `2` |
| `countdown` | Size of the countdown activated by the feature, if any | `6` |
| `flavor` | Hints for GM/PCs for flavoring an adversary or environment for their setting | `Have any of the PCs forded rivers like this before? Are any of them afraid of drowning?` |

For environments, `weapon`, `damage`, `range`, `hp`, `stress`, `thresholds`, `attack`, `xp`, `motives` are not set.
Instead, additional properties are available:

| Property | Definition | Example |
| --- | --- | --- |
| `impulses` | Environment impulses | `Bar crossing, carry away the unready, divide the land` |
| `adversaries` | Potential adversaries in an environment | `Guards (Bladed Guard, Head Guard), Masked Thief, Merchant` |
| `tone` | Tone and feel of the environment | `Musty and mournful, serene yet slightly wrong` |

All of the properties are optional, and simply won't render if skipped.

## Attributions

Plugin inspired by [FreshCutGrass](https://freshcutgrass.app) and [DaggerForge](https://github.com/Torutu/daggerforge).

### Copyright Notice

This plugin includes materials from the Daggerheart System Reference Document 1.0, © Critical Role, LLC. All rights reserved.

Public Game Content created and owned by Darrington Press, LLC. Available at https://www.daggerheart.com.

Licensed under the Darrington Press Community Gaming License: https://darringtonpress.com/license/.

Stat blocks may have minor edits to correct obvious errors.