A TypeScript library for building dialog-based game systems with state management.
npm install @crianonim/dialogThis library provides a state machine for dialog trees with:
- Dialog navigation - Stack-based navigation with go forward/back
- Dynamic text - Text and conditions powered by Screept expressions
- State management - Reducer-based game state with variables and procedures
- Schema validation - Zod schemas for serialization/deserialization
import {
GameDefinition,
generateNewGameDefinition,
gameDefinitionReducer,
getDialogFromStack,
getVisibleOptions,
} from "@crianonim/dialog";
// Create a new game
const game = generateNewGameDefinition();
// Get current dialog
const dialog = getDialogFromStack(game.gameState.dialogStack, game.dialogs);
// Get visible options (respects conditions)
const options = getVisibleOptions(dialog.options, game.gameState.screeptEnv);
// Execute actions when player selects an option
const newGame = gameDefinitionReducer(game, {
type: "gamestate",
actions: options[0].actions,
});go_dialog- Navigate to a dialog by IDgo back- Return to previous dialogmsg- Output a messagescreept- Execute a Screept statementconditional- Branch based on a conditionblock- Group multiple actions
ISC