(for links, see below in Zed’s comment)
Hello all,
Happy New Year!
We need more interpreters right? Right?
This project is not a new interpreter, but instead a unified, modern implementation of arguably the most popular interpreter VMs (Twine excluded). My attempt at this is a project I call “Zart”, which is developed with the Dart/Flutter language.
Source on github: atebitftw/zart
Background
Zart was originally my little labor of love to bring the Z-Machine onto a modern development platform, but I decided to expand it for broader interpreter support. Zart currently supports z-machine and glulx story files. I hope to add TADS 3 very soon.
Why Dart/Flutter?
Zart attempts to take full advantage of Dart’s Flutter framework, which allows any Flutter project to compile to multiple target platforms, with a modern UI/UX feel. Flutter supports the following compile targets: Window, Mac, Linux, Android, IOS and Web (transpiles to js/wasm).
Unified Engine-Agnostic API
Zart also provides a unified API interface called PlatformProvider, allowing developers to build player apps without needing to know the specific implementation details of the underlying interpreter engines. It essentially renders virtual screen updates, which any player app can then render out to their platform of choice. This means that any front-end developer can code to a single API that plays both Z-machine and Glulx games.
Take Glulx as an example, which pairs with an excellent IO standard in GLK. Zart implements GLK under the hood, and then exposes the rendered result as a simple array of render cells.
I may expose another option for these virtual screen updates which would also provide the “window” context data, allowing devs to have a bit more control over the layout. I found that for the demos I created, I didn’t need that level of granularity, but I’m open to providing it.
Z-Machine is similar (but with a less formalized IO layer), and eventually renders through the same pipeline as Glulx.
Demo Examples
I have written two demo player apps built on top of the library. I’m not really a “front-end” developer guy, but my hope is that others may eventually created better versions of these. Would love to see some IOS/Android versions eventually. That said, both of these players come with their own flavor of modern convenience, such as quick-save/restore, macros, and some color control.
Zart Web Player
Zart implemented with Flutter Web.
Zart Web Player Live Demo: (sorry, cannot post link
, there is a link to it on the github repo readme)
Source On Github: atebitftw/zart-player
Zart CLI
A full-featured terminal player using fancy ANSI tricks (only tested on Windows).
Source On Github: atebitftw/zart_cli
Up Next
As with any project like this, there is still a lot to do in terms of polish and supportability.
- TADS 3 support.
- While the vast majority of parser games that implement a fairly standard “status bar / text” format run fine, I haven’t rigorously tested the library with complex windowing scenarios . It works well with Beyond Zork’s rather ambitious layout, but on the Glulx side, I haven’t tested this exhaustively. It does however, support things like Inform 7’s boxed quotations (try out “Anchorhead” or “Across The Stars: The Ralckor Incident” to see this in action).
- Graphics and sound are coded in, but I haven’t tested these exhaustively yet. If you play “Counterfeit Monkey” you will find that it defaults to a text-only mode on the web player.
- Z-Machine v6 needs more love. Lots more.
- Lots of other stuff I’m sure.