Files
a-legacy-forged-obsid-sync/Dungeons and Dragons/A Legacy Forged/Session Notes/Session 27 - A Many Tentacled Problem.md
T

4.1 KiB

Date, Session_Name, Tags
Date Session_Name Tags
2026-04-16 Session 27 - A Many Tentacled Problem
pf2e
session

Session 27 - A Many Tentacled Problem

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 Hole underneath the Former Maelstrom in The Wells District of Y'athyr
  • 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:

    • We resume combat with the Giant Wyrm and the remaining Caligni
      • RK on the Monster:
        • Seugathi reality warpers create and destroy inhospitable environments on a small scale by manipulating the forces of raw chaos. A neothelid might spawn such a seugathi to create habitats for unique slaves or guests, or to destroy the ecosystem of a troublesome species. Darklands scholars refer to reality warpers as veterans in the seugathi ranks, but they're more accurately compared to aggressive landscape architects. The wicked, alien Neothelids impregnate themselves through ritualistic magic to produce wormlike servitor creatures called seugathis. These creatures spawn with a strong psychic drive to complete some task on behalf of the neothelids' far-reaching plans. These directives are diverse, strange, and usually cruel toward humanoid life
      • It's a long, hard fight, but we're able to take down the creature with the group nearing the end of it's capabilities.
        • Kite deals the finishing blow.
  • 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