62 lines
1.4 KiB
TypeScript
62 lines
1.4 KiB
TypeScript
/**
|
|
* Core interfaces for the interactive fiction world model
|
|
*/
|
|
export interface Room {
|
|
id: string;
|
|
name: string;
|
|
description: string;
|
|
exits: Exit[];
|
|
objects: string[];
|
|
characters: string[];
|
|
}
|
|
export interface Exit {
|
|
direction: string;
|
|
targetRoomId: string;
|
|
description?: string;
|
|
isLocked?: boolean;
|
|
keyId?: string;
|
|
}
|
|
export interface GameObject {
|
|
id: string;
|
|
name: string;
|
|
description: string;
|
|
traits: string[];
|
|
states: Record<string, boolean>;
|
|
containedObjects?: string[];
|
|
allowedActions: string[];
|
|
}
|
|
export interface Character {
|
|
id: string;
|
|
name: string;
|
|
description: string;
|
|
dialogue: Record<string, string>;
|
|
inventory: string[];
|
|
defaultResponse: string;
|
|
mood?: string;
|
|
}
|
|
export interface Action {
|
|
name: string;
|
|
patterns: string[];
|
|
requiresObject?: boolean;
|
|
requiresTarget?: boolean;
|
|
handler: string;
|
|
}
|
|
export interface GameState {
|
|
currentRoomId: string;
|
|
inventory: string[];
|
|
visitedRooms: string[];
|
|
flags: Record<string, boolean>;
|
|
counters: Record<string, number>;
|
|
}
|
|
export interface WorldModel {
|
|
title: string;
|
|
author: string;
|
|
version: string;
|
|
introduction: string;
|
|
rooms: Record<string, Room>;
|
|
objects: Record<string, GameObject>;
|
|
characters: Record<string, Character>;
|
|
actions: Record<string, Action>;
|
|
initialState: GameState;
|
|
}
|