15 random games LD59 #3
Hi all! again I made the third video where I play 15 more random games.
🎥 Video: https://youtu.be/pJQmE3rXvfc
P.S. If you like any game and wanna try them yourself, I have add links all of them in the video description.
Hi all! again I made the third video where I play 15 more random games.
🎥 Video: https://youtu.be/pJQmE3rXvfc
P.S. If you like any game and wanna try them yourself, I have add links all of them in the video description.
I’m Saitoni, 2D artist on the Drum -n- Ice project https://ldjam.com/events/ludum-dare/59/drumnice
In our team, I was in charge of the visual 2D style and keeping the mood light and positive!
I also learned the hand paint technique for the first time at this jam —I’ll share more details about that in my next post.
Now, let me show you our characters up close!
Hello!
If UI feels like a confusing and difficult area to you (as it does to me), here’s a simple trick I’ve been using in my games for years.
I create one core element (in this case, an ornament) and reuse it across the interface wherever it fits. It helps keep everything visually consistent and makes the overall process much easier.

It may sound simple, but it really saves time and mental effort, leaving more room for more important tasks.
Thanks for reading! If you’re interested, here’s my game:
https://ldjam.com/events/ludum-dare/59/fellowship-of-the-signal-fire

In this post, I want to share my experience participating in my very first game jam. I’ll talk about how I built the game, what went well, and how the whole process felt. I actually found out about Ludum Dare from my gamedev teacher, and I felt so inspired that I decided to dive in and see what I could create.
As soon as the theme was announced, I started googling every possible meaning of the word "Signal." From the start, I wanted to do something with deep space signals. Part of the inspiration came from playing Voices of The Void a few days before the jam, where you find and process signals. However, I wanted my game to have a manual decoding process, forcing the player to actually decipher the encrypted data. That’s when the name DECODE was born.
The first thing I implemented was the frequency slider and the "garbage text" effect. When you hit the right frequency, the signal becomes clear.
Originally, I also thought about adding a search for the signal’s coordinates, but it felt too complex to add. So, I focused on the core loop: signal tuning, Morse code, and Caesar cipher decoding.
The feedback I received highlighted one major point: the input panel. I wanted the game to be challenging, so I intentionally made the input box overlap the frequency slider. Initially, the panel opened with a manual button, but during testing, I found it annoying to click back and forth. I decided to make it automatic: it pops up when the signal is perfect and hides when the signal is lost. Combined with the long satellite names in Morse code, this became a "irritation point" for players, so to complete Day 2, you actually needed to make everything perfectly. ,_,
After the jam ended, I didn't stop. I’ve already uploaded a slightly updated version to Itch.io, adding the music I didn't have time to implement during the 72 hours and fixing some visual bugs. Here's some screenshot of before and after:
But I’m not stopping there! The feedback has been amazing and truly motivated me to keep going. A friend sent me a massive list of ideas, and another player suggested adding a story twist. I’m definitely going to work on a more polished version with better UI and maybe a small plot. If you’ve played the jam version, I’d love for you to check out the future updates! :D
While playing other entries (which actually feels very cool, seeing what people created in such a short time), I found a game with almost the same name: Decode. It’s a great project, you should definitely check it out too!
What do you think about the number of games using AI around here? I confess it makes me sad and I think it's unfair, especially since it's not mandatory to disclose that you used AI in the development of your game.
I honestly think this takes away a large part of what makes a game jam a game jam: being creative and creating visions, ideas, and feelings from scratch. Not to mention the socio-environmental impact. We don't need more people consuming tons of water and environmental resources to generate an image copied from somewhere else.
You may disagree with me, and I can't say I respect that, but that's my opinion!
To everyone who worked hard and did everything by hand, congratulations! I'm very proud to be part of a community that still makes games the way they should be made. I love you all and tell me what you think about this! I think it's an important discussion for the future of Ludum Dare.

新人第一次做 有点粗糙🥹但是还是很希望得到评价!我会继续改进的 是一个心理恐怖类叙事的游戏 带有循环机制
Step 1: Use a big brush to draw a blob that roughly resembles a silhouette of the shape that you envisioned. At times use eraser to shape it up a little, but not too much. Here I erased bits inside to give it some sense of what the outline will be.
In this case it was a 16th-17th century horseman, I am happy enough with the resulting blob considering I used no reference.

Step 2: Now create a new layer and draw the rest of the damn sprite.
First the outline, 1 pixel width - do not blindly stick withe the blob's exact shape, make adjustments where needed. Then grab the bucket and add some color fills.

Step 3: Animation! If you do not wish to skip this step then you are a bit of a masochist.
Here I only relocated a few pixels to create slight impression of wind doing its work on this person's clothes and hair. That's 15 minutes spent on something no one will notice, but it will make their subconsciousness see the sprites as something alive, hopefully.

Step 4: Notice that something is missing, like the 4th leg. Try to add it, but conclude it is impossible to do so without making a mess, considering the resolution and the horseman's right leg. Abandon any idea of the fourth leg. In your imagination, proceed to defend yourself against accusations that only an AI generator could get the number of horse's legs wrong. Then calm yourself down with the notion that no one will bother to make such accusation against art this trashy.
Some hours later, notice an even bigger issue. In this case perhaps you forgot that horses have tails. You did had a feeling that something is off with that horse's butt. It somehow resembled a human's butt, and now you know why. At least no one will accuse you of AI generation now, for even the computers know that horses have tails.

I hope this humble tutorial will help some programmers who are aspiring artists to reach their goal of drawing a sprite.
Hey all! I'm RenD and my entry for this event is called "Alpine":

The pitch
It's a 2D puzzle platformer where you must re-connect houses after a storm has swept through the valley. You route signals from cabin to cabin, up to the summit of the Three Peaks mountain.
As you can see, I did have a look at some Celeste screenshots when researching the mood and the art direction :smile:
The tool
For this jam I wanted to try a tool I've discovered recently, LDtk by Deep Night (who has been participating in many Ludum Dare in the past). I was previously using Tiled and while the integration with Unity was pretty seamless (thanks to the Super Tiled2Unity project), I found the editor to be a bit cumbersome at times. So I thought to myself, let's try this nice-looking tool and attempt to have a cool retro 2D pixel art side scroller.
And LDtk did not disappoint! If you're making a tile-based game (top down or side view), this is a must. The world/level partitioning, the auto rule system, the entities with custom fields. It's all super intuitive to use and thanks to the fantastic LDtkToUnity project, the integration with Unity is made super easy. You have all the callbacks you need from the importer to customize all the prefabs according to your needs.
How it helped
Once the tileset was up and running (there's a template so you can reuse some existing auto-tiles rules), I created all the entities (prefabs) that would be needed: the pylons, the houses, the triggers for dialogues and hints, the collectibles... Then in Unity I associated the tiles to specific layers (for collision, one way platforms, deadly spikes) and associated entities with prefabs. Et voilà! Now all the work was happening in LDtk and I just had to layout the collisions, place the entities, design the puzzles...

It made me gain so much time that I was able to focus more on the polishing and the visuals. I did overscope the level design and the mechanic progression big time (I had designed at least 3 additional uses of the cables and the signals) so the experience might feel pretty short, but I'm happy with the result and I'll certainly use LDtk again in future projects.
Thanks for reading, I'd be super thankful if you could try the game and maybe even drop a comment!
Cheers!
Defeat enemies, catch signals and steal abilities! survive a little longer!
we didn’t expect this much feedback, but a lot of people told us they really enjoyed our game! so now we’re pushing it further and the goal is not to make it bigger, but to make it whole, short, sharp and complete.
if you try it, tell us what breaks, what feels good, what you’d push even harder.
play it here: nadiapixel.itch.io/agents-rhythm-and-raid


Is there somewhere I can see how many games were made in total?
We only need 6 more ratings to get a final score. If you've worked in an office, are a zombie enthusiast or dream of using office chairs and bookshelves as weapons (we promise we don't judge), please try our game. It's a fast-paced action game about surviving a zombie attack by using office furniture as weapons, such as launching chairs at zombies, or squishing them with a bookshelf.

I promise to personally play as many games as possible from the people who give feedback, and hopefully, by tomorrow, the triangle will be vanquished.
For this jam I had the idea to create a rhythm game, but instead of pressing keys to the music as the main mechanic, it would be about recognizing rhythmic patterns by ear and without any speed-based time limit.

How difficult do you think the task of recognizing rhythms from multiple instruments would be? What do you think about this idea?😅
Try it: https://ldjam.com/events/ludum-dare/59/telepathy-rhythms-fingers
Our mascot kitten turned out to be so cute that many people mentioned it in their reviews
We even received a lovely fan art! :scream_cat:

So, I'm here to invite you to try our game with a very cute cat!
https://ldjam.com/events/ludum-dare/59/packet-loss-1

Btw, also try clicking on the cat on the title screen :cat:
I would love some more feedback and attention, because I want to make this a larger game. What works, what doesn't?
For starters I think I'll make the sonar a dedicated button.
https://www.youtube.com/watch?v=Rr2QFr-yyV4
Thanks!

Finally getting around to posting. This was my first Ludum Dare, and I have to say - it was an incredible experience. The pressure of that ticking timer, ruthlessly crossing out features just to get a working build in time, it's a wild ride. And those goosebumps when you finally hit "Publish"…
So glad to join this amazing, cute, and warm community!
Feel free to give it a try here :point_right: : https://ldjam.com/events/ludum-dare/59/bash-and-gash


```gdshader shadertype canvasitem;
uniform sampler2D SCREENTEXTURE : hintscreentexture, filternearest;
uniform sampler2D palettetex : filternearest; uniform int colorcount : hintrange(1, 256) = 16; uniform vec4 basecolor : sourcecolor = vec4(1.0, 1.0, 1.0, 1.0); uniform float blendamount : hintrange(0.0, 1.0) = 1.0;
uniform sampler2D dithertex : filternearest, repeatenable; uniform float ditherscale : hintrange(1.0, 128.0) = 1.0; uniform float ditherintensity : hintrange(0.0, 1.0) = 0.1; uniform bool ditherenabled = false;
vec4 palettesnap(vec3 color) { float u0 = 0.5 / float(colorcount); vec4 best = texture(palettetex, vec2(u0, 0.5)); float dist = distance(color, best.rgb); for (int j = 1; j < colorcount; j++) { float u = (float(j) + 0.5) / float(colorcount); vec4 c = texture(palettetex, vec2(u, 0.5)); float d = distance(color, c.rgb); if (d < dist) { dist = d; best = c; } } return best; }
void fragment() { vec4 color = texture(SCREENTEXTURE, SCREENUV); vec4 original_color = color;
if (dither_enabled) {
vec2 screen_px = FRAGCOORD.xy;
ivec2 dither_size = textureSize(dither_tex, 0);
vec2 scaled = floor(screen_px / dither_scale);
vec2 wrapped = mod(scaled, vec2(dither_size));
vec2 dither_uv = (wrapped + 0.5) / vec2(dither_size);
float dither_val = texture(dither_tex, dither_uv).r - 0.5;
color.rgb += dither_val * dither_intensity;
}
vec4 palette_color = palette_snap(color.rgb) * base_color;
COLOR = mix(original_color, palette_color, blend_amount);
} ```
If your still in need of ratings feel free to comment bellow and ill try to rate your game today!
https://ldjam.com/events/ludum-dare/59/dragonia-siege

For all those out there not giving Uplink Defender a rating in humor, I would like to point out that the jellyfish sometimes wear hard hats.

Thank you for your attention in this matter.

Play here: https://ldjam.com/events/ludum-dare/59/goobers

come test your skills here!
LD Page
Play in browser
Please don’t submit games made with generative AI! I will not play them! The submission form is on the stream, no need to put your games in the comments
https://www.twitch.tv/pomothedev
It's like having friends. I am excited which games they are going to make this time. I really enjoy this socializing aspect of the jam. We're growing together :)
Hey everyone!
We’ve been hard at work tweaking the game, and I have some news regarding how we track the best players. I’ve just re-deployed the Leaderboard, and there’s a major shift in how you climb to the top!
From now on, the rankings are all about endurance. Instead of just quick scores, the top spots will now be held by those who can survive the longest and stay in the game the most. It’s time to see who has the best strategy to keep the lighthouse glowing through the night!
What's new:
Time-based Ranking: The longer you play, the higher you climb.
Reset: Since the logic has changed, it’s a fresh start for everyone. Go grab that #1 spot!
I'm still keeping a close eye on the balance, so keep the feedback coming. Let’s see who can hold out the longest in the Twilighthouse!
Play and compete here: https://bobanko.itch.io/twilighthouse
https://i.postimg.cc/26CrjGxX/Updated-Results.png
Hey everyone!
I’ve been hard at work tweaking the game, and I have some news regarding how we track the best players. I’ve just re-deployed the Leaderboard, and there’s a major shift in how you climb to the top!
From now on, the rankings are all about endurance. Instead of just quick scores, the top spots will now be held by those who can survive the longest and stay in the game the most. It’s time to see who has the best strategy to keep the lighthouse glowing through the night!
What's new:
Time-based Ranking: The longer you play, the higher you climb.
Reset: Since the logic has changed, it’s a fresh start for everyone. Go grab that #1 spot!
I'm still keeping a close eye on the balance, so keep the feedback coming. Let’s see who can hold out the longest in the Twilighthouse!
Play and check out the new changes!

I’m really proud of this one! The fundamental idea behind Robo Phone Home is that signals take time to get from point A to point B. With this as our guiding light, @Wuppos and I started the dev process with a morning brainstorming session coming up with a game mechanic and theme.

Our early ideas focussed on spaceship—mission-control dynamics on a long interstellar mission, with signals between the two transmitting at the speed of light. But we decided that we wanted to keep both parties on one map where the on-screen visual distance between them corresponded directly to the signal travel time. This didn’t quite feel right for interstellar distances, so we scaled the theme down to a robot and a control tower.
We immediately ran into a challenge: a time delay between input and response is inherently unfun. Our game must have a control scheme that feels like more than just controlling a robot character with lots of input lag. We realised we could get the perfect blend of responsive controls and meaningful signal travel times by centering the game around aiming instructions at the robot. The rest of the game sort of just designed itself.

We spent most of the first day implementing the robot/tower/signal mechanic, and making sprites for the robot, tower, and walls. We tried the mechanic on a test map with just walls to get a feel for what we were making. We discovered that we were making a puzzle game with an aiming mechanic. Perhaps we could call it a dexterity puzzler or a puzzle shooter (please let us know if you have a good idea for the genre name!). We had a second brainstorming session coming up with lots of different types of obstacles and interactable map elements, a small fraction of which we implemented and added to the six levels in our jam entry.

This was my first time making a puzzle game. Now that we’ve gotten some feedback, I’ve learned that it’s far too easy to make puzzle games a tad too hard. Testing your mechanic throughout the dev process through all its iterations actually makes you somewhat good at it and you lose sight of what it’s like for someone who’s just picking it up for the first time.
I want to say a quick thank you to all the folks who played Robo Phone Home, and left us kind words and useful feedback! Another quick thanks to @Wuppos for jamming with me again and lending his unique soulful pixel art style to the game (I have it easy)!
Hi everyone! I decided to write a small post about the things I learned while implementing a shadow and signal occlusion for our bat-themed puzzle game.
Before this jam I've never dealt with 2D lighting systems so the task was new to me - I needed to make a circular wave and a point light that can be occluded by the environment around the player, specifically tiles and props (like columns). Luckily after a bit of digging I found this great post about a dynamic 2D lighting system in GameMaker.
The idea of using diagonal quads and moving their marked vertices away from the light source in the vertex shader was exactly what I needed. However since I needed shadows for multiple purposes I didn't use the depth test, instead rendering them into the first channel of the RG8 shadow mask texture. The second channel is then used for color information to make the colored glass mechanic possible.
I then wrote a simple shader that multiplied the shadow mask, the preset color based on the information from the second channel and the texture output together. This same shader is used to render both the player light and any of the signal waves.
Of course, the next challenge was that I couldn't just fill the entire scene into one vertex buffer for shadow and color calculations at the start of the scene and reuse it, because of doors that can be opened or closed dynamically. So those are writted to a dedicated vertex buffer that is updated every time any door changes it's state. The rest of the scene is static and is recorded into vertex buffers at the start of a new level.
Wave objects get initialized with a shadow mask texture upon creation, which is copied from the player's own shadow map (or rendered from the point of view of the reverb statue). These maps are then redrawn in response to any change in the dynamic geometry.
On the gif the opacity of the objects is lowered so you can see what's happening behind them. You'll notice especially in debug color view that colored glass doesn't exibit the same "triangle artifacts" that the shadow casters have. This was necessary to fix since the glass is a bit transparent in the game itself and was achieved simply by adding another quad to the vertex buffer that matched the glass sprite shape and has no vertices marked for move in the vertex shader.
And that's pretty much it, not a perfect system, but it works well enough for the levels we designed. I wanted to do some filtering on the mask so that aliasing would be less noticeable but unfortunately any blurring makes the tips of the shadow quads peak out from under the tiles in a distracting way and the quads can't be offset further into the tile because this introduces holes in the coverage. I'll have to think of some alternative approach that hopefully will still let us use the tiles for walls.
Hopefully some of you found this useful!
We'll be very grateful if you check the game out here https://ldjam.com/events/ludum-dare/59/echo-2

2D artist on the line! I'm letting you know that we've fixed some of the engine issues and released a demo version for you to play on Itch. Io!
https://iwant-pizza.itch.io/vox-ab-extra

We spontaneously decided to do our first Ludum Dare (finally) and we achieved way more than we thought we would! Let alone having other people to actually play our game too and giving valuable feedback. You have no idea how much fun we had creating our game (there were also brief breakdowns, lol) and interacting with this positive community!
Now we hope we can participate in many more Ludum Dare iterations and of course we believe in a solution beyond 2028.
Just some random screenshots we did when creating the game:
Saturday, the phone works (pink ball for scale)

Monday, the scary sign, so the player knows whats up

Saturday, figuring out the brushes, since we need a textured landscape

Monday, the forest seems to be done now

Sunday, Rigging is harder than we thought


As usual, a legit NES ROM (*), this time a game about a robot sending signals to command other robots (maybe even itself?)
(* which maybe is not as cool as this other person who made a LD game for the Apollo Guidance Computer)
YEAH WE'RE BACK AGAIN DOING THE SAME SHIT COMMENT YOUR GAME AND WE WILL RATE AND PLAY YOUR GAME ON STREAM
https://www.youtube.com/watch?v=dC3E6MlUF9E
Thanks for another fantastic LD jam, with lots of cool submissions!
For our game, I decided to make some 90s UI goodness, by rendering out some metal from Blender. And recording videos to have in it. Of course this had to be a last moment kinda thing, and we had so much UI this time!! But I think it turned out pretty neat.

The UI in all its glory! And AFTER spending a few hours switching out the Text. Was when it became apparent to me the font just didn't have the number 4 or 5.. which we end up displaying quite a lot in the game. Who makes a font without those?!
Our game Marsacre is a boomer shooter with infinitely stacking upgrades and one hell of a ride, especially when you reach new game+++
Thanks Palvel for making this wild gif!
I'll keep gaming your games! And I'm already excited for next time!!
New one

Old one


COME JOIN THE CHAOS AT https://www.twitch.tv/coleslawski
Make sure you are active in the chat if your game gets called!
Play it now: https://ldjam.com/events/ludum-dare/59/plume-tactics
I initially failed to finish my game for LD59 initially, submitting only gifs:


But now: a basic version of the game is now completed!
Also I’ve changed the category of my entry to “Extra” now!
A new trailer for our game "Lights of the Living Dead"! https://youtu.be/22uKPAaVZ3A
Many residents are reporting unconnected internet, and your the only person they can count on!


Play now! :
https://ldjam.com/events/ludum-dare/59/u-p-l-i-n-k
Play Glarble's Journey to Home-Ownership
^^ Try it out now to see if Glarble can buy his dream home.
Hey Jammers, it's Glarble here. Did you know I've only got 70 credits left until I can afford my dream home on Terra?
My job is super hard, but I reckon I should have enough by the time my contract is up.
huh?... Hmmmm... Oh, no Glarble's job isn't hard. All he has to do Is match the signal of a planet and find what resources it has.
He's been doing it for years so he obviously knows how to do his job...
Although... I did find this on his desk the other day.

Go play Glarble's Journey to Home-Ownership now to see how the story ends (there's more than one ending!)
Play Glarble's Journey to Home-Ownership
The resources/lights randomise every time so you won't get bored tryna find all the endings!👽

We thought it would be fun to show some of how the art for Coo-Coo, Chef! was made.
Our 2D artist (@lexu) drew a bunch of neat birds.


Then I imported them as references into Blender and modeled them. A very easy way to model organic things is by using metaballs to get the general shape, then convert them to a mesh, apply subdivision surface (iterations 2) to get finer geometry, and use the sculpting tools (mainly Grab) to get the general shape.

Then, I use QuadRemesher to get a reasonable topology and "Project From View" to get a UV map that I can align with the base image.

We are not good at coming up with names and this jam was no different.

We've added a postjam version to make the controls easier and remove some confusion with the input scheme! Please use the original version for rating, but the new version makes the "Move" command move the birds forward instead of randomly, as well as an intro cinematic and fixes some other QoL issues.
Thanks for everyone who played and provided feedback, and we're really enjoying playing all of your games!
I thought that it could be helpful for everyone who doesn't know where to start but wants to improve the art side of a game. I know that my style isn't everyone's cup of tea, but I can say that these simple rules have never failed me (so mb you can find them useful).
At the end of a day we have very limited time and the one big lesson I learned through gamejams: cut the scope

First and most important: find your mood and references of art the moves you, games you like to look at and try to captivate not a particular style, but mostly mood and atmosphere. It's not cheating, it's your style compass. I collected ~30 different images from Pinterest what helped me a lot to lock our style and also helped our composer to start working on music.
Second is: find a nice palette that would give you an extra kick on a style. You can go on Lospec (what I personally do a lot when I don't have much time) or take 4-5 colors from game you like, photograph you find beautiful or even pinterest. A restricted palete makes everything looks intentional (even if it isn't xd).
Third Pillar: Strong shape and silhouette. As a 3D animator I can say that nothing helps your work more than a very nice, pushed and clean shape. Silhouette is a structure that will work as a nice glue for your art.
Simplification - and we are on the 4th stage of making good art. When we don't have time let's use flat art, bold outlines, minimalism and treat them not as a shortcuts but like a deliberate style.
The last but not the least rule I put on the wall in front of me: CONSISTENCY. One asset that is different from the whole style hurts the perception of a game more than just a simple clean style. Keep everything the same from the moment you made first asset - the brush, palette, the outline's thickness, level of details, scale of items on the screen etc. If it's hard for you to keep consistency - work in the same file or use your character(main point of interest) as an anchor of a style.

Have you ever tried to serialize a matrix in the Unity Inspector or other complex data structures? Initially, Unity will not serialize fields like List<List<T>> unless we use a wrapper!
That’s the key idea: we don’t serialize List<List<T>> directly. Instead, we create a brand new serializable class with a property like List<T> values, and then serialize List<WrapperClass> instead!
Example:
Our wrapper class:
csharp
[Serializable]
public class ListOfStrWrapper
{
[TextArea(3, 7)]
public List<string> values = new List<string>();
}
and the fields in another object:
```csharp public List listOfStrWrappers = new List();
public List listOfListOfStrNoWrapper = new List(); ```

It's might be not very clear, but our second structure hasn't serialized!
I came up with this approach to create relatively complex dialogues conveniently and quickly (very useful for jams! (ig, since I don’t have much experience, haha)).
In my project, each single dialogue is represented as a List<DialogueNode> (which is basically a container for the actual text of each node, speaker portrait, their name, etc.).
However, I need my entities to contain several dialogues, which would mean using List<List<DialogueNode>> — and that is not serializable!
So, this is exactly where a wrapper becomes useful.
csharp
[Serializable]
public class DialogueContainerWrapper
{
public List<DialogueNode> values = new List<DialogueNode>();
}
and create List<DialogueContainerWrapper> instead!
Result:
And dialogue example:
Pros: Fast, easy, and convenient for small data structures!
Cons: It may become messy when working with grotesque objects and containers. It is fine for around 10 objects with a small number of attributes, but as that number grows, things can get very inconviniet.
For bigger containers, it would be better to create a ScriptableObject container and assign a list of them instead, or load them from resources.
Hope you found this small article useful! I’m still learning the engine, and advice from more experienced people would be greatly appreciated, haha!
I noticed something: about one third of the people who visit my page download the game. Why is that? The obvious answer is that this is normal, or the page presentation isn’t engaging enough, but almost all traffic comes from Ludum Dare. So that likely isn’t the reason, and the next assumption is that the build size is the issue.

I work in Unreal Engine, and it has this thing where builds can’t really be small. Even an empty project weighs around 300 MB. When trying to reduce the build size, you have to use some tricks (besides standard settings like built-in compression and packaging only necessary maps without engine content).

For example, compressing textures. Their size can be reduced almost without noticeable quality loss. Since lighting is volumetric, most of the visual appearance is created not by the texture itself but by its normal map, so you can reduce the size of all textures except normals up to a certain point without losing quality. But even that has a limit you don’t really want to cross.

There’s also a thing with audio: for example, the size of an audio file inside the engine increases almost 4 times (because the engine converts it into a special format so it can process it faster at runtime).
I can reduce the build further - smaller textures, simpler audio, more aggressive compression. But will that start hurting immersion for you? Especially considering I won’t be able to get the archive size below 400 MB anyway (compared to the current 600 MB).
So the question is - is it even worth it? How important is build size to you? How much does environment quality breaking down affect your immersion?
And also, I’m curious: what is your view-to-download ratio?
I'm on the train right now - if your game is playable on phone (like mine is! ;)), please drop me a link!
They don't appear in my profile feed, only very old drafts and published posts...
This is how my world map ended up:

I went for 5x4 = 20 rooms, trying for a balance between "big enough to be interesting" and "small enough for compo".
The six rooms at the bottom center with the lighter colours are a sort of "tutorial area". There's no explicit tutorial, but you can't leave this small area until you find 3 triangles, and the mechanics in there are limited to just a couple of simpler things.
The map wraps around because it's easy to implement and reduces the time players need to spend schlepping across the world. It's like having fast travel, except you barely have to write any code.
I wanted to get about half the map filled in on the first day, and finish it on the second, but was behind schedule for most of the time.
30 hours in (map still barely started):

35 hours in:

Would have been cool if I'd done regular PNG exports from Tiled so I could do a timelapse of the map filling in. Oh well, it's an idea for next LD if I do this kind of map again.

Seems legitimate, I think you should click on the attachment...
What you see is a sneak peak of an upcoming post jam update to our game with various QoL changes and extra functionality to mess around with and solve!
You can play the current Ludum Dare version of Mission: Stop Transmission here! Works on Windows and Web (computers and phones)!

How about taking a few minutes to try to sink the Red April?
https://ldjam.com/events/ludum-dare/59/the-hunt-for-red-april
If you have a game you'd like for me to try, leave a comment and I'll give it a go and rate it as well!
We created an arcade-like survivor game where the player tries to survive as long as possible in an enemy infested world.
I made it to level 19 today by focusing on Fire Strike and Missile Strike.

:arrow_right: Lets take those cool buildings for example : Street View

Perfect !



Play here: https://ldjam.com/events/ludum-dare/59/goobers
Game: https://ldjam.com/events/ludum-dare/59/ray-of-hope
Hi all! More games were played, so here is a new video. Enjoy watching!
🎥 Video: https://youtu.be/Ws5lvAST0aU
P.S. If you like any game and wanna try them yourself, I have add links all of them in the video description.
After the jam deadline, our team had a pretty busy week with various IRL things, and didn't have a chance to get our itch page fully gussied up.

But our game A Short Flight is now available to play in-browser!

It's like Tail Spin meets... uh... video games. Fly a seaplane around a beautiful atoll, running errands and cargo for the island residents.

And use your rewards to upgrade your plane for daring maneuvers!

Flag Fanatic is now available for Android on the Google Play Store!
I've been cooking up a post-jam update for Flag Fanatic that'll make it a lot more user friendly as an educational tool while still keeping its challenging core gameplay!
The update will include a new practice mode that shows the semaphore symbol chart while you play, although it will disable score saving. The game will also now show you what the word you got wrong was and loop through its signals for you to reference!

I've also made some improvements for 16:10 aspect ratios to make sure the UI works correctly on Steam Deck.
I'm really excited to share the update once the jam's rating period ends!
I'm also taking suggestions for more words to add with the update, so if you have any feel free to leave a comment here or on the game's page!

Check out our game, Traffic - Signals & Sirens
https://ldjam.com/events/ludum-dare/59/traffic
Control traffic signals to get ambulances and police cars to the hospital or police station. Clear any car wrecks to avoid bottlenecks. Manage the chaos and have ambulances and police arrive on time, or get an X. 3 Xs on a vehicle type and it's game over!
We just need 5 more reviews to make it past 20! I'd be happy to review your games too, throw them in this thread!
My 13th Ludum Dare submission is called Trippin’ Ballz and I think it came out much better than expected… considering I didn’t expect too much!
I think “Signals” was a great theme… I always have zero ideas for each theme, but audio signals was something that came to me right away and I wanted to explore that. I also like developing shooters and arcade-like games so I naturally moved in that direction.
I actually started putting something together Friday evening (a rare occurrence). I wanted something that can be “listened to” for audio clues and then shoot them. I eventually decided to use colored cannons to shoot “something”, and decided to use colored balls. Since I previously created a game where balls were bouncing around (The Pongs) I didn’t want to repeat that game mechanic, but reluctantly I decided to go for it.
It seemed like most of the features were added ad-hoc, and very late into development:
Originally, you selected which cannon you wanted to use, and I changed it to automatically select the cannon when you hovered over a Ballz to reveal its color, and kept that mechanic going for most of the development weekend. About 2 hours before submittal, I determined that it was better the first way, and changed it back to allow you to select the cannon before listening for audio clues. After all, auto-selection of the cannon defeats the purpose of listening for specific tones the Ballz broadcast. If felt I needed something more, and decided on a Power-up. But what to use? How about a Magic Mushroom? I coded it where the Magic Mushroom only worked when you hit a Ballz with the color of the active cannon, but it works so much better when you can just use it without hitting a Ballz. I am glad I made that change, but unfortunately, it was about 1 hour before it was time to submit. Luckily that change wasn’t hard to implement. Late Sunday, I had a working game, but I didn’t know how to end the game. Just blasting Ballz is fun, but how do you win or lose? Let’s add an asteroid to protect. Why not? During the weekend, I was trying to come up with a name and decided on Trippin’ Ballz (child-like humor, for sure). Well, now that the name has been decided, I got to add some trippy features.
Without the time to develop shaders (my shader skill is passable at best) I simulated some screen shakes when you pick up the mushroom and use the mushroom power-up. Some on screen text, trippy background effects, chiptune, and Ballz expressions fill out the effects.
As with every LD game I submit, I’m thinking that I want to expand this into a full release. I guess it depends on my final rating to see if it is worth it. I like it, I like shooters, and I have some additional ideas that I want to implement.
I am curious if there is anything you would like to add/remove/change.


Hello everyone, I’ve received a good amount of positive feedback since the release of my game, and something that people mentioned frequently is that they played multiple times and still weren’t able to receive the good ending (my game has multiple endings). Even I was only able to get the good ending once, even though the rules for getting it are very fair.
My question is: is that okay? The game is short and the genre (Papers Please) calls for multiple playthroughs to figure things out. Or is it better to adapt to the median player and shift the balance in favor of making the good ending easier to get?
Department of Safe Communication
Hello hello, me and a friend are streaming Ludum Dare games now! Wowie.
So if you have a game you want us to check out and get some live feedback! Especially if you have a multiplayer game :3
Join Here

My friend flew over to visit me for ld59 and we spent the weekend making this. We thought it would be super cool to use physical art in the game, so he brought colors and painted all the art in watercolor 👨🎨 Here's some pics of what we had saturday morning through to monday evening. Was super satisfying to add the art to the game at the end, hope you enjoy trying it too!
|
|
|
|:---:|:---:|
|
|
|
I’m Kroko :crocodile: The 2d artist and additional writer on Cadence of Glob!
Thank you to everyone who have played our game,
and a BIG thank you to everyone rating and leaving comments!
I’m reading every comment, and I’m taking in all of the love and feedback.
A lot of the comments are mentioning the art style and the characters,
so as a thank you I wanna show you guys a little more of our silly little characters!
Minerva is named after the Roman goddess of intelligence,
which explains her ~~way too many~~ correct amount of fun facts
Yuri got his name from Yuri Gagarin,
the first ~~astronaut~~ cosmonaut in space!
Our Yuri is taking the name’s legacy further by becoming the first human
to interact with extraterrestrial life
Ricky… Ricky just looks like a Ricky…

Our little scientists goes through a few emotions throughout the story, and here is a close up of all of them!







I am actually just a lucky cartoonist and tattoo artist who got to make a silly game
with my partner, Ørjan. An incredibly talented programmer and game dev!!
Thank you to Dan for the juicy music and to Rachel for super cute 3d modeling
It has been amazingly fun to make a game, and to play all of yours! I am baffled by all of the great games you have made in only 72 hours!!
Btw… has anyone bounced the ball… 200 times… yet?
Hello everyone! The game's development continues. All future versions will be available on Itch.io.
By the way, I switched from Windows to macOS, so I had to reinstall all my programs, but I'm very happy. In fact, I'm noticing excellent performance compared to my old PC, which didn't even support Vulkan.
My Ludum Dare Page
Greetings, fellow Ludumdearers!
It is I, the Spirit of Groove! Coughs Or, the voice of the spirit, to be precise. xD Name's VenomousMouse and it's nice to meet you all here. This is my, and my teams, first time on Ludum Dare and we are glad to be here with you. I'm the 3d artist of my team and today i want to talk to you about our process of making low poly assets. For 3d artists that work in the industry it can be not a big thing to read about, but for those who just start as 3d artist, or 2d artists that want to master 3d, it can be interesting.
As for me, i'm working as 3d artist for 5 years. Worked on different projects, and had a chance even to work as a tutor. So, let's start! The main thing in creating low poly assets is to not overdo it.
When doing low poly asset, always check the silhouette. 2d artists also know how important silhouette is, and same goes for 3d medium. If your model from a far looks readable and recognisable, than you are doing it right. All edges that do not benefit silhouette and overall form can be discarded. And do not be afraid of making a tris. If you see a polygon with a strange shading, cut it in half and see how it looks.
Next step is adding detail to your low poly model. And for that part, again, silhouette is your best friend. If those details benefit overall shape and readability, than it's good. If not, better to discard them.
And last, but not the least, is how to add those details. Lat's imagine that you have a cylinder and you want to make a mug out of it. You want to attach the handle and you start to cut, or do boolean and so you will need extra edges to hold it together, etc. That's one way. Or you can just take a donut, cut it in half and move the over half to the cylinder, so it looks like a handle. And voila! If it reads as a mug form a far, then its a mug. Just don't forget to unite the cylinder and the donut.
That will be it for today! I was glad to meet you all, hope my post was interesting for you. And I will see you again!

P.S. We would like to play your games, so feel free to drop links in comments. Also, if you want to check our game, here is our link:
https://ldjam.com/events/ludum-dare/59/drumnice
Unfortunately my jam entry was missing this central feature from its design since I spent too long struggling with the track editor and getting the trains to actually follow them properly.
I have now added it and a bunch more improvements to a post jam version available here
It also has a fancy town generation system to import and export goods rather than the nasty last minute hack in the original, and a bunch more GUI elements to show supply, demand and inventories.
I realise the signal colours I used are actually for the reverse side. Real semaphore train signals are directional. I quite like it like it is though as it makes the game more of a puzzle.
There is still much more to do to turn it into a decent game, but this is what I had hoped to submit to the jam.
Have fun making ridiculously complicated railway networks!
One of the things that we are excited to hear, is how much players are liking the art and music in our game!
So we thought it would be a good time to share more of it with you! (Also, while we're at it, props to @Camjo for the tracks/SFX on the Jam Build!)
There were actually a good number of things made that were either wip or left on the cutting room floor last minute, for the sake of making the Jam in time, including, but not limited to:
...all completed, but not able to be implemented in time for the Jam Build.
There were also backgrounds and assets that were made that were not implemented in time, that we will be adding in an updated build post-jam, such as:

These lovely trees, by our artist/animator @Gropthor, who did the final tie-downs for the train and also made the signs and clouds.
We also have:
We are more than excited to add those things in, and excited as well that people are enjoying our game (and also noting things to update in a post-jam checklist!)
We'll continue to share more process/dev notes in future posts, but more than anything we wanted to say - thank you for playing our game, and stay tuned for more updates!

If you like what you see, I'd be happy if you played it https://ldjam.com/events/ludum-dare/59/little-mina-behind-the-screen

Come on down and join the madness! https://www.twitch.tv/coleslawski

Signal Path — Post-Jam Update
This update focuses on presentation rather than gameplay.
What’s new
Improved visual effects
Added background music and sound effects
The core gameplay remains exactly the same.
No new mechanics or levels were added - this update is purely about improving how the game looks and feels.
What’s next
We’re currently thinking about:
Creating an interactive tutorial
Improving the movement input system
Adding a movement preview
You can play the improved version here: https://caelestial.itch.io/signal-path
or visit our entry on Ludum Dare's site:
https://ldjam.com/events/ludum-dare/59/signal-path
Thank you all for playing and sharing your feedback, it really helps <3!

You can smash hordes of zombies here:point_right:: https://ldjam.com/events/ludum-dare/59/bash-and-gash
We didn't expect so many comments and ratings for our first game jam. 🤗
We're really excited to play your games, so feel free to leave links to them in the comments! ⬇
And if you haven't sent a signal to the Earth🌍 yet, head over to this link 🚀: https://ldjam.com/events/ludum-dare/59/last-frequency
Ready to keep a fragile signal alive in a collapsing network? In STAY ON AIR, you take control of a complex system of interconnected nodes, towers, and transmitters. 📡
⚙️ Stabilize the signal, route it through the network, and keep every transmission alive before everything falls apart. Each node behaves differently, forcing you to constantly adapt your strategy.
⚠️ Tension builds as the system grows unstable — adjust power, frequency, noise, and phase to maintain balance… or lose the broadcast entirely. Can you keep the network running until the end?
Join the broadcast and see how long you can stay on air. 🔊

👉 Play it here: STAY ON AIR

Good afternoon! This is my first time on this website, and I wanted to share a bit about what we’ve been working on.
In the city where I live, they hosted an in-person game jam. To everyone’s surprise, they chose the same theme as Ludum Dare 59, giving us the chance to participate in two jams at once. (it’s been held several times before, but this was the first time doing this)
I was the game designer in a randomly assigned team of eight. Our group was made up of four artists, one musician, two programmers, and me. The theme was revealed at 2 AM on Saturday in our time zone, so we all met at the venue at 8:30 am to brainstorm over breakfast and narrow down the concept for our game.

In the end, we went for a board game that blends elements of a visual novel and classic RPG, with both 3D and 2D art, and situations where you have to make choices each with its own consequences. These decisions ultimately determine whether or not you can win the final battle. One of the core mechanics and the one that is based on the jam's theme is using echolocation to navigate across the board and uncover hidden objects. We would have loved to expand on it or give it a bigger role, but in the end, time was tight.

The story follows V the vampire, who loses his sight after someone replaces his eye drops with holy water. While he’s recovering from the burns in his coffin, a group of vampire hunters invades his castle to finish him off (tipped off by the same person who swapped his drops). V must awaken from his restorative slumber and stop those who are trying to destroy him. But there’s another problem: he’s been asleep for so long that even the people living in the castle no longer remember him.
This is just a sneak peek of the narrative, which mixes a dark, eerie atmosphere with touches of humor and satire.

Development ran from Saturday morning until 3:00 PM on Sunday for irl jam. We were a bit disappointed we didn’t have time to include some of the art and sound we created during the event, so we decided to spend a couple more hours polishing and adding that content for Ludum Dare 59.
In the end, we won 1st place 🙂 for Best Game (out of 11 teams), as well as the award for Best Art Direction. We’re obviously really happy with the result especially since for six out of the eight of us, it was our first jam ever. We had an amazing time (even if it was pretty stressful), and we’ll definitely be joining future editions.
That’s everything I wanted to share. I’m not sure if I did the right thing turning this into more of a blog-style post instead of focusing only on the game, but I figured it might help reach more people and hopefully get some feedback whether it’s what you liked or didn’t like about the game.
And of course, we believe and support artists, so no form of generative AI was used in the creation of this game.
Thanks a lot for reading, and a big hug to everyone! <3
If you’d like to try it, you can download it on Itch.io: https://angelosz.itch.io/v-de-vision And feel free to leave us a comment here: https://ldjam.com/events/ludum-dare/59/v-de-vision




Would be glad if you play it if you like it https://ldjam.com/events/ludum-dare/59/beacon-bound
Hey everyone!
This was my first game jam, and also the first game I made using my own game engine, ve. I spent a ton of time developing the engine - about eight months. One of the reasons I built it was pure curiosity. Graphics rendering has always felt like a mysterious and obscure thing to me. Writing the engine helped me break open the black box and finally understand how everything works behind the scenes. Once I finished the engine, I wanted to test it with a real project. That's when Ludum Dare came along just in time. I had heard a lot about the game jam before, so I signed up without hesitation. A week before the jam started, I only had a renderer and input handling, but no music. Without thinking too much about it, I decided to use miniaudio for audio loading and playback. I also added some cool visual effects like dithering, and borrowed some math functions from Raylib.

To make myself even happier, I decided to develop the game on Arch Linux. Unfortunately, this approach led to a bunch of bugs in Windows. One of them was related to physics. As we all know, you should always use a fixed time delta for physics calculations. However, this time, due to haste and carelessness, I completely ignored this golden rule. In Linux, everything worked fine - moving or resizing windows did not pause the game. However, on my beloved Windows, the opposite happened: any interaction with the window paused the game, causing the time delta to spike and, in an instant, sending objects flying into space with massive force. I did not manage to fix this bug before the deadline because it appeared late, and I simply ran out of time.
As a result, my team and I ended up with a difficult game about microwaves, complete with an eerie atmosphere. We even published recipes.
Either way, it was a really interesting experience. I'll keep working on the engine. If you've played Crude Food and it didn't run on your machine, I'd be super grateful if you could send me the console logs and your GPU information at areg.krdian@gmail.com.
https://www.twitch.tv/gingybeardyguy
https://youtu.be/D2rSloUYIVk?si=9Rhdtt9gvC7QiEgl
Too bad we couldn't make it for the jam, but the effort was worth and fun though.
We came up with a simple but engaging idea (the original idea was way broader but we decided to cut it off if we ever aimed to have something deliverable). Basically in this game your mission is to keep a network of interstellar satellites online by aligning signal frequencies while you watch out for potential alien network attacks.
Game idea brought by @samuelsam
More info here: https://ldjam.com/events/ludum-dare/59/ld-59
A new trailer has dropped for New London 3D Turbo 2000!
https://youtu.be/byFpXHpakvg
Try it, rate it, tell us what you think!
IF YOU COMMENT WE WILL PLAY YOUR GAME!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! https://www.youtube.com/watch?v=PaOLipDfFu8
Haven't got round to playing much yet - am gonna speed run a bunch this next week.
Did a quick recap of last weekend. Think this is the first time I've managed to avoid circling the drain of indecision and regret trying to work in vastly over-complicated mechanics into a game and failing to deliver the 'game' element. :smile:
Use down arrow to carry the satellite dish around. Level 2 is easier than it looks, drop the satellite on the conveyor and run left - you'll make it through :thinking:
https://ldjam.com/events/ludum-dare/59/gigahurtz
https://www.youtube.com/watch?v=4zlgM2-NRAw
Grapple your way through the jungle by listening to its sounds.


If this sounds like your vibe, please give it a try!
I hope you enjoy. Please drop a link to your game in the comments and I'll be sure to give them a playthrough too!
As the dedicated "sound guy" for our LD team, I figured ill share some tips and tricks for recording/producing sound effects, without bogging you down with the "nitty gritty" technical details.
All the (non-synthized) sounds in our entry this year were recorded straight from my phone. All of the edits I made were done in FL studio, but that's only because I forgot to install Audacity on this PC (oops).
Preferably way more. Need to record a door closing? Record yourself closing a door 10 times, you'll thank yourself later.
On top of giving you a lot of options to choose from, it also gives you the ability to have multiple samples of that sound effect in the game. "Footstep.ogg" might sound great, but if the player is hearing the exact same sample every 2 seconds, its going to get grating after a bit. You don't need to make a million different footstep sounds, but having 3-4 different samples play at random is going to make the player less likely to feel like they're hearing things over and over again.
all caps, because it's probably the best tip I've got. Say you've got a sound effect that's a metallic clank. You can add a lot of character to that sound effect by simply mixing something else in. Stack multiple different takes (another reason tip #2 is helpful) together and mix/pan them around, mix in a completely different sound effect (i.e. A stomp, or a metallic groan), or even take the exact same sample, and add effects onto it and mix it in to the original. Layering is what turns "guy kicking a trash can" into "robot landing on the ground".
Speaking of "guy kicking a trash can", you would be surprised what you can get away with. Remember, the player has no idea what you recorded, you do. What sounds like "obviously someone biting into a Pringle", becomes "a robot freezing" when presented to a player that just watched his robot walk into a block of ice. Especially with a little bit of editing. Don't immediately write off a sound effect for being "obviously wrong", until you put it into context.
Or in English, your sound should start when it starts, and end when it ends. Sounds simple enough, but in the sleep deprived haze that is Ludum Dare, sometimes it's less obvious than it seems. If you have a "thunk" sound effect, you want the "thunk" to occur at the very beginning of the sample. A little bit of lead up to the sound can make things feel unresponsive.
On that note, "silence" is rarely silent. A tiny bit of background noise in the sample can feel like "silence" in your audio editing software, but it can become obvious when it suddenly "cuts out" at the end of the sample in-game. The old Minecraft PE "Ooh" damage noise is a great example of this:
https://www.youtube.com/watch?v=b6KlyBV2lOI
For this reason, I usually add a little fade-out to most of the samples, even if I'm only fading out "silence".

One last tip, mind your mixing. Again, obvious, but LD is the perfect storm to "burn out" your ears. Even following best practices, it's hard to make every single sound effect a consistent/appropriate volume for your game. Personally I suggest setting the volume of the samples inside the actual game engine/IDE itself (Most will have some way to do this, but I guess YMMV if you're one of those masochists doing LD in pure OpenGL and C or something). If time allows, give yourself a rest from working on the audio, and THEN do an actual in-game mix. Psychoacoustics are a pain in the neck, and you'll likely find that something is way to loud or quiet, even though it sounded perfect an hour ago.
Those are my 2 cents, feel free to ask me any questions in the comments, and I'll try to get back to you at some point with an answer.
(assuming the embed works, otherwise, click the profile :) )
https://www.youtube.com/watch?v=_2vq-mHqdHc
For years the boys and I have been wanting to make an FMV game for Ludum Dare, but the stars never aligned, and we could never manifest a properly-scoped idea that would ALLOW for us to dedicate nearly an entire day to filming.
This jam, that all changed. :sunglasses:
We were able to film OVER FIVE MINUTES of FMV footage (over the course of approximately 8 hours...) and put it into our quirky little puzzle game TellyBuddy
To preserve our efforts, we've put together a compilation of all the videos in the game (MAJOR spoilers inside)!
Which one is your favorite? :wink:
If you're confused, consider playing TellyBuddy for yourself! We promise it'll all make at least 10% more sense once you know the context. :smirk:
Many folks have been asking for linux version, after some time fighting with unreal, its finally done and available to play!


Our game Combo Cooker is up on our official website!
(Don't forget to rate in on the LD page if you check it out!)
https://wobbleblocks.com/combocooker/combocooker
Now my game is 100% human made

For LD59, I knew we were going to make a web game. I don't like frameworks and engines, so I knew I'd be making it from scratch. So once we settled on our game idea Saturday morning, I put an HTML5 canvas on the easel, installed a Typescript compiler and got to work.
Our game was going to be just a matter of clicking on buttons to navigate between screens. Mouse-only input. It could probably have been as a regular HTML page, no canvas, but I anticipated some basic animation which seemed like it would be at least equally annoying to code in CSS. So I opted for the direct control of a canvas.
I knew from experience that the easiest way to get images into your canvas game is by embedding them into the HTML page as <img /> tags, and then drawing them with drawImage(). The problem is, those img tags need to be finished loading by the time the call to drawImage() happens. So you always need some kind of "loader" code to wait for them to load before you actually run anything.
What we want is a little object called, say, the image manager that we can tell about all the images in the game. It'll keep track of which ones are loaded, and only let the game start once they're all ready. Usage will look something like this:
typescript
const images = new ImageManager();
for (let image of document.querySelectorAll("img"))
{
images.add(image as HTMLImageElement);
}
images.onComplete = startTheGame; // set a callback
images.finish(); // that's all the images!
The logic needed in the class is pretty obvious, and mine looks like this:
```typescript class ImageManager { nLoading : number = 0; complete : boolean = false; onComplete : Function;
add(image : HTMLImageElement)
{
this[image.id] = image;
if (image.complete)
{
return;
}
this.nLoading += 1;
image.addEventListener("load", this.onLoad.bind(this));
}
finish()
{
if (this.nLoading == 0)
{
this.complete = true;
this.onComplete();
}
}
onLoad()
{
this.nLoading -= 1;
if (this.nLoading == 0)
{
this.complete = true;
this.onComplete();
}
}
} ```
The one extra little flourish in there is the line
typescript
this[image.id] = image;
This just provides a convenient way for me to get at my assets in the game code. All I have to do is give my image tags an ID, like <img id="princess" src="princess.png" />, and I can get them from code via images["princess"].
One thing you gotta know about HTML canvases is that they have two sets of dimensions. They have the dimensions of the actual HTML element, and then they have the resolution of the canvas itself. The latter is set using the width and height properties on the canvas. So for example:
html
<style>
canvas { width: 800px; height: 600px; }
</style>
<canvas width="100" height="100"></canvas>
If I draw a 100x100 test image on this canvas, it won't sit in the top left corner of an 800x600 canvas, as you might expect. It will fill the 100x100 canvas that you've requested in HTML, and CSS will then scale that to 800x600.
To avoid this, you need some code like this, to make the resolution of the canvas match its true on screen dimensions at all times:
```typescript function onResize() { canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight; }
addEventListener("resize", onResize); ```
The game is going to be 16x9 aspect ratio. So if the user resizes the window, the canvas needs to scale to be the largest 16x9 box it can within that window. Probably the simplest way to do this by far is just to use CSS, I did something much, much more complicated. I told CSS to make the canvas fill the screen, and then computed the largest 16x9 box I could within that. So now my onResize looks like this:
```typescript function onResize() { canvas.width = canvas.clientWidth; canvas.height = canvas.clientHeight;
let widthRatio = canvas.width / 1920;
let heightRatio = canvas.height / 1080;
let ratio = Math.min(1, widthRatio, heightRatio);
width = Math.floor(ratio * 1920);
height = Math.floor(ratio * 1080);
x0 = (canvas.width - width) / 2;
y0 = (canvas.height - height) / 2;
} ```
This code is setting the global variables x0, y0, width, height which define a little box within the canvas that the actual graphics code will draw into. I think I did this because I imagined I might want to draw a border around the game if there was extra room, sort of like what the Super Gameboy used to do. But it adds a bunch of complexity. Not really worth it.
The simplest thing for a short game jam is to set up your code so that your actual graphics and gameplay code can simply assume that the drawing area starts at (0, 0) and is always exactly 1920 by 1080 pixels. So if you want to draw something at, say, the middle bottom of the screen, you can just hard code the coordinates 1920 / 2 and 1080. To make this possible, you need a piece of code responsible for resizing the canvas, like above, and then a layer wrapping the drawing API that basically converts the gameplay code's "virtual coordinates" into physical coordinates.
Now we need to get our event loop set up, kind of like if we were making a Raylib or SDL game. So the top level code of our game looks like this:
```typescript function onResize() { // same as before }
function onMouse(event : MouseEvent) { let mouse = {}; mouse.clicked = false; if (event !== undefined) { if (event.type == "mousemove") { let canvasX = event.clientX; let canvasY = event.clientY; mouse.x = (canvasX - x0) * (1920 / width); // convert physical coordinates into "virtual" coordinates for the gameplay code mouse.y = (canvasY - y0) * (1080 / height); }
if (event.type == "click")
{
mouse.clicked = true;
}
}
gameSpecificOnMouse(mouse);
}
function render() { gameSpecificRender(); }
let x0, y0, width, height : number; // globals to store canvas dimensions
addEventListener("resize", onResize); addEventListener("mousemove", onMouse); addEventListener("click", onMouse); setInterval(render, 1000 / 60); ```
Since the game involves moving between several different individual "screens", it's nice to be able able to code each screen with its own, separate render and mouse event handler functions. So we introduce some types to represent this:
``` enum ScreenType { LETTERSCREEN, PERSONSCREEN, DEATHSCREEN, FAILURESCREEN, VICTORYSCREEN, TITLESCREEN, TUTORIAL_SCREEN }
interface Screen { enter() : void onMouseEvent(event : Mouse) : ScreenType | null render(context : CanvasRenderingContext2D, x, y, w, h : number) : ScreenType | null } ```
The purpose of the enter() function is that it'll get called when we first enter the screen. After that, render() will get called once per frame. Notice that the screen's onMouseEvent and render functions return a ScreenType enum. This lets the gameplay logic in those functions decide whether or not it's time to go to a different screen, and report that back to the top-level engine code:
```typescript // in the top level render function
let nextScreen = screen.render(artist, x0, y0, width, height);
if (nextScreen != null) { switch (nextScreen) { case ScreenType.LETTER_SCREEN: screen = letterScreen; break;
case ScreenType.PERSON_SCREEN:
screen = personScreen;
break;
// etc
}
screen.enter()
} ```
And that's basically it!
Hey folks!
I'm working on a presentation about game jams.
What they are, where you can find them, what do you need to participate, what are some common pitfalls to avoid and what is something I wish I knew from the start.
Is there something you feel like it is definitely worth mentioning for new folks?
https://youtu.be/WnbyzCf6F8Q
PLAY & RATE it at https://ldjam.com/events/ludum-dare/59/world-of-gates
A poker game where emotions matter more than cards. Watch your opponents’ behavior, catch the signals of their bluffs, and use them to win.

This game takes about 5 minutes to complete and has a definitive ending.
I’d really appreciate it if those who have already played the game, as well as those who are planning to try it, could leave a rating on itch.
https://ldjam.com/events/ludum-dare/59/poker-face
https://t4ran.itch.io/poker-face
In the Defend The Radar game, I used several plugins for unity. And today I want to share one of them. Perhaps you will use it or do something of your own))
AssetsPlugin is designed to manage static game content.
*The main feature: use the key to get data that relates to a specific object. *
For example, the key is "hero", the data is "prefab", "sounds", "visual effects prefabs", "health", "speed" and more.
You can also store information about improvements, skills, or even the scripts themselves.
But keep in mind! That all this is used only for immutable data! (Not for Runtime)
An example of how to spawn an enemy
```csharp // Spawn Enemy var prefab = assetsService.Get(GameAsset.Enemy).As().prefab;
Instantiate(prefab, Vector3.zero, Quaternion.identity);
```
More details on GitHub
An example can be found in the sources of Defend The Radar.
I will post other plugins later.
All my downloads go through itch.io and I see it when someone scores without downloading the game.
Do you often have this? How common is this phenomenon?
👇 I’ve fixed all the major bugs, so please check out the game if you have a moment!
👉 https://ldj.am/$425642

Decided to replace the cover with something a bit less boring and directly from the game. I always feel weird doing any changes, even 'outside' the game, but it seems like cover is fair game? I'm not sure, how do people feel about that?

A big thank you to those that have rated my game! I'm only just getting around to returning the favor properly! (Also isn't it strange how having an image first in a post makes it off center?)

Agents,
HQ has received your playtest data!!
First of all: thank you.
Your mission was dangerous, highly classified, and only slightly ridiculous:
Protect your signal from an enemy hacker trying to breach your connection and access the most valuable digital archive known to humankind…
We know. Terrifying.
During the ACEspionage playtest, you bravely entered the field with only:
You Surveilled.
You Hid.
You Interfered.
You right-clicked with purpose.
You left-clicked with mild confusion, but eventually… also with purpose.
And most importantly:
Thanks to your playtesting, we learned what was missing, where we should apply some super-secret powerful polish, and what we definitely shouldn’t change.
We added additional sound effects to strengthen the overall old-school PC vibe.
We added a proper resolve state for the UI.
It already existed in the background, but you know…
Time.
We also added:


We fixed several smaller issues, including:
You can now click cards with both:
Because every agent deserves options.
We are eagerly waiting for your new mission reports so we can analyze the playtest footage and feed all suspicious bugs into a secure containment server named:
Definitely_Not_Homework.zipTo everyone who played:
Thank you for helping us test ACEspionage.
You protected the signal.
You defended your extremely important homework data.
You helped make the mission better.
Your service has been noted in the official agency records.
Unfortunately, those records were saved in the homework folder.
Sooooooooooooooooo, uuuh....
We pushed a more polished version of our game, if you're curious about it (or if you didn't try it yet :eyes:), it's available here:
https://ldjam.com/events/ludum-dare/59/we-come-in-peace
Jam version is still available too!

We're a week into the rating period, so it's time for my customary deep dive into my game RAVTZN, and how I was able to develop it. First of all, I'd like to say a massive "thank you" to everyone who's played and rated the game so far! I will, as always, get round to rating and reviewing the games of everyone who leaves feedback on it.
I expected RAVTZN's decryption algorithms to be much harder to implement than they actually were. Well, two of them, anyway. I had to take an Affine decryption method I found online and translate it from Python into Lua because trying to figure it out by myself made my eyes glaze over.
The game stores both the encrypted and unencrypted versions of each signal. Each time you make a change to your selected decryption, the game selects the relevant algorithm, applies the relevant decryption logic to each letter of the cipher text in turn, and combines the outputs into a single "output" string. Finally, the game compares the output string to the unencrypted string and, if they're the same, marks the signal as having been decrypted.
I won't paste all three decryption algorithms here, but to give you an idea, here's the entire code for the Caesar cipher decryption algorithm:
``` function try_caesar() output="" local c=ciphers[cipher][2]
for i=1,#c do local char=string.byte(c,i)
if char>=65 and char<=90 then local newChar=char-rot
if newChar<65 then newChar=newChar+26 end
output=output..string.char(newChar) else output=output..string.char(char) end end
if output==ciphers[cipher][1] then --mark signal as decrypted end end ```
The game displays dialogue in a similar manner to my LD54 entry, Six Seats Left: one letter at a time, with a static sound effect played as each letter appears to sound like radio static. The sound effect is randomly pitch-shifted a little each time it's played, to better approximate speech, and isn't played if the character being displayed is a space, to approximate short gaps between words. The delay until the next character appears also increases if the previous character was a full stop, approximating a longer gap between sentences.

I've always wanted to try programming some sort of waveform visualizer, and RAVTZN gave me the perfect excuse to finally do so. Of course, RAVTZN's visualizer isn't actually "visualizing" anything - it's just an approximation.
I start with an array of hardcoded values between 1 and 15, indicating how tall each segment should be. On each frame, I loop over each segment and generate another number between 1 and 15, calculate the difference, and move the segment up or down by a fraction of that difference. The result is that the waveform jitters up and down in what is, hopefully, a convincing imitation of an actual visualizer.

Originally this was only going to be visible during dialogue scenes, but I liked the result enough (and thought the UI looked too bare without it) that I made it a permanent part of the background.
And that's everything I can think of to talk about! If you've made it this far, I hope you enjoyed this peek under the hood of RAVTZN's code, and I wish you good luck when the jam results come in!
Nighttime. Tiny bikini. Green-haired beauty answering every SIGNAL.
Clients call — you run.
“Play” with eggs, peel bananas, grow mushrooms... all while trying not to get photographed by nosy neighbors.
Earn $1000, buy the iPhone, don’t get exposed.
Simple, right?
Stealth + spice + strong SIGNAL theme.
Come play before the whole town finds out what she’s doing after dark~
🔥 Play Signal Girl now -> https://ldjam.com/events/ludum-dare/59/signal-girl