vault commit: 2025-12-10 21:10, 12 files changed
This commit is contained in:
+9
@@ -5,6 +5,14 @@ SMH_Acronym:
|
||||
Tags:
|
||||
- npc
|
||||
Intel:
|
||||
- date: 2025-12-10
|
||||
type: interaction
|
||||
summary: "[[Nuala Elidari]] extends an offer of adoption to [[Faylen Valrora]] into [[House Elidari]], under the stewardship of [[Avas Assase]], as well as a position as Meister under him."
|
||||
session: "[[Session 13 - Summer Solistice Pt. 2]]"
|
||||
source: "[[Nuala Elidari]]"
|
||||
reliability: A
|
||||
credibility: 5
|
||||
tags: []
|
||||
- date: 2025-12-03
|
||||
type: interaction
|
||||
summary: "[[Avas Assase]] expressed an interest in doing good for the lower portion of the city, and expressed thankfulness for the help with [[Iniana Asase|Iniana's]] Soup Kitchen."
|
||||
@@ -25,6 +33,7 @@ Intel:
|
||||
|
||||
|
||||
|
||||
|
||||
# Avas Assase
|
||||
*Archmeister of Y'athyr*
|
||||
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
---
|
||||
Level_of_Influence: 2
|
||||
Level_of_Influence: 3
|
||||
Faction: "[[Draycott Family]]"
|
||||
SMH_Acronym:
|
||||
Tags:
|
||||
|
||||
+9
@@ -5,6 +5,14 @@ SMH_Acronym:
|
||||
Tags:
|
||||
- npc
|
||||
Intel:
|
||||
- date: 2025-12-10
|
||||
type: report
|
||||
summary: "[[Katarin Calil]], [[Onora Elidari]] and [[Lord Ellin Vaust]] do not applaud a toast that [[Nuala Elidari]] offers to the previous Steward, [[Ilvara Valrora]]"
|
||||
session: "[[Session 13 - Summer Solistice Pt. 2]]"
|
||||
source: Perception Check
|
||||
reliability: B
|
||||
credibility: 5
|
||||
tags: []
|
||||
- date: 2025-12-03
|
||||
type: interaction
|
||||
summary: "[[Ilvara Valrora]] expresses that she has been keeping up with what the party has been up to at the point of the Masquerade, but she doesn't approve of our actions thus far."
|
||||
@@ -15,6 +23,7 @@ Intel:
|
||||
tags: []
|
||||
---
|
||||
|
||||
|
||||
# Ilvara Valora
|
||||
*Former Master of Coin and Steward of Y'athyr*
|
||||
|
||||
|
||||
+10
@@ -3,8 +3,18 @@ Level_of_Influence: 8
|
||||
Faction: "[[House Asase]]"
|
||||
Tags:
|
||||
- npc
|
||||
Intel:
|
||||
- date: 2025-12-10
|
||||
type: interaction
|
||||
summary: In a conversation with [[Iniana Assase]] and [[Fenric Draycott]], [[Iniana Assase]] says that there has been an illness/disease spreading through the Drenches.
|
||||
session: "[[Session 13 - Summer Solistice Pt. 2]]"
|
||||
source: "[[Iniana Asase]]"
|
||||
reliability: A
|
||||
credibility: 5
|
||||
tags: []
|
||||
---
|
||||
|
||||
|
||||
# Iniana Asase
|
||||
*Daughter of [[House Asase]]*
|
||||
|
||||
|
||||
+11
-1
@@ -1,11 +1,21 @@
|
||||
---
|
||||
Level_of_Influence: 0
|
||||
Level_of_Influence: 2
|
||||
Faction: "[[House Calil]]"
|
||||
SMH_Acronym:
|
||||
Tags:
|
||||
- npc
|
||||
Intel:
|
||||
- date: 2025-12-10
|
||||
type: interaction
|
||||
summary: "[[Kerrian Calil]] is a writer of books that his father doesn't approve of."
|
||||
session: "[[Session 13 - Summer Solistice Pt. 2]]"
|
||||
source: "[[Onora Elidari]]"
|
||||
reliability: B
|
||||
credibility: 5
|
||||
tags: []
|
||||
---
|
||||
|
||||
a
|
||||
# Kerrian Calil
|
||||
*Role/Description — e.g., "Captain of the Guard", "Elven Scholar", "Local Merchant"*
|
||||
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
---
|
||||
Level_of_Influence: 2
|
||||
Level_of_Influence: 3
|
||||
Faction:
|
||||
SMH_Acronym: Synchronized Mushroom Hiccup
|
||||
Tags:
|
||||
|
||||
+181
@@ -0,0 +1,181 @@
|
||||
---
|
||||
Level_of_Influence: 0
|
||||
Faction:
|
||||
SMH_Acronym:
|
||||
Tags:
|
||||
- npc
|
||||
---
|
||||
|
||||
# Man in the White Mask
|
||||
*Role/Description — e.g., "Captain of the Guard", "Elven Scholar", "Local Merchant"*
|
||||
|
||||
## 🎨 Artwork
|
||||
![[Man in the White Mask.png]]
|
||||
*Optional caption / alt text*
|
||||
|
||||
---
|
||||
|
||||
## 🧑 NPC Overview
|
||||
- **Full Name:**
|
||||
- **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***
|
||||
- DC 15 Warfare Lore
|
||||
- DC 18 Society
|
||||
- DC 18 Intimidation
|
||||
- DC 20 Perception
|
||||
- ***Influence Skills***
|
||||
- DC 20 Deception
|
||||
- DC 22 Diplomacy
|
||||
- DC 22 Intimidation
|
||||
- ***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-10: …
|
||||
|
||||
---
|
||||
|
||||
## 🔗 Connections
|
||||
- **Related NPCs:**
|
||||
- [[NPC A]] (Mentor)
|
||||
- [[NPC B]] (Rival)
|
||||
- **PC Ties:** (how the party knows them)
|
||||
+10
-1
@@ -1,11 +1,20 @@
|
||||
---
|
||||
Level_of_Influence: 0
|
||||
Level_of_Influence: 2
|
||||
Faction: "[[House Elidari]]"
|
||||
SMH_Acronym:
|
||||
Tags:
|
||||
- npc
|
||||
Intel:
|
||||
- date: 2025-12-10
|
||||
type: report
|
||||
summary: The Wedding of [[Onora Elidari]] and [[Kerrian Calil]] is on October 22nd.
|
||||
session: "[[Session 13 - Summer Solistice Pt. 2]]"
|
||||
reliability: A
|
||||
credibility: 5
|
||||
tags: []
|
||||
---
|
||||
|
||||
|
||||
# Onora Elidari
|
||||
*Youngest Daughter of [[House Elidari]]*
|
||||
|
||||
|
||||
+1
-1
@@ -1,5 +1,5 @@
|
||||
---
|
||||
Level_of_Influence: 2
|
||||
Level_of_Influence: 3
|
||||
Faction: "[[House Vyshaan]]"
|
||||
SMH_Acronym:
|
||||
Tags:
|
||||
|
||||
+168
@@ -0,0 +1,168 @@
|
||||
---
|
||||
Date: 2025-12-10
|
||||
Session_Name: Session 13 - Summer Solistice Pt. 2
|
||||
Tags:
|
||||
- pf2e
|
||||
- session
|
||||
---
|
||||
|
||||
# Session 13 - Summer Solistice Pt. 2
|
||||
|
||||
> **Date:** `= this.Date` • **Name:** `= this.Session_Name`
|
||||
|
||||
---
|
||||
|
||||
## 📄 Session Summary (auto)
|
||||
<!-- SUMMARY-START -->
|
||||
*No summary yet — click “Generate Summary” below.*
|
||||
<!-- SUMMARY-END -->
|
||||
|
||||
```button
|
||||
name ✍️ Generate AI Summary
|
||||
type template
|
||||
action Templates/Generate AI Session Summary.md
|
||||
templater true
|
||||
```
|
||||
|
||||
## 🧭 Where / When
|
||||
|
||||
- **Region / Location:**
|
||||
|
||||
- **In-game Date / Time:**
|
||||
|
||||
- **Weather / Conditions:**
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 👥 PCs Present / Absent
|
||||
|
||||
- **Present:**
|
||||
|
||||
- **Absent:**
|
||||
|
||||
|
||||
---
|
||||
|
||||
## ⭐ Highlights (feed the auto-summary)
|
||||
|
||||
> Add one or more `Highlight::` lines. The button will build a summary from these.
|
||||
|
||||
- Highlight::
|
||||
|
||||
- Highlight::
|
||||
|
||||
- Highlight::
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Quests & Progress
|
||||
|
||||
- **Active Objectives:**
|
||||
|
||||
- **Progress / Resolutions:**
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 🗣️ NPCs Met / Factions
|
||||
|
||||
- **NPCs:** [[ ]] [[ ]] [[ ]]
|
||||
|
||||
- **Factions Touched:** [[ ]] [[ ]]
|
||||
|
||||
|
||||
---
|
||||
|
||||
## ⚔️ Encounters
|
||||
|
||||
- **Social / Exploration:**
|
||||
|
||||
- **Combat:**
|
||||
|
||||
- **Outcome / Loot:**
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 🧠 Intel Captured (auto)
|
||||
|
||||
```dataviewjs
|
||||
const THIS = dv.current();
|
||||
const sessName = THIS.file.name;
|
||||
const sessDate = THIS.Date ?? dv.current().file.frontmatter?.Date ?? "";
|
||||
const sessLC = sessName.toLowerCase();
|
||||
|
||||
const pages = dv.pages("#npc or #faction").where(p => p.Intel);
|
||||
|
||||
function matchesSessionField(sessionField) {
|
||||
const list = Array.isArray(sessionField) ? sessionField : [sessionField];
|
||||
for (const s of list) {
|
||||
if (!s) continue;
|
||||
if (typeof s === "object" && s.path) {
|
||||
const base = s.path.split("/").pop().replace(/\.md$/i,"");
|
||||
if (base.toLowerCase() === sessLC) return true;
|
||||
} else {
|
||||
const text = String(s);
|
||||
if (text.includes(`[[${sessName}]]`)) return true;
|
||||
if (text.toLowerCase() === sessLC) return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
const rows = [];
|
||||
for (const p of pages) {
|
||||
for (const it of p.Intel) {
|
||||
let ok = false;
|
||||
if (it.session) ok = matchesSessionField(it.session);
|
||||
if (!ok && sessDate && it.date) ok = String(it.date) === String(sessDate); // fallback
|
||||
if (ok) {
|
||||
rows.push({
|
||||
from: p.file.link,
|
||||
date: it.date ?? "",
|
||||
type: it.type ?? "",
|
||||
summary: String(it.summary ?? ""),
|
||||
source: it.source ?? "",
|
||||
rel: it.reliability ?? "",
|
||||
cred: it.credibility ?? "",
|
||||
tags: Array.isArray(it.tags) ? it.tags.join(", ") : (it.tags ?? "")
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
rows.sort((a,b)=> String(b.date).localeCompare(String(a.date)));
|
||||
|
||||
if (!rows.length) {
|
||||
dv.paragraph("_No intel captured for this session yet._");
|
||||
} else {
|
||||
dv.table(
|
||||
["From", "Date", "Type", "Summary", "Source", "Rel", "Cred", "Tags"],
|
||||
rows.map(r => [r.from, r.date, r.type, r.summary, r.source, r.rel, r.cred, r.tags])
|
||||
);
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 📦 Treasure & Rewards
|
||||
|
||||
- **Items:**
|
||||
|
||||
- **Coin:**
|
||||
|
||||
- **XP / Milestones:**
|
||||
|
||||
|
||||
---
|
||||
|
||||
## 🔜 Next Hooks / To-Dos
|
||||
|
||||
- [ ]
|
||||
|
||||
- [ ]
|
||||
|
||||
- [ ]
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 299 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 335 KiB |
Reference in New Issue
Block a user