Tuesday, December 11, 2018

Gamanteau: How Not(?) to Do a Month-Long Game Jam

I have a lot of blog posts that have been left in the "draft" state on here, left either unfinished or just deemed unworthy of publishing.  Earlier this morning I managed to get one of those out the door, a small analysis on level design in Hat in Time, in hopes that it'll help me prepare an even larger piece on the project I've been working on for much of the year.  I'm putting a bit of effort now, before the end of the year, to empty out my head and reflect a bit on my year as a hobbyist game developer.

Scoping Down

Last month, Github announced the theme of their annual "Github Game Off", a month-long game jam that encourages participants to use open-source tools to develop their games.  Last year's Game Off resulted in the birth of the independent studio Monument Games, a team of college student who were passionate about their craft and looking to try something new.  I had joined the team as a designer, and pitched a game idea about rolling rocks down a hill.  To our surprise, the game was pretty popular among the participants and judges of the jam, and would go on to win 2nd place in the "Overall" category.

Spurred on by this recognition, we stuck together and continued development on the game, eventually submitting it to other competitions such as the IEEE Gamesig Showcase and the Casual Connect Indie Prize in London.  Things were going really well.  While we didn't exactly find financial success through our game, it gave us the confidence to continue on forward to our next project, and bring on some new people in the process.

Then, my life changed.

Ellie was born on August 10th, the same day as my 5th anniversary with my wife.  She has been an absolute blessing in my life, and is giving me a whole new perspective on things.  But my new life as a father isn't easy, and to this day I'm still getting used to it.  About a month ago, I backed out of Monument Games in order to better focus my efforts on my job and my daughter.  I had, of course, hoped that I could still dedicate some time to my newfound passion in game design.

Enter the 2018 Github Game Off.


As life currently stands, I have ~1-2 hours of time every weekday to dedicate towards my own hobby projects.  If I'm lucky, I might be able to grab a few extra hours at home on a Saturday afternoon.  Having this small amount of time available meant I had to choose my projects very carefully; I opted to stick with 3 options: long game jams (longer than 2-days), modding, or learning new tools.  I was excited for the Game Off to roll around, but I was already knee-deep in a modding project and not too concerned with actually submitting anything.

The theme was announced, "Hybrid", and I took note.  No ideas came immediately to mind, so I wrote it off and forgot about it.  Some time later, as I was reading some comments on reddit, I came across a bot that would combine two-word comments into a single word.  It had suddenly occurred to me that this was a game I had often played with my friends; we would, for some inexplicable reason, try to combine two words that one of us would use in casual conversation.  I hadn't realized that this creation of new words had a name: Portmanteau, what could essentially be considered a "hybrid" of two words.  Perfect!  I had an idea for a game, that would be small enough to accomplish on my own with the minimal free time I had available to me...  Sure, the jam had already started, but I should have the time to complete something this simple, right?


The idea was simple, from a source of words, pick two at random and display them on screen.  The player would be free to enter whatever they wished using a keyboard-like input, which they could then save to a "favorites" board.  This favorites board, however, would only hold a limited number of entries, so they would have to choose their absolute favorites and toss away the created words that they felt were no longer "good enough" to keep.

That was it.  3 screen, including the title.  All I would really have to worry about was making a pretty-yet-functional user interface, something which I didn't really have much experience with before.  But something about the open-ended results of this project amused me.  I had recently read Douglas Wilson's writings on "intentionally broken" games, and hoped to emulate that in some way: creating a game that pushed more towards a form of festivity rather than competition. 

Simply the act of creating new words is a silly but entertaining practice, improved even further if you attempted to say a new word out loud.  In addition, being provided with two random words that you might not normally see side-by-side could potentially present an opportunity for joke entries rather than new words.


When it came to prototyping or making small-scale games, I had fallen in Love with Pico-8.  It felt like the natural choice for this project, based on scale alone.

So what if it:
  • Doesn't have keyboard support
  • Had limited memory
  • Could only store 4-byte integers as save data
I could work around all of this, right? I mean, it's just a simple text game...

My starting point was to find a way to enter text data, and thankfully, other Pico-8 enthusiasts had already accomplished this for me.  Their code for simple, virtual keyboards were freely available for others to use;  I figured I could simply hack one of these keyboards to better serve my own concept.  I started by taking afburgess's PicoBoard cartridge, and replacing the functionality of the number and entry keys with a key that would re-shuffle the words presented to the player, and a "favorite" button that would take the new word combination and transfer it, as well as the player, to the "Favorites" screen.

After establishing a list of  words that would be chosen at random, and transplanting the code from the PicoBoard cartridge, the next step turned out to be the biggest: finding a way to save these words to memory, so the player would have a persistent scoreboard every-time the game was loaded.  As the Pico-8 console didn't save strings directly and relied on 4-byte numbers to be stored in specific addressed, I had to try to find some way to encode and decode the words that the players would try to save.

Working in 1 hour intervals when trying to solve a programming problem doesn't help much.  After some trial and error as to how to accomplish this, my motivation wore down, and eventually dropped the game altogether and turned back to my mod project.

New Tools

The silliness of this idea hadn't left me completely, however.  I still enjoyed pressing the "shuffle" key in the prototype and trying to come up with new words with what I was given.  Approximately 1 week before the end of the jam, it hit me:  Why can't I just use HTML?  After all, the game is entirely text-driven, and I had a little experience in the language.  Unfortunately, I had never touched Javascript before, but I had the opportunity to try and learn something new.

It took a bit to get the hang of the programming conventions and how HTML and Javascript files reference one another in code, but after a few coding sprints in the morning before work and on my lunch breaks, I was able to get something functioning.  To accomplish what I was really aiming for, however, I needed to do a bit of redesign.

New Design

As I only had a week left, I needed to re-think some of the aspects of the game. A lot of the changes the submitted prototype saw included added features that HTML coding made easy.  For example, adding a simple "tip" below the word submission field to encourage players to vocally interact with the game seemed like an obvious choice, even if they chose not to use it.

At one point or another, I had the idea to offer up "bonus points" if the player could use their made-up word in a sentence.  It wasn't required, but it proved to add an element of challenge to the game that could produce even more humorous results than the created word itself.

The open-ended interaction of typing in a word and sentence was still essential to the experience, but what really needed to change was the idea of a "favorites" board.  While I technically could have set up a table that utilized HTML's localStorage capabilities, or possibly attempt to set-up my own server to store this data, another idea came to mind: Twitter.  By utilizing hashtags and Twitter's capability to generate "intent" tweets from Javascript, I could use it as a way for players to share their own created words.  Perhaps if the game generated enough attention, the use of likes or retweets could even be used as a sort of "scorekeeper", where the community at large could determine the best made-up words that the players were tweeting out.  Hopefully, by using a unique enough hashtag that could also serve as the game's title,  could keep track of player creations.  Hence, "Gamanteau", a portmanteau of portmanteau and game, became the name.

As an added bonus, adding the capability to tweet out results added a sense of accountability.  The horrific thought had occurred to me that the open-ended nature of player interaction could be a doorway for offensive material to be created and shared.  I briefly attempted to establish a sort of "text-filter" that would reject any submissions that contained language that could be considered harmful or offensive, but I eventually accepted that I lacked the Javascript knowledge to create something that would be robust-enough to avoid misuse.  My hope lied in the idea that twitter users would be holding themselves responsible for what they chose to tweet out to a public audience when playing the game, but I did my best to remove any words from the pre-defined random word list that might present an opportunity for offensive jokes or material.


The game has been up for about 10 days as of now and frankly, there's not much to report.  As it stands, I am the only one on twitter to have used the "gamanteau" hashtag.  At the time of writing, 27 people have at least viewed the game page for Gamanteau, while 7 people have rated it for the Game Off.  I won't find out those ratings for another 10 days.  Given the practically throw-away mentality of the development of this game, and the fact that it's really more of a word game than a "video" game, I can't say I'm too surprised at the lack of activity.

After all though, this is what it can be like to develop games as a hobbyist; I had the opportunity to try something new, something I enjoyed making, and I learned something new in the process.  Had I taken the time to consider my options for tools to use, rather than simply jumping into what felt familiar, I might have had more time to develop this little game into something with a bit more polish.

Even if no one really plays the game as I meant it to be played, I still consider this a win.  There are some incredible games that have been entered into this jam, I highly recommend you head over to itch.io and play some of them!

Next post will probably cover my mod project (I hope to have it done within the next week or so) but don't expect a post until early 2019.

Until then, Happy Holidays!

UPDATE: Alright, I peeked.  248th place out of 327 games?  I'll take it.

Spaces in Time - Part 2: Time Rifts Continued

Earlier this year, I submitted my ice-themed time rift to the Steam Workshop, and I was rather surprised not only to see how many people have viewed and downloaded the map, but also left positive reviews.  At the time of writing, the map has a 5-star rating, with 944 players leaving reviews and 1,556 players being subscribed to it (plus, 18 favorites!).  This is rather surprising, considering how little pre-planning went into the map, and the fact that it was my first attempt at a mod for the game overall...

Application (Continued)

Looking at some of the notes and screenshots in my previous post, not much had really changed.  I did want to place more effort in creating something that resembled a difficulty curve, rather than just haphazardly placing obstacles in hopes that they would create something interesting.  Overall, I stuck to the use of the 4 main obstacles (rotating ice cubes, rotating pie-shaped platforms, slides, and grapple hook points), but the way they were presented to player was altered slightly.  Where the start of the rift had 3 rotating cubes originally, the later revision replaced them with 2 static platforms and a singular rotating cube, as a means of introduction to the obstacle.

This idea was also applied to the spinning gears, which would spin at a faster rate later on in the rift, and the pie-shaped platforms, which would be missing additional pieces as the player got closer to the end.

Difficulty curve aside, much more of the time and effort went into creating a course that offered fluid navigation, and placing aesthetic elements (lighting, particles, decals) to support the chosen theme.  Thankfully, the base set of assets featured in the tool set allowed me to create a setting that felt very much like a "grimy" industrial freezer.

I would very much like to update this map in the future with ice physics, if I manage to take the time to learn how to create customized volumes within the UDK.  As it stands, there are no means for modders to create flat slippery surfaces, unless they manage to code it themselves.  There is currently a volume that will force the player to slide down a slope that is too step to stand on, and it may potentially offer some solutions to simulating the feeling of walking on ice.

Until then though, I'm going to move forward with my level design studies into what are referred to as "Purple" Time Rifts.

Purple Rifts

Purple Rifts are sub-levels found within each chapter that are typically used to help tell stories about key characters or settings.  They are structured quite differently from Blue Time Rifts amd regular chapters in that they have their own sets of sub-levels and a unique collection system, more similar in style to the collect-a-thon games of the 90's.

Rift-Specific Collectables

Aside from from the green and red "pons" that the game utilizes for currency and health (respectively), Purple Time Rifts introduce "Rift Pons" and "Storybook Pages".  Rift Pons must be collected in order to proceed through each rift's sub-levels, and are spread out among a map, typically at points of interest or after particularly challenging action-paths.  Storybook Pages, on the other hand, are entirely optional collectibles that are well hidden in each sub-level.  Each page contains an illustration that is revealed once the level has been completed, offering additional details to the story that the level's environment may not have been able to reveal.

This collectable system is similar to the one that would be found in Banjo-Kazooie, albeit on a much smaller scale.  Rift Pons reflect Jiggies in their importance and difficulty to achieve, while Storybook Pages reflect Mumbo Tokens in their rarity and placement.  Players will often have to search every nook and cranny in order to find and collect all of these pages, while Rift Pons are usually a clear goal that the player is actively in pursuit of.

Example Storybook Page location, from imgur.com user soviam.

However, while the collection of Rift Pons are required to progress, it is worth noting that the number of Pons required to open the next Rift Gate is often less than the number of Pons available in each sub-level.  This allows some freedom of choice for the player, as they can "bank" some Pons to use in a future sub-level if there future are challenges they choose to avoid.  This was a common design choice in previous 3D-Platformers, as it encouraged back-tracking through previous levels, should players get stuck when trying to progress in levels later on in the game.  However, in the case of these Purple Rifts, progression is a one-way street, and the collectables are self-contained; Rift Pons and Storybook Pages have no impact on the game outside of the level.

Rift gate displaying number of "Rift Pons" required to open.  Clearly visible for the player to reference while exploring.

Environmental Story-telling

"Purple Time Rifts are created when a time piece crashes into a person, causing the rift to be themed around them. These rifts lead to a strange dimension where the world resembles the chapter they can be found in." - Hat in Time Wiki

The above quote, found in the game's wiki pages, provides a little more context for the purpose of these rifts and the reasoning for their appearance.  As previously mentioned, the Storybook Page collectibles found in these rifts are used to help further tell the story of key characters in the game.  However, unlike the "Blue Time Rifts" we explored in a previous post, Purple Time Rifts have much more variety in their setting, reflecting the environments of the chapters they are attached to.  This can be seen by each rifts use of familiar props and characters.

Next Time...

I had originally started my own Purple Time Rift way back in April, when I had attempted to participate in the modding contest hosted by the game's developer, Gears for Breakfast.  However, I far underestimated the effort that would be required to complete my vision for a new map, and far overestimated the amount of time I had to complete it.  At the time of writing, I have approximately 336 hours in the Hat in Time Editor, and I have given myself a deadline of December 21st to complete my project.  My next post will be a much lengthier dive into my development of the map, not only observing and applying the design philosophies of Purple Time Rifts but applying common level design practices as a whole.

Until then, I figure I could at least add a few in-progress screen shots from earlier in development.  I will be on vacation after the map is finished and released, so the follow-up blog post will not be written until early next year.  At that time, I'll probably also be posting some tidbits about my 2018 experience as a whole, and maybe discuss my plans for 2019. 

Until then,