piclets / src /lib /db /schema.ts
Fraser's picture
use tier
381170a
raw
history blame
3.32 kB
// Enums
export enum EncounterType {
WILD_PICLET = 'wildPiclet',
TRAINER_BATTLE = 'trainerBattle',
SHOP = 'shop',
HEALTH_CENTER = 'healthCenter'
}
// Battle Move embedded object
export interface BattleMove {
name: string;
type: string;
power: number;
accuracy: number;
pp: number;
currentPp: number;
description: string;
}
// PicletInstance - Individual monster instances owned by the player
export interface PicletInstance {
id?: number;
// Type Info
typeId: string;
nickname?: string;
primaryTypeString: string;
secondaryTypeString?: string;
// 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;
// Roster
isInRoster: boolean;
rosterPosition?: number; // 0-5 when in roster
// Metadata
caughtAt: Date;
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;
imagePrompt: string;
}
// Encounter - Game encounters
export interface Encounter {
id?: number;
// Type
type: EncounterType;
// Details
title: string;
description: string;
picletTypeId?: string; // For wild piclet encounters
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;
}
// Legacy Monster interface for backward compatibility
export interface Monster {
id?: number;
name: string;
imageUrl: string;
imageData?: string;
imageCaption: string;
concept: string;
imagePrompt: string;
stats?: {
name: string;
description: string;
tier?: 'low' | 'medium' | 'high' | 'legendary';
HP: number;
defence: number;
attack: number;
speed: number;
specialPassiveTrait: string;
attackActionName: string;
attackActionDescription: string;
buffActionName: string;
buffActionDescription: string;
debuffActionName: string;
debuffActionDescription: string;
specialActionName: string;
specialActionDescription: string;
};
createdAt: Date;
}