Ludum Dare 41 came by on the weekend of the 21st of April, 2018 and it was a profound experience. As my first ever Game Jam, I did not know at all what to expect. There were many lessons learned, mistakes made, and lots of new faith in my own abilities found during this particular weekend. The theme for this Game Jam was “Combine 2 Incompatible Genres.”
Partnered with an artist whom I have worked with before, Bevrei Langsley, we created Shadow Puppets: DM’s Revenge. Shadow Puppets: DM’s revenge is an arcade style bullet hell game infused with elements of a tabletop role-playing game.
We set three goals for ourselves in this endeavor. The first was to finish the core gameplay elements. As both a technical challenge and a measure of our ability to evaluate and plan for project scope, I felt this was important enough stated explicitly as a goal. While our game is far from complete, it is playable and is lacking more in content than it is in features. The second goal was to learn something new. Although both of us are intimately familiar with tabletop rpgs, exploring the design space of a bullet hell game was a new adventure. Finally, the third goal of our project was to make sure we are designing and not just creating elements because we can. I am most pleased with how this turned out as most of our discussion focused on the merits of different inputs, difficulty curves, and interface. By the end of the first day, we had a functioning prototype. By the end of the second day, we had implemented our systems. By the third, we had integrated art, UI, and refined gameplay systems with numbers we are happy with.
In total, we were able to create the following features:
- The player is able to move in eight directions bounded by the screen and shoot forward.
- When the player takes damage, a small pool of life temporarily becomes recoverable if the player is able to reciprocate damage to an enemy within a small time.
- There are three primary character stats in Power, Alacrity, and Karma, each with their own derived scaling and drifting permanent power boosts.
- The player’s maximum health and damage per shot are increased with Power.
- The player’s movement speed and fire rate are increased with Alacrity.
- The player’s recovery health and recovery window are increased with Karma.
- Rotating environmental hazards periodically spawn in a semi-random pattern and can be destroyed.
- The Shadow Patron boss attacks the player with a single pattern.
- The Shadow Patron boss periodically summons one or more of three unique enemies to harass the player.
- The Bird bounces between the ends of the top of the battlefield and drops shadow bombs on the player.
- The Wolf picks a vertical space and guards it, ready to charge at a fast speed into the player if they should match line of sight.
- The Crocodile chomps horizontally across the battlefield in a slow but powerfully disrupting manner.
- 60 fire points surround the play area for the true villain, the plotting DM, to use to interfere with the battle in a variety of patterns.
- The right panel features the player’s character sheet and stat info.
- The left panel features the DM’s screen where they routinely roll a 20 sided dice to determine field effect patterns.
- A minimalist on-screen pause menu appears at game start and end.
The core gameplay of Shadow Puppets follows the player as you chase the Shadow Patron through a field. The player then kills shadow monsters and rotating shadow portals as they attempt to damage the Patron. At various hp thresholds, the Patron summons more shadow beasts to fight with it. As the fight continues in time, the DM begins rolling a 20 sided dice to create more environment hazards for the player to avoid. The game is finished when the boss is defeated and there are no more enemies left in the encounter.
For various reasons, there were some features that were not finished in time for the Game Jam.
- Character and environment animations were put in the project files, but not implemented in the submitted build.
- Audio was left out of the project.
- A spider enemy had art created, but was not finished in time to be implemented as one of the shadow beasts. It would have shot slow moving blasts in an octagonal rotating pattern in short bursts.
- The boss AI merely shoots linearly at the player as it did in the prototype and was never upgraded.
- Temporary terrain was designed to protect the player from large area attacks but never implemented.
- The game only functions in 1920×1080 resolution.
- Time did not permit for 20 unique patterns to be implemented utilizing all 60 encircling anchors for the DM’s rolls. A system was designed to circumvent this, but never implemented.
When faced with the time constraints in game development, one of the most valued axioms is to be able to kill your babies and cut scope. Although many of the above features were pushed back or cut in favor of finishing others, there are systemic changes that can be made to allow a simple AI to take on the load. Rather than uniquely create all 20 patterns for the DM’s d20 results, we were able to design a pattern to control our patterns. Using shared numerical features to create seemingly unique patterns.
First, we determined if the number was odd or even to determine whether a line or curve pattern would fire out. Then, the number is divided by five to determine which of the four rows around the battlefield should fire. Finally, each of the remaining numbers, rounded down, represent a specific pattern of fire – linear cascading in the case of the pushed build – which then take input from the previous two numbers to determine fire rate and duration.
Finally, there were several mistakes and lessons learned throughout this process:
- Distractions will find their way into your crunch time. Your friends will suddenly want to hang out, old acquaintances will want to catch up, games will have special events, and school will have multiple deadlines in the same weekend. Leave time to deal with them.
- Mitigate the distraction from routine events that are normally dealt with on those days by performing tasks ahead of time. Do the weekend chores, restock your fridge and pantry, and finish all of your school work before the event starts.
- Clearly communicate who is performing which task and to what extent. We had finished art animations done frame by frame and neither of us put them in because we each expected the other to do so.
- Communicate if you need help – even if it is a technical problem within your skill, there are design solutions available to you that you may not have thought of.
- Recognize your priorities and your limits. I had to leave for school early on Monday morning which meant getting enough sleep to be comfortable with driving a commute both ways. Not only did this disrupt my work flow, it disrupted the workflow of my partner and forced us to reconsider scope mere hours before the deadline.
- Don’t be afraid to pull in tools from previous projects. We used the same pause system as in a previous project with some aesthetic UI tweaks. And I hope to use Shadow Puppet’s stat system in a future project. They’re really fun stats. We also had an animated health bar script from an older prototype that would have made a world of difference. I wish I had thought of using it as opposed to the static numerical output. As it currently stands, there is no visual indicator for recovery health or its duration.
- Take promotional screenshots and record gameplay video before you submit. We left an hour extra for submission just in case there were any problems but we were both too tired at the end of it to go back and record information to promote the game. As a result, our game received only a single vote in the Game Jam and zero downloads.
- Work with new people. This one’s specific to me. I wanted to keep my first Game Jam small so I could have a better understanding of my own capabilities before committing to a group. However, we found ourselves lacking in audio and I had spent more time reiterating the program than reiterating the design. In the past when working with strangers online, I’ve had my work and money stolen, been misled about expectations, and met with far too many people who weren’t willing to put in any effort other than the base idea. For this project, I chose not to risk that again. For future projects, I shall put myself out there and do the best that I can do to make it work. Every time.
- Lastly, keep going. This project was a lot of fun to work on and it is a game I might consider revisiting in the future. This time, the theme threw us a real curve ball that we weren’t prepared to deal with until the final hours. Designing without creating an extensive document to reference had me lost for a few moments in the process. It was uncomfortable and led to a lot of unorthodox decisions from myself. Refocusing my mind and organizing on the fly was exhilarating. It was a really nice break from the mid development grind that other, more long-term, projects have put me in.
For anyone interested, feel free to play the game at the links below.
Enjoy!