import type { ActiveEffect } from '../../Effects/types'; import type { GameState } from '../../Game/types'; import type { Item } from '../../Items/types'; import type { ShopInventory } from '../../Items/shop.types'; import type { NPC, DialogueTree } from '../../NPCs/types'; import type { EnemySlug } from '../../Enemy/enemy.library'; import type { Encounter, NodeId } from '../types'; import type { PhilosophicalAlignment } from '../../Philosophy/types'; export type MapEventKind = 'encounter' | 'interaction' | 'gathering' | 'rest' | 'village' | 'cutscene' | 'hazard' | 'loot-cache' | 'quest' | 'narration'; export interface EncounterPayload { kind: 'encounter'; enemySlug?: EnemySlug; isBoss?: boolean; level?: number; description?: string; } export interface InteractionPayload { kind: 'interaction'; npcName: string; description?: string; } export interface GatheringPayload { kind: 'gathering'; items: readonly Item[]; description?: string; } export interface RestPayload { kind: 'rest'; healFraction?: number; description?: string; } export interface VillagePayload { kind: 'village'; villageName: string; merchants?: readonly NPC[]; shop?: ShopInventory; description?: string; } export interface CutscenePayload { kind: 'cutscene'; lines: readonly string[]; description?: string; } export interface HazardPayload { kind: 'hazard'; effectIds?: readonly string[]; damage?: number; description?: string; } export interface LootCachePayload { kind: 'loot-cache'; items?: readonly Item[]; currency?: number; description?: string; } export interface QuestEventPayload { kind: 'quest'; boardId: string; description?: string; } export interface NarrationPayload { kind: 'narration'; dialogue: DialogueTree; description?: string; } export type MapEventPayload = EncounterPayload | InteractionPayload | GatheringPayload | RestPayload | VillagePayload | CutscenePayload | HazardPayload | LootCachePayload | QuestEventPayload | NarrationPayload; export interface MapEventPoolEntry { kind: MapEventKind; weight: number; payload: MapEventPayload; alignmentDelta?: Partial; } export interface MapEventPool { id: string; entries: readonly MapEventPoolEntry[]; } export type ResolvedEvent = { kind: 'encounter'; encounter: Encounter; isBoss: boolean; } | { kind: 'interaction'; npcName: string; dialogue?: DialogueTree; } | { kind: 'gathering'; items: Item[]; } | { kind: 'rest'; healed: number; healFraction: number; } | { kind: 'village'; villageName: string; merchants: NPC[]; shop?: ShopInventory; } | { kind: 'cutscene'; lines: readonly string[]; } | { kind: 'hazard'; effects: ActiveEffect[]; damage: number; } | { kind: 'loot-cache'; items: Item[]; currency: number; } | { kind: 'quest'; boardId: string; } | { kind: 'narration'; dialogue: DialogueTree; } | { kind: 'none'; }; export interface ResolveMapEventResult { state: GameState; event: ResolvedEvent; } export type { NodeId }; //# sourceMappingURL=types.d.ts.map