Files
a-legacy-forged-obsid-sync/Dungeons and Dragons/A Legacy Forged/Session Notes/Session 28 - Downtime Activities.md
T

3.4 KiB

Date, Session_Name, Tags
Date Session_Name Tags
2026-04-23 Session 28 - Downtime Activities
pf2e
session

Session 28 - Downtime Activities

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:

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