JavaScript must be enabled to play.
Browser lacks capabilities required to play.
Upgrade or switch to another browser.
Loading…
<div class="feedback no"> <strong>Hint:</strong> Subtract 5 from both sides to get \(2x=10\), then divide by 2. </div>
A fallen sign reads: “Distribute before you combine.” **Solve:** \(3(2x - 4) = 18\) <div class="choices"> <<linkreplace "x = 5">> <<wrong>> <div class="feedback no">Check distribution: \(3(2x-4)=6x-12\).</div> <div class="nav-row"><<link "Try again">><<goto "ALG Q2">><</link>></div> <</linkreplace>> <<linkreplace "x = 5 (Correct)">> <<givexp 12>> <div class="feedback ok"><strong>Correct!</strong> \(6x-12=18 \Rightarrow 6x=30 \Rightarrow x=5\). +12 XP.</div> <div class="nav-row"> <<link "Onward to Geometry Gorge">><<goto "Geometry Gorge (Intro)">><</link>> <<link "Back to Start">><<goto "Start">><</link>> </div> <</linkreplace>> </div>
A weathered rope bridge sways above a chasm labeled "Systems of Equations." **Solve the system:** \( 2x + y = 7 \) \( x - y = 1 \) <div class="choices"> <<linkreplace "x = 8/3, y = 5/3">> <<wrong>> <div class="feedback no">Try solving one equation for a variable and substituting into the other.</div> <div class="nav-row"><<link "Try again">><<goto "ALG Q3">><</link>></div> <</linkreplace>> <<linkreplace "x = 4, y = -1">> <<givexp 14>><<addfragment "Systems">> <div class="feedback ok"><strong>Correct!</strong> Adding the equations quickly eliminates \(y\). +14 XP, Fragment: <em>Systems</em>.</div> <div class="nav-row"> <<link "Next Algebra challenge">><<goto "ALG Q4">><</link>> <<link "Return to Cliffs hub">><<goto "Algebraic Cliffs">><</link>> </div> <</linkreplace>> </div>
Higher on the ridge, runes glow around a quadratic. **Find the roots:** \( x^2 - 6x + 5 = 0 \) <div class="choices"> <<linkreplace "x = 1 and x = 5">> <<givexp 16>><<set $doneAlgebra = true>> <div class="feedback ok"><strong>Correct!</strong> \((x-1)(x-5)\) gives roots at 1 and 5. +16 XP.</div> <div class="nav-row"> <<link "View Path Summary">><<goto "Path Summary">><</link>> <<link "More Algebra practice">><<goto "Algebraic Cliffs">><</link>> </div> <</linkreplace>> <<linkreplace "x = 2 and x = 3">> <<wrong>> <div class="feedback no">Check: \((x-2)(x-3) = x^2 - 5x + 6\), not our quadratic.</div> <div class="nav-row"><<link "Try again">><<goto "ALG Q4">><</link>></div> <</linkreplace>> </div>
You approach a narrow ledge with carvings: “Undo operations in reverse.” **Solve:** \(2x + 5 = 15\) <div class="choices"> /* Wrong choice with hint logic */ <<linkreplace "x = 3">> <<set $skillInsight = $skillInsight ?? true>> <!-- enable insight by default for demo --> <<wrong>> <<if $skillInsight>><<include "ALG Q1 Hint">><<else>> <div class="feedback no">Try isolating \(x\) by undoing operations in reverse.</div><</if>> <div class="nav-row"> <<link "Try again">><<goto "Algebraic Cliffs">><</link>> </div> <</linkreplace>> /* Correct choice */ <<linkreplace "x = 5">> <<givexp 10>><<addfragment "Algebra">> <div class="feedback ok"><strong>Correct!</strong> Subtract 5, then divide by 2. +10 XP, Fragment: <em>Algebra</em>.</div> <div class="nav-row"> <<link "Continue up the Cliffs">><<goto "ALG Q2">><</link>> </div> <</linkreplace>> </div>
A glowing graph shows \(f(x) = 3x^2\). **Find \(f'(x)\).** <div class="choices"> <<linkreplace "f'(x) = 6x">> <<givexp 10>><<addfragment "Derivatives">> <div class="feedback ok"><strong>Correct!</strong> Power rule: bring down the 2 and multiply the coefficient. +10 XP, Fragment: <em>Derivatives</em>.</div> <div class="nav-row"> <<link "Next Calculus challenge">><<goto "CALC Q2">><</link>> <<link "Back to Calculus hub">><<goto "Calculus Crater (Intro)">><</link>> </div> <</linkreplace>> <<linkreplace "f'(x) = 3x">> <<wrong>> <div class="feedback no">You missed the factor of 2 from the exponent.</div> <div class="nav-row"><<link "Try again">><<goto "CALC Q1">><</link>></div> <</linkreplace>> </div>
An inscription reads: "Total change from 0 to 2." You see \(f(x) = 4x\). **Compute \( \int_{0}^{2} 4x \, dx \).** <div class="choices"> <<linkreplace "8">> <<givexp 14>><<set $doneCalculus = true>> <div class="feedback ok"><strong>Correct!</strong> The antiderivative is \(2x^2\), so \(2(2^2) - 2(0^2) = 8\). +14 XP.</div> <div class="nav-row"> <<link "View Path Summary">><<goto "Path Summary">><</link>> <<link "Back to Calculus Crater">><<goto "Calculus Crater (Intro)">><</link>> </div> <</linkreplace>> <<linkreplace "16">> <<wrong>> <div class="feedback no">Remember to plug in the bounds after finding the antiderivative \(2x^2\).</div> <div class="nav-row"><<link "Try again">><<goto "CALC Q2">><</link>></div> <</linkreplace>> </div>
The air crackles with changing rates. Here, slopes and accumulated areas decide your fate. <div class="choices"> <<link "Derivative Ridge">><<goto "CALC Q1">><</link>> <<link "Area Basin">><<goto "CALC Q2">><</link>> <<link "Back to Start">><<goto "Start">><</link>> </div>
A quick warm-up. Solve: **If \( f(x)=2x+7 \), what is \( f(4) \)?** <div class="choices"> <<linkreplace "f(4) = 15">> <<wrong>> <div class="feedback no">Close! Compute \(2 \cdot 4 + 7\).</div> <div class="nav-row"> <<link "Try again">><<goto "Daily Challenge">><</link>> </div> <</linkreplace>> <<linkreplace "f(4) = 16">> <<wrong>> <div class="feedback no">That’s \(2\cdot4=8\), don’t forget the +7.</div> <div class="nav-row"> <<link "Try again">><<goto "Daily Challenge">><</link>> </div> <</linkreplace>> <<linkreplace "f(4) = 15">> <<wrong>> <div class="feedback no">Recheck your arithmetic and parentheses.</div> <div class="nav-row"> <<link "Try again">><<goto "Daily Challenge">><</link>> </div> <</linkreplace>> <<linkreplace "f(4) = 15">> <<wrong>> <div class="feedback no">Try once more.</div> <div class="nav-row"> <<link "Try again">><<goto "Daily Challenge">><</link>> </div> <</linkreplace>> <<linkreplace "f(4) = 15">> <<wrong>> <div class="feedback no">Keep at it.</div> <div class="nav-row"> <<link "Try again">><<goto "Daily Challenge">><</link>> </div> <</linkreplace>> <<linkreplace "f(4) = 15">> <<wrong>> <div class="feedback no">One more think step.</div> <div class="nav-row"> <<link "Try again">><<goto "Daily Challenge">><</link>> </div> <</linkreplace>> <<linkreplace "f(4) = 15">> <<wrong>> <div class="feedback no">Compute carefully.</div> <div class="nav-row"> <<link "Try again">><<goto "Daily Challenge">><</link>> </div> <</linkreplace>> <<linkreplace "f(4) = 15">> <<wrong>> <div class="feedback no">Almost!</div> <div class="nav-row"> <<link "Try again">><<goto "Daily Challenge">><</link>> </div> <</linkreplace>> <<linkreplace "f(4) = 15">> <<wrong>> <div class="feedback no">Rethink.</div> <div class="nav-row"> <<link "Try again">><<goto "Daily Challenge">><</link>> </div> <</linkreplace>> <<linkreplace "f(4) = 15">> <<wrong>> <div class="feedback no">Try computing step by step.</div> <div class="nav-row"> <<link "Try again">><<goto "Daily Challenge">><</link>> </div> <</linkreplace>> <<linkreplace "f(4) = 15 (Correct)">> <<givexp 5>><<addfragment "Functions">> <div class="feedback ok"><strong>Correct!</strong> \(2\cdot4+7=15\). +5 XP, Fragment: <em>Functions</em>.</div> <div class="nav-row"> <<link "Back to Start">><<goto "Start">><</link>> </div> <</linkreplace>> </div>
At Angle Arch, three rays meet. The measures are \(40^\circ\), \(50^\circ\), and \(90^\circ\). **What kind of triangle do these angles form?** <div class="choices"> <<linkreplace "Acute triangle">> <<wrong>> <div class="feedback no">An acute triangle has all angles less than \(90^\circ\).</div> <div class="nav-row"><<link "Try again">><<goto "GEO Q1">><</link>></div> <</linkreplace>> <<linkreplace "Right triangle">> <<givexp 10>><<addfragment "Geometry">> <div class="feedback ok"><strong>Correct!</strong> One angle is \(90^\circ\), so it’s a right triangle. +10 XP, Fragment: <em>Geometry</em>.</div> <div class="nav-row"> <<link "Next Geometry challenge">><<goto "GEO Q2">><</link>> <<link "Return to Gorge hub">><<goto "Geometry Gorge (Intro)">><</link>> </div> <</linkreplace>> </div>
A stone tablet shows a base and height: \(b = 10\) units, \(h = 6\) units. **What is the area of the triangle?** <div class="choices"> <<linkreplace "A = 60">> <<wrong>> <div class="feedback no">That’s the area of a rectangle with those dimensions. A triangle is half that.</div> <div class="nav-row"><<link "Try again">><<goto "GEO Q2">><</link>></div> <</linkreplace>> <<linkreplace "A = 30">> <<givexp 12>><<set $doneGeometry = true>> <div class="feedback ok"><strong>Correct!</strong> \(A = \\tfrac12 bh = \\tfrac12 (10)(6) = 30\). +12 XP.</div> <div class="nav-row"> <<link "View Path Summary">><<goto "Path Summary">><</link>> <<link "Back to Geometry Gorge">><<goto "Geometry Gorge (Intro)">><</link>> </div> <</linkreplace>> </div>
Mist curls over jagged shapes. Signs point toward arches, caverns, and terraces of triangles and circles. <div class="choices"> <<link "Angle Arch">><<goto "GEO Q1">><</link>> <<link "Triangle Terrace">><<goto "GEO Q2">><</link>> <<link "Back to Start">><<goto "Start">><</link>> </div>
- Click answers to receive instant feedback. - Correct choices award **XP** and sometimes a **Fragment**. - Hints appear automatically if you’ve earned the **Insight** skill. <div class="nav-row"> <<link "Back">><<goto "Start">><</link>> </div>
# Path Summary You pause to catch your breath and review your climb so far. <div class="card"> <h3>Progress Overview</h3> <p><strong>Total XP:</strong> <<print $xp>></p> <p> <strong>Knowledge Fragments:</strong> <<if $fragments.length == 0>> None collected yet. Each world hides at least one Fragment of Power. <<else>> <<for _i, _frag range $fragments>> <span class="tag-chip"><<print _frag>></span> <</for>> <</if>> </p> </div> <div class="card"> <h3>Worlds Completed</h3> <ul> <li> <<if $doneAlgebra>> ✅ Algebraic Cliffs cleared <<else>> ⛰️ Algebraic Cliffs — still climbing <</if>> </li> <li> <<if $doneGeometry>> ✅ Geometry Gorge cleared <<else>> 📐 Geometry Gorge — puzzles remain <</if>> </li> <li> <<if $doneCalculus>> ✅ Calculus Crater cleared <<else>> ∫ Calculus Crater — challenges ahead <</if>> </li> </ul> </div> <div class="card"> <h3>Where next?</h3> <p>Choose your next destination.</p> <div class="nav-row"> <<link "Return to Base Camp">><<goto "Start">><</link>> <<link "Algebraic Cliffs">><<goto "Algebraic Cliffs">><</link>> <<link "Geometry Gorge">><<goto "Geometry Gorge (Intro)">><</link>> <<link "Calculus Crater">><<goto "Calculus Crater (Intro)">><</link>> </div> </div>
# Math Mountains Welcome, climber! Your path winds through Algebraic Cliffs, Geometry Gorge, and Calculus Crater. Solve challenges to gain **XP** and collect **Knowledge Fragments**. When you’re ready, choose a route. <div class="choices"> <<link "Algebraic Cliffs">><<goto "Algebraic Cliffs">><</link>> <<link "Geometry Gorge">><<goto "Geometry Gorge (Intro)">><</link>> <<link "Calculus Crater">><<goto "Calculus Crater (Intro)">><</link>> <<link "Daily Challenge">><<goto "Daily Challenge">><</link>> <<link "How to Play">><<goto "How to Play">><</link>> <<link "View Path Summary">><<goto "Path Summary">><</link>> </div> <div class="card"> <strong>Tip:</strong> Press <span class="kbd">L</span> to toggle Light/Dark mode. Your choice is saved. </div>
By: Cyrus Saleem
SugarCube 2
/* ---------- GAME SCRIPT (SugarCube 2) ---------- */ (function () { /* Theme */ if (!localStorage.getItem("qq-theme")) { localStorage.setItem("qq-theme", "dark"); } function applyTheme() { var t = localStorage.getItem("qq-theme") || "dark"; document.documentElement.setAttribute("data-theme", t === "light" ? "light" : "dark"); } applyTheme(); window.toggleTheme = function () { var t = localStorage.getItem("qq-theme") === "light" ? "dark" : "light"; localStorage.setItem("qq-theme", t); applyTheme(); UI.alert("Theme set to: " + (t === "light" ? "Light" : "Dark")); }; /* Core state */ setup.fragments = setup.fragments || new Set(); Macro.add("addfragment", { handler() { const topic = this.args[0] || "Unknown"; setup.fragments.add(topic); State.variables.fragments = Array.from(setup.fragments); return ""; } }); /* XP and feedback */ State.variables.xp = State.variables.xp || 0; State.variables.doneAlgebra = State.variables.doneAlgebra || false; State.variables.doneGeometry = State.variables.doneGeometry || false; State.variables.doneCalculus = State.variables.doneCalculus || false; Macro.add("givexp", { handler() { const amt = Number(this.args[0] || 0); State.variables.xp += amt; UI.jitter("#hud-xp", 200); return ""; } }); Macro.add("wrong", { handler() { UI.jitter("#hud-xp", 200); return ""; } }); /* Utility: tiny HUD shake */ UI.jitter = function (sel, ms) { const el = document.querySelector(sel); if (!el) return; el.animate( [{ transform: "translateX(0)" }, { transform: "translateX(-2px)" }, { transform: "translateX(2px)" }, { transform: "translateX(0)" }], { duration: ms || 150, iterations: 1 } ); }; /* Add a compact HUD under the sidebar */ postdisplay["hud"] = function () { const ele = document.getElementById("hud"); if (ele) return; const root = document.createElement("div"); root.id = "hud"; root.innerHTML = ` <div class="hud-row"> <strong>XP</strong> <div id="hud-xp">${State.variables.xp}</div> </div> <div class="hud-row"> <strong>Fragments</strong> <div id="hud-frags"></div> </div> <div class="hud-row"> <span class="toggle" onclick="toggleTheme()"> Toggle Theme (<span class="kbd">L/D</span>) </span> </div> `; document.getElementById("ui-bar-body").appendChild(root); /* Update frags visual */ const fr = document.getElementById("hud-frags"); fr.innerHTML = ""; (State.variables.fragments || []).forEach(f => { const chip = document.createElement("span"); chip.className = "tag-chip"; chip.textContent = f; fr.appendChild(chip); }); }; /* Keyboard shortcut: L toggles theme */ $(document).on("keydown", (e) => { if (e.key.toLowerCase() === "l") { toggleTheme(); } }); })(); /* Re-render HUD numbers every passage */ $(document).on(":passagedisplay", function () { const xp = State.getVar("$xp"); const frags = State.getVar("$fragments") || []; const xpel = document.getElementById("hud-xp"); if (xpel) xpel.textContent = xp; const fr = document.getElementById("hud-frags"); if (fr) { fr.innerHTML = ""; frags.forEach(f => { const chip = document.createElement("span"); chip.className = "tag-chip"; chip.textContent = f; fr.appendChild(chip); }); } });