Skip to content

v0.1.3 - BE-aware ghost rendering + checklist modal

Latest

Choose a tag to compare

@Lueken Lueken released this 26 May 00:15
· 5 commits to main since this release
063aedf

The "ghost shows the real thing" release. Chests, crates, baskets, generic containers, and chiseled blocks now render with their actual block-entity geometry instead of mystery placeholders. The build checklist gets a movable, scrollable, copyable dialog mode in addition to the existing always-on HUD.

Added

  • BE-aware ghost rendering. Per-family mesh sources read each cell's saved block-entity tree at paste time and reconstruct the real mesh:
    • Chests / labeled chests / querns / beds tessellate normally and rotate by their saved meshAngle, so askew chests show askew in the ghost.
    • Crates / stationary baskets / generic containers spin up a throwaway BlockEntity from the schematic's BE tree and invoke its private mesh-builder (GenMesh(tesselator) / loadOrCreateMesh()) via cached reflection.
    • Chiseled blocks / microblocks render the substrate the chisel was carved from (oak plank, granite, etc.) as a full cube. Voxel-level chisel detail stays for the v0.2 chisel phase.
  • Substrate-aware materials list. Chiseled cells contribute to their substrate's row in the build checklist (planks: 0/12 includes chiseled-from-plank cells) rather than showing as a chiseledblock line. Placing the substrate counts the cell as matched for phase-1 build.
  • Checklist modal. Ctrl+Shift+L now cycles three view states: HUD (transparent always-on, no cursor grab) -> Modal (draggable title bar, clipped scroll body, "Copy to clipboard" button) -> Hidden -> HUD. The HUD opens automatically on .fw place; the modal is opt-in via the cycle.

Fixed

  • Paste no longer crashes with NullReferenceException on blueprints saved by v0.1.2's block-only fallback path. Reported by Fish and 3CHØ on the Vintage Story Discord. BlueprintFile.ToBlockSchematic now calls EnsureSchematicCollectionsInitialized immediately after LoadFromString so the schematic's collections are always non-null before BlockSchematic.Init -> Remap runs. Affects single-player saves loaded on a server, library paste, and the .fw paste chat command alike.

Notes

  • Crate / basket meshes don't show in-world label / contents detail since we don't reconstruct items inside containers; mesh geometry + rotation only.
  • Reflection-based BE instantiation is best-effort. Third-party BE classes that throw inside Initialize without populating their mesh field will fall back to bare tessellation. Warnings go to client-main.log under [fieldwright:be-mesh].
  • Phase 1 build counts treat chiseled cells as their substrate. Build-vs-chisel separation lands with v0.2.