<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
	<title>Havoc's Website</title>
	<link>https://havoc.de</link>
	<description>Havoc's latest ramblings</description>
	<language>en-us</language>
	<lastBuildDate>Wed, 08 Apr 2026 00:00:00 GMT</lastBuildDate>
	<atom:link href="https://havoc.de/rss.xml" rel="self" type="application/rss+xml" />
	<item>
		<title>havPixEdit and Minor Website Update</title>
		<link>https://havoc.de/articles/2026-04-08</link>
		<guid isPermaLink="true">https://havoc.de/articles/2026-04-08</guid>
		<description><![CDATA[<p>In my <a href="https://havoc.de/articles/2026-04-04">recent news</a> about <a href="https://havoc.de/project/as">Asphalt Strike</a>, I mentioned possibly creating a standalone version of the <strong>Asphalt Strike - Atlas Editor</strong> and I went ahead and did exactly that. The result is <strong>havPixEdit</strong>, which supports the file format used in <strong>Asphalt Strike</strong>.</p><p>I've expanded the editor with additional tools, introduced layer support for sprites, and added localization. For the first time in one of my SDL applications, I also implemented a menu bar. Here's a screenshot of the current version:</p><p><a href="https://havoc.de/assets/img/havPixEdit.png" title="havPixEdit (Click to Enlarge)"><img src="https://havoc.de/assets/img/havPixEdit_thumbnail.png" alt="havPixEdit Screenshot"></a></p><p>For now, I've decided not to release it publicly. It will remain an internal tool, at least until I've added more features and refined it further.</p><p>I've also worked a little on the website, which now displays the estimated reading time for news entries next to the date.</p>]]></description>
		<category>havpixedit</category>
		<category>app</category>
		<category>cpp</category>
		<category>sdl</category>
		<category>programming</category>
		<category>website</category>
		<category>update</category>
		<pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>havPreviewHandler v0.3.0 Released</title>
		<link>https://havoc.de/articles/2026-04-06</link>
		<guid isPermaLink="true">https://havoc.de/articles/2026-04-06</guid>
		<description><![CDATA[<p>This update for <a href="https://havoc.de/project/havPreviewHandler">havPreviewHandler</a> started with a straightforward goal: show a representative still-frame for MP4 files in both the File Explorer Preview Pane and thumbnails.</p><p>While implementing this, it became clear that havPreviewHandler's existing loading pipeline didn't hold up under rapid file switching. Under certain conditions, previews stalled.</p><p>To address this properly, the loading system was reworked into an asynchronous pipeline. The result is faster preview updates and a responsive File Explorer experience, even when switching files mid-load.</p><p>The changelog for v0.3.0 is short, but the changes behind it are not.</p><strong>Changelog (v0.3.0)</strong><ul>  <li>Added MP4 file support for representative still-frame preview and thumbnail (no video playback)</li></ul><p>The update is available in the <a href="https://havoc.de/#download-havPreviewHandler">Downloads</a> section.</p>]]></description>
		<category>havpreviewhandler</category>
		<category>cpp</category>
		<category>win32</category>
		<category>windows</category>
		<category>shell-extension</category>
		<category>programming</category>
		<category>update</category>
		<pubDate>Mon, 06 Apr 2026 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Asphalt Strike and havSeriLite v0.2 Released</title>
		<link>https://havoc.de/articles/2026-04-04</link>
		<guid isPermaLink="true">https://havoc.de/articles/2026-04-04</guid>
		<description><![CDATA[<p>Today I'm releasing a new game that was primarily created as a testbed for my library <a href="https://github.com/Havoc7891/havSeriLite">havSeriLite</a>, which I originally released two years ago. The library will be used in future projects, so I wanted a real-world example and what better way than making a game?</p><p>So here it is: <a href="https://havoc.de/project/as">Asphalt Strike</a> - a hybrid between a <a href="https://en.wikipedia.org/wiki/Vertically_scrolling_video_game#Vertically_scrolling_shooters">vertical scrolling shooter</a> and an <a href="https://en.wikipedia.org/wiki/Endless_runner">endless runner</a>. The game is inspired by <a href="https://en.wikipedia.org/wiki/Solar_Striker">Solar Striker</a> and <a href="https://www.mobygames.com/game/21306/ghost-in-the-shell-stand-alone-complex/screenshots/psp/853379">Tachikoma - A Go Go!</a>, a bonus game from <a href="https://en.wikipedia.org/wiki/Ghost_in_the_Shell:_Stand_Alone_Complex_(2005_video_game)">Ghost in the Shell: Stand Alone Complex</a> on the <a href="https://en.wikipedia.org/wiki/PlayStation_Portable">PlayStation Portable (PSP)</a>.</p><p><a href="https://havoc.de/assets/img/as2.png" title="Asphalt Strike (Click to Enlarge)"><img src="https://havoc.de/assets/img/as2_thumbnail.png" alt="Asphalt Strike Screenshot"></a></p><p><a href="https://havoc.de/project/as">Asphalt Strike</a> also includes an improved version of my dynamic music system, which I first used in my <a href="https://en.wikipedia.org/wiki/Roguelike">roguelike</a> game <a href="https://havoc.de/project/eme">Escape Made Easy (E.M.E.)</a>. I also spent some time learning the <a href="https://wiki.libsdl.org/SDL3/CategoryStorage">SDL Storage API</a> introduced in version 3.2.0.</p><p>Inspired by <a href="https://havoc.de/project/sk">Shadow Knights</a> and <a href="https://havoc.de/project/ht">Hovertank</a>, I implemented a small sound effect generator based on <a href="https://en.wikipedia.org/wiki/Sine_wave">sine waves</a> - meaning there are no external sound effect files this time. That was a fun challenge.</p><p>The font used in the game is baked directly into the source code, and the game supports localization in both English and German.</p><p>In addition, I created a pixel editor built directly into the debug build of the game, called <strong>Asphalt Strike - Atlas Editor</strong>. I used it to create all the game's graphics.</p><p>Honestly, I probably took the editor further than intended in terms of features, and I'm considering turning it into a standalone tool - we'll see.</p><p>For now, here's a screenshot of the Atlas Editor:</p><p><a href="https://havoc.de/assets/img/as_ae.png" title="Asphalt Strike - Atlas Editor (Click to Enlarge)"><img src="https://havoc.de/assets/img/as_ae_thumbnail.png" alt="Asphalt Strike - Atlas Editor Screenshot"></a></p><p>The game can be downloaded in the <a href="https://havoc.de/#download-as">Downloads</a> section. I've also released a <a href="https://youtu.be/RAP8-QavhC4">video</a> on YouTube showcasing the game.</p><p>While working on the game, I discovered a few bugs and made some behavioral changes to <a href="https://github.com/Havoc7891/havSeriLite">havSeriLite</a>, which led to the release of version 0.2:</p><strong>Changelog (v0.2)</strong><ul>  <li>Fixed reader buffer validation / copy bounds</li>  <li>Made size == 0 checks a valid no-op for empty fields</li></ul>]]></description>
		<category>asphalt-strike</category>
		<category>game</category>
		<category>cpp</category>
		<category>sdl</category>
		<category>havserilite</category>
		<category>library</category>
		<category>programming</category>
		<category>update</category>
		<pubDate>Sat, 04 Apr 2026 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>havPreviewHandler v0.2.0 Released</title>
		<link>https://havoc.de/articles/2026-03-26</link>
		<guid isPermaLink="true">https://havoc.de/articles/2026-03-26</guid>
		<description><![CDATA[<p>I've released a small update to <a href="https://havoc.de/project/havPreviewHandler">havPreviewHandler</a>, introducing Preview Pane context menu actions.</p><strong>Changelog (v0.2.0)</strong><ul>  <li>Added Preview Pane right-click actions:</li>  <ul>    <li>Save current frame as... (PNG, JPEG, or BMP)</li>    <li>Copy current frame (clipboard)</li>  </ul></ul><p>The update is available in the <a href="https://havoc.de/#download-havPreviewHandler">Downloads</a> section.</p>]]></description>
		<category>havpreviewhandler</category>
		<category>cpp</category>
		<category>win32</category>
		<category>windows</category>
		<category>shell-extension</category>
		<category>programming</category>
		<category>update</category>
		<pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>First Video of My Road Rash-Style Game Released on YouTube</title>
		<link>https://havoc.de/articles/2026-03-25</link>
		<guid isPermaLink="true">https://havoc.de/articles/2026-03-25</guid>
		<description><![CDATA[<p>A while ago I stumbled across <a href="http://www.extentofthejam.com/pseudo">Lou's Pseudo 3D Page</a>. It goes deep into how games like <a href="https://en.wikipedia.org/wiki/Road_Rash">Road Rash</a> pulled off their pseudo-3D look. Since I've always liked the Road Rash games (especially the <a href="https://en.wikipedia.org/wiki/Road_Rash_(1994_video_game)">Windows / 3DO version</a>), I figured I'd try building something similar myself.</p><p>About ~5k lines of code later, I've got a pseudo-3D engine running that feels pretty close to the old <a href="https://en.wikipedia.org/wiki/Sega_Genesis">Sega Genesis</a> games, mixed with some of the building rendering style from the 3DO version.</p><p>The working title is <strong>RR</strong>, built with C++23, SDL 3.0, and OpenGL 3.3.</p><p>First <a href="https://youtu.be/tpGcLdPe4KI">video</a> is up on YouTube. Not sure yet if this turns into a real project, so I haven't put up a project page for it, but it's been a fun side experiment so far.</p>]]></description>
		<category>rr</category>
		<category>game</category>
		<category>cpp</category>
		<category>sdl</category>
		<category>opengl</category>
		<category>programming</category>
		<category>youtube</category>
		<category>video</category>
		<pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>havPreviewHandler v0.1.1 Released, havIDE Development Update, and Web Speech API Fun(ctionality)</title>
		<link>https://havoc.de/articles/2026-03-22</link>
		<guid isPermaLink="true">https://havoc.de/articles/2026-03-22</guid>
		<description><![CDATA[<p>I've released a small update to <a href="https://havoc.de/project/havPreviewHandler">havPreviewHandler</a>, which includes the following changes:</p><strong>Changelog (v0.1.1)</strong><ul>  <li>Improved timeline dragging so frame selection better matches the cursor position</li>  <li>Added a loading indicator so the preview pane no longer appears blank while content is loading (especially noticeable with larger files)</li></ul><p>The update is available in the <a href="https://havoc.de/#download-havPreviewHandler">Downloads</a> section.</p><p>I've also continued working on <a href="https://havoc.de/project/havIDE">havIDE</a>, which now includes:</p><ul>  <li>Expanded debugging capabilities (call stack and watches)</li>  <li>Enhanced syntax highlighting and configurable editor formatting (indentation style and size, line endings, encoding)</li>  <li>Support for saving project and session settings per project folder</li></ul><p><a href="https://havoc.de/assets/img/havIDE5.png" title="Expanded Debugging Capabilities (click to enlarge)"><img src="https://havoc.de/assets/img/havIDE5_thumbnail.png" alt="havIDE screenshot"></a></p><p>I recently came across a personal website that had a <strong>"Pronounce my name"</strong> button next to the author's name. I thought it was a cool feature and wanted to know how it works.</p><p>A quick search showed that this can be implemented using the <a href="https://developer.mozilla.org/en-US/docs/Web/API/Web_Speech_API">Web Speech API</a>, specifically the <a href="https://developer.mozilla.org/en-US/docs/Web/API/SpeechSynthesis">Speech Synthesis</a> part (text-to-speech, or TTS). Browser and voice availability can vary depending on the operating system, but I added it to my website regardless - because why not. If you don't see the speaker button next to my name on the homepage, your browser or system probably doesn't support it.</p><em>On a final note: On certain Bluetooth audio devices (e.g., AirPods), very short TTS playback may have its initial samples clipped due to audio path wake-up latency. This occurs at the device / operating system level and can't be fully mitigated from the web layer.</em>]]></description>
		<category>havpreviewhandler</category>
		<category>cpp</category>
		<category>win32</category>
		<category>windows</category>
		<category>shell-extension</category>
		<category>havide</category>
		<category>wxwidgets</category>
		<category>tools</category>
		<category>programming</category>
		<category>website</category>
		<category>update</category>
		<pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>havPreviewHandler Released</title>
		<link>https://havoc.de/articles/2026-03-18</link>
		<guid isPermaLink="true">https://havoc.de/articles/2026-03-18</guid>
		<description><![CDATA[<p>Recently, I wanted to analyze an animated GIF directly within the Windows File Explorer Preview Pane. To my surprise, Windows doesn't natively support animated GIF previews there. While you can open the file in the built-in image viewer to play a GIF animation, it has notable limitations - you can't pause the animation or step through it frame by frame.</p><p>I remembered that Windows allows custom <a href="https://en.wikipedia.org/wiki/File_Explorer#Extensibility">shell extensions</a>, although I had never built one myself. So I took the opportunity to dive in, researched the necessary APIs, and began developing a preview handler that enables animated image previews directly in the File Explorer Preview Pane.</p><p>During this process, I came across two particularly helpful resources: "<a href="https://learn.microsoft.com/en-us/windows/win32/shell/preview-handlers">Preview Handlers and Shell Preview Host</a>" and "<a href="https://learn.microsoft.com/en-us/windows/win32/shell/thumbnail-providers">Thumbnail Handlers</a>." These guided me in implementing both a preview handler and a custom thumbnail provider.</p><p>Beyond animated previews, I also wanted to improve how thumbnails are generated. By default, Windows uses only the first frame of an animation as a static thumbnail, which is often not representative. To address this, I implemented logic to generate more meaningful static thumbnails for GIF, WebP, and APNG images.</p><p>The result is <a href="https://havoc.de/project/havPreviewHandler">havPreviewHandler</a> - a shell extension DLL for Windows 11 File Explorer that provides animated previews and representative static thumbnails for GIF, WebP, and PNG files (including APNG content in PNG containers).</p><p>The shell extension is released as freeware and is available on the <a href="https://havoc.de/project/havPreviewHandler">havPreviewHandler</a> project page.</p><p>The screenshot below shows havPreviewHandler displaying an animated GIF directly in the File Explorer Preview Pane:</p><a href="https://havoc.de/assets/img/havPreviewHandler.png" title="Animated GIF in File Explorer Preview Pane (click to enlarge)"><img src="https://havoc.de/assets/img/havPreviewHandler_thumbnail.png" alt="havPreviewHandler screenshot"></a>]]></description>
		<category>havpreviewhandler</category>
		<category>cpp</category>
		<category>win32</category>
		<category>windows</category>
		<category>shell-extension</category>
		<category>programming</category>
		<pubDate>Wed, 18 Mar 2026 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>havTermKit 0.2 and havTermViper Released</title>
		<link>https://havoc.de/articles/2026-03-01</link>
		<guid isPermaLink="true">https://havoc.de/articles/2026-03-01</guid>
		<description><![CDATA[<p>I've released <a href="https://github.com/Havoc7891/havTermKit">havTermKit</a> version 0.2, which introduces several new features and improvements. The most notable addition is full terminal input and mouse handling support, enabling the creation of significantly more interactive terminal applications.</p><strong>Changelog (v0.2)</strong><ul>  <li>Added blink attribute support (<strong>ANSI_BLINK</strong>, <strong>ANSI_NO_BLINK</strong>)</li>  <li>Added VT processing support for <strong>stderr</strong> on Windows</li>  <li>Added console restore helper (<strong>havTermKit_RestoreConsole</strong>)</li>  <li>Added terminal input helpers    <ul>      <li><strong>havTermKit_EnableInputVT</strong></li>      <li><strong>havTermKit_DisableInputVT</strong></li>      <li><strong>havTermKit_EnableRawInputNonBlocking</strong></li>      <li><strong>havTermKit_DisableRawInputNonBlocking</strong></li>      <li><strong>havTermKit_ReadByte</strong></li>      <li><strong>havTermKit_TryReadByte</strong></li>    </ul>  </li>  <li>Added VT mouse helpers (tracking toggles and SGR parser)</li>  <li>Added terminal mode helpers    <ul>      <li><strong>havTermKit_AlternateScreenEnter</strong></li>      <li><strong>havTermKit_AlternateScreenLeave</strong></li>      <li><strong>havTermKit_WrapEnable</strong></li>      <li><strong>havTermKit_WrapDisable</strong></li>    </ul>  </li>  <li>Added terminal size helper (<strong>havTermKit_GetTerminalSize</strong>)</li>  <li>Cleaned up Windows Unicode / config macros</li></ul><p>In addition, I've released <a href="https://havoc.de/project/havTermViper">havTermViper</a>, a terminal-based game built using havTermKit.</p><p>The full source code for the game is available on <a href="https://github.com/Havoc7891/havTermViper">GitHub</a> under the MIT License.</p>]]></description>
		<category>havtermkit</category>
		<category>havtermviper</category>
		<category>c</category>
		<category>cpp</category>
		<category>library</category>
		<category>game</category>
		<category>programming</category>
		<category>update</category>
		<pubDate>Sun, 01 Mar 2026 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Doom-Style Engine Progress Update: Renderer Rewritten in OpenGL</title>
		<link>https://havoc.de/articles/2026-02-28</link>
		<guid isPermaLink="true">https://havoc.de/articles/2026-02-28</guid>
		<description><![CDATA[<p>When I began working on my <a href="https://en.wikipedia.org/wiki/Doom_(1993_video_game)">Doom</a>-style engine, <a href="https://havoc.de/project/portals">Portals</a>, I intentionally started with a software renderer. The goal was to keep it old-school and fully under my control.</p><p>As development continued and I introduced more advanced features such as slopes, room over room support, and a particle system, the renderer became increasingly complex. Rendering artifacts appeared in edge cases and performance degraded significantly, especially when the camera moved close to particle effects.</p><p>I initially tried to fix the issues within the software renderer. I spent time optimizing and correcting edge cases, but the complexity kept increasing and some problems proved difficult to resolve cleanly.</p><p>Today I made the decision to rewrite the renderer in <a href="https://www.opengl.org">OpenGL 3.3</a>.</p><p>I'm not a graphics programmer and maintaining a feature-rich software rasterizer while continuing engine development was no longer the most effective use of my time.</p><p>The rewrite took the entire day.</p><p>The result: significantly improved and stable performance, resolved graphical issues, and a noticeably smaller and cleaner codebase.</p><p>I also removed <a href="https://wiki.libsdl.org/SDL3_image">SDL_image 3.0</a> from the project. With native PNG <a href="https://wiki.libsdl.org/SDL3/SDL_LoadPNG#version">loading</a> and <a href="https://wiki.libsdl.org/SDL3/SDL_SavePNG#version">saving</a> now part of <a href="https://libsdl.org">SDL 3.0</a>, the extra dependency is no longer required.</p><p>Even the screen-melting effect survived the transition to OpenGL.</p><p>Visually, the engine remains nearly identical. If you compare the screenshots below, the difference is minimal.</p><p>(Left: Software Renderer / Right: OpenGL Renderer)</p><a href="https://havoc.de/assets/img/portals13.png" title="Portals - Software Renderer (click to enlarge)"><img src="https://havoc.de/assets/img/portals13_thumbnail.png" alt="Portals software renderer screenshot"></a><a href="https://havoc.de/assets/img/portals_opengl.png" title="Portals - OpenGL Renderer (click to enlarge)"><img src="https://havoc.de/assets/img/portals_opengl_thumbnail.png" alt="Portals OpenGL renderer screenshot"></a>]]></description>
		<category>portals</category>
		<category>game</category>
		<category>cpp</category>
		<category>sdl</category>
		<category>opengl</category>
		<category>programming</category>
		<category>update</category>
		<pubDate>Sat, 28 Feb 2026 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>First Video of My GTA 1-Style Game Released on YouTube</title>
		<link>https://havoc.de/articles/2026-02-25</link>
		<guid isPermaLink="true">https://havoc.de/articles/2026-02-25</guid>
		<description><![CDATA[<p>It was always my goal to build my own <a href="https://en.wikipedia.org/wiki/Doom_(1993_video_game)">Doom</a>-style engine and a <a href="https://en.wikipedia.org/wiki/Grand_Theft_Auto_(video_game)">GTA 1</a>-style game. While development of the former is already well underway, today I'm officially revealing the first milestone of the latter with a <a href="https://youtu.be/OBIG8NlgEOg">video</a> on YouTube.</p><p>The working project title is <a href="https://havoc.de/project/gcr">GCR</a>, developed in C++23, <a href="https://libsdl.org">SDL 3.0</a>, and <a href="https://www.opengl.org">OpenGL 3.3</a>. This milestone consists of roughly 5700 lines of code and establishes the technical foundation for the project moving forward.</p><p>Although GCR is now officially underway, my primary focus remains on finishing <a href="https://havoc.de/project/ht">Hovertank</a> and <a href="https://havoc.de/project/sk">Shadow Knights</a>, followed by continued development of my Doom-style engine, <a href="https://havoc.de/project/portals">Portals</a>, and the game that will be built on it.</p>]]></description>
		<category>gcr</category>
		<category>game</category>
		<category>cpp</category>
		<category>sdl</category>
		<category>opengl</category>
		<category>programming</category>
		<category>youtube</category>
		<category>video</category>
		<pubDate>Wed, 25 Feb 2026 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>havTermKit Released</title>
		<link>https://havoc.de/articles/2026-02-23</link>
		<guid isPermaLink="true">https://havoc.de/articles/2026-02-23</guid>
		<description><![CDATA[<p>I recently built a small C++ console application and wanted to enhance it with colorful output and text effects. While modern Windows versions support <a href="https://en.wikipedia.org/wiki/ANSI_escape_code">ANSI escape codes</a>, I was looking for a clean, cross-platform solution that works consistently across all systems.</p><p>To solve this, I created <a href="https://github.com/Havoc7891/havTermKit">havTermKit</a>, a lightweight terminal utility library for modern C and C++, available on GitHub under the MIT license.</p><p>It provides ANSI escape macros for:</p><ul>  <li>Text styling</li>  <li>Foreground and background colors</li>  <li>Cursor control</li>  <li>Screen clearing</li>  <li>Hyperlinks</li></ul><p>Additionally, it includes a small initialization function to enable VT processing and UTF-8 support on Windows.</p>]]></description>
		<category>havtermkit</category>
		<category>c</category>
		<category>cpp</category>
		<category>library</category>
		<category>programming</category>
		<pubDate>Mon, 23 Feb 2026 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Hovertank Development Update: Virtual Keyboard for Controllers</title>
		<link>https://havoc.de/articles/2026-02-22</link>
		<guid isPermaLink="true">https://havoc.de/articles/2026-02-22</guid>
		<description><![CDATA[<p>I've completed the final major piece required to achieve full controller support in <a href="https://havoc.de/project/ht">Hovertank</a>: a virtual keyboard for input dialogs.</p><p>Below are screenshots showcasing the virtual keyboard in the <a href="https://havoc.de/articles/2026-02-17.html">Mod Manager search</a> when using a controller, as well as in Hovertank's in-game dialogs.</p><p><strong>Note:</strong> Hovertank's virtual keyboard is context-aware and only shows valid keys for the current input dialog.</p><a href="https://havoc.de/assets/img/Hovertank5.png" title="Virtual Keyboard in the Hovertank Mod Manager Search (Click to enlarge)"><img src="https://havoc.de/assets/img/Hovertank5_thumbnail.png" alt="Screenshot of the Virtual Keyboard in the Hovertank Mod Manager Search"></a><a href="https://havoc.de/assets/img/Hovertank6.png" title="Virtual Keyboard in Hovertank's In-Game Dialogs (Click to enlarge)"><img src="https://havoc.de/assets/img/Hovertank6_thumbnail.png" alt="Screenshot of the Virtual Keyboard in Hovertank's In-Game Dialogs"></a>]]></description>
		<category>hovertank</category>
		<category>game</category>
		<category>cpp</category>
		<category>sdl</category>
		<category>programming</category>
		<category>update</category>
		<pubDate>Sun, 22 Feb 2026 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Hovertank Development Update: Improved Mod Manager Search</title>
		<link>https://havoc.de/articles/2026-02-17</link>
		<guid isPermaLink="true">https://havoc.de/articles/2026-02-17</guid>
		<description><![CDATA[<p>I've continued working on the <a href="https://havoc.de/articles/2026-02-08.html">Hovertank Mod Manager</a> and added a multi-select tags dropdown, replacing the old tag-in-search approach. This now lets you search mods by name, ID, or author while filtering by multiple tags at the same time.</p><p>Here's a screenshot of the new multi-select tags dropdown:</p><a href="https://havoc.de/assets/img/Hovertank4.png" title="Hovertank Mod Manager Multi-Select Tags Dropdown (Click to enlarge)"><img src="https://havoc.de/assets/img/Hovertank4_thumbnail.png" alt="Hovertank Mod Manager Multi-Select Tags Dropdown"></a>]]></description>
		<category>hovertank</category>
		<category>game</category>
		<category>cpp</category>
		<category>sdl</category>
		<category>programming</category>
		<category>update</category>
		<pubDate>Tue, 17 Feb 2026 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Hovertank Development Update: Hovertank Editor (HVE) Completed</title>
		<link>https://havoc.de/articles/2026-02-15</link>
		<guid isPermaLink="true">https://havoc.de/articles/2026-02-15</guid>
		<description><![CDATA[<p>After the first version of the <a href="https://havoc.de/articles/2026-02-08.html">Hovertank mod manager and mod override system</a> was completed, I shifted my focus from the game itself to the map editor, which still needed to be created. The editor is now finished and will be released alongside the game as freeware under the name <a href="https://havoc.de/project/ht">Hovertank Editor (HVE)</a>.</p><p>I used the <a href="https://havoc.de/project/sk">Shadow Knights Editor (SKE)</a> as a starting point, since both games share the same map format. However, unlike SKE, HVE uses uniform 16x16 pixel tiles for each layer, as it doesn't display the original game sprites.</p><p>Here's a screenshot of the first version of the editor:</p><a href="https://havoc.de/assets/img/HVE1.png" title="HVE Screenshot (Click to enlarge)"><img src="https://havoc.de/assets/img/HVE1_thumbnail.png" alt="HVE (Hovertank Editor)"></a>]]></description>
		<category>hovertank</category>
		<category>editor</category>
		<category>cpp</category>
		<category>wxwidgets</category>
		<category>programming</category>
		<pubDate>Sun, 15 Feb 2026 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Hovertank Development Update: Mod Manager &amp; Test Mod Demo Video on YouTube, and havINI Version 0.6 Released</title>
		<link>https://havoc.de/articles/2026-02-08</link>
		<guid isPermaLink="true">https://havoc.de/articles/2026-02-08</guid>
		<description><![CDATA[<p>I've completed the first version of the <a href="https://havoc.de/project/ht">Hovertank</a> mod manager and mod override system. A screenshot is available on the Projects page, and I've uploaded a <a href="https://youtu.be/bJVEPD9KDO4">YouTube video</a> demonstrating both features with a small test mod.</p><p>Additionally, <a href="https://github.com/Havoc7891/havINI">havINI</a> version 0.6 has been released with the following fix:</p><ul>  <li><strong>Fixed quoted-value parsing for bracket characters:</strong> <code>[</code> and <code>]</code> are now treated as normal value content when inside a quoted string (e.g., <code>Key = "["</code>) instead of being misinterpreted as section delimiters.</li></ul>]]></description>
		<category>hovertank</category>
		<category>game</category>
		<category>havini</category>
		<category>library</category>
		<category>cpp</category>
		<category>sdl</category>
		<category>programming</category>
		<category>update</category>
		<category>youtube</category>
		<category>video</category>
		<pubDate>Sun, 08 Feb 2026 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>havTransparentWnd Released</title>
		<link>https://havoc.de/articles/2026-01-31</link>
		<guid isPermaLink="true">https://havoc.de/articles/2026-01-31</guid>
		<description><![CDATA[<p>A few days ago, I ran into a situation where I wanted to quickly check something on my desktop without minimizing all my open windows. I wondered whether Windows 11 offered a built-in way to make windows transparent, but it doesn't.</p><p>I found a few third-party closed-source tools that could do this, so I decided to write my own. Over the course of a few days, I built a <a href="https://en.wikipedia.org/wiki/Windows_Forms">WinForms</a>-based C# app called <a href="https://havoc.de/project/havTransparentWnd">havTransparentWnd</a> that allows you to make windows transparent.</p><p>The app lets you adjust the opacity of transparent windows, block specific applications from being made transparent, and provides system tray integration for easy access. It also supports a global hotkey to toggle transparency on and off, as well as multiple languages (currently English and German).</p><p>You can download havTransparentWnd from the <a href="https://havoc.de/#download-havTransparentWnd">Downloads</a> section. It requires Windows 10 or later and the <a href="https://dotnet.microsoft.com/en-us/download/dotnet/10.0/runtime">.NET 10 Desktop Runtime</a>. The source code is available on <a href="https://github.com/Havoc7891/havTransparentWnd">GitHub</a> under the MIT license. As usual, there's also a screenshot on the <a href="https://havoc.de/project/havTransparentWnd">Projects</a> page.</p>]]></description>
		<category>havtransparentwnd</category>
		<category>csharp</category>
		<category>windows</category>
		<category>tools</category>
		<pubDate>Sat, 31 Jan 2026 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Hovertank Development Update: Modding Support Groundwork Complete and havINI Version 0.5 Released</title>
		<link>https://havoc.de/articles/2026-01-25</link>
		<guid isPermaLink="true">https://havoc.de/articles/2026-01-25</guid>
		<description><![CDATA[<p>The mod support architecture for <a href="https://havoc.de/project/ht">Hovertank</a> has now been finalized, and the foundational work has been completed. The base game will continue to use its original binary-based data formats, while mods will use PNG files for graphics and WAV files for sounds. Levels will still rely on the same binary-based data format as the base game.</p><p>Mods live in their own dedicated folders, and the game allows players to use multiple mods simultaneously. Mods can override graphics and sounds from the base game, with override behavior controlled through an INI file. Level names, descriptions, and times are managed through a separate INI file. Hovertank uses <a href="https://github.com/Havoc7891/havINI">havINI</a> for INI file parsing.</p><p>havINI version 0.5 includes the following changes and fixes:</p><ul>  <li>Updated value parsing: quoted values now respect escape sequences (\" and \\) and track the opening quote type so inner apostrophes / quotes don't terminate the string.</li>  <li>Added comment escape mode control for literal comment output when needed.</li>  <li>Parsing now only trims leading whitespace to preserve spaces inside values.</li>  <li>Fixed array key parsing to ignore surrounding whitespace, matching formatted output (e.g., "Key[] = value").</li>  <li>Array operations now validate empty / out-of-range conditions and throw consistent runtime errors.</li></ul>]]></description>
		<category>hovertank</category>
		<category>game</category>
		<category>havini</category>
		<category>library</category>
		<category>cpp</category>
		<category>sdl</category>
		<category>programming</category>
		<category>update</category>
		<pubDate>Sun, 25 Jan 2026 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Escape Made Easy (E.M.E.) Version 0.4 Released, havCSON Version 0.2 Released, and Doom-Style Engine Progress Update</title>
		<link>https://havoc.de/articles/2026-01-18</link>
		<guid isPermaLink="true">https://havoc.de/articles/2026-01-18</guid>
		<description><![CDATA[<p>A new function called <a href="https://github.com/libsdl-org/SDL_mixer/issues/799">MIX_GetTrackLoops()</a> was recently added to <a href="https://github.com/libsdl-org/SDL_mixer">SDL_mixer 3.0</a>, which allowed me to improve the dynamic music system of <a href="https://havoc.de/project/eme">Escape Made Easy (E.M.E.)</a>. This also gave me a reason to migrate the game from SDL 2.0 to <a href="https://www.libsdl.org">SDL 3.0</a> and to utilize <a href="https://github.com/Havoc7891/havCSON">havCSON</a> in a real project. While playtesting the game, I discovered a small bug in the save game functionality, which has now been fixed.</p><p>With that, here is version 0.4 of Escape Made Easy (E.M.E.). You can download the update in the <a href="https://havoc.de/#download-eme">Downloads</a> section.</p><p>This update includes the following changes and fixes:</p><ul>  <li>Migrated to SDL 3.0 and SDL_mixer 3.0.</li>  <li>Replaced JSON files with CSON files.</li>  <li>Replaced BMP file with PNG file.</li>  <li>Minor improvements to the dynamic music system.</li>  <li>Fixed a bug where the oldest game messages were saved instead of the latest ones.</li>  <li>Clamp initial mouse position to window bounds on startup (prevents cursor from starting out of range).</li>  <li>Added a language selector feature (English &amp; German).</li>  <li>Added an icon to the game executable.</li>  <li>Game is now 64-bit only.</li></ul><p>I've also released version 0.2 of <a href="https://github.com/Havoc7891/havCSON">havCSON</a>, which improves number formatting and error handling.</p><p>In other news, I've rewritten the particle system of <a href="https://havoc.de/project/portals">Portals</a> to be pixel-based instead of bitmap-based. The bitmap-based approach was causing performance issues when you got too close to the particles. Below is a screenshot showcasing the new pixel-based particle system:</p><a href="https://havoc.de/assets/img/portals14.png" title="Portals' new pixel-based Particle System Screenshot (Click to enlarge)"><img src="https://havoc.de/assets/img/portals14_thumbnail.png" alt="Portals' new pixel-based Particle System Screenshot"></a>]]></description>
		<category>eme</category>
		<category>portals</category>
		<category>game</category>
		<category>havcson</category>
		<category>library</category>
		<category>cpp</category>
		<category>sdl</category>
		<category>programming</category>
		<category>update</category>
		<pubDate>Sun, 18 Jan 2026 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Shadow Knights Development Update: SKE Map Renderer Rewritten in OpenGL</title>
		<link>https://havoc.de/articles/2026-01-04</link>
		<guid isPermaLink="true">https://havoc.de/articles/2026-01-04</guid>
		<description><![CDATA[<p>After updating the copyright year in the <a href="https://havoc.de/projects.html#sk">Shadow Knights Editor</a> (SKE), I was just drawing some random tiles on a map I had open and realized I wasn't satisfied with the rendering speed anymore. So I thought: "Screw it, I'm rewriting the map renderer in <a href="https://en.wikipedia.org/wiki/OpenGL">OpenGL</a>."</p><p>Today, just one day later, the map renderer is running on OpenGL instead of <a href="https://docs.wxwidgets.org/latest/group__group__class__gdi.html">GDI</a>. I'm using OpenGL 3.3 with shaders as the default, with a fallback to OpenGL 2.1 for older hardware. I also fixed the clipping issue when copying map segments. There's still a small quirk where objects shift slightly when you rotate or flip them, but it's a minor issue that isn't worth fixing - rotating and flipping are more of a gimmick anyway.</p><p>If you compare the enlarged versions of the screenshots, they basically look the same, except the rectangles in the OpenGL version (screenshot #2) are "<a href="https://en.wiktionary.org/wiki/pixel-perfect">pixel-perfect</a>", whereas the GDI ones (screenshot #1) aren't.</p><a href="https://havoc.de/assets/img/SKE2.png" title="SKE GDI Map Renderer Screenshot (Click to enlarge)"><img src="https://havoc.de/assets/img/SKE2_thumbnail.png" alt="SKE (Shadow Knights Editor)"></a><a href="https://havoc.de/assets/img/SKE3.png" title="SKE OpenGL Map Renderer Screenshot (Click to enlarge)"><img src="https://havoc.de/assets/img/SKE3_thumbnail.png" alt="SKE (Shadow Knights Editor)"></a><p>I'm really satisfied with the new rendering speed. Going forward, I'll be using OpenGL directly for map rendering in <a href="https://wxwidgets.org">wxWidgets</a> instead of trying to squeeze more performance out of GDI.</p>]]></description>
		<category>shadow-knights</category>
		<category>editor</category>
		<category>cpp</category>
		<category>wxwidgets</category>
		<category>opengl</category>
		<category>programming</category>
		<pubDate>Sun, 04 Jan 2026 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>havWndSwitcher Released</title>
		<link>https://havoc.de/articles/2025-12-31</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-12-31</guid>
		<description><![CDATA[<p>One thing I found annoying while recording the <a href="https://havoc.de/articles/2025-12-26.html">preview video for the Hovertank source port</a> was that I couldn't quickly switch between the game window on monitor #1 and the video capture software on monitor #2. I wanted to capture the intro sequence that appears immediately after launching the game while keeping the game window focused - but I still had to click the record button in the capture software, which took focus away from the game window. It took me several attempts to get the timing right so the intro sequence was recorded with the game window focused. I still had to trim a few frames afterward, but the audio was fully captured.</p><p>After finishing the recording, I thought: "Why isn't there a single hotkey to switch directly to the most recently used window? The built-in Windows shortcuts just aren't efficient or ergonomic enough for my workflow." So I wrote a WinForms-based background app in C# that registers global hotkeys to switch windows. I called it <a href="https://havoc.de/project/havWndSwitcher">havWndSwitcher</a>, and I ended up taking the original idea much further than planned. The app offers a lot of options (you'll see what I mean when you try it), and I even added language selection support; it currently includes English and German.</p><p>You can download havWndSwitcher from the <a href="https://havoc.de/#download-havWndSwitcher">downloads</a> section. It requires Windows 10 or later and the <a href="https://dotnet.microsoft.com/en-us/download/dotnet/8.0/runtime">.NET 8 Desktop Runtime</a>. The source code is available on <a href="https://github.com/Havoc7891/havWndSwitcher">GitHub</a> under the MIT license. As usual, there are also screenshots on the <a href="https://havoc.de/project/havWndSwitcher">projects</a> page.</p>]]></description>
		<category>havwndswitcher</category>
		<category>csharp</category>
		<category>windows</category>
		<category>tools</category>
		<pubDate>Wed, 31 Dec 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Hovertank Source Port - Preview Video Released on YouTube</title>
		<link>https://havoc.de/articles/2025-12-26</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-12-26</guid>
		<description><![CDATA[With the <a href="https://havoc.de/projects.html#sk">Shadow Knights source port</a> close to being finished, I've decided to restart work on the <a href="https://havoc.de/projects.html#ht">Hovertank source port</a>. Why restart, you may ask? I originally created a <a href="https://en.wikipedia.org/wiki/Hovertank_One">Hovertank</a> source port over a decade ago, but it ended up being over-engineered - I implemented a fixed-time-step update loop, rewrote the game into an object-oriented structure, and made it extremely moddable (to the point where the AI could be controlled through <a href="https://en.wikipedia.org/wiki/INI_file">INI</a> settings). On top of that, I implemented the fixed-point math poorly, so it relied on 64-bit integers.<p>I've learned a lot since then. The new source port stays much closer to the original codebase, and this time the fixed-point math uses 32-bit integers - although the game itself will still only run on 64-bit operating systems.</p><p>After five days of development, the new port is already playable from start to finish. There's still work ahead, but I've uploaded a short <a href="https://youtu.be/koTnosr6xOw">preview video</a> on YouTube showcasing the current state of the game.</p>]]></description>
		<category>hovertank</category>
		<category>youtube</category>
		<category>video</category>
		<pubDate>Fri, 26 Dec 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>havCSON Released</title>
		<link>https://havoc.de/articles/2025-12-15</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-12-15</guid>
		<description><![CDATA[<p>While looking for a more lightweight and human-readable alternative to <a href="https://json.org">JSON</a>, I came across <a href="https://github.com/bevry/cson">CSON</a> (<a href="https://coffeescript.org">CoffeeScript</a> Object Notation). It retains JSON's simple data model while adopting a <a href="https://yaml.org">YAML</a>-inspired, indentation-based syntax focused on readability.</p><p>Unfortunately, CSON remains effectively confined to the CoffeeScript ecosystem, leaving C++ developers without a usable implementation.</p><p>To address that gap, I created <a href="https://github.com/Havoc7891/havCSON">havCSON</a>, a lightweight CSON reader / writer library for C++23, available on GitHub under the MIT license.</p>]]></description>
		<category>havcson</category>
		<category>cpp</category>
		<category>library</category>
		<category>programming</category>
		<pubDate>Mon, 15 Dec 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>My Website Turns 25 - Time for a Redesign</title>
		<link>https://havoc.de/articles/2025-12-10</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-12-10</guid>
		<description><![CDATA[<p>Today marks 25 years since the first version of my website went online, so I decided it was the perfect moment for a redesign, and here it is. The updated site brings back a small About section and introduces a new tag system for news, as well as a search feature to make everything easier to find.</p>]]></description>
		<category>website</category>
		<category>update</category>
		<pubDate>Wed, 10 Dec 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Shadow Knights Development Update: SKE Completed and GitHub Profile Automation Script Additions</title>
		<link>https://havoc.de/articles/2025-12-01</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-12-01</guid>
		<description><![CDATA[<p>The <a href="https://havoc.de/projects.html#sk">Shadow Knights Editor</a> (SKE) is now complete and will be released together with the game.</p><p>As mentioned in the <a href="https://havoc.de/articles/2025-11-19.html">previous update</a>, the editor wasn't built from scratch - I used <a href="https://havoc.de/projects.html#tpp">The Pushing Point Editor</a> as the starting point. However, I had to heavily modify the map renderer. The original editor used uniform 16x16 pixel tiles for each layer. For SKE, I wanted to display the actual sprites instead of 16x16 placeholders. This required rewriting large parts of the renderer because it relies on the <a href="https://www.phatcode.net/res/224/files/html/ch45/45-02.html#Heading5">dirty rectangle rendering technique</a> to update maps efficiently.</p><p>Since the sprites vary in size, applying the same dirty-rectangle-based approach to the objects layer became significantly more complex. I did manage to update only the necessary map regions in the end, but doing so with the <a href="https://docs.wxwidgets.org/latest/group__group__class__gdi.html">Graphics Device Interface (GDI)</a> was challenging, especially because I had to handle transparency manually. There are still a few edge cases where it doesn't behave perfectly (for example, rotating a copied map segment containing sprites can clip them), but overall I got it working. The effort paid off: map rendering is still "fast" given the limitations of GDI.</p><p>Here's a screenshot showing the first release version of the editor:</p><a href="https://havoc.de/assets/img/SKE2.png" title="SKE Screenshot (Click to enlarge)"><img src="https://havoc.de/assets/img/SKE2_thumbnail.png" alt="SKE (Shadow Knights Editor)"></a><p>In other news, I've expanded my <a href="https://havoc.de/articles/2025-05-31.html">Python GitHub profile automation script</a>. I added a section that displays my top used languages across my public repositories (excluding forks), as well as a section showing my latest <a href="https://youtube.com/@Havoc7891">YouTube videos</a>.</p><p>The top languages section includes a legend and an automatically generated SVG file that shows a stacked bar chart of used languages - similar to GitHub's own language bar. The data is retrieved via the <a href="https://docs.github.com/en/rest?apiVersion=2022-11-28">GitHub REST API</a>, and the latest YouTube videos are fetched using the <a href="https://developers.google.com/youtube/v3/docs">YouTube Data API v3</a>.</p><p>This was a fun challenge, though my first attempt at generating the top languages section didn't work on GitHub. I initially tried using HTML with inline CSS, but GitHub sanitizes it, presumably for security reasons, so the styling was removed. I ended up generating an SVG instead. I could have saved myself some time by checking beforehand whether GitHub supports inline CSS in README.md files - but oh well.</p>]]></description>
		<category>shadow-knights</category>
		<category>editor</category>
		<category>github</category>
		<category>cpp</category>
		<category>wxwidgets</category>
		<category>python</category>
		<category>programming</category>
		<pubDate>Mon, 01 Dec 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Shadow Knights Development Update: Projects Page Addition and Start of SKE Development</title>
		<link>https://havoc.de/articles/2025-11-19</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-11-19</guid>
		<description><![CDATA[<p class="text-justify mb-2">First of all, the source port of <a href="https://havoc.de/projects.html#sk">Shadow Knights</a> now has its own entry on the <a href="https://havoc.de/projects.html">Projects</a> page.</p><p class="text-justify mb-2">With that out of the way: I've started work on a map editor for <a href="https://havoc.de/projects.html#sk">Shadow Knights</a> called <strong>SKE (Shadow Knights Editor)</strong>, which will be released as freeware. The editor is being developed in C++23 using <a href="https://wxwidgets.org">wxWidgets</a>. SKE is based on <a href="https://havoc.de/projects.html#tpp">The Pushing Point Editor</a>, mainly because I know how long it takes to build a map editor completely from scratch, and I'd rather focus my time on finishing the game's source port.</p><p class="text-justify mb-2">Anyway, here's a screenshot showing the editor in its current state:</p><a href="https://havoc.de/assets/img/SKE1.png" title="SKE Screenshot (Click to enlarge)"><img src="https://havoc.de/assets/img/SKE1_thumbnail.png" alt="SKE (Shadow Knights Editor)"></a>]]></description>
		<category>shadow-knights</category>
		<category>editor</category>
		<category>cpp</category>
		<category>sdl</category>
		<category>wxwidgets</category>
		<category>programming</category>
		<pubDate>Wed, 19 Nov 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Havoc Startup Minimizer Released</title>
		<link>https://havoc.de/articles/2025-11-16</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-11-16</guid>
		<description><![CDATA[<p>I've been a long-time <a href="https://www.thunderbird.net">Mozilla Thunderbird</a> user and really like the email client - enough that I even donate to the project. Thunderbird includes a handy option that allows you to minimize the app to the system tray, which is great if you want it to keep running in the background.</p><p>However, there's still one missing piece: even if you enable that option and add Thunderbird to your Windows startup apps, so it launches automatically when you log in, it still can't start minimized.</p><p>I started wondering today whether an extension could handle this. I'm sure there are already extensions that can do that, but it seemed like a good opportunity to learn how difficult it is to build an extension myself. The result is <a href="https://havoc.de/projects.html#havStartMin">Havoc Startup Minimizer</a> - a lightweight, efficient, and permission-free extension for Mozilla Thunderbird that minimizes the main Thunderbird window immediately after startup.</p><p>You can find it on the official Thunderbird Add-ons site: <a href="https://addons.thunderbird.net/en-US/thunderbird/addon/havoc-startup-minimizer">https://addons.thunderbird.net/en-US/thunderbird/addon/havoc-startup-minimizer</a></p><p>And the source code is available on GitHub: <a href="https://github.com/Havoc7891/havoc-startup-minimizer">https://github.com/Havoc7891/havoc-startup-minimizer</a></p>]]></description>
		<category>thunderbird</category>
		<category>add-on</category>
		<category>javascript</category>
		<category>programming</category>
		<pubDate>Sun, 16 Nov 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Shadow Knights Development Update: Controller Support, Save Game Feature, and WinMerge Translation Work</title>
		<link>https://havoc.de/articles/2025-11-02</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-11-02</guid>
		<description><![CDATA[<p>Development on <a href="https://en.wikipedia.org/wiki/Shadow_Knights">Shadow Knights</a> continues to move forward. I've improved game controller support - you can now choose between joystick and gamepad - and added mappings for more buttons. You can now heal yourself and activate the panic button directly from your controller for smoother gameplay.</p><p>I've also added a basic save game feature that automatically saves your progress after each completed level. To showcase these updates, I've put together a short <a href="https://youtu.be/wGnbADiWN3U">YouTube video</a> demonstrating the new features in action.</p><p>In other news, over the weekend I updated and completed the German translation of <a href="https://winmerge.org">WinMerge</a>, an open-source differencing and merging tool I use frequently. The translation hadn't been maintained for over two years and contained 288 untranslated strings, so I brought it up to date using <a href="https://poedit.net">Poedit</a>. My translation work will be included in the next release version (v2.16.52.2), which is expected to be released at the end of November.</p>]]></description>
		<category>shadow-knights</category>
		<category>cpp</category>
		<category>sdl</category>
		<category>winmerge</category>
		<category>poedit</category>
		<category>translation</category>
		<pubDate>Sun, 02 Nov 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Shadow Knights Source Port - Preview Video Released on YouTube</title>
		<link>https://havoc.de/articles/2025-10-16</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-10-16</guid>
		<description><![CDATA[<p>Over a decade ago, I purchased the rights to <a href="https://en.wikipedia.org/wiki/Shadow_Knights">Shadow Knights</a> and <a href="https://en.wikipedia.org/wiki/Hovertank_One">Hovertank</a> - two classic titles originally created by <a href="https://en.wikipedia.org/wiki/Id_Software">id Software</a> and published by <a href="https://en.wikipedia.org/wiki/Softdisk">Softdisk</a> - from <a href="https://en.wikipedia.org/wiki/Softdisk#Current_state">Flat Rock Software</a>. However, development on the source ports took a long backseat for reasons I'd prefer not to disclose.</p><p>The Shadow Knights source port is now fully playable from start to finish. While there's still work to be done, it's far enough along that I'm ready to show it off.</p><p>You can check out the <a href="https://youtu.be/dD5XcPIg-7A">first preview video</a> of the game on YouTube - a small glimpse of what's to come.</p>]]></description>
		<category>shadow-knights</category>
		<category>youtube</category>
		<category>video</category>
		<pubDate>Thu, 16 Oct 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Windows Keyboard Layout "IntAltGr" Released</title>
		<link>https://havoc.de/articles/2025-10-10</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-10-10</guid>
		<description><![CDATA[<p>I recently bought the <a href="https://perixx.com/products/periboard-106?variant=46153288384771">Perixx PERIBOARD-106 M</a> keyboard (black model), inspired by IBM's legendary <a href="https://en.wikipedia.org/wiki/Model_M_keyboard">Model M</a>, for my work laptop I use at home. It uses the <a href="https://en.wikipedia.org/wiki/QWERTY">QWERTY</a> layout, which I prefer for programming. However, I also need to type in German, so I needed an easy way to enter <a href="https://en.wikipedia.org/wiki/Umlaut_(diacritic)">umlauts</a> and the <a href="https://en.wikipedia.org/wiki/%C3%9F">sharp S</a>.</p><p>Fortunately, I had already solved this problem back in April 2022 using the <a href="https://www.microsoft.com/en-us/download/details.aspx?id=102134">Microsoft Keyboard Layout Creator (MSKLC) 1.4</a>, when I first switched to QWERTY at home. I created a custom Windows keyboard layout called "<a href="https://havoc.de/projects.html#iag">IntAltGr</a>", which lets you type umlauts, the sharp S, and various other international characters using the <code>Alt Gr</code> modifier in combination with letter keys. If your keyboard doesn't have an <code>Alt Gr</code> modifier, you can use <code>Ctrl</code> + <code>Alt</code> instead.</p><p>Here are the key combinations for umlauts and the sharp S:</p><ul>  <li>Alt Gr + Q -> ä</li>  <li>Alt Gr + P -> ö</li>  <li>Alt Gr + Y -> ü</li>  <li>Alt Gr + S -> ß</li></ul><p>You might wonder why I didn't just use the built-in US-International layout in Windows. The reason is simple: I dislike having to press the <code>`</code> and <code>'</code> keys twice to type them literally. In my layout, those keys produce their characters immediately with a single press.</p><p>Since I needed this layout again for my work laptop, I decided to rebuild the setup and release it on my website. It probably won't be useful for most people, but it's a convenient way for me to install it quickly on any of my Windows machines.</p><u><strong class="text-justify">Installation</strong></u><p>Simply double-click the <code>setup.exe</code> file to install the keyboard layout. Once installed, you can switch to it by pressing <code>Win</code> + <code>Spacebar</code>.</p><p>You can download "<a href="https://havoc.de/projects.html#iag">IntAltGr</a>" from the <a href="https://havoc.de/downloads.html">Downloads</a> page.</p>]]></description>
		<category>windows</category>
		<category>msklc</category>
		<category>utilities</category>
		<pubDate>Fri, 10 Oct 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Doom-Style Map Editor and Engine Progress Update</title>
		<link>https://havoc.de/articles/2025-10-05</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-10-05</guid>
		<description><![CDATA[<p>I used the weekend to add some quality-of-life features, improve error handling, and implement additional edge case logic for portal creation in the <a href="https://havoc.de/projects.html#portals">Portals</a> Editor.</p><p>Until now, it wasn't possible to change a sector's winding, which meant you had to completely remove and recreate the sector. I've added the ability to toggle the winding now, along with winding markers in the editor so you can easily see if a sector has the correct winding. There's also a new screenshot on the <a href="https://havoc.de/projects.html#portals">projects</a> page showcasing this feature.</p><p>On the engine side, I've been improving the renderer. I also worked on collision detection: it's now possible to walk on slopes.</p>]]></description>
		<category>portals</category>
		<category>cpp</category>
		<category>sdl</category>
		<category>programming</category>
		<pubDate>Sun, 05 Oct 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>havLightbox Version 0.3 Released</title>
		<link>https://havoc.de/articles/2025-09-23</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-09-23</guid>
		<description><![CDATA[<p>I've just released version 0.3 of <a href="https://github.com/Havoc7891/havLightbox">havLightbox</a> on GitHub, my Vanilla JavaScript plugin for displaying images in an overlay lightbox. This update is a complete rewrite of the plugin.</p><p>This new version includes:</p><ul>  <li><strong>Modern Dialog API</strong>: Uses native HTML <i>&lt;dialog&gt;</i> element for better accessibility</li>  <li><strong>Responsive Design</strong>: Automatically adapts to different screen sizes and orientations</li>  <li><strong>Touch Support</strong>: Swipe gestures for navigation on mobile devices</li>  <li><strong>Keyboard Navigation</strong>: Arrow keys for previous / next navigation</li>  <li><strong>Image Counter</strong>: Shows current position in gallery (e.g., "1 / 3")</li>  <li><strong>Optional Captions</strong>: Display custom captions for each image</li>  <li><strong>Smooth Animations</strong>: CSS-based animations for opening / closing</li>  <li><strong>Theme Support</strong>: Automatic light / dark theme detection</li>  <li><strong>Zero Dependencies</strong>: Pure vanilla JavaScript, no external libraries required</li></ul><p>You can see the plugin in action on the <a href="https://havoc.de/projects.html">projects</a> page.</p>]]></description>
		<category>havlightbox</category>
		<category>javascript</category>
		<category>utilities</category>
		<category>programming</category>
		<pubDate>Tue, 23 Sep 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>More Old Projects (Re-)Released</title>
		<link>https://havoc.de/articles/2025-09-17</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-09-17</guid>
		<description><![CDATA[<p>This time around, I explicitly searched through some old hard drives for old projects. Are they really worth a (re-)release? Probably not - but they were finished, so why not.</p><p>I found a small single-player map for <a href="https://store.steampowered.com/app/2229830/Command__Conquer_and_The_Covert_Operations">Command &amp; Conquer: Tiberian Dawn</a> called <a href="https://havoc.de/projects.html#dt">Dark Tide</a>, which I created on September 4, 2005 but never released. Yesterday, I updated it to work with the <a href="https://store.steampowered.com/app/1213210/Command__Conquer_Remastered_Collection">Remastered edition</a> and uploaded it to the <a href="https://steamcommunity.com/sharedfiles/filedetails/?id=3569440498">Steam Workshop</a>. However, since the map still isn't showing up in the game's User Maps browser, I've also put together a ZIP release as an alternative download. That way, you can install it manually if you'd like to spend a few minutes playing it. You can download the map <a href="https://havoc.de/downloads.html">here</a>.</p><p>I also tracked down an old <a href="https://store.steampowered.com/app/10/CounterStrike">Counter-Strike</a> aim map I made on September 7, 2004 for my old clan, called <a href="https://havoc.de/projects.html#wa">Wild Aim</a>. The map is pretty simple, but it served its purpose back in the day. I've updated the accompanying readme, but the map itself is unchanged from the original release. You can download it <a href="https://havoc.de/downloads.html">here</a>.</p><p>I've plenty of other projects I could potentially release, but I'd need to track them down first and some would require extra work to run on newer operating systems. I'm not really willing to spend that time right now since I've new projects to focus on... but never say never, right?</p>]]></description>
		<category>command-and-conquer</category>
		<category>counter-strike</category>
		<category>map</category>
		<category>steam</category>
		<pubDate>Wed, 17 Sep 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>havGSD Version 0.2 Released and Times of Darkness Walkthrough on YouTube</title>
		<link>https://havoc.de/articles/2025-09-13</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-09-13</guid>
		<description><![CDATA[<p>I've just released version 0.2 of <a href="https://havoc.de/projects.html#havGSD">havGSD</a>, which adds support for externally modified files. You can download it from the <a href="https://havoc.de/downloads.html">downloads</a> page or from the <a href="https://github.com/Havoc7891/havGSD">GitHub repository</a>, where the source code is also available.</p><p>I've also created a <a href="https://youtu.be/72SPZdShLJc">walkthrough video</a> for <a href="https://havoc.de/projects.html#tod">Time of Darkness</a> and uploaded it to YouTube. It's for people who don't own <a href="https://store.steampowered.com/app/70/HalfLife">Half-Life</a>, don't want to play the mod, or got stuck in one of the maps, since some of the puzzles aren't completely obvious.</p>]]></description>
		<category>codelite</category>
		<category>plugin</category>
		<category>cpp</category>
		<category>wxwidgets</category>
		<category>programming</category>
		<category>times-of-darkness</category>
		<category>half-life</category>
		<category>mod</category>
		<category>youtube</category>
		<category>video</category>
		<pubDate>Sat, 13 Sep 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Projects and Downloads Page Redesigned</title>
		<link>https://havoc.de/articles/2025-09-02</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-09-02</guid>
		<description><![CDATA[<p>After re-releasing <a href="https://havoc.de/projects.html#tod">Time of Darkness</a>, I realized the <a href="https://havoc.de/projects.html">projects</a> page had grown far too long. So, I decided it was time for a redesign. While I was at it, I also gave the <a href="https://havoc.de/downloads.html">downloads</a> page a makeover to improve usability on smaller screen resolutions.</p><p>Honestly, I might have gone a little overboard with the <a href="https://havoc.de/projects.html">projects</a> page. It now includes not just a search function, but also filters for projects, types, genres, platforms, and technologies used. That's what happens when I dive into something: I just can't stop until I'm completely satisfied.</p><p>I also revamped the image gallery, which is now much more mobile-friendly. For now, it's still tied to the site, but I'm planning to separate it and release it as a new version of <a href="https://github.com/Havoc7891/havLightbox">havLightbox</a>.</p>]]></description>
		<category>update</category>
		<category>website</category>
		<pubDate>Tue, 02 Sep 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Times of Darkness Re-Released</title>
		<link>https://havoc.de/articles/2025-08-26</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-08-26</guid>
		<description><![CDATA[<p>While searching through an old hard drive for some code, I came across something I hadn't thought about in decades: my single-player Half-Life mod, Times of Darkness, originally released in September 2003.</p><p>Back then, I packaged the mod using an installer tool from <a href="https://www.clickteam.com">Clickteam</a>. Honestly, I didn't expect the installer to work on Windows 11 anymore - but to my surprise, it did! Of course, that only meant I could install the files; I still wasn't sure if the mod itself would actually run.</p><p>So, I fired up Steam, downloaded the original version of Half-Life, installed the mod in its proper location, and gave it a try. And... it still works! At that point I thought: "Well, why not release it again?"</p><p>You can download the mod <a href="https://havoc.de/downloads.html">here</a>. Details about the story, installation instructions, and screenshots are available on the <a href="https://havoc.de/projects.html#tod">projects</a> page.</p><p>After rediscovering Times of Darkness, I was curious to see if I could also track down the work-in-progress build of its canceled sequel, Times of Darkness 2. And I did. The mod itself will never be released, but I've decided to at least release the intro track I composed for it. You'll find the song along with details on its creation on the <a href="https://havoc.de/projects.html#tod">projects</a> page under Times of Darkness, or you can download it directly from <a href="https://havoc.de/downloads.html">here</a>.</p>]]></description>
		<category>times-of-darkness</category>
		<category>half-life</category>
		<category>mod</category>
		<pubDate>Tue, 26 Aug 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>havCurCtr Released and Projects Page Update</title>
		<link>https://havoc.de/articles/2025-08-24</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-08-24</guid>
		<description><![CDATA[<p>You know when you're using multiple monitors, accidentally push your mouse across the desk, and suddenly lose track of where the mouse cursor went? Yeah, that happened to me today. Afterward, I thought: "Is there a Windows shortcut to center the mouse cursor on the primary monitor?" Turns out, there isn't.</p><p>So, I sat down for about two hours and programmed a WinForms-based background app in C# that registers a global hotkey to center the mouse cursor on the primary monitor. I called the app <a href="https://havoc.de/projects.html#havCurCtr">havCurCtr</a>. You can download it from <a href="https://havoc.de/downloads.html">here</a>. You need Windows 10 or later and the <a href="https://dotnet.microsoft.com/en-us/download/dotnet/8.0/runtime">.NET 8 Desktop Runtime</a> to run this app. The source code is available on <a href="https://github.com/Havoc7891/havCurCtr">GitHub</a> under the MIT license. As usual, there's also a screenshot on the <a href="https://havoc.de/projects.html#havCurCtr">projects</a> page.</p><p>I've also added <a href="https://havoc.de/projects.html#havGSD">havGSD</a> to the projects and downloads page now. I didn't do it when I first released it, because I didn't want to include GitHub projects there, but I changed my mind - if it's an app or plugin (and not just a library), I'll include it.</p>]]></description>
		<category>havcurctr</category>
		<category>csharp</category>
		<category>windows</category>
		<category>tools</category>
		<category>update</category>
		<category>website</category>
		<pubDate>Sun, 24 Aug 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>One Year with Duolingo - Is It Actually Effective?</title>
		<link>https://havoc.de/articles/2025-07-27</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-07-27</guid>
		<description><![CDATA[<a href="https://havoc.de/assets/img/first_duoversary.png" title="First Duoversary (Click to enlarge)"><img src="https://havoc.de/assets/img/first_duoversary_thumbnail.png" alt="First Duoversary"></a><br><small>The email I received was in German, but I translated it into the English version.</small><p>I received an email from Duolingo today letting me know that it's my first Duoversary, and I figured this was a good opportunity to reflect on my experience with the app - and maybe brag a little about my achievements.</p><p>Let's get the bragging out of the way first: I've maintained my daily streak so far, even if I don't always complete all the daily quests. I've reached the highest league (Diamond League), remained there for 26 consecutive weeks so far, and even secured first place in the Diamond Tournament back in June. While I'm not particularly driven by competition, achievements do tend to spark a bit of that competitive edge in me.</p><a href="https://havoc.de/assets/img/duolingo_achievements_1.png" title="Duolingo Achievements 1/2 (Click to enlarge)"><img src="https://havoc.de/assets/img/duolingo_achievements_1_thumbnail.png" alt="Duolingo Achievements 1/2"></a><a href="https://havoc.de/assets/img/duolingo_achievements_2.png" title="Duolingo Achievements 2/2 (Click to enlarge)"><img src="https://havoc.de/assets/img/duolingo_achievements_2_thumbnail.png" alt="Duolingo Achievements 2/2"></a><br><small>My achievements from early June.</small><p>I've unlocked almost all the achievements - except for the friend-related ones. I've chosen the lone wolf route, which, in my opinion, makes the accomplishments all the more rewarding. I'll probably go for the friend-related ones eventually, just to have them, though I haven't really cared so far. That said, Duolingo has occasionally forced friend streaks and friend quests on me with randomly selected users, without giving me the option to opt out. I don't mind the concept in general, but I do question why it has to be mandatory. Anyway, that's enough about the gamification side of things.</p><p>So, the big question: Do you actually learn something with this app? In my experience - yes, you do. It depends heavily on the subject, though. When it comes to languages, it's definitely effective. For example, I was already fluent in English before I started using Duolingo, but I've still picked up new vocabulary, useful phrases, and subtle grammar improvements. I'd say it's a solid tool for language learning - great for daily practice and vocabulary, though not enough to develop strong speaking and listening skills on its own.</p><p>Beyond languages, I also tried the music lessons. They're useful for building a basic understanding of how to read sheet music, but not much more. Don't expect to walk away able to play an instrument (aside from maybe a few simple melodies on a keyboard).</p><p>All in all, if you're consistent and know what to expect, Duolingo can really help build foundational skills - especially in languages.</p>]]></description>
		<category>duolingo</category>
		<pubDate>Sun, 27 Jul 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Minor Website Updates</title>
		<link>https://havoc.de/articles/2025-07-07</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-07-07</guid>
		<description><![CDATA[<p>I've made some minor changes to the website layout and improved compatibility for users who have JavaScript disabled. I also updated the copyright notice to reflect the original publication year of the website.</p>]]></description>
		<category>update</category>
		<category>website</category>
		<pubDate>Mon, 07 Jul 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Third Video of My Doom-Style Map Editor Released on YouTube</title>
		<link>https://havoc.de/articles/2025-06-30</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-06-30</guid>
		<description><![CDATA[<p>I've just posted a new <a href="https://youtu.be/XaGywknkmSk">YouTube video</a> showcasing some recent additions to the '<a href="https://havoc.de/projects.html#portals">Portals</a>' editor. This update features the texture selector/viewer and the vertex manipulation tool. As always, a new development screenshot is available on the <a href="https://havoc.de/projects.html#portals">projects</a> page.</p><p>This will be the last video focusing on the editor for now - the next one will highlight the current state of the '<a href="https://havoc.de/projects.html#portals">Portals</a>' game engine. Stay tuned!</p>]]></description>
		<category>portals</category>
		<category>editor</category>
		<category>cpp</category>
		<category>sdl</category>
		<category>programming</category>
		<category>youtube</category>
		<category>video</category>
		<pubDate>Mon, 30 Jun 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>New Domain, New Name, and Projects Page Update</title>
		<link>https://havoc.de/articles/2025-06-19</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-06-19</guid>
		<description><![CDATA[<p>The website has a new primary domain: <a href="https://havoc.de">https://havoc.de</a>. The old domain, <a href="https://havocspage.net">https://havocspage.net</a>, will continue to function but now redirects to the new one. Alongside this change, the website has been renamed from "Havoc's Page" to "Havoc's Website". It was originally called "Havoc's Page" because my web presence began as a single page, but it quickly evolved into a full website. The old name stuck mainly because I couldn't secure a suitable top-level domain for just "Havoc" - until now.</p><p>I've also updated the <a href="https://havoc.de/projects.html">projects</a> page - it now includes an additional older project, and the version descriptions have been streamlined for clarity.</p><p>Work on the '<a href="https://havoc.de/projects.html#portals">Portals</a>' editor is progressing steadily and is now close to supporting the engine's core features.</p>]]></description>
		<category>update</category>
		<category>website</category>
		<pubDate>Thu, 19 Jun 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Automating My GitHub Profile README with RSS, Python, and a GitHub Action</title>
		<link>https://havoc.de/articles/2025-05-31</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-05-31</guid>
		<description><![CDATA[<p>Today, I set out to add a README to my <a href="https://github.com/Havoc7891">GitHub profile</a>. While browsing for inspiration on how to design it, I came across the article "<a href="https://simonwillison.net/2020/Jul/10/self-updating-profile-readme">Building a self-updating profile README for GitHub</a>."</p><p>I found the idea intriguing, so I built something similar - also using a GitHub Action and Python, just like the author of the article. Now, my README updates automatically with the latest news entries from my RSS feed. You can check out the code <a href="https://github.com/Havoc7891/Havoc7891">here</a>.</p><p>It wasn't what I originally had in mind when I thought about creating a profile README, but it turned out to be a fun little side project - especially since I haven't done much automation with GitHub before - and a great way to keep my profile dynamic and current.</p><p>Now, I'm back to working on the '<a href="https://havoc.de/projects.html#portals">Portals</a>' editor.</p>]]></description>
		<category>github</category>
		<category>python</category>
		<category>programming</category>
		<pubDate>Sat, 31 May 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Website and Project Updates</title>
		<link>https://havoc.de/articles/2025-05-28</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-05-28</guid>
		<description><![CDATA[<p>I've updated the <a href="https://havoc.de/projects.html">projects</a> page. Downloads now include icons indicating which operating system each application or game supports. I've also added a convenient "Back to Top" button.</p><p>My main focus remains on the '<a href="https://havoc.de/projects.html#portals">Portals</a>' editor. I've refined the immediate mode GUI framework to streamline the creation of dialogs. In hindsight, I should have invested more time into building the editor early on instead of focusing primarily on the engine. Creating simple test maps by hand was manageable, since I use the <a href="https://json.org">JSON</a> format for the maps (which I plan to replace with a <a href="https://havoc.de/articles/2024-12-14.html">binary format</a> later on). But when it comes to building real maps, manual creation just doesn't cut it - so I'm implementing editor-side support for all existing engine features.</p><p>In addition to work on the '<a href="https://havoc.de/projects.html#portals">Portals</a>' editor, I've also made progress on <a href="https://havoc.de/projects.html#havIDE">havIDE</a> (my C++ IDE). It now features a full dark mode, and I've started implementing debugging support via <a href="https://sourceware.org/gdb">GDB</a>. You can check out a new development screenshot on the <a href="https://havoc.de/projects.html#havIDE">projects</a> page.</p>]]></description>
		<category>update</category>
		<category>website</category>
		<category>portals</category>
		<category>havide</category>
		<pubDate>Wed, 28 May 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Second Video of My Doom-Style Map Editor Released on YouTube and a Peek at My C++ IDE</title>
		<link>https://havoc.de/articles/2025-04-28</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-04-28</guid>
		<description><![CDATA[<p>I've migrated my Doom-style engine, 'Portals' (working title), to <a href="https://libsdl.org">SDL 3.0</a>. Currently, I'm focusing on the map editor, which I had neglected for quite some time. I posted a <a href="https://youtu.be/A2CiVDu1JuU">YouTube video</a> showcasing some of the new additions to the editor, namely the implementation of an <a href="https://en.wikipedia.org/wiki/Immediate_mode_(computer_graphics)">immediate mode GUI</a> and a solution for overlapping sector lines. As usual, a new development screenshot is available on the <a href="https://havoc.de/projects.html#portals">projects</a> page.</p><p>In addition to 'Portals', I've also started working on my own C++ IDE called havIDE, using C++23 and wxWidgets. What began as a curiosity project to see how challenging it would be is now becoming a serious project. I'll likely use it for future C++ work. For now, I've shared a few development screenshots on the <a href="https://havoc.de/projects.html#havIDE">projects</a> page, if you're interested in seeing the progress.</p>]]></description>
		<category>portals</category>
		<category>editor</category>
		<category>cpp</category>
		<category>sdl</category>
		<category>havide</category>
		<category>wxwidgets</category>
		<category>tools</category>
		<category>programming</category>
		<category>youtube</category>
		<category>video</category>
		<pubDate>Mon, 28 Apr 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>havGSD Released</title>
		<link>https://havoc.de/articles/2025-03-02</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-03-02</guid>
		<description><![CDATA[<p>I've released havGSD, a simple task list plugin for <a href="https://codelite.org">CodeLite</a>, available on GitHub.</p><p>While CodeLite allows searching for keywords in code comments via the Find in Files dialog, I wanted a more integrated solution that doesn't rely on search. This plugin provides a built-in task list directly within CodeLite, making it easier to track TODOs and other notes in C++ projects.</p><p>You can find it here: <a href="https://github.com/Havoc7891/havGSD">https://github.com/Havoc7891/havGSD</a></p>]]></description>
		<category>codelite</category>
		<category>plugin</category>
		<category>cpp</category>
		<category>wxwidgets</category>
		<category>programming</category>
		<pubDate>Sun, 02 Mar 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>The Pushing Point Released (Updated: February 22)</title>
		<link>https://havoc.de/articles/2025-02-20</link>
		<guid isPermaLink="true">https://havoc.de/articles/2025-02-20</guid>
		<description><![CDATA[<p><a href="https://libsdl.org">SDL3</a> was officially released a while ago. Since the <a href="https://havoc.de/projects.html#portals">Portals engine</a> is still a work in progress, I plan to migrate it from SDL2 to SDL3. To test the transition, I decided to use my discontinued OpenGL engine - originally developed for <a href="https://bleakgames.com/games.html">Shady Business</a> - as a testbed. (Side note: Shady Business isn't canceled; it'll just use the Portals engine instead.)</p><p>Surprisingly, the migration to SDL3 was straightforward! It took just two hours, and everything transitioned without any major issues. With the code successfully updated, I thought, "Why let this engine go to waste? Why not use it to create a simple game?"</p><p>I've always wanted to make a <a href="https://en.wikipedia.org/wiki/Sokoban">Sokoban</a> clone, so I gave it a shot and built a 3D version using this engine. The result is The Pushing Point. You can find more details and screenshots on the <a href="https://havoc.de/projects.html#tpp">projects</a> page and download it from the <a href="https://havoc.de/downloads.html">downloads</a> page.</p><p>I've also released a <a href="https://youtu.be/5sj7OlP0GBQ">YouTube video</a> where I complete the first level - feel free to check it out!</p><em>Edit: Oops, I originally called the other game "Shady Business," but that was just the working title before I changed the name to "Directive Chronocry." Well, some trivia for you, I guess.</em>]]></description>
		<category>the-pushing-point</category>
		<category>game</category>
		<category>cpp</category>
		<category>sdl</category>
		<category>programming</category>
		<category>youtube</category>
		<category>video</category>
		<pubDate>Thu, 20 Feb 2025 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Miscellaneous Odds and Ends: From LinkedIn to Duolingo</title>
		<link>https://havoc.de/articles/2024-12-26</link>
		<guid isPermaLink="true">https://havoc.de/articles/2024-12-26</guid>
		<description><![CDATA[<p>First off, I've added a link to this website for my recently created <a href="https://linkedin.com/in/rene-nicolaus-109184342">LinkedIn profile</a> - feel free to check it out!</p><p>On another note, I started using the <a href="https://duolingo.com">Duolingo</a> app in July this year and received my Duolingo Year-in-Review a while ago. Apparently, I'm in the top 2% of all learners, which, honestly, just confirms what I've always known: I'm a linguistic (and musical) genius in the making. Who am I to argue?</p>]]></description>
		<category>linkedin</category>
		<category>duolingo</category>
		<pubDate>Thu, 26 Dec 2024 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>havSeriLite Released</title>
		<link>https://havoc.de/articles/2024-12-14</link>
		<guid isPermaLink="true">https://havoc.de/articles/2024-12-14</guid>
		<description><![CDATA[<p>While working on the editor for my Doom-style engine, '<a href="https://havoc.de/projects.html#portals">Portals</a>' (Working Title), I realized that my JSON library, <a href="https://github.com/Havoc7891/havJSON">havJSON</a>, is no longer a sustainable solution. Although the library is powerful, its usage isn't particularly intuitive - I often find myself referencing previous projects or consulting my own README.md file on GitHub to accomplish tasks. Additionally, the code for reading and writing JSON files has become increasingly unreadable due to the way the library works.</p><p>To address this, I created a smaller serialization library called havSeriLite. Loosely based on the JSON and BSON formats, this library is much easier to use. While it doesn't use a standardized format and isn't as feature-rich as havJSON, it provides all the functionality I need for the '<a href="https://havoc.de/projects.html#portals">Portals</a>' editor and game engine. I've released <a href="https://github.com/Havoc7891/havSeriLite">havSeriLite</a> on GitHub under the MIT license.</p>]]></description>
		<category>havserilite</category>
		<category>cpp</category>
		<category>library</category>
		<category>programming</category>
		<pubDate>Sat, 14 Dec 2024 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Escape Made Easy (E.M.E.) Version 0.3 Released</title>
		<link>https://havoc.de/articles/2024-11-19</link>
		<guid isPermaLink="true">https://havoc.de/articles/2024-11-19</guid>
		<description><![CDATA[<p>I've just released version 0.3 of '<a href="https://havoc.de/projects.html#eme">Escape Made Easy (E.M.E.)</a>'. You can download the update on the <a href="https://havoc.de/downloads.html">downloads</a> page.</p><p>This update includes the following changes and fixes:</p><ul>  <li>The game no longer requires the ABGR8888 pixel format.</li>  <li>Fixed flickering dialogs in the main menu.</li>  <li>Fixed an in-game rendering issue where the game map was corrupted by the level up dialog.</li>  <li>Fixed floor numbers in the "You are now on floor #x of the prison complex." messages.</li>  <li>Added the ability to return to the previous floor. Note: both the previous and next floors are regenerated with new items and enemies. You will not receive a health bonus when returning to the previous floor, but you will receive a health bonus when returning to the next floor from a previous one.</li></ul>]]></description>
		<category>eme</category>
		<category>game</category>
		<category>cpp</category>
		<category>sdl</category>
		<category>programming</category>
		<category>update</category>
		<pubDate>Tue, 19 Nov 2024 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Seventh Video of My Doom-Style Engine Released on YouTube</title>
		<link>https://havoc.de/articles/2024-11-15</link>
		<guid isPermaLink="true">https://havoc.de/articles/2024-11-15</guid>
		<description><![CDATA[<p>I've just released a new <a href="https://youtu.be/cfztKCjC_DE">YouTube video</a> highlighting some updates to my Doom-Style engine, 'Portals' (Working Title). In the video, I give a sneak peek at the conversation system, but the main highlight is the screen melt effect, which closely resembles the iconic one from Doom. I've always been a fan of this effect, and I'm happy to say that implementing it was easier than I anticipated.</p>]]></description>
		<category>portals</category>
		<category>cpp</category>
		<category>sdl</category>
		<category>programming</category>
		<category>youtube</category>
		<category>video</category>
		<pubDate>Fri, 15 Nov 2024 00:00:00 GMT</pubDate>
	</item>
	<item>
		<title>Havoc 3D Version 0.3.1 Released</title>
		<link>https://havoc.de/articles/2024-11-02</link>
		<guid isPermaLink="true">https://havoc.de/articles/2024-11-02</guid>
		<description><![CDATA[<p>I've just released version 0.3.1 of '<a href="https://havoc.de/projects.html#hv3d">Havoc 3D</a>'. You can download the update on the <a href="https://havoc.de/downloads.html">downloads</a> page.</p><p>This update includes the following changes and fixes:</p><ul>  <li>Increased the number of mixing channels from 8 to 16.</li>  <li>Added a slight key delay to intermission screens.</li>  <li>Added missing ceiling and floor textures in map 2.</li>  <li>Improved the wording in the help section of the map editor.</li>  <li>Added an additional "--windowsize <width> <height>" argument (e.g., "--windowsize 640 480") to change the window size in windowed mode.</height></width></li></ul>]]></description>
		<category>havoc-3d</category>
		<category>game</category>
		<category>cpp</category>
		<category>sdl</category>
		<category>programming</category>
		<category>update</category>
		<pubDate>Sat, 02 Nov 2024 00:00:00 GMT</pubDate>
	</item>
</channel>
</rss>
