drew stillwell

title image of Viridian

Viridian - Post-Mortem

play the game here

Ludum Dare Game Jam

April 2020 my brother and I participated in our first "game jam" - defined on the Ludum Dare website as "an online event where games are made from scratch in a weekend." This was our first time building (and finishing!) a game together, and our first game jam. It was a ton of fun participating in the jam, and a great design excercise.

I'd like to take some time to go over our design process we used for our game, Viridian, and share some lessons learned along the way. You can play our game here on my itch.io page. The game was built using Godot Engine

Theme

The theme for the game jam is typically given right at the start of the clock, which means ALL game design is done during the jam. The theme for this one was "Keep it Alive". We were pretty happy with the theme, as it was open enough that we could brainstorm a lot of interesting ideas, yet wasn't too constrictive where we felt driven towards a certain type of game genre or mechanic.

theme screenshot - Keep it Alive

The theme was announced Friday evening, so my brother and I spent the first few hours of the jam brainstorming ideas over the phone and taking notes on a shared GoogleDoc. Our goal was to get as many ideas and words down on paper and see where our brains went with the theme - by bouncing ideas off of each other and not being afraid to write down something "dumb", we opened up the creative side of our brains in the early stages, when anything is possible.

brainstorming screenshot

Lesson: Don't be afraid of bad ideas - they can lead to good ones.

Very quickly, we both realized we wanted to make a game that focused more on a feeling- that told a story. We liked the idea of slowly growing something, building and nurturing it until the end of the game. This jam took place during the height of the Covid-19 virus stay-at-home order in the USA, so it may not be surprising that we both migrated towards something a bit more peaceful and mellow.

While we started our brainstorming session with an "anything goes" mantra, eventually we needed to focus in on a couple ideas and flesh them out enough that we could choose something. We shared our screens a couple times to sketch out what we had in our heads, and talked through the overal game loop of the ideas that we were drawn to more than others. At this point we had to be realistic about both the timeframe we had (a weekend) and our toolset/abilities (new to game development).

We had some fun ideas that we talked through (maybe some we'll build on in the future..?) but at the end of the night, we decided on a small game where you play as a young girl that stumbles upon an injured bunny which needs to be "kept alive" until it completely heals. It fit the theme, had the "cute, peaceful" vibe we wanted, and was simple enough in scope that we felt it was obtainable- as long as we kept the inevitable feature-creep down to a minimum. We didn't take the whole night to flesh out the game entirely, but we had some good bullet points that formed the backbone of our design and provided the initial direction we needed to keep moving.

Minimum Viable Product

Our first sprint was for a working prototype of the game, to test the mechanics and make sure the game was fun enough to continue building upon. Designing a game that strived to give a feeling and to tell a story, rather than focused on deep gameplay mechanics, meant we had some ability to "dumb down" the gameplay - as long as we kept the overall pacing of the game tight enough to keep the player engaged. My brother started sketching out the player character sprite, and I began working on a simple movement system.

We knew the focus of the game would be exploring the small forest area surrounding your crippled bunny, so we decided to keep the overall movement mechanics as minimal as possible - a click of the mouse. Click somewhere, and you move towards that location. Keeping the movement mechanics simple means less time worrying about teaching how to play - critical for a small game like this where the average user will likely only play your game for a couple minutes in total.

sketch of the final map

Lesson: Sketch things out in advance to help guide the building process.

Similarly, we chose to make the "interact" action be triggered the mouse as well. A click-and-hold action is different enough from the simple mouse click to differentiate in the code, while being deliberate enough of an action that the player feels like they are doing something - digging up a carrot, filling up a bucket, picking up a giant leaf umbrella. Again, simple controls means less onboarding time for the new player.

User Interface with bunny on screen

Lesson: Keep controls simple and show the player how to play instead of telling.

Once we had the movement and interaction locked in to a place that felt good, we worked on making the bunny seem like it needed to be kept alive. We did this by giving it a healthbar that stuck to the player camera, meaning no matter where the player was on the map they could quickly and easily see the status of their fluffy friend. The healthbar was tied to a hunger and thirst meter on the opposite side of the screen, so when either meter dropped below a certain threshold, the health of the bunny would start to deteriorate. Our goal was the keep the player moving pretty much constantly, jumping to and from various tasks in order to take care of the rabbit. Our goal was to find a balance between "ahh too much to do!" and "just chilling in the forest".

Leading The Player

We ran into a couple interesting challenges after having some people test out the game at this stage. How do we show the player what the rabbit needs? The first step was to make the hunger and thirst meter a little more explanatory by changing their appearance. The hunger meter was modelled after a carrot (the item needed to feed the bunny) and the water meter was changed to a dark blue color - the same as the water in the pond. Both stand out on top of the greens and browns of the map so that they can be easily monitored throughout the game.

As an extra measure - and a nice way to bring the bunny a bit more personality - we created a couple small animations that would play when a certain resource was running low. A thought bubble would appear above the bunny's head, showing exactly what it needed in order to stop its health bar from running down. Having this little face gave us the ability to directly show the player what was needed without having to explain it and ruin whatever immersion we were able to build with the player.

bucket on the ground near the pond

We also took extra steps to make sure the player knew where to find the water source in order to cure the bunny's thirst meter. As soon as you begin the game and walk down the map, you find the bunny. The "hunger" animation plays, showing the player that a carrot is needed. We intentionally placed a carrot next to the bunny in order to teach the player the click-and-hold mechanic, and how the carrots interract with the hunger and health meters. But how to show the player how to satisfy thirst? First, we placed the water bucket (which must be filled with water in order to quench the rabbit's thirst) at the bottom of the screen when the player is next to the rabbit. This provided the player a clear indication where they might want to look next after taking care of the first feeding task.

Then, as the player walks down to investigate the bucket, they see the pond peeking out at them - again, from the bottom of the screen. Most players will intuitively recognize that the bucket can be filled with water and head for this task immediately (though we also made sure the bunny's face animation showed a full bucket when thirsty). Observant players will also notice a large leaf directly above the pond, its green color contrasted with the gray patch of ground underneath it. This leaf is used for the next major task the player must accomplish as the game progresses.

Rain sequence showing the leaf sprite

Using a leaf as an umbrella may not be as intuitive as filling a bucket with water to most players, so we chose to use the same leaf sprite in the bunny face animation during the rain sequence to remove any doubt what was needed for this task. The player is forced to pick up the leaf and use it as an umbrella for the bunny. As an additional small hint, we added a different audio clip when the player is holding the leaf while it is raining to imitate the sound of rain hitting an umbrella.

Combat

While the overarching "feeling" we were aiming for was low-key and peaceful, we still needed to bring more of the theme (Keep It Alive) into the game and shoot some drama into the scene. We started with the a fox that would be the final "boss" of the game, but after playing more of the current build we felt that running back and forth across the map simply feeding, watering, and sheltering the bunny got a bit mundane. So we added a smaller crow enemy to spice things up a bit throughout the middle of the game's progression.

A crow appears!

The crow enemy always appear above the rabbit, but this created a small problem - the game forces the player to wander around the map looking for more carrots in order to feed the bunny, so how do we both alert the player to the presence of the crow AND make sure the player has time to get back to the main room in order to defend the defenseless bunny?

We added a short audio clip ("CAWWW") when the crow appears, as well as a worried look to the bunny face UI element for a visual indication that the bunny was in danger. This satisfied the alert necessity, but did not guarantee the player would be nearby. To solve this, we only spawned the crow immediately after the rain umbrella task was completed. This assured us that the player would be near the rabbit, because in order to stop the rain, the player MUST be right next to the bunny with the umbrella for several seconds. As soon as the rain ends, we started a 1-2 second timer for the crow spawn. Enough to give a false sense of security, but not long enough for the player to get too far away from where they needed to be.

Lesson: Break up the pace of the game with something different and unexpected.

Ending the Game

The rest of the game is a simple repeating of these tasks - feed carrots, fill up the bucket with water, give the water to the bunny, protect it from the rain with the umbrella, and defend it from the crows. After a set amount of carrots fed, a signal is then sent to the game controller to initiate the final scene.

The boss is a fox that is defeated in the same manner as the crows, but it takes more hits in order to stop it. The crows were used as a learning tool to teach the player how to defend against the final boss. As an added challenge, whenever the fox is struck by the player, a crow spawns nearby to slowly overwhelm the player if not taken care of quickly. After all enemies are defeated, the bunny is healed and starts hopping around the map in celebration to show the player that they have beaten the game.

Overall, the game was well-received. I think it gave players a more relaxed atmosphere amongst other more stressful games that took the "Keep It Alive" theme to the extreme, which was our goal for this game. Here is a link to our game page if you'd like to read the comments we received. One user would have liked to see some sort of progression or status indication, so they know how far along they are in the game. This is a valid point, and I agree with it for this game. Perhaps another game focused on building up an anxious feeling for the player, not knowing if they were going to be able to save the animal or not, it might be better to hide this for the player but for our peaceful game in the forest it would be nice to add.