Global Game Jam 2021: Sole Searching

Introduction

For the 2021 Global Game Jam, I joined a team with Callen Shaw (callen.me) and Steve Ritter to create the game Sole Searching (You can download and play the VR game for free on itch.io). The theme for the 2021 jam was “Lost and Found”, and Callen came up with an idea based around the theme of Cinderella losing her shoe. Instead of just Cinderella having this issue, a bunch of people at the ball have lost their shoes. You need to find the shoe the person is missing from a stack of shoes you have and give them the right shoe (for their left foot).

Title card from the trailer. Trying to time my screenshots with the sparkle effects in a good place was such a nightmare.

Every shoe you correctly give to a person earns you 25 cents. The goal of the game is to make US minimum wage, $7.25, before the clock strikes midnight. If you don’t make enough money, then your hands turn into pumpkins. If you make enough money, your hands turn into diamonds. After you lose or win, you can restart the game and try again.

This was the first year that Global Game Jam was fully online because of the COVID-19 pandemic. Our team communicated over Discord and used Github to version control our code

Here’s a trailer and gameplay video of the game before going into the postmortem, if you want to see how it plays.

What Went Well

Aside from having a blast creating a fun and unique VR experience, there were some great wins we had while making our game. Here’s a brief list of things that went well for our development process.

Theme Song Diversifier

I love making music, but my musical style rarely works well for games. I learned music by playing guitar and singing in church choir and religious retreats, and that style of music doesn’t always work well in games, especially because I lack high-quality recording equipment.

However, Callen had a great idea to use the Theme Song diversifier (The tutorial for your game is in the form of a song) to create the music for our game. He recommended a parody cover of the song “Toss a Coin To Your Witcher” from The Witcher. He wrote verse and chorus lyrics which described the intent of the game, and then I played guitar and sang the song.

My recording wasn’t the highest quality, but this style of song works well with my Lo-Fi folk-plucking guitar playing. After dropping the octave on the vocals to get the song in my vocal range and practicing a few times, I could put together a recording of the initial theme song which described to the player what they needed to do in the game and told the story of the game.

From there, the song turned into the background music of our game because I could just play a guitar pluck variation of the verse and chorus. I looped this background music 3 times over the course of the game, and then I played the main theme song again at the end to give players a sign that the game was now ending.

I’m simultaneously ecstatic and horrified because I hard-coded the length of our game from the timing of the music files, since it proceeds with 1 play of the main song, 3 background loops, and 1 play of the main song again before going into the final segment, a play of bells I created using Ableton Live. The entire game takes five minutes to complete, which I consider an ideal length for a short global game jam game. This project was a great chance to stretch my technical music muscles and has certainly inspired me to find some better recording equipment.

Finding the Name

When we started creating this game, we had a bit of a hard time coming up with a name for the game. I initially considered “Toss a Shoe” from the theme song parody we created, but it didn’t quite fit. After singing the lyrics of the song a few times, I really liked the line “Underpaid Employee” in the song, and that made me think of someone working at a job they hated, as if it was eating away at their soul. Of course, I love homonym names and wordplay, so I immediately realized that “Soul” and “Sole” would be two different interpretations of the same pronunciation. In addition, “Searching” can mean a literal physical action or an intellectual action, and the name of the game was born.  

Sole Searching is a silly wordplay name that very much describes the mechanics and theme of the game. You’re an underpaid employee searching for shoes but maybe instead of searching for shoes maybe you should look for a better job where people don’t treat you so terribly (this concept is continually reinforced with the lines of haughty noble dialogue played when you actually give the nobles their shoes and the animation of them putting their feet up in your face). It’s the type of name that fits well to both describe the game and allow it to stand out in a long list of game jam games.

Great Environment Setup and Mood Lighting

The horde approaches.

Steve was our team’s point person on modeling and texturing the environment of the world. I did a lot of testing in the game thanks to the fact I had to make sure that the shoe models fit accurately on different characters’ feet and I had to test the music timing for the game. I felt a marked difference from the original graybox version of the game to when Steve set up the final environment and lighting.

The player begins in this cozy little nook with lighting on both sides and shoes behind them, and there is a wide-open ballroom in front of them with large columns. The wide-open ballroom allowed the player to watch people approaching from a distance, which was good for our puzzle mechanics. If the player has a good memory, they can see which shoes people are wearing when they approach and prepare by grabbing that shoe from the file before the person arrives. It adds strategic complexity to our very simple game style and wouldn’t have worked nearly as well without an effective environment setup.

VR Safety Conditions

One problem with “grab the item and give it to the person” games is handling players losing the items they need to proceed. Callen circumvented this by creating an invisible barrier around the game world. That way, if the player tried to literally throw away the shoes to prevent themselves from winning the game, they would always roll back to the booth. It’s a little touch that players won’t really notice unless they’re looking for it and ensures winnability for the game without multiple restarts.

The other important safety conditions were the Restart and Exit Cubes. Callen’s default VR grabbable variants support using Unity Events, so I created cubes that allowed the player to restart and exit the game.

Grabbing is a more intuitive UI action in VR than pointing a raycast and pressing a button. It’s especially important for players who have shaky hands or otherwise less control.

While a restart level functionality fits well in any game, whether for the global game jam or otherwise, “exit” functionality can have a different meaning in VR. Many VR games do not explicitly include exit functionality, because for the player exiting means pressing the controller’s menu button to return to their VR dashboard and closing the application from that screen.

I included an explicit exit functionality for my ease of use. When I was doing my testing, I was running the EXE for the game on my local computer, and the exit cube made it easy for me to close the application on my local computer once I finished. It’s not something that’s necessary for VR games, but it’s a safety feature I like to include in VR games, especially for people who aren’t used to VR interfaces and application management.

What We Learned

The UMA character system is very powerful, very heavy, and very complex

To create the characters in the game, Callen imported the UMA character system, a framework that allows you to create a wide variety of custom characters based on present parameters. It is a perfect tool for a large-scale RPG where you need to create a lot of different characters procedurally but are only a small development team.

I think the sword maiden outfit really sells the setting.

While the tool is very flexible, it also has a steep learning curve for a team using it in a game jam. Fortunately, Callen had some prior experience with the system, so on the first day of work he could get the characters spawning, walking up to the counter, and playing a modified kick animation to look like they were putting their feet up on the counter.

This animation sets the tone of the game really well. I think this is one of the few games that could really benefit from the implementation of smell-o-vision.

Both Steve and I tried to update animations in the system, but neither of us had much success. It was difficult for us to figure out how to get new animations into the character system, though I know with more time we might have been able to figure it out. This became a problem because the default walking animation we used with UMA didn’t have a character walking on their toes, so the walking animations wouldn’t work well with the high heel shoe model template Steve built. Instead of fixing the animation, we just made most of the shoes flat, so they fit on the characters’ feet better.

Use audio cues abundantly in VR

One big problem in VR design is that the player is constantly going to be turning their head to look at different places on the screen. For our game specifically, the player turning 180 degrees to grab shoes from the pile before giving them to the nobles is a key part of the design. However, that also means players spend their time not observing half of the world, so they need a good sign of when things happen behind them.

We solved this by implementing small pieces of character dialogue. Every time a new person arrives, they say a short quip showing they are ready to receive their missing shoe. Then, when you give them their shoe, they say another line to show they are leaving. In addition, I enabled 3D audio for the peoples’ audio, so the player can hear the people behind them when they arrive if they are currently looking at the shoe pile.

Be very careful with restrictions on default VR actions (“the magical grab”)

A key part of our game’s design was that players needed to take shoes off the top of the pile before grabbing shoes from the bottom of the pile. This creates an interesting puzzle mechanic where if players make a mess of the shoe pile, they will have difficulty later finding the shoes they needed. Unfortunately, this puzzle-style mechanic broke a key tenet of VR design: “Don’t lock objects the player thinks they can pick up.”

To get around this, we used 3 methods. First, in our theme song that plays at the beginning of the game, we added a verse explicitly telling the player to “Find the highest shoe for the first who comes to you; remove them in order before you move on.” If that wasn’t good enough, we also included a sign telling players to remove shoes from the top and implemented a red highlight box around shoes players cannot pick up. We hope this provides enough sign to the player that they can’t remove shoes from the bottom before grabbing the shoes above, but it’s something that could use more testing with users to see if they understand our indicators.

Shoes with the red glow cannot be picked up until the shoes on top are taken off the stack.

Inexperienced artists can create models fast in VR modeling tools… but they may not look great

My personal favorite is the Triceratops Skull shoe. I took the Medium triceratops skull brush and added it to the shoe model and presto! Take me to Milan, I’m ready to be top of the fashion industry!

I wanted to use this project to test the Oculus Medium modeling tool. After my failed attempt to use TiltBrush VR for the 8 bits to Infinity Physics Game Jam game Roll With It I worked on, I wanted another attempt at creating 3d models in VR and seeing if I could make it work.

Steve put together a very basic box model for the flat shoe and the heel shoe, and then I imported them into VR and got to work. I do not consider myself a professional, or even adequate, 3D modeler. That made me a suitable test case for seeing if I could put together interesting things in VR modeling tools and get them imported into the game fast.

Much like my former research predicted, VR modeling wasn’t great for creating models that looked clean, but it was very effective at putting together things quickly. After about an hour modeling a basic shoe, I could create 8-9 different usable shoe variants in a scope of about 2 hours. I created shoe variants by using various shapes and colors on a basic shoe and then exporting the shoe models into Unity. With vertex coloring, I could use the colors I made in Oculus Medium directly inside of Unity, which cut down on configuration time.

I still needed to fix the position, size, and rotation of the shoes in VR to make sure they were on the characters’ feet correctly, but because I used the same base model for all the shoes, once I fixed the shoe for one model it was easy to apply those changes to all the model variants.

I will not win any awards for my 3d modeling skill. But for a game where having a wide variety of interesting shoe variants was critical to force players to dig through and find the right one, VR modeling accomplished its purpose.

Conclusion

This was a fun game to both make and play. It’s a simple concept and goofy in a way that works well for short, action-oriented VR experiences. While our team agreed the online jam experience didn’t quite match the creative energy felt during in-person jams, Sole Searching was a great final game to create from our unique jam experience.

As long as you have a VR headset, you can play the game for yourself on our Itch.io page. And be sure to check out some other fun games created at the DC global game jam site as well.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: