Tonight I finished the game and released it on itch.io. I spent the night working on populating maps, adding a few new enemy types, and then playtesting, balancing, and fixing bugs. The result is playable and there’s a steady difficulty curve requiring players to make decisions about whether to fight or run away from an encounter, and whether they’ve scavenged enough in one area and should return…
Tonight I added some more terrain generators. There are now three different types of terrain, and as you drive the current terrain periodically changes. The two new types of terrain are a swamp and mountain pass. All three terrain generators are wilderness areas. I was originally going to have a mix of wilderness and urban areas but I’ve always found it hard to implement procedural generation of…
A bunch of content additions tonight. I added a variety of melee weapons and armour that interact with the games existing systems. Heavier armour requires you to eat more food to support the extra weight of the armour. There’s a high damage axe which costs energy to use. I also added a slime enemy that splits when attacked. The plan for tomorrow is to add a new terrain generator (probably a city)…
Today I added a win condition, which is reaching the room containing the “wish granter”, borrowing some lore from Roadside Picnic which Pacific Drive was loosely based on. After driving sufficiently far the game generates the final level. I still need to add some indication of the distance remaining to the game’s UI and add some variety to the terrain that gets generated for regular gameplay.
Today I added a terrain generator for a forest biome, implemented the game’s basic systems, added a few hostile NPCs, a car inventory where items can be exchanged with the player’s inventory, and items for recovering health, energy, food, and fuel. I still need to add NPCs and items to the generated levels and add a win condition. I’ll do both of those tomorrow.
This year my game will be about taking a road trip through a mysterious exclusion zone, kind of like Pacific Drive, only it’s one continuous journey rather than a series of short runs. And obviously it’s an ASCII turn-based traditional roguelike. I spent today dusting off my codebase from my submission from 2 years ago ( Electric Organ ), reworking the UI, and adding a driving mode pictured above.…
I connected a pair of computers with a 300 bits/s point-to-point dial-up network through a pair of Voice-over-IP (VoIP) phone lines. This type of networking predates commercial dial-up internet, and required users to directly call the specific online service they wished to connect to, such as CompuServe or a bulletin board system. Nowadays there’s little practical benefit to dial-up…
Wow has it really been over a year since I posted an update on this project? In Part 3 I powered on the machine with the new motherboard. It played the Macintosh startup chime followed by a Chime of Death and did not boot. Before continuing with repairing the hardware I wanted to try taking an image of the hard drive in case I made a mistake and damage it. Here’s the drive: The drive has a SCSI…
Alice is my toy OCaml build system project where I ask “What if Cargo but for OCaml?”. My main priority when designing Alice is accessibility but perhaps a more suitable term would be inclusivity as my goal is for the tool to be usable by as many people as possible. Alice is still in its infancy and is currently used by nobody but if the day comes when it becomes a viable tool for building OCaml…
Alice is an experimental OCaml build system emphasizing accessibility. It’s still very much a work in progress and nowhere near ready for regular use. Currently it can build multi-file OCaml projects to executables and libraries. Its UI is inspired by cargo. I’m one of the core Dune developers for my day job. Dune is a mature and widely used OCaml build system which it difficult to make large…
Back in 2012 I took an Operating Systems course, the main assessment of which was a 12 week pair assignment implementing a user-level OS personality for the seL4 microkernel . I recently got the urge to boot up our little OS. I saved the contents of my university computer system home directory before I graduated so I still have a copy of the code, and fortunately I didn’t make clean the last time…
I got my OCaml music synthesizer working on Windows. Here’s all the things that went wrong in the process. This post will chronicle my attempt to use OCaml to play generated audio samples on a Windows PC. This is part of my work on the llama synthesizer library , where I’ve been rewriting the low-level audio logic formerly written in Rust (with cpal ) into OCaml to simplify the build process and…
Scope Creep is a short first-person horror game rendered with a virtual oscilloscope. In the game the player explores a dungeon collecting orbs to open a door and escape. Each time an orb is collected a new class of enemies spawn. All the graphics including text and enemy sprites is rendered by using a synthesizer library to generating a stereo audio signal which is then visualized with a virtual…
The game is finished. Play it on itch.io. I made a bunch of changes tonight. Notably, I removed the HUD and mana. I was originally going to add upgrades and spells, but I decided that giving the player a bunch of abilities will detract from the feeling of dread I want them to feel while playing Scope Creep. Instead, the player remains week while the dungeon gets progressively more dangerous each…
After tonight I have the full game loop working. The dungeons are populated with items and enemies, and when you collect all the artifacts and return to the hub, the room starts shaking and a door opens that leads to a corridor with “The End” written at the end. The bones are all there, and I have one more day to polish and add content. The three areas I’ll focus on tomorrow will be: Adding…
Tonight I added a map mode (still rendered with oscillographics of course). It only shows walls you have already seen. I also added some basic items for restoring health and mana. When you walk into an enemy you now take damage rather than instantly dying, and there’s an animation that plays where the image gets fuzzy for a second after taking damage. The player has a period of invulnerability…
I added text to my engine to enable rendering a HUD and labels on items. This required describing each uppercase letter, digit, and some other symbols, as a list of coordinates. Like everything else in the game, text is rendered with oscillographics. I also added a couple of new oscillographic patterns which I’m using to represent the artifacts the player needs to collect. The health display in…
I added a quick and dirty implementation of collision handling for the player character. Then I added some enemy types: a ghost and a slug. The ghost can walk through walls and causes the image to become noisy the closer it gets to you. The slug can’t walk through walls and moves faster. Both are rendered with oscillographics. Here’s how the ghost looks: I also added a death screen simulating how…
Today I completed the renderer, fixing several major bugs and adding the ability to render objects which can be occluded by walls. I implemented the oscillagraphics renderer, so now when playing the game you hear sound that changes depending on what’s on the screen. Note the additional lines in the rendered image which aren’t part of the world geometry or objects. These are necessary as when…
This year my plan is to make a game that can be rendered using purely oscillographics. Your computer will play sound out of the left and right speakers such that if you plotted the two waveforms on the X/Y axis it renders the game like an etch-a-sketch. The game will also display the oscillographics directly just in case you don’t have a 2D oscilloscope. Here’s my progress after a day of…
I’ve used the same game engine for all the roguelikes I’ve made since 2019 and I found out this year that they are all affected by a bug in the way lighting is calculated. This post describes the bug, the fix, and shows the effect fixing the bug had on all the affected games. The bug Fixing all my games (with side-by-side comparisons) Rip slime99 Orbital Decay Rain Forest Electric Organ Small Wolf…
I learnt today that Windows has a built-in package manager. I’m setting up a machine for doing some Windows development at work, and I read that it’s now possible to install Git by running a command from PowerShell: winget install --id Git.Git -e --source winget Well I tried that and it didn’t work: PS C:\windows\system32> winget install --id Git.Git -e --source winget Failed in attempting to…
In Part 2 I inspected the power supply and cleaned out a bunch of wasp nests from the circuitry. I concluded that the power supply for the CRT seems to work and ordered a replacement motherboard as my current one was badly damaged by a battery leak. This week my replacement motherboard arrived: It came with a processor already installed, as well as several sticks of RAM. The longer one is DRAM in…
In Part 1 I inspected the motherboard and found what appears to be damage from a battery acid leak. Before I turn on my old Macintosh I want to take a look at its power supply in case anything is obviously wrong with it. Step 1 was to remove the case which was attached with T15 screws (step 0 was going and buying a T15 screwdriver). The plastic was quite brittle and unfortunately one of the screw…
I’m going to attempt to repair my family’s old Macintosh LC575. Some of my earliest memories are of playing games on this computer and I’m keen to check out some of the primary school assignments I typed up on it and save files from games I played as a kid. I visited home about 10 years ago and was disappointed to find that it didn’t power on. I asked my mum to mail it to me and now I finally have…
At the time of writing I'm employed by Tarides to work on the Dune build system, but all the opinions in this post are my own. I wrote the first version of this post a year ago for the Tarides blog but it was never published. I recently got permission to post it here instead. This post is about some frustrating experiences I had while developing my first non-trivial OCaml project - an audio…
Electric Organ is a traditional roguelike with an emphasis on ranged combat. Character progression primarily takes the form of swapping out your organs as they are damaged by the environment, and upgrading them to make yourself strong enough to face the threats below the city. It’s my 9th entry into the 7 Day Roguelike game jam . It placed 1st according to roguetemple’s leaderboard ! Download or…
It’s the end of day 7 and my game is complete. I stayed up all night finishing it and managed to complete all the features and content I intended and still had a few hours for delirious playtesting and bugfixing. This was by far the largest scope for any 7DRL I’ve done in the past in terms of features as well as content. This game has procedurally-generated music and sound effects, 10 types of…
One day left! Tonight I implemented the equipment system. Weapons can be equipped from the inventory to the hands. Some weapons require both hands while others require only one. This is important as the “Claw” organ takes up a hand; you can’t use a two-handed weapon if one of your hands is a claw (and you can’t use a one-handed weapon if both of your hands are claws). Getting the logic and error…
Tonight I added items. This includes the logic for picking up and dropping objects, the UI control flow for displaying menus allowing the playing to drop or use an item, and the item descriptions. The most complicated part is dealing with what happens when a user drops an item while standing in a cell that already contains an item. The game engine does not allow multiple items to exist at the same…
The main focus of the day was the combat system. This involved setting up the control flow so that when the player presses the fire button the UI lets them aim, and then commits the fire action after the user confirms their target.
I had a productive evening working on Electric Organ. Firstly I implemented an animated main menu. I’m spending a lot of time up front working on aesthetics as I find that if the game is pretty I’m more motivated to work on it later in the week. Hopefully there’s enough time to implement all the mechanics I have planned. See the animation along with the music on youtube .
I mostly spent the day working on dynamically-generated synthesizer music. There are currently two songs - one for the main menu and another that plays during levels. If I get time I will add more.
It’s the end of day 1 of 7DRL2024. So far I’ve got a level generator for an area of ruined city and basic graphics and lighting: While working on this I fixed a very longstanding bug in my lighting system that caused lights to be too bright near their sources and to drop off with harsh steps rather than a smooth gradient.
This page will list pinouts of some electronic components I commonly find myself using, as well as some notes on using them that might not be obvious from reading the datasheets.
This is a guide I wrote mostly for my future self on how to set up an ergonomic development environment for writing Arduino programs in c without any Arduino-specific tools and using an Arduino to make a simple circuit with some flashing LEDs. I’ll also discus options for powering the Arduino from a 12v DC power supply.
One problem with using the rust programming language for game development is the notoriously slow compile times. For my recent 7DRL project Boat Journey an incremental debug build takes about 6 seconds on my main development machine. This is frustratingly slow when making many minor gameplay tweaks during playtesting.
The sun is peeking beneath my curtains and another 7DRL draws to a close. Today I implemented the passenger mechanic, the trading mechanic, collectable junk (the game’s currency), the combat system via abilities gained from passengers, and added 7 different passengers you can pick up, each granting you a unique ability. The game is playable and downloadable on itch.io at…
Boat Journey is a turn-based game where you drive a boat through a procedurally-generated landscape on a voyage along a river destined for the ocean. Accept passengers to have them help you on your journey. Fight monsters, collect junk, trade the junk for fuel, use the fuel to travel to the ocean. You can play it in a web browser or download the game from gridbugs.itch.io/boat-journey . The…
I added stats like health, fuel, and daylight and display them in the game’s UI. There’s a hinting system that displays hints based on what tiles are currently on the screen.
Yet another day of working on procedural generation and I think I’m finally finished (the procgen - not the game!). I added a generator for the starting town, a swamp area, a flooded city area, and dungeons which are accessible from the city.
Another day of mostly working on procedural generation. This game is by far the most complex procgen project I’ve done. I’ve integrated the river generator into the game engine and added a couple of pools along the river which I’ll populate with settlements. There is also a small lake at the beginning of the river and an ocean where the game ends.
I spent this evening making a procedural generator for the shape of river and choosing points along the river to place settlements. While I iterate on procedural generation I’m working in a separate project to the main game so I don’t need to deal with the complexities of integrating the generated levels into the game while I’m also figuring out how level generation will work at all. Here’s the…
It’s the end of my first day of hacking on this year’s 7DRL. My game will be called “Boat Journey”. It’s about driving a boat along a river with the goal of reaching the ocean without running out of fuel or otherwise becoming stranded, while picking up passengers who give you additional abilities. I’m intentionally going for a very minimal graphical style this year since the past few years I’ve…
Games on the Nintendo Entertainment System play audio using a handful of tools within the device’s Audio Processing Unit (APU). The Delta Modulation Channel (DMC) is the most expressive such tool as it can play arbitrary audio data. Any sound you’ve heard come out of a NES other than variations on square and triangle waves, and noise, was played using the DMC. As its name suggests, the DMC can…
Floating points are a way of representing numbers based on the idea that the larger the magnitude of a number, the less we care about knowing its precise value. If you’re anything like me (until recently) you use floating points regularly in your code with a rough understanding of what to expect, but don’t understand the specifics of what floats can and can’t represent. For example what’s the…
For most of my life I took for granted that programs begin executing at an address denoted by the symbol _start (a single underscore, followed by the word “start”). Turns out it’s not so simple. Take this x86 assembly program that prints “Hello, World!” on Linux: . global _start .text message: .ascii "Hello, World!\n" _start: # print the message mov $ 1 , % rax # syscall 1 is write mov $ 1 , % rdi…
Rain Forest is a roguelike game about spending a few days in a forest, in the rain. Figure out what daily tasks you can perform to stay motivated to remain in the forest, and try not to get too wet from the constant rain and rising flood water. And above all, try to have a relaxing time. This game is my 7th entry in the 7 Day Roguelike game jam. Play or download Rain Forest on its itch.io page .…