Files

4.8 KiB

Date, Session_Name, Tags
Date Session_Name Tags
2026-04-02 Session 25 - A Whole Investigation
pf2e
session

Session 25 - A Whole Investigation

Date: = this.DateName: = this.Session_Name


📄 Session Summary (auto)

No summary yet — click “Generate Summary” below.

name ✍️ Generate AI Summary
type template
action Templates/Generate AI Session Summary.md
templater true

🧭 Where / When

  • Region / Location: The Wells District in Y'athyr, Ruined Temple to "Sarahanna"

  • 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:

    • We pick up after the Maelstrom was dispelled.
    • We drop a rock down the well to see how far down the bottom is and it's about 4 seconds before we hear a clunk.
    • We drop a further torch down the well, and it falls for another four seconds before bouncing off of something, vaguely shiny and metallic.
    • The group heads back to the square where we fought the first Violinist - noticing some Caligni who are not engaging us but are aware of our presence.
      • SM: They seem chiefly aware of our presence here, but more interested in keeping tabs on us all rather than engaging.
    • We try to follow the other trail that we found in the Fountain - which circles around the temple and heads towards Manors that used to exist on a raised plateau, where the trail seems to lead inside.
      • We follow the trail into the Garden. We can see motes of light illuminating the way, and can make out muddy boot prints that go in and out of the Manor's Wall.
      • We hear more whispering voices, but they seem less personal - and they are once again commanding us to move deeper and answer for our actions. Others tell us to flee.
      • Sneaking through the side wall, portraits have had their faces scratched out and eventually we arrive at a Large Entry Door to a Grand Hall.
      • We trigger a hazard and find ourselves finding another hole.
        • The Ceiling falls in on us as we enter the room, and we can hear terrified cries from men, women and children that are just as quickly snuffed out.
        • We enter ENCOUNTER Mode.
      • RK: On the similarities between the two portals
        • Similar, but not the same. The maelstrom was a construct of the followers of the Veiled Voice. This chasm simply is, though why you're not sure. Perhaps due to its proximity to something else.
  • Combat:

  • Outcome / Loot:


🧠 Intel Captured (auto)

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