Paleoludic is Joshua Day.

I write games and design programming languages for fun.

I think that code should be readable and clear and collaborative and that programming languages should make that easy to achieve.

Here are some of my recent projects.

Blue

Blue is a platformer designed by my son, where I coded whatever he thought best for the game. The game is drawn on a piece of graph paper, based on the sheet of paper where he first drew his design. Now that he is a little older, we are reworking it into more of a game — the one online right now is barely a proof of concept. (Supports gamepads if your browser does!)

Play with Blue here

Tact

Tact is a game based on a globe in ASCII, themed around an alien invasion in the 1980s. It used Luajit (a wonderful just-in-time interpreter for the Lua programming language) and was very clever in how it handled foreign function calls, but this proved to be its undoing, as it turned out to be very difficult to maintain.

Freehold

Freehold was a roguelike game where the player built up and defended a settlement against nightly raids. It featured simulated water and staves and potions of water that sent tidal waves against the enemy. The heightmap was randomly generated, with mountains and valleys available. It was written in C and Lua.

Trace

Trace is a hydra of a programming language project. I noticed that several of my goals dovetailed and that the best way to achieve any of them is to achieve them all.

  • The system must respect multiple authors. Each author should be able to submit a program of any size to determine behavior and should be able to trust from reading their program alone that its code will be respected.
  • The system must avoid infinite loops by pathing around them eventually. This strictly makes the language less than Turing equivalent — which I consider a good thing.
  • The language must have rules that make small sections of code readable without wider context, just the same way that multiple authors can provide code independently.
  • Code must be usable in multiple ways — not just called, but also analyzed, and this analysis must be lightweight in terms of the code involved in achieving the effect. One major use case is for AI in videogames, which should be able to look at the code for a unit's moves to determine how to treat them, rather than having a special version written for AI.
  • The language must be testable without special testing frameworks.
  • Music

    I play piano extemporaneously! I don't record myself very often. Here's one instance where I did.