> [!NOTE|div-m] Player Name: `BJ`
> [!column|no-i no-t]
>> [!div-m|no-title]
>> ![[bear witcher mentor - bogdan rezunenko.jpg]]
>
>> [!div-m|no-title] Place Name
>> ~~~meta-bind
>> INPUT[select(
>> option(1, ℹ️General),
>> option(2, 🧙Description),
>> option(3, ⚙️Configure),
>> option(4, 📝DM Notes),
>> class(tabbed)
>> )]
>> ~~~
>>>[!tabbed-box-maxh480|10]
>>> >[!div-m|no-title]
>>> > ![[#General|no-h clean]]
>>>
>>> >[!div-m|no-title]
>>> > ![[#Description|no-h clean]]
>>>
>>> >[!div-m|no-title]
>>> > ![[#Configure|no-h clean]]
>>>
>>> > [!div-m|no-title]
>>> > ![[#DM Notes|no-h clean]]
>>>
> [!NOTE|no-title]
> ~~~meta-bind
> INPUT[select(
> option(1, 🤹Abilities+Skills),
> option(2, 💪Traits),
> option(3, ⚔️Inventory),
> option(4, 🔗Connections),
> option(5, 🧑🤝🧑Relationships),
> class(tabbed)
> )]
> ~~~
> >[!tabbed-box-maxh]
> > >[!div-m|no-title]
> > > ![[#Skills|no-h clean]]
> >
> > >[!div-m|no-title]
> > > ![[#Traits|no-h1 clean]]
> >
> > > ![[#Inventory|no-h1 clean]]
> >
> > > [!div-m|no-title]
> > > ![[#Connections|no-h1 clean]]
> >
> > > [!div-m|no-title]
> > > ![[#Relationships|no-h1 clean]]
---
# General
```badges
items:
- label: Race
value: '{{frontmatter.char_race}}'
- label: Level
value: '{{frontmatter.level}}'
- label: Initiative
value: '{{frontmatter.modifier}}'
```
<br>
```badges
items:
- label: Spell Save
value: 14
- label: AC
value: '{{frontmatter.ac}}'
```
<br>
```healthpoints
state_key: beornwulf_health
health: '{{ frontmatter.hp }}'
reset_on: long-rest
hitdice:
dice: d10
value: 2
```
```event-btns
items:
- name: Short Rest
value: short-rest
- name: Long Rest
value: long-rest
```
# Description
Beornwulf is a grizzled veteran soldier. He was already a fighting man of 20 when The Riving occurred, and fought with his shield-brothers to hold the line against the chthona when they descended upon Ingeskai.
# Configure
| Stat | Value |
| ---------- | --------------------------------------------- |
| Status | `INPUT[template-person-status][:char_status]` |
| Race | `INPUT[template-person-race][:char_race]` |
| Class | `INPUT[template-person-class][:char_class]` |
| Level | `INPUT[number:level]` |
| Gender | `INPUT[template-person-gender][:char_gender]` |
| Age | `INPUT[template-person-age-range][:char_age]` |
| HP | `INPUT[number:hp]` |
| Max HP | `INPUT[number:max_hp]` |
| AC | `INPUT[number:ac]` |
| Initiative | `INPUT[number:modifier]` |
# DM Notes
This is BJ's character if he's ever free for a session, but he makes a good NPC in the meantime. Good for DM exposition or hints without overusing Maerwynn.
# Skills
```ability
abilities:
strength: 19
dexterity: 16
constitution: 16
intelligence: 11
wisdom: 14
charisma: 10
proficiencies:
- strength
- constitution
```
<br>
```skills
proficiencies:
- acrobatics
- athletics
- intimidation
- perception
```
# Traits
Feats, class features, and other traits are listed here.
### Resilient in Body and Mind (Base Feat)
**_Resilience._** You have Resistance to Poison damage. You also have Advantage on saving throws you make to avoid or end the [[3-Mechanics/Rules/Conditions.md#Poisoned|Poisoned]] condition.
**_Toughness._** Your Hit Point maximum increases by 1 when you take this Base Feat, and it increases by 1 again whenever you gain a level.
**_Focused._** You have Advantage on saving throws you make to avoid or end the [[Conditions#Charmed|Charmed]] condition.
**_Trance._** You don't need to sleep, and magic can't put you to sleep. You can finish a Long Rest in 4 hours if you spend those hours in a trancelike meditation, during which you retain consciousness.
### Savage Attacker (Origin Feat)
You've trained to deal particularly damaging strikes. Once per turn when you hit a target with a weapon, you can roll the weapon's damage dice twice and use either roll against the target.
### Defence (Fighting Style)
While you're wearing Light, Medium, or Heavy armour, you gain a +1 bonus to Armour Class.
### Fighting Style (Fighter 1st Level)
You gain a Fighting Style feat of your choice. When you gain a Fighter level, you can replace your Fighting Style with another of your choice.
```badges
items:
- label: Fighting Style
value: 'Defence'
```
### Second Wind (Fighter 1st Level)
```consumable
label: Second Wind
state_key: beornwulf_second_wind
uses: 2
reset_on:
- event: short-rest
amount: 1 # restore only one use on SR
- event: long-rest # restore all uses on LR
```
As a Bonus Action, you can **heal yourself for 1d10 + `VIEW[{level}]` Hit Points**. You can do this **2** times, regaining 1 use after a Short Rest and all uses after a Long Rest.
#### Tactical Mind (Fighter 2nd Level)
When you fail an ability check, you can expend a use of your **Second Wind** to push yourself toward success. Rather than regaining Hit Points, you **roll 1d10 and add the number rolled to the ability check**, potentially turning it into a success. If the check still fails, this use of Second Wind isn't expended.
### Weapon Mastery (Fighter 1st Level)
Your training with weapons allows you to use the **Mastery Properties** of **three kinds of Simple or Martial weapons** of your choice. Whenever you finish a Long Rest, you can practise weapon drills and change one of those weapon choices. When you reach certain Fighter levels, you gain the ability to use the Mastery Properties of more kinds of weapons, as shown in the Weapon Mastery column of the Fighter table.
```badges
items:
- label: Weapon Type
value: 'Greatswords'
- label: Weapon Type
value: 'Spears'
- label: Weapon Type
value: 'Javelins'
```
**Greatswords: Graze** (If your attack roll with this weapon misses a creature, you can deal damage to that creature equal to the ability modifier you used to make the attack roll. This damage is the same type dealt by the weapon, and the damage can be increased only by increasing the ability modifier.)
**Spears: Sap** (If you hit a creature with this weapon, that creature has Disadvantage on its next attack roll before the start of your next turn.)
**Javelins: Slow** (If you hit a creature with this weapon and deal damage to it, you can reduce its Speed by 10 feet until the start of your next turn. If the creature is hit more than once by weapons that have this property, the Speed reduction doesn't exceed 10 feet.)
### Action Surge (Fighter 2nd Level)
```consumable
label: "Action Surge"
state_key: beornwulf_action_surge
uses: 1
reset_on: ["short-rest", "long-rest"]
```
You can push yourself beyond your normal limits for a moment. On your turn, you can **take an extra Action**, except the Magic action. You can only do this **1** time, and only once each turn, regaining all uses after a Short or Long Rest. %%Starting at 17th level, you can use it twice before a rest, but still only once each turn.%%
# Inventory
The following items belong to `= this.file.name`.
Items: `INPUT[inlineListSuggester(optionQuery(#Category/Item)):char_items]`
# Connections
Is the person linked to any groups or quests?
Quests: `INPUT[inlineListSuggester(optionQuery(#Category/Quest)):Connected_Quests]`
Groups: `INPUT[inlineListSuggester(optionQuery(#Category/Group)):Connected_Groups]`
# Relationships
List important relationships here.
```dataviewjs
var parents = dv.current().parents ?? [];
var children = dv.current().children ?? [];
var enemies = dv.current().enemies ?? [];
var allies = dv.current().allies ?? [];
var siblings = dv.current().siblings ?? [];
var current = dv.current().file.name;
var partner = dv.current().partner ?? [];
dv.paragraph("```mermaid\nflowchart LR\n" +
// Parents with internal-link on individual nodes only
(parents.length > 0 ? parents.map((parent, index) => `P${index + 1}[${parent}]:::internal-link\nP${index + 1} --> Current\n`).join('') : '') +
// Current node
`Current[${current}]\n` +
// Partner group node (no internal-link applied)
(partner.length > 0 ? `PT[Partner]\nCurrent --> PT\n` : '') +
// Individual partners with internal-link
(partner.length > 0 ? partner.map((p, index) => `PT${index + 1}[${p}]:::internal-link\nPT --> PT${index + 1}\n`).join('') : '') +
// Children group node (no internal-link applied)
(children.length > 0 ? `C[Children]\nCurrent --> C\n${children.map((child, index) => `C${index + 1}[${child}]:::internal-link\nC --> C${index + 1}\n`).join('')}` : '') +
// Siblings group node (no internal-link applied)
(siblings.length > 0 ? `S[Siblings]\nCurrent --> S\n${siblings.map((sibling, index) => `S${index + 1}[${sibling}]:::internal-link\nS --> S${index + 1}\n`).join('')}` : '') +
// Enemies group node (no internal-link applied)
(enemies.length > 0 ? `E[Enemies]\nCurrent --> E\n${enemies.map((enemy, index) => `E${index + 1}[${enemy}]:::internal-link\nE --> E${index + 1}\n`).join('')}` : '') +
// Allies group node (no internal-link applied)
(allies.length > 0 ? `A[Allies]\nCurrent --> A\n${allies.map((ally, index) => `A${index + 1}[${ally}]:::internal-link\nA --> A${index + 1}\n`).join('')}` : '') +
// Styling: Apply internal-link only to individual nodes, not group nodes
`class ${parents.length > 0 ? parents.map((_, index) => `P${index + 1},`).join('') : ''}Current${children.length > 0 ? children.map((_, index) => `C${index + 1},`).join('') : ''}${siblings.length > 0 ? siblings.map((_, index) => `S${index + 1},`).join('') : ''}${enemies.length > 0 ? enemies.map((_, index) => `E${index + 1},`).join('') : ''}${allies.length > 0 ? allies.map((_, index) => `A${index + 1},`).join('') : ''} internal-link;`
)
```
%% CODE ABOVE CREATED WITH CHAT-GPT. ITS COMPLEX CODE THAT SHOULD NOT BE CHANGED UNLESS YOU KNOW WHAT YOU ARE DOING %%
%% MERMAID-FIX-TEXT-CLIPPING.CSS is enabled in Settings > Appearance > CSS Snippets. This fixes text clipping and styles the boxes %%
> [!NOTE]- Relationship Config - Enter name of People Notes
> `BUTTON[button_person]` Nodes will link to notes of the same name.
>
> | Parents | Partner | Children |
> | --- | --- | --- |
> | `INPUT[list:parents]` | `INPUT[list:partner]` | `INPUT[list:children]` |
>
> | Siblings | Enemies | Allies |
> | --- | --- | --- |
> | `INPUT[list:siblings]` | `INPUT[list:enemies]` | `INPUT[list:allies]` |
```dataviewjs
const player = dv.current();
const factions = dv.pages('"3-Mechanics/Guilds and Groups"');
let tableData = [];
for (let faction of factions) {
let factionName = faction.faction;
let playerStanding = player.faction_standing?.[factionName] || 0;
// Ensure benefits is treated as an array
let benefitsList = Array.isArray(faction.benefits) ? faction.benefits : [];
// Filter benefits the player qualifies for
let qualifiedBenefits = benefitsList
.filter(b => playerStanding >= b.standing)
.map(b => b.reward)
.join(", ");
let primaryContact = faction.primary_contact || "No contact set";
tableData.push([factionName, playerStanding, qualifiedBenefits || "No benefits yet", primaryContact]);
}
dv.table(["Faction", "Your Standing", "Benefits", "Primary Contact"], tableData);
```