All checks were successful
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 2m14s
- Remove lifesteal, thorns, manaShield from familiars - Replace with appropriate alternatives: manaSiphon, guardianDamage, barrierBreaker - Replace shield equipment with focus items (spellcasting enhancement) - Remove EXECUTIONER special effect and finisher upgrades - Update Soul Binding description to bind creature souls to items - Buff Ancient Echo from +1 to +2 capacity per Enchanter level - All changes consistent with game design: player cannot take damage
911 lines
40 KiB
Markdown
Executable File
911 lines
40 KiB
Markdown
Executable File
# Mana Loop Worklog
|
|
|
|
---
|
|
Task ID: 1
|
|
Agent: Main
|
|
Task: Fix skill upgrade effects not being applied
|
|
|
|
Work Log:
|
|
- Identified the issue: special effects like Mana Cascade were defined but never processed
|
|
- Added `specials: Set<string>` to ComputedEffects interface in upgrade-effects.ts
|
|
- Created SPECIAL_EFFECTS constant with all special effect IDs
|
|
- Added `hasSpecial()` helper function to check if a special is active
|
|
- Updated `computeEffects()` to collect special effects into the set
|
|
|
|
Stage Summary:
|
|
- Created the foundation for special effect tracking
|
|
- All special effects are now recognized and can be checked with hasSpecial()
|
|
|
|
---
|
|
Task ID: 2
|
|
Agent: Main
|
|
Task: Implement special effect application in game logic
|
|
|
|
Work Log:
|
|
- Created `computeEffectiveRegen()` function that applies:
|
|
- Mana Cascade: +0.1 regen per 100 max mana
|
|
- Mana Torrent: +50% regen when above 75% mana
|
|
- Desperate Wells: +50% regen when below 25% mana
|
|
- Steady Stream: Immune to incursion penalty
|
|
- Updated `gatherMana()` to apply Mana Echo (10% chance double mana)
|
|
- Updated combat in tick() to apply:
|
|
- Damage multipliers/bonuses from upgrades
|
|
- Executioner: +100% damage to enemies below 25% HP
|
|
- Berserker: +50% damage when mana < 50%
|
|
- Adrenaline Rush: Restore 5% mana on kill
|
|
- Updated study in tick() to apply:
|
|
- Study speed multipliers from upgrades
|
|
- Mental Clarity: +10% study speed when mana > 75%
|
|
- Study Rush: First hour is 2x speed
|
|
- Study Refund: 25% mana back on completion
|
|
|
|
Stage Summary:
|
|
- Key tier 1 special effects are now functional
|
|
- Regen, combat, and study systems all apply upgrades correctly
|
|
|
|
---
|
|
Task ID: 3
|
|
Agent: Main
|
|
Task: Display special effects in UI
|
|
|
|
Work Log:
|
|
- Imported computeEffects, hasSpecial, SPECIAL_EFFECTS to page.tsx
|
|
- Added `upgradeEffects` computation in derived stats
|
|
- Added `manaCascadeBonus` calculation for display
|
|
- Updated `effectiveRegen` to use `effectiveRegenWithSpecials`
|
|
- Updated Mana Stats section to show:
|
|
- Steady Stream immunity indicator
|
|
- Mana Cascade bonus amount
|
|
- Mana Torrent/Desperate Wells conditional bonuses
|
|
- Updated Active Upgrades section to render special effects with cyan color
|
|
|
|
Stage Summary:
|
|
- Special effects are now visible in the Stats tab
|
|
- Players can see exactly how much Mana Cascade contributes
|
|
- Active Upgrades shows all effect types including specials
|
|
|
|
---
|
|
Task ID: 4
|
|
Agent: Main
|
|
Task: Test and verify implementation
|
|
|
|
Work Log:
|
|
- Added 11 new tests for special effects:
|
|
- Mana Cascade recognition and calculation
|
|
- Steady Stream recognition
|
|
- Mana Echo recognition
|
|
- Combat special effects (Executioner, Berserker, Adrenaline Rush)
|
|
- Study special effects (Mental Clarity, Study Rush)
|
|
- Effect stacking tests
|
|
- All 203 tests pass
|
|
|
|
Stage Summary:
|
|
- Complete test coverage for implemented special effects
|
|
- All lint checks pass
|
|
- Dev server running without errors
|
|
|
|
---
|
|
Task ID: 5
|
|
Agent: Main
|
|
Task: Fix Deep Wellspring meditation efficiency upgrade
|
|
|
|
Work Log:
|
|
- Identified issue: `meditationEfficiency` was tracked in computed effects but not used
|
|
- Updated `getMeditationBonus()` function signature to accept `meditationEfficiency` parameter
|
|
- Updated meditation bonus calculation to multiply by efficiency
|
|
- Updated `tick()` in store.ts to:
|
|
- Compute upgradeEffects before meditation calculation
|
|
- Pass `upgradeEffects.meditationEfficiency` to `getMeditationBonus()`
|
|
- Updated page.tsx to:
|
|
- Compute `upgradeEffects` before other derived stats
|
|
- Pass `upgradeEffects.meditationEfficiency` to meditation multiplier calculation
|
|
- Added 2 new tests for Deep Wellspring:
|
|
- Test that meditation efficiency is correctly computed (1.5x for +50%)
|
|
- Test that meditation bonus is boosted by efficiency (2.5 * 1.5 = 3.75)
|
|
|
|
Stage Summary:
|
|
- Deep Wellspring (+50% meditation efficiency) now works correctly
|
|
- All 205 tests pass
|
|
- Dev server running without errors
|
|
|
|
---
|
|
Task ID: 6
|
|
Agent: Main
|
|
Task: Fix multiple issues: Quick Learner tier-up reset, Parallel Mind upgrade, meditation display location, parallel study UI, combat spell usage verification
|
|
|
|
Work Log:
|
|
- **Fixed Quick Learner tier-up reset issue**: Modified `tierUpSkill()` to NOT copy upgrades from old tier to new tier. Each tier now starts with empty upgrades, allowing players to choose new tier-specific upgrades at level 5 and 10.
|
|
- **Implemented Parallel Mind milestone upgrade**: Added parallel study support to the tick function and created actions for starting/canceling parallel study. Players can now study two things at once at 50% speed each.
|
|
- **Fixed meditation multiplier display**: Removed meditation multiplier from "Active Spell" card in Spire tab - it now only appears in the Mana Stats section.
|
|
- **Added parallel study UI**:
|
|
- Added parallel study progress card in Spire tab
|
|
- Added ⚡ button in Skills tab for selecting parallel study target
|
|
- Shows "50% speed (Parallel Study)" indicator
|
|
- **Verified combat uses active spells**: Confirmed that combat properly uses the active spell from `state.activeSpell`, calculates damage based on spell definition, applies elemental bonuses, and handles spell effects like lifesteal.
|
|
- **Added parallelStudyTarget to state persistence**: Updated the persist partialize function to include parallelStudyTarget.
|
|
- **Fixed TypeScript errors**: Updated `computeElementMax` call in makeInitial to include required parameters.
|
|
|
|
Stage Summary:
|
|
- Quick Learner and other skills no longer lose progress when tiering up - players choose new upgrades for each tier
|
|
- Parallel Mind upgrade is now functional - allows studying two skills/spells simultaneously
|
|
- Meditation multiplier moved to correct location (Mana Stats only)
|
|
- Combat verified to use active spells properly with all effects
|
|
- All lint checks pass, dev server running without errors
|
|
|
|
---
|
|
Task ID: 7
|
|
Agent: Main
|
|
Task: Implement cast speed system for combat
|
|
|
|
Work Log:
|
|
- Added `castSpeed` property to `SpellDef` type in types.ts (default 1 cast/hour)
|
|
- Added cast speeds to all spells in SPELLS_DEF:
|
|
- Tier 0 (basic): 2.5-3 casts/hr (fast, cheap)
|
|
- Tier 1 (elemental): 1.5-3 casts/hr (varies by spell nature)
|
|
- Tier 2 (advanced): 0.8-1.8 casts/hr (slower, more powerful)
|
|
- Tier 3 (master): 0.5-0.75 casts/hr (slow but devastating)
|
|
- Tier 4 (legendary): 0.4-0.5 casts/hr (very slow, extremely powerful)
|
|
- Added `castProgress` to GameState (tracks progress to next cast, 0-1)
|
|
- Updated combat tick logic:
|
|
- Accumulates cast progress based on spell cast speed and attack speed bonuses
|
|
- When progress >= 1, triggers a spell cast (deducts mana, applies damage)
|
|
- Handles multiple casts per tick if cast speed is high
|
|
- Resets progress on floor change
|
|
- Attack speed affected by:
|
|
- Quick Cast skill: +5% per level
|
|
- Attack Speed upgrade multipliers from skill milestones
|
|
- Updated UI:
|
|
- Active Spell card now shows cast speed (casts/hr)
|
|
- Added cast progress bar when climbing
|
|
- DPS calculation now uses actual cast speed formula
|
|
|
|
Stage Summary:
|
|
- Combat now properly uses spell cast speed instead of arbitrary damage multiplier
|
|
- Each spell has unique cast speed (faster spells = more DPS but lower damage per cast)
|
|
- Attack speed upgrades (Quick Cast, Quick Strikes) properly speed up casting
|
|
- Players can see cast progress and DPS in real-time
|
|
|
|
---
|
|
Task ID: 8
|
|
Agent: Main
|
|
Task: Implement Crafting/Equipment System (Replace Combat Skills with Enchanting)
|
|
|
|
Work Log:
|
|
- **Verified combat skills removed and enchanting skills added**: constants.ts already had enchanting skills (enchanting, efficientEnchant, disenchanting, enchantSpeed, scrollCrafting, essenceRefining) with 'enchant' category
|
|
- **Integrated crafting slice into main store**:
|
|
- Added GameStore interface to extend CraftingActions
|
|
- Added processCraftingTick call in tick function for design/prepare/enchant actions
|
|
- Implemented all crafting actions directly in store (createEquipmentInstance, equipItem, startDesigningEnchantment, etc.)
|
|
- Updated partialize function to persist equipment state (equippedInstances, equipmentInstances, enchantmentDesigns, designProgress, preparationProgress, applicationProgress)
|
|
- **Created CraftingTab component** with 3-stage UI:
|
|
- Design stage: Select equipment type, choose effects, name design, time-based progress
|
|
- Prepare stage: Select equipment, pay mana cost, time-based preparation
|
|
- Apply stage: Select equipment and design, apply enchantment with capacity validation
|
|
- Disenchant section: Remove enchantments and recover mana based on disenchanting skill
|
|
- **Updated SpellsTab** to show equipment-granted spells:
|
|
- Added equipment spells section at top showing spells from equipped items
|
|
- Shows source equipment for each spell
|
|
- Added pact spells placeholder section
|
|
- **Added 5-tier evolution paths for enchanting skills**:
|
|
- enchanting: 5 tiers from Enchanting → Rune Master → Arcane Forgemaster → Void Enchanter → Enchantment God
|
|
- efficientEnchant, disenchanting, enchantSpeed: 1 tier each with unique upgrades
|
|
- **Updated page.tsx** with Crafting tab:
|
|
- Added CraftingTab import and TabsTrigger for crafting
|
|
- Added TabsContent rendering CraftingTab with all required props
|
|
|
|
Stage Summary:
|
|
- Complete 3-stage enchantment system (Design → Prepare → Apply)
|
|
- Equipment capacity limits enchantments
|
|
- Starting equipment: Basic Staff (with Mana Bolt), Civilian Shirt, Civilian Shoes
|
|
- Spells only learnable from equipment and pacts
|
|
- All crafting skills have evolution paths
|
|
- All lint checks pass
|
|
|
|
---
|
|
Task ID: 9
|
|
Agent: Main
|
|
Task: Implement Attunement System - Core Framework
|
|
|
|
Work Log:
|
|
- **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:
|
|
- 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
|
|
|
|
---
|
|
Task ID: 10
|
|
Agent: Main
|
|
Task: Implement Attunement System - UI Overhaul
|
|
|
|
Work Log:
|
|
- **Created AttunementsTab component** (src/components/game/tabs/AttunementsTab.tsx):
|
|
- Displays all 3 attunements with their status (active/locked)
|
|
- Shows primary mana type and current mana for active attunements
|
|
- Displays raw mana regen and conversion rate stats
|
|
- Shows capabilities unlocked by each attunement
|
|
- Displays available skill categories based on active attunements
|
|
- Uses color coding and visual effects for active attunements
|
|
- **Updated page.tsx**:
|
|
- Added AttunementsTab import
|
|
- Added "✨ Attune" tab between Spire and Skills
|
|
- Added TabsContent for attunements
|
|
- **Updated SkillsTab.tsx**:
|
|
- Added import for getAvailableSkillCategories
|
|
- Modified skill rendering to filter categories by attunement access
|
|
- Skills now only show if the player has the appropriate attunement
|
|
|
|
Stage Summary:
|
|
- New Attunements tab shows all attunement details
|
|
- Skills are filtered based on active attunements
|
|
- Player can see exactly which skill categories they have access to
|
|
- Visual feedback shows active vs locked attunements
|
|
|
|
---
|
|
Task ID: 11
|
|
Agent: Main
|
|
Task: Fix build errors - correct imports for getActiveEquipmentSpells and getTotalDPS
|
|
|
|
Work Log:
|
|
- Identified build failure: getActiveEquipmentSpells and getTotalDPS were being imported from store.ts but are defined in computed-stats.ts
|
|
- Fixed imports in page.tsx:
|
|
- Changed to import getActiveEquipmentSpells and getTotalDPS from computed-stats.ts
|
|
- Fixed imports in SpireTab.tsx:
|
|
- Changed to import getActiveEquipmentSpells and getTotalDPS from computed-stats.ts
|
|
- Removed duplicate local function definition of getActiveEquipmentSpells
|
|
- Cleaned up unused imports (ENCHANTMENT_EFFECTS, EQUIPMENT_TYPES)
|
|
- Committed and pushed fix to repository
|
|
|
|
Stage Summary:
|
|
- Build errors resolved
|
|
- All imports correctly reference computed-stats.ts for DPS and equipment spell functions
|
|
- Code is cleaner with no duplicate function definitions
|
|
|
|
---
|
|
Task ID: 12
|
|
Agent: Main
|
|
Task: Fix prerender error - Cannot read properties of undefined (reading 'count')
|
|
|
|
Work Log:
|
|
- Identified the issue: ComboState type was referenced in ComboMeter.tsx but never defined
|
|
- The `combo` property was also missing from GameState interface and initial state
|
|
- Added ComboState interface to types.ts with:
|
|
- count: number (current combo hits)
|
|
- maxCombo: number (highest combo this session)
|
|
- multiplier: number (current damage multiplier)
|
|
- elementChain: string[] (last 3 elements used)
|
|
- decayTimer: number (hours until decay starts)
|
|
- Added `combo: ComboState` field to GameState interface
|
|
- Added default combo state to makeInitial() in store.ts:
|
|
- count: 0, maxCombo: 0, multiplier: 1, elementChain: [], decayTimer: 0
|
|
- Added `combo` and `attunements` to persist partialize function for save/load
|
|
- Fixed ComboMeter.tsx to import ComboState from types.ts
|
|
|
|
Stage Summary:
|
|
- ComboState type properly defined and used
|
|
- combo field now properly initialized in game state
|
|
- Persist function now saves both combo and attunements
|
|
- Build should now pass prerendering stage
|
|
|
|
---
|
|
Task ID: 13
|
|
Agent: Main
|
|
Task: Fix prerender error - Cannot read properties of undefined (reading 'materials')
|
|
|
|
Work Log:
|
|
- Identified the issue: LootInventory type was referenced but never defined
|
|
- The `lootInventory` property was also missing from GameState interface and initial state
|
|
- Added LootInventory interface to types.ts with:
|
|
- materials: Record<string, number> (materialId -> count)
|
|
- blueprints: string[] (blueprint IDs discovered)
|
|
- Added `lootInventory: LootInventory` field to GameState interface
|
|
- Added default lootInventory to makeInitial() in store.ts
|
|
- Added lootInventory to persist partialize function
|
|
|
|
Stage Summary:
|
|
- LootInventory type properly defined and used
|
|
- lootInventory field now properly initialized in game state
|
|
- Persist function now saves loot inventory
|
|
|
|
---
|
|
Task ID: 14
|
|
Agent: Main
|
|
Task: Fix prerender error - Add missing AchievementState and stats tracking
|
|
|
|
Work Log:
|
|
- Identified multiple missing types and fields referenced in page.tsx
|
|
- Added AchievementDef interface to types.ts with:
|
|
- id, name, desc, category, requirement, reward, hidden
|
|
- Added AchievementState interface with:
|
|
- unlocked: string[] (IDs of unlocked achievements)
|
|
- progress: Record<string, number> (progress toward requirements)
|
|
- Added to GameState:
|
|
- achievements: AchievementState
|
|
- totalSpellsCast: number
|
|
- totalDamageDealt: number
|
|
- totalCraftsCompleted: number
|
|
- Added default values to makeInitial() in store.ts
|
|
- Added all new fields to persist partialize function
|
|
|
|
Stage Summary:
|
|
- All missing types and fields now properly defined
|
|
- Achievement system can track unlocked achievements and progress
|
|
- Stats tracking for spells cast, damage dealt, and crafts completed
|
|
- Build should now pass without undefined property errors
|
|
|
|
---
|
|
Task ID: 15
|
|
Agent: Main
|
|
Task: Implement multiple UI improvements and attunement leveling
|
|
|
|
Work Log:
|
|
- **Added mana pools display to ManaDisplay component**:
|
|
- Shows all unlocked elemental mana types
|
|
- Collapsible section with progress bars for each element
|
|
- Sorted by current amount
|
|
- Added elements prop to ManaDisplay
|
|
|
|
- **Added Debug tab**:
|
|
- Reset game with confirmation
|
|
- Mana debug (+10, +100, +1K, +10K, Fill to max)
|
|
- Time control (set day 1, 10, 20, 30)
|
|
- Attunement unlock buttons
|
|
- Attunement XP buttons
|
|
- Elemental mana unlock and add buttons
|
|
- Quick actions (unlock all base elements, utility elements, skip to floor 100)
|
|
|
|
- **Removed ComboMeter from UI**:
|
|
- Removed from header in page.tsx
|
|
- Removed from SpireTab.tsx
|
|
|
|
- **Updated AttunementsTab with level scaling**:
|
|
- Added XP progress bar
|
|
- Added level-scaled regen and conversion display
|
|
- Added max level indicator
|
|
- Removed 'scrollCrafting' from Enchanter capabilities
|
|
|
|
- **Implemented attunement leveling system**:
|
|
- Added getAttunementXPForLevel() and MAX_ATTUNEMENT_LEVEL = 10
|
|
- XP scales exponentially: 100 * 3^(level-2)
|
|
- Added addAttunementXP function with auto level-up
|
|
- Added debug functions: debugUnlockAttunement, debugAddElementalMana, debugSetTime, debugAddAttunementXP, debugSetFloor
|
|
|
|
- **Implemented attunement passive conversion with level scaling**:
|
|
- Updated tick() to use getAttunementConversionRate() for level-scaled rates
|
|
- Conversion rate scales exponentially with level (1.5^(level-1) multiplier)
|
|
|
|
- **Made skill categories collapsible**:
|
|
- Added collapsedCategories state
|
|
- Click on category header to toggle
|
|
- Shows ChevronDown/ChevronRight icons
|
|
- Shows skill count badge
|
|
|
|
Stage Summary:
|
|
- All requested UI improvements completed
|
|
- Attunement leveling system fully functional
|
|
- Debug tab enables testing and development
|
|
- Skills tab is more manageable with collapsible categories
|
|
- Removed unused features (ComboMeter, scrollCrafting)
|
|
|
|
---
|
|
Task ID: 16
|
|
Agent: Main
|
|
Task: Redesign SpireTab to show summoned golems and their damage contribution
|
|
|
|
Work Log:
|
|
- **Added new imports to SpireTab**:
|
|
- Imported `GOLEM_DEFS` and `GOLEM_VARIANTS` from `@/lib/game/constants`
|
|
- Using `ELEMENTS` for element colors and symbols
|
|
|
|
- **Created new "Active Golems" card**:
|
|
- Shows list of currently active golems from `store.activeGolems`
|
|
- Each golem displays:
|
|
- Name and variant (e.g., "Earth Golem" or "Lava Golem")
|
|
- HP bar (currentHP / maxHP) with element-colored gradient
|
|
- Remaining floors countdown
|
|
- DPS contribution (calculated with all bonuses applied)
|
|
- Element icon from ELEMENTS constant
|
|
- Empty state message: "No golems summoned. Visit the Crafting tab to summon golems."
|
|
- Total golem DPS summary at bottom
|
|
- Card has earth-colored accent (#F4A261) when golems are active
|
|
|
|
- **Updated DPS display in Current Floor card**:
|
|
- Total DPS now includes both spell DPS and golem DPS
|
|
- Shows breakdown: "Spell DPS: X | Golem DPS: Y"
|
|
- Only shows breakdown when golems are active
|
|
|
|
- **Calculated individual golem DPS**:
|
|
- Applies variant damage multiplier
|
|
- Applies golemancyMaster bonus (+50%)
|
|
- Applies pactBondedGolems bonus (+10% per pact)
|
|
- Applies guardianInfusion bonus (+25% on guardian floors)
|
|
- Multiplies by attack speed
|
|
|
|
- **Visual styling**:
|
|
- Used Card component for the golems section
|
|
- Used Progress component for HP bars
|
|
- Matches existing dark theme (bg-gray-900/80, border-gray-700)
|
|
- Golem cards have element-colored border accent
|
|
- Used ScrollArea for long golem lists (max-h-48)
|
|
|
|
Stage Summary:
|
|
- New Active Golems card shows all summoned golems with detailed stats
|
|
- DPS display properly accounts for golem damage contribution
|
|
- Visual design consistent with existing game theme
|
|
- All lint checks pass
|
|
|
|
---
|
|
## Task ID: 17 - CraftingTab Redesign
|
|
### Work Task
|
|
Redesign the CraftingTab component to have a two-level tab structure based on active attunements, with a new Golemancy sub-tab for summoning golems.
|
|
|
|
### Work Summary
|
|
- **Implemented two-level tab structure**:
|
|
- Top-level tabs show active attunements (Enchanter ✨, Fabricator ⚒️)
|
|
- If only one attunement is active, skip top-level tabs and show content directly
|
|
- If no attunements are active, show locked message
|
|
|
|
- **Enchanter attunement** (when active):
|
|
- Sub-tabs: Design, Prepare, Apply (existing enchantment functionality)
|
|
- All existing render functions preserved (renderDesignStage, renderPrepareStage, renderApplyStage)
|
|
|
|
- **Fabricator attunement** (when active):
|
|
- Sub-tabs: Craft, Golemancy
|
|
- Craft sub-tab: existing equipment crafting functionality (renderCraftStage)
|
|
- Golemancy sub-tab: NEW - summoning and managing golems
|
|
|
|
- **New Golemancy features**:
|
|
- Shows available golem types from `GOLEM_DEFS` with:
|
|
- Golem name, description, element color
|
|
- Base damage, HP, and attack speed stats
|
|
- Summon button with mana cost (e.g., "Summon - 50 Earth Mana")
|
|
- Shows locked golem types (greyed out) with unlock conditions
|
|
- Shows active golems with:
|
|
- HP progress bar
|
|
- Remaining floor duration
|
|
- Total damage dealt
|
|
- Dismiss button
|
|
- Shows golem variants info (requires Crystal Embedding skill)
|
|
- Uses store methods: `canSummonGolem()`, `summonGolem()`, `dismissGolem()`, `getGolemDuration()`
|
|
- Checks attunement status via `store.attunements.enchanter?.active` and `store.attunements.fabricator?.active`
|
|
|
|
- **New imports added**:
|
|
- `GOLEM_DEFS`, `GOLEM_VARIANTS`, `ELEMENTS` from `@/lib/game/constants`
|
|
- `ActiveGolem` type from `@/lib/game/types`
|
|
- Additional Lucide icons: `Heart`, `Sword`, `Skull`
|
|
|
|
- **Visual styling**:
|
|
- Maintains existing dark theme (bg-gray-900/80, border-gray-700)
|
|
- Element-colored accents for golem types
|
|
- Uses shadcn/ui components: Card, Button, Progress, Badge, ScrollArea, Tabs
|
|
- Consistent with existing CraftingTab styling
|
|
|
|
---
|
|
## Task ID: 18 - StatsTab Redesign for Attunement-Specific Stats
|
|
### Work Task
|
|
Redesign the StatsTab component to better display attunement-specific stats with Active Attunements card, Combination Skills card, and reorganized attunement-specific stat sections.
|
|
|
|
### Work Summary
|
|
- **Added "Active Attunements" card at the top**:
|
|
- Each active attunement displayed as an expandable card/badge with:
|
|
- Icon and name (Enchanter ✨, Invoker 💜, Fabricator ⚒️)
|
|
- Current level and XP progress bar
|
|
- Primary mana type generated as a badge
|
|
- Key capability unlocked as a badge
|
|
- Click to expand reveals:
|
|
- All available skills for that attunement
|
|
- Skills currently being studied (highlighted)
|
|
- Skill levels displayed with badges
|
|
|
|
- **Added "Combination Skills" card**:
|
|
- Shows combination skills that the player has unlocked (level 5+ in both required attunements)
|
|
- Skills they can unlock shown with requirement badges
|
|
- Green color scheme for available skills
|
|
- Greyed out style for locked skills with red/green requirement indicators
|
|
- Displays attunement level requirements for each skill
|
|
|
|
- **Reorganized existing stats into attunement-specific sections**:
|
|
- **Enchanter Stats** (teal accent border):
|
|
- Enchantment capacity with Ancient Echo bonus
|
|
- Efficiency bonus from efficientEnchant skill
|
|
- Designs created count
|
|
- Effects unlocked count
|
|
- Disenchant recovery rate
|
|
- Enchant speed bonus
|
|
- **Invoker Stats** (purple accent border):
|
|
- Pacts signed count (X/10)
|
|
- Pact multiplier calculation
|
|
- Pact Mastery bonus
|
|
- Guardian Affinity time reduction
|
|
- Elemental Bond capacity per pact
|
|
- Pact Synergy bonus
|
|
- Signed pacts list with guardian colors
|
|
- **Fabricator Stats** (earth/amber accent border):
|
|
- Golems active count
|
|
- Golem DPS (using store.getActiveGolemDPS())
|
|
- Golem duration (using store.getGolemDuration())
|
|
- Golem Vitality HP bonus
|
|
- Crafting speed bonus
|
|
- Earth conversion bonus
|
|
- Active golems list with HP bars and damage dealt
|
|
|
|
- **Import requirements fulfilled**:
|
|
- Imported `ATTUNEMENTS_DEF` from `@/lib/game/data/attunements`
|
|
- Imported `SKILL_CATEGORIES` from `@/lib/game/constants`
|
|
- Uses `store.attunements` to check active attunements
|
|
- Uses `store.getGolemDuration()` and `store.getActiveGolemDPS()` for Fabricator stats
|
|
|
|
- **Visual styling**:
|
|
- Uses Card, Badge, Progress, Collapsible components from shadcn/ui
|
|
- Matches existing dark theme (bg-gray-900/80, border-gray-700)
|
|
- Uses attunement colors from ATTUNEMENTS_DEF:
|
|
- Enchanter: teal #1ABC9C
|
|
- Invoker: purple #9B59B6
|
|
- Fabricator: earth #F4A261
|
|
- Top border accent for each attunement-specific section
|
|
- Conditional rendering - only shows attunement sections if that attunement is active
|
|
|
|
- **Preserved existing functionality**:
|
|
- Mana Stats section retained
|
|
- Combat Stats section retained
|
|
- Study Stats section retained
|
|
- Element Stats section retained
|
|
- Active Skill Upgrades section retained
|
|
- Loop Stats section retained
|
|
|
|
---
|
|
Task ID: 19
|
|
Agent: Main
|
|
Task: Remove Temporal Memory skill and fix unimplemented effects
|
|
|
|
Work Log:
|
|
- **Removed Temporal Memory skill from SKILLS_DEF**:
|
|
- Removed `temporalMemory: { name: "Temporal Memory", desc: "Keep 1 spell across loops", cat: "ascension", max: 3, base: 2000, studyTime: 36 }` from constants.ts
|
|
- This functionality should only be available through prestige upgrades purchased with insight
|
|
- This preserves the insight economy - spell memory is now exclusively purchased with insight
|
|
|
|
- **Removed all temporalMemory references from codebase**:
|
|
- timeSlice.ts: Removed temporalMemory skill check in startNewLoop
|
|
- prestigeSlice.ts: Removed temporalMemory spell preservation code, simplified to only use spellMemory prestige upgrade
|
|
- store.ts: Removed temporalMemory skill check and spell preservation from startNewLoop function
|
|
- gameStore.ts: Removed temporalMemory skill check and spell preservation from startNewLoop function
|
|
|
|
- **Updated tests**:
|
|
- store.test.ts: Removed temporalMemory test case
|
|
- skills.test.ts: Removed Temporal Memory test case from Ascension Skills tests
|
|
|
|
- **Verified transference mana type**:
|
|
- Confirmed transference exists in ELEMENTS constant with proper definition
|
|
- Transference is automatically unlocked for Enchanter attunement in makeInitial()
|
|
|
|
- **Fixed unimplemented code in craftingSlice.ts**:
|
|
- Added `cachedSkills` variable and `setCachedSkills()` function for skill access
|
|
- Fixed `calculateApplicationTime()` call to use cachedSkills instead of empty object
|
|
- Fixed efficiency bonus calculation to use `getEnchantEfficiencyBonus(cachedSkills)` instead of hardcoded 0
|
|
|
|
Stage Summary:
|
|
- Temporal Memory skill fully removed from game
|
|
- Spell preservation now exclusively through prestige upgrades (insight-purchased)
|
|
- Transference mana type verified and working
|
|
- Crafting slice TODOs resolved with proper skill integration
|
|
- All lint checks pass
|
|
|
|
---
|
|
Task ID: 20
|
|
Agent: Main
|
|
Task: Major gameplay improvements - barriers, HP regen, descent mechanic, skill cleanup
|
|
|
|
Work Log:
|
|
- **Fixed transference mana display**:
|
|
- Updated ManaDisplay to show unlocked elements even with 0 mana
|
|
- Previously filtered to elements with current >= 1
|
|
|
|
- **Removed blocking/dodging mechanics** (player has no health):
|
|
- Replaced Seer's `foresight` (dodge) with `criticalMastery` (crit damage)
|
|
- Replaced Warden's defensive skills with mana efficiency skills
|
|
- Replaced Strider's `evasive` (dodge) with `fluidMotion` (combo duration)
|
|
- Warden now focuses on mana efficiency and resource management
|
|
|
|
- **Added guardian barriers**:
|
|
- Added `barrier` property to GuardianDef in types.ts
|
|
- Added barriers to all 10 guardians (50% of HP)
|
|
- Barriers are extra HP that must be depleted before main HP
|
|
- Barriers do NOT regenerate (one-time shield)
|
|
- UI shows gray barrier bar above main HP when active
|
|
|
|
- **Added floor HP regeneration**:
|
|
- Created `getFloorHPRegen()` function - scales with floor level
|
|
- Non-guardian floors regen 1% + 0.2% per floor HP per hour
|
|
- Guardian floors have 0 regen
|
|
- Regen only happens during combat (climbing action)
|
|
|
|
- **Implemented climb-down mechanic**:
|
|
- Added `climbDirection` ('up' | 'down') and `isDescending` to GameState
|
|
- Added `floorBarrier` and `floorMaxBarrier` to GameState
|
|
- Created `exitSpire()` function that triggers descent
|
|
- When descending, player must fight through each floor to floor 1
|
|
- Cannot switch away from climb while above floor 1 - must descend first
|
|
- On guardian defeat during descent, no pact is signed
|
|
- Updated UI with descent indicator and exit spire button
|
|
|
|
- **Updated SpireTab UI**:
|
|
- Shows barrier bar for guardian floors
|
|
- HP bar grays out when barrier is active
|
|
- Added "Exit Spire" button during climb
|
|
- Shows descent status indicator
|
|
|
|
- **Updated store persistence**:
|
|
- Added new fields to partialize function for save/load
|
|
|
|
Stage Summary:
|
|
- Guardian barriers add strategic depth - must break shield before damaging
|
|
- Floor HP regen makes higher floors harder without burst DPS
|
|
- Descent mechanic ensures player must survive entire climb in one go
|
|
- Blocking/dodging skills replaced with meaningful alternatives
|
|
- All lint checks pass
|
|
|
|
---
|
|
Task ID: 3
|
|
Agent: Explore
|
|
Task: Review and find nonsensical mechanics
|
|
|
|
Work Log:
|
|
- Read worklog.md to understand previous work (Task 20 already removed some blocking/dodging)
|
|
- Searched codebase for blocking, dodging, parry, evasion mechanics
|
|
- Searched for player health/HP references
|
|
- Searched for defense stats
|
|
- Searched for thorns/reflect damage mechanics
|
|
- Searched for healing mechanics that heal the player
|
|
- Reviewed familiar-slice.ts and familiars.ts for thorns and manaShield
|
|
- Reviewed skill-evolution.ts for defensive effects
|
|
- Reviewed attunements.ts for defensive mechanics
|
|
|
|
Stage Summary:
|
|
- **Found nonsensical mechanics that should be removed**:
|
|
|
|
## 1. FAMILIAR THORNS ABILITY (HIGH PRIORITY)
|
|
**Files**:
|
|
- `/home/z/my-project/src/lib/game/data/familiars.ts` (lines 45-50, 150, 214, 281, 349, 405)
|
|
- `/home/z/my-project/src/lib/game/familiar-slice.ts` (lines 36, 50, 264-265)
|
|
- `/home/z/my-project/src/components/game/tabs/FamiliarTab.tsx` (lines 81, 196, 334)
|
|
|
|
**Issue**: "Reflect X% damage taken" - The player has no health and doesn't take damage. This ability is meaningless.
|
|
- earthPebble familiar: thorns(2, 0.5)
|
|
- crystalGolem familiar: thorns(5, 1)
|
|
- shieldGuardian familiar: thorns(8, 1.5)
|
|
- ancientGolem familiar: thorns(15, 3)
|
|
- celestialGuardian familiar: thorns(25, 5)
|
|
|
|
## 2. FAMILIAR MANA SHIELD ABILITY (MEDIUM PRIORITY)
|
|
**Files**:
|
|
- `/home/z/my-project/src/lib/game/data/familiars.ts` (lines 74-79, 215, 282, 335, 351, 390, 406)
|
|
- `/home/z/my-project/src/lib/game/familiar-slice.ts` (lines 38, 52, 270-271)
|
|
|
|
**Issue**: "Shield absorbs X damage, costs 1 mana per X damage" - Since player doesn't take damage, this is useless.
|
|
- crystalGolem: manaShield(10, 2)
|
|
- shieldGuardian: manaShield(20, 4)
|
|
- voidWalker: manaShield(15, 3)
|
|
- ancientGolem: manaShield(30, 5)
|
|
- leviathanSpawn: manaShield(25, 5)
|
|
- celestialGuardian: manaShield(50, 10)
|
|
|
|
## 3. MANA NOVA UPGRADE (HIGH PRIORITY)
|
|
**File**: `/home/z/my-project/src/lib/game/skill-evolution.ts` (line ~161)
|
|
```
|
|
{ id: 'mw_t4_l10_nova', name: 'Mana Nova', desc: 'When taking damage, release 5% mana as damage', milestone: 10, effect: { type: 'special', specialId: 'manaNova', specialDesc: 'Defensive burst' } }
|
|
```
|
|
**Issue**: "When taking damage" - Player doesn't take damage, so this never triggers.
|
|
|
|
## 4. FLAVOR TEXT REFERENCE (LOW PRIORITY - COSMETIC)
|
|
**File**: `/home/z/my-project/src/lib/game/data/familiars.ts` (line 286)
|
|
```
|
|
flavorText: 'It stands motionless for hours, then suddenly moves to block danger.'
|
|
```
|
|
**Issue**: Just flavor text mentioning "block danger" - not a mechanic, but inconsistent with game design.
|
|
|
|
## 5. MANA TYPE 'barrier' (REVIEW NEEDED)
|
|
**File**: `/home/z/my-project/src/lib/game/attunements.ts` (line 46)
|
|
```
|
|
| 'barrier' // Warden - protection/defense
|
|
```
|
|
**Issue**: Warden attunement uses 'barrier' mana type. This may be fine if barrier mana is used for mana-related mechanics (like mana shields for mana, not HP), but the comment "protection/defense" is misleading since player has no health to protect.
|
|
|
|
## Recommendation:
|
|
1. **Remove thorns ability entirely** from familiar system - replace with a different offensive ability (e.g., "Retaliation: Deal X% of damage dealt as bonus damage")
|
|
2. **Remove manaShield ability entirely** from familiar system - replace with mana-related bonus (e.g., "Mana Buffer: +X max mana")
|
|
3. **Replace Mana Nova upgrade** with something that triggers on mana expenditure or combat actions instead of "taking damage"
|
|
4. **Update flavor text** to not reference blocking
|
|
5. **Clarify barrier mana type** purpose - if it's for mana mechanics, rename comment to reflect that
|
|
|
|
---
|
|
Task ID: 1
|
|
Agent: full-stack-developer
|
|
Task: Implement guardian barriers and floor health regen
|
|
|
|
Work Log:
|
|
- **Updated getFloorHPRegen() function** in store.ts:
|
|
- Changed guardian floors from 0 regen to 3% per hour (3x the usual)
|
|
- Non-guardian floors now have fixed 1% per hour regen
|
|
- This makes floors progressively harder during combat
|
|
- **Updated combat tick logic** in store.ts:
|
|
- Removed the condition that excluded guardian floors from HP regen
|
|
- All floors now regenerate HP during combat (climbing action)
|
|
- Guardian floors regen 3% per hour, non-guardian floors regen 1% per hour
|
|
- **Fixed initial barrier state** in makeInitial():
|
|
- Changed from hardcoded 0 to dynamic getFloorBarrier(startFloor)
|
|
- Ensures barriers are properly initialized if player starts on a guardian floor
|
|
- **Updated SpireTab UI** with improved barrier and HP regen display:
|
|
- Added Shield icon for barrier indicator
|
|
- Added "(no regen)" text to clarify barriers don't regenerate
|
|
- Improved barrier bar visual with gradient (gray tones)
|
|
- Added HP regen indicator during combat: shows "+X/hr" with pulsing Heart icon
|
|
- Added getFloorHPRegen import from store
|
|
- Added HOURS_PER_TICK, Heart, and Shield imports
|
|
|
|
Stage Summary:
|
|
- Guardian barriers are now fully functional as a one-time shield (no regen)
|
|
- All floors regenerate HP during combat, making battles more challenging
|
|
- Guardian floors regen 3% per hour, non-guardian floors regen 1% per hour
|
|
- UI clearly shows barrier status and HP regen rate during combat
|
|
- All lint checks pass
|
|
|
|
---
|
|
Task ID: 8
|
|
Agent: full-stack-developer
|
|
Task: Implement compound mana types
|
|
|
|
Work Log:
|
|
- **Added composite element utility functions to constants.ts**:
|
|
- `canUnlockCompositeElement()`: Checks if all recipe components are unlocked
|
|
- `getUnlockableCompositeElements()`: Returns list of composite elements that can be unlocked
|
|
- `getCompositeConversionRate()`: Calculates rate as half of slowest component rate
|
|
- `getBaseElementConversionRates()`: Gets rates from attunements for calculation
|
|
|
|
- **Updated store.ts tick function**:
|
|
- Added imports for new composite element functions
|
|
- Added composite element unlocking logic after attunement mana conversion
|
|
- When both components of a composite element are unlocked, the composite element unlocks
|
|
- Log message shows unlock with recipe (e.g., "🔮 Metal mana unlocked! (Fire + Earth)")
|
|
- Added composite element conversion logic:
|
|
- Calculates conversion rate as half of slowest component
|
|
- Converts from component elements to composite element
|
|
- Checks capacity and available mana before conversion
|
|
- Handles composite elements: metal (fire+earth), blood (life+water), wood (life+earth), sand (earth+water)
|
|
- Handles exotic elements: crystal (sand+mental), stellar (fire+light), void (dark+death)
|
|
|
|
- **Updated ManaDisplay.tsx UI**:
|
|
- Added `baseConversionRates` prop for showing composite conversion rates
|
|
- Sorted elements by category (base/utility first, then composite/exotic)
|
|
- Added "Compound Elements" section with Sparkles icon
|
|
- Shows recipe for each composite element (e.g., "🔥+⛰️" for Metal)
|
|
- Shows conversion rate (e.g., "+1.00/hr")
|
|
- Visual distinction with colored border accents
|
|
|
|
- **Updated page.tsx**:
|
|
- Added import for `getAttunementConversionRate` and `ATTUNEMENTS_DEF`
|
|
- Computed `baseConversionRates` from active attunements
|
|
- Passed `baseConversionRates` to ManaDisplay component
|
|
|
|
Stage Summary:
|
|
- Composite elements (metal, blood, wood, sand) automatically unlock when both components are unlocked
|
|
- Exotic elements (crystal, stellar, void) also supported with triple-component recipes
|
|
- Conversion rate is half of slowest component rate as specified
|
|
- UI shows compound elements in separate section with recipes and rates
|
|
- All lint checks pass
|
|
|
|
---
|
|
Task ID: 21
|
|
Agent: Main
|
|
Task: Complete remaining implementation tasks
|
|
|
|
Work Log:
|
|
- **Added legs equipment slot and category**:
|
|
- Updated EquipmentSlot type to include 'legs'
|
|
- Updated EquipmentCategory type to include 'legs'
|
|
- Added LEGS_ONLY helper for enchantment effects
|
|
- Added 5 pants equipment types (civilianPants, apprenticeTrousers, travelerPants, battleGreaves, arcanistLeggings)
|
|
- Updated getValidSlotsForCategory() to handle 'legs' category
|
|
|
|
- **Added Expeditious Retreat enchantment**:
|
|
- Movement effects category for legs equipment
|
|
- expeditious_retreat: Teleport down 5 floors when exiting spire (legs only)
|
|
- swift_descent: +20% faster floor descent (legs only)
|
|
- spire_runner: +10% movement speed in spire (legs and feet)
|
|
- Added EXPEDITIOUS_RETREAT to SPECIAL_EFFECTS constant
|
|
|
|
- **Updated tests for current skill definitions**:
|
|
- Fixed skill.test.ts to match current SKILLS_DEF
|
|
- All 65 tests pass
|
|
- Removed outdated skill references (combatTrain, arcaneFury, etc.)
|
|
- Added tests for attunement skills (enchanter, invoker, fabricator)
|
|
- Added tests for combination skills
|
|
|
|
- **Added new achievements**:
|
|
- Element Mastery: elementalDabbler, elementalMaster
|
|
- Compound Mana: alchemist, compoundCollector, exoticDiscovery
|
|
- Attunements: firstAttunement, dualAttunement, triAttunement, attunementLevel5, attunementLevel10
|
|
- Guardians: firstGuardian, guardianHunter, guardianVanquisher, barrierBreaker
|
|
|
|
Stage Summary:
|
|
- Legs equipment slot fully implemented with 5 equipment types
|
|
- Movement enchantments for spire navigation added
|
|
- All tests updated and passing (65/65)
|
|
- New achievements for progression milestones
|
|
- All lint checks pass
|
|
|
|
---
|
|
Task ID: 22
|
|
Agent: Main
|
|
Task: Fix inconsistencies - remove mechanics that don't make sense (player can't take damage)
|
|
|
|
Work Log:
|
|
- **Removed lifesteal abilities from familiars**:
|
|
- Replaced with manaSiphon (restores mana based on damage dealt)
|
|
- Updated waterDroplet, phoenixHatchling, primordialPhoenix, celestialGuardian
|
|
|
|
- **Removed thorns abilities from familiars**:
|
|
- Replaced with guardianDamage (+% damage to guardians)
|
|
- Updated earthPebble, crystalGolem, shieldGuardian, ancientGolem, celestialGuardian
|
|
|
|
- **Removed manaShield abilities from familiars**:
|
|
- Replaced with barrierBreaker (+% damage to barriers) and maxManaBonus
|
|
- Updated crystalGolem, shieldGuardian, voidWalker, ancientGolem, leviathanSpawn, celestialGuardian
|
|
|
|
- **Added new familiar ability types to types.ts**:
|
|
- critDamage, guardianDamage, manaSiphon, barrierBreaker, maxManaBonus, studySpeed
|
|
- Removed: lifeSteal, thorns, manaShield (player can't take damage)
|
|
|
|
- **Replaced shield equipment with focus items**:
|
|
- Removed basicShield, reinforcedShield, runicShield, manaShield
|
|
- Added crystalOrb, manaTome, elementalFocus, soulCrystal, arcanumOrb
|
|
- Focus items enhance spellcasting instead of providing defense
|
|
- Updated EquipmentCategory from 'shield' to 'focus'
|
|
|
|
- **Updated crafting recipes**:
|
|
- Replaced shieldBlueprint with focusBlueprint
|
|
- Now crafts Elemental Focus instead of Runic Shield
|
|
|
|
- **Updated enchantment-effects.ts**:
|
|
- Changed BODY_AND_SHIELD to BODY_ONLY
|
|
- Changed CASTER_CATALYST_ACCESSORY to CASTER_CATALYST_FOCUS_ACCESSORY
|
|
- Updated MANA_EQUIPMENT to include 'focus'
|
|
- Updated UTILITY_EQUIPMENT to include 'focus'
|
|
- Updated ALL_EQUIPMENT to use 'focus' instead of 'shield'
|
|
|
|
- **Removed execute-related effects**:
|
|
- Removed EXECUTIONER from SPECIAL_EFFECTS
|
|
- Removed executioner code from store.ts combat tick
|
|
- Replaced ct_t2_l10_finisher upgrade with ct_t2_l10_precision (+50% crit damage)
|
|
|
|
- **Updated skill descriptions**:
|
|
- Soul Binding: Changed to "Bind creature souls to items for unique enchantment effects"
|
|
- Ancient Echo: Buffed from "+1 enchantment capacity per Enchanter level" to "+2"
|
|
|
|
Stage Summary:
|
|
- All player-defense related mechanics removed (shields, thorns, lifesteal, manaShield)
|
|
- Focus items provide spellcasting enhancement instead of defense
|
|
- Execute effects removed (doesn't make sense in context)
|
|
- Soul Binding and Ancient Echo skills improved
|
|
- All lint checks pass
|