feat: click panel breakdown + guide updated
All checks were successful
CI/CD — Build & Deploy / Build & Deploy (push) Successful in 20s

ClickPanel in Production tab — full click breakdown:
- Gain per click with formula (base × prestige × tree)
- Double Ponte chance (+ how to unlock if not)
- Crit Ponte chance (+ how to unlock if not)
- Auto-Ponte rate + effective prod/s
- Hint to invest in Ponte branch when no tree bonuses

Guide updated with 11 sections:
- Ponte (clic) section — breakdown, double/crit/auto explained
- Generateurs section — effective prod, multi-buy, share bars
- Prestige section — quadratic scaling formula explained
- Arbre section — 3 branches + convergence detailed
- Capstones section — all 3 + convergence alpha/omega
This commit is contained in:
2026-03-28 20:58:18 +01:00
parent 120f4bedca
commit 25768e3665
4 changed files with 162 additions and 11 deletions

View File

@@ -0,0 +1,83 @@
<script lang="ts">
import { game } from '$lib/stores/game.svelte';
import { getClickBreakdown } from '$lib/core/economy';
import { formatNumber } from '$lib/utils/formatNumber';
import CollapsiblePanel from './CollapsiblePanel.svelte';
let b = $derived(getClickBreakdown(game.state));
</script>
<CollapsiblePanel title="Ponte (clic)" badge="{formatNumber(b.total)}/clic" accentClass="" defaultOpen={false}>
<!-- Main click value -->
<div class="gp-row gp-row--active">
<div class="flex flex-col">
<span class="gp-value">Gain par clic</span>
<span class="gp-label">base {b.base} × prestige x{b.prestigeMult.toFixed(1)} × arbre x{b.treeMult.toFixed(1)}</span>
</div>
<span class="gp-value gp-accent-green text-lg!">{formatNumber(b.total)}</span>
</div>
<!-- Double ponte -->
<div class="gp-row {b.doubleChance > 0 ? 'gp-row--unlocked' : 'gp-row--locked'}">
<div class="flex flex-col">
<span class="gp-value text-[0.7rem]!">Double Ponte</span>
<span class="gp-label">
{#if b.doubleChance > 0}
{(b.doubleChance * 100).toFixed(0)}% chance × 2 tetards
{:else}
Branche Ponte — "Double Ponte" (5 ADN)
{/if}
</span>
</div>
{#if b.doubleChance > 0}
<span class="gp-label gp-accent-purple">{(b.doubleChance * 100).toFixed(0)}%</span>
{:else}
<span class="gp-label"></span>
{/if}
</div>
<!-- Crit -->
<div class="gp-row {b.critChance > 0 ? 'gp-row--unlocked' : 'gp-row--locked'}">
<div class="flex flex-col">
<span class="gp-value text-[0.7rem]!">Ponte Critique</span>
<span class="gp-label">
{#if b.critChance > 0}
{(b.critChance * 100).toFixed(0)}% chance × 10 tetards
{:else}
Branche Ponte — "Ponte Critique" (20 ADN)
{/if}
</span>
</div>
{#if b.critChance > 0}
<span class="gp-label gp-accent-amber">{(b.critChance * 100).toFixed(0)}%</span>
{:else}
<span class="gp-label"></span>
{/if}
</div>
<!-- Auto-click -->
<div class="gp-row {b.autoClicksPerSec > 0 ? 'gp-row--unlocked' : 'gp-row--locked'}">
<div class="flex flex-col">
<span class="gp-value text-[0.7rem]!">Auto-Ponte</span>
<span class="gp-label">
{#if b.autoClicksPerSec > 0}
{b.autoClicksPerSec.toFixed(1)}/s × {formatNumber(b.total)} = {formatNumber(b.effectivePerSec)}/s
{:else}
Capstone Ponte — "Ponte Automatique" (200 ADN)
{/if}
</span>
</div>
{#if b.autoClicksPerSec > 0}
<span class="gp-label gp-accent-green">{formatNumber(b.effectivePerSec)}/s</span>
{:else}
<span class="gp-label"></span>
{/if}
</div>
<!-- How to boost hint -->
{#if b.treeMult <= 1}
<div class="text-center py-1">
<span class="gp-label gp-accent-amber">Depense ton ADN dans la branche Ponte pour booster tes clics</span>
</div>
{/if}
</CollapsiblePanel>

View File

@@ -617,6 +617,35 @@ export function getClickGain(state: GameState): number {
return state.clickMultiplier * state.prestigeMultiplier * treeClickMult; return state.clickMultiplier * state.prestigeMultiplier * treeClickMult;
} }
// Breakdown complet du clic (pour affichage cockpit)
export interface ClickBreakdown {
base: number;
prestigeMult: number;
treeMult: number;
total: number;
doubleChance: number; // 0-1
critChance: number; // 0-1
autoClicksPerSec: number;
effectivePerSec: number; // total × (1 + double × 1 + crit × 9) + autoClicks × total
}
export function getClickBreakdown(state: GameState): ClickBreakdown {
const base = state.clickMultiplier;
const prestigeMult = state.prestigeMultiplier;
const treeMult = getClickMultiplierFromTree(state.evolutionTree);
const total = base * prestigeMult * treeMult;
const doubleChance = getDoubleClickChance(state.evolutionTree);
const critChance = getCritClickChance(state.evolutionTree);
const autoClicksPerSec = getAutoClicksPerSecond(state.evolutionTree);
// Expected value per click = total × (1 + doubleChance × 1 + critChance × 9)
const expectedPerClick = total * (1 + doubleChance + critChance * 9);
// Auto-clicks produce total per auto-click (no double/crit on auto)
const effectivePerSec = autoClicksPerSec * total;
return { base, prestigeMult, treeMult, total, doubleChance, critChance, autoClicksPerSec, effectivePerSec };
}
export interface ClickResult { export interface ClickResult {
state: GameState; state: GameState;
gain: number; gain: number;

View File

@@ -20,26 +20,63 @@
icon: '🔄', icon: '🔄',
title: 'Boucle de jeu', title: 'Boucle de jeu',
content: [ content: [
'**1. Clique** pour pondre des tetards. Achete des **generateurs** (Nid, Mare, Marecage...) qui produisent des tetards automatiquement.', '**1. Clique** pour pondre des tetards. Achete des **generateurs** pour produire automatiquement.',
'**2. Prestige** quand tu atteins 1M de tetards. Tu perds tes tetards et generateurs, mais tu gagnes de l\'**ADN Ancestral** et un multiplicateur permanent.', '**2. Prestige** quand tu atteins le seuil de tetards. Reset tetards et generateurs, mais gagne de l\'**ADN Ancestral** + un multiplicateur permanent.',
'**3. Arbre d\'Evolution** — depense ton ADN dans 3 branches : Ponte (clics), Marais (production), Adaptation (offline/ADN).', '**3. Arbre d\'Evolution** — depense ton ADN dans 3 branches pour booster ta production, tes clics, et ta progression.',
'**4. Repete** — chaque prestige est plus rapide grace aux bonus accumules. Le seuil monte pour garder le challenge.',
], ],
}, },
{ {
icon: '', icon: '👆',
title: 'Capstones', title: 'Ponte (clic)',
content: [ content: [
'**Ponte Automatique** — auto-click 1/s qui scale avec les upgrades', 'Chaque clic rapporte : **base × prestige × arbre**. Le panneau "Ponte" dans Production te montre le breakdown complet.',
'**Symbiose Totale** — chaque type de generateur booste les autres', '**Double Ponte** — chance de doubler le gain (branche Ponte, 5 ADN)',
'**Memoire du Marais** — offline cap passe a 75%, duree 8h', '**Ponte Critique** — chance de ×10 (branche Ponte, 20 ADN)',
'**Auto-Ponte** — clics automatiques par seconde (capstone Ponte, 200 ADN). Scale avec les repeatables.',
'Le panneau montre aussi les gains auto-ponte/s — ta production passive par les clics.',
],
},
{
icon: '🏭',
title: 'Generateurs',
content: [
'5 generateurs (Nid → Lac Mystique). Chaque unite produit des tetards/s automatiquement.',
'Le cockpit Production montre la **production effective** (avec tous les bonus) et le **+X/s** que le prochain achat ajoute.',
'**Achat multiple** — x1, x5, x10, ou MAX. Le cout et la quantite s\'affichent sur le bouton.',
'La **barre de part** montre quelle fraction de ta production vient de chaque type.',
], ],
}, },
{ {
icon: '🧬', icon: '🧬',
title: 'Convergence', title: 'Prestige',
content: [ content: [
'Avec un capstone + des noeuds d\'une 2e branche → **Convergence Alpha** (+10% tous effets).', 'Le prestige reset tes tetards et generateurs. Tu gagnes de l\'**ADN Ancestral** et un multiplicateur permanent (×0.1 par prestige).',
'Avec 2 capstones → evolue en **Convergence Omega** (-20% cout post-capstones).', 'Le **seuil augmente** a chaque prestige : 1M × (1 + 0.1 × N)². Plus tu prestiges, plus il faut de tetards.',
'L\'arbre et les cosmetiques sont **conserves**. Chaque prestige offre **1 reset d\'arbre gratuit**.',
'Les noeuds Adaptation peuvent **reduire le seuil** — strategique pour prestige plus souvent.',
],
},
{
icon: '🌳',
title: 'Arbre d\'Evolution',
content: [
'3 branches + Convergence. Depense ton ADN pour debloquer des noeuds permanents.',
'**Ponte** — booste tes clics : multiplicateur, double ponte, critique, auto-ponte',
'**Marais** — booste la production : multiplicateur, Nid boost, synergie entre types',
'**Adaptation** — booste la progression : bonus ADN, offline, reduction seuil prestige',
'Chaque branche a un **capstone** (noeud final puissant) + des **post-capstones** repeatables a l\'infini.',
],
},
{
icon: '★',
title: 'Capstones & Convergence',
content: [
'**Ponte Automatique** — auto-clic 1/s qui scale avec les upgrades',
'**Symbiose Totale** — chaque type de generateur booste les autres',
'**Memoire du Marais** — offline cap a 75%, duree 8h',
'**Convergence Alpha** (1 capstone + tier 3 d\'une 2e branche) → +10% tous effets',
'**Convergence Omega** (2 capstones) → +10% tous effets + -20% cout post-capstones',
], ],
}, },
{ {

View File

@@ -5,6 +5,7 @@
import { formatNumber } from '$lib/utils/formatNumber'; import { formatNumber } from '$lib/utils/formatNumber';
import CockpitHeader from '$lib/components/CockpitHeader.svelte'; import CockpitHeader from '$lib/components/CockpitHeader.svelte';
import GeneratorShop from '$lib/components/GeneratorShop.svelte'; import GeneratorShop from '$lib/components/GeneratorShop.svelte';
import ClickPanel from '$lib/components/ClickPanel.svelte';
import PrestigePanel from '$lib/components/PrestigePanel.svelte'; import PrestigePanel from '$lib/components/PrestigePanel.svelte';
import EvolutionTree from '$lib/components/EvolutionTree.svelte'; import EvolutionTree from '$lib/components/EvolutionTree.svelte';
import MilestoneBar from '$lib/components/MilestoneBar.svelte'; import MilestoneBar from '$lib/components/MilestoneBar.svelte';
@@ -80,6 +81,7 @@
<SidebarTabs tabs={sidebarTabs}> <SidebarTabs tabs={sidebarTabs}>
{#snippet children(activeTab)} {#snippet children(activeTab)}
{#if activeTab === 'production'} {#if activeTab === 'production'}
<ClickPanel />
<GeneratorShop /> <GeneratorShop />
<PrestigePanel /> <PrestigePanel />
{:else if activeTab === 'evolution'} {:else if activeTab === 'evolution'}