Nozomu57

Ludum Dare 53

Rope math: deconstruction of DETOUR's main mechanic

Hello! As last idea for a post about our puzzle-game DETOUR, I wanted to make an overview of how I implemented rope physics (or should I say "wire physics"?)

What do we want? - We want to draw a line between the player and the charging station, and this line to update on player's movement. - When this line touches pillar, we want to "bend" the line around the corner, adding a new turning point for the line.  - Repeat for each corner we meet. - Also, if we start to "unwind" the wire, detach from the pillar when necessary.

example from our final build: Day 3 (small).gif

So, how do we implement it?

One way to do this is use some physics engine: pillars are collidable objects, rope is a chain of collidable objects, they collide with each other. This method was scrapped early on because of one big reason: physics is wonky, rope will wiggle around, glitch at corners, and in general behave not 100% predictable. Not what we want for a puzzle game.

So we choose the "nerdy" way: maths. It actually turned out to be easier than I expected, but still required lots of steps to be implemented. I'll try to explain step by step. I am using Godot and its internal objects like Line2D and Area2D, but the concept should work for any game engine (or even extrapolated to no engine at all, if needed).

1) For visuals, I use Line2D. In its primitive form it's just a set of lines connecting your points in order.

2) Points are stored in an array somewhere in code. First point is always charger (which is immovable), last point is always player (so on player's movement we update last point's position and redraw the line).

3) Also, on player's movement we trigger a special "update detection" function. For each pair of points (at first it's just 2 points in line), we add a rectangular CollisionShape to the Area2D detection of the line, with the length of distance between lines and the width of the line (more or less). It looks something like this:

Godotemv3.5.1-stable/emwin64_4KVf8JlpUX.png

It’s arguably the only use of build-in “physics”, but in our case it’s just for detecting intersections between rectangles, which technically could also be done manually by calculating intersection of two rectangle’s edges :)

4) Add small collision rectangles to each of the 4 corners in each pillar. When some of the corners detects an intersection with one of the line’s collider, it sends its position to the line. Line adds a new point before the last one, basically splitting the last edge in two new edges (not forgetting to add a new collider for newly emerged edge). Corner remembers which two parts of wire it is already touching, so we don’t create new points for them. The result already looks promising:

first.gif

There is only one caveat: we can’t unwind the rope for now. For that, we’ll need more math!

5) How do we check if we should be still touching the rope? The secret is just to compare angles! Let’s assume that line between player and second to last point is angled at Y degrees to the horizon, and second to last + third to last points form an X angle:

IMG_4918.JPG

Now we can see that if Y>X, then player is still “around the corner” and the wire should still touch the corner. And if the player backtracks and Y becomes lesser than X, then we should “unsnap” from the corner by deleting the second to last point. Sounds good? Let’s test:

second.gif They got us in the first half, not gonna lie.

But we missed just one last calculation:

6) If we wrap around the corner “counterclockwise” (in comparison to “clockwise in step 5”), we should actually wait for Y to become greater than X, because everything is mirrored. There is an easy fix: when our line collides with the corner, we also check which side from the edge is the corner situated. It’s actually also just a math comparison between two angles:

IMG_4919.JPG

We store this side alongside line’s points and use it to determine whether we should use “>” or “<” in step 5.

Well, seems like that's it! How does it look?

Level 3 Final.gif Awesome, it works now!


Of course, this is a generalisation of the whole idea. I had to implement some “usual game hacks” to make it work as expected: - Corner’s point is a bit outside corner’s collider - I needed some “small negative delta angle” in unsnapping function so I don’t unsnap immediately after snapping, - Comparison between angles behaves funnily at +-180 degrees

Also, this logic has limitations. I can’t have moving blocks (but should be easy enough to implement, just moving points inside line and more angle comparisons). Also I tried to do a maze level and failed miserably because line touches dozens of corners at the same time (and I was too lazy to fix that for only one level): photoem2023-04-30/em20-44-54.jpg

What is the moral of the story? Idk, maybe that some complex looking ideas can become simple enough if you can destructure them into simple steps.

If you liked this post (I genuinely don’t know if this was an interesting read), please leave a like and play our little rope-based arcade-puzzle DETOUR :)

https://ldjam.com/events/ludum-dare/53/detour

Ludum Dare 54

Robot Detour: my LD53 arcade puzzle DETOUR is reborn and heading to Steam!

Remember DETOUR, my puzzle game from previous Ludum Dare, about robot on a wire?

Well, I've been cooking a full game out of it the last several months.

Promo gif 1 small.gif Promo gif 2 small.gif

10+ "worlds" with different mechanics, 100+ levels to wrap your head and wire around (haha, get it?), and my infinite love towards good puzzle mechanics and levels.

See you all in a month or two for a demo, and in half a year for the full release!

Wishlist the game on Steam!

And look at this gorgeous poster: 16-9 normal poster.png

Much love <3

Nozomu

Robot Detour demo is out!

For the last 7-8 months, my team and I were working on a full release of our game DETOUR from LD53. And today we released first public demo on Steam! https://store.steampowered.com/app/2666840/Robot_Detour/

ROBOT DETOUR POSTER - small.png

The game is now much nicer in all aspects, has more mechanics, and even more to come!

It looks like this:

promo 3MB (1).gif

And like this:

promo 3MB (2).gif

Would be happy if you gave it a try and wishlisted :)

Steam link

Ludum Dare 56

Robot Detour, full version of my LD53 game, is out!

Ludum Dare 53 was a first gamejam for me and my "studio" (which is basically me and my wife). During it we've made a game DETOUR which surprisingly got 8th place in Innovation and 25th in Overall, so we decided to make a full game out of it!

So, after 1.5 years, x10 length of the game, x10 mechanics, x100 fun and x1000 polish, we finally released full version: Robot Detour!

gif 4mb 1.gif

gif 4mb 2.gif

You can buy the game on Steam or itchio, or play the demo first. Itchio even has the web version of the demo :)

I hope it will be as fun to play as it was fun making it ❤️

release picture.png

Ludum Dare 57

Burn With Me: first teaser!

Maybe some of you remember our submission for LD55.

Well, this year we finally got back to this project and can finally reveal what we've been cooking!

Steam Gameplay SHORT gif.gif

Screen 1.png

Screen 6.png

If you fance some "cozy dread" deckbuilder please give us a wishlist!

Steam link

Ludum Dare 59

Thank you, Ludum Dare.

Hello, everyone! How's life?

This is third time my team and me participate in Ludum Dare, and I wanted to make a post about my small story with Ludum Dare. Because funnily enough, previous two times I made a game with my team at LD, it ended up getting a full release!

First time it was Ludum Dare 53 (theme: "Delivery"), when whe created our first ever jam game Detour. After the gamejam we worked for 1.5 years and made a full game, Robot Detour! Which released on Steam in 2024, and even on consoles recently.

q+3CEI.gif RLq5vu.gif

Afterwards, I made a small compo game Feng Shui Struggles for LD 44. It was fun, but making a game together with team turned out to be 10 times more interesting!

Second time we made here a game together was Ludum Dare 55 (theme: "Summoning"), on which we made a demonic deckbuilder Burn With Me! We didn't release the full version yet, but are very actively working on the game!

bwm-ezgif.com-optimize.gif

And it's not like we try to make a full release out of every jam game: we created 10+ gamejam prototypes already. I suppose Ludum Dare is just that special :smile:

So, in a way, I owe Ludum Dare my indie gamedev career. Even though our time together was brief, I will remember this jam forever. And will try to participate as much as I can now!


This year stars finally aligned, and we had some free time around LD. We decided to make a small narrative atmospheric game, without any intent to make a full release out if it. It turned out a bit harder than we wanted, but that's just how jams work sometimes.

Pilgrimpromo-small-ezgif.com-video-to-gif-converter.gif

If you fancy trying it out, remember you can skip levels via pause menu

Nest, this is Pilgrim

Have fun everyone, hopefully everyone got out of this gamejam what they wanted already :heart:

Results already?!

Dropped just like that?

I'm happy with the results, but this was a bit anticlimactic haha

imageem2026-05-09/em15-48-12.png