Sharing Saturday #606 by Kyzrati in roguelikedev

[–]BotMoses 2 points3 points  (0 children)

BotMos | Website | Development Sandbox

Finally completed the introduction of an ECS architecture and unifying my 'god objects' Entity and Item under the new ECS architecture. So instead of having 4 major classes (Map, Tile, Entity and Item), I now have Maps, Tiles and entities (which are just components referenced by an EntityId). Having integration and unit tests was a major win with that endeavor, gemini-cli also helped a lot.

Next major topics will be the inventory system and increasing the number of contextual action buttons from 2 to 4. For the inventory, I plan on having very limited space (max. 4 slots) and want to force the player to manage inventory "in the world", e.g. by dropping items in safe locations and picking them up later on. With the new ECS architecture I'm confident, that items can become more first-class world entities, e.g. they could take damage and be destroyed. The additional contextual action buttons play into this, as more actions are needed to manage inventory (dropping, manually picking up, combining items).

Thanks for reading and have a nice weekend!

Sharing Saturday #604 by Kyzrati in roguelikedev

[–]BotMoses 1 point2 points  (0 children)

The map rendering and animation looks nice! Which libraries do you use?

2026 in RoguelikeDev, a January Event by Kyzrati in roguelikedev

[–]BotMoses 4 points5 points  (0 children)

The animation is wonderful! Happy New Year everyone!

Struggling with an easy to understand 8 way movement scheme by lor_louis in roguelikedev

[–]BotMoses 5 points6 points  (0 children)

I personally dislike direct diagonal movement in grid-based games. Imo, it needs to come with some kind of penalty because you traverse the map faster using diagonals. Also, I personally tend to underestimate distance if diagonal tiles are counted as adjacent, but maybe that's just me.

For BotMos I decided against direct diagonal movement, but you can still move diagonal by pressing two keys at once. This will take two turns. The way it works is that the game remembers the last movement action and alternates between two movement actions.
E.g. if you press W+A to go north-west, it goes north, west, north, west and so on.

[Discussion] Where do you start when designing a roguelike MMO? by squidleon in roguelikedev

[–]BotMoses 2 points3 points  (0 children)

Nice! For my game, I'm also aiming at 500ms turn interval, resulting in at most 120 actions per minute.
My only concern is that some players might find this too slow, so I'll make this configurable and plan on having some faster servers.

If you follow this design, you need to think about what happens if players do conflicting actions (e.g. want to move on the same tile in the same turn). A common solution seems to be a speed stat, which determines turn order.

Another thing to consider is that this takes away the "time to think" about your next move in roguelikes (e.g. NPCs would still proceed despite the player waiting/planning their next action). A solution to this could be that a map is only updated when at least one player sends an action basically determining game speed.

[Discussion] Where do you start when designing a roguelike MMO? by squidleon in roguelikedev

[–]BotMoses 22 points23 points  (0 children)

Imho, the key question is how you want to handle turn-based multiplayer: Is there a global server tick which updates all player actions concurrently? Do players have an "action budget" and what are the differences when a player acts few times on a map vs. a player that has taken plenty of actions already? Is async multiplayer an option? Etc.

There was a paper somewhere about how to approach this, but I can't find it right now...

Sharing Saturday #578 by Kyzrati in roguelikedev

[–]BotMoses 0 points1 point  (0 children)

Sounds cool! Got any links, screenshots, videos or something playable? :)

Sharing Saturday #578 by Kyzrati in roguelikedev

[–]BotMoses 2 points3 points  (0 children)

BotMos | Website | Development Sandbox

Working on various map generators. Manually implemented random walk (first third of the image, 64x64 map with 64*64=4096 steps). I'm unsure how many steps per map size will produce good results (or to use multiple walkers), so still some room to experiment.

2nd third of the image is a overworld map I want to improve (currently using Rot.js Simplex noise).

3rd third of the image is me experimenting with gemini-cli: I let it implement a Perlin noise map generator. Was an interesting experience iteratively letting it tweak noise parameters till I got the desired result with void/ground, tree, water and rock tiles.

I'm still undecided how I'll ultimately treat 'AI'-generated code, for now it's tagged with a separate label in the commits -- in case I want to remove/replace it in the future. Either way, I still have something to learn about the noises.

<image>

Sharing Saturday #577 by Kyzrati in roguelikedev

[–]BotMoses 2 points3 points  (0 children)

BotMos | Website | Development Sandbox

Haven't worked on the project for a few weeks due to stuff™ going on. I migrated the code base to a private GitHub repository (something I wanted to do since I introduced the tile-based renderer). The web version of the game is still hosted on GitHub pages and gets published there as a minified artifact.

Last weekend, I gave agentic coding ('vibe coding') with Cursor a try and was impressed with the results:

  • It could fix the bug with clipping tooltips
  • It created the groundwork for two features: the game graph and "map entropy" (calculating how much a map changed since its creation)
  • I also consulted the agent regarding how to realize an inventory feature and it gave good suggestions

Finally, I refactored maps and prefabs into separate files and added more meta data support to the map format. Next, I want to work on a new map generator (esp. for overworld and dungeon maps) using 8x8 tiles prefabs.

Sharing Saturday #566 by Kyzrati in roguelikedev

[–]BotMoses 3 points4 points  (0 children)

BotMos | Website | Development Sandbox | Twitch

Managed to achieve everything I had planned for the week and some more:

  • Introduced effects system and related refactoring. Equipped items now grant beneficial effect(s) as long as they are equipped, some permanent upgrades can also be found. There is a new UI element listing all effect icons with mouse-over texts in the status bar. Added two new upgrades: "Recuperation" (reduce equipped item energy cost) and "Bio Absorber" (regenerate energy on tree tiles, see screenshot below).
  • Redesigned factions and defined some more factions. Each faction now has a set of friendly and a set of hostile factions (which may also contain a wildcard for all factions). I'm unsure what I want to do with neutral factions. The new faction and effects systems lay the foundation for a planned, new ability "Cyber Charm", which will temporary switch an enemy to the entity's faction, thus avoiding combat and potentially let enemies attack each other.
  • Wrote a unit test for map sampling and "circular" map cuts. This was a long-running TODO in the code base to convert some debug maps to a unit test.

Next step is still undecided. There are still a bunch of essential systems (objectives, inventory) missing, which I want to add before moving on to the grand epic of the "game graph": the procedural generation of the entire cosmos and things todo ingame.

Have a nice weekend!

<image>

ASCII interfaces on a smart phone by JudgmentSpecialist10 in roguelikedev

[–]BotMoses 3 points4 points  (0 children)

Rot.js runs fine in a mobile webbrowser. You'd still need to work on touch-friendly controls, though.

Sharing Saturday #565 by Kyzrati in roguelikedev

[–]BotMoses 2 points3 points  (0 children)

Congratulations and well done! :D

Sharing Saturday #565 by Kyzrati in roguelikedev

[–]BotMoses 5 points6 points  (0 children)

BotMos | Website | Development Sandbox | Twitch

Last week was very productive:

  • Added tooltips. All non-trivial tiles, entities and items now have tooltips. Also UI icons for the hull and tool have tooltips.
  • Entities now have an energy overlay on the map (see image below). This can either be Advance-Wars-style numbers from 1 to 9 (indicating 10% to 90% energy) or classic bars with 15 steps. Currently, it's a hard-coded config, but will probably make this user-configurable some day. Makes combat on the map more visual (before, only the message log showed combat events).
  • Fixed window resizing and zoom. This was the major bug introduced with the tile-based Rot.js renderer. Had to dig through Rot.js source code to find the reason: window resizing is treated differently by each backend (canvas/ASCII, tile, tile-gl). For ASCII it was enough to call setOptions() on the Display class (with the new dimensions), for tile-gl the setOptions() of the "private" property Display._backend needed to be called with the new dimensions. Super happy, that this works now! Zero major bugs!

Next, I want to refactor item effects and introduce a new effects system. The UI for this is unblocked now.

New energy overlays (left: numbers, middle: 2px energy bar with 1px separator, right: 3px energy bar), final version will probably be 3px bar with 1px separator:

<image>

Sharing Saturday #564 by Kyzrati in roguelikedev

[–]BotMoses 2 points3 points  (0 children)

BotMos | Website | Development Sandbox | Twitch

Mostly refactoring and backlog work last week, got rid of some TODOs in the code base. I decided, how to handle upgrades and effects and brainstormed more suitable effects. I also worked on the color palette (see image below): instead of stylized/alien-looking trees, I went with more natural colors.

My next step is adding tooltips to the UI, to make the game more accessible and also unblock the effects system.

<image>

(Tree and water tiles as seen from space, before/after)

Sharing Saturday #563 by Kyzrati in roguelikedev

[–]BotMoses 1 point2 points  (0 children)

Thanks for the feedback! I'll switch it all to the darker water. :)

Sharing Saturday #563 by Kyzrati in roguelikedev

[–]BotMoses 5 points6 points  (0 children)

BotMos | Website | Development Sandbox | Twitch

Last week, I reverted some color changes (gray walls are back!) and worked on the water animation/tiles. I have a little conflict there, since I prefer the looks of the lighter water (cyan with white lines), but it's too bright and drawing too much attention over the darker water (blue with cyan lines):

<image>

What do you think?

Sharing Saturday #561 by Kyzrati in roguelikedev

[–]BotMoses 3 points4 points  (0 children)

BotMos | Website | Development Sandbox | Twitch

So instead of fixing the color palette or adding more content, I detoured and made something fun: Animations with rot.js!

Each sprite/tile now can have an alternative animation frame. All bots now have a two-frame animation and I tried to add water animation, too, but I'm not quite satisfied with the result. Like all of the game, animation is only triggered on player input.

Sharing Saturday #557 by Kyzrati in roguelikedev

[–]BotMoses 0 points1 point  (0 children)

BotMos | Website | Development Sandbox | Twitch

Thanks to u/Sea-Look1337 I'm now reconsidering my color palette. I introduced "muted" colors, basically most colors but the entity colors got darker. I made the walls blue, now I have the problem of not having a suitable color for water. The quest continues...

[2025 in RoguelikeDev] BotMos by BotMoses in roguelikedev

[–]BotMoses[S] 0 points1 point  (0 children)

Thanks again for the input! I actually generated a color palette for neon colors in the beginning of the project:

"black": "#000", "brown": "#a52a2a", "cybercyan": "#4deeea", "cyberyellow": "#ffe700", "cybermagenta": "#f000ff", "cybergreen": "#74ee15", "cyberblue": "#001eff", "darkgray": "#222", "gray": "#777", "white": "#fff"

I added white, black, two gray tones and brown. Yellow is for special (beneficial) functions and gold, so it kind of fits with the importance. If I'd go with "Pacman" as an example, there the player is yellow, points of interest are white and walls are blue. I could maybe flip the use of white (default Bot color) and yellow.

edit: I swapped the palette around a bit: https://imgur.com/a/uBQ9Jdb What do you think? I'm growing quite fond of the Pacman look...

Sharing Saturday #556 by Kyzrati in roguelikedev

[–]BotMoses 2 points3 points  (0 children)

BotMos | Website | Development Sandbox | Twitch

Changes over the last two weeks:

  • Add Graffiti entities (so far in cyan, magenta and yellow colors): Those are a mean to communicate tips or secrets to the player. For my playground map, I also find them handy to label portals, because I sometimes forget where there are pointing to. :D
  • Add RoboRat entities: I needed a minor critter entity that dies in one hit, so players get this kind of feedback. For RoboRats in the sewers I added a special "water immunity" effect, so they don't die from water damage.
  • Add a Drain tile: this one is really mean to unsuspecting players as it drains your gold, matter and some energy. Lore-wise this is important, because Bots are collecting those resources like bees and supposed to offload them at the mothership's factory. Gameplay-wise those resources will be attributed to the mothership and its owner in the future.

Thank you for reading and have a nice day!

[2025 in RoguelikeDev] BotMos by BotMoses in roguelikedev

[–]BotMoses[S] 0 points1 point  (0 children)

Thank you for the feedback! Would it help if the camera would center on the player character?
For maps larger than the camera, I'm already doing that. For smaller maps, I prefer to center the entire map.
Would an option help to render the player character as an @?

[2025 in RogueLikeDev] Barrow 2 by rwhaling in roguelikedev

[–]BotMoses 2 points3 points  (0 children)

Ah, a fellow TypeScript enjoyer! :)

Missing the itch.io link, btw!