179 lines
4.3 KiB
Markdown
179 lines
4.3 KiB
Markdown
---
|
|
Date: 2026-02-03
|
|
Session_Name: Session 20 - Many Plot Threads
|
|
Tags:
|
|
- pf2e
|
|
- session
|
|
---
|
|
|
|
# Session 20 - Many Plot Threads
|
|
|
|
> **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 heads to their meeting with the [[Thin Wisps]] in the South Drenches. We meet them at a significantly nicer warehouse than we've seen previously. No visible guard presence, but we do notice that there are a number of other people lurking in the roof and corners watching us.
|
|
- Heading into the Warehouse:
|
|
- Most containers are waterside, but without a ship it's unclear if those are to be loaded or are waiting for other transport.
|
|
- There are four [[Thin Wisps]] on top of the crates, three are ashy, grey skinned, while the remainder is a mutton chopped human.
|
|
- [[Freddie]] also inquires as to our individual allegiances.
|
|
- [[Kite]] assures them that we do not hold them in any high esteem.
|
|
- On Monday, the groups heads to The Wells, choosing to attempt to move Stealthily, and retracing the steps that the group was previously shown out of the Wells.
|
|
- [[Kite]] and [[Calen]] work together to track the Caligni Footprints, still feeling a sense of dread as we're tracking.
|
|
- We follow to one of the Wells that the district is known for, and the tracks appear to be leading in that direction, over some rubble, with two overturned wagons. as we follow towards an intersection, we eventually make it to the street between the wagons, before a figure pops up behind us.
|
|
- ![[Pasted image 20260203222902.png]]
|
|
-
|
|
- **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
|
|
|
|
- [ ]
|
|
|
|
- [ ]
|
|
|
|
- [ ]
|