Training pays a quarter, and the level bar wears its endpoints

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
wuwiandClaude Fable 5 committed 2026-08-30 15:58:34 +02:00
1 parent 7d39032907
commit a38c804069
6 files changed
+37 -10

No files matched your search

+6 -2
View File
@@ -72,11 +72,15 @@ export function beginRunXp() { runXp = 0; runFrom = levelAt(prof.xp); }
export const runDelta = () => ({ xp: runXp, from: runFrom, to: levelAt(prof.xp) });
// ONE guard for every no-stakes mode, in the shared function — a call site cannot forget it.
const muted = () => G.drill || G.bench || G.testMode || (G.match && G.match.train);
// The training court left this list 2026-08-29 (Oliver: zero pay made it feel pointless in a
// meta game): it pays A QUARTER now — reps count, the real court stays strictly 4x better, and
// the no-permadeath grind can never be the optimal one.
const muted = () => G.drill || G.bench || G.testMode;
export function award(kind, n = 1) {
if (muted()) return 0;
const amt = (XP[kind] || 0) * n;
let amt = (XP[kind] || 0) * n;
if (G.match && G.match.train) amt = Math.round(amt / 4);
if (!amt) return 0;
const before = levelAt(prof.xp);
prof.xp += amt; runXp += amt;