MaximCalculator Free, fun & accurate calculators
💖 Platinum love & fun layout
🌙

Anime Protagonist or Sidekick Test

Are you the main character with plot armor… or the legendary sidekick who secretly carries the whole team? This free test gives you a 0–100 Protagonist Score, a fun anime role archetype, and a shareable breakdown you can drop in your group chat. No AI. No signup. 100% free.

🎬Protagonist score (0–100)
🧩Role archetype + strengths
💾Save & compare runs
📱Built for screenshots & shares

Answer the anime questions

Choose the options that feel most “you.” There are no wrong answers — this is a playful vibe test. For the most accurate chaos, answer like you would on your messiest day.

📝
🎭
🧠
👑
🛡️
🏋️
🤝
📖
🎤
🌪️
Your anime role will appear here
Enter your name and run the test to see your Protagonist Score + archetype.
This is a light-hearted personality-style quiz designed for fun, screenshots and sharing.
Scale: 0 = background NPC · 50 = elite side character · 100 = main protagonist energy.
NPCSidekickProtagonist

This Anime Protagonist or Sidekick Test is for entertainment only. It’s not psychological advice, not a diagnosis, and not a real personality assessment.

🧠 How it works

What “Protagonist vs Sidekick” really means (in this test)

In anime storytelling, “protagonist energy” isn’t just about being loud or powerful. It’s about who the story bends around: the person who acts first, grows on screen, and changes the world (or at least changes the friend group). Meanwhile, sidekicks are not “less” — they’re often the most beloved characters because they’re consistent, clever, and emotionally grounded.

This calculator turns that idea into a playful score. We ask about a few classic anime drivers: leadership (do you step up?), training arc energy (do you grind?), friendship power (do you build alliances?), and plot armor (do you somehow survive the consequences of your decisions?). We also include backstory intensity because let’s be real: main characters usually have lore. Finally, we add chaos tolerance and monologue habit to capture the difference between “quiet competent” and “cinematic.”

Your final result includes (1) a Protagonist Score (0–100), (2) a role archetype, and (3) a short story-s " + id); const shell = document.getElementById("shell-" + id); if (err) err.textContent = ""; if (shell) shell.style.borderColor = "var(--border-subtle)"; }); } function calculate() { clearErrors(); const yourNameEl = document.getElementById("yourName"); const theirNameEl = document.getElementById("theirName"); const vibeEl = document.getElementById("vibe"); const name1 = cleanName(yourNameEl.value); const name2 = cleanName(theirNameEl.value); const vibe = vibeEl.value || ""; let valid = true; if (!name1) { valid = false; document.getElementById("error-yourName").textContent = "Please enter your name."; document.getElementById("shell-yourName").style.borderColor = "var(--danger)"; } if (!name2) { valid = false; document.getElementById("error-theirName").textContent = "Please enter their name."; document.getElementById("shell-theirName").style.borderColor = "var(--danger)"; } if (!valid) { document.getElementById("status-message").textContent = "Enter both names to see your soulmate score."; return; } const score = computeSoulmateScore(name1, name2, vibe); lastScore = score; lastLabel = getScoreLabel(score); lastNamesText = `${name1} + ${name2}`; const titleEl = document.getElementById("result-title"); const mainEl = document.getElementById("result-main"); const metaEl = document.getElementById("result-meta"); const meterFill = document.getElementById("relative-meter-fill"); const meterLabel = document.getElementById("relative-meter-label"); if (titleEl) { titleEl.textContent = `Soulmate Match Score: ${score}%`; } if (mainEl) { mainEl.textContent = getScoreDescription(score, name1, name2, vibe); } let meta = `On this fun name-based scale, 0% means low soulmate match, 50% means mixed vibes and 100% means intense soulmate energy.`; const extra = vibeFlavorText(vibe); if (extra) meta += " " + extra; if (metaEl) { metaEl.textContent = meta; } if (meterFill) { meterFill.style.width = score + "%"; } if (meterLabel) { meterLabel.textContent = `Current soulmate score: ${score}% · ${lastLabel}.`; } const status = document.getElementById("status-message"); if (status) { status.textContent = "Soulmate score updated. You can now save or share your result."; } } function clearCalculator() { const fields = ["yourName", "theirName"]; fields.forEach(id => { const el = document.getElementById(id); if (el) el.value = ""; const err = document.getElementById("error-" + id); const shell = document.getElementById("shell-" + id); if (err) err.textContent = ""; if (shell) shell.style.borderColor = "var(--border-subtle)"; }); const vibeEl = document.getElementById("vibe"); if (vibeEl) vibeEl.selectedIndex = 0; lastScore = null; lastLabel = ""; lastNamesText = ""; document.getElementById("result-title").textContent = "Your soulmate result will appear here"; document.getElementById("result-main").textContent = "Enter both names and tap “Find Soulmate Match” to see your score."; document.getElementById("result-meta").textContent = "This is a light-hearted name-based soulmate fun tool for sharing with friends."; document.getElementById("relative-meter-fill").style.width = "0%"; document.getElementById("relative-meter-label").textContent = "Scale: 0 = low match · 50 = mixed vibes · 100 = intense soulmate energy."; document.getElementById("status-message").textContent = ""; } function formatShareText() { if (lastScore === null || !lastNamesText) { return "I tried the Soulmate Finder on MaximCalculator – enter two names and see your soulmate score!"; } return `${lastNamesText} got a Soulmate Match Score of ${lastScore}% (${lastLabel}) on the Soulmate Finder.\n` + "Try it here: https://maximcalculator.com/calculators/soulmate-finder.html"; } function saveResult() { if (lastScore === null || !lastNamesText) { const status = document.getElementById("status-message"); if (status) { status.textContent = "Find your soulmate score first, then you can save it."; } return; } const now = new Date(); const record = { score: lastScore, label: lastLabel, names: lastNamesText, timestamp: now.toISOString() }; let history = []; try { const raw = localStorage.getItem("soulmateHistory"); if (raw) history = JSON.parse(raw); } catch (e) { history = []; } history.unshift(record); if (history.length > 20) history = history.slice(0, 20); localStorage.setItem("soulmateHistory", JSON.stringify(history)); renderHistory(history); const status = document.getElementById("status-message"); if (status) { status.textContent = "Result saved on this device."; } } function renderHistory(history) { const block = document.getElementById("saved-results-block"); if (!block) return; if (!history || history.length === 0) { block.innerHTML = ""; return; } let html = "

Saved soulmate checks (this device only)

    "; history.forEach(item => { const d = new Date(item.timestamp); const dateStr = d.toLocaleString(undefined, { year: "numeric", month: "short", day: "numeric", hour: "2-digit", minute: "2-digit" }); html += `
  • ${dateStr}: ${item.score}% (${item.label}) – ${item.names}
  • `; }); html += "
"; block.innerHTML = html; } function loadHistoryOnStart() { try { const raw = localStorage.getItem("soulmateHistory"); if (!raw) return; const history = JSON.parse(raw); renderHistory(history); } catch (e) { // ignore } } // Sharing helpers function shareWhatsApp() { const text = encodeURIComponent(formatShareText()); window.open(`https://api.whatsapp.com/send?text=${text}`, "_blank"); } function shareTelegram() { const text = encodeURIComponent(formatShareText()); window.open( `https://t.me/share/url?url=${encodeURIComponent("https://maximcalculator.com/calculators/soulmate-finder.html")}&text=${text}`, "_blank" ); } function shareTwitter() { const text = encodeURIComponent(formatShareText()); window.open(`https://twitter.com/intent/tweet?text=${text}`, "_blank"); } function shareFacebook() { const url = encodeURIComponent("https://maximcalculator.com/calculators/soulmate-finder.html"); window.open(`https://www.facebook.com/sharer/sharer.php?u=${url}`, "_blank"); } function shareLinkedIn() { const url = encodeURIComponent("https://maximcalculator.com/calculators/soulmate-finder.html"); const text = encodeURIComponent("Check out this free Soulmate Finder on MaximCalculator."); window.open(`https://www.linkedin.com/sharing/share-offsite/?url=${url}&text=${text}`, "_blank"); } function copyResult() { const text = formatShareText(); if (navigator.clipboard && navigator.clipboard.writeText) { navigator.clipboard.writeText(text).then(() => { const status = document.getElementById("status-message"); if (status) status.textContent = "Copied result text to clipboard."; }).catch(() => { alert("Copy failed. You can select and copy manually."); }); } else { alert("Clipboard not available. You can select and copy the page text manually."); } } async function shareNative() { const text = formatShareText(); if (navigator.share) { try { await navigator.share({ title: "Soulmate Finder", text, url: "https://maximcalculator.com/calculators/soulmate-finder.html" }); } catch (e) { // user cancelled, ignore } } else { copyResult(); } } // Dark mode toggle function initTheme() { try { const stored = localStorage.getItem("maximTheme"); if (stored === "dark") { document.body.classList.add("dark-mode"); } } catch (e) { // ignore } } function toggleDarkMode() { document.body.classList.toggle("dark-mode"); const isDark = document.body.classList.contains("dark-mode"); try { localStorage.setItem("maximTheme", isDark ? "dark" : "light"); } catch (e) { // ignore } } // Schema.org JSON-LD function initSchema() { const schemaEl = document.getElementById("calculatorSchema"); if (!schemaEl) return; const data = { "@context": "https://schema.org", "@type": "WebApplication", "name": "Soulmate Finder", "url": "https://maximcalculator.com/calculators/soulmate-finder.html", "applicationCategory": "Calculator", "operatingSystem": "Any", "description": "Free Soulmate Finder calculator. Enter two names to get a playful 0–100 soulmate match score with a romantic explanation, then save and share it.", "publisher": { "@type": "Organization", "name": "MaximCalculator" } }; schemaEl.textContent = JSON.stringify(data); } // Init on load document.addEventListener("DOMContentLoaded", function () { // year const yearEl = document.getElementById("year"); if (yearEl) { yearEl.textContent = new Date().getFullYear(); } initTheme(); initSchema(); loadHistoryOnStart(); const toggle = document.getElementById("darkToggle"); if (toggle) { toggle.addEventListener("click", toggleDarkMode); } });