export interface AnimationConfig { key: string; textureKey: string; frames: number[]; frameRate: number; repeat: number; } export const GAME_CONFIG = { player: { initialStats: { maxHp: 20, hp: 20, maxMana: 20, mana: 20, attack: 5, defense: 2, level: 1, exp: 0, expToNextLevel: 10, statPoints: 0, skillPoints: 0, strength: 10, dexterity: 10, intelligence: 10, // Offensive critChance: 5, critMultiplier: 150, accuracy: 90, lifesteal: 0, // Defensive evasion: 5, blockChance: 0, // Utility luck: 0, passiveNodes: [] as string[] }, speed: 100, viewRadius: 8, reloadDuration: 3, }, map: { width: 60, height: 40, minRooms: 8, maxRooms: 13, roomMinWidth: 5, roomMaxWidth: 12, roomMinHeight: 4, roomMaxHeight: 10 }, enemies: { rat: { baseHp: 8, baseAttack: 3, baseDefense: 0, minSpeed: 80, maxSpeed: 110, expValue: 5 }, bat: { baseHp: 6, baseAttack: 4, baseDefense: 0, minSpeed: 110, maxSpeed: 140, expValue: 8 } }, enemyScaling: { baseCount: 0, baseCountPerFloor: 0, hpPerFloor: 5, attackPerTwoFloors: 1, expMultiplier: 1.2 }, trapScaling: { baseCount: 0, baseCountPerFloor: 0.5 }, leveling: { baseExpToNextLevel: 10, expMultiplier: 1.5, hpGainPerLevel: 5, manaGainPerLevel: 3, attackGainPerLevel: 1, statPointsPerLevel: 5, skillPointsPerLevel: 1 }, mana: { regenPerTurn: 2, regenInterval: 3 // Regenerate every 3 turns }, rendering: { tileSize: 16, cameraZoom: 2, minZoom: 0.5, maxZoom: 4, zoomStep: 0.1, wallColor: 0x2b2b2b, floorColor: 0x161616, exitColor: 0xffd166, playerColor: 0x66ff66, enemyColor: 0xff6666, pathPreviewColor: 0x3355ff, expOrbColor: 0x33ccff, expTextColor: 0x33ccff, levelUpColor: 0xffff00, fogAlphaFloor: 0.15, fogAlphaWall: 0.35, visibleMinAlpha: 0.35, visibleMaxAlpha: 1.0, visibleStrengthFactor: 0.65, tracks: { endTop: 67, endBottom: 68, cornerNE: 93, horizontal: 70, cornerSE: 69, endLeft: 79, endRight: 80, vertical: 81, cornerSW: 71, cornerNW: 95 }, mineCarts: { horizontal: 54, vertical: 55, turning: 56 }, moveDuration: 62 // Visual duration for movement in ms }, ui: { // ... rest of content ... minimapPanelWidth: 340, minimapPanelHeight: 220, minimapPadding: 20, menuPanelWidth: 340, menuPanelHeight: 220, // Targeting targetingLineColor: 0xff0000, targetingLineWidth: 2, targetingLineAlpha: 0.7, targetingLineDash: 6, targetingLineGap: 4, targetingLineShorten: 8 }, gameplay: { energyThreshold: 100, actionCost: 100, ceramicDragonHead: { range: 4, initialDamage: 7, burnDamage: 3, burnDuration: 5, rechargeTurns: 20, maxCharges: 3 } }, assets: { spritesheets: [ { key: "warrior", path: "assets/sprites/actors/player/warrior.png", frameConfig: { frameWidth: 12, frameHeight: 15 } }, { key: "rat", path: "assets/sprites/actors/enemies/rat.png", frameConfig: { frameWidth: 16, frameHeight: 15 } }, { key: "bat", path: "assets/sprites/actors/enemies/bat.png", frameConfig: { frameWidth: 15, frameHeight: 15 } }, { key: "dungeon", path: "assets/tilesets/dungeon.png", frameConfig: { frameWidth: 16, frameHeight: 16 } }, { key: "kennys_dungeon", path: "assets/tilesets/kennys_dungeon.png", frameConfig: { frameWidth: 16, frameHeight: 16 } }, { key: "items", path: "assets/sprites/items/items.png", frameConfig: { frameWidth: 16, frameHeight: 16 } }, { key: "weapons", path: "assets/sprites/items/weapons.png", frameConfig: { frameWidth: 24, frameHeight: 24 } } ], images: [ { key: "splash_bg", path: "assets/ui/splash_bg.png" }, { key: "character_outline", path: "assets/ui/character_outline.png" }, { key: "ceramic_dragon_head", path: "assets/sprites/items/ceramic_dragon_head.png" }, { key: "PriestessNorth", path: "assets/sprites/priestess/PriestessNorth.png" }, { key: "PriestessSouth", path: "assets/sprites/priestess/PriestessSouth.png" }, { key: "PriestessEast", path: "assets/sprites/priestess/PriestessEast.png" }, { key: "PriestessWest", path: "assets/sprites/priestess/PriestessWest.png" }, { key: "mine_cart", path: "assets/sprites/items/mine_cart.png" }, { key: "track_straight", path: "assets/sprites/items/track_straight.png" }, { key: "track_corner", path: "assets/sprites/items/track_corner.png" }, { key: "track_vertical", path: "assets/sprites/items/track_vertical.png" } ] }, animations: [ // Warrior { key: "warrior-idle", textureKey: "warrior", frames: [0, 0, 0, 1, 0, 0, 1, 1], frameRate: 2, repeat: -1 }, { key: "warrior-run", textureKey: "warrior", frames: [2, 3, 4, 5, 6, 7], frameRate: 15, repeat: -1 }, { key: "warrior-die", textureKey: "warrior", frames: [8, 9, 10, 11, 12], frameRate: 10, repeat: 0 }, // Rat { key: "rat-idle", textureKey: "rat", frames: [0, 0, 0, 1], frameRate: 4, repeat: -1 }, { key: "rat-run", textureKey: "rat", frames: [6, 7, 8, 9, 10], frameRate: 10, repeat: -1 }, { key: "rat-die", textureKey: "rat", frames: [11, 12, 13, 14], frameRate: 10, repeat: 0 }, // Bat { key: "bat-idle", textureKey: "bat", frames: [0, 1], frameRate: 8, repeat: -1 }, { key: "bat-run", textureKey: "bat", frames: [0, 1], frameRate: 12, repeat: -1 }, { key: "bat-die", textureKey: "bat", frames: [4, 5, 6], frameRate: 10, repeat: 0 }, ] } as const; export type GameConfig = typeof GAME_CONFIG;