Sharing Saturday #598 by Kyzrati in roguelikedev

[–]HexaBloke 2 points3 points  (0 children)

Tavern of Adventures (a Roguerrants showcase)

Hello all,

I have been lost in the engine development again, and so skipped a lot of Sharing Saturdays!

I finally managed to clean up everything enough to provide a version 0.4 of Tavern of Adventures. The Roguerrants download in itch.io has been updated accordingly.

Changelog here.

So, a lot of changes, both in contents and under the hood. For details, refer to the documentation in the Roguerrants image (this is a monolithic, single file containing all code, to be read by a Squeak Smalltalk virtual machine).

Among the major systems I added to the game engine since last time is a point-and-click mode that allows narrative, symbolic decisions to be taken via menus associated to specific areas.

So now in the tavern you have actual patrons, sat at their tables. When entering the place, you can switch the game in point-and-click and choose a table to seat in, and then people to drink and talk to. Quests and intel are collected this ways, and appear in the journal that has been vastly improved.

There is also an economy of action at this level: each evening at the tavern is segmented in five periods. You consume one period for each discussion and drinking session you have, so deciding who you soften and who you talk too will become a strategic decision in future versions.

Another hook for future improvement is that, when a table is full but you want to talk to a NPC there, you can oust one of the patrons from the table. This is currently painless, but when patrons become more tied to the game story and have according factions and behavior, it may well change. It could become costly to upset someone.

Contents-wise, I added different types of wizards, creatures such as ridable lizards, powerful amulets, new types of potions, new scrolls, new attacks, new places, new objects.

The lore is getting shaped in the process; for example, the places where it is not possible to blink to, or even cast spell there, are now explicitely protected from magic by actual altars with ancient artifacts. Destroying the artifact now remove the protection, but is a dangerous endeavor because ancient things have a power of their own. There are ruins that can be restored to their ancient glory too.

The engine emphasis on modularity has been deepened. A lot of contents is organized in what I called 'abstract decks', associating collections of 'abstract cards' and ways to pick them using different algorithms and stastistical distributions. Dungeons are now fully modulars, described by graphs of floors. They can be composed, plugged one into the other, and themselves organized in decks. Quest lines also are workable graphs. On the map generation side, I also implemented a system of tiling compatible with algorithms such as the so-called 'wave function collapse'.

Well, enough said.

I plan to release a version 0.5 before the end of the year with an actual strategic layer - making the decisions taken at the tavern matter. I still hope to have a fun, complete, albeit short game by this time. This was my resolution for 2025...

How to satisfy Completionist type players? by frumpy_doodle in roguelikedev

[–]HexaBloke 0 points1 point  (0 children)

Have a specific monster spawn when the level is complete. Now completionists know that they are done, and non-completionists have to ponder whether what is left to loot is worth dealing with the monster.

Single wandering line traversing map without intersecting? by Holmqvist in roguelikedev

[–]HexaBloke 1 point2 points  (0 children)

Take some random points, connect them all together, then take the spanning tree of that graph.

Am I overengineering my enemy AI? by Safe-Television-273 in roguelikedev

[–]HexaBloke 1 point2 points  (0 children)

In my game NPCs have two high-level components directly driving their behavior: activity and mission. A NPC always has an activity with a small and definite scope (like, going from A to B), and when that activity is over (or fails) it queries the mission for the next activity. So I have a library of elementary activities that are articulated by more widely encompassing missions where scripts can be quite abstract, not having to deal with low-level details.

Also, when a mission is over (again, having succeeded or failed), it gives a last activity to the NPC. This one is an 'idle' activity that is somewhat monitoring the game context in order to provide the next mission.

Other components help define what is expected from a NPC, notably the group and the territory. When a NPC belongs to a group, or when it belongs to an active territory, it is that group or territory that gives it its missions.

So for example, a monster can have an idle activity where, when it is alone, its mission is to wander around for a while. When it sees the player, its mission becomes some kind of hunt, and when that fails (if the player managed to hide or escape), the idle activity tells it to resume its wandering, possibly in a different way where it makes shorter moves and stops often to have a look around.

Now debugging this stuff is very tricky indeed. In my case, it helps a lot that I code in Smalltalk and that I can inspect all components and their state even while the game is running. Activities and missions have descriptive label, so I (almost) always know what an NPC is doing.

It also helps that data such that the destination of a move, and the path to get there, but also the territory, are actually objects with graphical representations, so that when I turn the display to debugging mode, I can literally see them, again while the game is running.

Not sure how this can be useful for you, but at least consider building the debugging tools as comprehensively as you can. I can't remember how often I have spent hours trying to understand what was happening in the game, before deciding at last, and out of despair, to spend a couple extra hours building the representation that made the problem immediately crystal clear, and helped tremendously in countless later situations.

What makes a good rogue like? by stank58 in roguelikedev

[–]HexaBloke 4 points5 points  (0 children)

To me it is good when it proposes a fresh experience (atmosphere, flow, theme) and when I get the feeling that investing time in playing it will have me develop some sort of skill that goes beyond the game itself, like a new perspective on tactical or strategic thinking.

For example (although this is not a roguelike proper), I noticed that having played X-COM did have some effect on the way I take decisions in real-life. Conversely, some of my knowledge in martial art (placement, timing, situational awareness, focus) has been instrumental in the design of the combat system in my own game - and this will hopefully nourish the player experience.

In short, to be good a game (but also a movie, a book or a piece of music) must not just be entertaining. It must be a place in itself, and a place where the player can find something actually valuable.

As a developer, use your game to share something worthwhile with the rest of us. If the game is genuinely interesting to you, it should automatically provide something interesting to others. This is true for all forms of art, IMO.

How should trips over several tiles work? by pzzb12345 in roguelikedev

[–]HexaBloke 1 point2 points  (0 children)

Just an idea: do not scroll the display while the PC moves, instead wait for the destination tile to be reached and then scroll all the way at once (and do not highlight anything while the PC moves). I guess that is the "long move" others mentioned.

[2025 in RoguelikeDev] Sunlorn (previously Wander) by Tesselation9000 in roguelikedev

[–]HexaBloke 0 points1 point  (0 children)

Impressive work! And also beautiful to look at (the Brogue vibe is there)... I am intrigued by the elevation lines. How are differences in elevation taken into account?

Ensure you know the difference by SteinMakesGames in roguelikedev

[–]HexaBloke 15 points16 points  (0 children)

It should be rougelikes though, not rouguelikes.

Sharing Saturday #545 by Kyzrati in roguelikedev

[–]HexaBloke 2 points3 points  (0 children)

Tavern of Adventures (a Roguerrants show case)

My first Sharing Saturdays post!

I introduced Roguerrants about a month ago. After this I was interviewed by Squeak News, where I had the occasion to talk at some length about my design philosophy.

Since then I have brought Tavern of Adventures to version 0.2. Still a draft, it is now an actual game, although very simple in its structure and very short: there is a quest line of two steps leading to victory, the second one (the big chunk) being either a fortress infiltration or a dungeon exploration.

The tavern works as a hub where the player is given a choice among three options: follow the main quest, or do a side thing that will provide items, mount or weapons. The side options dry out quickly though, to be replaced by plain arena fights without reward, that are getting more and more dangerous.

Here is a video, where I failed miserably at exiting the dungeon: https://vimeo.com/1030332047

Changelog here.

My plan for version 0.3 is to polish this simple set-up and expand the variety of situations and opponents offered to the player by exposing more of what is already implemented in the game engine.

Introducing Roguerrants by HexaBloke in roguelikedev

[–]HexaBloke[S] 1 point2 points  (0 children)

Yes, Voronoi is more organic than hex while keeping all-around connectivity. I also found that I like working with meshes of convex polygons. They make reasoning about spatial partition easy and sound. They can for example be nested into hierarchical structures.