Adventure.js Docs Downloads
Score: 0 Moves: 0
??? xyzzy


A note from the lead developer of Adventure.js

Hi, I'm Ivan. I spent a lot of time in my teen / young adult years in the '80s playing Infocom games like Planetfall and Wishbringer and Hitchhiker's Guide to the Galaxy. I loved them so much that I used to haunt electronics stores hoping for new releases. In the late '90s / early aughts I was active in the Interactive Fiction commmunity at ifMUD and wrote a few small games in TADS. I even won an XYZZY award for best writing for Sunset Over Savannah. Eventually I fell out of the IF community, like you do. Life goes on.

I considered picking IF up again a few times over the years, and in January of 2020 finally found myself with a big enough head of steam to follow through. I looked around at the landscape of modern IF tools. TADS and Inform were the big two when I last wrote games, and both were still around. It looked like TADS wasn't extremely well supported anymore, and anyway I wasn't in the mood to (re)learn yet another programming language, especially one that I couldn't use professionally. Looking at Inform, I was pleased to see that Graham Nelson and Emily Short had open-sourced Inform 7, and the Inform app looked great, but I found Inform's natural language development style confounding. I looked at Twine, which seemed like a very polished tool, but not what I was after.

I really wanted to write a full parser game in a way that leveraged and expanded my existing development skills. "Hey," I thought, "how hard could it be to write a simple text parser in JavaScript?" For the first few weeks, I thought, "Why, this is not so hard!" And here I am years later with a todo-list that only grows and never shrinks. But, water under the bridge!

When I started out with building Adventure.js, I was heavily inspired by the structural style of create.js by gskinner (though of course any mess I've made of it is my own fault). I wanted all objects and syntax to be written in vanilla JavaScript, and to be easily human readable. (I've only done a tiny bit of work in Python, but I was particularly enamored of its guiding philosophy.) I wanted to make it possible for newbies to write a game with minimal programming knowledge, but in a way that might teach or reinforce basic JavaScript skills. I wanted to make it flexible and extensible, so that experienced devs could not only write a game easily, but also modify and expand the library in any direction. In short, I wanted it to be the jQuery of text adventure tools: easy to use and able to plug in to any HTML page.

Adventure.js remains a work in progress. Any time you find yourself questioning methods in the library, the answer is almost always, "It seemed to make sense at the time." I wrote Adventure.js from memory and nostalgia, in the mould of classic text adventure games, without referring to any existing text adventure tools. But since I began the project, I've looked around and discovered that the Interactive Fiction community has really advanced the form in the last couple of decades. And so Adventure.js may be lacking some more modern conventions. If something seems stupid to you, I invite you to help me improve it. I believe - I hope - that I've made it flexible enough and extensible enough to support the development of any newer conventions that I might have neglected.

Anyhoo, please have fun with it, and let me know if I can help!

-- Ivan