Blog

Otherworldly Stars is my first Ludum Dare entry. This time I worked on some base code beforehand and found the worst pitfalls during practice over the warmup weekend. Here we have a log of my development progress and a postmortem.

Pre-jam

I had already decided to make a game that would run in the browser and which wouldn’t depend on a big engine like Unity, so that factored into my choice of tools. For programming language I was torn between TypeScript and Haxe (pros and cons of each are discussed at length here). I had used Haxe more recently and so it won out for me. I also wanted to make something shader-intensive – I had used three.js before and Haxe externs already existed, so it was the obvious choice. Thanks to that I had a base project set up pretty quickly. Over the warmup weekend I worked on some GLSL shaders and particle system code. I made a little particle editor and debugger using dat.gui for the ParticleShaderEngine three.js addon. I also worked out what the likely bugs were going to be and checked that my base code worked fine across different desktop web browsers. I also set up separate debug and release builds, so I could check on performance with traces turned off and debugger UI removed. For text I wanted to use signed distance field fonts, but decided it probably wouldn’t be worth the effort and made a little class that used 3D text geometry instead. After the warmup weekend I dashed off to the Lake District for a hiking holiday.

Day 1

When the final round of theme voting came around I looked at the options to figure out the sort of game I could make for each one. I thought it was a great set, some of the themes were a natural fit for the sky shader in my base code – I honestly did not know some of the themes were “Night and Day” and so on. As it turned out, the selected theme was “You Are The Monster” which wasn’t so great for that – but it did sound like a good theme to make a story out of, so I took a half hour to work out a basic plot for the game:
  • A God (the player) appears at a burnt shrine.
  • Player explores the burnt game world looking for answers.
  • Exploration gives some backstory to the world and nature of the God.
  • The further east the player goes, the more hopeless it gets, the God cannot find any signs of life or followers.
  • Player rushes through dozens of screens with different stuff but no sign of life looking for his people and disciples.
  • Eventually this leads to a place where the land tapers away and the other Gods appear to scold the player, explaining that you charred the land in a previous life.
  • Plot device that led to the God’s banishment and a “You Are The Monster” is revealed.
  • Battle with lots of particle effects ensues.
  • A time loop or banishment pushes you back to the beginning of the game as that was the way the other Gods banished you to the sea of otherworldly stars.
First I made a title sequence where the player is summoned to an altar, passing a sea of particles and arriving at a dark temple at sunset. I wanted the sun to be aligned with the temple and be a nice effect for the summoning, but I found that was drew too much attention to my terrible pixel art, so scrapped that idea. I decided to make a slow sunrise where the player appears instead. The player would then progress by clicking on buildings and traversing screens using the arrow keys. This and all the base code needed to hold it together in an extendable way took most of the first 24 hours. On the way I experimented a lot with shader settings and object attributes to get effects to set the scene – one way this was working well was making the sun transition in nice ways between screens.

Day 2

I got stuck trying to pool particle systems, the efficiency hit without pooling led to me giving up on a combat system and concentrating on the player’s journey instead. I decided to focus on the main story point to make the link with the theme obvious:
  • You race through screen after screen looking for your missing disciples, only to reach the other Gods and be told that you, the fire god Agni, destroyed your disciples in a fit of anger in a past life.
  • The other Gods reseal you in the West where you came, but after a while you are born again and the game repeats itself.
I created a couple dozen screens and chained them together with snapping camera transitions. As I have no image editing abilities whatsoever I populated the landscape with architecture from public domain photos – I pulled out visually appealing elements, masked them to create silhouettes, then scaled and cleaned them up a little. I spent most of the day putting all of these things together. By submission time I had something that worked, but no audio or combat – so it was far too light on actual gameplay. I also wanted to work a vignette shader, 2D water reflection and postprocessing in, but ran out of time. However the screen transitions looked nice, which I was happy about, and there was a main game loop working.

Postmortem

I spent the last 3 hours before the competition closed spending my time running through the game looking for bugs, making a playthrough video, packaging it, uploading to itch.io, taking screenshots etc. I recommend drawing a line and then taking the time to do these things, so that the end of the competition isn’t stressful. Thanks to taking some time I was able to get rid of a few bad bugs. Overall I was happy with the result, despite the lack of proper gameplay or audio, it looks nice and is playable from start to finish.
By sam in Blog