Skip to content

Loreline v0.9.0

Choose a tag to compare

@github-actions github-actions released this 11 Jun 14:24
· 115 commits to main since this release
og-banner

Asynchronous Functions

Custom functions exposed to your scripts can now run asynchronously: a function can pause the interpreter and resume it later, once its work is done. This makes it natural to await animations, timers, network calls, or any host-side event from inside a story, without blocking the host update loop. Async functions integrate with save/restore and work across native and Web, including the Godot Web export.

Localization & Translation Workflow

Localization received a major overhaul.

  • Standard file formats: translation files can now be generated and read back as PO (gettext), XLIFF, CSV, and TSV, in addition to the native .lor format.
  • translate CLI command: loreline translate story.lor --lang fr --format po creates or updates a translation file next to your script. Regenerating is merge-preserving (existing translations are kept, new entries are added, source changes are flagged) and idempotent.
  • Localization keys: --auto-ids inserts stable #id markers into the source, --clear removes them.
  • Per-file mapping: each file, including imported ones, maps to its own translation entries instead of a single root translation file.
  • Consistent API on every target, with AOT-friendly format dispatch and registrable formats via Loreline.translationFormat(...).

Documentation: https://loreline.app/en/docs/

Language Improvements

  • Implicit characters from dialogue: in a top-level script without named beats, every dialogue speaker is automatically treated as a character, so barista.name := Alex works out of the box, with no explicit character barista { ... } declaration needed.
  • Interpolation at line start: indentation is now correctly stripped when a line begins with an interpolation.

Improvements

  • Catchable errors: Loreline.lastError() exposes parse and loadLocale errors without relying on thrown exceptions, which is friendlier for AOT and host integrations.
  • Vendored scripting engine: the embedded expression engine is now bundled in-tree as loreline.lorscript, so a host Haxe project that depends on its own copy of hscript no longer conflicts with Loreline.
  • Godot: save/restore and async functions now work on the Web export as well as native, bindings were tidied for both the native and JS paths, and the extension's memory model was improved (especially around custom functions). Godot test coverage in CI was expanded.
  • C++ API: shared library export fixes, internal cleanup, and an updated test runner.
  • LSP: new documentReady notification, a fix for duplicate "From:" entries, and various server improvements.
  • currentNodeFilePath is now exported to JS/TS.
  • Bug fixes: native GC crash surfaced by async functions, C++ library export across related targets, and localization edge cases (now covered by a dedicated CLI test suite).

Full Changelog: v0.8.1...v0.9.0