241 lines
6.2 KiB
Markdown
241 lines
6.2 KiB
Markdown
---
|
||
Reputation: 0
|
||
Faction_Type:
|
||
Motto:
|
||
Ideology:
|
||
Symbol:
|
||
Colors:
|
||
Headquarters:
|
||
Territories:
|
||
-
|
||
Allies:
|
||
-
|
||
Rivals:
|
||
-
|
||
SMH_Acronym:
|
||
Intel:
|
||
- date: 2025-10-02
|
||
type: interaction
|
||
summary: Vaust informs us that [[House Asase]] has been exceeding their quota for excavations underneath the arch. It's possible that [[House Asase]] is working with [[The Archmasons]] on this endeavour.
|
||
source: "[[Lord Ellin Vaust]]"
|
||
reliability: B
|
||
credibility: 5
|
||
tags: []
|
||
- date: 2025-10-02
|
||
type: interaction
|
||
summary: We've learned that [[Iniana Asase]] runs a Soup Kitchen in the Drenches
|
||
source: "[[Kite]]"
|
||
reliability: A
|
||
credibility: 5
|
||
tags: []
|
||
- date: 2025-10-02
|
||
type: rumor
|
||
summary: The Inspector General and Auditor of Internal Affairs for Y'athyr is from this house.
|
||
source: "[[Kite]]"
|
||
reliability: A
|
||
credibility: 1
|
||
tags: []
|
||
Tags:
|
||
- faction
|
||
---
|
||
|
||
|
||
# House Asase
|
||
*One-line role/description — e.g., “Elven High House controlling Y’athir’s docks.”*
|
||
|
||
---
|
||
|
||
## 🎨 Artwork
|
||
![[House Asase.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
|
||
- 2025-10-02: …
|