Monthly Archives: November 2014

  • Hi folks…. this week I’ve been rushing to prepare my home in the woods for the storm, and I apologize that this post is a few days late. Now that I’m done cutting, splitting, and stacking firewood, tying down tarps, and shoveling walkways, I’d like to get in the spirit of Thanksgiving and talk about some open source tools for which I am very grateful… valgrind, sqlite3, and SDL.

    Maine Blizzard

    A blizzard arrives Found Time Games headquarters. (i.e. My House)

    1) Valgrind is an amazing tool for C and C++ programmers. While it has many capabilities, my favorite way to use it is to check my game for memory leaks. Even a basic 2d game engine can get complicated really quickly… Jumpsmith loads a bunch of data from the hard drive, and valgrind can see if any objects should have been freed from memory when the game closes. If you are just getting into programming in C or C++, you should set up valgrind right away. It’s free, and it can save you from a lot of trouble. Here’s the command I use when I do a leak check with valgrind on a command line:

    valgrind -v –track-origins=yes –leak-check=full –show-reachable=yes ./game > valgrind_out 2>&1

    If you run this, you’ll want to replace ./game with the path to the executable for your game. The text file that it spits out will be called valgrind_out. Your game will be slow during the test, but you’ll get a detailed report of exactly which lines of code left a memory mess.

    Valgrind's logo... maybe they're saying that they make memory problems as defeatable as paper dragons?

    Valgrind’s logo… maybe they’re saying that they make memory problems as defeatable as paper dragons?

    2) Sqlite is a serverless, zero-configuration, transactional SQL database engine. It is nearly ubiquitous… all Android and iOS devices have it installed by default, as well as Mac and Linux. It is a pain to use CSV (comma separated value) files for game data. Super Pooper used CSVs, and it sucked when I wanted to add or change features. I learned from my mistakes; all of the joystick data, game worlds, and player profiles of Jumpsmith are stored in sqlite databases. As I’ve evolved the game mechanics, it has been really easy to update the game world files with a nice little SQL statement. Also, if players want to make wacky scripts that edit Jumpsmith levels or create procedural content, most scripting languages have a sqlite3 API. Sqlite3 is public domain, so you can use it for commercial software.

    Sqlite3 Logo

    As they say, “Small. Fast. Reliable. Choose any 3.”

    3) Simple DirectMedia Layer is an open source gaming library. It provides a layer of abstraction between you and the user’s OS. You can use SDL functions to create a window, get mouse, keyboard, and joystick events, play sound, load images, do threading, etc. It has been used by many games, such as:





    -Cave Story

    -Don’t Starve

    -Mark of the Ninja

    -Super Meat Boy


    -Trine 2

    -Rogue Legacy


    Note: I made this list by searching the Games directory on my Linux laptop for SDL files. Some of these games have other versions that do not use SDL.

    SDL2 is the latest major version, and it runs on PC, Mac, Linux, iOS, and Android. That’s right- you can write a game in C or C++, and then recompile it for 5 major systems, and probably not have to change a line of code. I’ve seen a video of a PC game that was recompiled for iOS, and SDL interpreted the screen touches as mouse events, and the game was playable without changing any code. Of course, if you want to get a little more in-depth with handling mobile-specific stuff, SDL can handle events like Low Memory, App Terminating, entering foreground, etc.

    SDL Logo

    SDL. It makes the games do.

    I think that making your own engine with SDL can be really beneficial in the long term- Jumpsmith will be released on Windows, Mac, Linux, and Steam OS, and I won’t have to pay royalties to a game engine company like Unity, which can be expensive.

    UPDATE: Jumpsmith is available now!

    Game porting guru Ryan Gordon has done a few talks where he discussed these tools and several others, you can check them out here and here. I hope that this information is useful to you on your next game!

    So… you like it when I tease you?

  • It’s been a joyful experience to watch people play Jumpsmith. Sometimes, I am quite surprised at which features pull comments out of the player. Small, easy-to-implement details that have little or nothing to do with the mechanics of the game can make a big impression.

    When I was creating a platformer engine back around February of 2014, I made a function that renders a little floating message on the screen. The message slowly floats upward, and erases itself after a couple seconds. I think I set it up originally for error messages, or for debugging, I don’t remember. At one point though, I got an idea: “What if I made the game display a random wise-ass comment every time the player dies?”

    Meet Meat: A rage-quit game from Found Time Games

    Stop dying? I wish I thought of that. Thanks for being helpful and not annoying.

    My friend, William Kinrade, and I used the engine to create a thumb-melting platformer of insane difficulty called “Meet Meat on the Street” for a cyberpunk game jam. Needless to say, anyone who played the game would get to see plenty of death messages. We had a blast coming up with a big list of snarky discouragement. We mined a thesaurus, movie quotes, song lyrics, and even TV episode names to populate our list of death idioms and taunts. Some of my favorites were “Should have had life insurance”, “Always look on the bright side”, “Try a Different Strategy”, and “Again, with feeling”.

    I didn’t think much of it at the time, but those messages happened to be a favorite feature for everyone who tried the game.

    Meet Meat on the Street taunts you as your thumbs bleed.

    Each purple fireball is another opportunity to be a bucket kicker.

    Jumpsmith Game Feel Free to Win

    If you like to get teased, I guess losing is winning.

    When I rewrote and polished the game engine for my upcoming game, Jumpsmith, I was sure to keep the taunt messages. I’ve given myself very specific guidelines of what is required for a taunt. I decided that it has to be a phrase that has a word that rhymes with or has alliteration with “fail” or “lose”, with the appropriate substitutions. Some of my personal favorites in this incarnation are “Ahab and the White Fail”, “The Moody Lose”, and “Encounter at Failpoint”.

    Jumpsmith Game Fail Order Bride

    Fail order brides are not quite as popular as the ones that come from Russia.

    Also, this time around, the taunts are read from a text file. Players who pick up Jumpsmith can make their own lists of taunts. This goes along with the philosophy of the rest of the game: I want people to be able to customize their experience as much as they’d like. It’s super easy to make levels, add custom tilesets, and add custom characters. My goal is to encourage players to be creative, and to give them as many tools as possible to have an amazing gaming experience.

    Follow me for updates, humor, and random observations:

    UPDATE: Jumpsmith is available now!

    Twitter: @foundtimegames

    Facebook: Found Time Games

    Jumpsmith Happy Fails to You

    Happy Fails to you…. until we meet again.

    How to design a level.

  • I recently added some new mechanics to Jumpsmith, so now it’s time to make some new rooms! I want to show you how I go about designing a level.

    Animated gif of Jumpsmith level creation

    Animation of level creation

    The first thing I do is add a checkpoint. While designing a new level, I play the heck out of it, and I end up falling on many spikes and jumping directly into many fireballs. With a checkpoint, I don’t lose any time running back into the test area.


    Next, I try to think of a new way to use the mechanics. The shooters, which are little cannons that launch fireballs and other various objects, can be set to shoot whenever a player jumps. I’m going to use that feature in this room, so I’m going to make some spike tiles that obstruct the player’s path across the room. They’ll have to jump to get over the spikes, and that will trigger the shooters.

    Jumpsmith spike towers

    I hope you like to jump.

    I think it’ll be cool if the shooters in this room are shooting towards the player, so they’ll have to go “upstream”. In this screenshot, I’m using the directional pad to tell the shooters to launch fireballs to the right, towards the checkpoint. Notice that the level editor tells you exactly which buttons to use on your game controller to make the level.


    To shake things up a bit, I’m going to make the top shooter launch a spike boulder instead of a fireball. The spike boulders will shoot up and to the right, and gravity will make it fall down in a nice arc.

    Jumpsmith spike boulders

    You can get some interesting results by mixing shooters with different bullet types.

    Time to test the game! In Jumpsmith, you can press ‘M’ or the back button on your controller to instantly swap between editing and testing a level.

    Jumpsmith first test run of new level

    This screen is far harder than it looks, even for someone who is working on the game 8 hours a day.

    The test went well, but I still want to add one more object to really tie the room together. I haven’t put any nice oriental rugs in the game, so I’ll use a spring. The spring is going to be interesting because it’ll allow players to get the effect of a jump without triggering the fireballs and spike boulders. As a bonus, it’s fun to see the spike boulder get launched off of the screen by the spring.

    Jumpsmith Adding a spring

    The spring really ties the room together, dude.

    The basic idea of the room is done at this point. If I was making a game just for myself, I could probably call this room done. However, I’m making this game for other humans. They might find this room to be too hard, so I’m going to raise all of the objects two squares so they can just run underneath it and get to the next room if they get frustrated.

    Jumpsmith bypass

    I think it’s nice to give the player an opportunity to skip a tricky room.

    Of course, I still want to reward the players who can get by the trap, so I’ll add a coin and make a wall that is just high enough to keep out players who skipped the obstacles. I’ve also added another spring, so people can get the coin without triggering the fireballs.

    Jumpsmith adding escape spring

    One more spring to give the players a safe exit…

    The final step is to pretty up the room. I can change which graphic is drawn to each tile without affecting how players interact with it. At this time, Jumpsmith tilesets contain 49 possible graphics for each kind of square. Also, there’s nearly 150 different tiles for foreground art. Most of the foreground art is set up to interlock and/or tesselate; that’s how I made the big torn banners on the top of the screen, and the columns at the bottom of the screen.

    Jumpsmith finished room

    The room looks much more polished once it has a few different colors.

    That’s it for now! I hope you enjoyed this. Jumpsmith will be available soon for PC, Mac, and Linux. You’ll be able to make levels of your own, and have up to four people explore them at a time with local multiplayer. Be sure to follow this blog, twitter @foundtimegames, and Facebook for updates!

    UPDATE: Jumpsmith is available now!

    Mechanic Evolution

  • I’ve been working on my platformer/game engine for about 10 months. At first I set up stuff that I knew it would need, like a user friendly level editor, menus, basic physics, joystick stuff, etc. As all of those things have become implemented, the pressure has increased to come up with good mechanics.

    So, how does one come up with a good mechanic?

    Some people who are smarter than me have said things like:

    “A good video game presents a series of interesting choices for the player to make.” -Stephen Totilo of Kotaku.

    “As a designer, you want to explore each mechanic and make sure it can be enjoyed in 3 or 4 different ways” -Edmund McMillen, creator of Super Meat Boy and Binding of Isaac

    “Mathematicians talk about beauty. They seem to agree that the shortest theorems that carry the deepest consequences are the most beautiful.” -Mark Ten Bosch, creator of Miegakure

    How can these concepts be applied to a game?

    Well, one of the first objects that I made in the platformer was what I call a “Shooter”.

    First Iteration: The shooters could be placed anywhere on the screen, they would shoot fireballs that would move in a predetermined velocity. Each shooter has a timer, and you could adjust the amount of time between shots, and adjust the amount of time it would wait from when the screen loads to when it does its first shot.

    The shooters were implemented very early in development...

    The shooters were implemented very early in development…

    This is a very basic mechanic that is almost ubiquitous amongst platform games. It felt nice to get that implemented, but I knew that more could be done with it. What if I changed the properties of the bullets?

    Second Iteration: Bullet types! What if the projectiles have weight? I did make some basic physics stuff already. I made spike-covered boulders that were affected by gravity as soon as they were launched. Not long afterwards, I had implemented springs. If an object touches a spring, it gets launched in a specific direction. What would it be like if the shooters could launch springs? Now you can have one shooter launching springs, and another launching boulders. The launched springs could either be weightless (like fireballs), or weighted (like boulders). The last bullet type that I added was a moving platform. They also can be weighted or weightless.

    Spike Boulders go right, springs go left. Cross carefully.

    Spike Boulders go right, springs go left. Cross carefully.

    So…. the shooter can launch 6 different kinds of projectiles. What else can we do to riff on this idea? So far, the shooters always launch objects in a predetermined direction….

    Third Iteration: Rotation! I am no genius, I’m just a peasant who lives in the woods and plays guitar. Luckily, math geeks love to explain math on the internet, so I was able to figure out how to rotate vectors by arbitrary numbers of degrees. Now, any shooter can be set to rotate 15, 90, 180, or 270 degrees after every shot. While I was banging my head against the wall, trying to get the math to work out, I stumbled on a really fun way to do rotation….. player position! The shooters can be set to rotate as you move left and right, or up and down.

    The difficulty curve can be more like a spiral.

    The difficulty curve can be more like a spiral.

    At this point, you can see how each mechanic creates nearly exponential new possibilities. However, there’s still more that we can do.

    Fourth Iteration: How does the shooter know when to rotate, and how does it know when to shoot? In the previous iteration, some shooters were able to rotate based on player movement. In a basic platformer, the basic ways a player can interact with the world are:

    • Move Left/Right (X axis motion)
    • Climb/Jump/Fall (Y axis motion)
    • Touch a switch

    So… we had just tried tying rotation to X and Y axis motion…. what if we make it so the shooters only launch an object when the player jumps? What if we make it so the shooters only rotate when a player jumps?

    Fifth iteration: Shot and Rotate Triggers. A shooter can be set to shoot and/or rotate based on its timer, on the room’s timer, whenever a player jumps, whenever an object collides with it, or when a switch is activated.

    Dude, if you stop jumping, there will be less fireballs.

    Dude, if you stop jumping, there will be less fireballs.

    I’m hoping that people like Stephen Totilo will enjoy the game, because he’ll be able to make decisions about rotating and firing the shooters as he plays. Maybe Edmund McMillen will appreciate seeing a basic shooter mechanic get “juiced” in multiple ways. Perhaps Mark Ten Bosch will appreciate the multitude of wacky rube-goldberg consequences that can come from this single object in the game.

    You can judge for yourself very soon if this is a good mechanic or not, I’m hoping to release this game in the next few months. There is a big metroid-vania-esque world that you’ll be able to explore, and you will be able to make and share your own worlds very easily.

    UPDATE: Jumpsmith is available now!