As far as I can tell, Inform 7 is largely used to produce parser IF games, interacted with primarily thru a text based interface. Tools like Vorple seem to allow users to customize the interface’s style (and occasionally behavior) but the primary interaction method seems to still be text.
Contrast this with tools like Ink, which has a base interaction mechanism (you can export Ink stories to webpages that use a simple JS interface to display text and make choices) but is often used within other game systems to power games with extensive visual components (see Heaven’s Vault and other games from inkle studios.)
Is there prior art for something like this with Inform 7?
Yeah. Most of what’s in I7 is the text parser. So using it for non-parser games is awkward. You can do it, but it’s not necessarily better than using Ink to begin with.
Graham has talked about separating out the parser, the world model, and the rule-based language into more modular components. That would make it easier to do this sort of thing – I7 as a rule-based engine driving other kinds of games. The next I7 release may demonstrate this.
(Required footnote: No release date has been announced for that.)
I don’t have a great understanding of how Inform translates your Inform 7 source code into something the Glulx VM can run… I get the impression that it’s not possible to query the running VM for the “state” of in-game “items” / rules? At least not without an approach like @vaporware mentioned in Bill’s thread?
It’s possible, but it requires some fussy byte decoding; it relies on the gameinfo.dbg file generated during compilation. The Vorple approach, where the game writes out important state info to a file, is easier to manage.
It’s worth checking out Re: Dragon for an example of using Vorple to entirely replace the standard interface.
In the clunky but feasible department, one could run an interpreter compiled with RemGlk as an independent process and have something with a completely different UI face the user. It could translate whatever the real user input is into commands passed to the I7 game. Beyond the conventional game output, you could output arbitrary state information every turn (or as requested by out-of-world actions) to be consumed and processed by the wrapper application.
When you mention this, do you propose that I run a modified version of RemGlk that outputs said state information, or I write an I7 extension that outputs state information over the existing text stream (or virtual FS, as in Vorple) as I’ve been doing in this thread?