Meat Harvester: Ludum Dare 52 Retrospective

https://ldjam.com/events/ludum-dare/52/meat-harvester

I've been wanting to take a swing at Ludum Dare for a while now and it finally landed on a weekend where I had space for it, so I jumped in! It was pretty fun and I feel like I accomplished what I set out to do. I thought it might be nice to write about what I made. I definitely will take more WIP screenshots next time but hopefully it's still an interesting read.

The theme was Harvest, and I thought it would be fun to turn the obvious farming thing on its head and make a game where you're a plant that grows to harvest meat from living beings. I used Unity and did all the sound effects, music, programming, and visuals (mostly unity primitives haha) by myself. I started on Friday around 5:30pm, and finished on Sunday around 9:00pm.

I managed to get pretty solid ratings for my first try, too. I was particularly surprised to get 13th out of over 1.1k entires for innovation! Here's how I scored:

Overall: 384th (3.525 average from 22 ratings)
Fun: 310th (3.525 average from 22 ratings)
Innovation: 13th (4.3 average from 22 ratings)
Theme: 486th (3.575 average from 22 ratings)
Graphics: 607th (3.075 average from 22 ratings)
Audio: 250th (3.5 average from 22 ratings)
Humor: 435th (2.813 average from 18 ratings)
Mood: 233rd (3.722 average from 20 ratings)

Plant Growth

I started off by working on the plant growth. The plant consists of a bunch of capsules attached to each other with physics joints, and the shape of the plant is maintained by applying physics forces to the tips of all the plant parts to push them away from other nearby parts. The force scales with distance as well (it's basically inverted gravity).

I think this was the area I ended up wasting the most time because tuning the physics forces that control the plant took quite a while. For a while I was oscillating between the physics forces being too weak to maintain the shape I wanted and the forces being too strong for the plant to move smoothly and cleanly. I eventually realized that trying to control the physics forces purely with the distance scaling was dumb. I started clamping the forces to a certain range and suddenly everything was behaving much better.

Initially I just had a bunch of random parts being added, so the next thing I did was add the ability to place parts by clicking. Now we can grow a plant but theres no limiting factor, which doesn't feel very game like.

Nutrients

I decided that plant parts would need nutrients to survive and would take a certain amount of nutrients to complete their growth!

To make this happen I made it so that the root plant part is constant fed a certain amount of nutrients per second, and then made it so that all plant parts pull nutrients from the part they're attached to in the rootward direction. There's a cap on how many nutrients per second a plant part can absorb, so there's a bit of natural restriction on the size of the plant already from that.

Next I made growth require nutrients. A plant part might require 10 nutrients to fully grow, and be able to absorb 2 nutrients per second from its rootward part, which would make it take 5 seconds to grow. If all the nutrients that are being fed to the root part are being used to keep other plant parts alive, growth can stall completely.

I then made plant parts drain a small amount of nutrients for survival. I also gave plant parts a health value at this point and made them take damage if they didn't have the amount of nutrients they need.

We've got a mechanic in place to limit the plant size and introduce some potential decision making now, but there's no challenge or losing condition yet, so let's fix that.

Enemies

I figured a closed gameplay loop was the thing I really needed to shoot for next so I added enemies that will move towards the nearest plant part and attack it. I also set up a wave spawner that spawns more enemies over time.

I also had to make some tweaks to account for plant parts being able to be separated from the main plant, since previously they would always die back from the tips first. I ended up wasting a bit of time chasing goofy bugs here but got it working in the end.

Now we need a way to defend ourselves. Initially I wanted to have the player grow fruits and flowers that would attract enemies, and allow things like thorns and sticky traps to damage them, but I was kind of stuck on what exactly that would look like and decided I'd start by paring it down to some plant parts that just attack enemies. I made some mouthlike parts that get a little physics force applied to them to push them towards the closest enemy and made them damage enemies when they were in range.

I would have loved to have more time to make more varied enemy types and more ways for the plant to engage with them.

Game Over

At this point it was possible to lose, so I figured I needed a way to start a new game. I put together a quick and dirty main menu and added a game over state. Nothing particularly exciting here but this made it feel more like a real game too which was kind of nice haha.

Nutrients 2.0

So now we had a gameplay loop but I'd set out to make a game where you harvest meat from the enemies you slay.

I added nutrient sources and turned off the default nutrient inflow to the root plant part. Basically any nutrient source that's within the root radius (the darker circle around the plant) will be slowly absorbed into the base of the stem. A nutrient source holds a fixed amount of nutrients and slowly shrinks visually as it's depleted. I plopped a few nutrient sources around the plant to start you out.

Next I made enemies leave behind corpses (nutrient sources) when they die. The plant can only absorb a certain amount of nutrients per second from each source, so as enemies come in larger waves you're naturally able to support a larger plant.

I also made plant parts turn into nutrient sources when they die. They only contain half the nutrients they were holding at death, but it feels nice to get a little bit back when you lose a part, and this allowed me to use the same system that makes nutrients shrink and disappear to clear dead plant parts from the screen which felt like a win.

I toyed with the idea of placing root parts, and having root parts absorb nutrients in a radius around themselves, but it felt like a little bit too big in scope for how much time I had left. Ideally I'd have had a button to swap between viewing the above ground and underground layers (and show the other layer faintly in the background)

Audio

I'm a sound designer by trade so I felt like I had to make some quick sounds. I whipped up a quick ambient loop, sounds for enemies and plant parts taking damage and dying, and then some sounds for placing and growing plant parts. Most of the sounds were built from a few layers of manipulated audio that I'd recorded previously and had saved in my personal sound library.

Once that was done I whipped up a little bit of ambient music. I tried to keep it feeling mellow and floaty like the plant movement, but dark because we're eating meat. I think it feels pretty good for how quickly it was written!

Success!

I decided to call it at this point, so I built and uploaded the game and submitted it which felt great. I'd of course have loved to not get stuck on the couple areas I mentioned where I felt like I wasted the most time. It would have been great to have had more time to add plant parts and enemy types, and some better UI to make the underlying systems more visible.

I think there's a lot of room to build on where this ended up so maybe I'll play around with it more in the future. All in all I think the whole process went really well and I'm proud of how much I was able to put together over the weekend. I'd definitely call it a success! I think I'll likely do this again in the future :)

Here's another link to the game if you want to check it out: https://ldjam.com/events/ludum-dare/52/meat-harvester