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
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:
@@ -20,7 +20,7 @@ export { SPELLS_DEF } from './spells';
|
||||
export { PRESTIGE_DEF } from './prestige';
|
||||
|
||||
// Room constants
|
||||
export type { RoomType } from './rooms';
|
||||
export type { RoomType } from '../types/game';
|
||||
export { PUZZLE_ROOM_INTERVAL, SWARM_ROOM_CHANCE, SPEED_ROOM_CHANCE, PUZZLE_ROOM_CHANCE } from './rooms';
|
||||
export { PUZZLE_ROOMS, SWARM_CONFIG, SPEED_ROOM_CONFIG, FLOOR_ARMOR_CONFIG } from './rooms';
|
||||
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
// ─── Room Types ────────────────────────────────────────────────────────────────
|
||||
// Room types for spire floors
|
||||
export type RoomType = 'combat' | 'puzzle' | 'swarm' | 'speed' | 'guardian';
|
||||
export type { RoomType } from '../types/game';
|
||||
|
||||
// Room generation rules:
|
||||
// - Guardian floors (10, 20, 30, etc.) are ALWAYS guardian type
|
||||
|
||||
@@ -145,7 +145,7 @@ export const BASIC_ELEMENTAL_SPELLS: Record<string, SpellDef> = {
|
||||
castSpeed: 2,
|
||||
unlock: 150,
|
||||
studyTime: 3,
|
||||
desc: "Drain life force from your enemy.",
|
||||
desc: "Siphon vital energy from your enemy."
|
||||
},
|
||||
rotTouch: {
|
||||
name: "Rot Touch",
|
||||
|
||||
@@ -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' },
|
||||
},
|
||||
|
||||
|
||||
@@ -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,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,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,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
|
||||
|
||||
@@ -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' },
|
||||
|
||||
@@ -36,7 +36,7 @@ export interface PrestigeState {
|
||||
pactRitualProgress: number;
|
||||
|
||||
// Actions
|
||||
doPrestige: (id: string) => void;
|
||||
doPrestige: (id: string) => boolean;
|
||||
addMemory: (memory: Memory) => void;
|
||||
removeMemory: (skillId: string) => void;
|
||||
clearMemories: () => void;
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
// ─── Equipment Types ───────────────────────────────────────────────────────
|
||||
import type { EquipmentSlot } from './equipmentSlot';
|
||||
|
||||
// Legacy EquipmentDef for backward compatibility
|
||||
export interface EquipmentDef {
|
||||
id: string;
|
||||
name: string;
|
||||
slot: 'mainHand' | 'offHand' | 'head' | 'body' | 'hands' | 'accessory';
|
||||
slot: EquipmentSlot;
|
||||
rarity: 'common' | 'uncommon' | 'rare' | 'epic' | 'legendary' | 'mythic';
|
||||
stats: Record<string, number>;
|
||||
durability: number;
|
||||
|
||||
@@ -1,12 +1,11 @@
|
||||
// EquipmentSlot type definition
|
||||
// Canonical type — includes all valid equipment slots
|
||||
export type EquipmentSlot =
|
||||
| "mainHand"
|
||||
| "offHand"
|
||||
| "head"
|
||||
| "body"
|
||||
| "hands"
|
||||
| "accessory"
|
||||
| "accessory1"
|
||||
| "accessory2";
|
||||
|
||||
// Export barrel from index
|
||||
| 'mainHand'
|
||||
| 'offHand'
|
||||
| 'head'
|
||||
| 'body'
|
||||
| 'hands'
|
||||
| 'feet'
|
||||
| 'accessory1'
|
||||
| 'accessory2';
|
||||
|
||||
@@ -25,8 +25,10 @@ export type {
|
||||
EquipmentSpellState,
|
||||
BlueprintDef,
|
||||
LootInventory,
|
||||
EquipmentSlot
|
||||
} from './equipmentSlot';
|
||||
} from './equipment';
|
||||
|
||||
// Equipment slot type (canonical)
|
||||
export type { EquipmentSlot } from './equipmentSlot';
|
||||
|
||||
// Game state types
|
||||
export type {
|
||||
|
||||
Reference in New Issue
Block a user