The bake pipeline now works end to end on Linux (see 968f523 for the mod.db -> LevelLoaderGen exporter, and #394 for placeholders baking into real ReferenceObjectData). But it only carries placement, and that is worth stating plainly because the editor looks like it supports much more.
What LevelLoaderGen actually reads — the complete set of per-object fields in ebx_json.py:
obj['guid'] obj['origin'] obj['parentData'] obj['originalRef']
obj['blueprintCtrRef'] obj['variation'] obj['transform'] obj['localTransform']
The string override appears nowhere in the generator.
Consequence: MapEditor does save per-instance EBX overrides (ProjectManager.lua, overrides = l_GameObjectSaveData.overrides), and they survive save/reload inside the editor — but they are silently dropped at bake time. Change a light's radius, a colour, a capture radius, then bake: the level gets the stock blueprint at the right position and rotation. Nothing errors, which is the worst part — the loss is invisible.
The same applies to the M1 per-instance blueprint clones. The clone is a DeepCloned DataContainer that exists only in the running game's ResourceManager; nothing serialises it to disk, so there is nothing for the generator to consume even if it wanted to.
Also silently skipped today, for the record:
origin == 3 (custom children) — # custom children not supported
- vanilla objects whose
parentData.typeName is PrefabBlueprint / SpatialPrefabBlueprint — # prefab system not yet implemented
Why this is tractable rather than a rewrite. Both halves already exist, they have just never been connected:
- Serialising a modified blueprint —
PartitionSerializer already turns a live DataContainer into JSON, which is how the inspector shows EBX today.
- Compiling arbitrary EBX into a bundle — that is exactly what Rime's
add_json_partition does, and what the generator already drives for the subworld partition it synthesises.
So the shape of the work is:
- MapEditor: export each per-instance clone as an EBX JSON partition alongside the save (one partition per modified blueprint, keyed by the object guid), rather than only recording the override deltas.
- LevelLoaderGen: emit those partitions into the custom bundle and point that object's ROD
Blueprint at the new partition/instance guid instead of the stock one.
Until then, the honest scope of the bake is: stock blueprints, placed and rotated correctly, with variations and vanilla deletions — no data edits.
Related: #394 (placeholders bake correctly — they need no overrides, which is why that path works today), #391 (level-bus wiring is a separate missing dimension: even a correctly baked capture point is not wired into the gamemode).
The bake pipeline now works end to end on Linux (see 968f523 for the
mod.db-> LevelLoaderGen exporter, and #394 for placeholders baking into realReferenceObjectData). But it only carries placement, and that is worth stating plainly because the editor looks like it supports much more.What LevelLoaderGen actually reads — the complete set of per-object fields in
ebx_json.py:The string
overrideappears nowhere in the generator.Consequence: MapEditor does save per-instance EBX overrides (
ProjectManager.lua,overrides = l_GameObjectSaveData.overrides), and they survive save/reload inside the editor — but they are silently dropped at bake time. Change a light's radius, a colour, a capture radius, then bake: the level gets the stock blueprint at the right position and rotation. Nothing errors, which is the worst part — the loss is invisible.The same applies to the M1 per-instance blueprint clones. The clone is a
DeepCloned DataContainer that exists only in the running game'sResourceManager; nothing serialises it to disk, so there is nothing for the generator to consume even if it wanted to.Also silently skipped today, for the record:
origin == 3(custom children) —# custom children not supportedparentData.typeNameisPrefabBlueprint/SpatialPrefabBlueprint—# prefab system not yet implementedWhy this is tractable rather than a rewrite. Both halves already exist, they have just never been connected:
PartitionSerializeralready turns a live DataContainer into JSON, which is how the inspector shows EBX today.add_json_partitiondoes, and what the generator already drives for the subworld partition it synthesises.So the shape of the work is:
Blueprintat the new partition/instance guid instead of the stock one.Until then, the honest scope of the bake is: stock blueprints, placed and rotated correctly, with variations and vanilla deletions — no data edits.
Related: #394 (placeholders bake correctly — they need no overrides, which is why that path works today), #391 (level-bus wiring is a separate missing dimension: even a correctly baked capture point is not wired into the gamemode).