Jeremy Ryan

Ludum Dare 51

Fan art! And a post-mortem.

Fan art

This year, I decided to draw a character from every game I played during play and rate. Here's the group picture!

fanemart/embanner.png

ld51.jpg

Special shout out to the games that won medals! - The Sandwicher got 1st Overall and 2nd in Fun - Thunderstorm got 2nd in Mood

Was it worth it?

Absolutely! This has been a blast, and I'm highly considering doing it again for future events. Here's a summary of how things went this time:

  • Rating games takes much longer. For past events, I could play through many games in a sitting, since it took maybe 15 minutes on average to play through a game. By adding the illustration, I'm often taking 45 minutes to an hour on each one.
  • I rated fewer games, mostly as a result of the first point. I only played 17 games this event, which makes me feel a little bad for being a net "drain" of ratings (I received 36 on my game).
  • There are some really fun characters out there! I was afraid it might just end up being a bunch of generic people, but I had lots of fun drawing every character on here. I did take a few creative liberties for some of them, like this inspector drone from Among 'Em by @william-derksen:

amongem.png

  • People are super appreciative. I received multiple messages here and on Discord expressing gratitude for the doodles. A few folks expressed how much it mattered because they had never seen fan art of their games before. This was very heartwarming, and made me think we should be encouraging these sorts of projects more.
  • Speaking of "these sorts of projects..." It wouldn't be fair not to shout out to @brainoid's music covers... they're incredible!

List of games

Here are all the games shown in the picture, if you want to play any of them:

Eleventh Second post-mortem

Also using this post to talk about my experience this jam making Eleventh Second.

banner.png

What went well

  • Making a sequel - This game isn't only a standalone game, it's also a sequel to my LD50 game Eleventh Hour. I think I hit something close to the sequel rule of thirds, keeping the game's kunai-throwing protagonist, time travel, and visual motives but changing the gameplay to a vertical grappler.
  • Art and atmosphere - I'm really happy with how the game looks! I got to play with some fun visual tricks I hadn't really used before (such as squash and stretch on the "dust" particles to simulate motion blur).
  • Juice - The game felt pretty nice to play! I'm particularly proud of the grappling hook animation for the player.

11thsec.gif

What went poorly

  • Ideation - I was really not inspired by this theme at all. The theme was announced at 5pm on Friday, and I went to sleep that night not having touched any code and without knowing for certain what game I wanted to make.
  • Music - Since losing my student license to Sibelius, I've floundered a bit for getting good-sounding game music on reasonable timelines. This time I waited a bit too late in the process and just recorded myself playing keyboard straight into Audacity. I got mixed feedback on the music, but definitely think I could have done somethin more with enough time.
  • Scope and innovation - I definitely think this was a "safe" jam for me, especially given my trouble coming up with ideas. In the future I hope to think more outside the box and make games that are more unique from a gameplay perspective, and lean less on my art, audio, and juice skills.
  • Gears - I wasted at least a few hours trying to get the gears to mesh with each other. Turns out my math was right, but I accidentally had two very similarly-named variables that I was messing up. That's what I get for using a language without explicit variable declaration!
  • UI - I had a lot harder of a time making nice UI in the "sidebars" of a vertical game. Last event, I had the timer shown visually with a setting sun, which I liked a lot. This time, I just had a ten-second countdown, which felt less organic and was harder to notice in the thick of the action.

Results

ratings.png

Wow.

Thanks everyone who took the time to rate and comment on my game. It means a lot, and the community and feedback are what keeps me coming back every event.

So how do I reconcile these results with my how well I thought I would do?

  • As expected, Graphics and Mood were some of my best categories. Obviously getting 4th in the Compo in any category is crazy, and exciting, and almost certainly as much due to luck as any actual merit, but I thought it would likely be my strongest category.
  • I did better than expected in Fun, especially given feedback that some of my code for spawning platforms made for some frustrating moments. I think having a short "tutorial" and satisfying graphics might have made the game more accessible and helped with this category.
  • I did much better than expected in Audio, which I thought fell short of some of my previous entries. It's possible the final product was just better than I give it credit for after the frustration I had being rushed creating it, or it's possible other parts of the presentation like graphics and juice bled into this category, and raters were more generous as a result.
  • Innovation was my worst category as expected. Definitely room for improvement here, and next Jam I might have to really expand my thinking and make something cool!

Bonus fun fact

The clocktower in Eleventh Second is 1000 feet tall. If it was a real clocktower, it would be the second tallest clocktower in the world (behind the Abraj Al Bait in Mecca) and more than triple the size of Big Ben!

Until next time!

Thanks everyone for making this community great, and look forward to Ludum Dare 52 in January!

And if you made any sort of fan content like art or music covered, I'm super interested in seeing it!

Ludum Dare 52

Graphics tips and shortcuts for Compo

Making games is hard. And it's even harder when you decide to do it in 48 hours, six hours of sleep a night, and a couple bowls of leftover pasta.

However, I've accumulated some useful nuggets over my twelve previous Ludum Dare Compos and have compiled some of them here. This one focuses on Graphics, but I might write up another one for Audio later!

🧂 Warning 🧂

Take all of this with a big grain of salt. These are things I have found useful, but the specific strategies you use depend entirely on your game and the styles and abilities of the people on your team.

With that disclaimer, let's hop in!

Make things legible

If you have a character on a dark background, it might help if the character is light in color, or vice versa.

contrast.png

Alternatively, you can use shadows and highlights to draw attention to the important things on the screen at the moment. In Fallowtide, I put a shade over the background when dialog is happening or when the player is playing a card.

contrast2.png

Also, use legible fonts for large bodies of text! "Matura" might look good for my game's thumbnail, but I stuck with good old Segoe UI for the dialog in-game.

Shape language

In Fallowtide, I use triangles everywhere. The soil is triangles. The card symbols are triangles. The currency symbol has triangles in it. When you play a card, it explodes into a bunch of triangles. There's even a hint of it in the character design; the Doctor has a prominent mask and pendant that have pointed ends.

Often, sharp shapes are associated with danger or hazards --- for instance, spikes, thorns, bladed weapons, and caution/yield signs. This isn't always the case, but I leaned on this in Fallowtide to add a sense of unease and mystery.

triangles.png

Compare that to the screenshots from my previous two games (Eleventh Hour and Eleventh Second) where I used concentric circles very prominently. The power-ups, backgrounds (setting sun and rotating gears), and "time travel" animations all used circles to make the player think of clocks and cycles for the time travel mechanic. Note also that the enemies in Eleventh Hour are circular (they power your time travel device), but unfold into sharp, dangerous shapes when they're attacking!

circles.png

This is one of those very subtle things in visual design that you rarely notice but can make a big difference when done right (or when done poorly).

Particles and modular animation

Frame-by-frame animation is a lot of work... and it's often worth it! But there are alternatives that are worth considering when you decide to make a game by yourself in 48 hours and only have a limited art budget.

Disclaimer again! These tips don't make sense for every team or for every game. If you are very good at frame-by-frame animation, absolutely use that in your games! That said...

Particle effects can be a very effective way to add an animation without having to draw anything, and are great for things like spawn and death animations. Here I use some particles when playing a card from your hand in Fallowtide.

partiles.gif

The animation consists of the following: - A large rectangle particle - Grows larger over time - Reduces alpha over time - A bunch of randomly placed triangle particles - Shrink slightly over time - Rotate slowly - Reduce alpha over time - Spawn with slight variance in starting size, angle, and alpha

You of course have to tweak the specific values until it looks right, but the result is a fairly cheap effect that can add a lot of "oomph" to your jam game.

I also took a shortcut with how I drew the game's crops by only drawing one strand of wheat, then populating the entire tile with it. Each strand individually changes its angle in a sine pattern to sway to the breeze.

This has the additional benefit of making future crops very easy to implement... I only needed to draw a single strand, then use the exact same logic as the wheat.

CROPS.gif

Shortcuts are fair game

In Fallowtide, the sprites for Wheat and Hellweed are almost identical! The only difference are the palette and some thorns and lighting on Hellweed.

palette_swap.png

Wait, you say. This is shameless and derivative, and the players won't stand for it! Tell that to Dragon Quest, who sold two million copies with enemy designs like these:

paletteemswap/emdq.png

Of course, you do have to be careful with this one. Adding ten shades of scorpions with different hit point levels probably won't add as much variety as, say, two shades each of five different enemies. And I like to make some changes to the shape of the sprite as well, so it doesn't come off purely as wheat dipped in purple ink.

It doesn't need to be perfect

You're making a game in 48 (or 72) hours. If there is a stray pixel here and there, it's very likely nobody will notice. Or at least I'm telling myself that, because I completely forgot to color in the bottom seam in the Doctor's shirt...

oops.png

Usually, "good enough" is good enough to get your point across. Only agonize over the tiny details if you think they're very important.

That's all I had! Good luck for the rest of play and rate!

Fan Art for LD52 games

Congrats everyone on another successful Ludum Dare!

For Ludum Dare 51, I drew fan art of every game I played during the rating period. This event, I did the same thing, with a twist. I've drawn each game in the style of the cards from my entry, Fallowtide.

fanart.png

If you're interested in playing any of these games, here are the links: - Boba by @danman9914 - Charlie's Lemonade Stand by @exezur - Fall Faybound Festival by @juxipolo - Harvest Hewn by @bibiki and @bwalter - Herogatchi by @alchemic, @gizmolo, and @wiredoverload - Metallic Yield by @daniel-alhadeff - Poo Farmer by @jesseww, @ethan-hair, @caldane, @gavincknapp, @leith-prise, and @psypher9 - Speed Wheat by @ghostskill24 - Star Tech: Deep Space Mine by @brainoid and @honest-dan - The Bountiful by @100th-coin - Typefarmer by @antti-haavikko - Void Reader - A desktop multiplayer game by @aliiiii and @daivyishere

Once again, I didn't end up rating as many games as I would have liked, and received more than I gave. Thanks everyone who gave extra ratings this event to balance out slackers like me!

See you all again for Ludum Dare 53!

Ludum Dare 53

Building Python/PyGame games for browser

It's 2023. Your car can send you emails, your refrigerator can get malware --- and you can run Python in a web browser!

web_sc.png

PygBag is an open-source web packager for Python/PyGame. It turns your PyGame application into an Itch.io-ready HTML5 build with very little effort (under the hood, it's running a Python interpreter in web assembly).

Play and rate is already halfway over, but I decided to add a web build to learn about the tools and hopefully make it easier to play my game on other platforms. Here's what I learned making an HTML5 build for Holding Out with PygBag: - Performance matters. A lot. My desktop build could easily run at 100 FPS on my laptop, but I had to make a lot of performance optimizations to make a viable web build. Graphics operations are particularly expensive; I ended up removing the "vignette" effect on my game for the web build to improve frame rate. - Audio is finnicky. The web build is prone to audio stuttering and delays, especially if performance is poor. I suspect there's an audio buffer that the browser can't update during synchronous operations, so you either need to make sure your game loop is very fast or add in additional asynchronous "sleep" statements in the middle of your update/render code. - It's not that hard. Aside from the performance improvements, there are actually very few code changes required to get this working.

gary.gif

I'll stop short of offering a tutorial, because this YouTube video covers it better than I could hope to in a blog post:

https://www.youtube.com/watch?v=6PhDmpBcezQ

Good luck everyone for the rest of play and rate!

Fan art for LD53 games

The last few events, I've been drawing fan art of every game I play during play and rate (LD52, LD51, LD50).

I decided to keep up the tradition for LD53, with the following twists:

  • Fan art was drawn in pixel art style
  • Every character gets cat ears, like the characters (and various inanimate objects) in my game Holding Out.

Here's the group picture!

fanart53.png

If anything looks interesting to you, here's a full list of games:

  1. Holding Out by @jeremy-ryan
  2. Neighborhood Postal Service by @paul-nadan
  3. Chateau Grennouilles by @paul-merkamp and @alex-mcgrath
  4. Postal Pocalypse by @bwalter and @mothense
  5. Elevander of the Emu Express by @brainoid, @honest-dan, and @spacey3d
  6. Juggle Mail by @kuviman
  7. The Pigeon Post Principle by @cassowary
  8. Aerial Odyssey by @tvorojok, @maximbegunov, and @alekhoz
  9. Snail Mail by @winter2277, @william-wells, @adrien-tremblay, and @martenscedric
  10. Lucky Lefty Loves Letters by @thebooksnail and @elysiagriffin
  11. Grav Garb by @gizmolo, @wiredoverload, @xxatrain223, @bigtex, @karkadan, @arnenia, and @alchemic
  12. Toad Pizza Express by @nazorus
  13. Long Tail by @hitchh1k3r
  14. Badger Break Out by @knatt
  15. Sick Day Delivery by @jesseww, @caldane, @leith-prise, @serenamagic, @selidex, and @pyspher9
  16. Superbloom by @amango, @charles-haitkin, @augustin-carroll, @zinteger, @mlooper, and @devook

A few takeaways: - Pixel art is... harder? I would have expected pixel art to take less time and effort than more traditional illustration, but it was more challenging if anything to abstract characters --- keeping them recognizable, but also fit with the style for the group shot. - Choose a palette ahead of time and stick to it. Otherwise you improvise and end up with like ten slightly different shades of green. - Be consistent about scale. Things started out pretty well, but I ended up with a human sized pigeon and a bee the size of maybe a gorilla (and about as furry). - It was a lot of fun. The community continues to produce great little games with fun characters that make this personal challenge fun every year.

Great work everybody, and good luck as we head into results tomorrow!

Double Post-Mortem Bonanza --- Holding Out and Fallowtide

Congratulations everyone on another successful Ludum Dare! Now that results are out, I'll reflect a bit on my game (Holding Out). I also realized I never formally wrote a post-mortem for last event's game (Fallowtide), so I'll include that here as well.

There is actually a surprising amount of overlap between the two events, despite how different the games are, so I'll summarize into a few shared takeaways:

  1. Make the player feel something
  2. Play to your strengths, but maybe not too much
  3. Utilize base code
  4. Plan ahead
  5. Sleep

Here goes!

Make the player feel something

Both Fallowtide and Holding Out are built around delivering a particular emotional experience to the player, but they do it in different ways.

Fallowtide is intended to be mysterious and uneasy. This is supported by art that is visually dark, a mysterious NPC with his face hidden by shadow, a spooky music-box soundtrack, and dialogue with ambiguous intention ("May you dream of fire and warm things"). The mechanics support this as well; the player is free to play slowly and carefully while the game gradually reveals more to the player.

doctor.png

Holding Out is intended to be slightly frustrating and absurd. It's built primarily off of one joke: contrasting the frantic, high-energy nature of a zombie survival situation with a comically sluggish and unhelpful customer service line. The goofy animations and stereotypical hold music add to this feeling.

gary.gif

Actual customer feedback for Gary was mixed:

gary_review.png

We'll go over this feedback at Gary's next quarterly review. (Thanks @jcmonkey, @jdeedubs, @jvolonte, @yorsh, and @mpk90 for your amusing and varied comments)

One important pitfall here is to avoid accidentally undercutting the emotional experience with contradictory aesthetics or mechanics.

For instance, Fallowtide probably suffered a little bit from a lack of a lose condition; the fact there was no risk for the player limited how effectively it could apply tension. Contrast this with Sacrifices Must Be Made, the Ludum Dare precursor to Inscryption, which does the dark mystery reveal more effectively because the player is also struggling to stay alive in game.

Holding Out has almost the opposite problem; it relies a bit too much on players learning the underlying systems (like how enemy spawning/movement works and which upgrades are most efficient), and is easy to lose if you don't. Losing means you are forced to restart and hear the same jokes again, which isn't very fun. I probably should have added checkpoints or reduced the overall difficulty so most people could beat it in one run.

See also Fade, where I unintentionally made an emotional story-based game brutally difficult so that many people couldn't actually finish it to experience the story.

Play to your strengths, but maybe not too much

zombieem2/emwalk_right.png

Everyone has different goals for Ludum Dare. Maybe you want to build a portfolio; or learn a new engine or framework; or test how well you work with a new team; or grow as a game developer in some other way. What your specific goals are will highly flavor whether this section applies to you or not.

I have two goals that have been somewhat consistent throughout my Ludum Dare experience:

  • Make cool games. Test my mettle as a developer to deliver enjoyable, polished games in a short period of time.
  • Try something new. Learn and grow by tackling different genres, visual styles, and emotional experiences.

Holding Out was really my first attempt at a humorous game (not counting the "so bad it's good" game I made in five hours for LD49). Since humor was the "something new," I felt okay falling back to standard 2D shooter mechanics as the base gameplay. For Fallowtide, the "new" was the visual style (non-pixel art, with a large character illustration) and gameplay (tile-based farming deckbuilder).

I think Fallowtide was probably more useful from a personal growth perspective, simply because it was so much different than my past games. For next event, I might try to focus on Innovation, which has historically not been one of my highest categories.

Utilize base code

bullets.png

I use PyGame for most game jams, which is a relatively lightweight Python wrapper for SDL 2. As a graphics library, it's missing most of the features available in game engines (animation handling, particle systems, physics, update/render loop). So, it's particularly important to utilize base code.

Per the Ludum Dare rules for Compo:

You’re free to use any tools or libraries to create your game. You’re free to start with any base-code you may have.

Frankly, I haven't been very organized about building base code prior to the event. However, I will reuse some code event-to-event as needed:

  • Fallowtide and Holding Out both modified versions of a dialogue manager originally built for Broken Threads
  • Holding Out uses some primitive objects and a particle base class from Launch Party
  • Holding Out uses a sprite and animation manager I built way back in LD42 for Rampart and upgraded for GMTK Jam 2022 for Six Shooter
  • Fallowtide and Holding out both use an image manager and sound manager class that I originally built for Spellcraft

Ludum Dare is about designing and building a game in a weekend. If you find yourself writing the same boilerplate every event, you probably aren't learning anything new, and it's stopping you from using the whole time efficiently. For next event, I might try to consolidate the various pieces I reuse often into a starter project.

Plan ahead

zzzzzzz.png

48 (or 72) hours is not a lot of time. It can be tempting to rush through the ideation and planning phase so that you can dive into the "real" work of programming your game without wasting any time.

Do not do this. You will very often make a worse game.

I'll often spend at least the first 2-3 hours weighing ideas and planning how the game will work on paper. You should have a good idea of what your main mechanics are and roughly how the game will look. If you're making a puzzle game, you don't need your final levels, but you should probably think up one or two to make sure the mechanics are actually viable for making interesting puzzles. This might feel like a lot of time, but it's way better than realizing 24 hours in that your entire game idea doesn't work and you need to start over (that said, you should pivot if you need to --- Spinnerets was originally going to be single-player, and it would have been a much worse game).

I had a long planning period for both Fallowtide and Holding Out, and I think the games benefited from it. I probably should have gone a little deeper in the initial planning for Holding Out, since I ended up making some odd design decisions on the fly (like giving the player a dodge roll when it really wasn't useful in combat with the enemy designs).

Sleep

zzzzzzz.png

In my experience, it's not worth sacrificing much sleep during a game jam. If I get less than ~7 hours of sleep, I'll lose that extra time in reduced productivity anyway. And be more miserable.

Conclusion

Both of these jams have been an amazing experience, and I've gotten some personal best scores in multiple categories:

comp.png

Thanks everyone who played my game during play and rate. Comments and feedback are what completes the loop and leads to iteration and personal improvement. I absolutely would not be where I am today in my development journey if it weren't for this community and the support and insight it offers.

Cheers, and here's to an even better Ludum Dare 54!

Ludum Dare 54

Hope Falters --- Postmortem

So first of all... wow.

results banner.png

This is obviously the best I've ever done in Ludum Dare, and probably the best I ever will. Ludum Dare has been an amazing opportunity to grow as a designer and developer, and to catalyze that growth with feedback and exposure to other great games. Thanks to everyone in the community who makes this jam great and keeps me coming back every event!

Now for the postmortem. What went well, and what went poorly?


The good parts

Concept

Innovation has historically been one of my lower scores --- enough so that my postmortems for the last three events (52/53, 51) have all said "next time, I should focus on innovation."

One of the first existing games that came to mind for "Limited Space" was Rush Hour (and the million physical and digital copycats). Turning this into a word game seemed like an interesting spin on the theme, and being selective about the particular words can tell a compelling "story"... such as having to break through an impossible wall that is literally the word "impossible."

Making a playable game early

I had a "playable" version 5-6 hours into the jam:

hope.gif

It didn't look nice, and had some bugs, but it meant I could test a couple levels.

This is usually a good idea for any game jam game, but it's extremely important for puzzle games. If the mechanics in your head don't translate to interesting puzzles, or the design space is very limited, you want to know a few hours into the jam, rather than on the last day after you have finished your art and music and realize you have a very pretty (but not very fun) game. My LD42 game as an example.

In this case, after making the level in the gif, I decided there was an interesting game there. A version of that level ended up in the final game!

Playtesting

Another benefit of frontloading the gameplay portions is that you can collect feedback during the jam!

I'm lucky to have a number of hobby game development friends who are often willing to playtest. Particularly for puzzle games, you are the worst possible playtester. That "easy" or "obvious" puzzle might actually be extremely difficult for someone who didn't make it. And make sure you watch people play, in person or over screenshare --- it helps to see exactly what the player tried, where there attention was, and what you can do to make things easier (or very, very rarely, harder).

For Hope Falters, this usually meant removing "red herrings" --- actions that looked like they could be part of the solution, but were actually not. Such as adding blocks to make it clear that you needed to interact with a particular subset of letters.

This is ambiguous how you're supposed to interact with the words, since you could need any letter in "light"!

light_long.gif

While this one helps eliminate red herrings by making it clear you should probably be paying attention to the first two letters.

light_short.gif

Music and audio

For some baffling reason I decided to write it in 7/4 time, but people seemed to like it!

Low hanging fruit for extra audio "juice" --- add a slightly different version of the music you switch between contextually. For Hope Falters, I had a "sad" version that played when you didn't have the word "hope" in play, which was identical to the original track but shifted down one octave and with a low-pass filter in Audacity. This makes it sound like it's coming from underwater or something.

shift.png

I did a similar thing for my LD53 game Holding Out (link) for the music; while you're "on hold" it plays with a high-pass filter, making it sound like it's coming out of a phone speaker rather than being next to your ear.

Could be better

Visual direction

While I'm not unhappy with the final look of the game, the graphics definitely aren't a selling point like some of my previous entries. Then again, I was focusing on gameplay and level design for this event, so I was okay making that compromise.

I borrowed a page from the Claustrowordia playbook here: keep the "word" part fairly simple, and have a character to the side to add some interest. Of course, my game still looks worse, but not everyone can be a superhuman juicemaster like @antti-haavikko.

Scope

I probably could have squeezed a few more levels in there! There were really only three difficult puzzles that made full use of the mechanics, after some introductory ones.

That said, limited scope is generally a good idea for level-based games. You'd rather leave the player wanting more than let them get bored halfway through without seeing that really killer final level.

Fan art

I didn't have a lot of time during play and rate this event, so unfortunately didn't get around to making fan art for the games I played like I have the past few LDs. But it's been awesome to see other people making fan art and other user-generated content and compilations this jam! Especially everyone who took the time to make a custom level for my game:

  • @100th-coin
  • @frogman
  • @jdeedubs
  • @alchemic

Conclusion

Thanks again everyone who makes this community what it is! Even without scores and ratings, it's awesome to have an opportunity like this a couple times a year to make something you're proud of and share it with the world.

Cheers, and see you for Ludum Dare 55!

Ludum Dare 55

Tiny Summons Post-Mortem (and Fan Art!)

Lets start with the fan art! I drew a doodle of a character from every game I played this event:

everybody.gif

Featuring: - Midnight Cheese Quest by @archaeognathus - Demon Delivery Center by @yanakill-lullanita, @rocio-michi-ojeda, @emiliano-martel, @alexasl, @malcontento, @nicol3, @rodrijsolar, @briansuhit, @sofisofix, @franco-farallo - Void Beast by @azure-drake - Ancistroides Folus by @othervoyceowl, @retcongreg, @soundgnome - To do magic, please dance by @syudzius, @owly, @shishandr, @yngvarr - Throes of the Javelin by @idan9000, @justin-ma-wav, @skransow, @matterlinx - Raising the Bread by @exteegi, @kevin-joseph, @fengfuru, @olsonexi, @zuhairghias - Demon Well by @100th-coin - Druid Island by @bwalter - Summoning Song by @paul-nadan - Protect the Realm by @nnnnneeeedddd - Stars Align by @cassowary - Tiny Summons by me

Congrats to everybody here! Lots of great entries this time around, and as always, I wish I had the time to play more (but it certainly goes slower when you're drawing everybody).

Onto the post-mortem!

frog_banner.png

Choosing an idea

The theme always sucks

The night of the theme reveal for "Summoning," I was not finding a lot of inspiration. After some brewing, I didn't have a lot of ideas, but I did have a goal:

  • The core gameplay should be the summoning. I didn't want to tack summoning as a mechanic onto a game where you're primarily shooting, or racing, or platforming. The core gameplay should be around choosing what to summon, or how.

Ultimately, I went to sleep on Friday without a firm direction.

When I woke up, I decided to make a multiplayer Twitch-plays auto-battler.

Multiplayer isn't that bad, right?

So normally, it would be.

networking.png

On game jam timelines, networked multiplayer is really tough. For a relatively simple game, you usually need: - A dedicated server to run the game logic on - The client code that shows your graphics to the player, which you somehow need to keep in sync with the other clients - A way to get the information from each client to the server, and then out to the other clients - If you don't want the game to be super laggy and unresponsive, some kind of literal time travel so the client can anticipate what it thinks the game will be like before running it past the server

Fortunately, I had a strategy that would require much less work for me. And that is to let the fine programmers at Twitch.tv write my networking stack for me.

twitch.png

By making my game a Twitch plays, I can get a lot for free.

  • The game can play an arbitrary number of players
  • Players can play on a variety of devices
  • There is one authoritative game state (the video stream) so multiple clients don't need to stay in sync
  • Best of all, I only need to program one "direction" of information flow (reading chat messages). The streaming platform handles getting the game to the players!

Even better, I had some base code from my Github Game Off entry a few years ago to jumpstart the process.

It does have some limitations:

  • Players can only use text commands
  • There's a several-second delay, so nothing can be realtime
  • Players can see everyone's chat messages, so no secret roles/information

bun_banner.png

What went well

Lots of things!

  • The visuals: I'm happy with how the game looks this time, with the bouncy animations, clean UI, and cute character designs. For better or for worse, I tend to experiment with art and make games that look very different from one another, but this one "worked."
  • The Twitch integration: Everything went smoothly with integrating the Twitch chat. I hosted the game in a Microsoft Azure VM (with some free sign-up computing credit) so it could run 24/7 despite my spotty internet.

dragon_banner.png

What could have gone better

  • The hosting: I spent about five hours Saturday night setting up hosting with Digital Ocean, only to run into performance problems that I couldn't seem to fix. Only after wasting that time did I try to set up Azure, which took under an hour.
  • The scope: Partially due to wasting half of Saturday, and the extra programming overhead for the Twitch integration, I didn't get as much content into the game as I'd hoped. A few cut feature ideas include:
    • Round modifiers that present more challenge or diversity
    • Better feedback for chat commands, including showing who is on what team
    • A more equitable way to split team funds, rather than first-come-first serve
  • The enemy AI: Due to an unfortunate radians-to-degrees math mixup, ranged units don't try to circle foes from a distance; they always try to go directly to their right (awkwardly giving the team that starts on the right an advantage).

bear_banner.png

Takeaways

I'm very happy with my results this time around, including 3rd place in Graphics and 3rd place in Innovation. Thanks so much everybody who played my game, and to the additional support I've gotten from the streaming community in the form of random raids (almost always when I'm not actively in the stream!).

results_ld55.png

Some takeaways from this event:

Try new things, but prepare to scope down

I don't regret trying something different for this jam, and I liked the game I made. But particularly in the Compo, being ambitious in one area means making sacrifices in others.

For networking and integrations, do your setup before the jam

I came partially prepared with some base code, but I probably should have been confident with a cloud hosting platform if I wanted to do this for a 48-hour jam. Even an hour of extra setup you could have done beforehand is painful when it's 2% of your jam window.

Study frog anatomy

frog_nice.png

Eh, close enough.

If you still want to play Tiny Summons, do it soon! The 24/7 stream will go down next Saturday before Microsoft decides to start charging me real money.

Here's to a great LD55, and an even better LD56 this October! ☃︎

Ludum Dare 56

My Keyboard is Full of Ants postmortem --- and a special announcement!

First, a quick aside because I'm really excited to share...

I'm making a real game!

It's called Moonsigil Atlas, and it's a deckbuilding roguelike with a geometry-based resource system. There's no conventional mana or action limit - your only restriction is piecing together the shapes of your cards in the space you have.

RunesCompressed4.gif

If this looks a little familiar, it might be because it's based on the main mechanic of my LD52 game, Fallowtide, but more in the direction of a traditional roguelike deckbuilding game like Slay the Spire. I've been developing the full version with @daniel-alhadeff for the last several months and we're really excited to start sharing it with people!

There's no Steam page up yet, but if you want to stay in the loop for the development, release, and potential demos or playtesting opportunities, please join the Discord server by clicking the banner!

signal-2024-10-23-115424_002.jpeg

Onto the postmortem!

The postmortem

This year, my LD entry was My Keyboard is Full of Ants!, a game about your keyboard being full of ants.

Choosing an idea

In a couple past events, I've considered making games where the location of keys on a keyboard has gameplay relevance. This is partly because I think it's a fun design space, and perhaps partly because my first ever Ludum Dare game tried this but was not fun at all, so it's an opportunity to take a second crack at it.

"Tiny Creatures" turned out to be a great theme for a keyboard-based game, because you can contextualize it to the player's real-life keyboard, which could have tiny creatures living in it! The concept of ants living in your keyboard and typing in order to smoosh them struck me as more funny and appealing than it ought to be, so I ran with it and used it to inform the specific mechanics and other design decisions.

65d2e.gif

The good

Several things went well this game:

  • The graphics: I went a fairly safe direction with the visuals, but everything came together into a clean whole, and I'm happy with the consistency and clarity of the final product.
  • The bugs: There are tons of bugs in the final game, but they are (almost) all intentional. There was no huge technical hurdle or major bug that took up a lot of time, unlike last event where I spent a lot of time figuring out hosting.
  • The web build: I continue to get much more traffic to my LD games on Itch with a web build. Even though it's a little bit sketchy to do with Python/PyGame, it's proven to be worth the effort every event I've done it. For a little while, I was in the top ~30 games on Itch with the Ludum Dare 56 tag, which would be way harder with a download-only game!
  • That one super obscure joke absolutely nobody saw but I'm way too proud of: The soundtrack has the word "ANTS" spoken a couple times, but I also included a "karaoke version" in the build files that is identical without the word "ANTS." Worth it? Absolutely.

ants.png

The bad

  • The secondary game loop: I think I spent a bit too long fleshing out the core mechanics and adding enemies and power-ups that the game's high-level structure suffered. The game is level-based, with a fixed ending, and it's not possible to lose --- you just get a better or worse score based on how efficiently you squash ants and apply multipliers. I think this is a less compelling way to play than, for instance, a wave-based game where your goal is to survive as long as possible, even for people who care about high-scores. However, in the time I had, it seemed like the best way to get the average player to see most of the game's content without extensive balancing.
  • The humor: It wasn't bad per se, but I think I could have leaned further into the game's absurd premise and found more areas to inject jokes and comedy (I think I did this better in LD53). As it stands, I think the game sits in the middle of the road in a lot of respects, including humor, without excelling at any one thing, and humor would have been a good opportunity to take to the next level.
  • The play-and-rate: I've had an extremely busy few weeks, especially with the development of Moonsigil Atlas, and have not been able to play and rate nearly as many games as I'd like. That unfortunately means there's no fan art compilation this time around, although I did draw a couple quick sketches for some games you may find floating around!

ants.png

Takeaways

  • Be deliberate about your game's identity. I think I found an appealing and consistent visual direction, but failed to make strong decisions on more fundamental parts of the game. Is it trying to be an arcade-style high-score game? Is it trying to appeal primarily through humor? Are they supposed to be pharaoh ants or grease ants? On game-jam timelines, you usually want to do one thing really well and use the other parts of the game to support it; but I never quite figured out what I wanted this game to do best.
  • Take the time to make systems extensible, when it's worth it. I very early on made the system for text effects when you smoosh an ant, then used that constantly for bonus points, multipliers, and special ant effects. This saved me a bunch of time and also made the game more usable and legible for the player when a lot of things are happening. You do need to be careful about this on game jam timelines though --- sometimes it makes more sense to do the hacky solution in 20 minutes instead of the clean one in 2 hours, especially on the last day!
  • Brass instruments are hard to play. Every time you beat a level, you get to hear my very underwhelming bugle playing. I'm thinking I should stick to piano.

ants.png

The Results

This game did wildly better in results than I expected!

ant_results.png

Thanks so much to everyone who played the game during the rating period. Ludum Dare has been an amazing experience over the 7 years I've participated, and while results are far from the most important part, it's extremely heartwarming and validating to get positive feedback because it means people actually enjoy the games you make.

Interestingly, I expected Graphics to be a strong point and Humor to be more of a point for improvement --- I think the results just go to show that a) sometimes you're not always able to view your game from an outside perspective, which is why playtesting is so important and b) there's enough randomness in LD results, especially in the top ranks, that the specific numbers don't matter as much as high-level trends over multiple events.

Congrats to everybody else who participated, and especially those who made it into the top 15 --- every game ranked that high is fantastic and just as easily could have taken the top spot, and I wish I had the time to play all of them. (If you haven't played Prince Charmony yet and like puzzle platformers, play it now!)

Thanks for making it all the way to the end, and here's to an even better LD57 next year!

Moonsigil Atlas trailer and Steam page! (based on my LD52 entry)

I mentioned it in my LD56 post-mortem, but I'm developing a full game for commercial release!

Moonsigil Atlas is a deckbuilding roguelike with tile-based mana. Cards have shapes you have to position onto a board of triangular tiles, and can get bonuses for adjacency and overlap. Here's the trailer!

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

It looks quite a bit different, but it uses the main mechanic of my LD52 entry, Fallowtide - deckbuilding with a grid of triangles as a resource system. If you're interested in this kind of game, feel free to check out the Steam page or join the Discord server to get updates on development, playtesting/demos, and release!

Thanks, and hope to see everybody for LD57!

Wishlist Moonsigil Atlas on Steam

Ludum Dare 57

Pack Postmortem

Let's jump into it!

JCRemTEST/emGIF_5.gif

What went well

  • I was happy with the overall concept and execution, and although I only put together three levels, there was enough design space to make them interesting and different from each other.
  • The visuals and polish came out well in my opinion. Dragging items around and opening and closing containers was really satisfying!
  • I managed to squeeze a number of Easter eggs into the game, in the form of bootleg game titles, card game references, and references to previous projects of mine. I even made a reference to Dash Galaxy in the Alien Asylum, which was secretly actually a reference to @100th-coin's Super Mario TAS that involves swapping NES cartridges at mach million while telling yourself you're playing Mario.

JCRemTEST/emGIF_6.gif

What could have gone better

  • Implementing the core system took quite a bit longer than I had hoped, especially the squashing of weird corner-case bugs for containers that contain other containers.
  • The scope was smaller than I would have liked (partially because of the previous bullet). I was originally hoping to have more varied challenges and situations, or continuity between levels (like packing your suitcase, then having to take out and rearrange items while in the line for TSA).
  • I can't help but feel there was something missing from the game as it currently existed. A little bit of a story, a twist mechanic, or an "aha" moment. As it is, the game flows perfectly smoothly, but there are never any moments for fireworks.
  • You can't pet the cat. You can however shake her around violently while she purrs, which is most of the way there.

What went... unexpected?

This has been kind of a strange play and rate period for me, because in addition to getting players from ldjam.com, my entry was also featured on the front page of Itch.io and has received a lot of additional non-LD plays through Itch.

itchemfront/empage.png

Which is great! But also the amount of traffic, in combination with being packaged with PyInstaller, made Windows extremely confident my game was a Trojan.

malware.png

Yet another reason to have a browser build if you can! If I only had the Windows build, most people would not be able to play the game without additional scary steps of whitelisting the file in their antivirus software.

The results

I'm quite happy with my game's performance this time around! Not necessarily as exciting as some of my previous entries, but still a worthy entry.

results.png

The amount of eyes on the game this event (mostly through Itch) has been really exciting, and at times overwhelming, but I'm really happy that the feedback has been largely positive! The most common complaint by far was that the game was too short, with some people also having difficulty with the final level. It's possible I'll have to revisit this game at some point when I'm not so busy with my current project.

Speaking of which...

I'm working on a full game! I've teamed up with @daniel-alhadeff to make a deckbuiilding roguelike based on my LD52 entry, Fallowtide. If you're interested in geometry puzzles or card games, check it out! A public demo is coming out next month.

Moonsigil Atlas on Steam

JCRemTEST/emGIF_3.gif

That's all I have, thanks everyone for making Ludum Dare such a great experience. I don't know for sure if LD58 is actually going to happen in October or not, but I'll see you all then if it does! ☃

Ludum Dare 59

Fillmore's Island postmortem --- and an ad

First of all...

My "real" game comes out May 28!

If you like: - Roguelikes - Deckbuilding games, or - Fitting shapes inside of other shapes

...then I'd really appreciate if you checked out Moonsigil Atlas. It's come a long ways since the LD52 game it was based on and we're super excited to be releasing soon! There's a free demo you can play if you're interested!

msaembanner.png GIF/emMSA.gif

Now for the post-mortem!

Fillmore's Island

Overview

Fillmore's Island is a game about a little rabbit and his drone exploring an island and picking up batteries. You control Fillmore with WASD, the drone with the arrow keys, and you must be within range of the drone to operate it --- but you can expand the range by picking up batteries.

GIF_FILLMORE.gif

I will say that I was not particularly inspired by the theme Signal. Of course, like always, there were many fantastic games this event, so that is entirely on me. So, I stuck with a fairly simple concept and hoped I could make it worthwhile with graphics and audio polish.

The Good

  • Fillmore. Just look at the little guy!
  • Trying something new. Between my 20 previous LD games, I had never made a "walk around and explore things" game. Almost all of them happen on a single screen. This was a fun exercise in making that kind of game, but still on a tiny scale.
  • Level design, for the most part. I think I did an okay job of making different areas to explore, and hinting at the location of future batteries that you could pick up as your range expanded.
  • Doing the jam at all! With Moonsigil Atlas releasing at the end of May, it was far from a sure thing that I would be able to participate, but I'm glad I managed to make it work.

The Bad

  • Content authoring. It's becoming increasingly clear that making games without an engine has efficiency problems for certain kinds of games, the most obvious being UI-heavy games and "walk around and explore" type games like this. Every object in the environment had to be manually placed in code via an X/Y coordinate, and I had to do some awkward workarounds to make the land and water reasonable to author (if you're curious, the source of truth for water location is an image that we sample pixel values from). There's a reason most of my previous games have been more puzzle-y or arcade-y!
  • Taking too long to find the fun. I spend a lot of time sidetracked on relatively unimportant things (like getting accurate interactions between the drone, its shadow, and obstacles) and locked myself into a design that I think ultimately is not all that fun. As a puzzle game, it doesn't quite have enough mechanics and twists to be interesting, and the nature of the "growing range" mechanic means you're usually working at the frustrating boundary of your range instead of using it fully. Game jams are always hit and miss, but I think I could have shifted to a more interesting use for the signal range mechanic if I had been more on top of things.
  • Protecting the player from tedium. It was very easy to accidentally knock the drone out of range with its own momentum, and have to wait several seconds to recall it. However, the momentum was barely enough to be useful for any puzzles. A better design would probably have leaned more into the momentum mechanic and designed puzzles with it in mind, or to prevent the drone from being able to go out of range to make it harder to mess up the puzzles. The current behavior is an awkward middle ground.
  • Play and rate. I was not able to play nearly enough games this time around. I always feel guilty when I get more ratings than I receive, and the gap was particularly big this event.

The Results

Not bad! I actually did better than I expected in a few categories like Fun and Innovation, and much better than expected Overall for this event. As expected, Graphics was my best score, landing just shy of another bronze trophy.

fillmore results.png

Thanks everybody who played and left feedback! Reading the comments and seeing people play the game in videos and streams is always the best part of the event for me.

I did also score the coveted Rained Out and Perfectly Timed Anti-Softlock Measure Award awards, despite the steep competition this event, and I'm honored. (thanks @mathstr0fficial and @100th-coin for the custom awards!)

awards.png

That's all for now, I'll see you for Ludum Dare 60!