Files
i-want-to-heal-mmo/src/frontend/types.ts
T
2026-07-12 23:39:57 -04:00

80 lines
2.0 KiB
TypeScript

import type { BossGroupId } from "../game/bossCatalog";
import type { BossId, HealerClassId, InventoryItem } from "../game/types";
import type { GearProgress } from "../game/progression/gear";
import type { CollectionLog, MaterialStack } from "../game/progression/loot";
export type SaveSlotId = 1 | 2 | 3;
export type AppScreen = "login" | "saves" | "home" | "profile" | "gear" | "settings" | "mode" | "game";
export type GameModeId = "roguelike-pve" | "rogue-trials" | "dungeons" | "roguelike-pvp" | "stadium-pvp";
export interface CollectionDrop {
id: string;
name: string;
icon: string;
rarity: "Common" | "Uncommon" | "Rare" | "Epic" | "Legendary";
count: number;
chance: string;
itemLevel?: number;
kind: "group-drop" | "pet";
}
export interface GroupBossCollection {
bossId: BossId;
bossName: string;
kills: number;
pet: CollectionDrop;
}
export interface BossGroupCollection {
groupId: BossGroupId;
groupLetter: string;
groupName: string;
coreMechanic: string;
defeated: boolean;
drops: CollectionDrop[];
bosses: GroupBossCollection[];
}
export interface HunterStats {
totalBossKills: number;
flawlessClears: number;
alliesSaved: number;
healingDone: number;
bossKills: Record<string, number>;
highestRoguelikeRound: number;
highestRogueTrialsEndlessKills: number;
}
export interface HealerProgress {
level: number;
inventory: InventoryItem[];
}
export interface HunterSave {
schemaVersion: 5;
slotId: SaveSlotId;
hunterName: string;
activeClassId: HealerClassId;
healers: Record<HealerClassId, HealerProgress>;
location: string;
playSeconds: number;
updatedAt: string;
stats: HunterStats;
materials: MaterialStack[];
collectionLog: CollectionLog;
gearProgress: GearProgress;
}
export interface SaveSlotState {
id: SaveSlotId;
local: HunterSave | null;
online: HunterSave | null;
}
export interface GameSettings {
masterVolume: number;
reducedMotion: boolean;
damageNumbers: boolean;
largeText: boolean;
}