Simeon Radivoev

Ludum Dare 52

Developing Infernal Garder

My main responsibility was coding, but you all know how there jams go. I'll talk about some of the hurdles and challenges we faced during these 3 days.

Unity_D6sIW2dLIB.png

The Start

I knew nailing the player controls and feel was essential. So we spent a bit more time on adding walking animations along with sway and bobble. https://youtu.be/nqmT_lSBAgc

Later on, when implementing the shooting AI, I added a bunch of juice like a camera shake and particles.

https://youtu.be/SvnAmwoWUx4

Architecture

We had planned at first to have a lot of enemies and bullets on screen, but I knew going with something like ECS won't be feasible in 3 days. So I just decided to use some of its strengths and utilize unity's way of doing thing as much as possible. So we went with a very atomic and modular components. Each having as little responsibility as possible. Here is the enemy prefab for example:

Unity_ADNe0Telxj.png

With this architecture we could quickly add almost anything we thought of, for example, plants that spawn minions that search for enemies, that was easy to do, just slap most of the components that enemies have, and change their target mask to enemies.

Performance

I suspected some of the biggest performance hogs to be the target searching, as I wanted it to be constantly updating so that enemies can find better targets not just stick to one. One quick hack I picked up for getting some free performance, was to add a random delay between each update, to stagger them since not all enemies would, for example, have the same delay and wouldn't all update at the same time causing lag spikes.

Design Troubles

Me and Nani (design) had a disagreement on what the best approach to the gameplay loop is, he was adamant about going for plants hurting the player and them doing all the work, you don't even need to shoot. I was more into shooters and tower defense, so I put my foot down on shooting. We did go with plants hurting you in the end though and he did prove me wrong, the whole plants hurting you turned out fun, once he balanced it properly. But I still wanted some more relaxed gameplay and given the modularity of the architecture we went with, including using Unity's prefab variants I added a quick mode where plants don't attack along with a new plant inspired by plants vs zombies that straight-up aims and shoots enemies and called it zen mode. (It is now the primary mode of the game, as jam players don't tend to stick too much with hard games).

sharpemshooter.png The Sharp Shooter Plant I had to draw using Gimp and a mouse :neutralface:

Last-Minute Additions

With all the commotion and juggling multiple features we kind of forgot about the pause menu. The guys were like "Don't worry, players can just press Alt+F4 to quit", and I was like, "screw that, I'm adding one". During the last 3 hours, I rushed to make it and just copied the main menu and quickly cobbled together one at the last minute. After all, it does help with polish and avoid making people frustrated when they can't change their volume mid-game or exit :neutral_face:

Unity_42XULbIT3Q.png

Play Our Game

Play our game on itch in your browser: https://ernani.itch.io/infernalgarden

Ludum Dare 53

Game Jam Recap: Birdmail

Here's a recap of our experience and what we learned.

Brainstorming Ideas

๐Ÿ•น๏ธ I had this crazy idea of making a game with boids, which are these simulated birds that flock together in a mesmerizing way. I showed my team some cool gifs of boids in action, and luckily, they were onboard. Our designer, Nani, started thinking of ideas for a game with boids that also fit the "Delivery" theme of the game jam.

Meanwhile, I got to work on implementing the boids.I knew that we needed to utilize Unity's Job system and Burst compiler to handle a large number of boids efficiently. It took me a day to code the boids with jobs and efficient parallel jobs so that we can have hundreds of thousands of boids on screen.

Running into Challenges

๐Ÿฆ After it was too late, I realized the WebGL builds don't have multithreading. Later, I figured out they did have that option, but it was limited by newer browsers and caused memory problems and some strange errors with audio when switching scenes. But that did not stop us from moving forward.

๐Ÿ—บ๏ธ With only two days left, Nani came up with a great concept that we honed as a team. Originally, the game was to have players guide a flock of birds across a map, using a mouse cursor as an attractor while strategically placing repellors and attractors. The map itself would feature obstacles such as predators and wind zones that the birds would need to avoid. However, midway through development, I realized that implementing the complex movements of the boids and designing enjoyable levels would be too time-consuming.

๐ŸŒช๏ธ Ultimately, we had to pivot from the original idea and come up with a new concept that could be executed within our timeframe.

Pivoting and Creating a New Direction

๐Ÿค Nani and I put our heads together to come up with a faster and more feasible idea for the game. I realized that my initial suggestion of using boids was a bit ambitious given our limited time frame of only three days. So we shifted our focus towards a new concept: a game where the player must retrieve packages from escaped birds.

๐Ÿ•’ With only a day and a half left, I knew that we had to be strategic with our time. To add more depth to the game, I asked one of our artists, Angry Frog, to sketch up a little story. While I initially tried to speed up the process by generating AI images, I found the results to be inconsistent. However, Angry Frog's sketches ended up being the perfect fit for our intro.

๐ŸŽค Another successful element we incorporated was the use of AI-generated voice narration using Eleven Labs. To add some humor, I chose an English accent of an old male voice and cranked up the accent to 110% :laughing:

Adding Unique Touches

๐Ÿ•น๏ธ One of the interesting aspects of the game was the navigation system. As a fan of the game Black and White, I suggested implementing a similar god-hand navigation system, and the team was all for it. To make it more immersive, Angry Frog sketched out some hand poses based on reference images I took of my own hand using my phone. The result was a unique and intuitive way to move the camera and interact with the game world.

Conclusion

๐Ÿ‘จโ€๐Ÿ’ป We faced some challenges during development, one of which was losing one of our programmers who couldn't join us for the last day. But despite this setback, we managed to create a playable game in just a few days.

๐ŸŽฎ We're proud of what we were able to accomplish in such a short amount of time, including implementing the bird movement, creating an intro story with hand-drawn sketches, and implementing the god-hand navigation system.

๐Ÿš€ While the final product wasn't perfect, we learned a lot from this experience and are excited to see what people think of it.

๐ŸŽฎ Play our game! Check out BirdMail on Ludum Dare now! ๐Ÿฆ๐Ÿ“ฌ


Cutting Room Floor

๐ŸŽจ Here's the original concept drawing of the city level that the game was supposed to be based on. It was meant to be a top-down view of a cityscape with buildings and roads, and players would use their mouse cursor to guide a flock of birds around the map.

City Level Concept

๐ŸŒฟ Later, the team decided to pivot towards a god-like, post-apocalyptic overgrown city instead. Here's a screenshot of the level with the new concept:

Post Apocaliptic

๐Ÿ“œ As mentioned earlier, we experimented with AI-generated images (using Bing Image Generator) for the opening intro story. Here are some examples that we didn't end up using:

My project-1 (Medium).png

๐Ÿข Finally, here's the isometric city asset that we used for the level. We loved the look and feel of this asset and it helped to create a cohesive visual style for the game:

Kenney Assets