This page explains the Sparkuna practice run to Eduversal HQ. It changes nothing in Sparkuna and reads no student data. The simulator runs the same picking, grading and points rules as the server, in your browser, with made-up questions.
Every number and rule comes from the Central Hub Cloud Functions (functions/practice-game.js, daily-rewards.js, index.js, island.js, garden.js, build.js), as they stood on 16 October 2026. Changes made on 16 October are marked 16 Oct.
One run, start to finish
What the server does from the moment a student presses Start until the last answer is graded.
- Only that level
- Boss: one harder question (only when the level has 5+ questions)
- Reserve: up to 3 harder questions
- No rescue questions
- Hard has nothing harder: no boss, no reserve
Top-up 16 Oct: when the level runs out of unseen questions, the repeats give way to unseen questions from the nearest other level before anything repeats. The run is then served easy → hard.
A chapter with no questions at that level: the run is served at Any level and says so.
- Under 30 answers in this subject so far (counted on the chapter medals)
- About 70% easy, the rest medium
- Hard only if easy and medium run out
- Boss: medium · Reserve: 3 medium
- Rescue: 2 easy held back
- 30+ answers in this subject
- Mixed from the whole pool
- Boss: hard · Reserve: 3 hard
- Rescue: 2 easy held back
- The student sees whether it was right, the answer and the explanation. When the question has them, the worked solution comes too, in 2-5 short steps; after a wrong answer, "Show me how" walks through them one at a time. Steps are never sent with the question, and never in the English placement test.
- A solved-before question answered right again pays no points in free practice, and no solved-before answer moves the chapter medal. The rematch deck still sees it. A question answered wrong before still pays: getting it right now is learning.
TKA Bahasa Inggris / Bahasa Indonesia banks are the exception: their questions belong to a reading text, so a run serves whole texts (about one text per 3 questions asked for, at least 2 texts, at most 20 questions), unseen texts first, served easy → hard; in a warm-up, easier texts are picked first. A skill, chapter or difficulty choice is ignored there, and there is no boss, power-up or rescue, because a swapped question would sit under the wrong text.
Run simulator
Set up a pool and a student, then answer the run question by question. It opens with sample answers (3 right, 2 wrong, 5 right) so both swaps show. Press Clear answers to answer it yourself. Chips: E = easy, M = medium, H = hard; the number is the question.
Reserve · power-up swaps
Rescue · easy swaps
What happened
What the run above pays
Points come from right answers, weighted by difficulty, plus a few run bonuses. The first 20 practice runs of a Jakarta day pay in full. After that only a careful run pays: half for runs 21-30, a quarter from run 31. Since 16 October, solved-before questions pay nothing in free practice and shrink the run bonuses.
Same run, played at different times of the day
| Right answer | Normal | Rematch | Solved before |
|---|
5 points × 1 / 1.5 / 2, rounded; a rematch run multiplies by 1.5 again. "Solved before" applies to free practice runs only (not rematch, homework or exam-map runs). The daily challenge pays a 50 base plus a 25 first-of-day bonus instead of the finish bonus, and does not count toward the 20-run rate. The runs that do count are all practice-mode runs of the day: free practice, rematch, exam-map and homework runs (Live Class is outside it too).
Chapter medals, the rematch deck and "your best"
Each answer is counted for its Cambridge chapter. A medal only ever goes up. These records live in practice_mastery and never feed chapter_mastery or ease_growth. Exam Prep questions (SAT, TKA and the others) and the English placement test touch neither medals nor the rematch deck.
Since 16 October an answer on a solved-before question does not move the medal at all (count, last 10, hard ones right). Medals already earned stay.
Rematch deck
A wrong answer (or "I don't know this yet") puts the question in the deck. Right on schedule moves it on; the third right answer on schedule clears it. A wrong answer at any stage starts it over. The deck keeps the 150 most recent misses; a rematch run serves up to 10 due questions.
A careful free-practice run started from a Math or Science chapter can set the student's best in that chapter: the share of questions right, and with the same share, more questions is better. The server sends it with the start of the next run in that chapter and with the result at the end. No points, no speed, nobody else's score: only "your best".
Questions that carry a worked solution send it after the answer, in 2-5 short steps. They are never part of the question the student sees before answering.
Students were replaying the same small pools for full points. Now a question answered right in the last 30 runs earns nothing again in free practice. Points already earned were not touched.
What a careful run also unlocks
A careful run (island.js isEffortRun) has 5 or more questions, every one answered, not every answer "I don't know this yet", no gap under 2 s and a median gap of at least 5 s (from the start of the run to the first answer, then between answers, on server times). The score does not matter. Each careful run feeds four things on the student's island, each with its own daily limit. None of them gives or takes points.
More: My Island (pieces, paints, statues, the Workshop) and Island Garden (seeds, sunshine, harvests and the kitchen).
Source
All files are in Central Hub/functions/, read on 16 October 2026. Their unit tests sit next to them (practice-game.test.js, daily-rewards.test.js, island.test.js, garden.test.js, build.test.js, solution-steps.test.js).
| Rule | File → function |
|---|---|
| Picking a run, warm-up, boss, reserve, rescue, top-up | practice-game.js → planFreeRun |
| Reading-text runs (TKA languages) | practice-game.js → planSetRun |
| "Seen" = answered in the last 30 runs; solved-before list | index.js → startPracticeRun (PRACTICE_RECENT_ATTEMPTS) · practice-game.js → solvedBefore |
| Power-up and rescue swaps, steps after an answer | index.js → gradePracticeAnswerTx · practice-game.js → shouldRescue · solution-steps.js → cleanSteps |
| Points per answer, run bonuses, solved-before share | practice-game.js → pointsForCorrect, runPoints |
| Daily rate after 20 runs | daily-rewards.js → taperPoints · index.js → awardPracticeAttemptPoints |
| Careful run | island.js → isEffortRun (EFFORT) |
| Chapter medals, rematch deck | practice-game.js → masteryTier, applyAnswer, MASTERY_BONUS |
| Your best in this chapter | practice-game.js → applyChapterBest, bestBetter · island.js → statueRun |
| Island picks | island.js → creditPicks (ISLAND_DAILY_PICKS, BANK.MAX) |
| Garden seeds and sunshine | garden.js → creditSeeds, sunshine (SEED, YIELD) |
| Workshop room | build.js → creditRuns, capacity (PER_RUN, RUNS_PER_DAY) |
| Chapter statues | island.js → creditStatues (STATUE_TIERS) |
