Ludum Dare 51 September 30–October 3, 2022

SOME LEVELS! HERO: Post jam update 3

Безымянный.png Update 5 was complete! I guess it make the game some little better!

You can check it out here: https://rs11s21n.itch.io/some-levels-hero/devlog/439001/some-levels-hero-update-5

Thank you for any possible feed back!

Jam page: https://ldjam.com/events/ludum-dare/51/some-levels-hero

The Most Important Thing I Learned This Game Jam

Event Handlers are VERY useful!

Background Flavor...

I've been programming my own games for the past ~5 years. I have six games published on my itch.io page, and countless projects I've sunk hours of development into that never saw the light of day. None of these projects I had worked on make use of custom event handlers - nor was I aware at the time what event handlers even are. Yet, looking back, I can find tons of places where they would have make my code cleaner and my life easier.

How I Used To Do Things...

Here's a rough example of how I would have managed character functionality in the past.

``` public class Character { bool movingForward; CharacterAudio audio; CharacterMovement movement;

void ManageCharacter()
{
    if(movingForward)
    {
        audio.Play(...);
        movement.MoveForward(...);
    }
}

// ...

} ```

Why Do I Not Like This?

In software development, one of the best practices you can ever learn is to keep your systems decoupled. IE: We want our systems to not be unnecesarily dependent on eachother to perform their functionality.

In the example above, I outline an example Character class to handles working with CharacterAudio and CharacterMovement components. Now I'm gonna ask rhetorical questions... - What happens if I make a NPC using the Character class - but I don't want them to make noise when they walk? Can I remove the CharacterAudio component? - In the example above, we will error out if we remove the component. Our Character class is TIGHTLY COUPLED to its respective Character... components. - What if we add logic for checking if a component is null before using it? - We can go that route, but now we have to do that for EVERY component referenced in Character.

Why is our Character even referencing its components to begin with? Every time we create and add a new Character... component - we would need to add a new reference within the Character class and plug in the respective component function calls within ManageCharacter(). Inevitably, this class becomes bloated with a thousand references and the code becomes harder to work with and read...

Now this is where Event Handlers come in.

What are Event Handlers and Why Should I Use Them

Below is an example of how I would use event handlers to improve our code (I used Unity Actions here, but you can use your preferred method of event handlers).

Essentially, the code below shows each Character... component gets a reference to the respective main Character component - and subscribes its functionality to the respective OnMoveForwardAction event.

``` using UnityEngine.Events;

public class Character { public UnityAction OnMoveForwardAction;

public void MoveForward()
{
    OnMoveForwardAction.Invoke();
}

}

[RequireComponent(typeof(Character))] // Ensures CharacterAudio's GameObject has a Character component public class CharacterAudio { public void OnEnable() { Character c = GetComponent(); c.OnMoveForwardAction += PlayWalkingAudio; }

public void OnDisable()
{
    Character c = GetComponent<Character>();
    c.OnMoveForwardAction -= PlayWalkingAudio;
}

public void PlayWalkingAudio()
{
    ...
}

}

[RequireComponent(typeof(Character))] // Ensures CharacterMovement's GameObject has a Character component public class CharacterMovement { public void OnEnable() { Character c = GetComponent(); c.OnMoveForwardAction += MoveForward; }

public void OnDisable()
{
    Character c = GetComponent<Character>();
    c.OnMoveForwardAction -= MoveForward;
}

public void MoveForward()
{
    ...
}

} ```

The Character class is unaware of who is subscribed, and simply alerts all subscribers for when the MoveForward event occurs. This successfully decouples the Character class from all subcomponents and cleanly resolves the issues discussed above. It is fine for the subcomponents to be coupled to the Character class - as this assumption has to be made for defining subcomponent functionality.

The best part of this paradigm is shown when we want to create a new subcomponent. For example, if we want a CharacterHealthOnMove component (like some special in-game buff), then we can accomplish this with the following steps 1. Create the CharacterHealthOnMove class. 2. Define the functionality for gaining health within the class in a function. 3. Subscribe the above function to the OnMoveForwardAction event.

Conclusion

Check out event handlers if you haven't used them before. It'll make it easier to organize, write, and extend your code going forward. I heavily utilized events when coding my submission BIG BLOCK MODE for this jam.

Near the end of the jam, I had events for stuff like blocks falling, game loss, row cleared, etc - and it took literal seconds for me to subscribe audio functionality to these respective events and have it all working within the game. EZ PZ.

Note

This is my first time writing an informative blog post like this. Sorry if it sucked. I'm open to any feedback: positive or negative. Also feel free to check out our submission if you're interested.

THANKS!

Where's the Beef?

cattle.png

The aliens on the mothership are hungry, so join the rustlers and give 'em some beef!

This is our fifth game jam. Our game is built entirely in Haskell, and the graphics are hand-drawn in Clip Studio Paint. The sound effects were made in sfxr, we did the voice-acting ourselves, and the background music was played on a Kurt Cobain Jaguar.

Give it a try and tell us how many cows you can abduct!

Over 9.000 deliveries already made!

We thought it would be cool to share some statistics of our game and leaderboard with you after nearly 2 weeks of players trying it out :smile:

We've had 350+ unique players so far, with some players trying more than 40+ times to get the high score, that's insane! 🤯

In total, our Ice Drivers have delivered 9000 delicious Ice Creams to customers 🍦 One efficient driver got 89 deliveries in one run, with the runner up only getting to 59 👀

Our drivers have also really focused on getting style points and making some sick drifts with 3300+ drifts already being done 😎

However, not every driver is as skilled as the next one, with one driver crashing more than 1200+ times 💥

How many times all our players combined have crashed, you ask? Over 21.000 times! That's 21.000 BONKS!

If you'd like to check it out and be a part of our stats, check out the game here: https://ldjam.com/events/ludum-dare/51/gelato-drift :smile:

LD51-Test8.gif

How did you like your food?

  • Knock-knock! Delivery!
  • Hey, thanks! What's that noise?
  • Oh, those are robots shooting their blasters at me. It's a part of my job. And that's what makes my job very special! If you feel like trying it, go ahead!

And by the way, if you have a delivery game this jam, please, post it in the comments. Or any other interesting game. Just post it.

I'm really missing a filter for games based on the platform they are built for

I'd love to quickly jump in during the day and play a few games. But I'm on Mac and in my experience, the games I see with the Smart filter are often built only for Windows :disappointed: . It would be extra helpful if there was a filter for the Games page to only display Mac and HTML games.

Let's play (and rate, and analyze) Ludum Dare 51 - #2

Second stream of LD51 games yesterday was great again, lots of cool games and nice people on the chat. Next one is this afternoon at 5:30pm / 17:30 CEST, looking forward! :)

https://youtu.be/m7KJvAJLSXE

Games in this video: - Tense Conds by @wendel-scardua - https://ldjam.com/events/ludum-dare/51/tense-conds - To Catch a Wizard by @badcop - https://ldjam.com/events/ludum-dare/51/to-catch-a-wizard - EPOCH by @ithebreather and @wouter52 - https://ldjam.com/events/ludum-dare/51/epoch - server.vasm by @icylava - https://ldjam.com/events/ludum-dare/51/server-vasm - Pet the Damn Cat! by @deprecat - https://ldjam.com/events/ludum-dare/51/pet-the-damn-cat - Last Pawn Standing - Chess Battle Royale by @jsloth - https://ldjam.com/events/ludum-dare/51/last-pawn-standing-chess-battle-royale

Come PLay Our Game

Resource management game, work your way through eras and build the last building to finish the game on this rubiks cube world!

screen.png

This weird trick makes towers 20% more effective. Goblins hate it!

Sorry about the click-bait title! Doesn't really work when the whole post is here (if you must know, the weird trick is upgrading the tower). Anyway, I've just released a post-jam version of my tower defence game: Screen Shot 2022-10-13 at 7.03.30 pm.png

Now with 2 new towers, 1 new enemy, animations, keyboard shortcuts, UI improvements, scoring and a lot of balance and bug fixes, plus the original epic programmer art.

Check out the jam version here: https://ldjam.com/events/ludum-dare/51/10s-to-decide

And the post-jam version here: https://rob6566.itch.io/10s-to-decide-post-jam-edition

A new trailer for KAIROS, Battle for Seconds

We made a trailer for our Ludum Dare game!

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

If you enjoy it, feel free to play it here : https://blukulele.itch.io/kairos-battle-for-seconds

Going for the win at LD Score Chasers Tournament

scores.png

Did a little bit of practicing today for these games that are probably going to be featured on the tournament:

  • https://ldjam.com/events/ludum-dare/51/holospecter
  • https://ldjam.com/events/ludum-dare/51/gelato-drift
  • https://ldjam.com/events/ludum-dare/51/trashpunk
  • https://ldjam.com/events/ludum-dare/51/getting-farted-on
  • https://ldjam.com/events/ludum-dare/51/terminal-velocity
  • https://ldjam.com/events/ludum-dare/51/bearly-fishing

What is the tournament?

Here's the link: https://discord.gg/YpKCPrxG?event=1028742912084803594

52ff3.png

GET ME TO PLAY YOUR GAME

im bored cause ive got nothing to do, send over your games. please tell me if you want detailed feedback!

Also play my game if you want! https://ldjam.com/events/ludum-dare/51/peekaboo

Here's a monkey smoking a banan to get your attention monkey-1479135em960/em720.jpg

Cat Blaster's new cover!

cat blaster preview.PNG

Try out Cat Blaster here!

I commissioned the amazing artist Lorim/fishbats to make a new cover image for my game, and I think it turned out incredible! If you're interested in getting quality art with a quick turnaround, consider commissioning them too.

Even though I paid for it, it feels amazing to see an actually good artist interpret something I made into their style. I wonder if this is how Toby Fox feels every time someone draws a new Sans AU.

Stream starts in 1 hour: Let's play (and rate, and analyze) Ludum Dare 51 - #3

Third (and penultimate) stream of LD51 games is coming up in an hour at 5:30pm / 17:30 CEST.
You can submit your game and find more info here: https://forms.gle/ZcFWhKuw6Yojvoxz5
Hope to welcome some of you there! Here's the direct link to the stream:
https://youtu.be/Fh3ux7N9fJ8

PS: Two games will have the highest priority of getting featured, these are team Peekaboo (@maxkyckling, @victorfinger) and team Clique Hell High (@artofluba, @pychewing, @boorulz, @fiat-ventus, @add-art, @sean-esopenko). But apart from those chances are high for your game to get featured if you join the stream :)

Adding leaderboards to the post-compo version of my game!

Spent a bit trying to add leaderboard to the post-compo version of my game, yeah I'm still working on it, I'll release it soon hopefully! If you're interested it's done using SilentWolf, a backend service for Godot!

(Ignore the names in the leaderboard they are for testing)

leade.jpg

Thank you

Hi all. We didn't expect our game to get so much feedback. Your comments are great to help us understand what we need to work on to make the game even better in future jams. Thank you for playing and appreciating. :heart:

If you haven't seen our game and you want to play, you're welcome here or Itch . Also drop your games in the comments so we can rate them.

cat.gif

THE GAMES THAT WILL BE PLAYED ON THE SCORE CHASERS TOURNAMENT ARE DECIDED!

These games were voted on by the competitors, and they are:

Holospecter

by Kepsert (@kepsert) , iXane (@ixane) , Yirsi (@yirsi) , Moon Eventide (@moon-eventide) , jamiedoesthings (@jamiedoesthings) , and theStoff (@thestoff)

Getting Farted On

by kuviman (@kuviman)

Trashpunk

by Pomo (@pomo)

Terminal Velocity

by mhorth (@mhorth)

Bearly Fishing

by Jazkottaja (@jazkottaja) , AnniV4X (@anniv4x) , yakkocmn (@yakkocmn) , and SakuH (@sakuh)

Gelato Drift

by KoningMathijs (@koningmathijs) , and thomz12 (@thomz12)

votes.png

https://discord.gg/YpKCPrxG?event=1028742912084803594 LDSC_Card.png

Playing a few more games live + Busy Tracks improvements

Hey folks! I'm doing another live play+rate session today, over at twitch.tv/Outfrost.

Starting around 16:00 UTC / 09:00 PDT / 12:00 EDT / 18:00 CEST / 19:00 EEST.

This is the rough schedule for tonight: (times in UTC)
16:30 - Supply & Command (@Langotriel), server.vasm (@icylava)
17:30 - FF:10 (@dysleixc), Groceries Please! (@natpat)
18:30 - 10 seconds Delirium (@Furano), Thoughts (@Celthim)
19:30 - Citri Plays Noirwood (@aplovestudio), The decasecond (@Shakedimus)

After these, it's a bit of wildcard - I'll decide what to play :)

Besides that, I'll also be finishing a more polished 2nd version of our game Busy Tracks. I'd love if you check it out!

here comes the sun 2x.gif

Come say hi!

Chicken farm

4ff9a.png

Your friend gave you a special hen that can lay an egg every 10 seconds. If you can take advantage of this, keep the hen alive and breed her, you’ll become rich.

You won’t have it easy, though, the hen is very hungry and thirsty, and it’s not cheap to feed. Also, if your hens get too many, they can eat all your food and kill all your hens.

5035d.png

https://ldjam.com/events/ludum-dare/51/chicken-farm