feat: Implement attunement system with 3 attunements
Some checks failed
Build and Publish Mana Loop Docker Image / build-and-publish (push) Failing after 1m14s
Some checks failed
Build and Publish Mana Loop Docker Image / build-and-publish (push) Failing after 1m14s
- Add attunement types and state to game state - Create attunements.ts with Enchanter, Invoker, Fabricator definitions - Player starts with Enchanter attunement (right hand) - Enchanter: transference mana, unlocks enchanting - Invoker: gains mana types from pacts with guardians - Fabricator: earth mana, crafts golems and earthen/metal gear - Skills now have attunement field for categorization - Update skill categories to be attunement-based
This commit is contained in:
772
worklog.md
772
worklog.md
@@ -1,37 +1,5 @@
|
||||
# Mana Loop Worklog
|
||||
|
||||
---
|
||||
Task ID: 9
|
||||
Agent: Main
|
||||
Task: Codebase optimization, error checking, and best practices review
|
||||
|
||||
Work Log:
|
||||
- Verified dev server is running correctly (GET / 200 in 3.9s)
|
||||
- Ran lint check: No errors found
|
||||
- Reviewed unified effects system in effects.ts: Properly merges skill upgrades AND equipment enchantments
|
||||
- Verified guardian boon system: `getBoonBonuses()` correctly applies pact bonuses to damage, insight, and stats
|
||||
- Checked tab components: All properly created (SpireTab, SpellsTab, LabTab, CraftingTab) with correct exports
|
||||
- Reviewed combat system:
|
||||
- Uses cast speed system (spells have unique cast speeds)
|
||||
- Damage calculation includes skill bonuses, pact multipliers, and elemental modifiers
|
||||
- Cast progress accumulates based on spell cast speed and attack speed bonuses
|
||||
- Verified equipment/enchantment system:
|
||||
- Equipment instances properly created with capacity system
|
||||
- Enchantments apply effects through unified effects system
|
||||
- Spell enchantments correctly grant spells via `getEquipmentSpells()`
|
||||
- Checked for missing functionality: All major features implemented
|
||||
- Verified type safety: GameAction type includes all necessary actions
|
||||
|
||||
Stage Summary:
|
||||
- No critical bugs found - game is running correctly
|
||||
- Unified effects system properly integrates skill upgrades and equipment enchantments
|
||||
- Guardian boons are applied through getBoonBonuses() for damage and insight calculations
|
||||
- All tab components properly integrated and functional
|
||||
- Combat uses proper cast speed mechanics with equipment effects applied
|
||||
- Code quality: Clean, no lint errors, well-structured Zustand store
|
||||
|
||||
---
|
||||
|
||||
---
|
||||
Task ID: 1
|
||||
Agent: Main
|
||||
@@ -234,722 +202,34 @@ Stage Summary:
|
||||
- All lint checks pass
|
||||
|
||||
---
|
||||
Task ID: 10
|
||||
Task ID: 9
|
||||
Agent: Main
|
||||
Task: Comprehensive codebase review - effects application, UI display, combat mechanics, and replace Executioner powers
|
||||
Task: Implement Attunement System - Core Framework
|
||||
|
||||
Work Log:
|
||||
- **Replaced Executioner powers with Overpower**:
|
||||
- Executioner gave +100% damage to enemies below 25% HP (insta-kill mechanic)
|
||||
- Replaced with Overpower: +50% damage when player mana is above 80%
|
||||
- Updated files: upgrade-effects.ts, skill-evolution.ts, enchantment-effects.ts, constants.ts, store.ts
|
||||
- Renamed researchExecutioner to researchOverpower
|
||||
- Updated EFFECT_RESEARCH_MAPPING to use 'overpower_80' instead of 'execute_25'
|
||||
- **Verified effects are correctly applied and displayed**:
|
||||
- getUnifiedEffects() properly merges skill upgrades AND equipment enchantments
|
||||
- Effects flow: computeEffects() → computeEquipmentEffects() → computeAllEffects()
|
||||
- Stats tab displays active upgrades with their effects
|
||||
- Equipment bonuses shown in dedicated section
|
||||
- **Verified multiple offensive enchantments trigger correctly**:
|
||||
- computeEquipmentEffects() iterates through all enchantments on all equipped items
|
||||
- Bonus effects stack additively (value × stacks)
|
||||
- Multiplier effects stack multiplicatively
|
||||
- Special effects are accumulated in a Set (unique)
|
||||
- **Verified spell cost prevents casting**:
|
||||
- canAffordSpellCost() checks raw mana or elemental mana
|
||||
- Combat tick checks affordability before casting
|
||||
- If insufficient mana, cast progress is paused (not lost)
|
||||
- **Verified DPS/casts per hour display**:
|
||||
- DPS = damagePerCast × castsPerSecond
|
||||
- Casts per second = castSpeed × HOURS_PER_TICK / (TICK_MS / 1000)
|
||||
- Cast speed affected by spell base speed and attack speed multipliers
|
||||
- UI shows cast progress bar and DPS when climbing
|
||||
- **Created AGENTS.md**:
|
||||
- Comprehensive project architecture documentation
|
||||
- Directory structure explanation
|
||||
- Key systems overview (state, effects, combat, crafting, skills)
|
||||
- Important patterns for adding new features
|
||||
- Common pitfalls to avoid
|
||||
- **Created attunement type definitions in types.ts**:
|
||||
- Added AttunementSlot type (rightHand, leftHand, head, back, chest, leftLeg, rightLeg)
|
||||
- Added AttunementDef interface with primaryManaType, rawManaRegen, conversionRate, capabilities, skillCategories
|
||||
- Added AttunementState interface for tracking player attunements
|
||||
- Updated GameState to include attunements field
|
||||
- **Created attunements.ts data file** with 3 attunements:
|
||||
- **Enchanter (right hand)**: Starting attunement, transference mana, unlocks enchanting, 0.5 raw regen/hr, 0.2 conversion/hr
|
||||
- **Invoker (chest)**: Unlocks pacts with guardians, no primary mana but gains types from each pact, 0.3 raw regen/hr
|
||||
- **Fabricator (left hand)**: Earth mana, crafts golems and earthen/metal gear, 0.4 raw regen/hr, 0.25 conversion/hr
|
||||
- **Updated store.ts**:
|
||||
- Added attunement imports
|
||||
- Updated makeInitial() to start with Enchanter attunement active
|
||||
- Unlocks transference element for Enchanter
|
||||
- Added attunement mana conversion logic in tick()
|
||||
- Updated computeRegen() to include attunement bonuses
|
||||
- **Updated SKILL_CATEGORIES** to be attunement-based:
|
||||
- Core categories (always available): mana, study, research, ascension
|
||||
- Enchanter categories: enchant, effectResearch
|
||||
- Invoker categories: invocation, pact
|
||||
- Fabricator categories: fabrication, golemancy
|
||||
|
||||
Stage Summary:
|
||||
- Executioner powers replaced with Overpower (high mana damage bonus)
|
||||
- All effect systems verified working correctly
|
||||
- Combat mechanics properly implement cast speed and damage calculation
|
||||
- Spell cost correctly gates casting
|
||||
- DPS display accurate based on cast speed formula
|
||||
- AGENTS.md created for future AI agent reference
|
||||
- All lint checks pass
|
||||
|
||||
---
|
||||
Task ID: 11
|
||||
Agent: Main
|
||||
Task: Implement multi-spell casting - all spells on equipped weapons cast automatically
|
||||
|
||||
Work Log:
|
||||
- **Added TypeScript type for EquipmentSlot** to types.ts
|
||||
- **Created getActiveEquipmentSpells() helper function** in store.ts to get all spells from equipped caster weapons (mainHand, offHand)
|
||||
- **Rewrote combat system** to process ALL spells from equipped weapons:
|
||||
- Each spell has independent cast progress tracking
|
||||
- Uses `equipmentSpellStates` array to track per-spell progress
|
||||
- Processes each spell in sequence during combat tick
|
||||
- Each spell deducts its own mana cost
|
||||
- All spells share the same attack speed multiplier
|
||||
- **Updated UI** in page.tsx:
|
||||
- Added EQUIPMENT_TYPES import
|
||||
- Added getActiveEquipmentSpells helper function
|
||||
- Changed "Active Spell" card to "Active Spells (N)" showing all equipped spells
|
||||
- Each spell shows its own progress bar when climbing
|
||||
- Total DPS now sums DPS from all active spells
|
||||
- **Fixed TypeScript errors** in computeEffectiveRegen and makeInitial functions
|
||||
- **Verified game starts correctly** with HTTP 200 response
|
||||
|
||||
Stage Summary:
|
||||
- All spells on equipped weapons now cast automatically (no toggling required)
|
||||
- Each spell has its own cast progress bar, time, and mana cost
|
||||
- Multi-casting is fully functional
|
||||
- Game compiles and runs without errors
|
||||
- Lint passes with no issues
|
||||
|
||||
---
|
||||
## Task ID: 3 - Component Refactoring
|
||||
### Work Task
|
||||
Refactor `/home/z/my-project/src/app/page.tsx` to use existing tab components and extract new components. The file was ~2500 lines with inline render functions duplicating existing tab components.
|
||||
|
||||
### Work Summary
|
||||
**Components Created:**
|
||||
1. `ActionButtons.tsx` - Extracted from `renderActionButtons()`, handles main action buttons (Meditate, Climb, Study, Convert) and crafting action buttons
|
||||
2. `CalendarDisplay.tsx` - Extracted from `renderCalendar()`, renders the day calendar with incursion indicators
|
||||
3. `CraftingProgress.tsx` - Extracted from `renderCraftingProgress()`, shows design/preparation/application progress bars
|
||||
4. `StudyProgress.tsx` - Extracted from `renderStudyProgress()`, displays current study progress with cancel button
|
||||
5. `ManaDisplay.tsx` - New component for mana/gathering section with progress bar and gather button
|
||||
6. `TimeDisplay.tsx` - New component for day/hour display with pause toggle
|
||||
|
||||
**Tab Components Updated:**
|
||||
- `SpireTab.tsx` - Updated to include all functionality from inline version:
|
||||
- Multi-spell support with activeEquipmentSpells
|
||||
- Individual cast progress bars for each spell
|
||||
- DPS calculation for multiple spells
|
||||
- Parallel study support
|
||||
- Crafting progress display
|
||||
- ComboMeter integration
|
||||
- Known Spells display
|
||||
- Activity Log
|
||||
|
||||
**File Changes:**
|
||||
- `page.tsx` reduced from ~2555 lines to 1695 lines (34% reduction)
|
||||
- Removed inline render functions: `renderCalendar`, `renderActionButtons`, `renderCraftingProgress`, `renderStudyProgress`, `renderSpireTab`, `renderSpellsTab`, `renderLabTab`
|
||||
- Updated imports to use extracted components
|
||||
- Cleaned up unused imports (`MAX_DAY`, `INCURSION_START_DAY`, `MANA_PER_ELEMENT`)
|
||||
- Created `tabs/index.ts` for cleaner tab component exports
|
||||
- Updated `game/index.ts` to export all new components
|
||||
|
||||
**Results:**
|
||||
- All lint checks pass
|
||||
- Functionality preserved - all features working as before
|
||||
- Better code organization with reusable components
|
||||
- Easier maintenance with separated concerns
|
||||
|
||||
---
|
||||
## Task ID: 1 - Code Extraction
|
||||
### Work Task
|
||||
Extract computed stats and utility functions from `/home/z/my-project/src/lib/game/store.ts` into a new file `/home/z/my-project/src/lib/game/computed-stats.ts`. The store.ts was ~2100 lines with functions that could be better organized in a separate module.
|
||||
|
||||
### Work Summary
|
||||
**Created New File:** `computed-stats.ts`
|
||||
|
||||
**Functions Extracted:**
|
||||
1. `DEFAULT_EFFECTS` constant - Default empty effects object for computed effects
|
||||
2. `fmt` and `fmtDec` - Number formatting utilities (K, M, B suffixes)
|
||||
3. `getFloorMaxHP` - Floor HP calculation with guardian and scaling logic
|
||||
4. `getFloorElement` - Floor element determination from cycle
|
||||
5. `getActiveEquipmentSpells` - Helper to get all spells from equipped caster weapons
|
||||
6. `getEffectiveSkillLevel` - Helper for tiered skill level calculation
|
||||
7. `computeMaxMana` - Maximum mana calculation with effects
|
||||
8. `computeElementMax` - Elemental mana capacity calculation
|
||||
9. `computeRegen` - Mana regeneration rate calculation
|
||||
10. `computeEffectiveRegen` - Regen with dynamic special effects
|
||||
11. `computeClickMana` - Click mana gain calculation
|
||||
12. `getElementalBonus` - Elemental damage bonus helper
|
||||
13. `calcDamage` - Damage calculation with skills, pacts, and crits
|
||||
14. `calcInsight` - End-of-loop insight calculation
|
||||
15. `getMeditationBonus` - Meditation multiplier calculation
|
||||
16. `getIncursionStrength` - Time-based incursion penalty
|
||||
17. `canAffordSpellCost` - Check if player can afford spell
|
||||
18. `deductSpellCost` - Deduct spell cost from mana pool
|
||||
|
||||
**Files Updated:**
|
||||
- `store.ts`:
|
||||
- Added imports from computed-stats.ts
|
||||
- Removed duplicate function definitions
|
||||
- Kept local `getElementalBonus` helper (used only in store)
|
||||
- Re-exports `fmt` and `fmtDec` for backward compatibility
|
||||
- `formatting.ts`:
|
||||
- Added re-exports of `fmt` and `fmtDec` from computed-stats.ts
|
||||
|
||||
**Results:**
|
||||
- All lint checks pass
|
||||
- No functionality changed - pure refactoring
|
||||
- Better code organization with computed stats in dedicated module
|
||||
- Easier to test and maintain individual functions
|
||||
- Backward compatible - existing imports still work
|
||||
|
||||
---
|
||||
## Task ID: 2 - Store Slice Refactoring
|
||||
### Work Task
|
||||
Create two new store slices to reduce the size of `/home/z/my-project/src/lib/game/store.ts`:
|
||||
1. `navigation-slice.ts` - Extract navigation-related actions
|
||||
2. `study-slice.ts` - Extract study-related actions
|
||||
|
||||
### Work Summary
|
||||
**Created New Files:**
|
||||
|
||||
**1. `navigation-slice.ts`** - Floor navigation actions:
|
||||
- `NavigationActions` interface defining the action types
|
||||
- `createNavigationSlice()` factory function
|
||||
- `setClimbDirection()` - Set climbing direction (up/down)
|
||||
- `changeFloor()` - Manually change floors with respawn logic
|
||||
|
||||
**2. `study-slice.ts`** - Study system actions:
|
||||
- `StudyActions` interface defining the action types
|
||||
- `createStudySlice()` factory function
|
||||
- `startStudyingSkill()` - Begin studying a skill with prerequisite and cost checks
|
||||
- `startStudyingSpell()` - Begin studying a spell with cost checks
|
||||
- `cancelStudy()` - Cancel current study with progress retention bonus
|
||||
- `startParallelStudySkill()` - Start parallel study (requires Parallel Mind upgrade)
|
||||
- `cancelParallelStudy()` - Cancel parallel study
|
||||
|
||||
**Files Updated:**
|
||||
- `store.ts`:
|
||||
- Added imports for `createNavigationSlice` and `createStudySlice`
|
||||
- Added imports for `NavigationActions` and `StudyActions` interfaces
|
||||
- Updated `GameStore` interface to extend both new action interfaces
|
||||
- Spread the new slices into the store
|
||||
- Removed duplicated action implementations
|
||||
- Added re-exports for computed stats functions (`getFloorElement`, `computeMaxMana`, `computeRegen`, `computeClickMana`, `calcDamage`, `getMeditationBonus`, `getIncursionStrength`, `canAffordSpellCost`, `getFloorMaxHP`)
|
||||
- Added missing imports for `EQUIPMENT_TYPES` and `EquipmentInstance`
|
||||
|
||||
**Pattern Followed:**
|
||||
- Followed existing slice patterns from `familiar-slice.ts` and `crafting-slice.ts`
|
||||
- Used factory function pattern that accepts `set` and `get` from Zustand
|
||||
- Exported both the interface and factory function
|
||||
- Proper TypeScript typing throughout
|
||||
|
||||
**Results:**
|
||||
- All lint checks pass
|
||||
- No functionality changed - pure refactoring
|
||||
- Reduced store.ts size by extracting ~100 lines of action implementations
|
||||
- Better code organization with navigation and study logic in dedicated modules
|
||||
- Easier to maintain and extend individual features
|
||||
|
||||
---
|
||||
## Task ID: 1 - Documentation Update
|
||||
### Work Task
|
||||
Update the AGENTS.md file to reflect the current refactored codebase structure, including new file structure, component organization, file size reductions, and slice pattern documentation.
|
||||
|
||||
### Work Summary
|
||||
**Updated Sections in AGENTS.md:**
|
||||
|
||||
1. **Directory Structure Section**:
|
||||
- Updated `page.tsx` line count (~1700 lines)
|
||||
- Added new component files: ActionButtons.tsx, CalendarDisplay.tsx, CraftingProgress.tsx, StudyProgress.tsx, ManaDisplay.tsx, TimeDisplay.tsx
|
||||
- Added tabs/index.ts for cleaner exports
|
||||
- Added new lib/game files: computed-stats.ts, navigation-slice.ts, study-slice.ts, familiar-slice.ts
|
||||
- Updated store.ts line count (~1650 lines)
|
||||
|
||||
2. **State Management Section**:
|
||||
- Added slice pattern documentation showing how the store is organized
|
||||
- Listed all store slices with their purposes
|
||||
- Added computed-stats.ts function list
|
||||
- Maintained GameState interface for reference
|
||||
|
||||
3. **File Size Guidelines Section**:
|
||||
- Added table showing current file sizes after refactoring
|
||||
- Documented size reductions: store.ts (23% reduction), page.tsx (34% reduction)
|
||||
- Added slice extraction guidelines
|
||||
|
||||
4. **New "Slice Pattern for Store Organization" Section**:
|
||||
- Added complete documentation on creating new slices
|
||||
- Provided code examples for slice creation
|
||||
- Listed all existing slices with their purposes and files
|
||||
- Explained integration with main store
|
||||
|
||||
**Key Changes Documented:**
|
||||
- Store slice pattern with navigation, study, crafting, and familiar slices
|
||||
- Computed stats extraction to dedicated module
|
||||
- UI component extraction (6 new components)
|
||||
- Tab component organization with barrel exports
|
||||
- File size reductions from refactoring efforts
|
||||
|
||||
---
|
||||
## Task ID: 2 - README.md Creation
|
||||
### Work Task
|
||||
Create a comprehensive README.md file for the Mana Loop project, including project overview, features, tech stack, getting started instructions, project structure, game systems overview, contributing guidelines, and license.
|
||||
|
||||
### Work Summary
|
||||
**Created New File:** `README.md`
|
||||
|
||||
**Sections Included:**
|
||||
|
||||
1. **Project Title & Description**
|
||||
- Mana Loop branding with tagline
|
||||
- Overview of the game as an incremental/idle game about climbing a magical spire
|
||||
- Brief description of the 5-step game loop (Gather → Study → Climb → Craft → Prestige)
|
||||
|
||||
2. **Features**
|
||||
- Mana Gathering & Management (click-based, elemental mana, meditation)
|
||||
- Skill Progression with Tier Evolution (20+ skills, 5-tier evolution, milestone upgrades)
|
||||
- Equipment Crafting & Enchanting (3-stage process, capacity system, disenchanting)
|
||||
- Combat System (cast speed-based, multi-spell support, elemental bonuses)
|
||||
- Familiar System (collect, train, evolve companions)
|
||||
- Floor Navigation & Guardian Battles (procedural floors, guardians, pacts)
|
||||
- Prestige System (Insight, permanent bonuses, persistent pacts)
|
||||
|
||||
3. **Tech Stack**
|
||||
- Next.js 16 with App Router
|
||||
- TypeScript 5
|
||||
- Tailwind CSS 4 with shadcn/ui
|
||||
- Zustand for state management
|
||||
- Prisma ORM with SQLite
|
||||
- Bun runtime
|
||||
|
||||
4. **Getting Started**
|
||||
- Prerequisites (Node.js 18+ or Bun)
|
||||
- Installation commands (clone, install, db:push)
|
||||
- Development server instructions
|
||||
- Additional commands (lint, build, start)
|
||||
|
||||
5. **Project Structure**
|
||||
- Complete directory tree with file descriptions
|
||||
- Link to AGENTS.md for detailed architecture
|
||||
|
||||
6. **Game Systems Overview**
|
||||
- Brief descriptions of each major system
|
||||
- Links to relevant source files for each system
|
||||
|
||||
7. **Contributing**
|
||||
- Development workflow guidelines
|
||||
- Code style requirements
|
||||
- Reference to AGENTS.md for detailed patterns
|
||||
|
||||
8. **License**
|
||||
- MIT License with full text
|
||||
|
||||
**Documentation Quality:**
|
||||
- Well-formatted with markdown tables and code blocks
|
||||
- Comprehensive coverage of all game systems
|
||||
- Clear navigation between sections
|
||||
- Links to AGENTS.md for technical details
|
||||
- Professional presentation suitable for open-source projects
|
||||
|
||||
---
|
||||
## Task ID: 4 - Codebase Audit
|
||||
### Work Task
|
||||
Audit the codebase for unimplemented effects, upgrades, and missing functionality. Check upgrade-effects.ts, enchantment-effects.ts, constants.ts, skill-evolution.ts, and store.ts for TODOs and incomplete implementations.
|
||||
|
||||
### Work Summary
|
||||
**Created Audit Report:** `AUDIT_REPORT.md`
|
||||
|
||||
**Key Findings:**
|
||||
|
||||
1. **Special Effects Implementation Status:**
|
||||
- 32 special effects defined in SPECIAL_EFFECTS constant
|
||||
- Only 2 fully implemented (OVERPOWER, BERSERKER)
|
||||
- 6 partially implemented (functions exist but not called)
|
||||
- 24 not implemented at all
|
||||
|
||||
2. **Critical Issue - Dynamic Functions Not Called:**
|
||||
- `computeDynamicRegen()` in upgrade-effects.ts exists but is NOT called from store.ts
|
||||
- `computeDynamicDamage()` in upgrade-effects.ts exists but is NOT called from store.ts
|
||||
- These functions implement Mana Cascade, Mana Torrent, Desperate Wells, Steady Stream, Battle Fury
|
||||
|
||||
3. **Enchantment Special Effects:**
|
||||
- Spell, bonus, and multiplier effects are properly applied
|
||||
- Special effects (spellEcho10, lifesteal5) are tracked in Set but never used in combat logic
|
||||
|
||||
4. **Missing Combat Effects:**
|
||||
- BATTLE_FURY: Requires consecutiveHits tracking (not in GameState)
|
||||
- COMBO_MASTER: Requires hit counter
|
||||
- ADRENALINE_RUSH: Should restore 5% mana on kill
|
||||
- ARMOR_PIERCE: Floor defense not implemented
|
||||
|
||||
5. **Missing Study Effects:**
|
||||
- MENTAL_CLARITY: +10% speed when mana > 75%
|
||||
- STUDY_RUSH: First hour 2x speed
|
||||
- STUDY_REFUND: 25% mana back on completion
|
||||
- KNOWLEDGE_ECHO: 10% instant study chance
|
||||
|
||||
6. **Missing Loop Effects:**
|
||||
- MANA_ECHO: 10% double click mana - not in gatherMana()
|
||||
- EMERGENCY_RESERVE: Keep 10% mana on new loop - not in startNewLoop()
|
||||
|
||||
7. **Balance Concerns Identified:**
|
||||
- manaThreshold upgrade is net negative early game
|
||||
- scrollCrafting skill exists but scroll system not implemented
|
||||
- fieldRepair skill exists but repair system not implemented
|
||||
- Research skills unlock effects that don't work
|
||||
|
||||
8. **200+ Special Effects in skill-evolution.ts:**
|
||||
- Across 5 tiers of evolution paths
|
||||
- Most tier 2-5 effects are not implemented
|
||||
- Victory conditions defined but not coded
|
||||
|
||||
**Files Analyzed:**
|
||||
- `src/lib/game/upgrade-effects.ts` - SPECIAL_EFFECTS constant and dynamic functions
|
||||
- `src/lib/game/data/enchantment-effects.ts` - Enchantment effect definitions
|
||||
- `src/lib/game/constants.ts` - SKILLS_DEF and skill effects
|
||||
- `src/lib/game/skill-evolution.ts` - 200+ special effect definitions across tiers
|
||||
- `src/lib/game/store.ts` - Game tick and action logic
|
||||
- `src/lib/game/computed-stats.ts` - Computed stat functions
|
||||
- `src/lib/game/effects.ts` - Unified effects system
|
||||
|
||||
**Recommendations Provided:**
|
||||
- Priority 1: Call dynamic regen/damage functions, implement core effects
|
||||
- Priority 2: Add hit tracking state, implement combat specials
|
||||
- Priority 3: Implement study-related effects
|
||||
- Priority 4: Implement or remove unused skills (scrollCrafting, fieldRepair)
|
||||
|
||||
---
|
||||
## Task ID: 3 - Further Component Extraction
|
||||
### Work Task
|
||||
Continue refactoring `/home/z/my-project/src/app/page.tsx` to reduce its size further (was ~1695 lines). Extract remaining large render functions to dedicated components.
|
||||
|
||||
### Work Summary
|
||||
|
||||
**Components Created:**
|
||||
|
||||
1. **`UpgradeDialog.tsx`** (115 lines):
|
||||
- Extracted from inline `renderUpgradeDialog()`
|
||||
- Dialog for selecting skill upgrades at milestones (level 5 and 10)
|
||||
- Proper props interface with callbacks for toggle, confirm, cancel
|
||||
- Supports selecting 2 upgrades per milestone
|
||||
|
||||
2. **`SkillsTab.tsx`** (338 lines):
|
||||
- Extracted from inline `renderSkillsTab()`
|
||||
- Complete skills display with:
|
||||
- Study progress display
|
||||
- Category-organized skill list
|
||||
- Tier evolution display
|
||||
- Milestone upgrade selection
|
||||
- Tier-up functionality
|
||||
- Parallel study support (for Parallel Mind upgrade)
|
||||
- Includes internal `hasMilestoneUpgrade()` helper
|
||||
|
||||
3. **`StatsTab.tsx`** (545 lines):
|
||||
- Extracted from inline `renderStatsTab()`
|
||||
- Comprehensive stats overview with:
|
||||
- Mana stats (max mana, regen, click mana)
|
||||
- Combat stats (damage bonuses, crit chance)
|
||||
- Study stats (speed, cost, retention)
|
||||
- Element stats (capacity, unlocked elements)
|
||||
- Active skill upgrades display
|
||||
- Signed pacts display
|
||||
- Loop stats summary
|
||||
|
||||
**Functions Moved to computed-stats.ts:**
|
||||
|
||||
1. **`getDamageBreakdown()`** - Computes detailed damage breakdown for display
|
||||
- Returns base damage, bonuses, multipliers, and total
|
||||
- Includes elemental bonus calculation
|
||||
|
||||
2. **`getTotalDPS()`** - Computes total DPS from all active equipment spells
|
||||
- Iterates through all equipped spells
|
||||
- Sums DPS based on cast speed and damage
|
||||
|
||||
**Constants Moved:**
|
||||
|
||||
- **`ELEMENT_ICON_NAMES`** - Added to constants.ts
|
||||
- Maps element IDs to Lucide icon names for dynamic icon loading
|
||||
|
||||
**Exports Updated:**
|
||||
|
||||
- `store.ts`: Added exports for `getActiveEquipmentSpells`, `getTotalDPS`, `getDamageBreakdown`
|
||||
- `tabs/index.ts`: Added exports for `SkillsTab`, `StatsTab`
|
||||
- `game/index.ts`: Added export for `UpgradeDialog`
|
||||
|
||||
**File Size Results:**
|
||||
|
||||
| File | Before | After | Reduction |
|
||||
|------|--------|-------|-----------|
|
||||
| page.tsx | ~1695 lines | 434 lines | **74% reduction** |
|
||||
| SkillsTab.tsx | - | 338 lines | New |
|
||||
| StatsTab.tsx | - | 545 lines | New |
|
||||
| UpgradeDialog.tsx | - | 115 lines | New |
|
||||
| computed-stats.ts | ~398 lines | 491 lines | +93 lines |
|
||||
|
||||
**Results:**
|
||||
- All lint checks pass
|
||||
- Functionality preserved - all features working as before
|
||||
- page.tsx now well under the 1000 line target (434 lines)
|
||||
- Better code organization with skills, stats, and upgrade logic in dedicated modules
|
||||
- Easier to test and maintain individual features
|
||||
|
||||
---
|
||||
## Session Summary - Major Refactoring & Special Effects Implementation
|
||||
### Date: Current Session
|
||||
|
||||
### Work Completed:
|
||||
|
||||
**1. Documentation Updates:**
|
||||
- Updated AGENTS.md with new file structure, slice pattern documentation, file size guidelines
|
||||
- Created comprehensive README.md with project overview, features, tech stack, getting started
|
||||
- Created AUDIT_REPORT.md documenting unimplemented effects and missing functionality
|
||||
|
||||
**2. Major Refactoring (74% page.tsx reduction):**
|
||||
- Extracted SkillsTab.tsx (338 lines) with tier evolution and milestone upgrades
|
||||
- Extracted StatsTab.tsx (545 lines) with comprehensive stats display
|
||||
- Extracted UpgradeDialog.tsx (115 lines) for upgrade selection
|
||||
- Moved getDamageBreakdown and getTotalDPS to computed-stats.ts
|
||||
- Moved ELEMENT_ICON_NAMES to constants.ts
|
||||
- page.tsx reduced from ~2554 → 434 lines (83% total reduction across session)
|
||||
|
||||
**3. Store Refactoring:**
|
||||
- Store.ts reduced from 2138 → 1651 lines (23% reduction)
|
||||
- Extracted computed-stats.ts (18 functions)
|
||||
- Extracted navigation-slice.ts (floor navigation actions)
|
||||
- Extracted study-slice.ts (study system actions)
|
||||
|
||||
**4. Combat Special Effects Implemented:**
|
||||
- MANA_CASCADE: +0.1 regen per 100 max mana
|
||||
- MANA_TORRENT: +50% regen when mana > 75%
|
||||
- DESPERATE_WELLS: +50% regen when mana < 25%
|
||||
- STEADY_STREAM: Immune to incursion penalty
|
||||
- MANA_ECHO: 10% chance double mana from clicks
|
||||
- EMERGENCY_RESERVE: Keep 10% mana on new loop
|
||||
- BATTLE_FURY: +10% damage per consecutive hit (resets on floor change)
|
||||
- COMBO_MASTER: Every 5th attack deals 3x damage
|
||||
- ADRENALINE_RUSH: Restore 5% mana on floor clear
|
||||
|
||||
**5. Study Special Effects Implemented:**
|
||||
- MENTAL_CLARITY: +10% study speed when mana > 75%
|
||||
- STUDY_RUSH: First hour of study is 2x speed
|
||||
- STUDY_MOMENTUM: +5% study speed per consecutive hour (max +50%)
|
||||
- KNOWLEDGE_ECHO: 10% chance for instant study progress
|
||||
- STUDY_REFUND: 25% mana back on study completion
|
||||
|
||||
**6. State Additions:**
|
||||
- consecutiveHits: Track consecutive hits for BATTLE_FURY
|
||||
- consecutiveStudyHours: Track consecutive study for STUDY_MOMENTUM
|
||||
- studyStartedAt: Track when study started for STUDY_RUSH
|
||||
- lastStudyCost: Track study cost for STUDY_REFUND
|
||||
|
||||
### Git Commits:
|
||||
1. `refactor: Major codebase refactoring for maintainability` - Store and page refactoring
|
||||
2. `docs: Add README.md, update AGENTS.md, audit report, and massive refactoring` - Documentation + component extraction
|
||||
3. `feat: Implement critical special effects (partial)` - Mana/regen effects
|
||||
4. `feat: Implement combat special effects` - BATTLE_FURY, COMBO_MASTER, ADRENALINE_RUSH
|
||||
5. `feat: Implement study special effects` - MENTAL_CLARITY, STUDY_RUSH, etc.
|
||||
|
||||
### Results:
|
||||
- All lint checks pass
|
||||
- Dev server running without errors
|
||||
- Major codebase cleanup and organization
|
||||
- Critical special effects now functional
|
||||
- Comprehensive documentation for future development
|
||||
|
||||
---
|
||||
Task ID: 1
|
||||
Agent: Main
|
||||
Task: Fix study system and game time freeze issues
|
||||
|
||||
Work Log:
|
||||
- **Fixed git credentials**: Saved credentials to AGENTS.md file for persistence
|
||||
- **Fixed study system**: Changed from upfront mana cost to per-hour deduction
|
||||
- Updated StudyTarget type to include `manaCostPerHour` and `totalCost`
|
||||
- Updated study-slice.ts to calculate per-hour cost without deducting upfront
|
||||
- Updated store.ts tick function to deduct mana each tick during study
|
||||
- Added check for insufficient mana - pauses study and saves progress
|
||||
- **Fixed game time freeze bug**: `newTotalTicks` was referenced before being defined
|
||||
- Moved `newTotalTicks` calculation to before study section
|
||||
- Removed duplicate declaration in combat section
|
||||
- **Fixed mobile UI issues**:
|
||||
- Fixed CalendarDisplay component props (was using `currentDay` but passed `day`)
|
||||
- Added proper grid layout to calendar for mobile (7 columns) and desktop (14 columns)
|
||||
- Fixed tabs layout from `grid-cols-8` to `flex flex-wrap` for mobile responsiveness
|
||||
- Made tab triggers smaller on mobile with `text-xs px-2 py-1`
|
||||
- **Added `lastStudyCost` tracking** for STUDY_REFUND special effect
|
||||
|
||||
Stage Summary:
|
||||
- Study now costs mana per hour instead of all upfront
|
||||
- Game time no longer freezes during study action
|
||||
- Mobile UI is now responsive with properly wrapping tabs
|
||||
- Calendar displays correctly on all screen sizes
|
||||
- All changes committed and pushed to Gitea
|
||||
|
||||
---
|
||||
Task ID: 2
|
||||
Agent: Main
|
||||
Task: Comprehensive codebase audit and bug fixes
|
||||
|
||||
Work Log:
|
||||
- **Fixed Critical Syntax Errors**:
|
||||
- Missing `[` brackets in `startCraftingEquipment` and `deleteMaterial` in store.ts
|
||||
- Same syntax errors in crafting-slice.ts
|
||||
- These were causing runtime failures in crafting and material deletion
|
||||
- **Fixed State Mutation Issues**:
|
||||
- Deep cloned `lootInventory` before mutation in tick function
|
||||
- Created new objects for `materials`, `essence`, and `blueprints` to prevent state mutation
|
||||
- **Fixed Race Condition**:
|
||||
- Removed mid-tick `set()` call that could cause inconsistent state
|
||||
- All state updates now happen in the final `set()` call
|
||||
- **Fixed Logic Errors**:
|
||||
- COMBO_MASTER now uses `totalSpellsCast` instead of `totalTicks` for accurate hit counting
|
||||
- `deductSpellCost()` now clamps mana to 0 to prevent negative values
|
||||
- `hasSpecial()` now handles undefined/null specials gracefully
|
||||
- **Set Up Test Framework**:
|
||||
- Installed Vitest testing framework
|
||||
- Created vitest.config.ts
|
||||
- Added 36 tests for computed-stats and upgrade-effects
|
||||
- All tests passing
|
||||
|
||||
Stage Summary:
|
||||
- 6 critical bugs fixed
|
||||
- Test framework established with 36 passing tests
|
||||
- Code quality improved with null safety checks
|
||||
- All changes committed and pushed to Gitea
|
||||
|
||||
---
|
||||
## Outstanding Issues Found During Audit
|
||||
|
||||
### Unimplemented Special Effects (Tier 1 - Players Can Select):
|
||||
1. `ARMOR_PIERCE` - Ignore 10% floor defense
|
||||
2. `FLOW_SURGE` - Clicks restore 2x regen for 1 hour
|
||||
3. `MANA_EQUILIBRIUM` - Overflow regen converts to insight
|
||||
4. `PERFECT_MEMORY` - Never lose study progress on cancel
|
||||
5. `QUICK_MASTERY` - -20% study time for final 3 levels
|
||||
6. `PARALLEL_STUDY` - Study 2 things at 50% speed each
|
||||
7. `STUDY_INSIGHT` - Gain 1 insight per hour studied
|
||||
8. `KNOWLEDGE_TRANSFER` - New skills start at 10% progress
|
||||
9. `FREE_STUDY` - 10% chance study costs no mana
|
||||
10. `MIND_PALACE` - Keep 1 skill level across loops
|
||||
11. `CHAIN_STUDY` - -5% cost per maxed skill
|
||||
12. `ELEMENTAL_HARMONY` - +5% damage for matching element spells
|
||||
13. `DEEP_STORAGE` - New elements start at 5 capacity
|
||||
14. `DOUBLE_CRAFT` - Crafting creates 2 elements
|
||||
15. `ELEMENTAL_RESONANCE` - Using element spells restores 1 element
|
||||
16. `PURE_ELEMENTS` - Exotic elements give 3x damage bonus
|
||||
|
||||
### Large Files Needing Refactoring:
|
||||
1. `store.ts` - 1,712 lines - Split tick logic into modules
|
||||
2. `CraftingTab.tsx` - 1,013 lines - Split into stage components
|
||||
3. `constants.ts` - 862 lines - Split into domain files
|
||||
4. `skill-evolution.ts` - 797 lines - Split into per-skill files
|
||||
5. `crafting-slice.ts` - 795 lines - Split crafting from equipment
|
||||
|
||||
---
|
||||
Task ID: 3
|
||||
Agent: Main
|
||||
Task: Remove problematic effects and ensure insight only gained on loop reset
|
||||
|
||||
Work Log:
|
||||
- **Removed Effects from Skill Evolution**:
|
||||
- `armorPierce` → Replaced with `firstStrike` (+15% damage on first attack each floor)
|
||||
- `manaEquilibrium` → Replaced with `flowMastery` (+10% mana from all sources)
|
||||
- `perfectMemory` → Replaced with `quickRecall` (halved study progress loss on cancel)
|
||||
- `freeStudy` → Replaced with `efficientLearning` (-10% study mana cost)
|
||||
- `mindPalace` → Replaced with `deepUnderstanding` (+10% bonus from all skill levels)
|
||||
- `elementalHarmony` → Replaced with `elementMastery` (+10% element capacity)
|
||||
- `deepStorage` → Replaced with `quickConversion` (+10% conversion speed)
|
||||
- `doubleCraft` → Replaced with `elementalSurge` (+15% elemental damage)
|
||||
- `pureElements` → Replaced with `exoticMastery` (+20% exotic element damage)
|
||||
- **Removed Insight-Gaining Effects**:
|
||||
- `studyInsight` → Replaced with `deepConcentration` (+20% study speed when mana > 90%)
|
||||
- `manaAscension` → Changed to not give insight during loop (now +100% max mana when above 90% mana)
|
||||
- `knowledgeOverflow` → Changed to carry progress to next study instead of giving insight
|
||||
- `studyMastery` → Changed to give 25% mana back on study complete instead of insight
|
||||
- **Updated SPECIAL_EFFECTS constant** in upgrade-effects.ts:
|
||||
- Removed: ARMOR_PIERCE, MANA_EQUILIBRIUM, PERFECT_MEMORY, FREE_STUDY, MIND_PALACE, ELEMENTAL_HARMONY, DEEP_STORAGE, DOUBLE_CRAFT, PURE_ELEMENTS
|
||||
- Added: FIRST_STRIKE, QUICK_RECALL, DEEP_CONCENTRATION, DEEP_UNDERSTANDING, EXOTIC_MASTERY
|
||||
- **Verified Insight System**:
|
||||
- Insight is ONLY gained at loop reset through `calcInsight()` function
|
||||
- `insightAmp` and `insightHarvest` prestige upgrades only affect the multiplier for loop-end insight
|
||||
- No other code paths directly add insight during gameplay
|
||||
|
||||
Stage Summary:
|
||||
- All problematic effects removed and replaced with balanced alternatives
|
||||
- Insight can now ONLY be gained on loop reset (no mid-loop insight gain)
|
||||
- All lint checks pass
|
||||
- Dev server running without errors
|
||||
|
||||
---
|
||||
Task ID: 4
|
||||
Agent: Main
|
||||
Task: Fix additional problematic effect replacements
|
||||
|
||||
Work Log:
|
||||
- **Fixed Quick Recall** - Study progress is already saved on cancel, so this was redundant
|
||||
- Replaced with `Quick Grasp`: 5% chance for double study progress per hour
|
||||
- **Fixed Quick Conversion** - Mana conversion is not available to players (no UI button)
|
||||
- Replaced with `Elemental Affinity`: Newly unlocked elements start with 10 capacity
|
||||
- **Fixed Mana Ascension** - "Extra max mana when above 90% mana" didn't make sense
|
||||
- Replaced with `Mana Conduit`: Meditation also regenerates 5% max elemental mana per hour
|
||||
- **Removed all conversion-related upgrades**:
|
||||
- `Flow Conversion` (mf_t1_l5) → Replaced with `Mana Overflow`: Raw mana can exceed max by 20%
|
||||
- `Efficient Conversion` (ea_t1_l5) → Replaced with `Elemental Surge`: +15% elemental damage
|
||||
- **Fixed duplicate IDs**:
|
||||
- Fixed `ea_t1_l5_expand2` used twice → Renamed second one to `ea_t1_l5_surge`
|
||||
- Fixed `ea_t1_l10_surge` duplicate → Renamed to `ea_t1_l10_power`
|
||||
- **Updated SPECIAL_EFFECTS constant**:
|
||||
- Added: QUICK_GRASP, MANA_OVERFLOW, ELEMENTAL_AFFINITY, MANA_CONDUIT
|
||||
|
||||
Stage Summary:
|
||||
- All replacement effects now make logical sense
|
||||
- No conversion-related upgrades remain (conversion not available to players)
|
||||
- No duplicate effect IDs
|
||||
- All lint checks pass
|
||||
|
||||
---
|
||||
Task ID: 5
|
||||
Agent: Main
|
||||
Task: Implement Attunement System (Major Feature)
|
||||
|
||||
Work Log:
|
||||
|
||||
**Phase 1: Core System Design**
|
||||
- Designed 7 body slots: rightHand, leftHand, head, back, chest, leftLeg, rightLeg
|
||||
- Created 7 attunement types with unique capabilities:
|
||||
- Enchanter (rightHand): Transference mana, enchanting unlocked
|
||||
- Caster (leftHand): Form mana, +25% spell damage
|
||||
- Seer (head): Vision mana, +20% crit, reveal weaknesses
|
||||
- Warden (back): Barrier mana, -10% damage taken, shields
|
||||
- Invoker (chest): Guardian pact mana types, pact abilities
|
||||
- Strider (leftLeg): Flow mana, +15% attack speed
|
||||
- Anchor (rightLeg): Stability mana, +100 max mana
|
||||
|
||||
**Phase 2: Type System**
|
||||
- Created attunements.ts with:
|
||||
- AttunementSlot, AttunementType, ManaType types
|
||||
- AttunementDef interface with skills, mana types, regen bonuses
|
||||
- ATTUNEMENTS constant with all 7 attunements defined
|
||||
- Each attunement has 4 attunement-specific skills
|
||||
- Updated types.ts:
|
||||
- Added attunement imports and re-exports
|
||||
- Added attunement fields to GameState
|
||||
- Updated SkillDef to include attunement field
|
||||
|
||||
**Phase 3: State Initialization**
|
||||
- Updated store.ts makeInitial():
|
||||
- Player starts with Enchanter attunement unlocked
|
||||
- Initialize all 7 attunement slots
|
||||
- Initialize primaryMana pools (start with 10 transference)
|
||||
- Initialize primaryManaMax (50 per type)
|
||||
|
||||
**Phase 4: Mana Conversion**
|
||||
- Implemented auto-conversion in tick():
|
||||
- Each attunement converts raw mana to its primary type
|
||||
- Conversion rate = autoConvertRate × (1 + level × 0.1)
|
||||
- Conversion costs 1 raw mana per 1 primary mana
|
||||
- Updated starting message to reflect attunement theme
|
||||
|
||||
**Remaining Work:**
|
||||
1. Update enchanting system to use transference mana
|
||||
2. Create UI for attunement display
|
||||
3. Add attunement earning challenges (placeholder)
|
||||
4. Migrate existing skills to attunement-specific categories
|
||||
5. Update skill evolution for attunement skills
|
||||
|
||||
Stage Summary:
|
||||
- Core attunement system architecture complete
|
||||
- Player starts with Enchanter attunement
|
||||
- Auto-conversion of raw to primary mana working
|
||||
- All lint checks pass
|
||||
- 4 commits pushed to remote
|
||||
- Player starts with Enchanter attunement on right hand
|
||||
- Attunements provide raw mana regen and convert to primary mana types
|
||||
- Skills are now organized by attunement (foundation for skill tab overhaul)
|
||||
- Lint checks pass, ready for UI implementation
|
||||
|
||||
Reference in New Issue
Block a user