|
import type { PicletType, AttackType } from '../types/picletTypes'; |
|
import type { SpecialAbility } from '../battle-engine/types'; |
|
|
|
|
|
export enum EncounterType { |
|
WILD_PICLET = 'wildPiclet', |
|
TRAINER_BATTLE = 'trainerBattle', |
|
SHOP = 'shop', |
|
HEALTH_CENTER = 'healthCenter', |
|
FIRST_PICLET = 'firstPiclet' |
|
} |
|
|
|
|
|
export interface BattleMove { |
|
name: string; |
|
type: AttackType; |
|
power: number; |
|
accuracy: number; |
|
pp: number; |
|
currentPp: number; |
|
description: string; |
|
unlockLevel: number; |
|
} |
|
|
|
|
|
export interface PicletInstance { |
|
id?: number; |
|
|
|
|
|
typeId: string; |
|
nickname?: string; |
|
primaryType: PicletType; |
|
secondaryType?: PicletType; |
|
|
|
|
|
currentHp: number; |
|
maxHp: number; |
|
level: number; |
|
xp: number; |
|
attack: number; |
|
defense: number; |
|
fieldAttack: number; |
|
fieldDefense: number; |
|
speed: number; |
|
|
|
|
|
baseHp: number; |
|
baseAttack: number; |
|
baseDefense: number; |
|
baseFieldAttack: number; |
|
baseFieldDefense: number; |
|
baseSpeed: number; |
|
|
|
|
|
moves: BattleMove[]; |
|
nature: string; |
|
specialAbility: SpecialAbility; |
|
specialAbilityUnlockLevel: number; |
|
|
|
|
|
isInRoster: boolean; |
|
rosterPosition?: number; |
|
|
|
|
|
caught: boolean; |
|
caughtAt?: Date; |
|
bst: number; |
|
tier: string; |
|
role: string; |
|
variance: number; |
|
|
|
|
|
imageUrl: string; |
|
imageData?: string; |
|
imageCaption: string; |
|
concept: string; |
|
description: string; |
|
imagePrompt: string; |
|
} |
|
|
|
|
|
export interface Encounter { |
|
id?: number; |
|
|
|
|
|
type: EncounterType; |
|
|
|
|
|
title: string; |
|
description: string; |
|
picletTypeId?: string; |
|
picletInstanceId?: number; |
|
enemyLevel?: number; |
|
|
|
|
|
createdAt: Date; |
|
} |
|
|
|
|
|
export interface GameState { |
|
id?: number; |
|
|
|
|
|
lastEncounterRefresh: Date; |
|
lastPlayed: Date; |
|
|
|
|
|
progressPoints: number; |
|
trainersDefeated: number; |
|
picletsCapured: number; |
|
battlesLost: number; |
|
} |
|
|
|
|
|
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; |
|
} |
|
|
|
|