Author here! Thanks for posting! This game is written in a Clojure-like programming language I've made. So this is a (B)rogue-like in a Clojure-like :)
What I think is interesting is that this game computes the entire world state each tick and does so efficiently thanks to persistent data structures.
To anyone who dared to fire it up: thank you for playing, I'm curious what you think!
onlyrealcuzzo 1 hours ago [-]
This is awesome!
I'm interested in building something similar, any tips besides looking at what you've done and Brogue?
jackpirate 4 hours ago [-]
The name let-go of your programming language is awesome!
marcingas 4 hours ago [-]
Thanks! Please check it out and leave me a star if you like it :)
biosubterranean 3 hours ago [-]
Little buggy (dying from things not on the screen), but I love the dwarf fortress esque vibes
Oakwhisper 3 hours ago [-]
There was a commit a few minutes ago that fixed the instakills for me
marcingas 2 hours ago [-]
This was caused by a stdlib bug in the language, I bypassed it :D
2 hours ago [-]
Jeremy1026 4 hours ago [-]
Gets stuck in a redirect loop with the message:
> Interactive input unavailable (no cross-origin isolation).
> Deploy coi-serviceworker-js alongside this file.
in Safari on 26.4
Parcival 5 hours ago [-]
Pretty fun! I keep getting instantly killed by things though and I'm not sure why, possibly a bug.
andai 5 hours ago [-]
I see you haven't played Noita!
marcingas 4 hours ago [-]
Noita was another inspiartion when making this - the inverted power curve is real! Start squishy, become a god, die anyway.
zardo 3 hours ago [-]
A wand related accident has to be the number one cause of a Noita run ending.
ticulatedspline 2 hours ago [-]
I feel this comment. Seriously though, damage reflection was one of the many insanely annoying things about that game.
CyberShadow 4 hours ago [-]
No, I think I'm seeing the same bug. Time seems to sometimes subjectively freeze:
─── Messages ───
Old man shuts the gate behind you. You hear him mutter "every time, I swear..."
You must retrieve the Amulet of Lost Semicolons.
You kill the rat! (sneak attack!)
The rat squeals and dies!
You wait. (x10) ᛜ
ᚢ You kill the rat! (sneak attack!) ᛉ
The rat squeals and dies!
You hear muttering. ᛋ
You hear muttering.
You hear muttering.
You hear a distant creak. ᛖ ᛃ
The runestone crumbles as you touch it. You learn: ᛟ means "ice"! ᛚ
You hear a distant creak.
The goblin misses you. (x3)
The goblin hits you for 4.
The goblin hits you for 3. ᛏ
The goblin hits you for 4.
The goblin hits you for 3.
The goblin misses you. ᛚ
The goblin hits you for 4.
The goblin hits you for 2.
The goblin hits you for 4.
The goblin misses you.
The goblin hits you for 2.
The goblin misses you. (x2)
The goblin hits you for 2.
The goblin kills you!
You die...
Note how there were no user action messages during the time the goblin was attacking.
marcingas 4 hours ago [-]
Definitely a bug. I'll look into this at some point. Please note that this is not a finished game by any means. If anyone asked I'd call it a tech demo at this point :)
CyberShadow 3 hours ago [-]
Seems to be that the sort function accepts a ternary predicate but then passes it to an implementation accepting a boolean one?
marcingas 2 hours ago [-]
Yeah that was it, the let-go stdlib changed.
dpkp 3 hours ago [-]
I see the same but only in browser / wasm. Also notice that the mobs dont move in browser mode. Local via lg in console works great though.
marcingas 3 hours ago [-]
I think I fixed it!
fhn 4 hours ago [-]
yeah. something is wrong. You don't even get to fight back.
devindotcom 5 hours ago [-]
that's actually a beloved feature of "true" roguelikes
pgt 4 hours ago [-]
Not a Rogue-like specialist, it's hard – I haven't made it out of level 1 yet.
gchamonlive 6 hours ago [-]
Reminds me a lot of NetHack, good times
Razengan 6 hours ago [-]
Noun of Noun
sandoze 6 hours ago [-]
No credit for the art direction and inspiration? Brogue?
Or did I miss the attribution?
* Edit: I’m not looking for the downvotes or to stir things up. I’m simply calling out that this is a small niche community we notice these things, we’re very free with our code, and copy is a compliment, but so is attribution.
The author wasn’t so much inspired the by Brogue style, but copied it directly down to the animations and ASCII.
9 minutes ago [-]
bayarearefugee 6 hours ago [-]
> No credit for the art direction and inspiration? Brogue?
In the age of LLMs the "author" might not even know where the art direction and inspiration came from!
marcingas 4 hours ago [-]
I know, this is intentional :)
I took things I like from Brogue and added my own spin on it.
marcingas 4 hours ago [-]
yeah, this is a Brogue-like. I love Brogue and have been inspired by it. XsofY is not an exact clone but I've studied Brogue C source heavily when making this.
I'll link to Brogue in the README :)
sandoze 4 hours ago [-]
Amazing and great work!
somewhatgoated 6 hours ago [-]
Calling it rogue-like is basically attribution since Brogue is just the follow-up to Rogue which invented the genre
sandoze 6 hours ago [-]
I’ll be sure to keep that in mind with my next plumber platformer
somewhatgoated 4 hours ago [-]
No one calls them plumber platformer though…
If you call it “Mario-like” then I would say most people would understand where the inspiration comes from.
deathanatos 4 hours ago [-]
While I can see perhaps a claim of "inspiration", when I put Brogue & this side-by-side, while artistically there is similarity, I wouldn't say "copied".
Brouge isn't the only rouge-like with LoS mechanics.
marcingas 4 hours ago [-]
Brogue is insanely well balanced and ingeniously designed. XsofY is a mere tribute ;)
BeetleB 6 hours ago [-]
Wouldn't the credit go to ... rogue?
sandoze 5 hours ago [-]
The genre of course. But this is almost a 1-1 copy of the Brogue style. Right down to the colors, animation, and ASCII
devindotcom 5 hours ago [-]
are you not familiar with the actual game rogue, or nethack?
Yes. I don’t think we’re having the same argument though.
bennettpompi1 6 hours ago [-]
fun project!
otikik 5 hours ago [-]
Found it a bit annoying having to press 'i' at the start in order to equip the dagger and armor that were on my backpack, but well done.
fhn 4 hours ago [-]
yep. should be equipped from the start.
marcingas 4 hours ago [-]
Agree, will patch this.
marcingas 2 hours ago [-]
fixed
butz 3 hours ago [-]
[dead]
hope2 41 minutes ago [-]
[dead]
binary0010 3 hours ago [-]
Isn't this the kind of thing you can essentially fully offload to Claude code these days? Don't really get the point of these tiny primarily llm generated game clones tbh.
marcingas 3 hours ago [-]
I see your point but I like to think it's not as sloppy as you'd expect. This one is written in a programming language I've been making since 2021 and it's not a direct Brogue clone despite its looks.
frakt0x90 3 hours ago [-]
Is this a troll comment? I don't see where the author used AI to generate the code and if you don't see the point of experimenting with technology, you're on the wrong website.
binary0010 2 hours ago [-]
You really don't see where the author uses ai? Pretty much everywhere, all the docs, the overview of the project, a LOT of the code is obviously primarily ai written, etc.
sandoze 2 hours ago [-]
So the author used the latest and greatest development tech to create a unique little demo in their custom language. I'm unsure your point. You know what I don't use to program with anymore? Punch cards and Borland C++. The industry has evolved for better or worse.
binary0010 1 hours ago [-]
What are you going on about?
No idea what you think you are arguing. Are you in the wrong thread?
I said I don't get why people keep posting essentially vibe coded game clones...
I get bored checking out GitHub projects on HN that are doing absolutely nothing new and are essentially baby projects made by Claude on a weekend, and terribly architected to boot. Cluttering the feed.
marcingas 2 hours ago [-]
FWIW it's a good fuzz test for the interpreter ;)
postalrat 50 minutes ago [-]
Consider them prototypes. Like the games submitted to game jams.
marcingas 38 minutes ago [-]
I wouldn't even dare posting this to a game jam... or HN at this point but someone posted it for me, welp.
> FATAL ERROR: [program exited] "cannot subtract nil and let-go.lang.Int", :data {:trace ("game-loop (<unknown>)" "game-loop (<unknown>)" "update-world (<unknown>)" "run-until-player-turn (<unknown>)" "creature-turn (<unknown>)" "update-ai-state (<unknown>)" "distance (<unknown>)")}}
A fatal error indeed!
What I think is interesting is that this game computes the entire world state each tick and does so efficiently thanks to persistent data structures.
To anyone who dared to fire it up: thank you for playing, I'm curious what you think!
I'm interested in building something similar, any tips besides looking at what you've done and Brogue?
> Interactive input unavailable (no cross-origin isolation).
> Deploy coi-serviceworker-js alongside this file.
in Safari on 26.4
Or did I miss the attribution?
* Edit: I’m not looking for the downvotes or to stir things up. I’m simply calling out that this is a small niche community we notice these things, we’re very free with our code, and copy is a compliment, but so is attribution.
The author wasn’t so much inspired the by Brogue style, but copied it directly down to the animations and ASCII.
In the age of LLMs the "author" might not even know where the art direction and inspiration came from!
I took things I like from Brogue and added my own spin on it.
I'll link to Brogue in the README :)
If you call it “Mario-like” then I would say most people would understand where the inspiration comes from.
Brouge isn't the only rouge-like with LoS mechanics.
Brogue looks like this: https://syltefar.com/screenshot/?id=624
1: https://sites.google.com/site/broguegame/
No idea what you think you are arguing. Are you in the wrong thread?
I said I don't get why people keep posting essentially vibe coded game clones... I get bored checking out GitHub projects on HN that are doing absolutely nothing new and are essentially baby projects made by Claude on a weekend, and terribly architected to boot. Cluttering the feed.