commits
Previously, END DATA's offset field served dual purpose: 0 for end-of-chain,
or address for next table. Now offset always contains the TOC size (used for
buffer allocation), and chain links are in decompressedLength field.
This eliminates special-case handling for empty archives - both empty and
non-empty archives use the first entry's offset for TOC size.
commons-compress requires commons-codec for certain features. This was
causing NoClassDefFoundError when creating Diorama TAR.GZ archives.
Previously, the build system collected artifacts by walking the filesystem after
all assets were built. Now assets declare their artifacts upfront via getArtifacts(),
and the build system collects them during the build process through channels.
Changes:
- Replace BuildResult sealed class with getArtifacts()/build() pattern
- Remove collectArtifacts() filesystem scanning
- Change from BuildArtifact wrapper objects to plain Path objects
- Add validation that declared artifacts actually get created
- Update AssetsArchiveCompressor to work with paths instead of types
- Build: A new parallel, incremental build system for Projects where Asset
subclasses define a build method that will produce the ingame representation
of that asset. It can output multiple artifacts, all of which will be combined
into a mapfs archive and patched onto the papermario-dx ROM.
- Project now owns the asset directories.
- AssetsArchive: mapfs archive reader/writer with linked list structure that
chains multiple archives together, enabling layered asset resolution where
project archives override base game archives.
- Projects can be built into ".diorama" files for distribution.
- PlayButton: One-click build-and-launch workflow that compiles engine ROM,
builds project assets, patches the ROM, and launches in ares.
- AssetsDir: Separates owned (project) vs read-only (engine) asset directories
- Revamped the CLI to be more cargo-like and added docs for it.
Also renamed AssetHandle to Asset, and converted the subtypes to Kotlin.
Trying to do any Swing stuff while the LoadingBar is up causes a
deadlock
Many Logger listeners try to do Swing things, so run them on the event dispatch thread. Fixes a hard freeze on Linux when loading some editors.
Previously, END DATA's offset field served dual purpose: 0 for end-of-chain,
or address for next table. Now offset always contains the TOC size (used for
buffer allocation), and chain links are in decompressedLength field.
This eliminates special-case handling for empty archives - both empty and
non-empty archives use the first entry's offset for TOC size.
Previously, the build system collected artifacts by walking the filesystem after
all assets were built. Now assets declare their artifacts upfront via getArtifacts(),
and the build system collects them during the build process through channels.
Changes:
- Replace BuildResult sealed class with getArtifacts()/build() pattern
- Remove collectArtifacts() filesystem scanning
- Change from BuildArtifact wrapper objects to plain Path objects
- Add validation that declared artifacts actually get created
- Update AssetsArchiveCompressor to work with paths instead of types
- Build: A new parallel, incremental build system for Projects where Asset
subclasses define a build method that will produce the ingame representation
of that asset. It can output multiple artifacts, all of which will be combined
into a mapfs archive and patched onto the papermario-dx ROM.
- Project now owns the asset directories.
- AssetsArchive: mapfs archive reader/writer with linked list structure that
chains multiple archives together, enabling layered asset resolution where
project archives override base game archives.
- Projects can be built into ".diorama" files for distribution.
- PlayButton: One-click build-and-launch workflow that compiles engine ROM,
builds project assets, patches the ROM, and launches in ares.
- AssetsDir: Separates owned (project) vs read-only (engine) asset directories
- Revamped the CLI to be more cargo-like and added docs for it.