David Donachie's Website

Skip Navigation

Blog

Just a place for the odd thoughts, updates, and the detritus of my mind that doesn't belong on social media.

Showing posts tagged js

Posted: Nov 22nd, 1:33pm

Zenith — A storylet story

In the summer of 2023 @manonamora (and the other members of the Neo Interactives) held the Single Choice Jam, an Interactive Fiction contest for games that only had a single user choice.

My entry was Zenith, a game about climbing an impossibly high tower to try and reach the impossibly distant top. My inspiritations were Italo Calvino's Inivisble Cities, Railsea, the movies Labyrinth and Mirrormask, and Christopher Manson's Maze. It's meant to be surreal, and reflective. The story, such as there is, emerges organically as you ascend the tower, with certain levels/chambers revealing aspects of the narrator's life, his (or her) reasons for being there.

Concept

The big challenge of Zenith, of course, was the requirement for only a single choice. I didn't want to make something linear, and I knew that I definitely wanted to make something replayable, so that required some element of randomness. I conceived of the tower as a place of endlessly entwined routes, of stairs and ladders and lifts and ropes and hidden ways where you could climb a hundred times without ever seeing the same places in the same order. In this way you could climb the tower over and again and still see something different.

Then, when you have gone as far as you could go, you get to make the single choice, a leap of faith towards the true goal, or a descent to try again with some other route. Along the way you can accumulate items based on the levels you have visited, which may alter or unlock certain routes. If you descend the tower you keep the items for the next climb, if you jump and fall ... well you start again from scratch. Of course, the items are themselves no more than a record of the rooms visited — you can't choose not to collect them because only one "choice" is allowed — but they provide a diagetic explanation for how some paths open others.

Narrative Design with ...

Posted: May 23rd, 4:39am

Housekeeping

It is amazing how much housekeeping a website can require!

Recently I began a project of updating my website in a few small ways, one of which was adding support for this blog. At the same time I addressed a few code bugs, and added a few features to the CMS (Gecko) with which the site is built. So far, so much normal code-tinkering.

But then I made the mistake of looking at the Site Map — and I was struck by the accumulation of ancient pages, and even categories of pages, that I'd entirely forgotten about. I got sucked into pages about the Battlegrounds card game, pages about old RPG campaigns, pages about Playmobil.

And then, of course, the errors began. I found old bits of code that no longer worked. Pages marked out in obsolete versions of the page templates — lacking my new navigation or editing elements. I found dead links — so many dead links! I found pages that were wrappers around projects that no longer existed. Out of date pages describing things I planned to do with the CMS two decades ago! (Urk!). I've removed a whole bunch of "Pages I like" or "Links" pages where no link worked.

Even this was only the upper reaches of the rabbit-hole. As soon as I started to look at older templates (e.g. the plain template used for Duality v.2.4) and add things that were missing (open-graph properties, facebook comments, font-encoding meta tags), I realised all the other things that none of my templates had: skip navigation links, screen-reader headings, aria-tags, semantic use of heading/nav/main/footer tags, so I had to add those to all the templates, not just the old ones — and if I am doing that, I reasoned, then why not turn the breadcrumbs into ULs, and the floating divs into ASIDEs and ... and ...

Somewhere along the way I found myself adding Bootstrap for the css (and coping with undoing the bits of Bootstrap's Reset that I don't like), and then the js on some pages (for image carousels), and then more js (to implement new admin-mode editors), and so...