fix: resolve all Priority 4 and Priority 3 issues (18 issues total)
Build and Publish Mana Loop Docker Image / build-and-publish (push) Successful in 1m20s

Priority 4 fixes:
- #50: getUnlockedAttunements filter now only returns active attunements
- #48: doPrestige return type changed from void to boolean
- #47: ConfirmDialog now catches and displays async errors from onConfirm
- #46: GameStateDebug Fill Mana now uses direct setState instead of loop
- #55: DisciplinesTab statBonus/baseValue props verified correct
- #56: DisciplinesTab tab filtering verified working

Priority 3 fixes:
- #45: drain spell description changed from 'life force' to 'vital energy'
- #44: removed banned 'ascension' skill category
- #43: renamed lifeEssenceDrop to vitalityEssenceDrop
- #42: pactMaster achievement requirement changed from 12 to 9
- #40: golems/utils.ts and equipment/utils.ts now import from index
- #39: removed duplicate RoomType from constants/rooms.ts
- #38: consolidated EquipmentSlot type in types/equipmentSlot.ts
- #37: removed duplicate EnchantmentEffectDef from spell-effects/types.ts
- #36: renamed RARITY_COLORS in loot-drops.ts to LOOT_RARITY_COLORS
This commit is contained in:
2026-05-18 20:09:54 +02:00
parent 4f932b6810
commit 594eec1ab4
22 changed files with 53 additions and 84 deletions
+1 -1
View File
@@ -101,7 +101,7 @@ export const ACHIEVEMENTS: Record<string, AchievementDef> = {
name: 'Pact Master',
desc: 'Sign all guardian pacts',
category: 'progression',
requirement: { type: 'pact', value: 12 },
requirement: { type: 'pact', value: 9 },
reward: { insight: 500, damageBonus: 0.2, title: 'Pact Master' },
},
+2 -2
View File
@@ -83,7 +83,7 @@ export function getAttunementBySlot(slot: AttunementSlot): AttunementDef | undef
// Helper function to get all unlocked attunements for a player
export function getUnlockedAttunements(attunements: Record<string, { active: boolean; level: number; experience: number }>): AttunementDef[] {
return Object.entries(attunements)
.filter(([id, state]) => state.active || ATTUNEMENTS_DEF[id]?.unlocked)
.filter(([id, state]) => state.active)
.map(([id]) => ATTUNEMENTS_DEF[id])
.filter(Boolean);
}
@@ -182,7 +182,7 @@ export function getAvailableSkillCategories(
categories.add('mana');
categories.add('study');
categories.add('research');
categories.add('ascension');
// categories.add('ascension'); // removed: banned mechanic
// Add categories from active attunements
Object.entries(attunements)
@@ -2,7 +2,8 @@
// Re-exports all spell effects from modular files
// Re-export types
export type { EnchantmentEffectDef, ALL_CASTER } from './types';
export type { EnchantmentEffectDef } from '../../enchantment-types';
export { ALL_CASTER } from './types';
// Import all spell effect groups
import { BASIC_SPELL_EFFECTS } from './basic-spells';
@@ -1,20 +1,8 @@
// ─── Spell Enchantment Effects Types ─────────────────
import type { EquipmentCategory } from '../../equipment';
export interface EnchantmentEffectDef {
id: string;
name: string;
description: string;
category: string;
baseCapacityCost: number;
maxStacks: number;
allowedEquipmentCategories: string[];
effect: {
type: string;
spellId?: string;
stat?: string;
value?: number;
};
}
// Re-export canonical type from enchantment-types
export type { EnchantmentEffectDef } from '../../enchantment-types';
// Helper to define allowed equipment categories for each effect type
export const ALL_CASTER: string[] = ['caster']
export const ALL_CASTER: EquipmentCategory[] = ['caster'];
+1 -1
View File
@@ -1,6 +1,6 @@
// ─── Equipment Types ─────────────────────────────────────────────────
export type EquipmentSlot = 'mainHand' | 'offHand' | 'head' | 'body' | 'hands' | 'feet' | 'accessory1' | 'accessory2';
export type { EquipmentSlot } from '../../types/equipmentSlot';
export type EquipmentCategory = 'caster' | 'shield' | 'catalyst' | 'sword' | 'head' | 'body' | 'hands' | 'feet' | 'accessory';
// All equipment slots in order
+1 -21
View File
@@ -1,27 +1,7 @@
// ─── Equipment Helper Functions ─────────────────────────
import type { EquipmentType, EquipmentSlot, EquipmentCategory } from './types';
import { ACCESSORIES_EQUIPMENT } from './accessories';
import { BODY_EQUIPMENT } from './body';
import { CASTER_EQUIPMENT } from './casters';
import { CATALYST_EQUIPMENT } from './catalysts';
import { FEET_EQUIPMENT } from './feet';
import { HANDS_EQUIPMENT } from './hands';
import { HEAD_EQUIPMENT } from './head';
import { SHIELD_EQUIPMENT } from './shields';
import { SWORD_EQUIPMENT } from './swords';
const EQUIPMENT_TYPES: Record<string, EquipmentType> = {
...ACCESSORIES_EQUIPMENT,
...BODY_EQUIPMENT,
...CASTER_EQUIPMENT,
...CATALYST_EQUIPMENT,
...FEET_EQUIPMENT,
...HANDS_EQUIPMENT,
...HEAD_EQUIPMENT,
...SHIELD_EQUIPMENT,
...SWORD_EQUIPMENT,
};
import { EQUIPMENT_TYPES } from './index';
export function getEquipmentType(id: string): EquipmentType | undefined {
return EQUIPMENT_TYPES[id];
+1 -9
View File
@@ -1,15 +1,7 @@
// ─── Golem Helper Functions ─────────────────────────
import type { GolemDef, GolemManaCost } from './types';
import { BASE_GOLEMS } from './base-golems';
import { ELEMENTAL_GOLEMS } from './elemental-golems';
import { HYBRID_GOLEMS } from './hybrid-golems';
const GOLEMS_DEF = {
...BASE_GOLEMS,
...ELEMENTAL_GOLEMS,
...HYBRID_GOLEMS,
};
import { GOLEMS_DEF } from './index';
// Get golem slots based on Fabricator attunement level
// Level 2 = 1, Level 4 = 2, Level 6 = 3, Level 8 = 4, Level 10 = 5
+4 -4
View File
@@ -102,9 +102,9 @@ export const LOOT_DROPS: Record<string, LootDrop> = {
dropChance: 0.08,
amount: { min: 3, max: 10 },
},
lifeEssenceDrop: {
id: 'lifeEssenceDrop',
name: 'Life Essence',
vitalityEssenceDrop: {
id: 'vitalityEssenceDrop',
name: 'Vitality Essence',
rarity: 'epic',
type: 'essence',
minFloor: 40,
@@ -187,7 +187,7 @@ export const LOOT_DROPS: Record<string, LootDrop> = {
};
// Rarity colors for UI
export const RARITY_COLORS: Record<string, { color: string; glow: string }> = {
export const LOOT_RARITY_COLORS: Record<string, { color: string; glow: string }> = {
common: { color: '#9CA3AF', glow: '#9CA3AF40' },
uncommon: { color: '#22C55E', glow: '#22C55E40' },
rare: { color: '#3B82F6', glow: '#3B82F640' },