Official website

of the Commonwealth of Pennsylvania

Altar Ego — Aka

<script> // ---------- EGO DATA ---------- const EGOS = [ id: "innocent", name: "Innocent", icon: "🍃", desc: "Beginner's luck", baseBonus: clickGain: 1 , cost: 25, unlocked: false , id: "seeker", name: "Seeker", icon: "🔍", desc: "Attuned to flow", baseBonus: autoGen: 0.8 , cost: 100, unlocked: false , id: "judge", name: "Judge", icon: "⚖️", desc: "Precision soul", baseBonus: critChance: 15 , cost: 400, unlocked: false , // crit chance percent id: "shadow", name: "Shadow", icon: "🌑", desc: "Essence discount", baseBonus: discountPercent: 20 , cost: 1200, unlocked: false ];

EGOS.forEach(ego => if (!ego.unlocked) return; if (ego.baseBonus.clickGain) clickBase += ego.baseBonus.clickGain; if (ego.baseBonus.autoGen) autoPerSecond += ego.baseBonus.autoGen; if (ego.baseBonus.critChance) critPercent += ego.baseBonus.critChance; if (ego.baseBonus.discountPercent) discountPercent += ego.baseBonus.discountPercent; ); // cap crit at 60% for fun if (critPercent > 60) critPercent = 60; if (discountPercent > 50) discountPercent = 50; updateStatsUI();

// initial setup function init() loadGame(); bindEvents(); startAutoGeneration(); refreshGlobalBonuses(); renderEgoCards(); updateEssenceUI(); aka altar ego

function updateEssenceUI() const essenceElem = document.getElementById("essenceAmount"); if (essenceElem) essenceElem.innerText = Math.floor(essence);

// tiny floating effect (simple) function playFloatingText(msg) const flame = document.getElementById("clickFlame"); const span = document.createElement("div"); span.innerText = msg; span.style.position = "fixed"; span.style.left = "50%"; span.style.bottom = "40%"; span.style.transform = "translateX(-50%)"; span.style.background = "#000000aa"; span.style.color = "#ffd58c"; span.style.padding = "6px 16px"; span.style.borderRadius = "40px"; span.style.fontSize = "0.9rem"; span.style.backdropFilter = "blur(8px)"; span.style.zIndex = "999"; span.style.pointerEvents = "none"; span.style.transition = "opacity 1s ease, transform 0.8s"; document.body.appendChild(span); setTimeout(() => span.style.opacity = "0"; span.style.transform = "translateX(-50%) translateY(-40px)"; setTimeout(() => span.remove(), 1000); , 50); &lt;script&gt; // ---------- EGO DATA ---------- const EGOS

// Save & Load function saveGame() const saveData = essence: essence, egosUnlocked: EGOS.map(e => ( id: e.id, unlocked: e.unlocked )), version: 1 ; localStorage.setItem("akaAltarEgoSave", JSON.stringify(saveData));

/* Ego Grid */ .ego-grid display: grid; grid-template-columns: repeat(auto-fit, minmax(160px, 1fr)); gap: 1rem; margin: 2rem 0; .ego-card background: rgba(10, 12, 20, 0.7); border-radius: 1.8rem; padding: 1rem 0.8rem; text-align: center; border: 1px solid rgba(220, 170, 90, 0.5); transition: 0.2s; cursor: pointer; position: relative; .ego-card.locked opacity: 0.65; filter: grayscale(0.3); .ego-card.unlocked border-color: #e0b050; box-shadow: 0 0 12px rgba(230, 160, 70, 0.6); background: rgba(30, 25, 45, 0.8); .ego-card:hover transform: translateY(-5px); background: rgba(25, 28, 45, 0.9); .ego-icon font-size: 2.5rem; display: block; .ego-name font-size: 1.4rem; font-weight: bold; margin: 8px 0 4px; background: linear-gradient(135deg, #e6c8a0, #cdaa77); background-clip: text; -webkit-background-clip: text; color: transparent; .ego-desc font-size: 0.7rem; color: #bcae8f; margin: 5px 0; .ego-bonus font-size: 0.75rem; background: #221c10aa; border-radius: 20px; display: inline-block; padding: 3px 10px; margin: 6px 0; color: #f5bc70; .ego-cost font-size: 0.75rem; color: #efb87e; margin-top: 6px; font-weight: bold; .lock-badge position: absolute; top: 8px; right: 12px; font-size: 1.2rem; opacity: 0.8; desc: "Beginner's luck"

function resetGame() if (confirm("Reset your Altar? All Egos will sleep again, essence lost.")) essence = 0; EGOS.forEach(ego => ego.unlocked = false); refreshGlobalBonuses(); renderEgoCards(); updateEssenceUI(); saveGame(); playFloatingText("🕯️ The altar is cleansed...");