Releases: datamoc/mwg
Release list
v0.12.0 - RPG dialogue portraits, move routes, sound pitch, and Android/Windows build verification
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
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
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
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
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
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
v0.8.1 - byte-exact team colours, dotted markup params, and a linear ~ROTATE
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
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.