vault backup: 2025-10-02 17:18

This commit is contained in:
Jason McPherson
2025-10-02 17:18:20 -05:00
parent e7964ffd75
commit 8f95bf75eb
50 changed files with 3645 additions and 0 deletions
+100
View File
@@ -0,0 +1,100 @@
# 🗂 NPC Influence Dashboard
> Scale: 10 … 0 … +10 (0 = Neutral; positive = more influential, negative = less)
---
## 😡 Hostile (10 to 7)
```dataview
TABLE link(file.name) AS NPC, Faction, Level_of_Influence
FROM "NPCs"
WHERE Level_of_Influence <= -7
SORT Level_of_Influence ASC
```
## 😕 Unfriendly (-6 to -1)
```dataview
TABLE link(file.name) AS NPC, Faction, Level_of_Influence
FROM "NPCs"
WHERE Level_of_Influence >= -6 AND Level_of_Influence <= -1
SORT Level_of_Influence ASC
```
## 😐 Neutral (0)
```dataview
TABLE link(file.name) AS NPC, Faction, Level_of_Influence
FROM "NPCs"
WHERE Level_of_Influence = 0
SORT file.name ASC
```
## 🙂 Friendly (+1 to +6)
```dataview
TABLE link(file.name) AS NPC, Faction, Level_of_Influence
FROM "NPCs"
WHERE Level_of_Influence >= 1 AND Level_of_Influence <= 6
SORT Level_of_Influence DESC
```
## 🛡 Allied (+7 to +10)
```dataview
TABLE link(file.name) AS NPC, Faction, Level_of_Influence
FROM "NPCs"
WHERE Level_of_Influence >= 7
SORT Level_of_Influence DESC
```
## 📊 Visual Bands (Emoji + Bipolar Progress Bars)
```dataview
// ===== Settings =====
const FOLDER = "NPCs";
const MAX = 10; // absolute max in either direction
// ===== Helpers =====
const tier = s =>
s === 0 ? "Neutral" :
s < 0 ? (s <= -7 ? "Hostile" : "Unfriendly") :
(s >= 7 ? "Allied" : "Friendly");
const face = s =>
s === 0 ? "😐" :
s < 0 ? (s <= -7 ? "😡" : "😕") :
(s >= 7 ? "🛡️" : "🙂");
// Bipolar bar: [LLLLL|RRRRR]
function bipolarBar(score) {
const leftFilled = Math.min(MAX, Math.max(0, -score));
const rightFilled = Math.min(MAX, Math.max(0, score));
const leftEmpty = MAX - leftFilled;
const rightEmpty = MAX - rightFilled;
const L = "█".repeat(leftFilled) + "░".repeat(leftEmpty);
const R = "█".repeat(rightFilled) + "░".repeat(rightEmpty);
return `[${L}|${R}]`;
}
// ===== Fetch =====
const pages = dv.pages(`"${FOLDER}"`)
.where(p => Number.isFinite(+p.Level_of_Influence))
.map(p => ({
name: p.file.link,
faction: p.Faction ?? "",
score: +p.Level_of_Influence
}));
const groups = {
"😡 Hostile (10 to 7)": pages.filter(p => p.score <= -7).sort((a,b)=>a.score-b.score),
"😕 Unfriendly (6 to 1)": pages.filter(p => p.score >= -6 && p.score <= -1).sort((a,b)=>a.score-b.score),
"😐 Neutral (0)": pages.filter(p => p.score === 0).sort((a,b)=>String(a.name).localeCompare(String(b.name))),
"🙂 Friendly (+1 to +6)": pages.filter(p => p.score >= 1 && p.score <= 6).sort((a,b)=>b.score-a.score),
"🛡 Allied (+7 to +10)": pages.filter(p => p.score >= 7).sort((a,b)=>b.score-a.score),
};
for (const [title, rows] of Object.entries(groups)) {
dv.header(2, title);
if (!rows.length) { dv.paragraph("_None yet._"); continue; }
dv.table(
["NPC", "Faction", "Score", "Bar", "Tier"],
rows.map(r => [r.name, r.faction, r.score, bipolarBar(r.score), `${face(r.score)} ${tier(r.score)}`])
);
}
```