Xs of Y – roguelike that names itself every run. Written in 4kLoC

4 days ago (github.com)

I killed myself with a flaming spear and the game said this:

> 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!

Been having fun today trying to work this game out.

Questions:

1. How do I learn the magic/rune system? I can inscribe them on weapons & armour. Some are verbs and some are adjectives. I am yet to see obvious effects (edit: except for 'arc'), so I wonder if they always do things or often do nothing unless specific combinations are used (like subject-verb-object requirements of a sentence or certain weapon/armour+spell combo validity)?

2. What does "magic" mean when I try to inscribe more than one rune on a thing? Does this mean one rune is free but multiple require magic and are detrimental if you have none?

3. How do I interpret the weapon stats? Eg "Current: 3-5 -> 2-4"

Notes:

1. The game is much easier if I set my gamma up (xgamma -gamma 1.5). Most of the levels are very dark (10% of RGB values dark) so I easily miss items and routes to check otherwise.

2. There are a lot more keybinds than shown onscreen. 'x' to autoexplore, 'r' for a runes page I'm trying to work out. Shift+Z to autorest/heal. '>' will fasttravel you to the stairs down if you have already found them. Shift+direction will autowalk.

3. Don't press 'q'. There is no confirmatin prompt. There are no saves. Aieee :D

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!

  • I did a quick run on the web version. I was able to sneak attack everything on the first two levels, which felt like a bug, but I'm honestly not sure.

    When I found a spear, I kind of expected to be able to throw it, but I didn't find a throw option anywhere. I think that makes the short sword better in every case, but maybe I missed something.

    Overall, I love the execution. Quality retro fun with a really nice interface.

  • This is awesome!

    I'm interested in building something similar, any tips besides looking at what you've done and Brogue?

  • My 15 year old's (who is a roguelike fanatic) first comment was: there's no diagonal movement?

    "The visuals are interesting.... oh I died."

"Applied theology with inadequate safety margins" might just be my favorite difficulty description ever.

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

Not sure how you feel about including sound, but I feel like there needs to be a warning sound that plays when you're low HP, like in Pokemon. I keep dying because I don't realize I'm at low health

  • Interesting idea... maybe it could send terminal bell or tint the screen red at low health?

let's not have q=quit. most rouge games have q=quaff. I mean if people want to quit, they can just refresh or close the tab. At the very least, ask.

Pretty fun! I keep getting instantly killed by things though and I'm not sure why, possibly a bug.

  • I see you haven't played Noita!

    • I feel this comment. Seriously though, damage reflection was one of the many insanely annoying things about that game.

    • 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.

      6 replies →

Not a Rogue-like specialist, it's hard – I haven't made it out of level 1 yet.

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.

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.

  • 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.

  • 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.

    • 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.

      3 replies →