piclets / src /lib /db /schema.ts
Fraser's picture
rm legacy
1f2c086
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;
}