• The blog has a new home

    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.

    New blog

    RSS feed

    Old blog

    Posts so far

    Read →

  • PCG32: The Perfect PRNG for Roguelikes

    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.

    (By the way, I …

    Read →

  • 2017 Year in Review

    This year I did a bunch of things, but one thing I didn’t do was blog about every single thing. Here’s a roundup of everything I missed.

    I made some games

    I made three games this year for Ludum Dare 38, 39, and 40: Rogue Basement, Power-Q, and Please, Come In. Their collective soundtracks contain five original songs.

    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 …

    Read →

  • From PoweRL to Power-Q: game jam to product

    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.




    Game mechanics

    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 …

    Read →

  • PoweRL postmortem

    Ludum Dare 39 fell on a weekend when I wasn’t busy, and I wanted an excuse to learn a bit about Apple’s game libraries, so I made another roguelike, PoweRL:


    Read →

  • Videos of old games

    I spent the day making some basic playthrough videos of some of my old games. Check ‘em out! You can find more info about them here.

    Most of these videos have some kind of disruptive sound.

    Bibble Biter (2005)

    Walaga (2005)

    Canvas Wars 2 (2005?, unfinished)

    There was a Canvas Wars 1, but the code is long gone.

    Whizbang (2005, unfinished)

    Artack (2006)

    You can actually download this one!

    Guy who catches on fire (2007?, demo)

    Tormegra (2007, unfinished)

    Elite Bungie Chopper Squadron (2008)

    Read →

  • The Design and Implementation of Rogue Basement

    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.


    Read →

  • Home audio with OS X and cheap consumer electronics

    The switch

    Read →

  • Blogging about iOS architecture at Hipmunk

    I wrote about the work I’ve been doing at Hipmunk over the past year over on over at the Hipmunk engineering blog.

    Read →

  • Sometimes they call me Slam Jamsen

    Salvage Operation EP album art

    Graffiti Labs is shutting down next month. I’ll be spending June looking for a new job (edit: found one!) and honing my audio engineering skills.

    As my first act of freedom, I’m releasing Slam Jamsen’s Salvage Operation EP!

    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 …

    Read →

  • I played drums on this EP

    The Nest EP album art

    My band The Nest just put out its first EP. Listen to it here!

    Read →

  • I played bass on this album

    Clarity in Hindsight album art

    I just returned from recording an album with SF local artist Anthony Presti. Check it out on Bandcamp!

    Read →

  • The New Dork Times

    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:

    The New Dork Times – Digital Edition

    Read →

  • We Dreamers postmortem

    We Dreamers is an abstract online sandbox that placed sixth in the Innovation category of Ludum Dare 26.

    Screenshot of We Dreamers

    Read →

  • Rendering Buildy’s satellite view: PhantomJS, Beanstalkd, Leaflet, and PIL

    Screenshot of Buildy

    A world in Buildy can be hundreds of square miles. I wrote about the combination of technologies we use to render and display enormous zoomed out world views on the Buildy Blog.

    Read →

  • One thousand users put 250,000 objects in Buildy in 18 hours

    Screenshot of Buildy

    We posted Buildy on Hacker News and it was on the front page for 17 hours. I shared some observations and experiences on the Buildy Blog.

    Read →

  • Space Train Postmortem

    Space Train logo

    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.

    Read →