itch.io is community of indie game creators and players

Devlogs

Autumn Lisp Game Jam Entry

Foolander
A browser game made in HTML5

I used Autumn Lisp Game Jam 2023 as an opportunity to explore whether or not it was possible to create an arcade-style game in the browser without a single line of JavaScript (or WebAssembly).

Here is the tech stack I landed on:

The last bullet deserves a little explanation: despite its ubiquity, I've soured on Quicklisp due to security concerns (it downloads source packages unencrypted, over regular HTTP; and it even pulls upstream source code unencrypted). Instead, I'm using Git submodules and ensuring that everything I pull from uses encryption.

Architecture

I described the architecture in more detail elsewhere, but to summarize: I stream HTML and CSS over a single HTTP request (using chunked transfer encoding) and use an iframe with plain old HTML forms for input.

Having all input incur the overhead of an HTTP post is definitely not a great idea for a snake game that requires precise timing (in fact, the game is pretty much unplayable over my phone's 4G connection), but it does technically work. It was a fun experiment, but not a model for future development.

As far as hosting, I (once again) ended up needing to spin up a VPS. I had originally hoped to use ngrok's free tier, but its interstitial warning page requires JavaScript, which kind of defeats the entire purpose of my experiment.

I mentioned it in the article linked above, but sadly my game, despite not using any JavaScript, does not work under Dillo (an old, pre-JavaScript browser). So sad...

Day-by-day progress

  • Day 1: Created proof of concept for chunked transfer encoding using Hunchentoot and Chunga
  • Day 2: Added support for replacing HTML content using CSS "last-of-type" pseudo-class
  • Day 3: Implemented an interactive application using Calispel and CL-WHO; tested ngrok chunked transfer encoding; added initial quiz logic
  • Day 4: Pivoted to an arcade game; implemented 2D canvas, event loop, and partial game logic
  • Day 5: Implemented game logic, scoring
  • Day 6: Added introduction and game-over screens, stylesheet; renamed project
  • Day 7: Added high scores list; deployed and tested behind nginx
  • Day 8: Fixed layout on small phones; documented architecture; tested on Dillo

I managed to finish early this time, mostly because I was rushing to get something working, since I was afraid of hitting "unknown unknowns".

Leave a comment