dogewhalewar / types.ts
offerpk3's picture
Upload 30 files
9caa3cb verified
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
}