import type { PicletType, AttackType } from '../types/picletTypes'; import type { SpecialAbility } from '../battle-engine/types'; // Enums export enum EncounterType { WILD_PICLET = 'wildPiclet', TRAINER_BATTLE = 'trainerBattle', SHOP = 'shop', HEALTH_CENTER = 'healthCenter', FIRST_PICLET = 'firstPiclet' } // Battle Move embedded object export interface BattleMove { name: string; type: AttackType; power: number; accuracy: number; pp: number; currentPp: number; description: string; unlockLevel: number; // Level at which this move is unlocked } // PicletInstance - Individual monster instances owned by the player export interface PicletInstance { id?: number; // Type Info typeId: string; nickname?: string; primaryType: PicletType; secondaryType?: PicletType; // Current Stats currentHp: number; maxHp: number; level: number; xp: number; attack: number; defense: number; fieldAttack: number; fieldDefense: number; speed: number; // Base Stats (from generation) baseHp: number; baseAttack: number; baseDefense: number; baseFieldAttack: number; baseFieldDefense: number; baseSpeed: number; // Battle moves: BattleMove[]; nature: string; specialAbility: SpecialAbility; specialAbilityUnlockLevel: number; // Level at which special ability is unlocked // Roster isInRoster: boolean; rosterPosition?: number; // 0-5 when in roster // Metadata caught: boolean; // Whether this Piclet has been caught by the player caughtAt?: Date; // When this Piclet was caught (undefined if not caught) bst: number; // Base Stat Total tier: string; role: string; variance: number; // Original generation data imageUrl: string; imageData?: string; // Base64 encoded image with transparency imageCaption: string; concept: string; description: string; // Generated monster description from stats imagePrompt: string; } // Encounter - Game encounters export interface Encounter { id?: number; // Type type: EncounterType; // Details title: string; description: string; picletTypeId?: string; // For wild piclet encounters picletInstanceId?: number; // For first piclet encounters - specific Piclet to catch enemyLevel?: number; // Timing createdAt: Date; } // GameState - Overall game progress export interface GameState { id?: number; // Timing lastEncounterRefresh: Date; lastPlayed: Date; // Progress (0-1000) progressPoints: number; trainersDefeated: number; picletsCapured: number; battlesLost: number; } // Battle System Types export enum BattlePhase { INTRO = 'intro', MAIN = 'main', MOVE_SELECT = 'moveSelect', PICLET_SELECT = 'picletSelect', FORCED_SWAP = 'forcedSwap', BATTLE_END = 'battleEnd' } export enum ActionView { MAIN = 'main', MOVES = 'moves', PICLETS = 'piclets', ITEMS = 'items', FORCED_SWAP = 'forcedSwap' } export interface BattleState { phase: BattlePhase; currentTurn: number; playerPiclet: PicletInstance; enemyPiclet: PicletInstance; isWildBattle: boolean; processingTurn: boolean; battleEnded: boolean; winner?: 'player' | 'enemy'; capturedPiclet?: PicletInstance; }