This past week I participated in the first Boundless Jam with two people from the GameDev.tv community. The theme was “One Button”, and after several hours of discussing ideas, we decided to make a bidding game inspired by the auction system in Power Grid. You can play our entry from the Mafia Food Wars itch.io page.

Concepting

After hearing the theme, we brainstormed several ideas. Some notable ones we opted not to pursue:

  • Top-down shooter where you only control your character’s movement. Click the left mouse button to set a movement destination. The character auto-attacks enemy targets and reloads on its own. Inspired by the 1985 arcade game Gun.Smoke.
  • Top-down stealth escape/puzzle game where you must guide a character out of a building without being caught by patrolling guards. Click to move, inspired by Republique.
  • XCOM-style tactics game where you only control where units are placed. Units have a % chance to hit or be hit based on position, and auto-attack on their own.

We settled on an auction-style bidding game with a countdown timer for the auction and a single bid button. Since I was in charge of the art direction, I proposed the setting to be an alternate reality where Mafias run the world and get their food from black market auctions. The rest of the team liked the idea.

Since we didn’t have time for pre-production concept art, I perused existing artworks on Artstation. My goal was to find a piece that intuitively jumped out to me as “this is it.” After about an hour of searching, I stumbled upon this beautiful illustration by Hamid Karimov:

Comics Studies 2 by Hamid Karimov

Immediately I decided that the hand-drawn aesthetic, or as close as I can get to it, was what I wanted to do for our entry. In 3D modeling, hand-drawn is a variation of cel shading, which I tried for the first time last year in my entry for Ludum Dare 46.

The jam rules stated that everything had to be created during the 7-day period of the event, but since I didn’t have experience writing shaders, I hoped to leverage an existing solution. Thankfully, the host clarified that paid postprocessing solutions were fair game:

One challenge I had in Ludum Dare 46 was achieving consistent outlines around objects. Outlines are notorious for being difficult due to the fact that most edge detection algorithms struggle with detecting sharp corners, which are like single points (vertices):

https://i.stack.imgur.com/MNkpv.jpg

Most games employing outlines actually use two effects in combination:

  • An object shader using edge detection calculation based on object normals. Inverse hull is most the common method. This achieves the result in the image above.
  • A screen-space shader adding an additional rendering pass where objects are first converted into 2D sprites and an outline is added to the edge of each “sprite.”

In order to determine what outline effects are best to use, I did a test of the most popular ones.

Flat Kit 2.2.6. This asset is only a camera shader.
Beautify 2 11.1 (fog was turned off for this test). This asset is only a camera shader.
https://cdn.discordapp.com/attachments/350422394180993045/856988617578643476/unknown.png
Easy Performant Outline 3.3.4 (fog was turned off for this test). This asset is only an object shader. I applied it to a few objects at various distances.
https://cdn.discordapp.com/attachments/350422394180993045/856994928784834560/unknown.png
Toony Colors Pro 2 2.7.3. This asset is both an object and camera shader.

As you can see above, all the popular outline shaders on the asset store struggle with consistency in some way, but Toony Colors Pro 2 was the most accurate due to utilizing two methods alongside a normals recalculation tool for detecting sharp edges. For our entry, I decided to use a combination of Toony Colors Pro 2 and Beautify 2.

Asset Creation

My modeling skillset is currently limited to low poly hard surface (I hope to eventually get into sculpting and texturing), but for the purposes of the jam my skills were sufficient.

When envisioning how our game would play, I pictured a stage and a table, with food items appearing on the table and the stage being located in a low-profile area.

The modeled assets in Blender 2.92.0, Eevee renderer.

After modeling the above, I imported it to Unity 2021.1.12 and did a quick mockup of how I imagined the game would look with UI.

Mockup using the URP/Lit shader.

I spent several hours applying and tweaking the shader assets to get as close as possible to the hand-drawn aesthetic. Getting different assets to work with one another took considerable fine-tuning: Stacking two outline effects on top of each other often caused some outlines to be bolder than others. In the end, I settled on this look:

Toony Colors Pro 2 hybrid shader + camera render feature + Beautify 2.

The UI work actually started during the outline tests since they were starting to feel tedious. Since I didn’t know what the assets would look like in the game with outline shaders yet, I started with the reference and worked off the premise of “what kind of UI would fit the reference if it was a video game and not a comic illustration?”

First take on the UI. In the top left is the color palette reference.

By the time the table and stage were set up in Unity, the UI had undergone several revisions. After overlaying the UI on top of the 3D assets, here is what the scene looked like:

As you can see, the UI based on the illustration reference didn’t match the darker mood of the rest of the scene. In future jams, I will withhold UI work until the art direction of the game scene is established so I don’t waste time. After going back to the drawing board:

Top center is the dialogue box, which only appears between auctions.

The above version is the one used in our final entry.

For the food items, we decided to feature six dishes:

  • Pizza
  • Chicken Alfredo
  • Tiramisu
  • Steak
  • Sandwich (stack of them)
  • Lobster

These items were created using a typical low poly workflow so I won’t discuss them here.

Production

Our team comprised the following:

Early on, Paul made the background music, voice lines, and sound effects. The audio was mostly finished on day one. Cheshire and I worked independently for most of the jam, with three major integration sessions where we jumped on a call to combine and test everything together: Wednesday evening, Friday evening, and a few hours on Sunday leading up to the submission deadline.

I had most of the art assets finished on Wednesday, but because I wasted some time by diving into UI work too early, we didn’t have the finished interface ready until Friday. Outside of the wasted effort, I believe the time spent on asset production was close to optimal.

Takeaways

One of the struggles with game jams is scoping properly. Many teams are able to finish a game by the deadline, but due to the “race to the finish”, their entry is often unpolished and/or has poorly tuned gameplay. In our case, we fell into the latter trap – we submitted a polished entry, but the playing experience was hardly tested. This is evident in the feedback we received:

The slowness is mostly my fault – originally our auctions ended sooner, but I felt players may want more time to think so I insisted on 10 seconds of “no more placed bids” before an item is sold. While I mis-predicted how most players would experience the game, the underlying issue is actually improper scoping – had we chose an idea that could have been finished in a shorter time, we could have asked the community to test our entry and iterate based on feedback (some of the best entries in the event did this).

The ideal game jam process looks like this:

  1. Build.
  2. Polish.
  3. Test.
  4. Iterate.

Steps 3 and 4 are repeated until the entry feels satisfactory to the team.

Having done over a dozen game jams, I am embarrassed to say I have yet to submit an entry that fully completes the above process. Part this stems from difficulty in scoping, but the other aspect is that most developers, even those who have done dozens of jams, have never scored in the top 5% and do not enter events with the mindset of the four-step process. Most teams I’ve been on have a mindset that ends with either step 1 or 2 (“we make the game and submit it”) even though veteran developers often mention they want to score highly.

Moving forward, I want to start producing entries that score in the higher percentages. For my next jam, I would like to team up with someone who has top 5’d and see how he/she approaches brainstorming and workflows to see how I can improve my own processes. I want to eventually guide teams of all skill levels to top results in future events.

Despite a less-than-ideal development process, Mafia Food Wars is still a game I’m proud to have helped create. After the jam is over, I will tune the game based on feedback and then add it to my portfolio here.