From f9dd4c3ca4018f474215ab7a34328f73f4f0bc86 Mon Sep 17 00:00:00 2001 From: Tetardtek Date: Sat, 28 Mar 2026 21:13:20 +0100 Subject: [PATCH] feat: click scales with generators (types + quantity), not prod/s MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit clickGain = base × prestige × tree × (1 + types×2 + totalOwned×0.05) Click power is now its own system: - Each generator TYPE owned: +2 to click mult (diversity = power) - Each generator UNIT owned: +0.05 (stacking helps but less) - 5 types × 10 each = x13.5 click multiplier from infra alone - Decoupled from prod/s — buying generators boosts BOTH systems ClickPanel shows infra breakdown (types bonus + units bonus). --- Frontend/src/lib/components/ClickPanel.svelte | 5 +++- Frontend/src/lib/core/economy.ts | 27 ++++++++++++------- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/Frontend/src/lib/components/ClickPanel.svelte b/Frontend/src/lib/components/ClickPanel.svelte index 7dc17a3..6cbfad5 100644 --- a/Frontend/src/lib/components/ClickPanel.svelte +++ b/Frontend/src/lib/components/ClickPanel.svelte @@ -19,7 +19,10 @@
Gain par clic - x{b.prestigeMult.toFixed(1)} prestige · x{b.treeMult.toFixed(0)} arbre · x{b.prodBonus.toFixed(1)} prod + x{b.prestigeMult.toFixed(1)} prestige · x{b.treeMult.toFixed(0)} arbre · x{b.genBonus.toFixed(1)} infra + + + {b.genTypes} types (+{b.genTypes * 2}) · {b.genTotal} unites (+{(b.genTotal * 0.05).toFixed(1)})
{formatNumber(b.total)} diff --git a/Frontend/src/lib/core/economy.ts b/Frontend/src/lib/core/economy.ts index fcc3122..6c378e0 100644 --- a/Frontend/src/lib/core/economy.ts +++ b/Frontend/src/lib/core/economy.ts @@ -611,12 +611,18 @@ export function applyIdleGains(state: GameState, now: number): GameState { }; } -// Gain par clic — scale avec la production passive (1% de prod/s en bonus) +// Bonus clic depuis les générateurs (diversité + quantité) +export function getGeneratorClickBonus(generators: Generator[]): number { + const typesOwned = generators.filter((g) => g.owned > 0).length; + const totalOwned = generators.reduce((sum, g) => sum + g.owned, 0); + return 1 + typesOwned * 2 + totalOwned * 0.05; +} + +// Gain par clic — scaling propre : base × prestige × arbre × generateurs export function getClickGain(state: GameState): number { const treeClickMult = getClickMultiplierFromTree(state.evolutionTree); - const base = state.clickMultiplier * state.prestigeMultiplier * treeClickMult; - const prodBonus = 1 + totalProductionPerSecond(state) * 0.01; - return Math.floor(base * prodBonus); + const genBonus = getGeneratorClickBonus(state.generators); + return Math.floor(state.clickMultiplier * state.prestigeMultiplier * treeClickMult * genBonus); } // Breakdown complet du clic (pour affichage cockpit) @@ -624,7 +630,9 @@ export interface ClickBreakdown { base: number; prestigeMult: number; treeMult: number; - prodBonus: number; // multiplicateur depuis prod passive (1 + prod/s × 0.01) + genBonus: number; // multiplicateur depuis generateurs (types + quantite) + genTypes: number; // types possedes + genTotal: number; // total unites possedees total: number; // gain par clic (floor) doubleChance: number; critChance: number; @@ -636,15 +644,16 @@ export function getClickBreakdown(state: GameState): ClickBreakdown { const base = state.clickMultiplier; const prestigeMult = state.prestigeMultiplier; const treeMult = getClickMultiplierFromTree(state.evolutionTree); - const pps = totalProductionPerSecond(state); - const prodBonus = 1 + pps * 0.01; - const total = Math.floor(base * prestigeMult * treeMult * prodBonus); + const genBonus = getGeneratorClickBonus(state.generators); + const genTypes = state.generators.filter((g) => g.owned > 0).length; + const genTotal = state.generators.reduce((sum, g) => sum + g.owned, 0); + const total = Math.floor(base * prestigeMult * treeMult * genBonus); const doubleChance = getDoubleClickChance(state.evolutionTree); const critChance = getCritClickChance(state.evolutionTree); const autoClicksPerSec = getAutoClicksPerSecond(state.evolutionTree); const effectivePerSec = autoClicksPerSec * total; - return { base, prestigeMult, treeMult, prodBonus, total, doubleChance, critChance, autoClicksPerSec, effectivePerSec }; + return { base, prestigeMult, treeMult, genBonus, genTypes, genTotal, total, doubleChance, critChance, autoClicksPerSec, effectivePerSec }; } export interface ClickResult {