Ludum Dare 51 September 30–October 3, 2022

Night of the Spook - Thoughts on Balance

Hey folks!

We wanted to share our experience of trying to balance our entry Night of the Spook as the jam was winding down.

gameplayemdemo/em2emsmall/emAdobeExpress.gif

On Sunday night, we had all of the pieces of our game ready: - player controls - enemies - spawning off camera - combat equipment - upgrades - art assets, sound effects, and music - most of the map complete

It was time to start bringing these pieces together to make a coherent and enjoyable experience from start to finish.

What do you mean we have to balance our game!?

But we felt a slight twinge of panic as we looked at all of these pieces, all of the various levers we had to tweak, in order to bring some semblance of balance to the game.

panik-kalm.gif

As the clock crept closer and closer to midnight on Sunday, we knew we had a few constants we could rely on to base our balance around

Enemies

|Bat.gif | Rat.gif |Slime.gif | |------------------------------------------------------------------------------------|---------------------------------------------------------------|----| |Skelly.gif |Player-Zombie.gif | GhostHead.gif |

We had create a pool of 6 enemies to pull from (plus a secret mystery boss), and we wanted to utilize all of them.

Game Length

For Ludum Dare games, we try to target 5-10 minutes for the player to experience every mechanic the game has to offer in one play session. Since we had 6 enemies + 1 boss, we targeted 7 minutes. This way we could keep the game fresh by adding something new every minute.

Upgrades

We had created three different types of equipment, each with three stats and two levels of upgradability. The player's main weapon (the Spookbuster) also had three stats and two levels of upgradability. 3*3*2 + 3*2 = 24 possible upgrades. We wanted gameplay to feel different between runs, so we knew we didn't want the player to be able to reach level 24 in a single run.

Beam Damage

During development, we arbitrarily decided to set the player's beam to 2 DPS. We decided to stick with this value as an anchor for future numbers.

Player Health

For simplicity, and to soothe our increasingly melted brains, we decided to set the player health to 100.

These constants gave us enough of a foundation to balance the gameplay around. From there, we want to planning out these 7 minutes: how enemies would spawn, which enemies would be (relatively) more powerful than others, which enemies would be faster, where they would spawn, etc...

thoughts.png

Spreadsheet Balancing

By this point it was Monday morning - we only had a few hours left, and we had roughly sketched out timings and power rankings the night before. We were happy with the general flow, so we went to the spreadsheet.

enemy_stats.png

We started off by setting damage and health stats for our enemies based off the power rankings from the night before. Since we knew the player health was 100, and did 2, 4, 8 DPS depending on their upgrades, we had a solid foundation to assign some values. We knew we didn't want enemies to be as fast as the player - during early playtests, we found that to be incredibly frustrating, so we had a speed ceiling. We also decided to link attack speed with movement speed, so that removed another variable.

We added a DPS column to make sure none of our stats (damage, attack speed) ballooned out of control. To calculate a enemy's experience value, we multiplied their health by their DPS. Why? Well, because we felt like it! This entire exercise was the blind leading the blind, but in practice this ended up to work out okay.

Once we had a table of stats, we could implement them in Unity and play around for a bit. We tweaked enemy speeds here and there, lowered the health values of early mobs so the player could kill them more easily, but were relatively happy with how things turned out.

Wave Progression

Once we had numbers we were happy with, we had to design the waves. We decided on 7 minutes until the game's boss spawned, and we broke those 7 minutes into 1 minute chunks.

waves.png

From our discussion the night before, we knew we wanted to introduce a new enemy approximately every minute. We created a table where we sketched out how many enemies would spawn per wave: this would be broken down further in practice, where enemies would spawn in mini waves every X seconds and the new unit would be introduced at the X:30 mark. By this point we had been playing a lot of our game in test scenes, so we had a vague idea of how many units we wanted on screen in the late game, and we knew we wanted a gentle ramp-up to that point. To be honest, the exact numbers we put in this table was almost entirely vibes.

We also created tables that tracked the amount of experience gained per enemy type per wave, as well as a table tracking maximum wave experience + total accumulated experience. When we were happy with the numbers, we moved on to calculating the experience curve.

xp_curve.png

Going back to one of our previous anchors, we knew we had a maximum of 24 upgrades, and we didn't want the player to experience them all, so each run could feel different. We decided to target a player level of 12 around the time they got to the boss. So we create a table that tracked per level XP requirements as well as total cumulative XP required. We then charted this graph and the previous table tracking possible XP gained per wave. With the "max possible XP over time" serving as our anchor, we could tweak the values in the level XP curve until we were happy with how they tracked each other. This also allowed us to set level targets per wave, ensuring that the player felt consistently rewarded.

Final Thoughts

Ultimately, we had very little time playtesting our spreadsheet balancing, as the deadline was rapidly approaching. I believe only one of us finished the full 7 minutes before we submitted, but we felt really happy with how the numbers ended up feeling through short play sessions. Being able to visualize much of the balance in a single spreadsheet and see how one number change can propagate throughout the spreadsheet really helped.

Did it work? I think so! As a team, we played our game a bunch after submission, as we were just have a genuinely good time playing it (which has not always been the case with our previous games). We had runs where we won, runs where we almost won, and runs where we got utterly wrecked. We have comments ranging from "game's too easy" to "game's too hard", "beam's too weak" to "beam's too strong", "equipment's too weak" to "equipment's too strong", which in a way tells me we did okay. :smile:

If you have interesting thoughts on balance to share, please leave them in the comments or make a post of your own! Balance has always been a great boogy man we leave until the last minute, and it would be great to learn how others approach it.

Mallow.gif

And if you're interested in our game (and the mystery boss), give it a try here!

Last Minute Ratings!

Panopticon.gif

Hey everyone, im finally getting around to playing all the entries i can! Please feel free to leave your game in the comments and i'll play it :)

Here is our game in case you wanted to check it out, its a short and fun experience meant for spraying paint all over the place! :)

https://ldjam.com/events/ludum-dare/51/panopticon

Pandora’s box game

Check out our Game!

https://ldjam.com/events/ludum-dare/51/pandoras-box

Thank you all for much love and feedback! 🤗🤗🤗

AEB12BD2-4336-4BA1-B10D-FA4F56060572.jpegCAB83AB6-88D2-44A0-AC7E-CD50CDA5C56B.jpeg

Mixing art styles?

What do you think about mixing styles in a game? Like using retro styled art combined with "non-retro music" in the same game?

We tried this approach in our LD game, and I think it's kind of cozy, but I curious to know what you think.

https://ldjam.com/events/ludum-dare/51/rocket-madness

Also, it would be interesting to hear if you have any examples of cool Art style mixes. :-)

What has changed?

unknown (1).png unknown.png It's been almost 2 weeks since the end of the main work and the moment when we started to finalize the game. While we were away, we didn't stop working. Many bugs have been fixed. Unfortunately, we didn't have time to add all the cool things that had already been worked out. It is a pity that there was not enough time for this. Nevertheless, we really worked. We have an improved version of the game ready, which you can evaluate.

By the way, come and see! https://ilya096.itch.io/iamnotedible

Rate: https://ldj.am/$301404

We will be very grateful for the ratings and feedback.

Only a few days left before the results!

Hi everyone, we are almost there, it's really exciting, I can't wait and you ?

I'm going to put some more time to vote in the "danger" category, it would be a shame to leave so many good games outside the ranking !

For those who didn't have the opportunity to rage on my game yet, go and have a look if you feel like it:

crt-speedrunforlight2.png

ezgif.com-gif-maker.gif

And of course if you haven't tried my game yet : PLAY-IT HERE

Three more rates?

Three more rates, pls? https://ldjam.com/events/ludum-dare/51/10-seconds-to-spock-you

Only 2 days left! Come deliver a few packages.

Hello everyone, just a few ratings before hitting 20 ratings. Would appreciate anyone who could give a play to my game ‘Take your sh*t,please' and then leave your rate and feedback to help me get enough ratings.

https://ldjam.com/events/ludum-dare/51/take-your-shtplease

Game description:

Welcome to Neon City post station, newbie.We are known for delivering packages to our customers quickly and without mistake. So, slowness or mistakes will get complaints.Complaints are not acceptable. Now, take a seat and start delivering packages!

How to play: Find the customer’s package within a 10-second time limit, and submit it. Delivering packages quickly and correctly to get more scores. Timeout or a mistake will get a complaint. Getting three complaints will get fired. Game end.

Mouse left click only.

Snipasteem2022-10-04/em04-46-02.png Snipasteem2022-10-04/em04-46-10.png Snipasteem2022-10-04/em04-49-14.png

Every 10 seconds

https://ldjam.com/events/ludum-dare/51/every-10-seconds-4 itchIoFrontPageLD51.jpg500x300LudumDarePics2.jpg500x300LudumDarePics0.jpg

Badaboonker

https://ldjam.com/events/ludum-dare/51/badaboonker

Hide in bunkers from nuclear explosions and find what caused ​​this

https://www.youtube.com/watch?v=iGYWcVR_irY

Play My Game: Returnal

https://ldjam.com/events/ludum-dare/51/returnal reby1.PNG rby2.PNG

Heckin' Schmeckin' Post-Ludum out now!

The post-compo version of my game is out now on itch.io here, come play now and get your name in the leaderboard! Let me know if you find glitches.

cover art updated.png

Postmortem

Well, this is my first postmortem, but seems like a great habit to have, so here we are!
Wish me luck!

Theme and first hours
The theme here in Italy is announced at Friday midnight, so I brainstormed for 1/2 hours before going to bed.
I started by writing down on Milanote whatever came to mind, then I got a list of the main game genres from Wikipedia and tried to apply the theme to any of them.
I ended up with quite a lot of stuff, and came back on first day (late) morning to trim my list and elaborate on the ideas that did pick my interest.

First day

After a little trim, this is what I had by the start of the first day:

Screenshot_1.png

Chosing an idea
Here is a list of some concepts worth mentioning and the reasons that led me to discard them:
1. Teleport
Understanding some past events through environmental storytelling while being teleported around every 10 secs
-> Out of skillset and resource budget
2. "change world layer"
Sidescroller platformer with objects on multiple layers that are switched between every 10 secs
-> Was meant to work something like Hue, so I discarded it for the lack of originality. Thinking of it now it could have led to totally different puzzles through the 10 secs limitation, who knows...
3. Vision
Being able to see every 10 secs
-> Couldn't really think of a fun way to wait in front of a black screen for 10 secs, but I came across some great entries that used this approach
4. State swap
Swap character or team every 10 secs
-> This actually seemed like a lot of fun, but I wanted to keep it singleplayer and not having to write a decent AI in a rush. I'll probably try to extend more on this one concept.

I'm pretty happy with what I made, but I can't help but think many ideas I discarded could have led to a more interesting gameplay. Probably not as polished though.

First prototypes
At the beginning I thought to make the arena harder to navigate using physics based zero-g controls, and the main character had to be an astronaut wearing a jetpack.
After making a first prototype it was too frustrating to move around and avoid stuff, so I decided to stick with simpler, snappier controls and increase bullets number, speed and pattern variety instead.

Graphics and concept
While scouting the Web for assets and graphic ideas I came across these cool trees and knight asset packs that ended un in the final game. I then started making the arena and implementing the leaf particles when trees get hit (Yeah, I'm one of those bad guys that waste a lot of time on trivial stuff before they even have a playable demo).

Having a knight in a forest I thought the attackers would be druids, mages or something on this line, so I made some generic magic bullet shader and a flash of light of the same colour to announce the shot.

This is what it looked like by the end of the first day:

Day one progress.png

Second day

On day two I took it a little slower: the previous day I realized I couldn't submit the game as a compo because I used third party graphics, so I had one more day to finish.

Core mechanics and level editor
I abandoned the idea of having bullet spawners inside the arena because I couldn't think of a coherent look for them. It just seemed cooler to have some unseen foe hidden in the forest.

So I worked on the bullet variants and the spawning system (Before I only had a fixed source bound to an object) and did set up two splines that define the possible spawn points.

Then I wrote a draft of the level editing system. It uses Unity ScriptableObjects to store lists of bullet types associated with the seconds to wait before launch. Spawn position is a randomized point on the previously mentioned splines.

Music
To take a break from development I programmed a drum loop in Ableton Live and recorded guitar and bass for the soundtrack. The final version is pretty much unchanged except for a little editing and mastering done the next day.

Third day

On day three the core game was finished, more or less.

The Horse part
I found a vector graphics horse I didn't notice before in one of the asset packs I was using, and I wanted to turn it into an NPC, so I made a the little dialogue system you can see in the game.
The plan was to make both the horse an in-game character and the knight present in the dialogue, so that they could answer each other and react to the dialogue in the world, but I had to cut this for the lack of time.
Anyway I had time to make two little intro and ending scenes.

Health system and general polishing
I dedicated some time to animating the character and making win and death screens. Then I decided to add a few lives to make the game less frustrating and made a new HUD to match the style of the dialogue panels. I also made sure hit feedback was as clear as possible (Flash on character sprite, camera shake, sound fx).

Bullets graphics update
I wasn't satisfied with the graphics of the bullets (Variants were just different sized color swapped versions) and with the intro gag the game had took a humoristic turn enough to think of some new bullets to reinforce that aspect.
The first idea was to throw completely random stuff, then I kept it fruit-only for consistency.

At this point it made no sense to keep the flashy light before launch, and it got replaced by a more cartoonish speech bubble. Actually I wanted them to preview the type of bullet, but hadn't that much time and they would have probably been too small to give any significant help, so I kept the danger sign.

Level design and jam end
My last jam hours have been spent making levels and testing them, until I got ten working levels and was happy and tired enough to call it a day and upload.

Some features that didn't make it into the final game:
Speech bubble bullet preview, banana boomerang trajectory, dialogue featuring both characters, in-game Horse NPC.

And here is the final version that you can play on my itch.io:

Gameplay_1.png

You might argue that blue bullets had better contrast with the environment, and I would agree with you, but having bullets of multiple solid colors in the scene (to differentiate between types) didn't look that great.

Conclusion

Ludum Dare is a great place to try new stuff, see cool ideas and get constructive feedback, and once again it has been a great pleasure to be part of this amazing community.

Thank you for making it this far in this long post, I hope this was useful to you in some way.
Take care and I hope to see you again in a few months for LD52!

HorseAndKnight.png

Play my game

Hi! Finally I added WebGL version of my game (hosted on itch.io), so you can play it on a browser. Enjoy!

https://ldjam.com/events/ludum-dare/51/10-seconds-disasters

WhereIsThatKittyGoing ON GOOGLE PLAY

Our team is grateful to everyone for your sweet comments and in return we give you our endless love.

At the moment our game is being tested in Play Market and very soon you will get it for FREE on android ( we took care that it weighs little and does not load your phone) photoem2022-10-19/em21-49-40.jpg Until then, please continue to rate our game (CLICK HERE) and recommend it to your friends! We want to make it available and enjoyable for everyone, that's why we are improving it on all devices at the same time.

Thank you for your support and love!!! :heart:

Auto Parker - Every 10 second you park

Hi ALL!:smiley:

Ludum Dare we love you so much!

So the voting is coming to an end. A very cool event!

Thanks to the organizers! And I'm making one last post to the feed.

Check out our game if you haven't seen it yet ! Maybe it will change your driving style!

We tried so hard and we hope we got something incredible

With love... @bathpirate and @grlmc

:pencil2:Comment please:gift_heart:

https://ldjam.com/events/ludum-dare/51/auto-parker (HTML5 Web)

Запись экрана 2022-10-04 в 22.35.423.gif