I’ve started blogging at blog.steveasleep.com, hosted on write.as. I expect to keep the blog there going forward. This site runs on Pelican, which is great for making static sites, but I’ve been doing a much better job of writing consistently now that I can do it all from a web browser.
Roguelikes are games that, among other things, have a lot of procedurally generated content. To generate content, we need random numbers. And to get random numbers, we need a pseudo-random number generator.
Not only do we want random numbers, but we want predictable random numbers! We want players to be able to share seeds and see who does better in the same situation, while also giving people a completely fresh experience every time they play.
We can’t just create a PRNG with a seed and be done. If we use the same PRNG for both level generation and combat, for example, then our second level might change based on how many times the player got into a fight!
So we need to be clever about how we create and store our PRNGs, to ensure that the procedurally generated maps are not affected by anything that happens during gameplay.
If we use the PCG family of PRNGs, our job is a lot easier. There are many variants of PCG, but in this post I’ll be referring only to PCG32, the one that generates 32-bit unsigned integers and keeps its state as two 64-bit unsigned integers.
The only one I really dedicated myself to during Ludum Dare was Rogue Basement, and it shows in the ratings. The other two were experiments with frameworks and genres. But I did polish Power-Q for an iOS release, and you can get it now!
It feels good to hit a new personal best in game releases, because it means I’m more motivated than ever to take my coding to creative places. And the consistent quality of each game demonstrates how much I’ve learned about game design over time. Rogue Basement and Power-Q eclipse all ~15 other games I’ve ever made in terms of fun and polish.
I wrote some open source libraries
Early in the year, I was looking into ways to manage a local music collection and make playback control available to everyone on my home …
Power-Q is the polished, productized version of my Ludum Dare game PoweRL. They have exactly the same mechanics, but Power-Q has about 30 extra hours of effort invested into it. Before I send it out into the world, I want to reflect upon where those 30 hours went.
Power-Q is in beta on Mac and iOS. You can get the Mac beta on itch.io, but to get the iOS beta you’ll have to email me.
Power-Q is a turn-based game played on an 8-column, 6-row grid. The player is a robot with a health bar and a power meter. They can move up, down, left, or right. Each move drains power.
The level contains walls, enemies, powerups, and an exit. The overall goal of the game is to reach the exit 8 times. Each level has more enemies than the last. Powerups include health boosts, power boosts, and ammunition.
There are three kinds of enemies. They move in specific patterns (diagonals, up/down/left/right every other turn, and knight-style) and sap your health when they hit you. There are also “power drains,” which sap your power and disappear if you run over them …
This year I participated in Ludum Dare 38, a 48-hour game programming “competition.” I’ve been thinking about trying my hand at a roguelike for a while now, and it seemed like the perfect opportunity to give it a shot. I made Rogue Basement, a bare-bones, single-level game with ASCII graphics.
In this article, I’ll cover the game design decisions I made, how they affect the player’s experience, and a bit of how they’re implemented. The source code is extensively commented as well.
This is a collection of “bedroom tapes” made between 2005 and 2009. The popular vision of a budding high school rock musician is a guitarist sitting on a bed writing bad love songs, but in my case, I was at a desk with a low-end Mac and a MIDI keyboard, sharing the room with two more computers and a treadmill, writing bad video game soundtracks.
Since the rise of the 4-track, the cost of making decent home recordings has fallen at different rates for different genres. As a so-so piano student and early-to-mid-‘00s Mac user, my options were limited at first to MIDI editors. When Apple’s Garageband program came out, and I finally got a copy, I discovered the world of software synthesizers.
Video game development was my other major hobby at the time, so it seemed obvious that I should write my own soundtracks. (Otherwise, I wouldn’t have soundtracks at all, given my $0 budget …
I did the best writing of my life in 1997 when I was eight years old, sitting at an old PC with my friend Eric Drury to write the New Dork Times. Although it ran for only nine issues published between 1997 and 1999, its biting social commentary remains as relevant as ever.
Earlier this year I came across my personal archives of all nine issues of the New Dork Times and decided they were worth two hours of attention to bring to a modern digital audience. I now present to you an online time capsule from 16 years ago, lovingly typeset in its original Times New Roman:
With the end of a semester just past, my course projects are all bubbling up in various states of completion. One of these is a point-and-click adventure game called Space Train: Terror on the Mustachio Express, developed by a team of students from the Cleveland Institute of Art and Case Western Reserve University. Its technical components include an event-driven level scripting system, characters, items, inventory, dialogue, and more. The engine is written in Python using my game programming weapon of choice, the pyglet library. The plot:
Inga Borga is a poetry-loving senior citizen. One of her favorite authors, Stanislov Slavinsky, is reading his poetry live on the nearby Planet Deux, a short hop by space train from Inga’s home. She wants nothing more than to see Stanislav in person, so she catches the Mustachio Express to Planet Deux. Little does she know it will be a bumpy ride…
Sounds grand, right? We thought so too, but in typical student fashion we failed to account for one thing: adventure games take a lot of work to make. As a result, the game is only about twenty minutes long. Even so, we all learned from the experience.