Metric Relay by xotraz
Metric Relay is a puzzle game inspired by the concept of metric dimension from graph theory, which felt like a good fit for this jam.
In each sector, you place a small number of beacons on relays so that every relay in the network can be identified by their unique transmission delays (shortest path distance) to those beacons. No two relays should share the same delay pattern.
Groups of relays that share the same delays to the placed beacons are considered ambiguous and are highlighted with a specific group color and effect for clarity, while relays with unique delay patterns remain blue.
The game tells this through the story of a collapsing communication system that must be restored sector by sector. There are 120 levels, starting simple and gradually becoming more challenging, as the relay networks grow larger and more intricate over time.
How to play
The game is mainly designed to be played with a mouse or touch screen. You place or remove beacons by clicking or tapping relays. You can zoom in and out of the sector, which is useful on later maps.
While the game is embedded here, my spaghetti code does not handle full-screen yet. Moreover, Ludum Dare embedding does not allow saves. For a better experience, I advise you to play the game on itch.io with the link below.
Keyboard shortcuts
- R — Reset sector
- N — Next sector
- P — Previous sector
- O — Options
- Esc — Menu
- + — Zoom in
- - — Zoom out
- 0 — Reset zoom

Made in 48 hours with a lot of help from my favorite LLM to write Phaser code.
| Link | https://xotraz.itch.io/metric-relay |
| Original URL | https://ldjam.com/events/ludum-dare/59/metric-relay |
Ratings
| Overall | 78th | 3.733⭐ | 47🧑⚖️ |
| Fun | 128th | 3.4⭐ | 47🧑⚖️ |
| Innovation | 42th | 3.867⭐ | 47🧑⚖️ |
| Theme | 55th | 4.178⭐ | 47🧑⚖️ |
| Graphics | 56th | 3.965⭐ | 45🧑⚖️ |
| Mood | 102th | 3.636⭐ | 46🧑⚖️ |
| Given | 96🗳️ | 63🗨️ |
@barnabewild, @metalgear, @last-angle :
I wish I had done a proper tutorial to explain the concept better, I probably could have managed it, but I got surprised by a few bugs.
@fassenberg, @last-angle :
All 120 levels were generated by a few algorithmns, which is why there are so many.
I 'just' had to tweak algorithmns, order levels (with another algorithmn), improve the rendering, and playtest a bit.
Instead of a full-blown tutorial (though one would of course be good, time permitting) just being able to replay the "ping" animation more slowly and showing how each node's shortest path distance is calculated, and how the ambiguous groups are broken up, would probably help it "click" for players.
The mechanic is a bit hard to understand for people who are not familiar with it. Of course, that may just be the price of innovation. It may need a fairly long and clever tutorial as an introduction.
Good puzzle game and I love the simplistic graphics that look really nice!
All in all great job!
Did you use AI only for code or also for graphic/UI design ?
I’d suggest adding some kind of indicator to help visualize the current shortest paths, so players can make more informed decisions. You can always try to map it out mentally, of course, but it’s difficult to visualize the relationships between the different beacons.
Incredible work, congratulations!
The problem is hard to describe while keeping the atmosphere, I am happy you all managed to have fun still.
I discovered yesterday that one of the colors for an ambiguous group is very close to another, and now it is the only thing I see when I play. :grimacing:
The colors looked different on my palette, but it was mostly because one is slightly lighter, and when they glow, they are super hard to differentiate. So when you see one fewer different glowing color than the ambiguous group announced by the text, the orange group is made of two different groups actually and this is why.
@jacky-san I used AI as a starting point for all my code; a lot of it generates graphics and UI (like the button class). That said, I had to fix most hitboxes, enhance the layout, and adjust hazardous vectorial strokes.
There are only a handful of simple textures, created dynamically at the start. That gives the game a strong identity and, most importantly, was manageable without real graphics :grin:.
I was so happy with how it turned out that I also did the logo with objects. It is a glowing graph on top of moving arcs and lights, but it works.
Some of the early levels (row of boxes, triangle fan) are pretty repetitive; that's maybe where the downsides of generated levels become evident. I'd say that the main problem, though, is UX. It can be kinda hard to tell at a glance why certain nodes have the same signature: maybe each beacon could have its own color, and then when you hover over a node it could tell you the distances to each node.
I did not come up with the problem; it is a very old known NP-complete problem which is relatively understudied.
But I did a research internship about solving this problem on a special class of graphs with *treewidth 2*. All the graphs shown there have treewidth 2. I knew they would be nice to play with and relatively easy to draw!
I did not find a polynonial time solution during the internship, but a colleague of mine did years after my attempt. This solution is very hard, I would never have found it, it and has never been implemented. So I resorted to a kind of brute force for the jam.
@caeonosphere @mahalis
About the start of the progression, thank you for the feedback.
This is more my fault than the generator. I implemented a special 'pedagogical' progression for the start of the game, which is strict. Each type of 'very easy' problem is shown twice, first with a few nodes and then with more.
I thought it was a good idea to show them twice, and people would be satisfied to do them in one second.
After this pedagogical section, there are two unintentional repeats that I should have definitely removed, though.
The first is probably the one you experienced; it was supposed to be a tree, but it ended up being just one path.
I believe it starts to get real after level 20, and the more you advance, the more you get difficult classes of graph and difficult instances of them. But I admit it is not as linear as it should be, and I can understand it sounds like a 500-episode anime that gets 'real good at the second arc, I promise' :grin:!
I will probably rework this for a final version and try to improve the UI.
And also thanks for giving me PTSD flashbacks from my Discrete Math days :laughing:
My thoughts are shared in the VOD. Hope we see you back for LD60. ✌