Module framework: slice 1 follow-ups + open design questions #27
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Status: slice 1 built, local only, no PR yet. Branch modular-slice-1 (local, 2 commits on merged main
b9e7cd73): module = .pck pack + addon.json manifest (id, version, elements, NO order field — an order field is a hard manifest error); typed registry under namespaced ids modid.type.name (types: rig_hands, rig_arms, rig_body, item); ties are startup errors naming both sides (two packs claiming one module id, one element id twice, two modules replacing one target — all tested with negative controls); shipped names are addition-only (same rule as da_*); base game ships as module deadair (glove hands, PSX arms dormant, capsule body, 6 starter-kit items); grip resolution explicit pose → auto-detect → wrist-pivot fallback; discovery scans res://modules/ after packs mount; sandbox spawn path exists via ModuleSpawner.spawn_item(). Docs updated in docs/addons.md (Modules section). Items are ONE collapsed GenericItem (kind tags + grip_poses[] + markers dict) — pending Zach's veto/blessing; if vetoed, kind tags become subclasses (one-file refactor). The old ItemRegistry stub is untouched; unification is later work.Follow-ups, in value order.
Niceties status vs the candidate v1 list. Done: addition-only names; tie errors (stronger than a conflict report); manifest validation (order field errors, unknown fields noted); dangling content persists inert, backup-first saves (pre-existing). NOT done / still open: soft-fail validation (slice 1 fails the load loudly rather than disabling one addon and keeping booting — decide if soft-disable is still wanted); dependency resolution; manager/packager; reload; load order.
Still Zach's calls. (1) Tribe — slice 1's shape is manifest-driven (addon.json + resource/data elements), NOT a Module script with register() as originally sketched: does that satisfy "Minecraft modders feel at home," or is a script entrypoint still wanted? (2) Which niceties above are v1 vs later (confirm/trim the list). (3) Terminology stays "addon"; docs translate (addon ≈ mod + datapack). Basics-first order stands: generic physics + grab (issues #25, #26) before deep module work beyond slice 1.
Update from
craftanything(upstream branch, tipc64b8bd, on mainb9e7cd73— it includes the slice-1 files as-is). Several follow-ups from this issue land in-branch:Done in-branch: boot wiring (
ModHost.boot()fromGame._ready, registry frozen,registries_readyhook);replacesnow redirects lookups (ModuleLoader); dependency resolution (depends/breaks/recommends+ SemVer ranges, cycle and tie errors naming both sides); manifest validation with named errors; example module (docs/modding/example_mod);user://modulesloose-folder dev loading; failed sets surface as MODULE ERRORS on the menu sign plus the bridgemodulestool. The tribe question gets a hybrid answer: manifest + script entrypoints (ModEntrypoint,mainruns at boot).Still open: sandbox spawn button (spawn path only, no button); pck enforcement (
AddonLoaderunchanged — a zip containingmodules/would still load, so pck-only is still convention); data reload (registry is frozen by design); manager/packager; soft-fail (current design: errors shown, game still boots — not per-module disable). Collapsed-GenericItemgets a third answer:GenericItemandItemDefinitionboth remain, sharing a newItemSpecbase (grip_poses+markers) — still needs Zach's ruling.Verified on the branch (lantern-vm, Godot 4.6.3): clean double import,
module_check+modloader_check+ the full headless suite list PASS. This comment records branch state, not a close — nothing here is in main yet.