<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://cxong.github.io/cdogs-sdl/feed.xml" rel="self" type="application/atom+xml" /><link href="https://cxong.github.io/cdogs-sdl/" rel="alternate" type="text/html" /><updated>2026-03-04T12:31:56+00:00</updated><id>https://cxong.github.io/cdogs-sdl/feed.xml</id><title type="html">C-Dogs SDL</title><subtitle>Classic overhead shoot-em-up game</subtitle><entry><title type="html">Super 2D Noah’s Ark Retrospective</title><link href="https://cxong.github.io/cdogs-sdl/other/2026/03/04/s2dna-retro.html" rel="alternate" type="text/html" title="Super 2D Noah’s Ark Retrospective" /><published>2026-03-04T00:00:00+00:00</published><updated>2026-03-04T00:00:00+00:00</updated><id>https://cxong.github.io/cdogs-sdl/other/2026/03/04/s2dna-retro</id><content type="html" xml:base="https://cxong.github.io/cdogs-sdl/other/2026/03/04/s2dna-retro.html"><![CDATA[<p>The <a href="https://cxong.github.io/cdogs-sdl/release/2026/01/31/c-dogs-2.4.0.html">2.4.0 release</a> featured <em>Super 2D Noah’s Ark</em>, the 4th Wolf3D clone to be made available as a C-Dogs SDL mod. Work began in earnest two years prior, despite the game being a fairly conventional Wolf3D clone, with few unique mechanics (notably the quiz system). So why did it take so long, considering a similar effort (<a href="https://cxong.github.io/cdogs-sdl/release/2021/12/03/c-dogs-1.2.0.html">Spear of Destiny mission packs</a>, which was mostly reskins) took only 2 months?</p>

<h1 id="the-first-commits">The first commits</h1>

<p><img src="https://raw.githubusercontent.com/cxong/cdogs-sdl/gh-pages/_posts/s3dna_e1l1.jpg" alt="Level 1" /></p>

<p>If you’re familiar with <a href="https://wl6.fandom.com/wiki/List_of_Wolf3D_engine_games#Rise_of_the_engine_(1992_-_1995)">Wolf3D-engine games</a> you might be wondering why, after <a href="https://www.mobygames.com/game/306/wolfenstein-3d/"><em>Wolfenstein 3D</em></a>, <a href="https://www.mobygames.com/game/311/spear-of-destiny/"><em>Spear of Destiny</em></a> and the <a href="https://asecretarea.com/2015/06/19/spear-of-destiny-mission-packs/">mission packs</a>, would I choose <a href="https://wisdomtree.itch.io/s3dna"><em>Super 3D Noah’s Ark</em> (S3DNA)</a> as the next Wolf3D mod to make, given much better games like <a href="https://www.mobygames.com/game/786/blake-stone-aliens-of-gold/"><em>Blake Stone</em></a> and <a href="https://www.mobygames.com/game/418/rise-of-the-triad-dark-war/"><em>Rise of the Triad</em></a>. <em>Blake Stone</em> was indeed my first choice, having tinkered <a href="https://github.com/cxong/cwolfmap/commit/aaa1a26601fe6c44ffe4227398dd34409d2277bc">here and there</a> with reverse engineering and loading its data.</p>

<p>However, after a big effort making <a href="https://www.mobygames.com/game/1055/cyberdogs/"><em>Cyberdogs</em></a> for the <a href="https://cxong.github.io/cdogs-sdl/release/2024/02/17/c-dogs-2.0.0.html">2.0 release</a> I was eager to tackle a smaller project, and after studying <em>Blake Stone</em> some more I realised it was going to take a lot more work than anticipated - it was filled with extra features like a dialog system, item dispensers, one-way doors, teleporters and more. On the other hand, I suspected that S3DNA would be pretty low effort, given that its only unique mechanic was the quiz system - even the melon launchers were reskins of <a href="https://wl6.fandom.com/wiki/Wolfenstein_3D_(MAC)">Mac Wolfenstein 3D’s</a> flamethrower and rocket launcher. My suspicious were proven correct as I was able to get the level loading after only <a href="https://github.com/cxong/cwolfmap/commit/5da9df40d1d61af064160f1fc1644e5d3366a5ac">adding a few tile definitions</a>. At this point I was pretty optimistic: this was only going to take a few months of sprite work, making a few new weapons and characters, and implementing the interesting quiz system. This will be a cakewalk! <sub>Narrator: it was not a cakewalk</sub></p>

<p>Quick sidebar: S3DNA, at least the 20th anniversary version that’s <a href="https://store.steampowered.com/app/371180/Super_3D_Noahs_Ark/">available from Steam</a>, is not quite a conventional Wolf3D package. Some of its data is stored in <a href="https://www.doomwiki.org/wiki/WAD">WAD files</a>, and the music is OGG instead of <a href="https://www.vgmpf.com/Wiki/index.php?title=IMF">IMF</a> - oddities likely related to <a href="https://maniacsvault.net/ecwolf/">ECWolf’s ZDoom inspirations</a>. Fortunately these are both <a href="https://github.com/cxong/cwolfmap/commit/6d5eb31de2b78c6d7a7173caf0c33bf685c268ff">quite simple to decode</a>.</p>

<h1 id="honeymoon-phase">Honeymoon phase</h1>

<video muted="" autoplay="" loop="">
    <source src="https://raw.githubusercontent.com/cxong/cdogs-sdl/gh-pages/_posts/s3dna_levels.mp4" type="video/mp4" />
</video>

<p>The first few months were a breeze. As expected, getting the game up and running and implementing the first few levels was quite easy: the level format was pretty similar to Wolf3D, with only a few oddities here and there, and respriting all the wall tiles only took a month, and respriting items another.</p>

<p>Other work took longer - implementing the weapons, removing the features that make S3DNA special like sleeping animals, slingshots instead of gun barrels that can overheat, lack of blood and so on. Some more reverse engineering was required to figure out what the weapon and enemy stats should be, since unlike Wolf3D, these haven’t been meticulously documented by fans over the years. This is where the first inklings of how S3DNA is no simple Wolf3D clone appeared: the enemies are not mere reskins of Wolf3D, with different stats and behaviour. Most of the later enemies are bullet sponges so you’ll be relying on the <del>chaingun</del>super feeder to spray copious amounts of ammo at them, and/or diligently scouring the secrets to find hard-hitting melon ammo. But more importantly for C-Dogs SDL, these animals aren’t humanoid so I can’t just dress up the human characters with special hats and facial hair like with Wolf3D…</p>

<h1 id="the-grind">The grind</h1>

<video muted="" autoplay="" loop="">
    <source src="https://raw.githubusercontent.com/cxong/cdogs-sdl/gh-pages/_posts/ostrich.mp4" type="video/mp4" />
</video>

<p>The animals. Argh the animals! I made a <a href="https://cxong.github.io/2017/03/3d-rendered-pixel-sprites">3D-to-2D pipeline</a> so I can one-shot a bunch of character sprites after some up-front modelling work, which I am not good at and absolutely do not enjoy. Well now there are all these animals so the human model can’t be reused, I need to model and animate each. and. every. one. of these animals. I did take shortcuts - oh yeah there were plenty, like stretching and deforming existing models to the limit, reusing heads to represent unrelated animals, taking creative liberties like classifying elephant trunk+tusks as a type of “facial hair” - but each animal was a slog, taking a month or two each to make. It was so demoralising that I took side quests like making an <a href="https://mastodon.gamedev.place/@congusbongus/113531278910361759">easter egg</a> or a whole different <a href="https://cxong.github.io/cdogs-sdl/progress/other/2025/02/08/high-scores.html">major feature release</a>.</p>

<p>This phase of the project took about a year, which was pretty much half the total project time.</p>

<h1 id="the-timeline">The timeline</h1>

<p>And that pretty much describes the project. It was about 10% work on extracting and interpreting the game data, 10% sprite work, 20% special features like quizzes and weapons, 10% side quests to protect my sanity, and <strong>50% making the damn animals</strong>. Usually when adding large content releases like this has side benefits, as the additional content enriches the base C-Dogs SDL game with new textures, sound effects, hats and so on, but not in this case - when will a sci-fi shooter ever need elephants and giraffes??? Well, maybe I’ll just have to add a special zoo level in one of the campaigns…</p>

<p>It’s been more than a month since the release so I’ve had time to mentally recover. Onward with further C-Dogs SDL development!</p>]]></content><author><name></name></author><category term="other" /><summary type="html"><![CDATA[The 2.4.0 release featured Super 2D Noah’s Ark, the 4th Wolf3D clone to be made available as a C-Dogs SDL mod. Work began in earnest two years prior, despite the game being a fairly conventional Wolf3D clone, with few unique mechanics (notably the quiz system). So why did it take so long, considering a similar effort (Spear of Destiny mission packs, which was mostly reskins) took only 2 months?]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://raw.githubusercontent.com/cxong/cdogs-sdl/gh-pages/_posts/s3dna_e1l1.jpg" /><media:content medium="image" url="https://raw.githubusercontent.com/cxong/cdogs-sdl/gh-pages/_posts/s3dna_e1l1.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">C-Dogs 2.4.0 Released!</title><link href="https://cxong.github.io/cdogs-sdl/release/2026/01/31/c-dogs-2.4.0.html" rel="alternate" type="text/html" title="C-Dogs 2.4.0 Released!" /><published>2026-01-31T00:00:00+00:00</published><updated>2026-01-31T00:00:00+00:00</updated><id>https://cxong.github.io/cdogs-sdl/release/2026/01/31/c-dogs-2.4.0</id><content type="html" xml:base="https://cxong.github.io/cdogs-sdl/release/2026/01/31/c-dogs-2.4.0.html"><![CDATA[<p>This is a very special release. 2.4.0, it looks like a minor release, but it features a big new mod: <strong>Super 2D Noah’s Ark</strong>!</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/EduteSjTsZk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen=""></iframe>

<p>After <a href="https://cxong.github.io/cdogs-sdl/release/2021/08/21/c-dogs-1.0.0.html">Wolfenstein 3D, Spear of Destiny</a> and the <a href="https://cxong.github.io/cdogs-sdl/release/2021/12/03/c-dogs-1.2.0.html">mission packs</a>, this is another Wolf3D mod of the obscure yet highly noteworthy <a href="https://en.wikipedia.org/wiki/Super_3D_Noah%27s_Ark"><em>Super 3D Noah’s Ark</em></a>. Critics derided it as a lazy reskin of Wolf3D but <a href="https://cxong.github.io/2024/03/in-the-shadow-of-doom">as I’ve written before</a>, it’s fairly high quality when it comes to Wolf3D clones, and as I hope you’ll find, it’s rather fun, especially when played in 2D!</p>

<p>Like the other Wolf3D mods, to play this you need to get a copy of the game, which is <a href="https://store.steampowered.com/app/371180/Super_3D_Noahs_Ark/">available on Steam</a>. So don’t wait, pick up your <del>machine gun</del> slingshot and <del>kill</del> feed some animals!</p>

<p>Once again this release contains a bunch of fixes and enhancements including those from new contributors. See the release notes for details.</p>

<p>Download free from itch.io: <a href="https://congusbongus.itch.io/cdogs-sdl/purchase">https://congusbongus.itch.io/cdogs-sdl/purchase</a></p>

<p>Release notes: <a href="https://github.com/cxong/cdogs-sdl/releases/tag/2.4.0">https://github.com/cxong/cdogs-sdl/releases/tag/2.4.0</a></p>]]></content><author><name></name></author><category term="release" /><summary type="html"><![CDATA[This is a very special release. 2.4.0, it looks like a minor release, but it features a big new mod: Super 2D Noah’s Ark!]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://i3.ytimg.com/vi/EduteSjTsZk/mqdefault.jpg" /><media:content medium="image" url="https://i3.ytimg.com/vi/EduteSjTsZk/mqdefault.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">C-Dogs 2.3.2 Released!</title><link href="https://cxong.github.io/cdogs-sdl/release/2025/08/23/c-dogs-2.3.2.html" rel="alternate" type="text/html" title="C-Dogs 2.3.2 Released!" /><published>2025-08-23T00:00:00+00:00</published><updated>2025-08-23T00:00:00+00:00</updated><id>https://cxong.github.io/cdogs-sdl/release/2025/08/23/c-dogs-2.3.2</id><content type="html" xml:base="https://cxong.github.io/cdogs-sdl/release/2025/08/23/c-dogs-2.3.2.html"><![CDATA[<p>Hey there, another out-of-band release that fixes crashes when loading classic campaigns. These are basically the ones from the mission pack. Reminder that you can get these from the <a href="https://cxong.github.io/cdogs-sdl/downloads.html">downloads page</a>, and contains a hodgepodge of user-created campaigns from back in the day. The quality is often lacking but it can be fun to mix things up a bit!</p>

<p>Download free from itch.io: <a href="https://congusbongus.itch.io/cdogs-sdl/purchase">https://congusbongus.itch.io/cdogs-sdl/purchase</a></p>

<p>Release notes: <a href="https://github.com/cxong/cdogs-sdl/releases/tag/2.3.2">https://github.com/cxong/cdogs-sdl/releases/tag/2.3.2</a></p>]]></content><author><name></name></author><category term="release" /><summary type="html"><![CDATA[Hey there, another out-of-band release that fixes crashes when loading classic campaigns. These are basically the ones from the mission pack. Reminder that you can get these from the downloads page, and contains a hodgepodge of user-created campaigns from back in the day. The quality is often lacking but it can be fun to mix things up a bit!]]></summary></entry><entry><title type="html">C-Dogs 2.3.1 Released!</title><link href="https://cxong.github.io/cdogs-sdl/release/2025/08/09/c-dogs-2.3.1.html" rel="alternate" type="text/html" title="C-Dogs 2.3.1 Released!" /><published>2025-08-09T00:00:00+00:00</published><updated>2025-08-09T00:00:00+00:00</updated><id>https://cxong.github.io/cdogs-sdl/release/2025/08/09/c-dogs-2.3.1</id><content type="html" xml:base="https://cxong.github.io/cdogs-sdl/release/2025/08/09/c-dogs-2.3.1.html"><![CDATA[<p>This is an out-of-band release that fixes a bug where the game gets stuck at the end of a level. Thanks for those who found and reported the bug!</p>

<p>The next release will have a major new feature and it is coming slowly but surely. Stay tuned for it!</p>

<p>Download free from itch.io: <a href="https://congusbongus.itch.io/cdogs-sdl/purchase">https://congusbongus.itch.io/cdogs-sdl/purchase</a></p>

<p>Release notes: <a href="https://github.com/cxong/cdogs-sdl/releases/tag/2.3.1">https://github.com/cxong/cdogs-sdl/releases/tag/2.3.1</a></p>]]></content><author><name></name></author><category term="release" /><summary type="html"><![CDATA[This is an out-of-band release that fixes a bug where the game gets stuck at the end of a level. Thanks for those who found and reported the bug!]]></summary></entry><entry><title type="html">C-Dogs 2.3.0 Released!</title><link href="https://cxong.github.io/cdogs-sdl/release/2025/03/08/c-dogs-2.3.0.html" rel="alternate" type="text/html" title="C-Dogs 2.3.0 Released!" /><published>2025-03-08T00:00:00+00:00</published><updated>2025-03-08T00:00:00+00:00</updated><id>https://cxong.github.io/cdogs-sdl/release/2025/03/08/c-dogs-2.3.0</id><content type="html" xml:base="https://cxong.github.io/cdogs-sdl/release/2025/03/08/c-dogs-2.3.0.html"><![CDATA[<p>New year new C-Dogs SDL minor release! This release adds a new high score system, with lots of added features. Check it out!</p>

<p><img src="https://raw.githubusercontent.com/cxong/cdogs-sdl/gh-pages/_posts/highscores.png" alt="new high scores" /></p>

<p>Compared to the old version, this adds:</p>

<ul>
  <li>Time taken</li>
  <li>Kills</li>
  <li>Accuracy</li>
  <li>Favorite Gun/weapon</li>
  <li>Face</li>
</ul>

<p>Which should make it much more useful. Want to challenge yourself to a speed run, or maybe a pacifist run? How about 100% accuracy? Now you can track it all with this system.</p>

<p>It’s a feature that I’ve wanted to add for <a href="https://github.com/cxong/cdogs-sdl/issues/151">many many years</a>. It turned out to be a much bigger task than anticipated, and warranted a complete rewrite of the high score system. Unfortunately it is also backwards incompatible - more details are in the previous post. I hope it was worth it and you’ll enjoy it!</p>

<p>Download free from itch.io: <a href="https://congusbongus.itch.io/cdogs-sdl/purchase">https://congusbongus.itch.io/cdogs-sdl/purchase</a></p>

<p>Release notes: <a href="https://github.com/cxong/cdogs-sdl/releases/tag/2.3.0">https://github.com/cxong/cdogs-sdl/releases/tag/2.3.0</a></p>]]></content><author><name></name></author><category term="release" /><summary type="html"><![CDATA[New year new C-Dogs SDL minor release! This release adds a new high score system, with lots of added features. Check it out!]]></summary></entry><entry><title type="html">High Scores</title><link href="https://cxong.github.io/cdogs-sdl/progress/other/2025/02/08/high-scores.html" rel="alternate" type="text/html" title="High Scores" /><published>2025-02-08T00:00:00+00:00</published><updated>2025-02-08T00:00:00+00:00</updated><id>https://cxong.github.io/cdogs-sdl/progress/other/2025/02/08/high-scores</id><content type="html" xml:base="https://cxong.github.io/cdogs-sdl/progress/other/2025/02/08/high-scores.html"><![CDATA[<p>The high score system is due for a <a href="https://github.com/cxong/cdogs-sdl/issues/151">major overhaul</a>, and while we’ll add cool new features in the next version like showing the character used, accuracy and favourite weapon used, unfortunately this will be a breaking change: old high scores will no longer be available. This does go against one of <a href="https://github.com/cxong/cdogs-sdl/wiki/Development-Plan#general-principles">C-Dogs SDL’s principles</a>, but it’s a necessary change.</p>

<p>To explain why, we need to go back in history. C-Dogs’ predecessor, <a href="https://www.mobygames.com/game/1055/cyberdogs/">Cyberdogs (1994)</a>, was a fairly straightforward shooting game. Fight through 10 semi-randomly-generated levels shooting bad guys, collecting objectives while the difficulty ramps up, and if you manage to survive until the end, you enter your name into the high scores list. It’s pretty typical of 90’s games.</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/hbcsTmcyq_w?si=a_szrdJegRL7Wtpl" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen=""></iframe>

<p>Although the game is “semi-randomly-generated”, what this means is the objectives of each level stays the same, it’s only the level layout, enemy and item placement that gets randomised, so playing with a different seed meant you couldn’t memorise where things are, but the game itself is pretty similar overall. This means a single high score across the whole game made sense.</p>

<p>Fast forward a little to C-Dogs, which came with 5 campaigns of varying themes and lengths. This greatly improved the variety and replayability of the game, but as in many aspects C-Dogs was two-steps-forward-one-step-back compared to Cyberdogs, the high score system felt a little half-baked. It largely inherited the high score system from Cyberdogs, with a small enhancement - the game would show all-time high scores in addition to today’s high scores - but it still used one single set of scores for the whole game, regardless of campaign. This made less sense, since some campaigns would naturally result in higher scores than others.</p>

<p><img src="https://raw.githubusercontent.com/cxong/cdogs-sdl/gh-pages/_posts/harmful_crysalis.png" alt="harmful chrysalis" /></p>

<p>What’s worse is that fans created <a href="https://cdogs.morezombies.net">lots of custom campaigns</a>, of greatly varying lengths and quality. Some poorly-made campaigns filled with easy objectives could have a player easily rack up a huge high score. And now C-Dogs SDL comes with perhaps a dozen high quality campaigns, with even more incomparable scores. The high score system was truly broken.</p>

<p><img src="https://raw.githubusercontent.com/cxong/cdogs-sdl/gh-pages/_posts/new_campaigns.png" alt="New Campaigns" /></p>

<p>As I looked into the high score system, the need to rework it entirely was inevitable. We had to have <strong>per-campaign high scores</strong>! This means completely ditching the old high score system and rebuilding it from scratch, and old high scores will not be available in the next release. This decision wasn’t made lightly, as high scores can often have a lot of sentimental value, but as we saw over its history:</p>

<ul>
  <li>it never really made sense in C-Dogs</li>
  <li>it made even less sense in C-Dogs SDL</li>
  <li>it always seemed more like an afterthought (you could only see high scores after playing through a campaign!)</li>
</ul>

<p>So once we rebuild an enhanced version of the high score system, we’ll give it greater prominence - allow you to view the high scores without playing the game. Stick around to see the shiny new high score system in the next release!</p>

<p><img src="https://raw.githubusercontent.com/cxong/cdogs-sdl/gh-pages/_posts/victory.jpg" alt="Victory screen" /></p>]]></content><author><name></name></author><category term="progress" /><category term="other" /><summary type="html"><![CDATA[The high score system is due for a major overhaul, and while we’ll add cool new features in the next version like showing the character used, accuracy and favourite weapon used, unfortunately this will be a breaking change: old high scores will no longer be available. This does go against one of C-Dogs SDL’s principles, but it’s a necessary change.]]></summary></entry><entry><title type="html">C-Dogs 2.2.0 Released!</title><link href="https://cxong.github.io/cdogs-sdl/release/2024/12/07/c-dogs-2.2.0.html" rel="alternate" type="text/html" title="C-Dogs 2.2.0 Released!" /><published>2024-12-07T00:00:00+00:00</published><updated>2024-12-07T00:00:00+00:00</updated><id>https://cxong.github.io/cdogs-sdl/release/2024/12/07/c-dogs-2.2.0</id><content type="html" xml:base="https://cxong.github.io/cdogs-sdl/release/2024/12/07/c-dogs-2.2.0.html"><![CDATA[<p>Let’s close off 2024 with a minor release of C-Dogs SDL!</p>

<p>This one was unplanned but has quite a number of small, mostly UX-related fixes and improvements. Two highlights:</p>

<ol>
  <li>
    <p>New icons! Commissioned from pixel artist <a href="https://misnina.com">misnina.com</a>, this gives a fresh new look to the program bundle.</p>

    <p><img src="https://raw.githubusercontent.com/cxong/cdogs-sdl/gh-pages/favicon-96x96.png" alt="New C-Dogs SDL program icon, WarBaby" /> <img src="https://github.com/cxong/cdogs-sdl/blob/master/build/linux/cdogs-icon.128.png?raw=true" alt="New C-Dogs SDL program icon, Jones" /> <img src="https://github.com/cxong/cdogs-sdl/blob/master/build/linux/cdogs-icon.22.png?raw=true" alt="New C-Dogs SDL program icon, Jones" /></p>
  </li>
  <li>
    <p>Most changes for this release came from outside contributors!</p>
  </li>
</ol>

<p>C-Dogs SDL wouldn’t be the same without these contributions. Thank you and enjoy the release!</p>

<p>Download free from itch.io: <a href="https://congusbongus.itch.io/cdogs-sdl/purchase">https://congusbongus.itch.io/cdogs-sdl/purchase</a></p>

<p>Release notes: <a href="https://github.com/cxong/cdogs-sdl/releases/tag/2.2.0">https://github.com/cxong/cdogs-sdl/releases/tag/2.2.0</a></p>]]></content><author><name></name></author><category term="release" /><summary type="html"><![CDATA[Let’s close off 2024 with a minor release of C-Dogs SDL!]]></summary></entry><entry><title type="html">Follow C-Dogs SDL development on Mastodon</title><link href="https://cxong.github.io/cdogs-sdl/website/2024/10/13/mastodon.html" rel="alternate" type="text/html" title="Follow C-Dogs SDL development on Mastodon" /><published>2024-10-13T00:00:00+00:00</published><updated>2024-10-13T00:00:00+00:00</updated><id>https://cxong.github.io/cdogs-sdl/website/2024/10/13/mastodon</id><content type="html" xml:base="https://cxong.github.io/cdogs-sdl/website/2024/10/13/mastodon.html"><![CDATA[<p>tl;dr follow C-Dogs SDL dev progress on <a href="https://mastodon.gamedev.place/tags/CDogsSDL">Mastodon #CDogsSDL!</a></p>

<p>Looking back at the <a href="https://cxong.github.io/cdogs-sdl/archive.html">news archives</a>, I noticed that a while ago I stopped posting regular progress updates, and the posts were generally limited to release announcements and the occasional longer-form blog post. Actually I do still post progress updates but since they are very short form, they are on Mastodon, and you would never know by looking at this website! So I’ve added a link in the top bar. And also this post! 😀</p>

<p>I think this is for the best; this site is supposed to be the main face of “C-Dogs SDL the game”, so I refrained from progress updates because it had matured from an in-development project to a playable game available on many platforms, so filling the front page with stuff that isn’t available yet would be confusing. But for people who don’t mind and want to follow the very latest news, having it in a microblogging platform like Mastodon seems appropriate.</p>]]></content><author><name></name></author><category term="website" /><summary type="html"><![CDATA[tl;dr follow C-Dogs SDL dev progress on Mastodon #CDogsSDL!]]></summary></entry><entry><title type="html">Making a Wolf3D Mod</title><link href="https://cxong.github.io/cdogs-sdl/other/2024/10/07/making-a-wolf3d-mod.html" rel="alternate" type="text/html" title="Making a Wolf3D Mod" /><published>2024-10-07T00:00:00+00:00</published><updated>2024-10-07T00:00:00+00:00</updated><id>https://cxong.github.io/cdogs-sdl/other/2024/10/07/making-a-wolf3d-mod</id><content type="html" xml:base="https://cxong.github.io/cdogs-sdl/other/2024/10/07/making-a-wolf3d-mod.html"><![CDATA[<p>3 years ago, to mark the big <a href="https://cxong.github.io/cdogs-sdl/release/2021/08/21/c-dogs-1.0.0.html">version 1.0 of C-Dogs SDL</a>, we released Wolfenstein 3D support: play the classic Wolfenstein 3D, but in top-down 2D, inside C-Dogs SDL. It was pretty cool and a well-received release. Since then, we’ve <a href="https://cxong.github.io/cdogs-sdl/release/2021/12/03/c-dogs-1.2.0.html">added Spear of Destiny mission pack support</a> and are working towards <a href="https://github.com/cxong/cdogs-sdl/issues/712">Super 3D Noah’s Ark</a>. We’ve also received requests to add support for other Wolf3D games like <a href="https://github.com/cxong/cdogs-sdl/issues/714">Blake Stone</a>. <a href="https://cxong.github.io/cdogs-sdl/other/2022/04/16/future-plans.html">More are in the roadmap</a>.</p>

<iframe width="560" height="315" src="https://www.youtube.com/embed/gnZX0IJV4oo" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen=""></iframe>

<p>While it’s cool that the gameplay experience is very authentic, due to directly using the same levels, sounds and music, this also hides the fact that a lot of work was required to get to this point. Many elements, most notably the graphics, could not be reused, so they were meticulously recreated for C-Dogs SDL, not to mention many engine enhancements had to be made to support Wolf3D-style gameplay. The original release with Wolf3D + Spear of Destiny support took about 2 years, but even the <a href="https://cxong.github.io/cdogs-sdl/release/2021/12/03/c-dogs-1.2.0.html">Mission Packs took 4 months of active development</a>, and that was mostly a content-only update. I think we did a good job making an end product that plays both like Wolf3D and C-Dogs, and is still fun.</p>

<blockquote>
  <p><img src="https://beta.wolf3d.net/sites/default/files/styles/128x128_hi_res_sprite_/public/users/Cabo_Fiambre/previews/prev.png?itok=giCEDucP" alt="Wolf3D wall textures" /> <img src="https://raw.githubusercontent.com/cxong/cdogs-sdl/gh-pages/_posts/wolf3d_sprites.png" alt="Wolf3D in C-Dogs SDL" /></p>

  <p>Wolf3D textures are 64x64, but C-Dogs tiles are 16x12. There is no way to automate this conversion process, so they had to be recreated by hand, with a lot of creative license added</p>
</blockquote>

<p>And so I’d like to document exactly how much work goes into adding a Wolf3D mod like Super 3D Noah’s Ark or Blake Stone. Perhaps you will, as I have, gain a better appreciation for people who make mods and the hard work required!</p>

<h1 id="cyberwolfenstein">CyberWolfenstein</h1>

<p>I’ve had the idea of adding Wolf3D support into C-Dogs SDL for a long time. There were other versions of Wolf3D-in-2D <a href="https://wl6.fandom.com/wiki/Vogelstein_2D">1</a> <a href="https://gamebanana.com/mods/67588">2</a> <a href="https://kevinlong.itch.io/wolf2d">3</a> <a href="https://www.newgrounds.com/art/view/devilsgarage/wolfenstein-2-d">4</a> <a href="https://pixeljoint.com/pixelart/28499.htm">5</a> but none of them were both high quality and authentic. I wanted to create the definitive version of Wolfenstein 2D. Both are 2D tile-based shooting games, and Wolf3D’s data is well-documented and the source code is open, so with a bit of work this should be possible right?</p>

<blockquote>
  <p><img src="https://steamuserimages-a.akamaihd.net/ugc/1839180655231070065/3F4F352553DDED7354F9BF3FF245DFC802D0A9D4/" alt="Wolf3D levels in a tile editor" /></p>

  <p>Wolf3D is a raycasted pseudo-3D game over a 2D tile-based game underneath. Its levels were created with a tile map editor.</p>
</blockquote>

<p>It turns out there were three big challenges in making this happen. Extracting the data out of Wolf3D was doable but not trivial; the game’s data was not made to be moddable so a substantial amount of work was required just to get to the data. Fortunately there are plenty of resources like the <a href="https://moddingwiki.shikadi.net/wiki/Wolfenstein_3-D">DOS Game Modding Wiki</a>, and in a pinch I could rip code out of places like <a href="https://maniacsvault.net/ecwolf/">ECWolf</a>. Then there’s C-Dogs SDL itself, which was made as a game with a specific kind of gameplay instead of a general purpose 2D shooter, which meant that even support for arbitrary amounts of tile types per map had to be developed, leading to difficult, months-long refactors. Finally some content simply could not be used and had to be recreated, such as the textures, sprites and characters.</p>

<table>
  <thead>
    <tr>
      <th>Wolf3D Feature</th>
      <th>C-Dogs SDL Implementation</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Levels</td>
      <td>✅ Used as-is</td>
    </tr>
    <tr>
      <td>Sounds</td>
      <td>✅ Used as-is</td>
    </tr>
    <tr>
      <td>Music</td>
      <td>✅ Used as-is</td>
    </tr>
    <tr>
      <td>Text Strings</td>
      <td>➖ Extracted</td>
    </tr>
    <tr>
      <td>NPC Behaviour</td>
      <td>❌ Recreated</td>
    </tr>
    <tr>
      <td>Sprites</td>
      <td>❌ Recreated</td>
    </tr>
    <tr>
      <td>Textures</td>
      <td>❌ Recreated</td>
    </tr>
    <tr>
      <td>Weapons</td>
      <td>❌ Recreated</td>
    </tr>
  </tbody>
</table>

<h2 id="data-extraction">Data Extraction</h2>

<p>For extracting Wolf3D data I specifically created the <a href="https://github.com/cxong/cwolfmap">CWolfMap C library</a>, which in theory could be used by all kinds of programs and games that want to use Wolf3D data. While there are a lot of programs that can do the same thing (my favourites include <a href="https://slade.mancubus.net">SLADE3</a> and <a href="https://hwolf3d.dugtrio17.com/index.php?section=hwe">HWE</a>), none of them are open source libraries that can be easily incorporated into games. The library also has to deal with complications like multiple audio formats (Wolf3D has both PCM and Adlib sounds; Super 3D Noah’s Ark uses OGG-in-WAD music).</p>

<p>Another annoyance is that while the level data is pretty straight forward - they’re just planes of tile IDs - the semantics of the tile IDs differs between different Wolf3D games. That is, an ID that represents “wooden table” in Wolf3D might be a totally different entity type in S3DNA, like a barrel, an enemy, or ammo pickup! So for every Wolf3D mod, we need to go through all the tile IDs and meticulously build a mapping to the right entity type. It is not a simple re-skinning job at all.</p>

<blockquote>
  <p><img src="https://hwolf3d.dugtrio17.com/projects/hwe6.gif" alt="Havoc's Wolf3D Editor, showing the map symbol editor" /></p>

  <p>Wolf3D maps consist of planes, each filled with integer tile IDs. What the IDs actually represent is completely up to the game/mod: the same ID could mean a wall, a door, map object, trigger, pickup, enemy, and more, depending on the game and plane.</p>
</blockquote>

<h2 id="data-recreation">Data Recreation</h2>

<p>Then there’s recreating the parts of Wolf3D that cannot be easily extracted. We need to redraw the hundreds of textures and sprites in C-Dogs style, which represents dozens of hours of pixel art work. Some special characters also need some <a href="https://cxong.github.io/2017/03/3d-rendered-pixel-sprites">3D modelling and animation</a> - notably to make the dog character, which C-Dogs did not have; ironic huh? 🐕</p>

<p>We took some liberties porting across enemy behaviour. Wolf3D actually has pretty complex NPC AI considering its age, most likely due to its aborted initial design of being an action-stealth game: enemies have patrol routes, rooms have defined noise triggers such that a gunshot in the same room alerts everyone in it, and enemies have vision cones so you can sneak up behind them. C-Dogs SDL also had an enemy awareness mechanic but it was much more rudimentary, so mechanics like vision cones and noise alerting had to be built in specifically for Wolf3D. However mechanics like patrolling were entirely left out; I don’t think players would even notice!</p>

<p>Wolf3D’s gunplay was also quite unique; apart from the knife, the 3 guns are all variations of hitscan weapons. C-Dogs SDL already had <a href="https://cxong.github.io/cdogs-sdl/release/2017/04/23/c-dogs-0.6.5.html">hitscan weapons</a> thanks to earlier work with a Doom mod, but if you look closer, <a href="https://wolfenstein.fandom.com/wiki/Hitscan">Wolf3D doesn’t actually use traditional hitscan weapons</a>! Instead it uses damage formulas, which aim to simulate the experience of realistic gunplay: more damage is dealt/received if the target is close, there’s a random chance of missing, depending on factors like whether you are running, but also weirdly, <a href="https://wolfenstein.fandom.com/wiki/Damage">enemies deal different damage to you if you can’t see them</a>!</p>

<p>Rather than try to recreate this tangle of a damage system, we were conservative and just went for simple hitscan bullets that deal constant, predictable damage. It’s not the same and makes the game more C-Dogs-like than Wolf3D-like, but is still quite fun.</p>

<h2 id="added-features">Added Features</h2>

<p>In order to fully recreate Wolf3D, some features had to be built from scratch because there were simply no equivalents in C-Dogs SDL, no matter how many creative liberties we took. These represented the bulk of the development time in order to support Wolf3D and Spear of Destiny:</p>

<ul>
  <li>Rudimentary vehicles, to support Mecha Hitler</li>
  <li>Persisting guns, ammo and lives across levels</li>
  <li>Pickups with multiple effects (the 1up pickup adds score, ammo and health)</li>
  <li>Non-file music, to support decoding and streaming adlib music via a chip emulator</li>
  <li>Additional music types, to be played during the campaign briefing, mission briefing, and debrief</li>
  <li>Multiple tile types per level</li>
  <li>Multiple exits per level, and being able to exit back to a previous level, to support secret levels</li>
  <li>Enemies to drop specific items, like ammo and keys (for bosses)</li>
  <li>Dual-wielded guns, for the bosses</li>
  <li>Guns that shoot multiple types of bullets, for the bosses that can shoot both machine guns and rockets</li>
  <li>Custom corpses</li>
  <li>Custom footstep sounds, for dogs and Mecha Hitler</li>
  <li>Objects that can’t be shot by bullets - Wolf3D objects don’t interact with bullets at all; making them destructible would have broken some levels!</li>
  <li>Fake walls that can be walked through (as an expedient way of representing pushwalls)</li>
  <li>Different in-game gun models</li>
  <li>Enemy alert system - peripheral vision, wake on hearing gunfire, wake on seeing an ally being attacked</li>
  <li>New player models and parts, like helmets and peaked caps, dog head</li>
  <li>Enemy pain state, simulated using a short petrify effect</li>
  <li>And lots of miscellaneous fixes and tweaks</li>
</ul>

<video muted="" autoplay="" loop="">
    <source src="https://raw.githubusercontent.com/cxong/cdogs-sdl/gh-pages/_posts/mech.webm" type="video/webm" />
</video>

<p>The list doesn’t end there if we want to add other Wolf3D games; Super 3D Noah’s Ark has melon launchers and the bible quiz pickup item, Blake Stone has NPC conversations and more.</p>

<h1 id="the-roadmap">The Roadmap</h1>

<p>To cap off, every Wolf3D mod will require, at minimum, a load of content to be recreated (mostly the textures and sprites), some gameplay features to be added, and some miscellaneous fixes and tweaks too. This is a significant amount of work.</p>

<p>Despite this I still plan to add as many Wolf3D mods as possible, albeit gradually. I think <a href="https://cxong.github.io/2024/03/in-the-shadow-of-doom">these old shooters are pretty neat</a>, and deserve some extra love by being ported to a modern game. Supporting these games has the side effect of making C-Dogs SDL a better game. And porting 3D shooters into a 2D topdown shooter game is honestly pretty cool, and something that we should have more of.</p>]]></content><author><name></name></author><category term="other" /><summary type="html"><![CDATA[3 years ago, to mark the big version 1.0 of C-Dogs SDL, we released Wolfenstein 3D support: play the classic Wolfenstein 3D, but in top-down 2D, inside C-Dogs SDL. It was pretty cool and a well-received release. Since then, we’ve added Spear of Destiny mission pack support and are working towards Super 3D Noah’s Ark. We’ve also received requests to add support for other Wolf3D games like Blake Stone. More are in the roadmap.]]></summary></entry><entry><title type="html">C-Dogs 2.1.0 Released!</title><link href="https://cxong.github.io/cdogs-sdl/release/2024/04/12/c-dogs-2.1.0.html" rel="alternate" type="text/html" title="C-Dogs 2.1.0 Released!" /><published>2024-04-12T00:00:00+00:00</published><updated>2024-04-12T00:00:00+00:00</updated><id>https://cxong.github.io/cdogs-sdl/release/2024/04/12/c-dogs-2.1.0</id><content type="html" xml:base="https://cxong.github.io/cdogs-sdl/release/2024/04/12/c-dogs-2.1.0.html"><![CDATA[<p>Here’s a minor release of C-Dogs SDL!</p>

<p>Not much to write about, this one is mostly bug fixes (there’s quite a few so it’s worth upgrading), but it does have one feature that I’m pretty pleased with: a <a href="https://github.com/cxong/cdogs-sdl/issues/284"><strong>pause menu with options</strong></a>!</p>

<p><img src="https://github.com/cxong/cdogs-sdl/assets/1083215/75238423-03e3-477b-9df0-0c3effe1541c" alt="Pause menu" /></p>

<p>Classic C-Dogs had an interesting way of pausing and exiting the game: press Esc once to pause, and press Esc again to quit (or press any other key to unpause). It has its perks, like being able to quit quickly by just mashing Esc, but to players not used to it, it’s easy to get tripped up.</p>

<p>So in addition to implementing a conventional pause menu, we’ve transplanted the options menu in it, which means you can change options - graphics, controls, almost everything - mid-game, and have them take effect immediately! This is a great quality of life feature and I’m sure it’ll be used quite a lot by new players.</p>

<p>Of course some options wouldn’t be expected to apply properly (like changing player HP, that would probably require a level restart), nevertheless it should be a good feature overall. In the future we can add more to the pause menu, like mission briefing.</p>

<p>Download free from itch.io: <a href="https://congusbongus.itch.io/cdogs-sdl/purchase">https://congusbongus.itch.io/cdogs-sdl/purchase</a></p>

<p>Release notes: <a href="https://github.com/cxong/cdogs-sdl/releases/tag/2.1.0">https://github.com/cxong/cdogs-sdl/releases/tag/2.1.0</a></p>]]></content><author><name></name></author><category term="release" /><summary type="html"><![CDATA[Here’s a minor release of C-Dogs SDL!]]></summary></entry></feed>