78 lines
3.9 KiB
TypeScript
78 lines
3.9 KiB
TypeScript
// ─── Element Definitions ─────────────────────────────────────────────────────
|
|
import type { ElementDef } from '../types';
|
|
|
|
// Helper function for creating raw mana cost
|
|
export function rawCost(amount: number): { type: 'raw'; amount: number } {
|
|
return { type: 'raw', amount };
|
|
}
|
|
|
|
// Helper function for creating elemental mana cost
|
|
export function elemCost(element: string, amount: number): { type: 'element'; element: string; amount: number } {
|
|
return { type: 'element', element, amount };
|
|
}
|
|
|
|
// Mana constants
|
|
export const MANA_PER_ELEMENT = 100;
|
|
|
|
export const ELEMENTS: Record<string, ElementDef> = {
|
|
// Base Elements
|
|
fire: { name: "Fire", sym: "🔥", color: "#FF6B35", glow: "#FF6B3540", cat: "base" },
|
|
water: { name: "Water", sym: "💧", color: "#4ECDC4", glow: "#4ECDC440", cat: "base" },
|
|
air: { name: "Air", sym: "🌬️", color: "#00D4FF", glow: "#00D4FF40", cat: "base" },
|
|
earth: { name: "Earth", sym: "⛰️", color: "#F4A261", glow: "#F4A26140", cat: "base" },
|
|
light: { name: "Light", sym: "☀️", color: "#FFD700", glow: "#FFD70040", cat: "base" },
|
|
dark: { name: "Dark", sym: "🌑", color: "#9B59B6", glow: "#9B59B640", cat: "base" },
|
|
death: { name: "Death", sym: "💀", color: "#778CA3", glow: "#778CA340", cat: "base" },
|
|
|
|
// Utility Elements
|
|
transference: { name: "Transference", sym: "🔗", color: "#1ABC9C", glow: "#1ABC9C40", cat: "utility" },
|
|
|
|
// Composite Elements
|
|
metal: { name: "Metal", sym: "⚙️", color: "#BDC3C7", glow: "#BDC3C740", cat: "composite", recipe: ["fire", "earth"] },
|
|
sand: { name: "Sand", sym: "⏳", color: "#D4AC0D", glow: "#D4AC0D40", cat: "composite", recipe: ["earth", "water"] },
|
|
lightning: { name: "Lightning", sym: "⚡", color: "#FFEB3B", glow: "#FFEB3B40", cat: "composite", recipe: ["fire", "air"] },
|
|
|
|
// Exotic Elements
|
|
crystal: { name: "Crystal", sym: "💎", color: "#85C1E9", glow: "#85C1E940", cat: "exotic", recipe: ["sand", "sand", "light"] },
|
|
stellar: { name: "Stellar", sym: "⭐", color: "#F0E68C", glow: "#F0E68C40", cat: "exotic", recipe: ["fire", "fire", "light"] },
|
|
void: { name: "Void", sym: "🕳️", color: "#4A235A", glow: "#4A235A40", cat: "exotic", recipe: ["dark", "dark", "death"] },
|
|
};
|
|
|
|
// NOTE: Life, Blood, Wood, Mental, and Force mana types have been removed.
|
|
// Lifesteal and healing are BANNED from player abilities - see AGENTS.md
|
|
// Crystal recipe updated to use light instead of mental.
|
|
|
|
export const FLOOR_ELEM_CYCLE = ["fire", "water", "air", "earth", "light", "dark", "death"];
|
|
|
|
// ─── Element Opposites for Damage Calculation ────────────────────────────────
|
|
export const ELEMENT_OPPOSITES: Record<string, string> = {
|
|
fire: 'water', water: 'fire',
|
|
air: 'earth', earth: 'air',
|
|
light: 'dark', dark: 'light',
|
|
lightning: 'earth', // Lightning is weak to earth (grounding)
|
|
};
|
|
|
|
// ─── Element Icon Mapping (Lucide Icons) ──────────────────────────────────────
|
|
// Note: These are string identifiers for dynamic icon loading
|
|
// The actual Lucide icons are imported in the components
|
|
export const ELEMENT_ICON_NAMES: Record<string, string> = {
|
|
fire: 'Flame',
|
|
water: 'Droplet',
|
|
air: 'Wind',
|
|
earth: 'Mountain',
|
|
light: 'Sun',
|
|
dark: 'Moon',
|
|
death: 'Skull',
|
|
transference: 'Link',
|
|
metal: 'Target',
|
|
sand: 'Hourglass',
|
|
lightning: 'Zap',
|
|
crystal: 'Gem',
|
|
stellar: 'Star',
|
|
void: 'CircleDot',
|
|
raw: 'Circle',
|
|
};
|
|
|
|
// ─── Base Unlocked Elements ───────────────────────────────────────────────────
|
|
export const BASE_UNLOCKED_ELEMENTS = ['fire', 'water', 'air', 'earth'];
|