Skip to content

Releases: datamoc/mwg

v0.12.0 - RPG dialogue portraits, move routes, sound pitch, and Android/Windows build verification

Choose a tag to compare

@datamoc datamoc released this 14 Sep 19:53

Adds `rpg.EventRunner`'s `DialogueRequest.portrait`, `rpg.MoveRouteRunner`/`MoveRoute`
(scripted grid movement built on a new `GridMover.jumpBy`), and `audio.Sound`'s optional
pitch parameter (items 352-354, from a port's own improvement-proposals notes).

Verifies both native packaging paths end to end for the first time (item 351): fixes a real
regression where items 349/350's `.gz`/`.br` compression sidecars broke the
Android/Capacitor build, fixes a stale JDK 17/21 prerequisite gap, tracks `android/` in git
instead of treating it as disposable scaffold, and regenerates documentation/diagrams that had
gone stale (the interactive architecture explorer was missing two whole modules since release
0.4.3).

See CHANGELOG.md for the full list.

v0.11.0 - WebP asset conversion and brotli single-file compression

Choose a tag to compare

@datamoc datamoc released this 14 Sep 11:38

Adds tools/webp-convert.mjs (toWebp) and compileResources's toWebp/webpLossless/webpQuality options: converts .png/.jpg/.jpeg build assets to WebP before embedding, lossless by default (verified pixel-for-pixel identical to the source) and only kept when actually smaller, under the asset's unchanged key so load('sprite.png') keeps working the same in dev and built modes. Needs the optional sharp devDependency, dynamically imported only when used.

Adds single-file.mjs's algorithm: 'gzip' | 'brotli' option. gzip stays the broadly-supported default: a real Chrome (153) tested directly during this feature's own verification throws for DecompressionStream('br'), so brotli is documented as an advanced, narrower-reach option (roadmap item 350, closing the framework's roadmap).

Two real bugs found and fixed by testing in an actual browser rather than only unit tests: the single-file bootstrap's DecompressionStream construction throws synchronously instead of rejecting, which left a splash screen stuck forever on an unsupported format; and assets.load's format hint was derived from the asset's path extension rather than the embedded bytes' real MIME type, which would have told Pixi's resolver to run the PNG parser over WebP-converted data.

Also documents the build-options matrix (multi-file/single-file, compression, image format) in DEVELOPMENT.md.

See CHANGELOG.md for the full list.

v0.10.0 - single-file file:// builds

Choose a tag to compare

@datamoc datamoc released this 14 Sep 09:23

Adds a genuinely single-file file:// build option: tools/single-file.mjs and emit-page --single-file [--single-file-compress[=level]] inline every script an example build loads into one additional standalone.html, with no sibling .js file at all. Compression uses the browser's own DecompressionStream (gzip) rather than a shipped decoder, unpacked behind a minimal splash screen while it decodes. Closes roadmap item 349, the framework's last open item before 1.0.

Also splits the roadmap's shipped, numbered history out of ROADMAP.md into a new CLOSED.md, so ROADMAP.md stays to what is actually open.

See CHANGELOG.md for the full list.

v0.9.1 - RPG Maker autotile support

Choose a tag to compare

@datamoc datamoc released this 14 Sep 01:58

RPG Maker autotile support (roadmap item 348):

  • rpgmAutotileFrame and RpgmAutotileAtlas: renderer-neutral RPG Maker MV autotile atlas geometry, including four-slot decoding, quadrant selection, validation, and cached frame descriptions.

v0.9.0 - Canonical state, deterministic MWL hooks, and the MWL 1.0 schema

Choose a tag to compare

@datamoc datamoc released this 13 Sep 17:41

This release closes out the framework roadmap's last open items: canonical, JSON-safe game state (core.CanonicalState) with snapshots, transactions, and atomic restore; deterministic replay and undo/redo for SimulationRuntime; a hardened lockstep protocol with session seeds, command validation, and per-tick desync detection; and MWL's published 1.0 schema, strict macro/hook diagnostics, typed domain hooks, and a seeded RNG threaded through every hook so gameplay randomness stays reproducible across saves and replays.

See CHANGELOG.md for the full list.

0.9.0-alpha

0.9.0-alpha Pre-release
Pre-release

Choose a tag to compare

@datamoc datamoc released this 13 Sep 14:23

Alpha of the MWG 0.9.0 line. Headline change: MWL authoring syntax is now JSON5 (clean cutover from the WML-inspired tag form, all fixtures, examples and tests migrated, json5 added as a runtime dependency). See CHANGELOG.md for details.

v0.8.2

Choose a tag to compare

@datamoc datamoc released this 13 Sep 09:10

See CHANGELOG.md for the complete 0.8.2 changes. This release hardens MWL save validation, simplifies MWL command dispatch, and improves Pixi pipe registration coverage.

v0.8.1 - byte-exact team colours, dotted markup params, and a linear ~ROTATE

Choose a tag to compare

@datamoc datamoc released this 12 Sep 17:08

Ships items 327, 329 and 330 from the Wesnoth port's non-adoption review: paletteRangeMapping now shades a reference palette by brightness instead of array position, matching Wesnoth's recolor_palette byte for byte (699,996 sampled colours, zero mismatches); MessageParams takes nested records so a dotted {token.path} walks scenario state instead of requiring it flattened first; and ~ROTATE gained a 'linear' sampling mode, premultiplied by alpha, for the angles that are not quarter turns - what a hex-grid game rotates terrain by. Also includes a parsePo fix (a #, fuzzy entry is now treated as untranslated, as gettext's own tools have it) and a small MwlValue barrel export. No behaviour change for any existing caller.

See CHANGELOG.md for the full list.

v0.8.0 - MWL content authoring, the Pixel Dungeon port gaps, and a self-deriving SBOM serial

Choose a tag to compare

@datamoc datamoc released this 12 Sep 13:53

Ships items 316-326. The MWL content-authoring batch the Wesnoth port's report pulled in lands first, since v0.7.9 was tagged before it: [set_variable] mode= declaring what its own value= means (316), an attribute value that spans lines as """...""" (317), a computed path= (318), HookWorld.variableAt beside Emit.setVariable (319), and hooks declaring their own attribute vocabulary (321). Item 320 is the port's own side of 319's disagreement and stays open, the only row left on the roadmap.

Then the five Pixel Dungeon port gaps (P13-P17): roguelike.coneSector (322), per-particle colour ranges, age curves and flicker in ParticleEmitter (323), a blocker layer for Window that MessageBox takes by default (324), WindowStack.handleAction made public with the registration-order race written down (325), and SpriteSheet.rect for the sheets that are not grids (326). Alongside them the SBOM's serialNumber becomes a version-5 UUID derived from the document's own content, with the deliberate absence of metadata.timestamp documented where the validator's warning will be read.

One behaviour change: a MessageBox swallows clicks by default, so a click under a dialogue box no longer reaches the map behind it. Being unclosable it can only ever swallow, and blocker: false is the opt-out. Particle gains a tint field, which a game constructing one by hand would have to fill in. No new @experimental or @deprecated surface.

See CHANGELOG.md for the full list.

v0.7.9

Choose a tag to compare

@datamoc datamoc released this 12 Sep 09:51

Full Changelog: v0.7.8...v0.7.9