37 lines
878 B
TypeScript
37 lines
878 B
TypeScript
import type {
|
|
GameState,
|
|
SaveMigrationManifest,
|
|
} from '../../types';
|
|
import { createEmptyStoryEngineMemoryState } from './visibilityEngine';
|
|
|
|
export function buildSaveMigrationManifest(params: {
|
|
version: string;
|
|
}) {
|
|
return {
|
|
version: params.version,
|
|
requiredTransforms: [
|
|
'ensure_story_engine_memory',
|
|
'ensure_campaign_state',
|
|
'ensure_player_style_profile',
|
|
],
|
|
backwardCompatible: true,
|
|
} satisfies SaveMigrationManifest;
|
|
}
|
|
|
|
export function applyStoryEngineMigration(params: {
|
|
state: GameState;
|
|
manifest: SaveMigrationManifest;
|
|
}) {
|
|
const storyEngineMemory =
|
|
params.state.storyEngineMemory ?? createEmptyStoryEngineMemoryState();
|
|
|
|
return {
|
|
...params.state,
|
|
storyEngineMemory: {
|
|
...createEmptyStoryEngineMemoryState(),
|
|
...storyEngineMemory,
|
|
saveMigrationManifest: params.manifest,
|
|
},
|
|
};
|
|
}
|