import type { Vec2 } from '../core/types'; export interface RPGConfig { moveSpeed: number; tileSize: number; gridMovement: boolean; maxPartySize: number; baseStats: RPGStats; xpCurve: 'linear' | 'quadratic' | 'cubic'; xpBase: number; xpScale: number; maxLevel: number; battleSystem: 'action' | 'turn-based' | 'atb'; encounterRate: number; inventorySlots: number; } export interface RPGStats { hp: number; mp: number; attack: number; defense: number; magic: number; speed: number; luck: number; } export declare const DEFAULT_RPG_CONFIG: RPGConfig; export declare function xpForLevel(level: number, config: RPGConfig): number; export interface RPGCharacter { id: string; name: string; level: number; xp: number; stats: RPGStats; currentHp: number; currentMp: number; equipment: Record; skills: string[]; statusEffects: StatusEffect[]; } export interface StatusEffect { id: string; name: string; duration: number; statMod: Partial; dot: number; hot: number; } export interface ItemDef { id: string; name: string; description: string; type: 'weapon' | 'armor' | 'accessory' | 'consumable' | 'key' | 'material'; slot?: string; stackable: boolean; maxStack: number; statBonus: Partial; price: number; rarity: 'common' | 'uncommon' | 'rare' | 'epic' | 'legendary'; effectId?: string; } export interface Inventory { slots: Array<{ itemId: string; count: number; } | null>; gold: number; } export declare function createInventory(capacity: number): Inventory; export declare function addItem(inv: Inventory, itemId: string, count: number, itemDefs: Map): boolean; export interface VisualNovelConfig { textSpeed: number; autoAdvanceDelay: number; skipSpeed: number; historyLength: number; saveSlots: number; maxCharactersOnScreen: number; transitionDuration: number; } export declare const DEFAULT_VISUAL_NOVEL_CONFIG: VisualNovelConfig; export type VNCommandType = 'dialog' | 'choice' | 'show' | 'hide' | 'scene' | 'music' | 'sfx' | 'wait' | 'set' | 'if' | 'jump' | 'end'; export interface VNCommand { type: VNCommandType; character?: string; text?: string; choices?: VNChoice[]; asset?: string; position?: string; expression?: string; variable?: string; value?: string | number | boolean; condition?: string; label?: string; duration?: number; } export interface VNChoice { text: string; label: string; condition?: string; } export interface VNScript { id: string; name: string; commands: VNCommand[]; labels: Record; } export declare function parseVNLabels(commands: VNCommand[]): Record; export interface VNState { scriptId: string; commandIndex: number; variables: Record; history: VNCommand[]; visibleCharacters: Array<{ id: string; position: string; expression: string; }>; currentBackground: string; textProgress: number; waitingForChoice: boolean; } export declare function createVNState(scriptId: string): VNState; export interface PointAndClickConfig { walkSpeed: number; doubleClickRun: boolean; runMultiplier: number; interactionDistance: number; inventoryPosition: 'top' | 'bottom' | 'sidebar'; cursorTypes: string[]; verbCoin: boolean; hotspotHighlight: boolean; } export declare const DEFAULT_POINT_AND_CLICK_CONFIG: PointAndClickConfig; export interface Hotspot { id: string; name: string; x: number; y: number; width: number; height: number; actions: Record; description: string; enabled: boolean; } export interface RoomDef { id: string; name: string; background: string; walkableArea: Array<{ x: number; y: number; }>; hotspots: Hotspot[]; exits: Array<{ targetRoom: string; position: Vec2; direction: string; }>; } export interface RoguelikeConfig { mapWidth: number; mapHeight: number; roomMinSize: number; roomMaxSize: number; maxRooms: number; fovRadius: number; turnBased: boolean; permadeath: boolean; metaProgression: boolean; floorCount: number; itemDropRate: number; eliteChance: number; bossEveryNFloors: number; } export declare const DEFAULT_ROGUELIKE_CONFIG: RoguelikeConfig; export type TileType = 'wall' | 'floor' | 'door' | 'stairs_up' | 'stairs_down' | 'water' | 'lava'; export interface DungeonRoom { x: number; y: number; width: number; height: number; connected: boolean; } /** BSP dungeon generator. */ export declare function generateDungeon(config: RoguelikeConfig): { tiles: TileType[]; rooms: DungeonRoom[]; }; /** Simple FOV (field of view) via raycasting. */ export declare function computeFOV(tiles: TileType[], mapWidth: number, cx: number, cy: number, radius: number): Set; export interface DungeonCrawlerConfig { /** First-person or top-down perspective. */ perspective: 'first-person' | 'top-down'; gridSize: number; partySize: number; automap: boolean; trapChance: number; secretWallChance: number; encounterRate: number; lootQualityScale: number; puzzleFrequency: number; } export declare const DEFAULT_DUNGEON_CRAWLER_CONFIG: DungeonCrawlerConfig; export interface DungeonFloorDef { floor: number; theme: string; width: number; height: number; encounters: string[]; boss: string | null; lootTable: string; }