83 lines
2.4 KiB
TypeScript
83 lines
2.4 KiB
TypeScript
import type {TimedBuildBuff} from './build';
|
|
import type {Character} from './characters';
|
|
import {
|
|
AnimationState,
|
|
type CombatActionMode,
|
|
type NpcBattleMode,
|
|
type NpcBattleOutcome,
|
|
WorldType,
|
|
} from './core';
|
|
import type {CustomWorldProfile} from './customWorld';
|
|
import type {EquipmentLoadout, InventoryItem} from './items';
|
|
import type {
|
|
CombatVisualEffect,
|
|
CompanionState,
|
|
Encounter,
|
|
NpcPersistentState,
|
|
SceneEncounterResult,
|
|
SceneHostileNpc,
|
|
ScenePresetInfo,
|
|
} from './scene';
|
|
import type {CharacterChatRecord, QuestLogEntry, StoryMoment} from './story';
|
|
|
|
export interface GameRuntimeStats {
|
|
playTimeMs: number;
|
|
lastPlayTickAt: string | null;
|
|
hostileNpcsDefeated: number;
|
|
questsAccepted: number;
|
|
itemsUsed: number;
|
|
scenesTraveled: number;
|
|
}
|
|
|
|
export interface GameState {
|
|
worldType: WorldType | null;
|
|
customWorldProfile: CustomWorldProfile | null;
|
|
playerCharacter: Character | null;
|
|
runtimeStats: GameRuntimeStats;
|
|
currentScene: string;
|
|
storyHistory: StoryMoment[];
|
|
characterChats: Record<string, CharacterChatRecord>;
|
|
ambientIdleMode?: 'observe_signs';
|
|
lastObserveSignsSceneId?: string | null;
|
|
lastObserveSignsReport?: string | null;
|
|
animationState: AnimationState;
|
|
currentEncounter: Encounter | null;
|
|
npcInteractionActive: boolean;
|
|
currentScenePreset: ScenePresetInfo | null;
|
|
sceneMonsters: SceneHostileNpc[];
|
|
sceneHostileNpcs?: SceneHostileNpc[];
|
|
playerX: number;
|
|
playerOffsetY: number;
|
|
playerFacing: 'left' | 'right';
|
|
playerActionMode: CombatActionMode;
|
|
scrollWorld: boolean;
|
|
inBattle: boolean;
|
|
playerHp: number;
|
|
playerMaxHp: number;
|
|
playerMana: number;
|
|
playerMaxMana: number;
|
|
playerSkillCooldowns: Record<string, number>;
|
|
activeBuildBuffs?: TimedBuildBuff[];
|
|
activeCombatEffects: CombatVisualEffect[];
|
|
playerCurrency: number;
|
|
playerInventory: InventoryItem[];
|
|
playerEquipment: EquipmentLoadout;
|
|
npcStates: Record<string, NpcPersistentState>;
|
|
quests: QuestLogEntry[];
|
|
roster: CompanionState[];
|
|
companions: CompanionState[];
|
|
currentBattleNpcId: string | null;
|
|
currentNpcBattleMode: NpcBattleMode | null;
|
|
currentNpcBattleOutcome: NpcBattleOutcome | null;
|
|
sparReturnEncounter: Encounter | null;
|
|
sparPlayerHpBefore: number | null;
|
|
sparPlayerMaxHpBefore: number | null;
|
|
sparStoryHistoryBefore: StoryMoment[] | null;
|
|
}
|
|
|
|
export interface AIResponse {
|
|
storyText: string;
|
|
options: StoryMoment['options'];
|
|
encounter?: SceneEncounterResult;
|
|
}
|