145 lines
4.0 KiB
TypeScript
145 lines
4.0 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';
|
|
import type {
|
|
CampaignState,
|
|
ChapterState,
|
|
StoryEngineMemoryState,
|
|
} from './storyEngine';
|
|
|
|
export interface GameRuntimeStats {
|
|
playTimeMs: number;
|
|
lastPlayTickAt: string | null;
|
|
hostileNpcsDefeated: number;
|
|
questsAccepted: number;
|
|
itemsUsed: number;
|
|
scenesTraveled: number;
|
|
}
|
|
|
|
export type PlayerProgressionGrantSource = 'quest' | 'hostile_npc';
|
|
export type GameRuntimeMode = 'play' | 'preview' | 'test';
|
|
|
|
export interface PlayerProgressionState {
|
|
level: number;
|
|
currentLevelXp: number;
|
|
totalXp: number;
|
|
xpToNextLevel: number;
|
|
pendingLevelUps?: number;
|
|
lastGrantedSource?: PlayerProgressionGrantSource | null;
|
|
}
|
|
|
|
export type RuntimeNpcTradeMode = 'buy' | 'sell';
|
|
|
|
export interface RuntimeNpcTradeItemView {
|
|
itemId: string;
|
|
item: InventoryItem;
|
|
mode: RuntimeNpcTradeMode;
|
|
unitPrice: number;
|
|
maxQuantity: number;
|
|
canSubmit: boolean;
|
|
reason?: string | null;
|
|
}
|
|
|
|
export interface RuntimeNpcGiftItemView {
|
|
itemId: string;
|
|
item: InventoryItem;
|
|
affinityGain: number;
|
|
canSubmit: boolean;
|
|
reason?: string | null;
|
|
}
|
|
|
|
export interface RuntimeNpcInteractionView {
|
|
npcId: string;
|
|
npcName: string;
|
|
playerCurrency: number;
|
|
currencyName: string;
|
|
trade: {
|
|
buyItems: RuntimeNpcTradeItemView[];
|
|
sellItems: RuntimeNpcTradeItemView[];
|
|
};
|
|
gift: {
|
|
items: RuntimeNpcGiftItemView[];
|
|
};
|
|
}
|
|
|
|
export interface GameState {
|
|
worldType: WorldType | null;
|
|
customWorldProfile: CustomWorldProfile | null;
|
|
playerCharacter: Character | null;
|
|
runtimeSessionId?: string | null;
|
|
storySessionId?: string | null;
|
|
runtimeActionVersion?: number;
|
|
runtimeMode?: GameRuntimeMode;
|
|
runtimePersistenceDisabled?: boolean;
|
|
runtimeStats: GameRuntimeStats;
|
|
playerProgression?: PlayerProgressionState | null;
|
|
currentScene: string;
|
|
storyHistory: StoryMoment[];
|
|
storyEngineMemory?: StoryEngineMemoryState;
|
|
chapterState?: ChapterState | null;
|
|
campaignState?: CampaignState | null;
|
|
activeScenarioPackId?: string | null;
|
|
activeCampaignPackId?: string | null;
|
|
characterChats: Record<string, CharacterChatRecord>;
|
|
ambientIdleMode?: 'observe_signs';
|
|
lastObserveSignsSceneId?: string | null;
|
|
lastObserveSignsReport?: string | null;
|
|
animationState: AnimationState;
|
|
currentEncounter: Encounter | null;
|
|
npcInteractionActive: boolean;
|
|
runtimeNpcInteraction?: RuntimeNpcInteractionView | null;
|
|
currentScenePreset: ScenePresetInfo | null;
|
|
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;
|
|
}
|