> [!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); ```