13 Oct 2024 » Follow C-Dogs SDL development on Mastodon

tl;dr follow C-Dogs SDL dev progress on Mastodon #CDogsSDL!

Looking back at the news archives, 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! 😀

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.


Add a comment

07 Oct 2024 » Making a Wolf3D Mod

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.

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 Mission Packs took 4 months of active development, 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.

Wolf3D wall textures Wolf3D in C-Dogs SDL

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

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!

CyberWolfenstein

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 1 2 3 4 5 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?

Wolf3D levels in a tile editor

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

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 DOS Game Modding Wiki, and in a pinch I could rip code out of places like ECWolf. 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.

Wolf3D Feature C-Dogs SDL Implementation
Levels ✅ Used as-is
Sounds ✅ Used as-is
Music ✅ Used as-is
Text Strings ➖ Extracted
NPC Behaviour ❌ Recreated
Sprites ❌ Recreated
Textures ❌ Recreated
Weapons ❌ Recreated

Data Extraction

For extracting Wolf3D data I specifically created the CWolfMap C library, 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 SLADE3 and HWE), 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).

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.

Havoc's Wolf3D Editor, showing the map symbol editor

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.

Data Recreation

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 3D modelling and animation - notably to make the dog character, which C-Dogs did not have; ironic huh? 🐕

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!

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 hitscan weapons thanks to earlier work with a Doom mod, but if you look closer, Wolf3D doesn’t actually use traditional hitscan weapons! 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, enemies deal different damage to you if you can’t see them!

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.

Added Features

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:

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

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.

The Roadmap

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.

Despite this I still plan to add as many Wolf3D mods as possible, albeit gradually. I think these old shooters are pretty neat, 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.


Add a comment

12 Apr 2024 » C-Dogs 2.1.0 Released!

Here’s a minor release of C-Dogs SDL!

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 pause menu with options!

Pause menu

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.

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.

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.

Download free from itch.io: https://congusbongus.itch.io/cdogs-sdl/purchase

Release notes: https://github.com/cxong/cdogs-sdl/releases/tag/2.1.0


Add a comment

17 Feb 2024 » C-Dogs 2.0.0 Released!

Once in a blue moon, we have a major release, the big 2.0, featuring Cyberdogs!

Cyberdogs is a freeware DOS run-and-gun shooter by Ronny Wester, released in 1994. If that sounds familiar, that’s because it’s the prequel to C-Dogs! The two games look alike but actually play very different - in Cyberdogs you can earn money and buy and sell weapons between levels, and the gameplay is a lot more tense. There are many folks who prefer Cyberdogs to C-Dogs as a result.

With this release, we’ve added Cyberdogs as a campaign in C-Dogs SDL, so you can enjoy this classic oldie but goodie, but with all the modern C-Dogs SDL enhancements (wanna try 4 player co-op?) It’s no exaggeration to say this feature was 10 years in the making! In order to implement Cyberdogs, a lot of major features had to be made - buy/sell weapons, a revamped equip menu showing prices and ammo, new pickup types like over-healing and extra lives, enemies that can both shoot and melee, and many many more - not to mention lots of reverse engineering and tweaking gameplay so it feels the same. Some of the features have trickled out to other parts of C-Dogs SDL, for example the Wolf3D extra life pickups now actually give you an extra life 😆

Last but not least this release contains a bunch of fixes and enhancements made possible by awesome contributors, special thanks to reinerh for miscellaneous fixes and helping to get C-Dogs SDL into debian! Big thanks to all who made it happen. Also thanks to @PavanLuca, @naddoska, @rootkea and @hucarxiao for various contributions; it’s great to see that C-Dogs SDL is going slowly but strongly, so keep those patches and bug reports coming in!

Download free from itch.io: https://congusbongus.itch.io/cdogs-sdl/purchase

Release notes: https://github.com/cxong/cdogs-sdl/releases/tag/2.0.0


Add a comment

28 Jul 2023 » C-Dogs 1.5.0 Released!

It’s a C-Dogs SDL release! With one minor feature: customize hats, hair, facial hair and glasses!

cranial accessories

Plus a big bunch of fixes and enhancements! Thanks to @Kurtsley, @PavanLuca and @reinerh for fixing/raising them 💪

And finally, a controversial feature removal: quickplay!

Quickplay was a mode that was added way way back in version 0.5.2. It let players jump into a randomly generated level and start running and gunning, without having to choose a campaign. It was slightly improved over the years but the premise stayed the same: get started quickly and shoot up some bad guys.

However lots of players new to C-Dogs would pick this mode first, and walk away unimpressed by the game, thinking it’s just a simple shooting game. But with dozens of high quality campaigns, mods, even the ability to play Wolfenstein 3D and Spear of Destiny, this was a highly inaccurate impression!

Therefore I’ve made the decision to hide the feature entirely - you can’t play it unless you re-enable it via the source code. I could consider adding it back if enough people ask me to, or if we can greatly improve its quality.

And by the way, C-Dogs SDL is on Mastodon 🐘! Join and follow the #CDogsSDL tag to get more frequent updates, news and cool screenshots!

Download free from itch.io: https://congusbongus.itch.io/cdogs-sdl/purchase

Release notes: https://github.com/cxong/cdogs-sdl/releases/tag/1.5.0


Add a comment