@bitmagic/world-forger 0.1.24-dev.1 → 0.1.24-dev.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/dist/artifact-types.d.ts +6 -0
  2. package/dist/artifact-types.d.ts.map +1 -1
  3. package/dist/generated/game-data-schema.d.ts +11 -1
  4. package/dist/generated/game-data-schema.d.ts.map +1 -1
  5. package/dist/generated/game-data-schema.js +15 -1
  6. package/dist/generated/game-data-schema.js.map +1 -1
  7. package/dist/index.d.ts +1 -0
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +1 -0
  10. package/dist/index.js.map +1 -1
  11. package/dist/physics-mode.d.ts +72 -0
  12. package/dist/physics-mode.d.ts.map +1 -0
  13. package/dist/physics-mode.js +80 -0
  14. package/dist/physics-mode.js.map +1 -0
  15. package/dist/pipeline/index.d.ts +4 -0
  16. package/dist/pipeline/index.d.ts.map +1 -1
  17. package/dist/pipeline/index.js +4 -0
  18. package/dist/pipeline/index.js.map +1 -1
  19. package/dist/pipeline/job-types.d.ts +31 -2
  20. package/dist/pipeline/job-types.d.ts.map +1 -1
  21. package/dist/pipeline/persist-sideon.d.ts +83 -0
  22. package/dist/pipeline/persist-sideon.d.ts.map +1 -0
  23. package/dist/pipeline/persist-sideon.js +196 -0
  24. package/dist/pipeline/persist-sideon.js.map +1 -0
  25. package/dist/pipeline/place-and-persist-level.d.ts +14 -1
  26. package/dist/pipeline/place-and-persist-level.d.ts.map +1 -1
  27. package/dist/pipeline/place-and-persist-level.js +59 -5
  28. package/dist/pipeline/place-and-persist-level.js.map +1 -1
  29. package/dist/pipeline/place-and-persist-sideon.d.ts +43 -0
  30. package/dist/pipeline/place-and-persist-sideon.d.ts.map +1 -0
  31. package/dist/pipeline/place-and-persist-sideon.js +352 -0
  32. package/dist/pipeline/place-and-persist-sideon.js.map +1 -0
  33. package/dist/pipeline/progress-types.d.ts +15 -0
  34. package/dist/pipeline/progress-types.d.ts.map +1 -1
  35. package/dist/pipeline/progress-types.js +6 -0
  36. package/dist/pipeline/progress-types.js.map +1 -1
  37. package/dist/pipeline/sideon-layout-map.d.ts +27 -0
  38. package/dist/pipeline/sideon-layout-map.d.ts.map +1 -0
  39. package/dist/pipeline/sideon-layout-map.js +96 -0
  40. package/dist/pipeline/sideon-layout-map.js.map +1 -0
  41. package/dist/pipeline/sideon-types.d.ts +146 -0
  42. package/dist/pipeline/sideon-types.d.ts.map +1 -0
  43. package/dist/pipeline/sideon-types.js +7 -0
  44. package/dist/pipeline/sideon-types.js.map +1 -0
  45. package/dist/pipeline/voxelize-level.d.ts.map +1 -1
  46. package/dist/pipeline/voxelize-level.js +9 -0
  47. package/dist/pipeline/voxelize-level.js.map +1 -1
  48. package/package.json +1 -1
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Pure builder for the SIDE-ON persist step's world.json modifications.
3
+ *
4
+ * A side-on level has no vwld asset, so nothing here WRITES `voxelUrl`,
5
+ * `levels[]` or `startLevelId` — but a pre-existing value in any of them must
6
+ * be CLEARED, for two DIFFERENT reasons:
7
+ * - `voxelUrl` is what the terrain loader itself reads (`WorldGenerator`
8
+ * resolves it before the procedural path), so a stale one loads the old
9
+ * level over the strip and the flat delegation never runs — a billed
10
+ * side-on forge buried under the world it replaced;
11
+ * - a surviving `levels[]`/`startLevelId` does NOT re-point the terrain, but
12
+ * `GameEngine` merges the start level's `overrides` over the world profile
13
+ * (`mergeEffectiveProfile`), so the discarded level's fog/lighting/water
14
+ * still dress the strip — and `LevelManager` throws on any level switch,
15
+ * since every entry names a vwld asset this world no longer loads.
16
+ * A side-on level cannot simply BE a registry entry either: the registry keys
17
+ * on a vwld asset id, and this level has none.
18
+ *
19
+ * DISCARDING A REGISTRY IS LOSSY, and this file follows the one existing
20
+ * precedent for it — `bitmagic levels remove` (cli/src/levels/registry.ts) —
21
+ * whose rule is that a level's content leaves WITH it: its `levelId`-tagged
22
+ * instances, doors and key pickups all go. That is not merely tidiness here.
23
+ * When ONE level of several is removed the orphans go invisible; when the
24
+ * registry EMPTIES, level filtering switches off entirely
25
+ * (game/src/engine/levels/levelResolve.ts returns null for an empty registry,
26
+ * documented as "no level filtering, exactly the pre-levels behavior"), so
27
+ * every discarded level's objects would load AT ONCE on top of the flat strip.
28
+ * The `.vwld` ASSETS survive in `assets[]`, but they carry terrain only — each
29
+ * entry's `spawnPoints` and atmosphere `overrides` live nowhere else, so the
30
+ * replaced registry is stashed on the `worldForgerSideon` carrier — merged
31
+ * field by field across re-forges, so a later forge cannot blank it.
32
+ * The level lands as:
33
+ * - the baked archetype asset upserts (never reused stubs),
34
+ * - a full `environmentObjects` replace of the PREVIOUS side-on set only
35
+ * (instances tagged `sideonForged: true`; user content is kept),
36
+ * - `terrain.shape = 'flat'` + the strip's ground sizes (the baseline voxel
37
+ * WorldGenerator's flat plane is the ground — every template has it),
38
+ * - spawn + spawnPoints (+ rotation) — baseline `prepareStartingPlate()`
39
+ * preserves the configured Y verbatim, so elevated rooftop spawns hold,
40
+ * - the `worldForgerSideon` carrier (plan + as-built layout + the coding-pass
41
+ * feature handoff),
42
+ * - the same orphaned-placeholder purge the 3D persist runs.
43
+ *
44
+ * COMPATIBILITY: uses only existing WorldJsonModification kinds — an old pinned
45
+ * CLI's applyModificationsToWorld throws on an unknown kind AFTER the paid
46
+ * design/expand, so introducing one here is forbidden.
47
+ */
48
+ import type { WorldJsonModification, WorldJsonShape } from './world-json-types.js';
49
+ import type { SideonPersistCarrier } from './sideon-types.js';
50
+ /** The instance tag that marks side-on forged content (the re-forge replacement key). */
51
+ export declare const SIDEON_FORGED_TAG = "sideonForged";
52
+ export interface PersistSideonInput {
53
+ existingWorldJson: WorldJsonShape;
54
+ /** Baked archetype asset records; reused stubs carry `reused: true`. */
55
+ archetypeAssets: Array<Record<string, unknown>>;
56
+ /** Placed instance records, already reconciled AND tagged `sideonForged: true`. */
57
+ instances: Array<Record<string, unknown>>;
58
+ /** Instance ids removed outright (starter scatter) — must also be dropped from
59
+ * the kept set here, or the final setRoot resurrects them (same trap the 3D
60
+ * builder documents on `removedInstanceIds`). */
61
+ removedInstanceIds?: ReadonlySet<string>;
62
+ spawn: {
63
+ x: number;
64
+ y: number;
65
+ z: number;
66
+ };
67
+ spawnPoints: Array<Record<string, unknown>>;
68
+ playerSpawnRotationY: number | null;
69
+ groundWorldSizeX: number;
70
+ groundWorldSizeZ: number;
71
+ /** Plan-chosen ground block name, or null to keep whatever the game has. */
72
+ groundBlockType: string | null;
73
+ carrier: SideonPersistCarrier;
74
+ /** Asset ids with an HQ job in flight — never purged. */
75
+ activeHqAssetIds: Set<string>;
76
+ }
77
+ export interface PersistSideonOutput {
78
+ modifications: WorldJsonModification[];
79
+ purgedAssetIds: string[];
80
+ notes: string[];
81
+ }
82
+ export declare function buildSideonPersistModifications(input: PersistSideonInput): PersistSideonOutput;
83
+ //# sourceMappingURL=persist-sideon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persist-sideon.d.ts","sourceRoot":"","sources":["../../src/pipeline/persist-sideon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8CG;AACH,OAAO,KAAK,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAG9D,yFAAyF;AACzF,eAAO,MAAM,iBAAiB,iBAAiB,CAAC;AAEhD,MAAM,WAAW,kBAAkB;IACjC,iBAAiB,EAAE,cAAc,CAAC;IAClC,wEAAwE;IACxE,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAChD,mFAAmF;IACnF,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC1C;;sDAEkD;IAClD,kBAAkB,CAAC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACzC,KAAK,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,WAAW,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAC5C,oBAAoB,EAAE,MAAM,GAAG,IAAI,CAAC;IACpC,gBAAgB,EAAE,MAAM,CAAC;IACzB,gBAAgB,EAAE,MAAM,CAAC;IACzB,4EAA4E;IAC5E,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,OAAO,EAAE,oBAAoB,CAAC;IAC9B,yDAAyD;IACzD,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;CAC/B;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,qBAAqB,EAAE,CAAC;IACvC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,kBAAkB,GAAG,mBAAmB,CAyN9F"}
@@ -0,0 +1,196 @@
1
+ import { getLevels } from './level-registry.js';
2
+ /** The instance tag that marks side-on forged content (the re-forge replacement key). */
3
+ export const SIDEON_FORGED_TAG = 'sideonForged';
4
+ export function buildSideonPersistModifications(input) {
5
+ const notes = [];
6
+ const world = input.existingWorldJson;
7
+ const profile = world.worldProfileData ?? {};
8
+ // The levels this forge discards (see the file header). Resolved FIRST,
9
+ // because their content has to be dropped from the instance set below.
10
+ const staleLevels = getLevels(world);
11
+ const clearedLevelIds = new Set(staleLevels.map((l) => String(l.id)));
12
+ // ── Instances: replace ONLY the previous side-on set; keep user content. ──
13
+ const removedIds = input.removedInstanceIds ?? new Set();
14
+ const base = world.environmentObjects ?? [];
15
+ const survivingBase = removedIds.size === 0
16
+ ? base
17
+ : base.filter((o) => !removedIds.has(String(o.id ?? '')));
18
+ const newIds = new Set(input.instances.map((o) => String(o.id ?? '')));
19
+ // Three exclusions, and the third is the discarded levels' own objects.
20
+ // Filtering them HERE rather than with a `removeRoot` is required, not a
21
+ // shortcut: the `setRoot` below is the last word on `environmentObjects`, so
22
+ // a removeRoot alone would be undone by it (the same trap `removedInstanceIds`
23
+ // documents). UNTAGGED instances are global-by-intent and survive, exactly as
24
+ // `levels remove` leaves them.
25
+ //
26
+ // The test is TAGGEDNESS, not registry membership, whenever a registry is
27
+ // actually being cleared: an object tagged with a level id that is no longer
28
+ // in `levels[]` is the ROUTINE leftover of a level deletion (manage-levels and
29
+ // `bitmagic levels remove` both leave level-scoped doors/keys behind), and it
30
+ // is every bit as invisible today and every bit as visible once the registry
31
+ // empties and level filtering switches off. Membership alone let exactly that
32
+ // content survive onto the strip.
33
+ const isLevelScoped = (o) => (clearedLevelIds.size > 0
34
+ ? o.levelId !== undefined
35
+ : clearedLevelIds.has(String(o.levelId ?? '')));
36
+ const droppedWithLevels = survivingBase.filter(isLevelScoped).length;
37
+ const kept = survivingBase.filter((o) => o[SIDEON_FORGED_TAG] !== true
38
+ && !newIds.has(String(o.id ?? ''))
39
+ && !isLevelScoped(o));
40
+ const finalInstances = [...kept, ...input.instances];
41
+ const modifications = [
42
+ ...input.archetypeAssets
43
+ .filter((a) => a.reused !== true)
44
+ .map((asset) => ({
45
+ type: 'upsertRoot',
46
+ path: ['assets'],
47
+ predicate: (a) => a.id === asset.id,
48
+ value: asset,
49
+ })),
50
+ { type: 'setRoot', path: ['environmentObjects'], value: finalInstances },
51
+ ];
52
+ // ── Terrain: the flat baseline plane is the ground the strip stands on. ──
53
+ // Merge over the existing terrain config so creator-set fields survive, but
54
+ // `shape` is the forge's to own; the plan's ground block wins only when set.
55
+ const existingTerrain = (world.worldProfileData?.terrain ?? {});
56
+ const terrain = {
57
+ ...existingTerrain,
58
+ shape: 'flat',
59
+ // Solid to the world floor. The side camera looks at the terrain's
60
+ // cross-section, and the default 3-block fill leaves open sky UNDER the
61
+ // ground — the level reads as a floating texture band. The engine clamps
62
+ // the fill to the world's own bounds, so "generously deep" is exact.
63
+ fillDepthBlocks: 64,
64
+ ...(input.groundBlockType !== null ? { groundBlockType: input.groundBlockType } : {}),
65
+ };
66
+ modifications.push({ type: 'set', path: ['terrain'], value: terrain }, { type: 'set', path: ['groundWorldSizeX'], value: input.groundWorldSizeX }, { type: 'set', path: ['groundWorldSizeZ'], value: input.groundWorldSizeZ }, { type: 'set', path: ['playerSpawnPosition'], value: input.spawn }, { type: 'set', path: ['spawnPoints'], value: input.spawnPoints });
67
+ if (input.playerSpawnRotationY !== null) {
68
+ modifications.push({ type: 'set', path: ['playerSpawnRotationY'], value: input.playerSpawnRotationY });
69
+ }
70
+ // ── Discard the previous 3D world (see the file header) ──────────────────
71
+ // Cleared with `set` (an existing modification kind — old pinned CLIs must
72
+ // keep applying this plan), and only when actually present, so the notes
73
+ // stay honest.
74
+ //
75
+ // `''` rather than `null` for the two string fields: the generated GameData
76
+ // schema types `voxelUrl` and `startLevelId` as `string`, and the CLI applies
77
+ // this plan through a strict validator that THROWS on a newly-introduced
78
+ // violation — which lands AFTER the design, expand and archetype bakes are
79
+ // billed, and reproduces on every resume. Empty string is falsy on every
80
+ // engine read path, so it clears exactly as well as null would.
81
+ if (profile.voxelUrl) {
82
+ modifications.push({ type: 'set', path: ['voxelUrl'], value: '' });
83
+ notes.push('Cleared the previous baked level\'s voxelUrl — it would have loaded over the side-on strip.');
84
+ }
85
+ if (staleLevels.length > 0) {
86
+ modifications.push({ type: 'set', path: ['levels'], value: [] });
87
+ notes.push(`Cleared the levels registry (${staleLevels.length} entr${staleLevels.length === 1 ? 'y' : 'ies'}) — a side-on level `
88
+ + 'uses no registry, and the start level\'s vwld would have loaded over the strip. The discarded registry is '
89
+ + 'kept verbatim under worldProfileData.worldForgerSideon.replacedLevels.');
90
+ }
91
+ if (profile.startLevelId) {
92
+ modifications.push({ type: 'set', path: ['startLevelId'], value: '' });
93
+ }
94
+ // Water is REPORTED, never cleared. The 3D persist mirrors `waterLevelY` onto
95
+ // the globals for a start level, so a discarded lake still renders as a
96
+ // full-width plane across the flat strip — but the schema types the field
97
+ // `number` (null would fail the CLI's post-payment gate exactly as a null
98
+ // voxelUrl does), and the modification vocabulary has no "delete a scalar
99
+ // key". Both of these are one toggle in the world settings, so the honest
100
+ // move is to say so rather than to write a sentinel.
101
+ if (typeof profile.waterLevelY === 'number') {
102
+ notes.push(`This game has a water plane at y=${profile.waterLevelY}, which renders across the whole strip — `
103
+ + 'clear it in the world settings if the side-on level should be dry.');
104
+ }
105
+ if (profile.openWater) {
106
+ // Not cosmetic: `WorldGenerator.generateWorld` checks `openWater` FIRST and
107
+ // RETURNS, so no terrain is generated at all and the flat-ground writes
108
+ // above never take effect. The pre-flight gates refuse this combination
109
+ // before anything is billed; reaching here means one was bypassed, so the
110
+ // note has to say the level is unplayable rather than merely wet.
111
+ notes.push('This game has `openWater` set, and an open-water world generates NO terrain at all — the flat ground '
112
+ + 'this level stands on will not exist and the player will fall. Remove `openWater` from world.json and '
113
+ + 're-forge.');
114
+ }
115
+ if (droppedWithLevels > 0) {
116
+ notes.push(`Removed ${droppedWithLevels} object${droppedWithLevels === 1 ? '' : 's'} belonging to the discarded `
117
+ + 'level(s) — with the registry empty they would all have loaded at once on top of the strip.');
118
+ }
119
+ // Level-scoped doors and key pickups go with their levels, exactly as
120
+ // `levels remove` takes them: orphaned entries never spawn again, and their
121
+ // `assetId`s would still count as references pinning placeholder assets
122
+ // against the purge below — permanent dead weight.
123
+ const keptDefinitions = { doors: [], keyItems: [] };
124
+ for (const key of ['doors', 'keyItems']) {
125
+ const existing = (profile[key] ?? []);
126
+ // Same taggedness rule as the instances above — orphan-tagged doors are the
127
+ // normal residue of a level deletion, and they would otherwise stand locked
128
+ // in the middle of a route the expander verified as clear.
129
+ const remaining = existing.filter((e) => !isLevelScoped(e));
130
+ keptDefinitions[key] = remaining;
131
+ if (remaining.length !== existing.length) {
132
+ const gone = existing.length - remaining.length;
133
+ modifications.push({ type: 'set', path: [key], value: remaining });
134
+ notes.push(`Removed ${gone} ${key} entr${gone === 1 ? 'y' : 'ies'} belonging to the discarded level(s).`);
135
+ }
136
+ }
137
+ // The discarded registry rides the carrier: clearing it drops each entry's
138
+ // `spawnPoints` and atmosphere `overrides`, and those live nowhere else.
139
+ //
140
+ // A RE-FORGE must not erase it. The second side-on forge of a game sees an
141
+ // already-empty registry and has nothing of its own to stash, but the write
142
+ // below replaces `worldForgerSideon` wholesale — so without carrying the
143
+ // previous stash forward, the ordinary "make it longer" loop would destroy
144
+ // the very thing this field exists to preserve.
145
+ // Merged FIELD BY FIELD, never rebuilt: a re-forge may find one field
146
+ // repopulated (an in-engine terrain save rewrites `voxelUrl`) while the
147
+ // registry is still empty, and rebuilding wholesale would then write
148
+ // `levels: []` over the only surviving copy of the original registry.
149
+ const carrierNow = profile.worldForgerSideon;
150
+ const previousStash = (typeof carrierNow === 'object' && carrierNow !== null && !Array.isArray(carrierNow)
151
+ ? carrierNow.replacedLevels
152
+ : undefined);
153
+ const previousLevels = Array.isArray(previousStash?.levels) ? previousStash.levels : [];
154
+ const stashLevels = staleLevels.length > 0 ? staleLevels : previousLevels;
155
+ const stashStart = profile.startLevelId ? String(profile.startLevelId) : previousStash?.startLevelId;
156
+ const stashVoxelUrl = profile.voxelUrl ? String(profile.voxelUrl) : previousStash?.voxelUrl;
157
+ const replacedLevels = stashLevels.length > 0 || stashStart || stashVoxelUrl
158
+ ? {
159
+ levels: stashLevels,
160
+ ...(stashStart ? { startLevelId: stashStart } : {}),
161
+ ...(stashVoxelUrl ? { voxelUrl: stashVoxelUrl } : {}),
162
+ }
163
+ : null;
164
+ modifications.push({
165
+ type: 'set',
166
+ path: ['worldForgerSideon'],
167
+ value: replacedLevels ? { ...input.carrier, replacedLevels } : input.carrier,
168
+ });
169
+ // ── Purge orphaned forge placeholders (the 3D persist's predicate). Door and
170
+ // key-pickup assetIds count as references exactly as they do there: the ones
171
+ // belonging to discarded levels were removed above, and whatever survives is
172
+ // still live content whose placeholder must not be purged from under it. ──
173
+ const referencedAssetIds = new Set([
174
+ ...finalInstances.map((o) => String(o.assetId)),
175
+ ...keptDefinitions.doors.map((d) => String(d.assetId ?? '')),
176
+ ...keptDefinitions.keyItems.map((k) => String(k.assetId ?? '')),
177
+ ]);
178
+ const upsertedIds = new Set(input.archetypeAssets.map((a) => String(a.id)));
179
+ const purgedAssetIds = (world.assets ?? [])
180
+ .filter((a) => a.placeholder === true &&
181
+ !upsertedIds.has(String(a.id)) &&
182
+ !referencedAssetIds.has(String(a.id)) &&
183
+ !input.activeHqAssetIds.has(String(a.id)))
184
+ .map((a) => String(a.id));
185
+ if (purgedAssetIds.length > 0) {
186
+ const purgedSet = new Set(purgedAssetIds);
187
+ modifications.push({
188
+ type: 'removeRoot',
189
+ path: ['assets'],
190
+ predicate: (a) => purgedSet.has(String(a.id)),
191
+ });
192
+ notes.push(`Purged ${purgedAssetIds.length} orphaned placeholder asset(s)`);
193
+ }
194
+ return { modifications, purgedAssetIds, notes };
195
+ }
196
+ //# sourceMappingURL=persist-sideon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"persist-sideon.js","sourceRoot":"","sources":["../../src/pipeline/persist-sideon.ts"],"names":[],"mappings":"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"}
@@ -20,7 +20,7 @@ import type { ForgedWorkStore } from './forged-work-store.js';
20
20
  import type { ForgeDeps } from './deps.js';
21
21
  import type { ForgeLevelSummary } from './job-types.js';
22
22
  import type { WorldJsonModification } from './world-json-types.js';
23
- import type { ForgedDungeonView } from '../artifact-types.js';
23
+ import type { ForgedDungeonView, ForgedPlacement } from '../artifact-types.js';
24
24
  import type { ForgedHeightGrid } from '../terrain-height-grid.js';
25
25
  /** What step 5 produces for the host to apply. */
26
26
  export interface PlaceAndPersistResult {
@@ -41,6 +41,19 @@ export interface PlaceAndPersistResult {
41
41
  */
42
42
  terrainHeightGrid?: ForgedHeightGrid;
43
43
  }
44
+ /** Place all instances via the engine's batch-place path, in chunks. Exported
45
+ * for the side-on step, which shares the placement wire but not the vwld persist. */
46
+ export declare function placeInstances(deps: ForgeDeps, placements: ForgedPlacement[],
47
+ /**
48
+ * How a batch that resolves nothing is treated.
49
+ *
50
+ * `'fatal'` (side-on) — the placed objects ARE the level, so an empty result
51
+ * means the world gains nothing and must not be reported as a success.
52
+ * `'note'` (3D) — the level is the already-uploaded `.vwld`; losing the props
53
+ * costs scenery, and throwing away a paid forge over it is the worse trade,
54
+ * so it degrades with a loud log line instead.
55
+ */
56
+ onEmptyBatch?: 'fatal' | 'note'): Promise<Array<Record<string, unknown>>>;
44
57
  /**
45
58
  * Reconcile placed instances against the assets actually being written, so a dangling `assetId`
46
59
  * can never make the strict validator discard the WHOLE level at session cleanup (which surfaces
@@ -1 +1 @@
1
- {"version":3,"file":"place-and-persist-level.d.ts","sourceRoot":"","sources":["../../src/pipeline/place-and-persist-level.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAgC,iBAAiB,EAAqB,MAAM,gBAAgB,CAAC;AACzG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAUnE,OAAO,KAAK,EAAE,iBAAiB,EAAmB,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAOlE,kDAAkD;AAClD,MAAM,WAAW,qBAAqB;IACpC,8EAA8E;IAC9E,OAAO,EAAE,iBAAiB,CAAC;IAC3B;;;OAGG;IACH,aAAa,EAAE,qBAAqB,EAAE,CAAC;IACvC;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;CACtC;AAsED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAC/C,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC7B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC;IAAE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAgBlF;AA+BD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,GAAG;IAC/D,SAAS,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1E,cAAc,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;CACjG,CAgBA;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,qBAAqB,CAAC,CA6OhC"}
1
+ {"version":3,"file":"place-and-persist-level.d.ts","sourceRoot":"","sources":["../../src/pipeline/place-and-persist-level.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAgC,iBAAiB,EAAqB,MAAM,gBAAgB,CAAC;AACzG,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAUnE,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AAC/E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAOlE,kDAAkD;AAClD,MAAM,WAAW,qBAAqB;IACpC,8EAA8E;IAC9E,OAAO,EAAE,iBAAiB,CAAC;IAC3B;;;OAGG;IACH,aAAa,EAAE,qBAAqB,EAAE,CAAC;IACvC;;;;;;;OAOG;IACH,iBAAiB,CAAC,EAAE,gBAAgB,CAAC;CACtC;AAsBD;sFACsF;AACtF,wBAAsB,cAAc,CAClC,IAAI,EAAE,SAAS,EACf,UAAU,EAAE,eAAe,EAAE;AAC7B;;;;;;;;GAQG;AACH,YAAY,GAAE,OAAO,GAAG,MAAe,GACtC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAsFzC;AAED;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,eAAe,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAC/C,gBAAgB,EAAE,GAAG,CAAC,MAAM,CAAC,EAC7B,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GACjC;IAAE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAgBlF;AA+BD;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,iBAAiB,GAAG;IAC/D,SAAS,EAAE;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC;IAC1E,cAAc,EAAE;QAAE,YAAY,EAAE,MAAM,CAAC;QAAC,oBAAoB,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAA;KAAE,CAAC;CACjG,CAgBA;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,qBAAqB,CAAC,CAsPhC"}
@@ -28,8 +28,19 @@ function describeForge(forge, skippedNames) {
28
28
  : '';
29
29
  return `Objects:\n${objectLines}${markerLines}`;
30
30
  }
31
- /** Place all instances via the engine's batch-place path, in chunks. */
32
- async function placeInstances(deps, placements) {
31
+ /** Place all instances via the engine's batch-place path, in chunks. Exported
32
+ * for the side-on step, which shares the placement wire but not the vwld persist. */
33
+ export async function placeInstances(deps, placements,
34
+ /**
35
+ * How a batch that resolves nothing is treated.
36
+ *
37
+ * `'fatal'` (side-on) — the placed objects ARE the level, so an empty result
38
+ * means the world gains nothing and must not be reported as a success.
39
+ * `'note'` (3D) — the level is the already-uploaded `.vwld`; losing the props
40
+ * costs scenery, and throwing away a paid forge over it is the worse trade,
41
+ * so it degrades with a loud log line instead.
42
+ */
43
+ onEmptyBatch = 'note') {
33
44
  const placedInstances = [];
34
45
  for (let i = 0; i < placements.length; i += PLACEMENT_BATCH_SIZE) {
35
46
  const batch = placements.slice(i, i + PLACEMENT_BATCH_SIZE);
@@ -49,7 +60,14 @@ async function placeInstances(deps, placements) {
49
60
  asset_name: p.archetype,
50
61
  position: p.position,
51
62
  rotation: { x: 0, y: p.rotationYDeg, z: 0 },
52
- scale: { x: p.scale, y: p.scale, z: p.scale },
63
+ // Per-axis stretch wins over the uniform scale where declared — the
64
+ // side-on expander stretches buildings vertically to hit their
65
+ // designed rooftop heights (and the audit verifies those heights), so
66
+ // dropping scaleXYZ here would place every such building unstretched
67
+ // while the recorded surfaces claim the stretched tops.
68
+ scale: p.scaleXYZ
69
+ ? { x: p.scaleXYZ.x, y: p.scaleXYZ.y, z: p.scaleXYZ.z }
70
+ : { x: p.scale, y: p.scale, z: p.scale },
53
71
  // The forge computed exact world-space ground heights on the NEW
54
72
  // terrain; a placement raycast would hit the OLD terrain (the new
55
73
  // level loads only after the session's reload).
@@ -60,15 +78,44 @@ async function placeInstances(deps, placements) {
60
78
  // mass beats the engine's bounding-box estimate.
61
79
  ...(p.dynamic ? { dynamic: true } : {}),
62
80
  ...(p.dynamic && p.mass !== undefined ? { mass: p.mass } : {}),
81
+ // Side-on pickups/waypoints: the engine auto-wires CollectibleComponent
82
+ // for `collectible` records, and `name` gives checkpoints/goal a stable
83
+ // identity game code can look up. Absent on every 3D placement, so the
84
+ // wire bytes for existing forges are unchanged.
85
+ ...(p.collectible ? { collectible: true } : {}),
86
+ ...(p.name !== undefined ? { name: p.name } : {}),
63
87
  })),
64
88
  }, 'BATCH_VOXEL_OBJECTS_PLACED', PLACEMENT_TIMEOUT_MS);
65
89
  if (!result || !Array.isArray(result.results)) {
66
90
  throw new Error(`Placing instances ${i + 1}-${i + batch.length} failed or timed out`);
67
91
  }
92
+ // A batch that RESOLVED NOTHING is a failure, not an empty success. The
93
+ // engine's batch handler logs "Asset not found … skipping" and continues, so
94
+ // an answered-but-empty result looks identical to a placed one here — and on
95
+ // the side-on lane the placed objects ARE the level, so the run goes on to
96
+ // write flat empty ground, record the job-complete marker, and report
97
+ // success on a forge the creator has already paid for. The known way in is a
98
+ // resumed run: the archetype step is skipped because its artifact exists,
99
+ // but the resume drives a FRESH browser whose asset library was never
100
+ // populated by that bake.
101
+ const resolved = result.results.length;
102
+ if (resolved === 0 && batch.length > 0 && onEmptyBatch === 'fatal') {
103
+ throw new Error(`Placing instances ${i + 1}-${i + batch.length} resolved NO objects — the browser has none of `
104
+ + 'this level\'s archetype assets, so nothing would be placed. This is what a resume against a '
105
+ + 'fresh browser looks like: the archetype bake was skipped as already-done, but its assets only '
106
+ + 'ever existed in the page that baked them. Re-run without resuming so the archetypes are baked '
107
+ + 'again; the design and geometry are already saved and are not re-billed.');
108
+ }
109
+ // The engine's batch handler skips PER OBJECT, so a batch that lost 199 of
110
+ // 200 answers with one result and looks like a success from here. The
111
+ // all-or-nothing case above is the rarer one; say the quiet part either way.
112
+ if (resolved < batch.length) {
113
+ deps.logger.warn({ from: i + 1, to: i + batch.length, placed: resolved, missing: batch.length - resolved }, 'Instance batch placed FEWER objects than requested — the browser could not resolve some archetype assets');
114
+ }
68
115
  const instances = result.instances;
69
116
  if (instances)
70
117
  placedInstances.push(...instances);
71
- deps.logger.info({ from: i + 1, to: i + batch.length, placed: result.results.length }, 'Instance batch placed');
118
+ deps.logger.info({ from: i + 1, to: i + batch.length, placed: resolved }, 'Instance batch placed');
72
119
  }
73
120
  return placedInstances;
74
121
  }
@@ -280,7 +327,14 @@ export async function placeAndPersistLevel(store, deps) {
280
327
  deps.logger.info({ jobId: store.jobId, objects: starterScatter.objectIds.length, assets: starterScatter.assetIds.length }, 'Stripping starter-template trees/rocks left behind by the discarded template level');
281
328
  }
282
329
  const removedObjectIds = new Set(starterScatter.objectIds);
283
- const removedAssetIds = new Set(starterScatter.assetIds);
330
+ // NEVER delete an asset this forge's own instances reference. A starter asset
331
+ // the designer chose to REUSE (`reuseAssetId`) is written back as a reuse stub
332
+ // — which the asset upsert deliberately skips — while its original scatter
333
+ // instances are being removed, so the starter-scatter plan, computed against
334
+ // the OLD world.json alone, still lists it as unreferenced and emits a
335
+ // removal. The result is a live instance pointing at a deleted asset:
336
+ // invisible props in the CLI lane, and a dropped object in the web lane.
337
+ const removedAssetIds = new Set(starterScatter.assetIds.filter((id) => !writableAssetIds.has(String(id))));
284
338
  const starterScatterRemovals = [
285
339
  ...(removedObjectIds.size > 0
286
340
  ? [{
@@ -1 +1 @@
1
- {"version":3,"file":"place-and-persist-level.js","sourceRoot":"","sources":["../../src/pipeline/place-and-persist-level.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"place-and-persist-level.js","sourceRoot":"","sources":["../../src/pipeline/place-and-persist-level.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * SIDE-ON step 4 — place the archetype instances in the browser and PLAN the
3
+ * world.json write for a side-on level (no vwld: flat baseline ground + placed
4
+ * objects ARE the level).
5
+ *
6
+ * Mirrors `place-and-persist-level.ts`'s structure and shares its wire pieces
7
+ * (`placeInstances`, `reconcileInstancesToAssets`, the starter-scatter plan)
8
+ * — the difference is the persist plan: `buildSideonPersistModifications`
9
+ * writes terrain/sizes/spawn/carrier instead of vwld/levels/mirrors.
10
+ */
11
+ import type { ForgedWorkStore } from './forged-work-store.js';
12
+ import type { ForgeDeps } from './deps.js';
13
+ import type { ForgeLevelSummary } from './job-types.js';
14
+ import type { WorldJsonModification } from './world-json-types.js';
15
+ import type { SpawnPointEntry } from './spawn-points.js';
16
+ /** What the side-on step 4 produces for the host to apply (no heightfield sidecar — the ground is flat). */
17
+ export interface PlaceAndPersistSideonResult {
18
+ summary: ForgeLevelSummary;
19
+ modifications: WorldJsonModification[];
20
+ }
21
+ /**
22
+ * Multiplayer spread for a side-on level: extra starts spaced ALONG X on the
23
+ * first surface, never the 3D lane's XZ ring — the gameplay plane is locked to
24
+ * Z=0, and a ring would seat half the players 2 m off it. Same entry shape as
25
+ * `buildSpawnPointEntries`; side-on plans carry no path/playerSpawns/npcSpawns
26
+ * features, so this small builder replaces it rather than parameterizing it.
27
+ */
28
+ export declare function buildSideonSpawnPoints(options: {
29
+ playerStart: {
30
+ x: number;
31
+ y: number;
32
+ z: number;
33
+ };
34
+ clearanceM: number;
35
+ playerStartYaw: number | null;
36
+ /** The first walkable surface's extent, to keep extras on standable ground. */
37
+ firstSurface: {
38
+ x0: number;
39
+ x1: number;
40
+ } | null;
41
+ }): SpawnPointEntry[];
42
+ export declare function placeAndPersistSideonLevel(store: ForgedWorkStore, deps: ForgeDeps): Promise<PlaceAndPersistSideonResult>;
43
+ //# sourceMappingURL=place-and-persist-sideon.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"place-and-persist-sideon.d.ts","sourceRoot":"","sources":["../../src/pipeline/place-and-persist-sideon.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,KAAK,EAAiB,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAMnE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAiBzD,4GAA4G;AAC5G,MAAM,WAAW,2BAA2B;IAC1C,OAAO,EAAE,iBAAiB,CAAC;IAC3B,aAAa,EAAE,qBAAqB,EAAE,CAAC;CACxC;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE;IAC9C,WAAW,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IACjD,UAAU,EAAE,MAAM,CAAC;IACnB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,+EAA+E;IAC/E,YAAY,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACjD,GAAG,eAAe,EAAE,CAiBpB;AAED,wBAAsB,0BAA0B,CAC9C,KAAK,EAAE,eAAe,EACtB,IAAI,EAAE,SAAS,GACd,OAAO,CAAC,2BAA2B,CAAC,CAkStC"}