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.
