Postbug's Game Design Objectives
George Hemingway
March 12, 2015
Featured on Gamasutra
In this post I reflect on the fundamental game design objectives behind Postbug.
These objectives include creating an emergent system and encouraging experimentation, exploration, and strategy building during gameplay.
Emergence
An aim of Postbug was to create an emergent system consisting of objects with a diverse range of attributes and behaviours.
Grass, dirt, rock, water, lava, bugs, eggs, spiders, fish, and crabs are differentiated by whether they are affected by gravity and whether they crush other objects.
Living objects are defined by which environments they can survive (air, water and/or lava), who they feed upon, and how they hunt for food.
When these simple objects interact, an emergent system is created and the complex interaction of behaviours make it difficult to predict the outcome.
For example, it can be difficult to determine whether a spider egg will be cracked as lava burns through grass, triggering an avalanche of boulders, dirt and water.
Players may find themselves managing risk and constructing flexible strategies during gameplay.
Experimentation
In order to survive, the player will need to experiment with their environment to learn how objects behave and interact.
A player once asked whether fish are dangerous and another said they deliberately walked into a spiderweb to confirm their assumption they would get stuck.
Unlike common game design advice, Postbug doesn't guide the player through an incremental learning curve.
Instead, players are thrown into the deep end where they are faced with the many complexities and dangers of the game.
It is up to the player to learn how they fit into this world, and they are given the freedom to choose how they wish to engage.
Exploration
While the player builds up their understanding of the world, they also have the option to venture out and explore.
Even though Postbug is a difficult game, I've noticed some players identify dangers and map out areas they feel comfortable exploring.
As they gain experience, they then extend their comfort zone and venture out further.
For me, this is the most fascinating aspect of Postbug's design.
From the player's perspective, the world may have areas which are too dangerous and hopefully this creates a sense that the world is bigger than their individual experience.
Building Strategies
For the players who wish to take on the Postbug challenge to deliver 33 letters, they may need to develop a strategy to help them manage the game's difficulty.
This strategy may include the order in which to rooms are completed, a plan to avoid dangers such avalanches blocking doors, and the order to collect and use powerups.
Battledrone's humorous Postbug review described the experience as,
"Persistence, courage and 'going the one more round' will provide you the tools to get through a labyrinth of puzzle and death to give you the ultimate prize of a feat of significance."
Influenced from the '80s
The game design direction in Postbug has been influenced by my experiences playing games while growing up in the '80s.
James Crawford delivered an insightful talk at last year's Game Developers Conference titled Preserving a Sense of Discovery in the Age of Spoilers.
In his talk, he reflected on the mystery and intrigue found in games from the '80s,
and described these games as "an unknowable world operating on confusing rules where anything can happen."
In his advice, he talks about worlds that "feel like a real place and less like a clockwork puzzle constructed purely for the benefit of the player."
These observations resonate with Postbug's design objectives of creating an experience where players have the freedom to experiment and explore.
It was a fascinating talk and it confirms that there's more to our childhood gaming experiences than nostalgia, and our pursuit to understand this era is worthwhile for modern game design.
Feedback
I'm interested to know what your thoughts are on Postbug's game design.
You might also be interested in James Baillie's in-depth Postbug review.
He provides some valuable insight and I share his game design concerns.
Once again, feel free to jump on James Baillie's Postbug thread or contact me via one of the social links if you wish to provide some feedback.
Postbug Technical Overview: Compiling C# to Javascript
George Hemingway
December 18, 2014
Featured on Gamasutra
In this post I describe some interesting aspects of the technology I used to create my Postbug game.
Please note that this post assumes the reader has a technical understanding of programming languages.
Compiling C# into Javascript
Postbug was developed in C# and compiled to Javascript using Erik Källén's Saltarelle Compiler.
This allows for the game to be developed with a statically typed language and run in the browser on a wide range of platforms.
The game uses the Pixi.js library to render GPU accelerated graphics with WebGL.
I decided to compile to Javascript for game development back in 2011 when my brother Joseph Hemingway introduced me to Nikhil Kothari's Script# Compiler.
Joseph was an early adopter of the technology and had been using it in projects since 2007.
Both Joseph and I are now using the Saltarelle Compiler since it was released in 2012.
Currently, Saltarelle supports most C# 5.0 language features which are listed here.
HTML5 Games
My first priority when choosing a technology in 2011 was to reach as many platforms as possible.
Javascript and the HTML5 specification meet this criteria because it is supported on desktops (Windows, Mac OS, Linux),
a wide range of mobile devices (iOS, Android, Amazon Kindle Fire, Windows Phone, BlackBerry, Firefox OS)
and I've even had the pleasure of playing Postbug in Xbox One's browser.
Running HTML5 games only requires a click of the mouse which I feel is less of a barrier and more secure than installing native applications on desktop computers.
Statically Typed Languages
My second priority was to develop in a statically typed language (such as C++, C#, or Java).
An important reason is to catch as many errors as possible during compile time.
The C# compilation process ensures the code is syntactically correct, type conversions are strict and function calls conform to the function's type definition.
Testing for these scenarios in Javascript during runtime is time consuming and problematic, especially if the error occurs on a rare execution path.
Statically typed languages also allow for fast and robust code refactoring and Microsoft Visual Studio hosts some powerful tools such as ReSharper.
Postbug was heavily refactored when prototyping features and optimising performance.
I have also extended static typing in my project to include the game's assets. I've written an asset compiler
which rasterises Inkscape SVG (Scalable Vector Graphics) files into bitmap sprites, collates the sprites into a spritesheet, and generates C# static typed information for the assets.
Any changes to the assets (renaming or removing) will be detected by the compiler.
There's nothing new with generating static typed code and similar techniques are used in the Entity Framework and LINQ to SQL which generate code from database schemas.
The Technology 3 Years Ago
Making the decision to compile to Javascript for game development was not easy back in 2011.
HTML5 game development was only just gaining traction, and the rendering performance on mobile devices was very poor.
HTML5 vs. Flash vs. native was highly debated and Mark Zuckerberg revealed in 2012 that Facebook's mobile strategy relied too much on HTML5.
Another reason to add to my hesitation was C# to Javascript Compilers hadn't been widely adopted.
At the time, there were a number of compilers which were losing steam with development and support.
The Technology Today
Move forward to the end of 2014 and the scene has strengthened considerably.
HTML5 games have been widely adopted by developers, leading browsers are performing just-in-time compilation (JIT) to execute lightning fast machine code,
the latest version of iOS supports WebGL,
and compiling to Javascript has become a big deal.
An extensive list of languages that compile to Javascript can be found on Coffeescript's Wiki
and over the years, the LLVM and Emscripten toolchain which compiles c++ to asm.js has matured considerably.
asm.js is a highly-optimisable subset of JavaScript which can run at near-native speed without plugins.
Firefox has led the way in implementing asm.js specific optimisations and the other major browsers are following suite.
Emscripten has been used to port Unreal Engine 3, SQLite and Bullet physics into the browser.
More recently, the latest version of the Unity game engine uses this toolchain to export games to Javascript (currently in early access).
A beta version of Postbug is available to play on desktop computers and I plan on extending support to mobile and tablets.
It's great to see this project come together and it's a prime example of what can be achieved with source-to-source compiling and HTML5 / Javascript.
The following video shows Postbug in action:
- More details about the game can be found in Postbug is Alive!
-
Love this comment from nphekt on /r/csharp:
"C#? To Javascript? Woah. That's bonkers. Absolutely batty. Completely preposterous. One has to be absolutely out of his gourd to make a thing like this work.
It's a million-to-one chance they'll ever get it to work properly to begin with. Exactly million-to-one, as a matter of fact. So it just might work."
Postbug is Alive!
George Hemingway
November 27, 2014
A beta version of my Postbug game has finally been released into the wild!
Click the button below if you are on a PC or laptop using Google Chrome, Firefox, or Opera. Safari, IE, mobile and tablets are not yet supported.
> Play Postbug
This retro inspired digging game will have you eating bugs, dodging spiders, breaking webs, pushing boulders,
diving underwater and left in the dark praying those noises are just your imagination...
Soundtrack credits: Cellofest (circa 2001) by Paul Fox (Indie Masters)
Harness the power of speed, fire and electricity; or maybe command a swarm of killer bees to wage war against the spiders!
Only true Postbug Legends will survive the 16 gruelling rooms that make up the most dangerous mail run in town.
Do you have what it takes to deliver all 33 letters?
Postbug is dedicated to my wife and children who have shown tremendous support over the years.
Special thanks goes out to Joseph Hemingway who has been invaluable with both technical and game design advice.
Mate, if only we had enough time to implement all of our ideas :-P.
Thanks Paul Fox (Indie Masters) for the trailer's soundtrack. You've got some amazing work in your archives that date back over a decade. Cellofest is a little gem :-)
Thanks to all the playtesters who volunteered their time. It was great hearing feedback and your support is very much appreciated.
Command a swarm of killer bees to wage war against the spiders. Watch out though, the bee stuck in the web is a sitting duck!
SuperMighty's Analog Game Design Gallery
George Hemingway
October 10, 2014
Just like many other game developers, I have filled numerous scrapbooks with rough game design sketches.
These sketches may include character/asset drawings, GUI wireframes, level design layouts, and diagrams to help construct algorithms.
Recording ideas on paper helps me analyse them from another perspective so I can expand and evolve them further.
I hadn't thought much about why I sketch ideas on paper or whether it holds much importance until I crossed paths with SuperMighty, a young software company based in Philadelphia.
Earlier this year, SuperMighty contacted me as they were interested in a game design drawing I posted on the internet.
They have a wall in their office dedicated to "analog game design artifacts" which includes hand crafted concept art, level sketches, brainstorms, or beautiful mind schematics.
My pocket size / on the move level design sketch
Initially, I was taken by surprise when developers on the other side of the world were interested in hanging my game design sketch on their wall.
The sketch had personal value and I wasn't expecting anyone to take much notice.
It was something I drew a couple of days before I submitted my Postbug game to the PAX Australian Indie Showcase back in June.
My brother suggested that I should make my demonstration shorter so that the game could be reviewed efficiently.
It was a dramatic change one week before submission as it involved sizing back the world from 25 rooms (5 x 5) to 16 rooms (4 x 4).
I drew a tiny diagram to restructure the rooms and titled it, "My pocket size / on the move level design."
"@hemingwaygames - your level design sketch has been hung!"
My tiny level design sketch has been mailed to the other side of the world, and now sits on SuperMighty's wall in a frame 5 times its size.
Art can take many forms, however SuperMighty have extended their interests to design sketches produced during game development.
This is just one of the many ways SuperMighty engage with their community.
They hosted a Philly Dev Night back in July and frequently volunteer at Philabundance.
SuperMighty's primary focus however is building their game SDK (TheMighty.io) for game studios which ties in-app purchases with charitable donations.
I have since kept the 16 room design for the final version of my game.
Postbug is a difficult game, and the fact that there are only 16 rooms to complete is my challenge to the player.
I never wanted to use a potential number of playable hours as a game design goal or measurement.
Instead, it is possible to finish Postbug in under 15 minutes.
The gameplay hours will however build up as the player learns the world's rules and formulates strategies for avoiding the many dangers.
My sketch which sits on SuperMighty's wall represents more than just the game's level design,
it represents my game design goal of presenting a challenge to the player to complete a small but difficult game.
Connected Worlds
George Hemingway
September 10, 2014
I recently jumped on the internet to see what games had been developed for Ludum Dare's latest 48 hour game jam.
The theme this time was Connected Worlds, and I was impressed by Christer Kaitila's project which connected two worlds: the Christer at age 16 and the Christer at age 41.
As the story goes, the 16 year old Christer played arcade games back in the '80s and '90s.
He promised himself that when he was old and rich, he would have an arcade machine in his house.
Fast track 25 years, and Christer drove past an abandoned arcade machine by the road with a FREE sign.
Christer embraced the serendipity and spent the 48 hours of the game jam restoring his new arcade cabinet.
This project allowed Christer to connect the present with his past, and fulfil a promise he made as a teenager.
"These two worlds, my past and my present, live together as I play Ms. Pacman on my very own arcade machine" - Christer Kaitila
Upon seeing Christer's project, my mind was flooded with memories from my own teenage years.
In the late '80s, I played Rastan Saga at the local fish & chip shop after school.
Even though the potato cakes were tempting, I'd save my 20 cent pieces for the game.
Anyone who wanted to play would reserve their spot by resting their 20s on the screen.
During our wait, we would watch in awe as the more advanced players tried to survive the castle in the first level (yes, it was a hard game).
Hearing rumours of a new game was always exciting, and I remember embarking on an expedition (catching a tram) to play Double Dragon for the first time.
In the early 90s, I was blown away when I saw Street Fighter 2.
The game was quite technical and the depth of skill that can be achieved was incredible.
Competing with other players was common and the competition was fierce.
The best players in my suburb would get annihilated by players visiting from the city.
Of course people could probably fast track these skills today with the wealth of knowledge available on the internet,
however in the 90s, progression was made with trial and error, collaborating with other local players, and absorbing techniques from the city kids.
Super Street Fighter 2 is one of my favourite videogames and Ryu vs Guile fights can get quite technical.
I have many fond memories of playing arcade games and I often wonder how we should respond to our nostalgia.
Should we acknowledge our sentimental memories with a smile and move on, or is it important to reconnect with our past?
There are many people who restore arcade machines, play games on emulators, join retrogaming communities, or collect old games and hardware.
I myself have a strong desire to build videogames and I believe nostalgia is one of the driving forces.
The videogame I'm working on is influenced by Boulderdash and other digging games from the '80s.
It started as an exercise to understand how to implement the mechanics, however I revisited the project last year to inject my own creativity into the genre.
I'm not alone when it comes to remaking games from the past, and this is evident from the experimentation and innovation coming out of the independent scene;
this includes the many platformers and roguelikes influenced by Mario Brothers and Rogue respectively.
My upcoming videogame running on my bother's arcade machine.
Christer's Connected Worlds project inspired me to start my own little project to reconnect with the past.
Last weekend, I added arcade support to Postbug, my upcoming game, and installed the game on my brother's arcade cabinet.
To celebrate, my brother and I spent Father's Day with our families and showed Postbug to our children.
This was a special moment and I could see the awe in the kid's eyes when they saw the cabinet.
This is probably the same reaction I had when I walked into the fish & chip shop many years ago.