The Mystic Western Game Jam

Programming, Video Games

El Viaje Misterioso

Austin’s independent games collective Juegos Rancheros hosted another game jam this summer, and this year the theme was “mystic western”.

I hadn’t initially planned on participating, since I was already rather busy preparing for some summertime travelling. However, I was struck with a fun game idea that really fit the theme and scope. I wanted to make a game based on a specific scene from a 1997 episode of The Simpsons, where Homer hallucinates a mysterious voyage through a desert landscape under the influence of extremely spicy chili peppers.

For the gameplay, I took inspiration from the indie platformer Knytt Stories by Nifflas. It has a very clean, blocky, simple aesthetic that seemed feasible to imitate, even with my limited art skills. I also wanted to emulate its low-key pacing and its focus on exploration over combat. Having enemies to fight wouldn’t fit the vibe of the source material, where the mystic desert was mysterious but not threatening. Ultimately, I managed to translate almost every beat of the five minute hallucination sequence into some sort of playable experience (with the notable exception of the snake, which sadly was cut for scope.)

Mystic Western Jam - Notebook Sketches

Developing a platformer was also a good excuse to apply some of the lessons I learned from Steve Swink’s “Game Feel”. The book breaks down and analyzes the ways in which designers manipulate game physics in unrealistic ways to make platformers feel good. For instance, it taught me to increase gravity when the player is descending to avoid feeling floaty. I also implemented variable jump height, input buffering, and late jumping based on the lessons from this book.

You can download El Viaje Misterioso for Windows and OSX here:

Download from

Download (Windows)

Download (Mac OSX)

Source Code (GitHub)

At the end of the game jam, I was very proud to find out that my entry was one of the 25 games selected for the Mysteric Western Arcade at the Marfa Film Festival. I sadly couldn’t make it out for the event, but I hope people got a chance to play it there!

→ No CommentsTags:  ·  · 

Yharnam Metal Hypernym

Internet, Programming

To start off 2016, I thought I’d take a moment to write about some of the new Twitter bots I assembled last year. In my last post on the subject, I indicated that I was reluctant to continue making bots because it was distracting me from larger projects. However, since lately I’ve been focusing hard on a big exciting endeavour, I’ve found that making bots has continued to be a relaxing creative outlet in my downtime.

Yharnam Notes is a small tribute to Bloodborne, one of my favourite games of 2015. The game’s asynchronous multiplayer features include the ability to leave notes for other players using templates of words and phrases. These permutations can often be inadvertently lyrical, as Natalie Zed explored in her Bloodborne poetry. Inspired by this, I made a bot that constructs random messages using the vocabulary of the game’s note system.

Hypernym Bot was inspired by the folk proverb “For Want of a Nail”. I wanted to find a way to generate the same structure of text programmatically. Fortunately, Wordnik maintains a list of hypernyms (words that are more generic or abstract) for each word in their database. This made it simple to start with a random word, then iterate up the chain of abstraction of few times.

This is one of the silliest ideas that I’ve actually followed through on. Somehow my errant thoughts on @EveryWord and heavy metal clichés intersected, and led me to render every word in the English language in a heavy metal font. Tweeting a new word every four hours, @EveryMetalWord will complete its task by 2065.

You can find the complete list of my Twitter bots here. Wishing you all a happy new year, may your 2016 be programmatic and random!

→ No CommentsTags:  ·  · 

Stir Fry Blues

Programming, Video Games

Stir Fry Blues

Last year I made a little game for Space Cowboy Jam with my good friend Matthew Breit. Inspired by one particular scene from Cowboy Bebop, we decided to make a silly cooking simulator. He modeled some vegetables, I coded some menus, we wrote some goofy dialogue, and slapped together Stir Fry Blues in a couple of weeks.

Sadly, the version we made within the time constraints of the game jam was pretty lousy (we placed 45th out of 60 overall.) It had no audio, the menus were ugly, and the NPC dialogue was repetitive. Most egregiously, we still had a placeholder screen for the cooking animations. After the jam, we simply left the project in unfinished limbo for months.

Over the Christmas holidays, I took a pass at improving Stir Fry Blues to the point that I would no longer be ashamed of it. I cleaned up the UI, added some creative-commons audio, and wrote logic for the NPCs to recognize over 30 recipes. To make the cooking animations, I took what we already had (3D modeled food) and simply added physics. Watching a loaf of bread boiling in a pot adds immensely to the game’s humour.

You can play Stir Fry Blues in your browser with the Unity Web Player, or download it:

Play Stir Fry Blues (

Download (Windows)

Download (Mac OSX)

Though I’m quite proud of the final product, making a game that’s entirely menu-driven and has lots of custom content isn’t actually much fun. Writing the data structures for the ingredients (their prices, taste values, expiration, etc.) felt like I was developing CMS software. At least I learned a lot about C# and Unity while doing so! For my next side project, I’d definitely prefer to tackle a more mechanics-driven game.

Tags:  ·  ·  · 

So Many Twitter Bots

Internet, Programming

Since making @HoroscopeBot and @EveryBookBot, I’ve been on what you might call a bot-making rampage. I’ve really enjoyed tinkering with tiny scope coding projects that can be finished over a weekend, as opposed to my game-making side projects that often take months. Here, briefly, are five new bots I’ve assembled over the last few weeks:

@RandomChessBot plays random chess moves until it finds a checkmate, then tweets the final board state. This bot was particularly easy to code thanks to Jeff Hlywa’s excellent chess.js library, which provides a list of legal moves and exports the board state in ASCII. It’s worth noting that the majority of random chess games do not end in checkmate, but rather in an “insufficient material” draw state (the bot disregards these results.)

My friend Peter Javidpour made an amazing website called See Hear Party, which plays GIFs in time with the beat of a song (using Giphy & SoundCloud). As soon as he demoed it, I immediately wanted to help promote it with a Twitter bot. @SeeHearPartyBot pairs three random GIF search terms with a random electronic song from SoundCloud, occasionally creating an affecting juxtaposition or serendipitous harmony. This was also the first bot I implemented in Python instead of JavaScript.

@GameOfLifeBot tweets GIFs of Conway’s Game of Life simulated for 100 generations from a random initial seed. I used Tristan Hearn’s game of life library; since his implementation uses matplotlib, it was easy to export each generation as an image using various colour maps. I then used images2gif to assemble the individual frames into an animated image. This bot has inexplicably been my most popular bot since @HoroscopeBot; maybe people just like GIFs?

I noticed that Twitter has an official account that follows every verified user (a.k.a. “key individuals and brands”). This gave me a silly idea for a bot that tweets the out-of-context descriptions from the bios of random verified accounts. Fortunately this concept only took a few hours of coding to get up and running, and @VerifiedBioBot was born.

My most recent Twitter bot is @TinyCrossword, and it’s a personal favourite. It generates tweet-sized crossword puzzles, drawing clues from Simple English Wikipedia. For a tweet with an image (117 characters remaining), each clue can be no more than 36 characters long. It creates a new puzzle every day at noon PST, then tweets the solution a few hours later. This bot also scans the replies it receives, and will credit the first person who solves the puzzle correctly (sadly, nobody has yet to do so). I’m glad that I finally came up with a bot idea that was interactive!

These five new bots bring my total to eight. Sadly these will also be my last, at least for now. I’ve been using these short development cycles to procrastinate one some of my larger side projects. Making bots has been extremely entertaining and valuable, but I’m ready to get back to some meatier long term endeavours.

Also, if you’re interested in bots, be sure to check out the livestream of Darius Kazemi’s Bot Summit 2014 this weekend.

Tags:  ·  ·  · 

More Twitter Bots

Internet, Programming

Tweets by @EveryBookBot

Since I released @HoroscopeBot earlier this summer, I haven’t stopped thinking about Twitter bots as a creative medium. Corny “I could make a bot for that” ideas kept popping into my thoughts. After reading this appreciation of museum bots, I decided to try my hand at making something similar for a different catalogue.

This led to the creation of @EveryBookBot. Every hour, it takes a random word from Wordnik and tweets a book on that subject from the Google Books API. The goal is to mimic the serendipity of browsing a library or a friend’s bookshelves. Books cover such a delightfully broad range of topics, everything from crackle glass and Spanish fashion to concise philosophy and thumb wrestling. The more obscure subjects fascinate me; who loved this thing enough to write a book about it, and who was their audience?

Tweets by @EveryGameBot

Its sibling @EveryGameBot isn’t quite as diverse, but perhaps that’s to be expected from a younger medium. This bot tweets a random video game or board game every hour, drawing data from the Giant Bomb and Board Game Geek APIs. Highlights so far include a political game from 1894 and an obscure fighting game best remembered for its FF7 tie-in. Exploring old esoteric games feels particularly worthwhile in a culture that’s too often fixated on the new and popular.

On the technical side, both bots resize and tile the book/game covers using a JS ImageMagick library. The cover tiling is done to reach the 440×220 image size that Twitter prefers, though I rather like the aesthetic effect as well. I’m also using a simple PostgreSQL database (which Heroku conveniently provides) to ensure the same item doesn’t get tweeted twice. The source code for both bots is available on Github.

Tags:  ·  · 

© 2007-2016 Matthew Gallant, hosted by A Small Orange, powered by Wordpress.