Compare commits
2
Commits
c35ec63348
...
7e1783b9d2
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7e1783b9d2 | ||
|
|
18ded7df55 |
+10
@@ -4,8 +4,18 @@ Faction: "[[House Elidari]]"
|
||||
SMH_Acronym:
|
||||
Tags:
|
||||
- npc
|
||||
Intel:
|
||||
- date: 2026-04-02
|
||||
type: interaction
|
||||
summary: Known Practioner of the Entire Elven Pantheon according [[Morthwyl Griffith]]
|
||||
session: "[[Session 25 - A Whole Investigation]]"
|
||||
source: "[[Morthwyl Griffith]]"
|
||||
reliability: A
|
||||
credibility: 5
|
||||
tags: []
|
||||
---
|
||||
|
||||
|
||||
# Cormac Elidari
|
||||
*Overseer of the Y'athyr City Guard, Steward of Y'athyr
|
||||
|
||||
|
||||
+179
@@ -0,0 +1,179 @@
|
||||
---
|
||||
Level_of_Influence: 0
|
||||
Faction:
|
||||
SMH_Acronym:
|
||||
Tags:
|
||||
- npc
|
||||
---
|
||||
|
||||
# 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***
|
||||
- ***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:**
|
||||
- 2026-04-02: …
|
||||
|
||||
---
|
||||
|
||||
## 🔗 Connections
|
||||
- **Related NPCs:**
|
||||
- [[NPC A]] (Mentor)
|
||||
- [[NPC B]] (Rival)
|
||||
- **PC Ties:** (how the party knows them)
|
||||
+184
@@ -0,0 +1,184 @@
|
||||
---
|
||||
Level_of_Influence: 0
|
||||
Faction:
|
||||
SMH_Acronym:
|
||||
Tags:
|
||||
- npc
|
||||
Intel:
|
||||
- date: 2026-04-02
|
||||
type: interaction
|
||||
summary: "[[Calen]] promised that he would come back to Harborgate and have a spirited theological discussion with [[Morthwyl Griffith]] regarding the differences between Seekers of Alseta and standard Practitioners of Alseta."
|
||||
session: "[[Session 25 - A Whole Investigation]]"
|
||||
source: "[[Calen]]"
|
||||
reliability: A
|
||||
credibility: 5
|
||||
tags: []
|
||||
---
|
||||
|
||||
# Morthwyl Griffith
|
||||
*High Priest of Harborgate*
|
||||
|
||||
## 🎨 Artwork
|
||||
![[Morthwyl Griffith.png]]
|
||||
*Optional caption / alt text*
|
||||
|
||||
---
|
||||
|
||||
## 🧑 NPC Overview
|
||||
- **Full Name:** Morthwyl Griffith
|
||||
- **Race / Ancestry:** Elf
|
||||
- **Gender / Pronouns:** He/Him
|
||||
- **Occupation / Role:** High Priest of Harborgate
|
||||
- **Faction / Allegiance:** Church of Alseta
|
||||
- **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:** Harborgate
|
||||
- **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)
|
||||
+2
@@ -90,6 +90,8 @@ templater true
|
||||
- We trigger a hazard and find ourselves finding another hole.
|
||||
- The Ceiling falls in on us as we enter the room, and we can hear terrified cries from men, women and children that are just as quickly snuffed out.
|
||||
- We enter ENCOUNTER Mode.
|
||||
- RK: On the similarities between the two portals
|
||||
- Similar, but not the same. The maelstrom was a construct of the followers of the Veiled Voice. This chasm simply is, though why you're not sure. Perhaps due to its proximity to something else.
|
||||
|
||||
- **Combat:**
|
||||
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 198 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 266 KiB |
Reference in New Issue
Block a user