Now it was time to test if the "core mechanic" was any fun! My family enjoyed the previous tiny example and the idea of typing branching text to choose a path in the "adventure" seemed pretty solid.
But would it hold up in a larger narrative?
This next demo uses a nearly identical "engine" - it’s actually a little shorter at 140 lines instead of 150. :-)
But I certainly wasn’t going to type out a large example with the hard-coded indexes I’d used before!
So I created an extremely simple "game script" format to author the content.
Using indentation plus an "arrow" (→
) syntax to represent branching made it pretty easy to write and read the game script.
Here’s an excerpt taken from the top of the whole game.script file:
;; start i was in the forest and i wandered to a waterfall -> waterfall cave -> cave ;; waterfall the cool water thundered down and i was brave -> behind_falls frightened -> field ;; behind_falls so i stepped closer and saw that there was a space behind the falls so i searched it -> search ran away -> field
A 78-line AWK script called script2json.awk converted the game.script to a JSON data structure called game.json.
Here’s a tiny portion of the JSON data (you can see that the AWK script doesn’t bother to indent or otherwise pretty-print the JSON output):
{ "start":{ "paths": [ {"str":"i was in the forest" , "paths": [ {"str":"and i wandered to a" , "paths": [ {"str":"waterfall" ,"sect":"waterfall" }, {"str":"cave" ,"sect":"cave" }] }] }] },
A little SVG sketch provides the tiniest bit of atmosphere:
Click on the screenshot above or this link to try it out: 003/index.html
The whole thing was pretty much stream-of-conciousness and it makes for a pretty crummy game and a pretty crummy story. But I think it answers the basic question:
Q: "Is this a fun way to play a game?"
A: "No."
I’m a normal 60+ WPM typist and I found it to be a total pain to get through even a small portion of the script. Especially navigating back to areas and chosing a different path.
It’s not fun to type an area the first time, and it’s awful to type something twice.
So no, this wasn’t going to work in its current form. I would need to refine the idea.