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.

"Hybrid"

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?

Design

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.

Tools



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.

Results

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!
J-West

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,
J-West





Tuesday, March 20, 2018

Spaces in Time - Part 1: Time Rifts

Introduction

If you have read any of my previous work, you'll know that I have a... "thing" for the 3D Platformer Collect-a-thon genre that was popular in the 90's.  These are the games that I grew up playing.  Last year we saw a good number of releases, most of which were met with mixed reviews (see Yooka-Laylee, Snake Pass, Freeze-Me).  There is one, however, that would surprise everyone and made it's way to being the 2nd highest rated game on Steam in 2017: A Hat in Time (referred to as "AHiT" from here on out).

For being the first game for the studio Gears for Breakfast, and the first game ever created by Jonas Kaerlev, there is so much that AHiT did right.  "Hat Kid", much like Mario on the Nintendo 64, is an absolute joy to control, with movements that were easy to learn and a bit difficult to master.  Badges could be purchased that manipulated gameplay in fun and interesting ways, like granting the player the ability to sprint or freeze time.

What astounded me the most, however, was the level design.  AHiT offers so much variety in it's spaces that I never grew tired of playing.  One moment you're at ease, exploring the open and inviting world of Mafia Town, and the next moment you're sneaking around on the Owl Express, gathering clues to track down a murderer.

I haven't been able to get this game out of my mind.  AHiT is a huge step towards what the modern 3D Platformer could become.  And seeing as it comes with it's own set of modding tools, I figured its high time I tried my hand at actually creating my own spaces to play in, rather than sitting around and critiquing the worlds that others have laid out for me.

Why Write This?

There is a fantastic opportunity here for me to expand my own design experiences and learn something new.  What better way to do this as a hobbyist than by modding a game I enjoy?  A Hat in Time offers it's own tool set for creating new levels, hats, skins, and other assets, all based in the Unreal 3 Development Kit.  Not only do I get the chance to design levels for a 3D Platformer, but I get to learn a new engine while I'm at it.

As I will be learning many things as I go, I figured it was a better idea to keep track of my progress through individual blog posts rather than one large essay, like I did with Yooka-Laylee.  I'll do my best to research particular aspects of AHiT's worlds as I attempt create my own, learning what ideas could work in practice and which don't.

Now then...

Time Rift Overview



The modding community over at the AHiT Discord strongly suggested that anyone just starting out with modding should take a look at the Time Rift template that can be used when starting afresh.  The template level is quite simple to work with; a small obstacle course with a spawn point, check point, time piece, a revolving platform and a couple of stationary platforms.

I bolded the term obstacle course in that last sentence because, in essence, that is what the most basic of the Time Rift levels often turn out to be.  There aren't any new move sets or concepts introduced in Time Rifts, they are meant to test the player's mastery of what they have learned so far.  The first two time rifts the player would typically come across are within Mafia Town (Sewers and Bazaar), neither of which require the use of additional hats or badges to complete. 

** Note, for the purpose of this particular post, I am focusing on the more basic rifts.  Purple (or cave) rifts, while similar in nature, have more complexities to them (collecting, narrative, sub-levels), so I will be saving those for another time.


Rather, they utilize Hat Kid's movement-based mechanics in interesting ways (wall climbing, diving, and of course running and jumping).  These time rifts aren't available right away - they only appear as the player progresses.  Looking once more at Mafia Town, the first time rift, Sewers, doesn't become available until after the player earns the time piece for "Down with the Mafia", the 4th act of the chapter, which provides the player with ample time and opportunities to learn and master that basic set of mechanics.

Time Rift Design

At their very base, platforming levels could be considered as string of obstacles or micro-challenges for the player to overcome.  The "Blue" Time Rift stages are a prime example of this, as each rift re-uses similar assets in new ways to put the player to the test.  There is only one objective (time piece at the end of the course), and, for the most part, the way to get there is fairly linear.  The first two rifts, featured in Mafia Town, take the average player about 1 minute to complete, and require nothing more than a firm understanding of Hat-Kid's base mechanics: running, jumping, climbing, dashing, etc.

"Bazaar".  You can see the variety of assets used in this level, and how they are grouped together to create individual challenges.


As the player progresses, however, mechanics that are introduced in a world are placed into their corresponding time-rifts.  The next pair of blue rifts the player would be expected to come across are in Battle of the Birds, both of which are a bit more complex than their Mafia Town counter parts.  "The Owl Express" uses the pressure-plate switches found in the Acts "Murder on the Owl Express" and "Train Rush" to create exploratory puzzles, while "The Moon" utilizes the band-following mechanic from "The Big Parade" and designs a level that discourages the player from taking the same route twice.

"Owl Express". Still a linear path to the finish, with switches and more complex structures introduced.

Application

While creating a mod map doesn't necessarily require you to stick to the mechanics featured in particular Acts or Chapters, I've learned that simply focusing on a certain set of mechanics or a theme can often help with design direction, and give a more cohesive feeling to the level without throwing in too much.

When thinking of what sort of interactions I wanted in my own rift level, I was particularly fond of one set of actions: sliding, jumping, and ending on a grapple hook.  The idea of sliding made me think of ice, which in turn gave me a theme, "Mafia's Icebox".  I wanted to try to give the impression that the rift was taking place within an industrial refrigerator, without straying too far from the basic set of time rift blocks.  In the end I focused on the interaction with grapple hooks and slippery surfaces, doing what I could with Unreal Matinee and Kismet to create challenges around these concepts.  You could consider this both a bottom-up and a top-down approach to designing this level, as focusing on one set of interactions provided me with a theme to work with.

Ultimately, I wasn't looking to make a challenging level for the average player; I instead wanted to make a level that was more enjoyable and a little tricky to try to speed through.  In that mindset, the pathways ended up being extremely straight and linear, with only 4 hard turns until the goal was reached.





I do enjoy playing with the fog settings.

What has really become tricky is using materials and lighting to create the feel of ice and cold steel.  This is why there are individual jobs for lighting and environmental artists, neither positions of which I have much experience in...

The first iteration of this level re-used most assets at least twice:  
  • 2 sets of 3 rotating "ice cubes"
  • 2 sets of 3 rotating ice "pizza slices"
  • 2 sets of 2 rotating gears
  • 3 "slides"
  • 3 grapple-hook lifts
  • 1 static grapple hook point
While this helped to create the consistency I was looking for, it doesn't really have the right balance of variety to really keep the player on their toes as they progressed.  Simply increasing the speed that the gears would turn or changing the arrangement of platforms doesn't quite give the increasing sense of difficulty a linear level like this should.  I need to find a way to remix some of these obstacles to make the progression changes a bit more drastic...  Maybe add a few more static grapple hooks as a means of traversal.

Mid-Post Update


I had originally planned to complete this post and share it once the level was done.  However, during the process of designing this Rift and writing this post, Gears For Breakfast officially released the Modding Update for AHiT, and even started a $1000 mapping contest for the best Purple Rifts the community could offer.  This is an opportunity I am extremely excited about, and as much as I hate jumping ship in the middle of a project, I might have to make an exception for this one.  The contest goes until April 27, so after that point, I'll see about finishing this "Icebox Rift" and maybe write a reflection post about what I learned while creating my own Purple Rift.

See you in a month!
J-West