let name = dv.current().name || dv.current().file.name;dv.paragraph(`![[Images/npc-images/${name}_avatar.webp|cover]]`);dv.paragraph(`![[pc-images/${name}_avatar.webp|cover]]`);
Character Bio
Gideon von Scholtz, known as the Lord Hammer, is a formidable noble of The Commonwealth. As the Lord of House von Scholtz and the appointed Lord Marshall of Great House Belmont’s martial forces, Gideon holds significant influence and commands respect among his peers.
Residing near the town of Withywoods in Belmont Prefecture, Gideon’s ancestral estate serves as the seat of his noble family. However, the tragic loss of his wife, Ardee von Scholtz, has left him emotionally distant and hardened. Renowned for his rigid demeanour, stern nature, practicality, and ruthlessness, Gideon has become even more stoic following his wife’s demise.
Gideon is the father of two sons: Irion von Scholtz, his eldest and heir, who possesses a more amiable disposition compared to his father, and Gideon Von Scholtz II, named after his father. In addition to his martial role, Gideon holds the position of ruler over Buck, the second largest city in Belmont Prefecture.
Gideon acquired his moniker, the Lord Hammer, due to his skilful use of a warhammer in battle and his notable achievements. During his earlier years, while commanding a cohort of soldiers, he sternly disciplined them for breaking ranks, disobeying orders, and retreating from a Grimlock enemy host. Gideon gathered his men after the battle and personally executed every tenth soldier by crushing their skulls with his warhammer. This act of brutal discipline solidified his reputation as a fearsome and unwavering leader.
Thanks to his personal reputation and prestigious positions, Gideon von Scholtz is regarded as one of the most powerful individuals in The Commonwealth. The military both fears and respects him, referring to him as the Lord Hammer. Some fellow nobles may even dub him the “Silver Hammer” of Great House Belmont, though they rarely do so directly to his face. Use of such titles are usually reserved for nobles of equal or higher standing within The Commonwealth.
Gideon von Scholtz presents a formidable challenge for those who encounter him. His power, influence, and ruthless nature make him a force to be reckoned with, capable of shaping the destiny of The Commonwealth and leaving a lasting impact on its narrative.
Appearance & Personality
Visuals & Mannerisms
let current = dv.current();let title = current.name || current.file.name;// --- CONFIGURATION ---// Set to your silhouette image path or filename (e.g., "npc-images/silhouette.webp" or "silhouette.webp").// If the file doesn't exist or is set to "", it will gracefully display the text message below.let fallbackImage = "npc-images/silhouette.webp"; // ---------------------// 1. Gather all potential names (Title, quoted nicknames, and Obsidian Aliases)let rawNames = [title];// Extract quoted nickname if present in title (e.g., Wulfric "The Bear" -> The Bear)let matchNick = title.match(/"([^"]+)"/);if (matchNick && matchNick) { rawNames.push(matchNick);}// Safely pull aliases from Obsidian Frontmatter/Propertieslet rawAliases = current.file?.aliases || current.aliases || [];if (typeof rawAliases === "string") { rawNames.push(rawAliases);} else if (rawAliases && typeof rawAliases[Symbol.iterator] === "function") { for (let a of rawAliases) { if (a && typeof a === "string") rawNames.push(a); }}// 2. Build sanitized search terms (ensures terms are >= 2 chars to avoid matching "_" or empty strings)let searchTerms = new Set();for (let name of rawNames) { if (!name || typeof name !== "string") continue; let lower = name.toLowerCase().trim().replace(/["']/g, ""); let slug = lower.replace(/[\s-]+/g, "_").replace(/^_+|_+\$/g, ""); if (lower.length >= 2) searchTerms.add(lower); if (slug.length >= 2) searchTerms.add(slug);}// 3. Search npc-images for matching character fileslet matches = app.vault.getFiles().filter(f => { let pathLower = f.path.toLowerCase(); if (!pathLower.includes("npc-images")) return false; // Exclude the fallback image from character search if (fallbackImage && pathLower.includes(fallbackImage.toLowerCase())) return false; let imgName = f.name.toLowerCase(); return Array.from(searchTerms).some(term => term && imgName.includes(term));});// 4. Prioritize files with "avatar" in the name, otherwise take first matchlet match = matches.find(f => f.name.toLowerCase().includes("avatar")) || (matches.length > 0 ? matches : null);// 5. Render artwork, fallback image, or clean text messageif (match) { dv.paragraph(`![[${match.path}|cover]]`);} else { // Flexible fallback image lookup (works with filename, full path, or partial match) let fallbackFile = null; if (fallbackImage && fallbackImage.trim() !== "") { let cleanFB = fallbackImage.toLowerCase().trim(); fallbackFile = app.vault.getFiles().find(f => f.path.toLowerCase() === cleanFB || f.path.toLowerCase().includes(cleanFB) || f.name.toLowerCase().includes(cleanFB) ); } if (fallbackFile) { dv.paragraph(`![[${fallbackFile.path}|cover]]`); } else { dv.paragraph(`*No artwork generated yet for ${title}*`); }}
// 5. Render artwork or fallback
if (match) {
dv.paragraph(![[${match.path}|cover]]);
} else {
let fallbackFile = fallbackImage ? app.vault.getAbstractFileByPath(fallbackImage) : null;
if (fallbackFile) {
dv.paragraph(![[${fallbackFile.path}|cover]]);
} else {
dv.paragraph(*No artwork generated yet for ${title}*);
}
}