Exact source used by this build. SHA-256: eaad6d1310c9177f55ff4ef8564309dc6e5241629f6fb8f19ba7f972eb8cd28b.

1 import type { Season, Weather, TilePosition } from '../../types';
2 import type { Quality } from '../items';
3 import type { ItemStack } from '../inventory';
4 export type FishBehavior = 'mixed' | 'smooth' | 'sinker' | 'floater' | 'dart';
5 export interface RodDefinition { id: string; itemId: string; price: number; requiredLevel: number; baitSlots: number; tackleSlots: number; training: boolean; icon: string; name: string; description: string }
6 export interface BaitDefinition { id: string; itemId: string; price: number; requiredLevel: number; biteTimeMultiplier: number; barSizeBonus: number; crabQuality: Quality; icon: string }
7 export interface TackleDefinition { id: string; itemId: string; barSizeBonus: number; biteTimeMultiplier: number; catchDrainMultiplier: number; bounceMultiplier: number; treasureChanceBonus: number; qualityBonus: number }
8 export interface FishDefinition { id: string; itemId: string; difficulty: number; behavior: FishBehavior; minSize: number; maxSize: number; basePrice: number; legendary: boolean; requiredLevel: number; requiredDepth?: number; seasons: Season[]; timeWindows: { startMinute: number; endMinute: number }[]; weather: Weather[]; icon: string; name: string; description: string }
9 export interface CrabDefinition { id: string; itemId: string; minSize: number; maxSize: number; weight: number; icon: string }
10 export interface FishingTable { areaId: string; waterTag: string; fishIds: string[]; crabCreatureIds: string[]; trashChance: number }
11 export interface FishingWater { areaId: string; waterTag: string; waterTileIds?: number[]; x: number; y: number; width: number; height: number; manifestKey: string }
12 export interface FishingMechanics { energyBase: number; energyPerLevel: number; chargeMaxMs: number; castBaseDistance: number; castLevelInterval: number; castLevelBonus: number; castLevelThresholds: number[]; castHorizontalBonus: number; shallowBiteDepthPenalty: number; shallowBiteDistancePenalty: number; shallowBiteDistanceThreshold: number; biteMinMs: number; biteMaxMs: number; biteLevelReductionMs: number; biteFirstMultiplier: number; biteFloorMs: number; biteWindowMs: number; barTrackHeight: number; barBaseHeight: number; barPerLevel: number; trainingBarLevel: number; trainingMaxDifficulty: number; physicsStepMs: number; gravity: number; liftAcceleration: number; bounce: number; catchInitial: number; catchFillPerFrame: number; catchDrainPerFrame: number; treasureChance: number; treasureFillPerFrame: number; treasureDrainPerFrame: number; treasureDelayMs: number; depthMax: number; xpQualityFactor: number; xpDifficultyDivisor: number; xpTreasureMultiplier: number; xpPerfectMultiplier: number; xpLegendaryMultiplier: number; trashXp: number }
13 export interface FishingContent { rods: RodDefinition[]; baits: BaitDefinition[]; tackles: TackleDefinition[]; fish: FishDefinition[]; crabCreatures: CrabDefinition[]; tables: FishingTable[]; waters: FishingWater[]; waterTileIds: number[]; shopIds: string[]; trash: { itemId: string; weight: number }[]; treasure: { itemId: string; weight: number; minQuantity: number; maxQuantity: number }[]; crabPot: { itemId: string; recipeItemId: string; requiredLevel: number; price: number; ingredients: { itemId: string; quantity: number }[]; trapperIngredients: { itemId: string; quantity: number }[]; trashChance: number; xp: number }; mechanics: FishingMechanics }
14 export interface FishingTreasure { y: number; progress: number; appearsAtMs: number; caught: boolean }
15 export interface FishingMinigame { fishY: number; fishVelocity: number; targetY: number; targetFrames: number; barY: number; barHeight: number; barVelocity: number; meter: number; perfect: boolean; holding: boolean; elapsedMs: number; outsideMs: number; remainderMs: number; treasure: FishingTreasure | null; rngState: number }
16 export interface FishingSession { phase: 'charging' | 'waiting' | 'bite' | 'minigame'; areaId: string; origin: TilePosition; tile: TilePosition | null; waterTag: string | null; chargeMs: number; waitMs: number; biteMs: number; updatedAtMs: number; depth: number; castDistance: number; fishId: string | null; trashItemId: string | null; size: number; baseQuality: Quality; baitId: string | null; tackleId: string | null; game: FishingMinigame | null; rngState: number }
17 export interface FishingCatch { itemId: string; quality: Quality; size: number; perfect: boolean; treasure: boolean; legendary: boolean; xp: number; pending: ItemStack[] }
18 export interface FishingPlayer { rodId: string | null; baitId: string | null; tackleId: string | null; session: FishingSession | null; result: FishingCatch | null }
19 export interface CrabPot { id: string; itemId?: string; ownerId: string; areaId: string; x: number; y: number; waterTag: string; baitId: string | null; catch: ItemStack | null; size: number }
20 export interface FishingWorld { elapsedModelVersion?: 1; timelineMs: number; collection: Record<string, { count: number; maxSize: number }>; legendaryCaught: string[]; pots: CrabPot[]; nextPotId: number }
21