Dave’s Status Report

So it’s been awhile since I posted anything here. I kind of went offline during non-working hours, hanging out with my kids, focusing on other things, and the job I had last year required a lot of travel to New Hampshire.

I did attend NarraScope in Boston and had a great time. I got show off FyreVM Web to a handful of people and although it raised some eyebrows, the consensus is that I’d need to create a full-fledged example of using it for people to really get a feel for its capabilities. The problem is, I’m not a front-end JavaScript guy and FyreVM Web really needs someone with a high level of skill in that area to do it justice. It’s there…the Github repo has all the bits to implement a story. I think my part is done.

I also ran into Jason Scott and asked him why he blocked me on Twitter. He didn’t give me a straight answer, but I’m aware that I can voice IF community frustration at times. I looked back at some of my commentary and cringed. I’m done with that. We’re all doing cool things, I support all of the cool things, and I hope we find time to help each other as time and alignment allow. If I can help anyone, feel free to reach out and I will honestly try to accommodate any request that aligns with my background. Mostly I can provide hosting on plover.net, support any effort to leverage FyreVM Web, and maybe offer insight into general IF knowledge.

What am I doing now? Well, I picked up a Raspberry PI and an old Digital Equipment Corporation DecWriter III (LA120) and I have an emulated PDP-11/70 running RSTS/E with DUNGEO and ADVENT. So in my home office you can play those two games on a green bar paper console. Another PDP hobbyist has a z-terp running and more games are possible, but not sure how the windowing would impact a paper terminal’s output. This was a ton of fun to get working and highly nostalgic. My very first experience with any computer was an LA120 dialed into Milwaukee Public School’s PDP-11/70. I was 15 years old, so that’s 40 years ago.

I’ve also decided to hold off on writing IF for a bit since it’s time consuming and I’m frustrated with the current set of tools. There are idiosyncrasies in Inform that are well-known and have no resolution, mainly the way emitting text is deeply integrated in the underlying Inform 6 platform. I’ve also always been interested in platform development and have tried several different approaches over the years. My current interests lie in leveraging an in-memory graph data store with an event-driven architecture managing the contents of said data store. Parsing and Text-emission would come out of change events on the graph. This aligns with my professional interest in Domain-Driven Design, the premise of which is to reduce complexity by pulling things apart into their “domains” or “bound contexts”. In the case of IF, I do believe text emission should be its own bound context, receiving a list of events from the engine, then combining the text based on rules, before sending them to whatever type of output. I suspect text generation is already tackling some of the concepts here, like if the player manipulates an object, how is that reported and at what point in the output? Is it first or embedded in the main output or is it a part of a summary? Not to mention all of the hullabaloo around punctuation, paragraphing, and other aspects of text generation. But imagine having a set of output at the end of a “turn” and having complete control over its format. That would be quite amazing.

The other thing I want to investigate is the syntax of an IF language. I like the idea of pipes and fluent syntax. Inform’s NL-like implementation was a ground-breaking achievement. Even so, as a life-long programmer, I have often been frustrated in how to implement things. I have often struggled with declarative-styled languages. I hated XSLT’s twenty years ago when it was all the rage.

So my goal is simply research and development around graphs and fluent syntax and bound contexts. I have no goals, no promises, no announcements per se. I’m going through the new compiler book by Bob Nystrom http://craftinginterpreters.com/. It’s very accessible, compared to the Dragon book.

I hope everyone is staying safe during the lockdown and looking forward to some of the NarraScope events. Hopefully we’ll all be together next year.

Dave Needs an IF Collaboration Partner

I want to get back to writing IF stories. I have several stories in the works, one in particular is relatively far along. I have limited time to devote to writing and programming though, so I’m looking for a collaboration partner. No set agenda or story. No delineation of tasks. Just someone to talk through ideas, then execute ideas into stories.

It’d be great if this person was in the Chicago area for face to face time, but video conferencing is effective as well. I travel to the Boston (Hooksett/NH) area regularly for work, so meeting around there is definitely a possibility.

I prefer old school parser stories and my ideas tend to be complex and include alternate user interface ideas, but not always. I would like to develop a solid medium-sized story in fyrevm-web at some point, so having someone with strong web skills would be a huge plus. This is more of a want though, not a need.

If you’re interested, direct message me on twitter.

Interactive Fiction and Graph Databases

I’ve been puttering on my own .NET-based IF platform for years. I rarely talk about it because it’s never gotten past the idea-stage. I originally started experimenting with Visual Basic .NET because I thought the verbosity was a good thing for IF authors. I recently switched everything over to C# with the idea of building a fluent interface to all of the internal structures.

One of the many challenges of any IF platform is how data structures are implemented so that querying the “world model” is simple and fast. Graham gives some examples of the complexity of parser-based interactive fiction in his recent London IF Meetup presentation, specifically around assumed relationships between objects. (There’s no easy way to embed an exact reference, so you’ll just have to read through the part about natural language in IF).

Another thing I’ve been doing for about ten years is entrepreneurship. Most of you know I attempted to create a commercial/educational IF publishing firm, Textfyre. In recent years I was working on a contextual social network¬† (Wizely) premised on offering globally shared wisdom. I have recently abandoned this startup because machine learning + Search has come close enough to contextual to make my ideas quaint and likely to fail.

However, one of the aspects of trying to build a real business is that you force yourself to learn a lot of new things. One of the things I picked up building Wizely was graph databases. I had been using Neo4j as my tool of choice, but the graph database world has matured and there are several prominent players and interfaces. I still think Neo4j’s Cypher language is the most readable and accessible, but fluent interfaces seem to becoming the standard.

Anyway, graph databases are really interesting when solving relational data problems, especially natural language problems. When you’re building a story in Inform 7, you may find yourself “selecting” things that relate based on “criteria”. One of the core features of Inform 7 is the ability to define very complex relationships and build rules from their current and future state.

A graph database (or data store) would help do the same thing. A graph is made up of vertices and edges, but also known as nodes and relationships.

Player -> IS IN -> Kitchen
Player -> IS CARRYING -> Elvish Sword
Elvish Sword -> IS CARRIED BY -> Player

As you can see, the elements of a graph align directly with how we perceive the world model of a parser-based interactive fictions story.

So extrapolate this to pushing all of the data (or beginning state) of a story into a graph data store, then add the standard graph querying capabilities of either Gremlin or Cypher, you could build an IF platform that focused on the state of a graph.

Cypher example relating to IF:

MATCH (person:Person {"name": "George"})-[:IS IN]-(location:Location)->[:CONTAINS]<-(object:Object) RETURN object;

Which would return all of the objects in the location of the PC/NPC named George.

Cypher, Gremlin, and other graph query interfaces are very sophisticated and allow a great deal of querying power and I think this is a very interesting foundation for an IF platform.

In my current efforts, currently named “refly”, I’m building a serializable in-memory graph data store in C# and plan to implement a gremlin and/or Cypher interface. Once that’s complete, I’m going to build a working implementation of a story built in C# fluent interfaces to this in-memory data store. Then I plan to use Blazor to have it run completely in a standard browser that supports Web Assembly.



A good friend of mine, Jeff Panici, is going to post videos for a year, detailing how to build an old MS-DOS based video game in assembly language.

YouTube: https://www.youtube.com/channel/UCaV77OIv89qfsnncY5J2zvg/featured

Check it out!

Mikayla’s Phone

So this “work” was conceived, written, and designed by my sixteen year old daughter Angeline. I implemented the user interface.

Angie had a ton of poetry and notes from middle school, a lot of which is pretty typical teenage angst. Some of it is more than that. A little over a year ago, I recognized that the anxiety was more than the usual teenage stuff and offered to introduce her to a therapist. She agreed and has been going regularly since. She’ll tell you it has immensely improved her life and as her father I can say it has immensely improved her disposition. She will always have anxiety (and depression) issues, but she’s building coping mechanisms, understanding triggers, and learning that she’s a pretty amazing person regardless.

She came to me in spring and said she wanted to learn how to make a video game. I asked what kind and she told me about her writing and the basic idea of a lost phone of a seemingly dead teenage girl. I told her she needed to outline everything first. She did that. I showed her Twine and explained how to put everything into a tree of choices. She did that. I did try to adapt Twine to a mobile phone look and feel, but I felt I’d need to learn way too much about Twine. So I just used basic html and jquery.

As we were putting this together, we looked at ways to put it in front of people. We thought about submitting it to SubQ, but I suggested the IFComp and after thinking about it, she agreed it was the best way to go.

We completed the game (it has quite a few rough edges) with 6 minutes to spare.

When I hit the Upload button, you could see the relief in her eyes, almost as if a weight of the past had been lifted. She really had a bad time in middle school. She could finally (mostly) let it go.

We were not expecting anything from the voters, but the reviews we’ve read are accurate and appreciated. We both laughed out loud at “wads of morose poetry” in one review. She read it and said, “He’s not wrong.”

There’s no doubt we could have cleaned up the interactivity quite a bit, possibly added some humor, and made it more of a game. But that was not the goal. It was meant to relay what it’s like, from a real person’s perspective, to be in middle school, to be a young girl, and suffer from anxiety and probably have some spectrum social issues.

Maybe someone will “play” it and realize they’re not alone and that seeking and investing in therapy is a real solution with tangible benefits.

FyreVM and IFPress Status

It’s been about six months since I’ve worked on FyreVM-Web and the infrastructure for ifpress.com. After the most recent developments with Vorple and the clear interest from the community for its progress, I paused to re-evaluate where I spend my time. I think at this point I plan to spend more time on writing than on tool development. This means the status of my tools is going to remain dormant until some nebulous future date.

As everyone knows, platform development is hard and the IF community is somewhat mercurial about shared interests. I tried to enlist a couple of people in helping on the UI side of things where FyreVM is concerned and they flatly replied (paraphrased), “Why should I spend time on this when Vorple is more mature.” OR “I don’t have any extra time for this.”

So at the moment, FyreVM-Web is going to the dust-bin…until I find some future fuel for it or if it gains interest from other capable front-end developers and designers.

On to writing, IF and other things. Cheers.

Vorple and FyreVMWeb

So now that Vorple for Glulx is in beta and looking great, I asked Juhana whether it made sense for the two of us to work together to make Vorple work with fyreVMWeb. Iniatially we both thought this would be a great idea.

However it would seem that Vorple adheres to the existing glk-oriented display paradigms and that’s exactly what FyreVMWeb breaks (intentionally).

Most, if not all of the concepts in Vorple are transferable, but the implementation is likely to be wildly different underneath the covers. The one area that may have overlap is some of the I7 extenstions, but even then it would be file by file decision. More often than not, one platform would be hampered by the others requirements or capabilities.

Vorple extends to Glulx a real web development experience that is very exciting. It may make FyreVMWeb less of a target to many who just want an out of the box development experience. Even so, I still need to find a way to bring the same Vorple UI experiences to FyreVMWeb. I’m just not sure how that will happen.

For the most part, a rough beta of FyreVMWeb is functional. It is not ready for real use quite yet, but getting closer by the day. The sample is running showing the standard beta template..

FyreVM Status Line (I7 Extension)

This extension allows the author to decide which parts of the status line will be displayed. The extension doesn’t say anything about the design or location of the status line, but only which parts should be shown or hidden. The design will be handled by a component in the UI template.

This is going to be common pattern for components in fyrevm-web, as it clearly defines the content, but has no opinion about the design.

In this case, Story Addendum is a new feature of the status line and will require further definition. For now it’s just a placeholder, but my intention was to allow the author to control any parenthetical addendums, such as:

Kitchen (floating in mid-air)

The following is the current documentation from the extension, now on the fyrevm-web github repository:


FyreVM Status Line defines which parts of the standard status line are displayed.

These parts include:
- location name
- location addendum
- story time
- story score
- story turn

The author can show/hide any of these with the following statements:

show the location name.

hide the location name.

show the location addendum.

hide the location addendum.

show the story time.

hide the story time.

show the story score.

hide the story score.

show the story turn.

hide the story turn.

The statusline-channel will emit the details in JSON format to be handled by the UI template.

{ "showLocationName": true, "showLocationAddendum": false, "showStoryTime": true, "showStoryScore": false, "showStoryTurn": false }

This data will be contained in fyrevm.statusLineContent in the browser.

A fyrevm-web Standard Template Emerges



After a holiday hiatus, the standard template is coming along. It’s not pretty, but the basic functionality is getting closer to my vision.

One of the tasks we completed was reorganizing the github repo so it was strictly fyrevm-web, the I7 extensions, and the eventual I7 build templates. The eventual development of ifpress will be within its own repository.

In this iteration we’re storing arrays of the main content and the commands. In the next iteration we’ll have the full complement of content displayed in the template including hints, help, and multi-session (branching) capabilities.

Then we’ll introduce multi-story housing, external saves, and mobile templates.

And then finally we’ll add a paging template to show that the same data can be used in multiple contexts.

We could still use a professional web designer to help us make this look pretty. If anyone is interested, drop me a note.