<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="/feed.xsl" type="text/xsl"?>
<feed xmlns="http://www.w3.org/2005/Atom">
<title>lzzrhx</title>
<link href="https://lzzrhx.codeberg.page/feed.xml" rel="self" type="application/atom+xml"/>
<link href="https://lzzrhx.codeberg.page/" rel="alternate" type="text/html"/>
<updated>2026-07-10T03:00:17+02:00</updated>
<id>https://lzzrhx.codeberg.page/feed.xml</id>
<author><name>lzzrhx@tuta.com</name><email>lzzrhx@tuta.com</email></author>
<icon>https://lzzrhx.codeberg.page/favicon.png</icon>
<entry>
<title>C# roguelike, devlog 11: Additional map generation algorithms</title>
<link href="https://lzzrhx.codeberg.page/2025/03/21/devlog11.html"/>
<updated>2025-03-21T00:00:00+01:00</updated>
<id>https://lzzrhx.codeberg.page/2025/03/21/devlog11.html</id>
<content type="html">

&lt;p&gt;In addition to the previously implemented noise, there are several algorithms that are quite useful to have at hand when working with procedural generation. A number of these, and some sample use cases are described in the fantastic Roguelike Celebration 2020 presentation &lt;a href=&quot;https://youtu.be/TlLIOgWYVpI&quot; target=&quot;_blank&quot;&gt;Procedural Map Generation Techniques&lt;/a&gt; by Herbert Wolverson.
Some of these algorithms, like BSP, Perlin noise and Dijkstra maps are already implemented in the project. In this post I’ll focus on adding algorithms for Cellular automata, Diffusion-limited aggregation (DLA), Drunkard’s Walk and 2D Voronoi diagrams.&lt;/p&gt;
</content>
</entry><entry>
<title>C# roguelike, devlog 10: Improved Perlin noise</title>
<link href="https://lzzrhx.codeberg.page/2025/03/20/devlog10.html"/>
<updated>2025-03-20T00:00:00+01:00</updated>
<id>https://lzzrhx.codeberg.page/2025/03/20/devlog10.html</id>
<content type="html">

&lt;p&gt;A more or less essential component needed for procedural generation is a good noise algorithm. In order to start working on terrain generation I’ll first add this to the project. I’ve opted for the Improved Perlin Noise algorithm. But another good alternative that is ready and available for C# is &lt;a href=&quot;https://github.com/KdotJPG/OpenSimplex2.git&quot; target=&quot;_blank&quot;&gt;OpenSimplex2&lt;/a&gt;&lt;/p&gt;
</content>
</entry><entry>
<title>C# roguelike, devlog 9: Pseudorandom number generation (LFSR)</title>
<link href="https://lzzrhx.codeberg.page/2025/03/19/devlog9.html"/>
<updated>2025-03-19T00:00:00+01:00</updated>
<id>https://lzzrhx.codeberg.page/2025/03/19/devlog9.html</id>
<content type="html">

&lt;p&gt;So far I’ve used the built-in &lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/api/system.random&quot; target=&quot;_blank&quot;&gt;Random&lt;/a&gt; class for generation of random numbers and booleans. However, at this stage in the project, before moving on to procedural landscape generation, it might be a good time to write a random number generator. This will allow for finer control of the procedural process, from start to finish, and the use of custom seeds will ensure deterministic results in the generation of terrain. Additionally the creation of a simple number generator could prove an interesting and fun excercise.&lt;/p&gt;
</content>
</entry><entry>
<title>C# roguelike, devlog 8: Mesh generation and cube to sphere projection</title>
<link href="https://lzzrhx.codeberg.page/2024/06/10/roguelike-devlog8.html"/>
<updated>2024-06-10T00:00:00+02:00</updated>
<id>https://lzzrhx.codeberg.page/2024/06/10/roguelike-devlog8.html</id>
<content type="html">
&lt;p&gt;&lt;img src=&quot;https://lzzrhx.codeberg.page/img/devlog8_01.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Moving forward I would like to try to procedurally generate planets.&lt;/p&gt;

&lt;p&gt;I am going for the approach of generating a cube and projecting the cube as a sphere.&lt;/p&gt;
</content>
</entry><entry>
<title>C# roguelike, devlog 7: Raylib and ImGui</title>
<link href="https://lzzrhx.codeberg.page/2024/06/09/roguelike-devlog7.html"/>
<updated>2024-06-09T00:00:00+02:00</updated>
<id>https://lzzrhx.codeberg.page/2024/06/09/roguelike-devlog7.html</id>
<content type="html">
&lt;p&gt;&lt;img src=&quot;https://lzzrhx.codeberg.page/img/devlog7.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;It’s time to bring the project into the third dimension by using the &lt;a href=&quot;https://www.raylib.com/&quot; target=&quot;_blank&quot;&gt;raylib&lt;/a&gt; library.&lt;/p&gt;

&lt;p&gt;Raylib is written in C, but has bindings for a whole bunch of programming languages. The bindings for C# is &lt;a href=&quot;https://github.com/ChrisDill/Raylib-cs&quot; target=&quot;_blank&quot;&gt;Raylib-cs&lt;/a&gt;. For documentation on how to use the library we can check the &lt;a href=&quot;https://github.com/ChrisDill/Raylib-cs/tree/master/Examples&quot; target=&quot;_blank&quot;&gt;C# usage examples&lt;/a&gt;, the &lt;a href=&quot;https://www.raylib.com/cheatsheet/cheatsheet.html&quot; target=&quot;_blank&quot;&gt;Raylib Cheatsheet&lt;/a&gt; and the &lt;a href=&quot;https://www.raylib.com/cheatsheet/raymath_cheatsheet.html&quot; target=&quot;_blank&quot;&gt;Raymath Cheatsheet&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In addition to raylib I’ll add &lt;a href=&quot;https://github.com/ocornut/imgui&quot; target=&quot;_blank&quot;&gt;Dear ImGui&lt;/a&gt; and use it first and foremost for debugging but perhaps also to build some tools later on.
&lt;a href=&quot;https://github.com/ImGuiNET/ImGui.NET&quot; target=&quot;_blank&quot;&gt;ImGui.NET&lt;/a&gt; is the C# wrapper for ImGui and to get ImGui to use raylib for rendering I’ll also add the &lt;a href=&quot;https://github.com/raylib-extras/rlImGui-cs&quot; target=&quot;_blank&quot;&gt;rlImGui-cs&lt;/a&gt; library.&lt;/p&gt;
</content>
</entry><entry>
<title>C# roguelike, devlog 6: Shadowcasting</title>
<link href="https://lzzrhx.codeberg.page/2024/06/08/roguelike-devlog6.html"/>
<updated>2024-06-08T00:00:00+02:00</updated>
<id>https://lzzrhx.codeberg.page/2024/06/08/roguelike-devlog6.html</id>
<content type="html">
&lt;p&gt;&lt;img src=&quot;https://lzzrhx.codeberg.page/img/devlog6.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Next up is adding a field-of-view algorithm. Here I thought I would try to implement the &lt;a href=&quot;https://www.albertford.com/shadowcasting/&quot; target=&quot;_blank&quot;&gt;Symmetric Shadowcasting&lt;/a&gt; algorithm by Albert Ford. He explains Symmetric Shadowcasting very well in the video presentation &lt;a href=&quot;https://youtu.be/y1zkrTcNJbc&quot; target=&quot;_blank&quot;&gt;Vision Visualized&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Another approach to shadowcasting can be found in the blog post &lt;a href=&quot;https://journal.stuffwithstuff.com/2015/09/07/what-the-hero-sees/&quot; target=&quot;_blank&quot;&gt;What the Hero Sees: Field-of-View for Roguelikes&lt;/a&gt; by &lt;a href=&quot;https://x.com/munificentbob&quot; target=&quot;_blank&quot;&gt;Bob Nystrom&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For further reading on field-of-view algorithms check out the post (as referenced by Albert Ford) &lt;a href=&quot;http://www.adammil.net/blog/v125_Roguelike_Vision_Algorithms.html&quot; target=&quot;_blank&quot;&gt;Roguelike Vision Algorithms&lt;/a&gt; by Adam Milazzo.&lt;/p&gt;
</content>
</entry><entry>
<title>C# roguelike, devlog 5: Dijkstra maps</title>
<link href="https://lzzrhx.codeberg.page/2024/06/07/roguelike-devlog5.html"/>
<updated>2024-06-07T00:00:00+02:00</updated>
<id>https://lzzrhx.codeberg.page/2024/06/07/roguelike-devlog5.html</id>
<content type="html">
&lt;p&gt;&lt;img src=&quot;https://lzzrhx.codeberg.page/img/devlog5.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I thought I’d expand on the existing pathfinding algorithms in the &lt;em&gt;PathGraph&lt;/em&gt; class by implementing a function that returns what Brian Walker calls a Dijkstra Map.&lt;/p&gt;

&lt;p&gt;In the Roguebasin article &lt;a href=&quot;https://www.roguebasin.com/index.php/The_Incredible_Power_of_Dijkstra_Maps&quot; target=&quot;_blank&quot;&gt;The Incredible Power of Dijkstra Maps&lt;/a&gt; he explains a number of use cases for such a map, and example visualizations can be seen in the other article &lt;a href=&quot;https://www.roguebasin.com/index.php/Dijkstra_Maps_Visualized&quot; target=&quot;_blank&quot;&gt;Dijkstra Maps Visualized&lt;/a&gt; by Derrick S Creamer.&lt;/p&gt;
</content>
</entry><entry>
<title>C# roguelike, devlog 4: Corridors</title>
<link href="https://lzzrhx.codeberg.page/2024/06/06/roguelike-devlog4.html"/>
<updated>2024-06-06T00:00:00+02:00</updated>
<id>https://lzzrhx.codeberg.page/2024/06/06/roguelike-devlog4.html</id>
<content type="html">
&lt;p&gt;&lt;img src=&quot;https://lzzrhx.codeberg.page/img/devlog4.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Now that some pathfinding algorithms are in place it’s time to move on to the next step, making corridors between the rooms.&lt;/p&gt;
</content>
</entry><entry>
<title>C# roguelike, devlog 3: Pathfinding algorithms (Breadth-first search and A*)</title>
<link href="https://lzzrhx.codeberg.page/2024/06/05/roguelike-devlog3.html"/>
<updated>2024-06-05T00:00:00+02:00</updated>
<id>https://lzzrhx.codeberg.page/2024/06/05/roguelike-devlog3.html</id>
<content type="html">
&lt;p&gt;&lt;img src=&quot;https://lzzrhx.codeberg.page/img/devlog3.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;Pathfinding is a crucial component in almost any video game, and will be used in the next step of the dungeon generation to check if two given rooms are already connected when making corridors.&lt;/p&gt;

&lt;p&gt;There are two types of pathfinding I will implement at this stage, the first one is &lt;em&gt;breadth-first search (BFS)&lt;/em&gt;, and the second is &lt;em&gt;A*&lt;/em&gt;.&lt;/p&gt;
</content>
</entry><entry>
<title>C# roguelike, devlog 2: Binary space partitioning trees</title>
<link href="https://lzzrhx.codeberg.page/2024/06/04/roguelike-devlog2.html"/>
<updated>2024-06-04T00:00:00+02:00</updated>
<id>https://lzzrhx.codeberg.page/2024/06/04/roguelike-devlog2.html</id>
<content type="html">
&lt;p&gt;&lt;img src=&quot;https://lzzrhx.codeberg.page/img/devlog2.jpg&quot; /&gt;&lt;/p&gt;
&lt;p&gt;I thought I’d start the project with creating a simple fixed size map and rendering it in the console.&lt;/p&gt;

&lt;p&gt;The map generation technique I thought I’d try implementing involves using binary space partitioning to place rooms in a given space.&lt;/p&gt;

&lt;p&gt;The technique is explained in the video presentation &lt;a href=&quot;https://youtu.be/TlLIOgWYVpI?t=298&quot; target=&quot;_blank&quot;&gt;Procedural Map Generation Techniques&lt;/a&gt; by &lt;a href=&quot;https://x.com/herberticus&quot; target=&quot;_blank&quot;&gt;Herbert Wolverson&lt;/a&gt;. And in the roguebasin article &lt;a href=&quot;https://roguebasin.com/index.php/Basic_BSP_Dungeon_generation&quot; target=&quot;_blank&quot;&gt;Basic BSP Dungeon generation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;How a binary tree should function is quite well explained by Richard Fleming Jr in the videos &lt;a href=&quot;https://youtu.be/S5y3ES4Rvkk&quot; target=&quot;_blank&quot;&gt;Binary Trees&lt;/a&gt; and &lt;a href=&quot;https://youtu.be/Tb01dxMrIdc&quot; target=&quot;_blank&quot;&gt;Tree Logic&lt;/a&gt;.&lt;/p&gt;
</content>
</entry><entry>
<title>C# roguelike, devlog 1: About roguelikes</title>
<link href="https://lzzrhx.codeberg.page/2024/06/03/roguelike-devlog1.html"/>
<updated>2024-06-03T00:00:00+02:00</updated>
<id>https://lzzrhx.codeberg.page/2024/06/03/roguelike-devlog1.html</id>
<content type="html">
&lt;p&gt;&lt;img src=&quot;https://lzzrhx.codeberg.page/img/devlog1_01.jpg&quot; /&gt;&lt;/p&gt;
&lt;blockquote&gt;
  &lt;p&gt;Rogue’s storyline was very light: the point of the game was to go down all levels of a dungeon, in a world based on Dungeons &amp;amp; Dragons, starting from the top, killing monsters and plundering treasures, until finding the Amulet of Yendor. Then, the player had to climb every level up.&lt;/p&gt;

  &lt;p&gt;…&lt;/p&gt;

  &lt;p&gt;Contrary to many other computer RPGs of the time, all levels were randomly generated. Rogue was intended to be played on Unix terminals. Thus, the dungeon was displayed in text mode, characters and monsters being represented by letters. Actions were issued by single keystrokes. Rogue defined the very Roguelike genre. Random generation, basic plot, text (or tiled) based display still are the usual features of Roguelikes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;From the description of Rogue (1980) on roguebasin.com&lt;/em&gt;&lt;/p&gt;
</content>
</entry>
</feed>
