export interface GridConfig { min_x: number; max_x: number; min_y: number; max_y: number; grid_cells_x: number; grid_cells_y: number; } export interface Obstacle { x: number; y: number; type: 'mountain' | 'forest' | 'valley'; } export interface Player { id: string; name: string; color: string; x: number; y: number; strength: number; score: number; health?: number; max_health?: number; piece_type?: 'knight' | 'warrior'; party_id?: string | null; is_party_leader: boolean; visited_locations?: { x: number; y: number }[]; created_at?: string; } export interface Party { id: string; name: string; leader_id: string; leader_name: string; member_ids: string[]; total_strength: number; created_at?: string; } export interface TurnInfo { game_started?: boolean; current_player_id: string | null; current_player_name: string | null; round_number: number; turn_number: number; turn_order: string[]; } export interface GameConclusion { concluded: boolean; winning_party_id?: string | null; winning_party_name?: string | null; winning_leader_id?: string | null; winning_leader_name?: string | null; total_bots?: number; rankings?: Player[]; } export interface WizardNPC { id: string; name: string; x: number; y: number; strength: number; color: string; dialogue?: string; } export interface BoardState { config: GridConfig; player_count: number; players: Player[]; parties: Party[]; obstacles: Obstacle[]; wizard?: WizardNPC | null; turn: TurnInfo; game_started?: boolean; conclusion?: GameConclusion | null; } export interface MoveCheckResult { direction: string; dx: number; dy: number; target_x: number; target_y: number; available: boolean; reason?: string | null; } export interface AvailableMovesResponse { player_id: string; player_name: string; current_x: number; current_y: number; is_turn: boolean; is_party_leader: boolean; party_id?: string | null; party_member_count: number; current_turn_player_id?: string | null; moves: Record; } export interface BotMemoryResponse { player_id: string; player_name: string; current_x: number; current_y: number; visited_count: number; visited_history: { x: number; y: number }[]; has_visited_current: boolean; } export interface RadarTarget { id: string; name: string; color: string; x: number; y: number; strength: number; distance: number; party_id?: string | null; party_name?: string | null; is_ally: boolean; is_enemy: boolean; can_recruit: boolean; can_battle: boolean; } export interface WizardRadarTarget { id: string; name: string; x: number; y: number; distance: number; strength: number; can_challenge: boolean; } export interface BotRadarResponse { player_id: string; current_x: number; current_y: number; bot_goal: string; targets: RadarTarget[]; nearest_target?: RadarTarget | null; wizard?: WizardRadarTarget | null; recommended_direction?: string | null; recommended_action: string; } export interface BattleBout { bout_number: number; party1_roll: number; party1_strength: number; party1_score: number; party2_roll: number; party2_strength: number; party2_score: number; winner_name?: string | null; } export interface BattleResult { bouts: BattleBout[]; party1_name: string; party2_name: string; party1_bouts_won: number; party2_bouts_won: number; party1_total_score: number; party2_total_score: number; winner_party_id: string; winner_party_name: string; winner_leader_id: string; winner_leader_name: string; defeated_party_id: string; defeated_party_name: string; killed_leader_id: string; killed_leader_name: string; killed_leader_new_score: number; killed_leader_respawn_position: { x: number; y: number }; absorbed_members: string[]; new_party_size: number; new_party_strength: number; health_losses?: Record; } export interface WizardChallengeBout { bout_number: number; player_roll: number; player_strength: number; player_score: number; wizard_roll: number; wizard_strength: number; wizard_score: number; winner: string; } export interface WizardChallengeResult { challenger_id: string; challenger_name: string; wizard_name?: string; party_id?: string | null; bouts: WizardChallengeBout[]; player_bouts_won: number; wizard_bouts_won: number; player_won: boolean; score_change: number; health_change: number; new_score: number; new_health: number; wizard_respawn_position: { x: number; y: number }; } export interface PartyDefeatResult { party_id: string; killed_leader_id: string; killed_leader_name: string; killed_leader_new_score: number; killed_leader_respawn_position: { x: number; y: number }; new_leader_id?: string | null; new_leader_name?: string | null; remaining_members: string[]; party_dissolved: boolean; } export interface MoveResponse { success: boolean; player: Player; direction: string; party_moved: boolean; affected_players: Player[]; previous_position: { x: number; y: number }; new_position: { x: number; y: number }; party_formed_triggered: boolean; formed_party?: Party | null; battle_triggered: boolean; battle_result?: BattleResult | null; game_concluded?: GameConclusion | null; turn: TurnInfo; } export interface AiStepResponse { action_taken: string; player_id: string; player_name: string; bot_goal: string; direction?: string | null; move_result?: MoveResponse | null; formed_party?: Party | null; battle_result?: BattleResult | null; wizard_challenge_result?: WizardChallengeResult | null; game_concluded?: GameConclusion | null; turn: TurnInfo; }