Cosmic Dash is published! #MadeWithDefold Jam 2025

:backhand_index_pointing_right: Play here: Cosmic Dash by Insality

Source Code Available: GitHub - Insality/cosmic-dash-jam-2025: Cosmic Dash Defold MadeWithDefold Jam 2025 Source Code. Made with tiny-ecs library with ECS-kind approach

Hello! This jam was tough but fun. Half of my time was eaten up by my workshop for the Jam (worth checking out — it’s knowledge-packed! https://youtu.be/qF19qpjZe9c) and, of course, the long-awaited Silksong. The other ā€œhalfā€ went to regular work, and the third ā€œhalfā€ I tried to save for the Jam itself.

The theme was Twist on Classic. I usually don’t follow themes too strictly and instead build something from old ideas. But this time I decided to revive an old memory: a game where you glide a square across a level filled with other squares to reach the finish. I liked that memory so much that I wanted to recreate it — but with lots of juice and see what happens.

My first commit was on September 6th, after some initial design work. I use Figma for mockups — here’s how they looked at current moment:


Figma Design

I follow a kind of ECS-style approach: entities for content (pure data), systems for the game’s main logic. I haven’t prototyped many games recently, but for this jam it worked really well. Features could be added in isolation without breaking other systems, which felt awesome.

For levels, I mostly used Tiled. I began with a simple test level and built the game around that. One cool discovery: in the newest Tiled, I can work directly with JSON files, no need to export (even auto-export, but one file is better than two) from TMX — awesome!


Tiled Screenshot

I switched to an isometric style, trying to make the visuals richer than just rounded squares. It looked rough at first, but over time it grew on me.


Isometric Visuals

The hardest part was making mechanics fun. I’m not passionate about level design (sadly the most important part of puzzle games). I added some basic mechanics like pushable boxes and teleports, then played around to see if they worked. The level design isn’t my favorite, but the game still feels enjoyable in a ā€œflowyā€ way rather than a strict ā€œpuzzleā€ way — and that’s good enough for me.

I was surprised when I tested a two-player per level: it worked without any changes to the code! I just added a second player entity and it played perfectly. Loved that moment.


Control two players!

Game polishing was my favorite part. I spent a lot of time on sounds (all made by me). Music is from the amazing soundimage.org — highly recommend checking it out. I tried to make sure everything fit together to support the ā€œflowyā€ and ā€œjuicyā€ feel. Pretty happy with the results.

All animations were created with Panthera 2.0 of course :grin:! As I showed in the workshop, it’s really fast to add small tweens and multiple animations to the game. For example, here’s what my player animations look like:


Panthera 2.0 Editor

In the last two days, I got serious: ā€œokay, I need to actually finish thisā€. I added menus, settings, progress, and other essentials. Each little addition made a huge impact on the overall feel. Even the floating stars in the background (just default Defold particles btw) added so much.


Final visual

:backhand_index_pointing_right: Play & comment here: Cosmic Dash by Insality

I’m really glad to release something and finally post some juicy GIFs for the community!

Happy Defolding!

26 Likes

Awesome! So much fun! The gameplay is fun and smooth! I love the visuals and music! Do you plan to further explain the project or open source it for us to learn from? (It’s great to see such a wonderful short game, I really want to learn it)

2 Likes

Thank you!

I don’t have plans to open-source it, but which areas are you interested in? I can try to explain or made a short text wrap

2 Likes

Hello! (Sorry for the machine translation, I’m not a native English speaker. Thank you for your reply!)

I’m a complete beginner with the Defold engine as well as Lua programming. After seeing the effects presented in your work, I was really impressed—that’s what motivated me to start learning and experimenting!

I’m especially curious about how some of the mechanisms and game logic are implemented (I’d like to start with something simple). At the same time, the visual effects and animations in your project are outstanding. As an artist myself, I’d really like to practice implementing visual and animation effects—particularly by using the editor you’ve created.

Could you share what the main challenges were in achieving these results, and which parts are more universal or good for learning in general? My plan is to use your project as a target to ā€œrecreate,ā€ so that I can strengthen my understanding of the engine and also get familiar with the plugins you developed.

1 Like

Thanks! For me in games, the most challenging part is the level design and game content in general. Trying my best every time :upsidedown:

But I think you’re asking about the technical side of the game? I’m not sure I have an answer, but I’ve always believed that the best way is to just start making something. I started this with a square image moving over a field and step by step improving it. The field is a Lua table[][], which allows easy navigation in both directions and lets me see all objects on a particular cell. So all the logic was about reading cell data and performing actions, and my movement logic looks like this now

function M:move_to_cell(entity, collide, collide_i, collide_j, movement)
	local entity_i, entity_j = self.field:get_ij(entity.transform.position_x, entity.transform.position_y)
	local distance = math.abs(entity_i - collide_i) + math.abs(entity_j - collide_j)

	local is_collide_solid = collide and collide.field.solid
	local is_collide_glue = collide and collide.field.glue
	local is_collide_pushable = collide and collide.field_pushable and distance > 1
	local is_collide_portal = collide and collide.field_portal
	local is_collide_corner = collide and collide.field_corner
	local is_user_controlled = entity.user_controlled

	if collide and is_collide_pushable  then
		self:handle_pushable(entity, collide, collide_i, collide_j, movement)
	end

	if collide and is_collide_solid then
		if is_collide_corner then
			return self:handle_corner(entity, collide, collide_i, collide_j, movement)
		else
			if distance > 1 then
				return self:handle_solid_wall(entity, collide, collide_i, collide_j, movement)
			end
		end
	end

	if collide and is_collide_glue then
		if is_collide_portal then
			return self:handle_portal(entity, collide, collide_i, collide_j, movement)
		else
			return self:handle_glue(entity, collide, collide_i, collide_j, movement)
		end
	end

	if collide and collide.field_collectable then
		return self:handle_collectable(entity, collide, collide_i, collide_j, movement)
	end

	if not collide and not is_user_controlled then
		return self:handle_props_movement(entity, collide, collide_i, collide_j, movement)
	end

	return false
end

The most helpful thing was to make everything as loosely coupled as possible, to have the ability to run any part (or the most valuable parts) of your game or visuals separately. This allows you to develop GUI, entities, and some visuals separately, which speeds up the development and testing process a bit.

About hot-reload: I realized that all resources will also be hot-reloaded! So any JSON files will be updated too, which allows you to reload the level and see the changes instantly (sadly, I realized this after the jam). The testing levels can look like this

About the visual side: As you can see in the GIFs, the first version was just basic movement without anything extra. The difference between the latest GIFs is just a lot of ā€œmicro animationsā€ that I added. They are usually small (0.1-0.3 seconds) and not very noticeable, but together they look pretty neat! There’s even a small camera ~1 degree rotation to add some ā€œmovementā€.

Regarding all the GUI-related parts, I made a workshop at the start of this game jam. I think it covers all the things I used in this game :slight_smile:

Currently I’m playing with Poki’s playtests. What a miracle tool to play with!
I started uploading the game and making the most relevant changes that I see in the recordings, slowly improving the basic metrics, and it’s fun! Did my first ā€œPlayer Fit Testsā€ - such good benchmarking tools to track your progress.

And if you want to check my progress versus the game jam version, you can try it here I think:

https://poki.com/en/preview/2a5331af-8b85-401c-87d7-f7a39ca5bd2b/e7356222-90c2-4839-9b02-0bcf907c36d2

8 Likes

Hey, today is a good day! I finally spent some time to prepare the source code for Cosmic Dash game from MadeWithDefold Game Jam 2025.

This is a simple puzzle game built with tiny-ecs, so if you’re interested in how you can manage entities and systems, feel free to check it out!

Druid’s widgets, Panthera animations and ECS-like architecture inside - ready to experiment and learn from it!

13 Likes

The game is lovely. It’s exactly the kind of art style I like. Thank you for sharing both the project details and the source. :slight_smile:

2 Likes

amazing work!!Thanks for your sharing!

2 Likes

I was able to build the game fine without any errors, but, one day I started getting these errors.

I have bees using this link for druid library:
https://github.com/Insality/druid/archive/refs/heads/develop.zip
Has there been some update made to this library? I tried using the latest version but that mis aligned the whole UI of the game.

2 Likes

Thanks! Yeah, it’s due the Druid develop branch :sweat_smile:

Fixed in the repo

3 Likes