Files

176 lines
4.6 KiB
Markdown
Raw Permalink 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: 0
Faction:
SMH_Acronym:
Tags:
- npc
Knows About HQ: "False"
---
# Syrianix
*Role/Description — e.g., "Captain of the Guard", "Elven Scholar", "Local Merchant"*
## 🎨 Artwork
![[Syrianix.png]]
*Optional caption / alt text*
---
## 🧑 NPC Overview
- **Full Name:** Syrianix "The Weaver"
- **Race / Ancestry:**
- **Gender / Pronouns:**
- **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***
- ***Influence Skills***
- ***Weaknesses***
- ***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:**
- 2025-12-22: …
---
## 🔗 Connections
- **Related NPCs:**
- [[NPC A]] (Mentor)
- [[NPC B]] (Rival)
- **PC Ties:** (how the party knows them)