// Mythic Oracle — UNE (Universal NPC Emulator) import { getTable } from './api.js'; const tableCache = {}; async function loadTable(name) { if (!tableCache[name]) { tableCache[name] = (await getTable(name)).entries; } return tableCache[name]; } function pickRandom(entries) { return entries[Math.floor(Math.random() * entries.length)]; } function capitalize(word) { return word.charAt(0).toUpperCase() + word.slice(1); } async function rollUNE() { const [verbs, nouns, demeanors, characters] = await Promise.all([ loadTable('une-motivation-verb'), loadTable('une-motivation-noun'), loadTable('une-demeanor'), loadTable('une-character'), ]); const motivation = `${capitalize(pickRandom(verbs))} ${pickRandom(nouns)}`; const demeanor = pickRandom(demeanors); const character = pickRandom(characters); document.getElementById('uneMotivation').textContent = motivation; document.getElementById('uneDemeanor').textContent = demeanor; document.getElementById('uneCharacter').textContent = character; const result = document.getElementById('uneResult'); result.style.display = 'block'; result.classList.remove('animate'); void result.offsetWidth; result.classList.add('animate'); } async function rollRelationship() { const relationships = await loadTable('une-relationship'); const rel = pickRandom(relationships); const box = document.getElementById('relationshipResult'); box.innerHTML = `${rel}`; box.classList.remove('animate'); void box.offsetWidth; box.classList.add('animate'); } function init() { document.getElementById('uneRollBtn').addEventListener('click', rollUNE); document.getElementById('relationshipRollBtn').addEventListener('click', rollRelationship); } document.addEventListener('DOMContentLoaded', init);