Compare commits
24
Commits
d8db76f9cd
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
959332aa64 | ||
|
|
11378bbe85 | ||
|
|
ddb1d073dc | ||
|
|
397ff09451 | ||
|
|
b4aae2aada | ||
|
|
84f06109c8 | ||
|
|
129d15e1aa | ||
|
|
a45e066d49 | ||
|
|
14753738ee | ||
|
|
a789bbca4f | ||
|
|
ab3587f6e8 | ||
|
|
54175b058d | ||
|
|
3dc412d3d7 | ||
|
|
5d60aeb1c5 | ||
|
|
685662c6aa | ||
|
|
eaa495fb2d | ||
|
|
505561aec7 | ||
|
|
0447eb5b8f | ||
|
|
be9ad02eb0 | ||
|
|
cccf030d31 | ||
|
|
28f89a4173 | ||
|
|
b50eb3807f | ||
|
|
b2116ea293 | ||
|
|
fc3f30a619 |
+217
@@ -0,0 +1,217 @@
|
|||||||
|
---
|
||||||
|
Reputation: 5
|
||||||
|
Faction_Type:
|
||||||
|
Motto:
|
||||||
|
Ideology:
|
||||||
|
Symbol:
|
||||||
|
Colors:
|
||||||
|
Headquarters:
|
||||||
|
Territories:
|
||||||
|
-
|
||||||
|
Allies:
|
||||||
|
-
|
||||||
|
Rivals:
|
||||||
|
-
|
||||||
|
SMH_Acronym:
|
||||||
|
Intel:
|
||||||
|
Tags:
|
||||||
|
- faction
|
||||||
|
---
|
||||||
|
|
||||||
|
# Alsatian Soldiers
|
||||||
|
*One-line role/description — e.g., “Elven High House controlling Y’athir’s docks.”*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎨 Artwork
|
||||||
|
![[Alsatian Soldiers.png]]
|
||||||
|
*Optional caption / artist credit*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧭 Identity & Heraldry
|
||||||
|
- **Motto:** `= default(this.Motto, "—")`
|
||||||
|
- **Symbol:** `= default(this.Symbol, "—")`
|
||||||
|
- **Colors:** `= default(this.Colors, "—")`
|
||||||
|
- **Headquarters:** `= default(this.Headquarters, "—")`
|
||||||
|
- **Territories:** `= this.Territories`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📜 Ideology & Goals
|
||||||
|
- **Ideology / Alignment:** `= default(this.Ideology, "—")`
|
||||||
|
- **Primary Goals:**
|
||||||
|
-
|
||||||
|
- **Taboos / Anathema:**
|
||||||
|
-
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🤝 Relationship with Party
|
||||||
|
- **Reputation:** `= this.Reputation`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧑💼 Leadership & Structure
|
||||||
|
- **Leader(s):** [[NPC A]], [[NPC B]]
|
||||||
|
- **Structure:** (council, hierarchy, cells, chapters)
|
||||||
|
- **Key Offices:** (Intelligence, Logistics, Priory, Treasury, etc.)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧰 Assets & Operations
|
||||||
|
- **Resources:** (coin, troops, mages, ships, safehouses, contacts)
|
||||||
|
- **Notable Holdings:**
|
||||||
|
- **Typical Ops / Tactics:**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🕊️ Diplomacy & Relations
|
||||||
|
- **Allies:** `= this.Allies`
|
||||||
|
- **Rivals:** `= this.Rivals`
|
||||||
|
- **Stance toward “SMH” (their wording):** `= default(this.SMH_Acronym, "—")`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧠 Intelligence & Mentions
|
||||||
|
```button
|
||||||
|
name ➕ Add Intel
|
||||||
|
type command
|
||||||
|
action Templater: Insert Add Intel Entry to Faction
|
||||||
|
```
|
||||||
|
```dataviewjs
|
||||||
|
const THIS = dv.current();
|
||||||
|
const thisName = String(THIS.file.name);
|
||||||
|
const thisLC = thisName.toLowerCase();
|
||||||
|
|
||||||
|
const factions = dv.pages("#faction");
|
||||||
|
|
||||||
|
// mention detector (same logic as your table)
|
||||||
|
function mentionsThisFaction(entry) {
|
||||||
|
const sum = String(entry.summary ?? "");
|
||||||
|
if (sum.includes(`[[${thisName}]]`) || sum.includes(`[[${thisName}|`)) return true;
|
||||||
|
const src = entry.source;
|
||||||
|
const list = Array.isArray(src) ? src : (src ? [src] : []);
|
||||||
|
for (const s of list) {
|
||||||
|
if (typeof s === "string") {
|
||||||
|
if (s.includes(`[[${thisName}]]`) || s.includes(`[[${thisName}|`)) return true;
|
||||||
|
if (s.toLowerCase() === thisLC) return true;
|
||||||
|
} else if (s && typeof s === "object" && s.path) {
|
||||||
|
const base = s.path.split("/").pop().replace(/\.md$/i,"").toLowerCase();
|
||||||
|
if (base === thisLC) return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const own = (THIS.Intel ?? []).length;
|
||||||
|
|
||||||
|
let mentions = 0;
|
||||||
|
for (const p of factions.where(p => p.file.name !== thisName)) {
|
||||||
|
for (const it of (p.Intel ?? [])) if (mentionsThisFaction(it)) mentions++;
|
||||||
|
}
|
||||||
|
|
||||||
|
dv.paragraph(`_Entries: ${own + mentions} (own ${own} + mentions ${mentions})_`);
|
||||||
|
```
|
||||||
|
```dataviewjs
|
||||||
|
// Current faction
|
||||||
|
const THIS = dv.current();
|
||||||
|
const thisName = String(THIS.file.name);
|
||||||
|
const thisLC = thisName.toLowerCase();
|
||||||
|
|
||||||
|
// All faction pages (including this one)
|
||||||
|
const factions = dv.pages("#faction");
|
||||||
|
|
||||||
|
// Mention detector: summary has [[This Faction]] OR source points at this faction
|
||||||
|
function mentionsThisFaction(entry) {
|
||||||
|
const sum = String(entry.summary ?? "");
|
||||||
|
if (sum.includes(`[[${thisName}]]`) || sum.includes(`[[${thisName}|`)) return true;
|
||||||
|
|
||||||
|
const src = entry.source;
|
||||||
|
const list = Array.isArray(src) ? src : (src ? [src] : []);
|
||||||
|
for (const s of list) {
|
||||||
|
if (typeof s === "string") {
|
||||||
|
if (s.includes(`[[${thisName}]]`) || s.includes(`[[${thisName}|`)) return true;
|
||||||
|
if (s.toLowerCase() === thisLC) return true; // fallback: plain text match
|
||||||
|
} 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Collect rows
|
||||||
|
const rows = [];
|
||||||
|
|
||||||
|
// 1) Own intel
|
||||||
|
for (const it of (THIS.Intel ?? [])) {
|
||||||
|
rows.push({
|
||||||
|
date: it.date ?? "",
|
||||||
|
from: THIS.file.link,
|
||||||
|
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 ?? "")
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2) Mentions from other factions
|
||||||
|
for (const p of factions.where(p => p.file.name !== thisName)) {
|
||||||
|
for (const it of (p.Intel ?? [])) {
|
||||||
|
if (mentionsThisFaction(it)) {
|
||||||
|
rows.push({
|
||||||
|
date: it.date ?? "",
|
||||||
|
from: p.file.link,
|
||||||
|
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 ?? "")
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sort newest first
|
||||||
|
rows.sort((a,b) => String(b.date).localeCompare(String(a.date)));
|
||||||
|
|
||||||
|
if (!rows.length) {
|
||||||
|
dv.paragraph("_No intel yet._");
|
||||||
|
} else {
|
||||||
|
dv.table(
|
||||||
|
["Date","From Faction","Type","Summary","Source","Rel","Cred","Tags"],
|
||||||
|
rows.map(r => [r.date, r.from, r.type, r.summary, r.source, r.rel, r.cred, r.tags])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
> Add new entries in the **frontmatter** under `Intel:` (keep newest on top). Suggested fields: `date, type, summary, source, reliability, credibility, tags`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔗 Related NPCs (auto)
|
||||||
|
```dataview
|
||||||
|
TABLE link(file.name) AS NPC, number(Level_of_Influence) AS Influence, default(SMH_Acronym, "—") AS SMH
|
||||||
|
FROM #npc
|
||||||
|
WHERE file.name != "NPC Template"
|
||||||
|
AND (
|
||||||
|
Faction = this.file.link
|
||||||
|
OR lower(string(Faction)) = lower(this.file.name)
|
||||||
|
OR contains(lower(string(Faction)), lower(this.file.name))
|
||||||
|
)
|
||||||
|
SORT number(Level_of_Influence) DESC
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📌 Plot Hooks & Notes
|
||||||
|
-
|
||||||
|
-
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🗒 Session Updates
|
||||||
|
- 2026-07-01: …
|
||||||
+10
-2
@@ -14,6 +14,13 @@ Rivals:
|
|||||||
-
|
-
|
||||||
SMH_Acronym:
|
SMH_Acronym:
|
||||||
Intel:
|
Intel:
|
||||||
|
- date: 2026-07-01
|
||||||
|
type: interaction
|
||||||
|
summary: "[[Iniana Asase]] mentions that representatives from [[House Evandra]] are visiting with [[House Asase]]. She also does not know anything about the [[House Miiran]] representatives that are in the city; she will however try to find out."
|
||||||
|
source: "[[Iniana Asase]]"
|
||||||
|
reliability: B
|
||||||
|
credibility: 5
|
||||||
|
tags: []
|
||||||
- date: 2026-02-03
|
- date: 2026-02-03
|
||||||
type: interaction
|
type: interaction
|
||||||
summary: According to Freddie, those of [[House Asase]] reports to a few different houses in the iupper echelons - tha parents have connections with [[House Evandra]] which they attempt to leverage regularly. It is part of the reason that they're attempting to work around. It is also rumored that the Assase has operations in the Wells - possibly the one that is abducting all of the Halflings. The Eldest Child is more interested in his rules and books to have loyalties to anyone.'
|
summary: According to Freddie, those of [[House Asase]] reports to a few different houses in the iupper echelons - tha parents have connections with [[House Evandra]] which they attempt to leverage regularly. It is part of the reason that they're attempting to work around. It is also rumored that the Assase has operations in the Wells - possibly the one that is abducting all of the Halflings. The Eldest Child is more interested in his rules and books to have loyalties to anyone.'
|
||||||
@@ -57,9 +64,10 @@ Tags:
|
|||||||
|
|
||||||
|
|
||||||
# House Asase
|
# House Asase
|
||||||
*One-line role/description — e.g., “Elven High House controlling Y’athir’s docks.”*
|
*Child House of [[House Evandra]]*
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## 🎨 Artwork
|
## 🎨 Artwork
|
||||||
![[House Asase.png]]
|
![[House Asase.png]]
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
Reputation: 5
|
Reputation: 8
|
||||||
Faction_Type: Gang
|
Faction_Type: Gang
|
||||||
Motto:
|
Motto:
|
||||||
Ideology: Semi-Communism
|
Ideology: Semi-Communism
|
||||||
|
|||||||
+217
@@ -0,0 +1,217 @@
|
|||||||
|
---
|
||||||
|
Reputation: 1
|
||||||
|
Faction_Type:
|
||||||
|
Motto:
|
||||||
|
Ideology:
|
||||||
|
Symbol:
|
||||||
|
Colors:
|
||||||
|
Headquarters:
|
||||||
|
Territories:
|
||||||
|
-
|
||||||
|
Allies:
|
||||||
|
-
|
||||||
|
Rivals:
|
||||||
|
-
|
||||||
|
SMH_Acronym:
|
||||||
|
Intel:
|
||||||
|
Tags:
|
||||||
|
- faction
|
||||||
|
---
|
||||||
|
|
||||||
|
# Whitewater Civilians
|
||||||
|
*One-line role/description — e.g., “Elven High House controlling Y’athir’s docks.”*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🎨 Artwork
|
||||||
|
![[Whitewater Civilians.png]]
|
||||||
|
*Optional caption / artist credit*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧭 Identity & Heraldry
|
||||||
|
- **Motto:** `= default(this.Motto, "—")`
|
||||||
|
- **Symbol:** `= default(this.Symbol, "—")`
|
||||||
|
- **Colors:** `= default(this.Colors, "—")`
|
||||||
|
- **Headquarters:** `= default(this.Headquarters, "—")`
|
||||||
|
- **Territories:** `= this.Territories`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📜 Ideology & Goals
|
||||||
|
- **Ideology / Alignment:** `= default(this.Ideology, "—")`
|
||||||
|
- **Primary Goals:**
|
||||||
|
-
|
||||||
|
- **Taboos / Anathema:**
|
||||||
|
-
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🤝 Relationship with Party
|
||||||
|
- **Reputation:** `= this.Reputation`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧑💼 Leadership & Structure
|
||||||
|
- **Leader(s):** [[NPC A]], [[NPC B]]
|
||||||
|
- **Structure:** (council, hierarchy, cells, chapters)
|
||||||
|
- **Key Offices:** (Intelligence, Logistics, Priory, Treasury, etc.)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧰 Assets & Operations
|
||||||
|
- **Resources:** (coin, troops, mages, ships, safehouses, contacts)
|
||||||
|
- **Notable Holdings:**
|
||||||
|
- **Typical Ops / Tactics:**
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🕊️ Diplomacy & Relations
|
||||||
|
- **Allies:** `= this.Allies`
|
||||||
|
- **Rivals:** `= this.Rivals`
|
||||||
|
- **Stance toward “SMH” (their wording):** `= default(this.SMH_Acronym, "—")`
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧠 Intelligence & Mentions
|
||||||
|
```button
|
||||||
|
name ➕ Add Intel
|
||||||
|
type command
|
||||||
|
action Templater: Insert Add Intel Entry to Faction
|
||||||
|
```
|
||||||
|
```dataviewjs
|
||||||
|
const THIS = dv.current();
|
||||||
|
const thisName = String(THIS.file.name);
|
||||||
|
const thisLC = thisName.toLowerCase();
|
||||||
|
|
||||||
|
const factions = dv.pages("#faction");
|
||||||
|
|
||||||
|
// mention detector (same logic as your table)
|
||||||
|
function mentionsThisFaction(entry) {
|
||||||
|
const sum = String(entry.summary ?? "");
|
||||||
|
if (sum.includes(`[[${thisName}]]`) || sum.includes(`[[${thisName}|`)) return true;
|
||||||
|
const src = entry.source;
|
||||||
|
const list = Array.isArray(src) ? src : (src ? [src] : []);
|
||||||
|
for (const s of list) {
|
||||||
|
if (typeof s === "string") {
|
||||||
|
if (s.includes(`[[${thisName}]]`) || s.includes(`[[${thisName}|`)) return true;
|
||||||
|
if (s.toLowerCase() === thisLC) return true;
|
||||||
|
} else if (s && typeof s === "object" && s.path) {
|
||||||
|
const base = s.path.split("/").pop().replace(/\.md$/i,"").toLowerCase();
|
||||||
|
if (base === thisLC) return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const own = (THIS.Intel ?? []).length;
|
||||||
|
|
||||||
|
let mentions = 0;
|
||||||
|
for (const p of factions.where(p => p.file.name !== thisName)) {
|
||||||
|
for (const it of (p.Intel ?? [])) if (mentionsThisFaction(it)) mentions++;
|
||||||
|
}
|
||||||
|
|
||||||
|
dv.paragraph(`_Entries: ${own + mentions} (own ${own} + mentions ${mentions})_`);
|
||||||
|
```
|
||||||
|
```dataviewjs
|
||||||
|
// Current faction
|
||||||
|
const THIS = dv.current();
|
||||||
|
const thisName = String(THIS.file.name);
|
||||||
|
const thisLC = thisName.toLowerCase();
|
||||||
|
|
||||||
|
// All faction pages (including this one)
|
||||||
|
const factions = dv.pages("#faction");
|
||||||
|
|
||||||
|
// Mention detector: summary has [[This Faction]] OR source points at this faction
|
||||||
|
function mentionsThisFaction(entry) {
|
||||||
|
const sum = String(entry.summary ?? "");
|
||||||
|
if (sum.includes(`[[${thisName}]]`) || sum.includes(`[[${thisName}|`)) return true;
|
||||||
|
|
||||||
|
const src = entry.source;
|
||||||
|
const list = Array.isArray(src) ? src : (src ? [src] : []);
|
||||||
|
for (const s of list) {
|
||||||
|
if (typeof s === "string") {
|
||||||
|
if (s.includes(`[[${thisName}]]`) || s.includes(`[[${thisName}|`)) return true;
|
||||||
|
if (s.toLowerCase() === thisLC) return true; // fallback: plain text match
|
||||||
|
} 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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Collect rows
|
||||||
|
const rows = [];
|
||||||
|
|
||||||
|
// 1) Own intel
|
||||||
|
for (const it of (THIS.Intel ?? [])) {
|
||||||
|
rows.push({
|
||||||
|
date: it.date ?? "",
|
||||||
|
from: THIS.file.link,
|
||||||
|
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 ?? "")
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
// 2) Mentions from other factions
|
||||||
|
for (const p of factions.where(p => p.file.name !== thisName)) {
|
||||||
|
for (const it of (p.Intel ?? [])) {
|
||||||
|
if (mentionsThisFaction(it)) {
|
||||||
|
rows.push({
|
||||||
|
date: it.date ?? "",
|
||||||
|
from: p.file.link,
|
||||||
|
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 ?? "")
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Sort newest first
|
||||||
|
rows.sort((a,b) => String(b.date).localeCompare(String(a.date)));
|
||||||
|
|
||||||
|
if (!rows.length) {
|
||||||
|
dv.paragraph("_No intel yet._");
|
||||||
|
} else {
|
||||||
|
dv.table(
|
||||||
|
["Date","From Faction","Type","Summary","Source","Rel","Cred","Tags"],
|
||||||
|
rows.map(r => [r.date, r.from, r.type, r.summary, r.source, r.rel, r.cred, r.tags])
|
||||||
|
);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
> Add new entries in the **frontmatter** under `Intel:` (keep newest on top). Suggested fields: `date, type, summary, source, reliability, credibility, tags`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔗 Related NPCs (auto)
|
||||||
|
```dataview
|
||||||
|
TABLE link(file.name) AS NPC, number(Level_of_Influence) AS Influence, default(SMH_Acronym, "—") AS SMH
|
||||||
|
FROM #npc
|
||||||
|
WHERE file.name != "NPC Template"
|
||||||
|
AND (
|
||||||
|
Faction = this.file.link
|
||||||
|
OR lower(string(Faction)) = lower(this.file.name)
|
||||||
|
OR contains(lower(string(Faction)), lower(this.file.name))
|
||||||
|
)
|
||||||
|
SORT number(Level_of_Influence) DESC
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 📌 Plot Hooks & Notes
|
||||||
|
-
|
||||||
|
-
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🗒 Session Updates
|
||||||
|
- 2026-07-22: …
|
||||||
+1
@@ -4,6 +4,7 @@ Faction: "[[The Archmasons]]"
|
|||||||
Tags:
|
Tags:
|
||||||
- npc
|
- npc
|
||||||
Intel:
|
Intel:
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Amity Cornwallis
|
# Amity Cornwallis
|
||||||
|
|||||||
+1
@@ -4,6 +4,7 @@ Faction:
|
|||||||
SMH_Acronym: Sandwich Mountain Harpoon
|
SMH_Acronym: Sandwich Mountain Harpoon
|
||||||
Tags:
|
Tags:
|
||||||
- npc
|
- npc
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Atmaka Sayin
|
# Atmaka Sayin
|
||||||
|
|||||||
+1
@@ -29,6 +29,7 @@ Intel:
|
|||||||
reliability: A
|
reliability: A
|
||||||
credibility: 5
|
credibility: 5
|
||||||
tags: []
|
tags: []
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Avas Assase
|
# Avas Assase
|
||||||
|
|||||||
+11
-1
@@ -1,9 +1,19 @@
|
|||||||
---
|
---
|
||||||
Level_of_Influence: 2
|
Level_of_Influence: 3
|
||||||
Faction: "[[House Noctilun]]"
|
Faction: "[[House Noctilun]]"
|
||||||
SMH_Acronym:
|
SMH_Acronym:
|
||||||
Tags:
|
Tags:
|
||||||
- npc
|
- npc
|
||||||
|
Intel:
|
||||||
|
- date: 2026-04-16
|
||||||
|
type: report
|
||||||
|
summary: It doesn't seem a coincidence that someone's mother who is now working for the Grand Hall dissapeared in connection with something at the Esoterium. There is a working connection between the Figment Grand Hall and The Esoterium - though [[Calia Noctinuln]] is not aware of the extent. The Esoterium is often leaned on for larger than life expression during their performances. And many of the senior staff at the Grand Hall meet with some regularity with the Esoterium to discuss how they might assist.
|
||||||
|
session: "[[Session 27 - A Many Tentacled Problem]]"
|
||||||
|
source: "[[Calia Noctilun]]"
|
||||||
|
reliability: B
|
||||||
|
credibility: 5
|
||||||
|
tags: []
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Calia Noctilun
|
# Calia Noctilun
|
||||||
|
|||||||
+10
-1
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
Level_of_Influence: 2
|
Level_of_Influence: 4
|
||||||
Faction: "[[Thin Wisps]]"
|
Faction: "[[Thin Wisps]]"
|
||||||
SMH_Acronym:
|
SMH_Acronym:
|
||||||
Tags:
|
Tags:
|
||||||
@@ -21,6 +21,7 @@ Intel:
|
|||||||
reliability: B
|
reliability: B
|
||||||
credibility: 4
|
credibility: 4
|
||||||
tags: []
|
tags: []
|
||||||
|
Knows About HQ: "True"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Celosia
|
# Celosia
|
||||||
@@ -49,7 +50,15 @@ Intel:
|
|||||||
- **Notes on Influence:** (what actions improve/worsen standing)
|
- **Notes on Influence:** (what actions improve/worsen standing)
|
||||||
- ***Discovery Skills***
|
- ***Discovery Skills***
|
||||||
- ***Influence Skills***
|
- ***Influence Skills***
|
||||||
|
- DC 14 Mercantile Lore
|
||||||
|
- DC 17 Thievery
|
||||||
|
- DC 19 Acrobatics
|
||||||
|
- DC 19 Society
|
||||||
|
- DC 21 Diplomacy
|
||||||
|
- DC 21 Deception
|
||||||
|
- DC 24 Intimidation
|
||||||
- ***Weaknesses***
|
- ***Weaknesses***
|
||||||
|
- Working towards a more stable future for her and her sisters. Trying to introduce stability to Y’athyr.
|
||||||
- ***Resistances***
|
- ***Resistances***
|
||||||
- ***Biases***
|
- ***Biases***
|
||||||
|
|
||||||
|
|||||||
+1
@@ -13,6 +13,7 @@ Intel:
|
|||||||
reliability: A
|
reliability: A
|
||||||
credibility: 5
|
credibility: 5
|
||||||
tags: []
|
tags: []
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+1
@@ -13,6 +13,7 @@ Intel:
|
|||||||
reliability: A
|
reliability: A
|
||||||
credibility: 5
|
credibility: 5
|
||||||
tags: []
|
tags: []
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Deidre Gille
|
# Deidre Gille
|
||||||
|
|||||||
+1
@@ -4,6 +4,7 @@ Faction: "[[House Valrora]]"
|
|||||||
SMH_Acronym:
|
SMH_Acronym:
|
||||||
Tags:
|
Tags:
|
||||||
- npc
|
- npc
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Elowen Valrora
|
# Elowen Valrora
|
||||||
|
|||||||
+9
-3
@@ -1,10 +1,12 @@
|
|||||||
---
|
---
|
||||||
Level_of_Influence: 4
|
Level_of_Influence: 6
|
||||||
Faction:
|
Faction:
|
||||||
Tags:
|
Tags:
|
||||||
- npc
|
- npc
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
# Elthea Rinvale
|
# Elthea Rinvale
|
||||||
*Diplomatic Intermediary*
|
*Diplomatic Intermediary*
|
||||||
|
|
||||||
@@ -34,9 +36,13 @@ Tags:
|
|||||||
- DC 17 Society
|
- DC 17 Society
|
||||||
- DC 19 Perception
|
- DC 19 Perception
|
||||||
- ***Influence Skills***
|
- ***Influence Skills***
|
||||||
- DC 24 Deception
|
- DC 14 Trackless Lore
|
||||||
- DC 21 Intimidation
|
- DC 17 Nature (discussing the terrain and its effects on cultural differences)
|
||||||
|
- DC 17 Acrobatics/Athletics
|
||||||
- DC 19 Diplomacy
|
- DC 19 Diplomacy
|
||||||
|
- DC 19 Religion
|
||||||
|
- DC 21 Intimidation
|
||||||
|
- DC 24 Deception
|
||||||
- ***Weaknesses***
|
- ***Weaknesses***
|
||||||
- Most happy when offered fresh drink/food. Reduces Influence DC by 2.
|
- Most happy when offered fresh drink/food. Reduces Influence DC by 2.
|
||||||
- ***Resistances***
|
- ***Resistances***
|
||||||
|
|||||||
+1
@@ -4,6 +4,7 @@ Faction: "[[House Tenrae]]"
|
|||||||
SMH_Acronym:
|
SMH_Acronym:
|
||||||
Tags:
|
Tags:
|
||||||
- npc
|
- npc
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Eosaf Tenrae
|
# Eosaf Tenrae
|
||||||
|
|||||||
+2
-1
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
Level_of_Influence: 6
|
Level_of_Influence: 13
|
||||||
Faction: "[[Draycott Family]]"
|
Faction: "[[Draycott Family]]"
|
||||||
SMH_Acronym:
|
SMH_Acronym:
|
||||||
Tags:
|
Tags:
|
||||||
@@ -13,6 +13,7 @@ Intel:
|
|||||||
reliability: A
|
reliability: A
|
||||||
credibility: 5
|
credibility: 5
|
||||||
tags: []
|
tags: []
|
||||||
|
Knows About HQ: "True"
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -1,9 +1,10 @@
|
|||||||
---
|
---
|
||||||
Level_of_Influence: 2
|
Level_of_Influence: 4
|
||||||
Faction: "[[Thin Wisps]]"
|
Faction: "[[Thin Wisps]]"
|
||||||
SMH_Acronym:
|
SMH_Acronym:
|
||||||
Tags:
|
Tags:
|
||||||
- npc
|
- npc
|
||||||
|
Knows About HQ: "True"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Freddie
|
# Freddie
|
||||||
|
|||||||
+10
-1
@@ -5,6 +5,13 @@ SMH_Acronym:
|
|||||||
Tags:
|
Tags:
|
||||||
- npc
|
- npc
|
||||||
Intel:
|
Intel:
|
||||||
|
- date: 2026-07-08
|
||||||
|
type: op
|
||||||
|
summary: While infiltrating the Arch, we find out that [[Fritch]] has been working on the dig under the Arch - currently serving as a Dig Leader for the day we do our infiltration. We're currently not sure how he managed to end up down here, but it's plausible to assume that he got drafted down here in the shakeup of Whitewater.
|
||||||
|
session: "[[Session 33 - Infiltration of the Arch]]"
|
||||||
|
reliability: A
|
||||||
|
credibility: 5
|
||||||
|
tags: []
|
||||||
- date: 2026-01-07
|
- date: 2026-01-07
|
||||||
type: interaction
|
type: interaction
|
||||||
summary: "[[Metternich]] tells [[Fritch]] that [[House Elidari]] plans to supplant [[The Archmasons]]. [[Metternich]] says that he doesn't ask for anything in return at the moment, but asks for an opportunity to solve problems."
|
summary: "[[Metternich]] tells [[Fritch]] that [[House Elidari]] plans to supplant [[The Archmasons]]. [[Metternich]] says that he doesn't ask for anything in return at the moment, but asks for an opportunity to solve problems."
|
||||||
@@ -13,6 +20,7 @@ Intel:
|
|||||||
reliability: A
|
reliability: A
|
||||||
credibility: 5
|
credibility: 5
|
||||||
tags: []
|
tags: []
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Fritch
|
# Fritch
|
||||||
@@ -143,7 +151,8 @@ type command
|
|||||||
action Templater: Insert Add Intel Entry to NPC
|
action Templater: Insert Add Intel Entry to NPC
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
|
|
||||||
## 🏛️ Relations & Factions
|
## 🏛️ Relations & Factions
|
||||||
- **Primary Faction:** [[The Archmasons]]
|
- **Primary Faction:** [[The Archmasons]]
|
||||||
|
|||||||
+2
-1
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
Level_of_Influence: 3
|
Level_of_Influence: 5
|
||||||
Faction:
|
Faction:
|
||||||
SMH_Acronym:
|
SMH_Acronym:
|
||||||
Tags:
|
Tags:
|
||||||
@@ -12,6 +12,7 @@ Intel:
|
|||||||
reliability: B
|
reliability: B
|
||||||
credibility: 4
|
credibility: 4
|
||||||
tags: []
|
tags: []
|
||||||
|
Knows About HQ: "True"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Halwyn
|
# Halwyn
|
||||||
|
|||||||
+1
@@ -29,6 +29,7 @@ Intel:
|
|||||||
reliability: A
|
reliability: A
|
||||||
credibility: 5
|
credibility: 5
|
||||||
tags: []
|
tags: []
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
Level_of_Influence: 12
|
Level_of_Influence: 18
|
||||||
Faction: "[[House Asase]]"
|
Faction: "[[House Asase]]"
|
||||||
Tags:
|
Tags:
|
||||||
- npc
|
- npc
|
||||||
@@ -12,10 +12,11 @@ Intel:
|
|||||||
reliability: A
|
reliability: A
|
||||||
credibility: 5
|
credibility: 5
|
||||||
tags: []
|
tags: []
|
||||||
|
Knows About HQ: Partial
|
||||||
---
|
---
|
||||||
|
|
||||||
# Iniana Asase
|
# Iniana Asase
|
||||||
*Daughter of [[House Asase]]*
|
*Daughter of [[House Asase]], Philanthropist and Proprietor of Soup Kitchen*
|
||||||
|
|
||||||
## 🎨 Artwork
|
## 🎨 Artwork
|
||||||
![[Iniana Asase.png]]
|
![[Iniana Asase.png]]
|
||||||
|
|||||||
+1
@@ -4,6 +4,7 @@ Faction: "[[House Calil]]"
|
|||||||
SMH_Acronym:
|
SMH_Acronym:
|
||||||
Tags:
|
Tags:
|
||||||
- npc
|
- npc
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Katarin Calil
|
# Katarin Calil
|
||||||
|
|||||||
+1
@@ -13,6 +13,7 @@ Intel:
|
|||||||
reliability: B
|
reliability: B
|
||||||
credibility: 5
|
credibility: 5
|
||||||
tags: []
|
tags: []
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
a
|
a
|
||||||
|
|||||||
+1
@@ -4,6 +4,7 @@ Faction: "[[House Tenrae]]"
|
|||||||
SMH_Acronym:
|
SMH_Acronym:
|
||||||
Tags:
|
Tags:
|
||||||
- npc
|
- npc
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Man in the White Mask
|
# Man in the White Mask
|
||||||
|
|||||||
+2
-1
@@ -1,9 +1,10 @@
|
|||||||
---
|
---
|
||||||
Level_of_Influence: 0
|
Level_of_Influence: 2
|
||||||
Faction: "[[Thin Wisps]]"
|
Faction: "[[Thin Wisps]]"
|
||||||
SMH_Acronym:
|
SMH_Acronym:
|
||||||
Tags:
|
Tags:
|
||||||
- npc
|
- npc
|
||||||
|
Knows About HQ: "True"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Kleadora
|
# Kleadora
|
||||||
|
|||||||
+1
@@ -4,6 +4,7 @@ Faction:
|
|||||||
Tags:
|
Tags:
|
||||||
- npc
|
- npc
|
||||||
Intel:
|
Intel:
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
Level_of_Influence: 7
|
Level_of_Influence: 10
|
||||||
Faction:
|
Faction:
|
||||||
SMH_Acronym: Synchronized Mushroom Hiccup
|
SMH_Acronym: Synchronized Mushroom Hiccup
|
||||||
Tags:
|
Tags:
|
||||||
@@ -13,6 +13,7 @@ Intel:
|
|||||||
reliability: A
|
reliability: A
|
||||||
credibility: 5
|
credibility: 5
|
||||||
tags: []
|
tags: []
|
||||||
|
Knows About HQ: "True"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Lord Ellin Vaust
|
# Lord Ellin Vaust
|
||||||
|
|||||||
+1
@@ -4,6 +4,7 @@ Faction:
|
|||||||
SMH_Acronym:
|
SMH_Acronym:
|
||||||
Tags:
|
Tags:
|
||||||
- npc
|
- npc
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Lorena Neurath
|
# Lorena Neurath
|
||||||
|
|||||||
+2
-1
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
Level_of_Influence: 2
|
Level_of_Influence: 8
|
||||||
Faction:
|
Faction:
|
||||||
SMH_Acronym:
|
SMH_Acronym:
|
||||||
Tags:
|
Tags:
|
||||||
@@ -12,6 +12,7 @@ Intel:
|
|||||||
reliability: A
|
reliability: A
|
||||||
credibility: 5
|
credibility: 5
|
||||||
tags: []
|
tags: []
|
||||||
|
Knows About HQ: "True"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Maltrix
|
# Maltrix
|
||||||
|
|||||||
+1
@@ -4,6 +4,7 @@ Faction: "[[House Elidari]]"
|
|||||||
SMH_Acronym:
|
SMH_Acronym:
|
||||||
Tags:
|
Tags:
|
||||||
- npc
|
- npc
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Marcellus Magunna
|
# Marcellus Magunna
|
||||||
|
|||||||
+175
@@ -0,0 +1,175 @@
|
|||||||
|
---
|
||||||
|
Level_of_Influence: 0
|
||||||
|
Faction: "[[House Tenrae]]"
|
||||||
|
SMH_Acronym:
|
||||||
|
Tags:
|
||||||
|
- npc
|
||||||
|
---
|
||||||
|
|
||||||
|
# Morag Tenrae
|
||||||
|
*Governor of Whitewater District*
|
||||||
|
|
||||||
|
## 🎨 Artwork
|
||||||
|
![[Morag Tenrae.png]]
|
||||||
|
*Optional caption / alt text*
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🧑 NPC Overview
|
||||||
|
- **Full Name:** Morag Tenrae
|
||||||
|
- **Race / Ancestry:** Sun Elf
|
||||||
|
- **Gender / Pronouns:** Female
|
||||||
|
- **Occupation / Role:** Governor of Whitewater
|
||||||
|
- **Faction / Allegiance:** [[House Tenrae]]
|
||||||
|
- **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:** [[House Tenrae]]
|
||||||
|
- **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:**
|
||||||
|
- Known to be single.
|
||||||
|
- **Session Notes / Updates:**
|
||||||
|
- 2026-07-01: …
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 🔗 Connections
|
||||||
|
- **Related NPCs:**
|
||||||
|
- [[NPC A]] (Mentor)
|
||||||
|
- [[NPC B]] (Rival)
|
||||||
|
- **PC Ties:** (how the party knows them)
|
||||||
+1
@@ -13,6 +13,7 @@ Intel:
|
|||||||
reliability: A
|
reliability: A
|
||||||
credibility: 5
|
credibility: 5
|
||||||
tags: []
|
tags: []
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Morthwyl Griffith
|
# Morthwyl Griffith
|
||||||
|
|||||||
+1
@@ -4,6 +4,7 @@ Faction: "[[House Elidari]]"
|
|||||||
SMH_Acronym:
|
SMH_Acronym:
|
||||||
Tags:
|
Tags:
|
||||||
- npc
|
- npc
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Nuala Elidari
|
# Nuala Elidari
|
||||||
|
|||||||
+1
@@ -4,6 +4,7 @@ Faction:
|
|||||||
SMH_Acronym:
|
SMH_Acronym:
|
||||||
Tags:
|
Tags:
|
||||||
- npc
|
- npc
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Octavia
|
# Octavia
|
||||||
|
|||||||
+2
-1
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
Level_of_Influence: 3
|
Level_of_Influence: 5
|
||||||
Faction: "[[House Elidari]]"
|
Faction: "[[House Elidari]]"
|
||||||
SMH_Acronym:
|
SMH_Acronym:
|
||||||
Tags:
|
Tags:
|
||||||
@@ -28,6 +28,7 @@ Intel:
|
|||||||
reliability: A
|
reliability: A
|
||||||
credibility: 5
|
credibility: 5
|
||||||
tags: []
|
tags: []
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+1
@@ -11,6 +11,7 @@ Intel:
|
|||||||
reliability: B
|
reliability: B
|
||||||
credibility: 5
|
credibility: 5
|
||||||
tags: []
|
tags: []
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Professor Ceren
|
# Professor Ceren
|
||||||
|
|||||||
+1
@@ -12,6 +12,7 @@ Intel:
|
|||||||
reliability: B
|
reliability: B
|
||||||
credibility: 5
|
credibility: 5
|
||||||
tags: []
|
tags: []
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Professor Gerendel
|
# Professor Gerendel
|
||||||
|
|||||||
+1
@@ -13,6 +13,7 @@ Intel:
|
|||||||
credibility: 5
|
credibility: 5
|
||||||
tags:
|
tags:
|
||||||
- npc
|
- npc
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+2
-1
@@ -1,9 +1,10 @@
|
|||||||
---
|
---
|
||||||
Level_of_Influence: 0
|
Level_of_Influence: 2
|
||||||
Faction:
|
Faction:
|
||||||
SMH_Acronym:
|
SMH_Acronym:
|
||||||
Tags:
|
Tags:
|
||||||
- npc
|
- npc
|
||||||
|
Knows About HQ: "True"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Saara Kallaste
|
# Saara Kallaste
|
||||||
|
|||||||
+2
-1
@@ -1,9 +1,10 @@
|
|||||||
---
|
---
|
||||||
Level_of_Influence: 0
|
Level_of_Influence: 2
|
||||||
Faction:
|
Faction:
|
||||||
SMH_Acronym:
|
SMH_Acronym:
|
||||||
Tags:
|
Tags:
|
||||||
- npc
|
- npc
|
||||||
|
Knows About HQ: "True"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Saffronia
|
# Saffronia
|
||||||
|
|||||||
+11
-1
@@ -1,10 +1,18 @@
|
|||||||
---
|
---
|
||||||
Level_of_Influence: 9
|
Level_of_Influence: 11
|
||||||
Faction: "[[House Vyshaan]]"
|
Faction: "[[House Vyshaan]]"
|
||||||
SMH_Acronym:
|
SMH_Acronym:
|
||||||
Tags:
|
Tags:
|
||||||
- npc
|
- npc
|
||||||
Intel:
|
Intel:
|
||||||
|
- date: 2026-04-23
|
||||||
|
type: rumor
|
||||||
|
summary: "[[Siviane Marravet]] is known to spend time at the finest parlors and otherwise known to be at opening night(s) at the Figment Grand Hall. Otherwise she can sometimes be found near the docks."
|
||||||
|
session: "[[Session 28 - Downtime Activities]]"
|
||||||
|
source: "[[Metternich]]"
|
||||||
|
reliability: B
|
||||||
|
credibility: 4
|
||||||
|
tags: []
|
||||||
- date: 2025-12-3
|
- date: 2025-12-3
|
||||||
type: interaction
|
type: interaction
|
||||||
summary: "[[Siviane Marravet]] seems to be entirely aware of who [[Metternich]] is, and his ties to Alsat."
|
summary: "[[Siviane Marravet]] seems to be entirely aware of who [[Metternich]] is, and his ties to Alsat."
|
||||||
@@ -12,8 +20,10 @@ Intel:
|
|||||||
reliability: A
|
reliability: A
|
||||||
credibility: 5
|
credibility: 5
|
||||||
tags: []
|
tags: []
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
||||||
# Siviane Marravet
|
# Siviane Marravet
|
||||||
*Patron of the Arts, the Lady of Emberwine*
|
*Patron of the Arts, the Lady of Emberwine*
|
||||||
|
|
||||||
|
|||||||
+1
@@ -4,6 +4,7 @@ Faction:
|
|||||||
SMH_Acronym:
|
SMH_Acronym:
|
||||||
Tags:
|
Tags:
|
||||||
- npc
|
- npc
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Syrianix
|
# Syrianix
|
||||||
|
|||||||
+2
-1
@@ -1,5 +1,5 @@
|
|||||||
---
|
---
|
||||||
Level_of_Influence: 0
|
Level_of_Influence: 1
|
||||||
Faction: "[[House Asase]]"
|
Faction: "[[House Asase]]"
|
||||||
SMH_Acronym:
|
SMH_Acronym:
|
||||||
Tags:
|
Tags:
|
||||||
@@ -21,6 +21,7 @@ Intel:
|
|||||||
reliability: B
|
reliability: B
|
||||||
credibility: 4
|
credibility: 4
|
||||||
tags: []
|
tags: []
|
||||||
|
Knows About HQ: "False"
|
||||||
---
|
---
|
||||||
|
|
||||||
# Therin Assase
|
# Therin Assase
|
||||||
|
|||||||
+6
@@ -81,6 +81,12 @@ templater true
|
|||||||
- **Social / Exploration:**
|
- **Social / Exploration:**
|
||||||
- We're able to remove some of the bodies from the cocoon and find some Hellknight's from the Order of the Rack
|
- We're able to remove some of the bodies from the cocoon and find some Hellknight's from the Order of the Rack
|
||||||
- We head to a Guard Station near Whitewater - find a two people (a human, who were all wearing Hellknight Armor) who had missing person posters up. The Human has been missing for all of two weeks.
|
- We head to a Guard Station near Whitewater - find a two people (a human, who were all wearing Hellknight Armor) who had missing person posters up. The Human has been missing for all of two weeks.
|
||||||
|
- The following morning:
|
||||||
|
- Part of the group goes to meet with [[Calia Noctilun]]
|
||||||
|
- Part of the group goes to meet with [[Fenric Draycott]]
|
||||||
|
- [[Faylen Valora]] asks for a ship to help smuggle some Alsatian's into Alseta's Redoubt.
|
||||||
|
- [[Faylen Valora]] lets the entire cat out of the bag, and the group continues to try and persuade him.
|
||||||
|
-
|
||||||
|
|
||||||
- **Combat:**
|
- **Combat:**
|
||||||
- We resume combat with the Giant Wyrm and the remaining Caligni
|
- We resume combat with the Giant Wyrm and the remaining Caligni
|
||||||
|
|||||||
+176
@@ -0,0 +1,176 @@
|
|||||||
|
---
|
||||||
|
Date: 2026-04-23
|
||||||
|
Session_Name: Session 28 - Downtime Activities
|
||||||
|
Tags:
|
||||||
|
- pf2e
|
||||||
|
- session
|
||||||
|
---
|
||||||
|
|
||||||
|
# Session 28 - Downtime Activities
|
||||||
|
|
||||||
|
> **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:**
|
||||||
|
- [[Val]] goes to meet with [[Iniana Asase]] and gets an update on how the meeting with [[Deidre Gille]] and [[Therin Asase]] went. She also states that she knows we've been stepping on alot of people's toes - and she finally inquires as to what we're up to. [[Val]] gives her the short and easy of what we're up to, but let's her in on the truth. It did however, seem like [[Therin Asase]] was going to investigate [[Deidre Gille]]'s situation.
|
||||||
|
- [[Kite]] heads to meet with Lonni - letting them know that Sinni Springvale is dead. He follows on with heading to the Home of the Auclair Family, which posted one of the missing persons posters for one of the Hellknights that we found in the Wells.
|
||||||
|
- The Father states that [[The Archmasons]] had taken Kristoph hostage. Kristoph formerly worked for the City Watch and this had happened to some people who had previously gotten to close to The Wells.
|
||||||
|
- Last time he saw his son was two weeks ago, and he seemed fine at the time. They had had breakfast in the morning and when his son didn't return home from the City Watch after midnight, he went to the Watch's Keep and found a hostage note from [[The Archmasons]] - and the City Watch was either unwilling or unable to pay the ransom.
|
||||||
|
- There were others who came by and said they had information about his Son - the father figures they were Charlatan's; preying on those in grief.
|
||||||
|
- Safehouse Options:
|
||||||
|
- Most Preferable: Empty Warehouse previously used for "goods" storage - located between holding and would allow [[Thin Wisps]] to intercede when Law Enforcement Comes. Costs 15gp a month and does have Dock Access - would allow for a Loading Skiff but not much larger.
|
||||||
|
- A number of apartments in Northpointe and can be put under Aliases - more palatable to finer clientele. Would lack the neccessity of being connected to [[Thin Wisps]]. Purchase would be 900gp for mortgage or 2500 outright.
|
||||||
|
- Prison between Whitewater and the Drenches - has been unmanned and is allegedly haunted. Most scouting operations have found undead - but not being haunted. No timeline on when the City would start looking at it, but if we wanted to oppose the expansion would offer a good bastion. Also exceedingly large for housing people, supplies - also is dock access via canals that run underneath the city.
|
||||||
|
- **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
|
||||||
|
|
||||||
|
- [ ]
|
||||||
|
|
||||||
|
- [ ]
|
||||||
|
|
||||||
|
- [ ]
|
||||||
@@ -0,0 +1,170 @@
|
|||||||
|
---
|
||||||
|
Date: 2026-04-29
|
||||||
|
Session_Name: Session 29 - Prisons, Oh My!
|
||||||
|
Tags:
|
||||||
|
- pf2e
|
||||||
|
- session
|
||||||
|
---
|
||||||
|
|
||||||
|
# Session 29 - Prisons, Oh My!
|
||||||
|
|
||||||
|
> **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:**
|
||||||
|
- The group has a conversation with [[Fenric Draycott]] and brings him into the loop, and nets 4 influence points.
|
||||||
|
- Following that, the group heads to the Prison to establish their new base.
|
||||||
|
|
||||||
|
- **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
|
||||||
|
|
||||||
|
- [ ]
|
||||||
|
|
||||||
|
- [ ]
|
||||||
|
|
||||||
|
- [ ]
|
||||||
+168
@@ -0,0 +1,168 @@
|
|||||||
|
---
|
||||||
|
Date: 2026-05-06
|
||||||
|
Session_Name: Session 30 - Prisons, Oh My! Part 2
|
||||||
|
Tags:
|
||||||
|
- pf2e
|
||||||
|
- session
|
||||||
|
---
|
||||||
|
|
||||||
|
# Session 30 - Prisons, Oh My! Part 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
|
||||||
|
|
||||||
|
- [ ]
|
||||||
|
|
||||||
|
- [ ]
|
||||||
|
|
||||||
|
- [ ]
|
||||||
+168
@@ -0,0 +1,168 @@
|
|||||||
|
---
|
||||||
|
Date: 2026-05-28
|
||||||
|
Session_Name: Session 31 - Prisons, Oh My! Part 3
|
||||||
|
Tags:
|
||||||
|
- pf2e
|
||||||
|
- session
|
||||||
|
---
|
||||||
|
|
||||||
|
# Session 31 - Prisons, Oh My! Part 3
|
||||||
|
|
||||||
|
> **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
|
||||||
|
|
||||||
|
- [ ]
|
||||||
|
|
||||||
|
- [ ]
|
||||||
|
|
||||||
|
- [ ]
|
||||||
+177
@@ -0,0 +1,177 @@
|
|||||||
|
---
|
||||||
|
Date: 2026-07-01
|
||||||
|
Session_Name: Session 32 - Downtime Activities
|
||||||
|
Tags:
|
||||||
|
- pf2e
|
||||||
|
- session
|
||||||
|
---
|
||||||
|
|
||||||
|
# Session 32 - Downtime Activities
|
||||||
|
|
||||||
|
> **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:**
|
||||||
|
- The group performs some downtime activities..
|
||||||
|
- Calen reaches out to the High Curate and requests some Acolyte's to be sent to the new SMH Headquarters.
|
||||||
|
- Discovery on Celosia and Influence the Thin Wisps.
|
||||||
|
- Influence [[Iniana Asase]] and learns some information about what the City Watch in Whitewater is up to:
|
||||||
|
- Most of the guards are just [[The Archmasons]] in new armor. They have been put through some efficacy training and under the new governance, the brutality of [[The Archmasons]] is being tamped down.
|
||||||
|
- That is not to say to that it's not happening, only that it's getting better.
|
||||||
|
- The most loyal of the guards are being recruited for some other branch of the City Watch.
|
||||||
|
- [[Metternich]]
|
||||||
|
- Mentions that the City Watch who are being recruited for the Special branch of the Watch are likely for [[House Elidari]] and will likely be fiercely loyal.
|
||||||
|
-
|
||||||
|
- **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
|
||||||
|
|
||||||
|
- [ ]
|
||||||
|
|
||||||
|
- [ ]
|
||||||
|
|
||||||
|
- [ ]
|
||||||
+180
@@ -0,0 +1,180 @@
|
|||||||
|
---
|
||||||
|
Date: 2026-07-08
|
||||||
|
Session_Name: Session 33 - Infiltration of the Arch
|
||||||
|
Tags:
|
||||||
|
- pf2e
|
||||||
|
- session
|
||||||
|
---
|
||||||
|
|
||||||
|
# Session 33 - Infiltration of the Arch
|
||||||
|
|
||||||
|
> **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:**
|
||||||
|
- Infiltration of the Arch
|
||||||
|
- Edge Points: 2
|
||||||
|
- My Current Deception DC: 22 (1 + 7 + 4 +10) (+3 when lying with Metternich, per following the Expert)
|
||||||
|
- We talk our way past the first couple of guards and say that we're running early due to mis-planning and misunderstood timing.
|
||||||
|
- A couple guards in front of the stairs heading down to the dig site, questions us a bit more; getting all our names and mentioning that we won't be able to come back up to the base camp for 12 hours (8hr shift + 4hrs early)
|
||||||
|
- We also learn that [[Fritch]] is working as the Dig Leader for the day of our infiltration.
|
||||||
|
- The group opts to explore around the dig area first before reporting to [[Fritch]]
|
||||||
|
- Exploring some of the area, we find an Elevator that heads down - a sheer drop back into the City. [[Kite]] and [[Calen]] pick up trash with the minecart and overhear a conversation with [[Morag Tenrae]] and a robed individual. They speak on letting the Governor know if they find any other pieces or bringing things back up to the basecamp to help sustain the workers.
|
||||||
|
- We find a hidden room in one of the rooms, which leads to a chamber which contains what is effectively a computer that contains information about the peoples and lifeforms that have passed through the portal or who have accessed the life system - called the [[Lifeform Catalog]]
|
||||||
|
- The last access prior to us was 32 hours prior and was [[Kite's Husband]]
|
||||||
|
- [[Calen]] questions [[Kite]] as to the purpose and [[Kite]] says that it was a system used to identify health and detect diseases - but Calen realizes there is something off to what he is told.
|
||||||
|
- An Empirical Analysis: Theoretically, large amounts of biological data would allow for the tracking of generational tendencies towards certain diseases. With modern medicine, biological and genetic manipulation via magical means could even allow the erradication of certain ailments that living creatures are predisposed towards.
|
||||||
|
|
||||||
|
- **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
|
||||||
|
|
||||||
|
- [ ]
|
||||||
|
|
||||||
|
- [ ]
|
||||||
|
|
||||||
|
- [ ]
|
||||||
+168
@@ -0,0 +1,168 @@
|
|||||||
|
---
|
||||||
|
Date: 2026-07-15
|
||||||
|
Session_Name: Session 34 - Infiltration of the Arch Part 2
|
||||||
|
Tags:
|
||||||
|
- pf2e
|
||||||
|
- session
|
||||||
|
---
|
||||||
|
|
||||||
|
# Session 34 - Infiltration of the Arch Part 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: 410 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 558 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 682 KiB |
Reference in New Issue
Block a user