Spaces:
Configuration error
Configuration error
| export enum GameState { | |
| CharacterSelection = 'CharacterSelection', | |
| Playing = 'Playing', | |
| GameOver = 'GameOver', | |
| Paused = 'Paused', | |
| } | |
| export enum Rarity { | |
| Common = 'common', | |
| Rare = 'rare', | |
| Legendary = 'legendary', | |
| } | |
| export enum WeaponType { | |
| StandardBullet = 'standard_bullet', | |
| HeavyBullet = 'heavy_bullet', | |
| Rocket = 'rocket', // Manually aimed rocket | |
| Laser = 'laser', | |
| SwordThrow = 'sword_throw', | |
| AutoTargetMissile = 'auto_target_missile', // Fires towards nearest enemy, requires manual trigger for now | |
| AutoHomingRocket = 'auto_homing_rocket', // Passively fires homing rockets | |
| EnemyBullet = 'enemy_bullet', | |
| Bomb = 'bomb', | |
| SummonFishMinion = 'summon_fish_minion', | |
| FishMinionBullet = 'fish_minion_bullet', | |
| RedArrowDefense = 'red_arrow_defense', // Player's defensive weapon system | |
| RedArrowProjectile = 'red_arrow_projectile', // The projectile fired by RedArrowDefense | |
| FlameCone = 'flame_cone', // New cone-shaped fire weapon | |
| DogeLauncher = 'doge_launcher', // New weapon that fires Doge/Bone images | |
| } | |
| export interface NFTCoinEffect { | |
| coins?: number; // This will represent Sea Token collection multiplier | |
| xp?: number; | |
| damage?: number; | |
| speed?: number; | |
| allStats?: number; | |
| } | |
| export interface NFT { | |
| id: string; | |
| name: string; | |
| description: string; | |
| price: number; // Price in Sea Tokens | |
| rarity: Rarity; | |
| image: string; // Can be URL or Base64 string | |
| effect?: NFTCoinEffect; | |
| } | |
| export interface GameCharacter { | |
| id: string; | |
| name: string; | |
| image: string; // URL or Base64 | |
| type: 'player' | 'enemy'; | |
| defaultWeaponType?: WeaponType; // For player characters | |
| autoFireHealthThreshold?: number; // For player characters, percentage (0-100) | |
| baseHealth?: number; // Optional: base health for this character type | |
| baseSpeed?: number; // Optional: base speed for this character type, especially enemies | |
| canOneHitKill?: boolean; // Optional: for special player abilities | |
| // Future: baseDamage?: number, etc. | |
| } | |
| export interface PlayerData { | |
| id: string; // Add a unique ID for the player instance, useful for multiplayer later | |
| name: string; // Player's custom name | |
| characterId: string; // ID of the chosen GameCharacter (whale type) | |
| whaleColor: string; // Fallback or tint color | |
| level: number; | |
| xp: number; | |
| maxXP: number; | |
| health: number; | |
| maxHealth: number; | |
| seaTokens: number; // Renamed from dwhl | |
| equippedNftId: string | null; | |
| nftInventory: string[]; | |
| stakedTokens: number; // Tokens staked (Sea Tokens) | |
| stakingStartTime: number | null; | |
| // New NFT Staking Slot System | |
| stakedNftSlots: Array<string | null>; // Array of 5, stores NFT ID or null for each slot | |
| nftMiningPowers: Record<string, number>; // Key: NFT ID, Value: mining power level | |
| lastNftRewardClaimTime: number | null; // For NFT staking rewards (now primarily for slot-based system) | |
| totalStakingRewards: number; // Total rewards claimed (Sea Tokens, from both token and NFT staking) | |
| score: number; | |
| } | |
| export type ModalType = 'nftMarketplace' | 'wallet' | 'playerProfile' | 'nftStaking' | 'adminPanel' | 'whaleCombatGuide' | 'combatLoading' | 'spinToWin' | 'adminLogin' | 'dogeWhaleEscape' | null; | |
| export interface NotificationMessage { | |
| id: string; | |
| message: string; | |
| type: 'success' | 'error' | 'info' | 'warning' | 'special'; | |
| } | |
| export type MarketplaceTabType = 'market' | 'my-nfts' | 'breeding'; | |
| export interface BreedingParents { | |
| parent1: string | null; | |
| parent2: string | null; | |
| } | |
| export interface BreedingResult extends Omit<NFT, 'price' | 'id' | 'effect'> { | |
| id?: string; | |
| effect?: NFTCoinEffect; | |
| } | |
| export interface FloatingText { | |
| id: string; | |
| text: string; | |
| x: number; | |
| y: number; | |
| color: string; | |
| timestamp: number; | |
| } | |
| export interface NftBubbleItem { | |
| id: string; | |
| x: number; | |
| y: number; | |
| rarity: Rarity; | |
| } | |
| // This type seems unused, but keeping for context. Consider removing if truly not needed. | |
| export interface WalletTokenItem { | |
| id: string; | |
| x: number; | |
| y: number; | |
| value: number; | |
| } | |
| export interface SeaTokenItem { | |
| id: string; | |
| x: number; | |
| y: number; | |
| value: number; | |
| isAttracting?: boolean; // True if moving towards player due to auto-collect | |
| attractSpeedX?: number; | |
| attractSpeedY?: number; | |
| creationTime: number; // To potentially prioritize older tokens or for other effects | |
| } | |
| export interface SavedReply { | |
| id: string; | |
| topic: string; | |
| answer: string; | |
| } | |
| export interface AdminConfig { | |
| globalNftStakingRate: number; // This rate becomes less relevant for the 5-slot system, might be for other future staking features. | |
| globalTokenStakingRate: number; // This rate applies to Sea Tokens | |
| gameBackgroundImageUrl: string; // Can be URL or Base64 string | |
| defaultEnemyImageUrl?: string; // Can be URL or Base64 string for default enemy | |
| playerAutoFire: boolean; // Global toggle for player auto-fire | |
| enemiesAutoTarget: boolean; | |
| playerAutoTargets?: boolean; // Global toggle for player projectiles to auto-target nearest enemy | |
| enemyFireCooldownMs: number; // Cooldown for enemy firing in milliseconds | |
| decorativeFishGoldenImage?: string; // URL or Base64 for Golden Fish | |
| decorativeFishStarImage?: string; // URL or Base64 for Star Fish | |
| decorativeFishBluefinImage?: string; // URL or Base64 for Bluefin Fish | |
| bubbleSmallImage?: string; // URL or Base64 for Small Bubble | |
| bubbleMediumImage?: string; // URL or Base64 for Medium Bubble | |
| bubbleLargeImage?: string; // URL or Base64 for Large Bubble | |
| seaTokenImageUrl?: string; // Optional custom image for Sea Tokens | |
| savedReplies?: SavedReply[]; // For Admin Panel Knowledge Base | |
| // Sound effect URLs (can be file paths or base64 data URLs) | |
| soundFireUrl?: string; | |
| soundEnemyKillUrl?: string; | |
| soundTokenCollectUrl?: string; | |
| soundNftBubbleCollectUrl?: string; | |
| soundLevelUpUrl?: string; | |
| soundGameOverUrl?: string; | |
| soundGameWinUrl?: string; // Placeholder for future use | |
| soundSpinWinUrl?: string; | |
| soundSpinLoseUrl?: string; | |
| soundLotteryWinUrl?: string; | |
| soundLotteryLoseUrl?: string; | |
| soundDailyRewardClaimUrl?: string; | |
| // New Visual Effect Settings | |
| bloodParticleLifespanSeconds: number; | |
| rainEffectEnabled: boolean; | |
| rainDropSpeedMin: number; | |
| rainDropSpeedMax: number; | |
| rainDurationSeconds: number; | |
| rainIntervalSeconds: number; | |
| rainIntensity: number; // Number of raindrops | |
| // Red Arrow Defense System Config | |
| redArrowActive: boolean; // To globally enable/disable this system for players who have it | |
| redArrowCooldownMs: number; | |
| redArrowProjectileSpeed: number; | |
| redArrowDamage: number; | |
| redArrowImageUrl?: string; // URL or Base64 for the Red Arrow projectile image | |
| redArrowShotCount?: number; // Number of red arrows to fire at once | |
| // Fire image assets | |
| flameParticleImageUrl?: string; // For flame cone weapon effect particles | |
| enemyBurningEffectImageUrl?: string; // For overlay/animation on burning enemies | |
| fireballProjectileImageUrl?: string; // For a fireball projectile | |
| // Doge Whale Escape Game Asset URLs | |
| dogeEscapePlayerImageUrl?: string; | |
| dogeEscapeWallImageUrl?: string; | |
| dogeEscapeGoalImageUrl?: string; | |
| dogeEscapeMineImageUrl?: string; | |
| dogeEscapeBombImageUrl?: string; | |
| dogeEscapeJellyfishImageUrl?: string; | |
| dogeEscapeCrocodileImageUrl?: string; | |
| dogeEscapeAlgaeImageUrl?: string; | |
| dogeEscapeCurrentNImageUrl?: string; | |
| dogeEscapeCurrentSImageUrl?: string; | |
| dogeEscapeCurrentEImageUrl?: string; | |
| dogeEscapeCurrentWImageUrl?: string; | |
| dogeEscapeSnakeImageUrl?: string; | |
| dogeEscapeLifeUpImageUrl?: string; | |
| } | |
| export interface Projectile { | |
| id: string; | |
| x: number; | |
| y: number; | |
| type: WeaponType; | |
| width: number; | |
| height: number; | |
| dx?: number; | |
| dy?: number; | |
| targetEnemyId?: string | null; // For homing missiles against enemies | |
| targetProjectileId?: string | null; // For RedArrowProjectile targeting enemy projectiles | |
| rotation?: number; | |
| owner: 'player' | 'enemy'; | |
| ownerPlayerId?: string; // For player-owned things like minion bullets or RedArrow | |
| ownerEnemyId?: string; // For enemy-owned projectiles | |
| creationTime?: number; // For bomb fuse or other time-based effects | |
| gravityEffect?: boolean; // True if projectile is affected by gravity (e.g., bombs) | |
| damage?: number; // Optional specific damage for this projectile instance | |
| isHoming?: boolean; // General flag for homing behavior | |
| imageKey?: string; // Optional key to look up an image in loadedGameAssets | |
| } | |
| export interface FishMinion { | |
| id: string; | |
| x: number; | |
| y: number; | |
| health: number; | |
| maxHealth: number; | |
| targetEnemyId: string | null; | |
| lastFireTime: number; | |
| ownerPlayerId: string; // ID of the PlayerData instance that summoned this minion | |
| size: number; | |
| angleToPlayer: number; // Relative angle to player for positioning | |
| distanceFromPlayer: number; // Distance to maintain from player | |
| } | |
| export interface ExplosionEffect { | |
| id: string; | |
| x: number; | |
| y: number; | |
| currentRadius: number; | |
| maxRadius: number; | |
| creationTime: number; | |
| duration: number; | |
| color: string; | |
| // Optional: damage, if not handled separately. For chain combustion, direct damage is better. | |
| } | |
| export enum DecorativeFishType { | |
| Golden = 'golden', | |
| Star = 'star', | |
| Bluefin = 'bluefin', | |
| } | |
| export interface DecorativeFish { | |
| id: string; | |
| x: number; | |
| y: number; | |
| size: number; | |
| speedX: number; | |
| speedY: number; | |
| type: DecorativeFishType; | |
| opacity: number; | |
| rotation: number; // For star fish | |
| lastDirectionChangeTime: number; | |
| } | |
| export enum BubbleSize { | |
| Small = 'small', | |
| Medium = 'medium', | |
| Large = 'large', | |
| } | |
| export interface BackgroundBubble { | |
| id: string; | |
| x: number; | |
| y: number; | |
| sizeCategory: BubbleSize; | |
| actualRadius: number; | |
| speedY: number; | |
| speedX: number; | |
| opacity: number; | |
| } | |
| // Enemy specific state for effects like burning | |
| export interface EnemyEffectState { | |
| isBurning?: boolean; | |
| burnDamagePerTick?: number; | |
| burnTicksRemaining?: number; | |
| burnTickCooldownRemaining?: number; // Time until the next burn tick damage | |
| accumulatedFireExposureMs?: number; // For FlameCone explosive core | |
| // Add other effects like frozen, poisoned etc. here | |
| } | |
| // For Google Sign-In | |
| declare global { | |
| interface Window { | |
| google: any; // Basic type for google global object | |
| } | |
| } | |
| // --- Doge Whale Escape Game Types --- | |
| export enum MazeCellType { | |
| Path = 'P', | |
| Wall = 'W', | |
| Start = 'S', | |
| Goal = 'G', | |
| Mine = 'M', // Classic Mine | |
| Bomb = 'B', // New Bomb hazard | |
| Jellyfish = 'J', // New Jellyfish hazard | |
| Crocodile = 'C', // New Crocodile hazard | |
| ToxicAlgae = 'A', // New Toxic Algae hazard | |
| CurrentN = 'CN', // Current pushing North | |
| CurrentS = 'CS', // Current pushing South | |
| CurrentE = 'CE', // Current pushing East | |
| CurrentW = 'CW', // Current pushing West | |
| Snake = 'K', // New Snake hazard | |
| LifeUp = 'L', // New LifeUp reward | |
| } | |
| export interface DogeWhaleEscapeLevel { | |
| id: number; | |
| name: string; | |
| layout: MazeCellType[][]; | |
| startPos: { row: number; col: number }; | |
| message?: string; // Optional custom message for the level | |
| requireAllSnakesNeutralized?: boolean; // New property for win condition | |
| } |