Split custom world generation into staged lightweight batches
Some checks failed
CI / verify (push) Has been cancelled

This commit is contained in:
2026-04-05 22:20:30 +08:00
parent 89cecda7da
commit fcd8d727b0
57 changed files with 7646 additions and 1425 deletions

View File

@@ -3,6 +3,7 @@ import type {
RoleAttributeProfile,
WorldAttributeSchema,
} from './attributes';
import type { CharacterBackstoryRevealConfig } from './characters';
import {
type EquipmentSlotId,
type ItemRarity,
@@ -10,6 +11,23 @@ import {
} from './core';
import type {ItemStatProfile, ItemUseProfile} from './items';
export interface CustomWorldRoleSkill {
id: string;
name: string;
summary: string;
style: string;
}
export interface CustomWorldRoleInitialItem {
id: string;
name: string;
category: string;
quantity: number;
rarity: ItemRarity;
description: string;
tags: string[];
}
export interface CustomWorldRoleProfile {
id: string;
name: string;
@@ -23,6 +41,9 @@ export interface CustomWorldRoleProfile {
initialAffinity: number;
relationshipHooks: string[];
tags: string[];
backstoryReveal: CharacterBackstoryRevealConfig;
skills: CustomWorldRoleSkill[];
initialItems: CustomWorldRoleInitialItem[];
attributeProfile?: RoleAttributeProfile;
}
@@ -75,12 +96,35 @@ export interface CustomWorldItem {
attributeResonance?: ItemAttributeResonance | null;
}
export type CustomWorldSceneRelativePosition =
| 'forward'
| 'back'
| 'left'
| 'right'
| 'north'
| 'south'
| 'east'
| 'west'
| 'up'
| 'down'
| 'inside'
| 'outside'
| 'portal';
export interface CustomWorldSceneConnection {
targetLandmarkId: string;
relativePosition: CustomWorldSceneRelativePosition;
summary: string;
}
export interface CustomWorldLandmark {
id: string;
name: string;
description: string;
dangerLevel: string;
imageSrc?: string;
sceneNpcIds: string[];
connections: CustomWorldSceneConnection[];
}
export interface CustomWorldProfile {

View File

@@ -4,6 +4,7 @@ import type {
RoleRelationState,
} from './attributes';
import type {Character} from './characters';
import type {CustomWorldSceneRelativePosition} from './customWorld';
import {
AnimationState,
type CharacterGender,
@@ -188,4 +189,11 @@ export interface ScenePresetInfo {
monsterIds?: string[];
npcs?: SceneNpc[];
treasureHints?: string[];
connections?: SceneConnectionInfo[];
}
export interface SceneConnectionInfo {
sceneId: string;
relativePosition: CustomWorldSceneRelativePosition;
summary: string;
}