<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Roguelike on Nathaniel Inman</title><link>https://nathanielinman.com/tags/roguelike/</link><description>Recent content in Roguelike on Nathaniel Inman</description><generator>Hugo -- 0.147.7</generator><language>en-us</language><copyright>Nathaniel Inman</copyright><lastBuildDate>Sun, 12 Apr 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://nathanielinman.com/tags/roguelike/index.xml" rel="self" type="application/rss+xml"/><item><title>Building a Modern Roguelike in 2026</title><link>https://nathanielinman.com/building-a-modern-roguelike-in-2026/</link><pubDate>Sun, 12 Apr 2026 00:00:00 +0000</pubDate><guid>https://nathanielinman.com/building-a-modern-roguelike-in-2026/</guid><description>&lt;p>I have a habit of writing one of these every few years. &lt;a href="https://nathanielinman.com/building-a-modern-roguelike-in-2017/">In 2017&lt;/a> it was a 7DRL experiment merging a roguelike with an FPS, and &lt;a href="https://nathanielinman.com/building-a-modern-roguelike-in-2019/">in 2019&lt;/a> it was ascii characters embedded into a 3d map. This year&amp;rsquo;s entry is different: DET-33, the bullet-hell roguelike I built in JS and Phaser over the last few months, is feature-complete and plays great. So naturally I&amp;rsquo;m rewriting it from scratch in Godot 4 and C#.&lt;/p></description></item><item><title>Procedural Levels with Compass</title><link>https://nathanielinman.com/procedural-levels-with-compass/</link><pubDate>Sun, 21 Dec 2025 00:00:00 +0000</pubDate><guid>https://nathanielinman.com/procedural-levels-with-compass/</guid><description>&lt;p>I spent a good chunk of last year writing about &lt;a href="https://nathanielinman.com/composition-over-configuration-compass/">compass&lt;/a>, the map-generation library with all the &lt;a href="https://nathanielinman.com/carving-terrain-like-water/">fluvial generators&lt;/a> and &lt;a href="https://nathanielinman.com/caverns-automata-and-meander/">cellular caverns&lt;/a>. The whole time I was building it as a standalone library, the real motive was to eventually drop it into a game. This month I finally did, and DET-33 now generates every one of its floors through compass.&lt;/p>
&lt;h3 id="pulling-the-library-in">Pulling the library in&lt;/h3>
&lt;p>Wiring it up was almost anticlimactic, which is the point of having spent the time on the composition layer. DET-33 pulls compass in as a git dependency and the level code just imports the scanning digger and the template data:&lt;/p></description></item><item><title>Kepler452b Released</title><link>https://nathanielinman.com/kepler452b-released/</link><pubDate>Tue, 04 Aug 2020 00:00:00 +0000</pubDate><guid>https://nathanielinman.com/kepler452b-released/</guid><description>&lt;p>Kepler452b is available for Windows, Linux &amp;amp; MacOS. Enjoy a roguelike with one of 8 classes, 5 unique worlds, beautiful graphics by Oryx, music by Scott Buckley &amp;amp; Sergey Cheremisinov, 28 unique enemies, 101 supervisors to modify your gameplay, a story and much more! Whether you prefer to sneak around and backstab with the assassin, use a flamethrower as a pyrotechnic or grapple enemies to you and poison them, there&amp;rsquo;s bound to be a play style you will enjoy!&lt;/p></description></item><item><title>Kepler452b Coming 2020</title><link>https://nathanielinman.com/kepler452b-coming-2020/</link><pubDate>Tue, 03 Dec 2019 00:00:00 +0000</pubDate><guid>https://nathanielinman.com/kepler452b-coming-2020/</guid><description>&lt;h2 id="august-4th-2020-update-v100-release">August 4th, 2020 Update: v1.0.0 Release&lt;/h2>
&lt;p>Official release page is &lt;a href="https://nathanielinman.com/kepler452b-released/">here&lt;/a>.&lt;/p>
&lt;p>You can submit bugs or request features &lt;a href="https://github.com/NathanielInman/kepler452b/issues">here&lt;/a>.&lt;/p>
&lt;h3 id="downloads--links">Downloads &amp;amp; Links&lt;/h3>
&lt;p>&lt;a href="https://github.com/NathanielInman/kepler452b/releases/download/v1.0.0/kepler452b.Setup.1.0.0.exe">Windows Download&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://github.com/NathanielInman/kepler452b/releases/download/v1.0.0/kepler452b-1.0.0.dmg">Mac Download&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://github.com/NathanielInman/kepler452b/releases/download/v1.0.0/kepler452b_1.0.0_amd64.snap">Linux Snapfile Download&lt;/a>&lt;/p>
&lt;p>&lt;a href="https://github.com/NathanielInman/kepler452b/releases/download/v1.0.0/kepler452b-1.0.0.AppImage">Linux App Image Download&lt;/a>&lt;/p>
&lt;h2 id="screenshots">Screenshots&lt;/h2>
&lt;p>&lt;img alt="Landing in from the heliopad atop Forward Operating Base, this pyromancer is ready to burn some AMP and chew bubble gum, but he&amp;rsquo;s all out of bubblegum." loading="lazy" src="https://nathanielinman.com/content/images/2020/02/Screen-Shot-2020-02-11-at-2.39.27-PM.png">
&lt;img alt="The 2nd area, Avery Center of Microbiology on the ground floor looks like a desolate Mars outside. Looks like a few colonists didn&amp;rsquo;t survive based on the tombstones." loading="lazy" src="https://nathanielinman.com/content/images/2020/02/Screen-Shot-2020-02-11-at-1.58.11-PM.png">
&lt;img alt="The 3rd area: GSU Atilla seems to be overrode by AMP infiltration. Will the assassin make it through undetected?" loading="lazy" src="https://nathanielinman.com/content/images/2020/02/Screen-Shot-2020-02-11-at-2.08.42-PM.png">
&lt;img alt="The 4th area, Planck Research at the very bottom in &amp;ldquo;The Pit&amp;rdquo;. Beware the acid!" loading="lazy" src="https://nathanielinman.com/content/images/2020/02/Screen-Shot-2020-02-11-at-1.56.51-PM.png">
&lt;img alt="The 5th and final area: Haldane Terminus. Here we see the doctor running for a terminal room to quickly upgrade their skills. It&amp;rsquo;s lucky to find a terminal; otherwise the captain needs to upgrade between games at the main menu." loading="lazy" src="https://nathanielinman.com/content/images/2020/02/Screen-Shot-2020-02-11-at-2.01.33-PM.png">
&lt;img alt="The bonus area: The Ruined Byond. Only one of the endings even allows getting to this point. No spoilers here! Needless to say, this area is significantly difficult!" loading="lazy" src="https://nathanielinman.com/content/images/2020/02/Screen-Shot-2020-02-11-at-2.06.33-PM.png">&lt;/p></description></item><item><title>Building a Modern Roguelike in 2019</title><link>https://nathanielinman.com/building-a-modern-roguelike-in-2019/</link><pubDate>Wed, 13 Nov 2019 00:00:00 +0000</pubDate><guid>https://nathanielinman.com/building-a-modern-roguelike-in-2019/</guid><description>&lt;p>At numerous times I&amp;rsquo;ve created demos trying to figure out how to merge a traditional roguelike into a FPS without sacrificing it&amp;rsquo;s roots. &lt;a href="https://nathanielinman.com/building-a-modern-roguelike-in-2017/">Here&amp;rsquo;s an article I made in 2017.&lt;/a> Unlike many others I don&amp;rsquo;t feel like just random maps makes a roguelike, &lt;a href="https://nathanielinman.com/no-fps-is-a-roguelike/">I&amp;rsquo;ve even gone so far as saying no FPS is a roguelike.&lt;/a> In this experiment I&amp;rsquo;ve tried to merge those ascii characters into the map itself and dropped the textures. The code can be executed and ran or viewed in its entirety on Github &lt;a href="https://github.com/NathanielInman/experiments/tree/master/3d/generic-map-2">here.&lt;/a>&lt;/p></description></item><item><title>Meander Algorithm</title><link>https://nathanielinman.com/meander-algorithm/</link><pubDate>Tue, 04 Sep 2018 00:00:00 +0000</pubDate><guid>https://nathanielinman.com/meander-algorithm/</guid><description>&lt;p>The meander algorithm is a combination of using mazes to allow a meandering with bresenhams line. Below you can see the actual algorithm in simplicity. Obviously you could use noise maps to created heighted terrain based on the river to make it look pretty.&lt;/p>
&lt;p>&lt;img alt="Screen-Shot-2018-09-04-at-11.56.46-AM" loading="lazy" src="https://nathanielinman.com/content/images/2019/01/Screen-Shot-2018-09-04-at-11.56.46-AM.png">&lt;/p>
&lt;ol>
&lt;li>Choose a starting map edge and ending map edge, acquire
the terminal points based on those edges. Usually this would be a random point on those edges. Maybe you&amp;rsquo;d want to weight it so it&amp;rsquo;s predominately in the center, or you could restrict it to a certain part.&lt;/li>
&lt;li>Create Bresenhams line between the terminal points. This is called the pathing vector.&lt;/li>
&lt;li>Break up the pathing vector into chunks of 9x9 where the pathing vector crosses the center. There may be left-over of the pathing vector.&lt;/li>
&lt;li>For each chunk, perform a recursive maze generation algorithm on the chunk. Repeat this step until there is a path from the start of the pathing vector within the chunk to the end of the pathing vector in the chunk. A* pathing algorithm can be used for the pathing.&lt;/li>
&lt;li>Merely use Bresenhams line to wrap up the extraneous pathing vector not covered by chunks, alternatively break up the remaining path into the largest odd number and chunk and process it similarly to the previous part of the algorithm to make it more consistent. Left overs in this optional way would still be filled in with bresenhams line.&lt;/li>
&lt;/ol>
&lt;p>Recursive Maze Generation:&lt;/p></description></item><item><title>Generating Exhumed River Channel</title><link>https://nathanielinman.com/generating-exhumed-river-channel/</link><pubDate>Mon, 06 Aug 2018 00:00:00 +0000</pubDate><guid>https://nathanielinman.com/generating-exhumed-river-channel/</guid><description>&lt;p>I recently did some work in generating rivers in a 2d game. Revisiting this work to create an exhumed river channel, I decided it might be fun to revisit how to generate it to make the channel look more realistic. Instead of using a drunken walker, this is a more expensive but interesting map generator:&lt;/p>
&lt;ul>
&lt;li>Start by generating 2d simplex noise where&lt;/li>
&lt;li>less &amp;lt;0.6 is floor&lt;/li>
&lt;li>rest is walls&lt;/li>
&lt;li>Generate terminal lines at each map exit (north, south, east, west). Shuffle those lines and randomly choose a start and end location for the river based on two of those lines.&lt;/li>
&lt;/ul>
&lt;p>Later you can add another line with terminal point to allow a split river channel&lt;/p></description></item><item><title>Generating Cliffs for 2d Game</title><link>https://nathanielinman.com/generating-cliffs-for-2d-game/</link><pubDate>Tue, 31 Jul 2018 00:00:00 +0000</pubDate><guid>https://nathanielinman.com/generating-cliffs-for-2d-game/</guid><description>&lt;p>Source code available on github &lt;a href="https://github.com/NathanielInman/experiments/tree/master/mapGeneration/cliff">here&lt;/a>.\n\nA recurring problem in 2d games is how to represent depth. In isometric games this is easily solved but in discretely top-down games it&amp;rsquo;s harder to solve. After doing a lot of research I fell onto a simple idea: do the best you can insinuating the depth and leave the rest to the imagination. Here&amp;rsquo;s the algorithm I used to create 2d top-down cliffs:&lt;/p>
&lt;ul>
&lt;li>Create a small map of perlin noise and a wide map of perlin noise. Add the two together and give the large map a weight of 3 with the small a weight of 1 and render the result with different breakpoints. This is ref map A.&lt;/li>
&lt;/ul>
&lt;p>Less than 0.01 on A is deep water&lt;/p></description></item><item><title>Generating 2d Rivers</title><link>https://nathanielinman.com/generating-2d-rivers/</link><pubDate>Wed, 11 Jul 2018 00:00:00 +0000</pubDate><guid>https://nathanielinman.com/generating-2d-rivers/</guid><description>&lt;p>Rivers are really hard to generate for 2d top-down games for multiple reasons:&lt;/p>
&lt;ul>
&lt;li>Rivers primarily form based on heightmaps which are hard to display in top-down&lt;/li>
&lt;li>Displaying fluidity when working with sectors or grid-based rendering can be complicated, bresenham&amp;rsquo;s line algorithm only goes so far to make things look smooth&lt;/li>
&lt;li>naturally occurring mechanisms of nature have numerous factors in play that caused them to exist. Simulating all of these factors isn&amp;rsquo;t reasonable.&lt;/li>
&lt;/ul>
&lt;p>I was able to make relatively decent 2d rivers using a few techniques.&lt;/p></description></item><item><title>Balancing Game Mechanics</title><link>https://nathanielinman.com/balancing-game-mechanics/</link><pubDate>Wed, 06 Jun 2018 00:00:00 +0000</pubDate><guid>https://nathanielinman.com/balancing-game-mechanics/</guid><description>&lt;p>Two of the most influential components to decreasing LOE in balancing game mechanics is &lt;strong>automating&lt;/strong> the most essential parts of testing those mechanics, and providing meaningful and easy to understand &lt;strong>graphs&lt;/strong>. Some meaningful questions to better lay the foundation of balancing and creating these components:&lt;/p>
&lt;ul>
&lt;li>What are the actual &amp;lsquo;core stat(s)&amp;rsquo; that identify survival? (Usually health)&lt;/li>
&lt;li>What are the &amp;lsquo;ancillary stat(s)&amp;rsquo; that help facilitate the increase or decrease that core? (damage, strength, dexterity, etc.) I&amp;rsquo;m assuming all actors here are equal and we aren&amp;rsquo;t comparing apples and oranges.&lt;/li>
&lt;li>What are the &amp;lsquo;supplemental stat(s)&amp;rsquo; that may contribute to the increase or decrease of the ancillary stats? (class, rank, level)&lt;/li>
&lt;li>What are the &amp;rsquo;extraneous stat(s)&amp;rsquo; that don&amp;rsquo;t affect the other stats already identified.&lt;/li>
&lt;/ul>
&lt;blockquote>
&lt;p>I found that creating a tree by drawing lines connecting these identified stats provided incredible insight and direction.&lt;/p></description></item><item><title>Pigeon Hole Stepping v2</title><link>https://nathanielinman.com/pigeon-hole-stepping-v2/</link><pubDate>Tue, 08 May 2018 00:00:00 +0000</pubDate><guid>https://nathanielinman.com/pigeon-hole-stepping-v2/</guid><description>&lt;p>I had originally written an article on how to implement PHS. Having found the maps generated slightly redundant I decided to take another look. Here are the steps taken to successfully generate a more realistic &lt;code>town.&lt;/code> It&amp;rsquo;s essentially a drunken walker like &lt;a href="https://en.wikipedia.org/wiki/Diffusion-limited_aggregation">Diffusion Limited Aggregation&lt;/a> mixed with a hallway constraint that mimics the large part of PHS.&lt;/p>
&lt;ol>
&lt;li>Start somewhere in the middle, add this and all possible directions up to a certain dynamic length (I used a standard deviation of 1.4 with a mean of 5, ) as nodes: &lt;code>[{x,y,direction},...]&lt;/code>.&lt;/li>
&lt;li>We will be looping until all &lt;strong>nodes&lt;/strong> and &lt;strong>edges&lt;/strong> (we&amp;rsquo;ll describe that shortly,) are gone.&lt;/li>
&lt;li>When we have node then check to see if the path between it&amp;rsquo;s &amp;lsquo;x,y&amp;rsquo; and &amp;lsquo;x2,y2&amp;rsquo; (given the length and direction) is clear. If it is, then add the entire path minus the start and end as &lt;strong>edges&lt;/strong>, and add the end as a new node. Shuffle nodes after adding a new one. After building the path run through the path array randomly attempting to build a room in all directions. (this won&amp;rsquo;t be entirely possible and will leave negative space to fill with edges.)&lt;/li>
&lt;li>If there are no nodes, repeat step 3 except with edges (this helps fill the map negative space.)&lt;/li>
&lt;li>After all nodes and edges are gone then cover all cells adjacent to floors with walls if it&amp;rsquo;s empty.&lt;/li>
&lt;/ol>
&lt;p>I found it helpful to use this simple formula to generate hallway lengths with a mean and standard deviation constraint. Both the x and y would work fine, here we&amp;rsquo;re using the y only.&lt;/p></description></item><item><title>Textures make a difference</title><link>https://nathanielinman.com/textures-make-a-difference/</link><pubDate>Wed, 22 Mar 2017 00:00:00 +0000</pubDate><guid>https://nathanielinman.com/textures-make-a-difference/</guid><description>&lt;p>I&amp;rsquo;ve been playing around with textures in exploring the bleak to see how much of a difference it would make. Essentially I&amp;rsquo;m torn between two ideas:&lt;/p>
&lt;ol>
&lt;li>Make the floors all a plain color and glow them based on the environment color so as not to be too realistic and keep a more roguelike feel.&lt;/li>
&lt;li>Struggle with having textures that blend together between sectors so it has a more natural feel albeit simple in perspective to traditional 3d games.&lt;/li>
&lt;/ol>
&lt;p>At the moment I&amp;rsquo;m leaning towards number two, but I haven&amp;rsquo;t been able to reproduce a reliable glow postprocessing effect that I actually like and that feels natural. I&amp;rsquo;ll follow down both roads further before making a discrete decision.&lt;/p></description></item><item><title>No FPS is a Roguelike</title><link>https://nathanielinman.com/no-fps-is-a-roguelike/</link><pubDate>Fri, 10 Mar 2017 00:00:00 +0000</pubDate><guid>https://nathanielinman.com/no-fps-is-a-roguelike/</guid><description>&lt;p>I&amp;rsquo;ve struggled with the concept of merging the roguelike turn-based system with a FPS. Having a turn based on when you fully leave a cell makes the monsters seem &lt;strong>jumpy&lt;/strong> which doesn&amp;rsquo;t make for very nice gameplay. Because I believe turn-based systems are core to roguelikes and first person shooters can&amp;rsquo;t be turned based in a cohesive way, I&amp;rsquo;ve dropped the FPS perspective altogether and pulled the camera above the player.&lt;/p></description></item><item><title>Building A Modern Roguelike in 2017</title><link>https://nathanielinman.com/building-a-modern-roguelike-in-2017/</link><pubDate>Wed, 08 Mar 2017 00:00:00 +0000</pubDate><guid>https://nathanielinman.com/building-a-modern-roguelike-in-2017/</guid><description>&lt;p>Building games has become easier to do with the increase in quality of tooling and specialization software. The unfortunate side effect is the developer has to become more trained and specialized in a variety of facets in order to maintain competency in the field. Ergo building games is also harder.&lt;/p>
&lt;p>This year for the 7DRL competition I&amp;rsquo;ve been pretty lazy, which doesn&amp;rsquo;t help much to making deadlines. Setting aside &lt;em>playing&lt;/em> games for &lt;em>making&lt;/em> games I decided to finally venture into the competition whole heartedly.&lt;/p></description></item><item><title>Pigeon Hole Stepping</title><link>https://nathanielinman.com/pigeon-hole-stepping/</link><pubDate>Tue, 08 Mar 2016 00:00:00 +0000</pubDate><guid>https://nathanielinman.com/pigeon-hole-stepping/</guid><description>&lt;p>For &lt;a href="http://7drl.org/about/">7DRL&lt;/a> this year I developed a new map generation algorithm called &lt;strong>Pigeon Hole Stepping&lt;/strong>.&lt;/p>
&lt;h2 id="fill-the-map-with-walls">Fill the map with walls&lt;/h2>
&lt;p>This map generation algorithm relies on negative building techniques. This concept will make more sense as the later steps are explained.&lt;/p>
&lt;h3 id="dig-hallways">Dig Hallways&lt;/h3>
&lt;p>Essentially, we can assume that hallways that are parallel to each other are at least the length of a single room and up to two rooms apart in distance. Because of this assumption, we can make a random walker that will move around with this restriction in mind until map is filled completely.&lt;/p></description></item><item><title>Automata Generated Caverns</title><link>https://nathanielinman.com/automata-generated-caverns/</link><pubDate>Fri, 13 Nov 2015 00:00:00 +0000</pubDate><guid>https://nathanielinman.com/automata-generated-caverns/</guid><description>&lt;p>Randomly generated dungeons are a lot of fun to program, but sometimes they can be pretty difficult to originally wrap your head around. For this years 7DRL I added Automata Generated Caverns as one of the algorithms I wanted to figure out completely. You can read more specifically on the theory &lt;a href="https://www.wikiwand.com/en/Automata_theory">here&lt;/a>.&lt;/p></description></item></channel></rss>