/** * Shared meta-progression definitions used by BOTH the Node server * (authoritative validation of purchases & crystal rewards) and the * Vue frontend (talent tree UI). Keep in sync – single source of truth. */ export const UPGRADE_BRANCHES = [ { id: 'economy', name: 'Wirtschaft', icon: '🪙', desc: 'Verbessere Startkapital, Erträge und Pionierarbeit.' }, { id: 'defense', name: 'Verteidigung', icon: '❤️', desc: 'Stärke die Festung mit Leben, Schilden und Notfall-Pulsen.' }, { id: 'towers', name: 'Turmforschung', icon: '⚔️', desc: 'Erhöhe Reichweite, Feuerrate und Elementarkraft aller Türme.' }, ] export const META_UPGRADES = { // --- Wirtschaft --- start_gold: { id: 'start_gold', name: 'Startkapital', branch: 'economy', icon: '💰', desc: 'Starte jedes Spiel mit zusätzlichem Gold.', maxLevel: 5, costs: [30, 70, 150, 300, 600], }, wave_bonus: { id: 'wave_bonus', name: 'Golderlös', branch: 'economy', icon: '🪙', desc: 'Erhöht die Belohnung für besiegte Gegner und abgeschlossene Wellen.', maxLevel: 5, costs: [40, 90, 200, 400, 800], }, obstacle_discount: { id: 'obstacle_discount', name: 'Pionierarbeit', branch: 'economy', icon: '🪓', desc: 'Reduziert die Goldkosten zum Entfernen von Bäumen und Felsen.', maxLevel: 3, costs: [50, 120, 280], }, // --- Verteidigung --- bonus_lives: { id: 'bonus_lives', name: 'Festungsmauern', branch: 'defense', icon: '🛡️', desc: 'Erhöht die maximalen Leben deiner Basis.', maxLevel: 5, costs: [25, 60, 140, 280, 550], }, shockwave: { id: 'shockwave', name: 'Notfall-Puls', branch: 'defense', icon: '💥', desc: 'Löst bei Lebensverlust eine Schockwelle aus, die alle Gegner auf dem Weg verlangsamt.', maxLevel: 3, costs: [80, 200, 450], }, fortress_shield: { id: 'fortress_shield', name: 'Energieschild', branch: 'defense', icon: '💠', desc: 'Absorbiert alle 5 Wellen den ersten durchbrechenden Gegner komplett ohne Lebensverlust.', maxLevel: 1, costs: [350], }, // --- Turmforschung --- tower_range: { id: 'tower_range', name: 'Weitsicht', branch: 'towers', icon: '🎯', desc: 'Erhöht die Reichweite aller Türme.', maxLevel: 5, costs: [45, 100, 220, 450, 900], }, tower_speed: { id: 'tower_speed', name: 'Schnellfeuer', branch: 'towers', icon: '⚡', desc: 'Erhöht die Angriffsgeschwindigkeit aller Türme.', maxLevel: 5, costs: [50, 110, 240, 500, 1000], }, dot_potency: { id: 'dot_potency', name: 'Elementarkraft', branch: 'towers', icon: '🔥', desc: 'Verstärkt Gift- und Brandschaden über Zeit sowie deren Dauer.', maxLevel: 3, costs: [70, 180, 400], }, } /** Crystals earned for a finished run (server-authoritative, mirrored client-side). */ export function calcCrystalsEarned(wave, score, win) { let base = Math.floor(wave * 2.5) if (win) base += 40 const scoreBonus = Math.floor(score / 250) return Math.max(1, base + scoreBonus) }