fix: pass disciplineEffects to computeMaxMana in useGameDerived (BUG #213), fix getMeditationBonus arg count in 3 files (BUG #212/#208), remove duplicate Climb button from SpireSummaryTab (BUG #211)
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m19s

This commit is contained in:
2026-05-30 15:27:19 +02:00
parent b8e6d651b2
commit 90b309885e
7 changed files with 14 additions and 20 deletions
+1 -1
View File
@@ -1,4 +1,4 @@
# Circular Dependencies # Circular Dependencies
Generated: 2026-05-29T23:43:49.944Z Generated: 2026-05-30T08:40:53.794Z
No circular dependencies found. ✅ No circular dependencies found. ✅
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"_meta": { "_meta": {
"generated": "2026-05-29T23:43:46.156Z", "generated": "2026-05-30T08:40:52.033Z",
"description": "Import dependency graph for src/lib/game. Keys are files, values are arrays of files they import.", "description": "Import dependency graph for src/lib/game. Keys are files, values are arrays of files they import.",
"usage": "To find what a file affects, search for its path in the VALUES. To find what a file depends on, look at its KEY entry." "usage": "To find what a file affects, search for its path in the VALUES. To find what a file depends on, look at its KEY entry."
}, },
+6
View File
@@ -14,6 +14,8 @@ Mana-Loop/
│ ├── circular-deps.txt │ ├── circular-deps.txt
│ ├── dependency-graph.json │ ├── dependency-graph.json
│ └── project-structure.txt │ └── project-structure.txt
├── e2e/
│ └── playtest.spec.ts
├── playwright-report/ ├── playwright-report/
│ ├── data/ │ ├── data/
│ │ ├── 1513ea5b9ea5985996f67ca36f2bc4d34add51f1.webm │ │ ├── 1513ea5b9ea5985996f67ca36f2bc4d34add51f1.webm
@@ -408,6 +410,10 @@ Mana-Loop/
│ └── test/ │ └── test/
│ └── setup.ts │ └── setup.ts
├── test-results/ ├── test-results/
│ ├── playtest-Mana-Loop---Compr-0eb11--crash-with-React-error-185-chromium/
│ │ ├── error-context.md
│ │ ├── test-failed-1.png
│ │ └── video.webm
│ └── .last-run.json │ └── .last-run.json
├── .dockerignore ├── .dockerignore
├── .gitignore ├── .gitignore
+1 -1
View File
@@ -58,7 +58,7 @@ export function LeftPanel() {
const maxMana = computeTotalMaxMana({ skills: {}, prestigeUpgrades, skillUpgrades: {}, skillTiers: {}, equippedInstances, equipmentInstances }, upgradeEffects); const maxMana = computeTotalMaxMana({ skills: {}, prestigeUpgrades, skillUpgrades: {}, skillTiers: {}, equippedInstances, equipmentInstances }, upgradeEffects);
const baseRegen = computeTotalRegen({ skills: {}, prestigeUpgrades, skillUpgrades: {}, skillTiers: {}, equippedInstances, equipmentInstances }, upgradeEffects); const baseRegen = computeTotalRegen({ skills: {}, prestigeUpgrades, skillUpgrades: {}, skillTiers: {}, equippedInstances, equipmentInstances }, upgradeEffects);
const clickMana = computeTotalClickMana({ skills: {}, skillUpgrades: {}, skillTiers: {}, equippedInstances, equipmentInstances }, upgradeEffects); const clickMana = computeTotalClickMana({ skills: {}, skillUpgrades: {}, skillTiers: {}, equippedInstances, equipmentInstances }, upgradeEffects);
const meditationMultiplier = getMeditationBonus(meditateTicks, {}, upgradeEffects.meditationEfficiency, disciplineEffects.meditationCapBonus); const meditationMultiplier = getMeditationBonus(meditateTicks, upgradeEffects.meditationEfficiency, disciplineEffects.meditationCapBonus);
const incursionStrength = getIncursionStrength(useGameStore((s) => s.day), useGameStore((s) => s.hour)); const incursionStrength = getIncursionStrength(useGameStore((s) => s.day), useGameStore((s) => s.hour));
const effectiveRegen = baseRegen * (1 - incursionStrength) * meditationMultiplier; const effectiveRegen = baseRegen * (1 - incursionStrength) * meditationMultiplier;
+1 -1
View File
@@ -91,7 +91,7 @@ function useGameDerivedStats() {
}, upgradeEffects, disciplineEffects); }, upgradeEffects, disciplineEffects);
const clickMana = computeClickMana({}, disciplineEffects); const clickMana = computeClickMana({}, disciplineEffects);
const meditationMultiplier = getMeditationBonus(meditateTicks, {}, upgradeEffects.meditationEfficiency, disciplineEffects.meditationCapBonus); const meditationMultiplier = getMeditationBonus(meditateTicks, upgradeEffects.meditationEfficiency, disciplineEffects.meditationCapBonus);
const incursionStrength = getIncursionStrength(day, hour); const incursionStrength = getIncursionStrength(day, hour);
const effectiveRegenWithSpecials = baseRegen * (1 - incursionStrength); const effectiveRegenWithSpecials = baseRegen * (1 - incursionStrength);
+1 -13
View File
@@ -7,12 +7,11 @@ import { ELEMENT_OPPOSITES, FLOOR_ELEM_CYCLE } from '@/lib/game/constants';
import { getGuardianForFloor, getAllGuardianFloors } from '@/lib/game/data/guardian-encounters'; import { getGuardianForFloor, getAllGuardianFloors } from '@/lib/game/data/guardian-encounters';
import type { GuardianDef } from '@/lib/game/types'; import type { GuardianDef } from '@/lib/game/types';
import { Card, CardContent } from '@/components/ui/card'; import { Card, CardContent } from '@/components/ui/card';
import { Button } from '@/components/ui/button';
import { Badge } from '@/components/ui/badge'; import { Badge } from '@/components/ui/badge';
import { ScrollArea } from '@/components/ui/scroll-area'; import { ScrollArea } from '@/components/ui/scroll-area';
import { SectionHeader } from '@/components/ui/section-header'; import { SectionHeader } from '@/components/ui/section-header';
import { DebugName } from '@/components/game/debug/debug-context'; import { DebugName } from '@/components/game/debug/debug-context';
import { Mountain } from 'lucide-react';
// ─── Guardian Data ──────────────────────────────────────────────────────────── // ─── Guardian Data ────────────────────────────────────────────────────────────
@@ -364,17 +363,6 @@ export function SpireSummaryTab() {
insight={insight} insight={insight}
/> />
<DebugName name="ClimbSpireButton">
<Button
className="w-full bg-gradient-to-r from-amber-600 to-orange-600 hover:from-amber-700 hover:to-orange-600 text-white"
size="lg"
onClick={enterSpireMode}
>
<Mountain className="w-5 h-5 mr-2" />
Climb the Spire
</Button>
</DebugName>
{nextGuardianData && nextGuardian && ( {nextGuardianData && nextGuardian && (
<NextGuardianCard nextGuardian={nextGuardian} nextGuardianData={nextGuardianData} /> <NextGuardianCard nextGuardian={nextGuardian} nextGuardianData={nextGuardianData} />
)} )}
+3 -3
View File
@@ -39,8 +39,8 @@ export function useManaStats() {
); );
const maxMana = useMemo( const maxMana = useMemo(
() => computeMaxMana({ prestigeUpgrades }, upgradeEffects), () => computeMaxMana({ prestigeUpgrades }, upgradeEffects, disciplineEffects),
[prestigeUpgrades, upgradeEffects] [prestigeUpgrades, upgradeEffects, disciplineEffects]
); );
const baseRegen = useMemo( const baseRegen = useMemo(
@@ -56,7 +56,7 @@ export function useManaStats() {
const disciplineEffects = computeDisciplineEffects(); const disciplineEffects = computeDisciplineEffects();
const meditationCap = 5.0 + disciplineEffects.meditationCapBonus; const meditationCap = 5.0 + disciplineEffects.meditationCapBonus;
const meditationMultiplier = useMemo( const meditationMultiplier = useMemo(
() => getMeditationBonus(meditateTicks, {}, upgradeEffects.meditationEfficiency, disciplineEffects.meditationCapBonus), () => getMeditationBonus(meditateTicks, upgradeEffects.meditationEfficiency, disciplineEffects.meditationCapBonus),
[meditateTicks, upgradeEffects.meditationEfficiency, disciplineEffects.meditationCapBonus] [meditateTicks, upgradeEffects.meditationEfficiency, disciplineEffects.meditationCapBonus]
); );