Files

195 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
Level_of_Influence: 3
Faction:
SMH_Acronym:
Tags:
- npc
Intel:
- date: 2026-04-08
type: interaction
summary: The Alsatian Shaman warns that Halwyn is a suspect in an event that ended with several crew members of the ship being strung up by their entrails.
session: "[[Session 24 - Wells Investigation Pt. 4]]"
reliability: B
credibility: 4
tags: []
---
# Halwyn
*Just a 'lil guy*
## 🎨 Artwork
![[Halwyn.png]]
*Optional caption / alt text*
---
## 🧑 NPC Overview
- **Full Name:** Halwyn
- **Race / Ancestry:** Human
- **Gender / Pronouns:** Male (He/Him)
- **Occupation / Role:**
- **Faction / Allegiance:**
- **SMH (what THEY call it):** `= this.SMH_Acronym`
- **Notable Traits:** (quirks, mannerisms, appearance)
- **First Impression:** (how the party perceives them)
---
## 🤝 Relationship with Party
- **Level of Influence:** `= this.Level_of_Influence` (10 to +10)
- **Notes on Influence:** (what actions improve/worsen standing)
- ***Discovery Skills***
- Nature (easy)
- Performance (normal)
- Perception (normal)
- Society (hard)
- ***Influence Skills***
- DC 15 Scribing Lore
- DC 18 Thievery
- DC 18 Nature
- DC 20 Performance
- DC 20 Diplomacy
- DC 22 Deception
- ***Weaknesses***
- Being genuinely kind or caring towards him, or offering to help with his administrative duties reduces the DC by 4.
- ***Resistances***
- ***Biases***
---
## 🧠 Intel (auto)
```dataviewjs
const THIS = dv.current();
const thisName = String(THIS.file.name);
const thisLC = thisName.toLowerCase();
// Scan faction & NPC notes that have Intel arrays
const pages = dv.pages("#npc or #faction").where(p => p.Intel);
// Does an Intel entry reference THIS NPC?
function mentionsThisNPC(entry) {
const sum = String(entry.summary ?? "");
// 1) Explicit wikilink in summary
if (sum.includes(`[[${thisName}]]`) || sum.includes(`[[${thisName}|`)) return true;
// 2) Source field (string/link/list)
const src = entry.source;
const arr = Array.isArray(src) ? src : (src ? [src] : []);
for (const s of arr) {
if (typeof s === "string") {
// quoted link or plain text
const unq = s.replace(/^"+|"+$/g, ""); // drop surrounding quotes if any
if (unq.includes(`[[${thisName}]]`) || unq.includes(`[[${thisName}|`)) return true;
// if they typed just the name
if (unq.replace(/\[\[|\]\]/g, "").trim().toLowerCase() === thisLC) return true;
} else if (s && typeof s === "object" && s.path) {
// wikilink object
const base = s.path.split("/").pop().replace(/\.md$/i, "").toLowerCase();
if (base === thisLC) return true;
}
}
// Optional (looser): plain text mention in summary
// return sum.toLowerCase().includes(thisLC);
return false;
}
// Collect rows: 1) own Intel, 2) mentions from other notes
const rows = [];
// Own Intel (from this NPC note)
for (const it of (THIS.Intel ?? [])) {
rows.push({
from: THIS.file.link,
date: it.date ?? "",
type: it.type ?? "",
summary: String(it.summary ?? ""),
session: it.session ?? "",
source: it.source ?? "",
rel: it.reliability ?? "",
cred: it.credibility ?? "",
tags: Array.isArray(it.tags) ? it.tags.join(", ") : (it.tags ?? "")
});
}
// Mentions elsewhere
for (const p of pages.where(p => p.file.path !== THIS.file.path)) {
for (const it of (p.Intel ?? [])) {
if (mentionsThisNPC(it)) {
rows.push({
from: p.file.link,
date: it.date ?? "",
type: it.type ?? "",
summary: String(it.summary ?? ""),
session: it.session ?? "",
source: it.source ?? "",
rel: it.reliability ?? "",
cred: it.credibility ?? "",
tags: Array.isArray(it.tags) ? it.tags.join(", ") : (it.tags ?? "")
});
}
}
}
// Sort newest first
rows.sort((a,b) => String(b.date).localeCompare(String(a.date)));
if (!rows.length) {
dv.paragraph("_No intel yet._");
} else {
dv.paragraph(`_Entries: ${rows.length} (own ${(THIS.Intel ?? []).length} + mentions ${Math.max(0, rows.length - (THIS.Intel ?? []).length)})_`);
dv.table(
["From Note","Date","Type","Summary","Session","Source","Rel","Cred","Tags"],
rows.map(r => [r.from, r.date, r.type, r.summary, r.session, r.source, r.rel, r.cred, r.tags])
);
}
```
```button
name Add Intel
type command
action Templater: Insert Add Intel Entry to NPC
```
---
## 🏛️ Relations & Factions
- **Primary Faction:** [[Faction Name]]
- **Allied Factions:** [[Faction A]], [[Faction B]]
- **Rival Factions:** [[Faction C]]
- **Personal Enemies / Allies:** [[NPC or PC]]
---
## 📖 History & Background
- **Origin / Past:**
- **Known Motivations:**
- **Secrets / Rumors:**
---
## 🎭 Roleplay Notes
- **Personality:** (e.g., stern, practical, loyal)
- **Speech Style / Quirks:** (catchphrases, accent, tics)
- **Appearance Details:** (clothing, scars, distinguishing features)
---
## 🗺️ Miscellaneous
- **Current Location:**
- **Important Items / Assets:**
- **Plot Hooks / Ties to PCs:**
- **Session Notes / Updates:**
- 2026-04-02: …
---
## 🔗 Connections
- **Related NPCs:**
- [[NPC A]] (Mentor)
- [[NPC B]] (Rival)
- **PC Ties:** (how the party knows them)