DA2 Alpha 11, Updates so soon!

November 12, 2017

Just a quick update this time to fix a very important bug. Like with any classic role playing game, the more you walk along in a dungeon, the more likely you are to be attacked. To make sure the process isn't completely random, the first few steps are free, then each additional step increases the odds of a random battle. In DA2, these steps are measured in pixels. Well, with the old, clunky DirectX 7 version of DA2, a step was measured in multiple pixels to improve game speed. Multiple pixel stepping is no longer required with SDL, and apparently this broke my old random battle code. You could walk the entire game without a single random battle. That's no fun. Needless to say, this was the bug that forced me to release Alpha 11 just three days after the last release. This will teach me to playtest inside a dungeon instead of in a town where battles do not occur.

In the short interim, I was able to fix the scrolling color issues. Not elegantly, but that's life. Briefly, back when DA2 was just 256 colors, I could take some of those colors and rotate them in a sequence from dark to light. This gave magic items in the game the effect of glowing and pulsating with an aura. Just to remind you that magic items are cooler than regular items, right? Now that everything is in true color, there are no color palettes to rotate. Locking textures and hunting for pixels to change seems really dumb to me. I also tried a lot of different blend modes and masks, but this didn't quite have the desired effect. In the end, I just duplicated the bitmaps for all the items in question, bumping the appropriate pixels in each, and now magic items are a series of 8 sprites that animate during the game. Simple right? I never would have dared this a few decades ago with QuickBasic; memory was too precious then. Funny how easy it is to dispose of now. All the new sprites I added are probably only a fraction of a high-res texture in a 3D game. And so DA2 continues trudging on, bringing the 80's to modern gaming.

DA2 Alpha 10, Big Changes?

November 09, 2017

Several months ago, I decided to take a break from Dark Ages: The Continents to work on the sequel. Specifically, I decided to finally port the game to SDL for the graphics library. This is technically the third port for the game. The most recent one, to version 2.0 alpha 1 through 9, was already dated. It still used 2D software rendering and many of the functions no longer behaved correctly, whether this was a video driver issue or OS issue.

So I bite the bullet and begin the port. It is surprisingly easy. Swap out DirectX (7, I think...ick...), swap in SDL 2.0, then see which functions break. Ninety percent of the time the broken function was just a rendering function. A simple find and replace fixed those. Keyboard and mouse inputs were easy to wrap. Even making configurable screen modes and updating to hardware rendering and surfaces instead of textures wasn't too tricky. In all, it was probably just a month of off-and-on work, then several months of life happening, and then finishing touches these last few days. Voila!

Dark Ages II: Engel, leaner, meaner, and more portable. It even works in Linux for those bold enough to try compiling from the source, although with a few glitches I'm choosing to ignore at the moment. Overall DA2 will work better (or at all) on most computers now. The sacrifice is in a few cosmetic issues, e.g. a few mouse cursor issues. Most noticeable, perhaps, is in moving from 256 color screen modes to true color. True color gives me more compatibility, and allows for a few simple effects like translucent dialog windows. But it broke the palette effects. Original DA2, back to the very first version, used 32 color indexes for effects. Those effects included swapping the colors each screen refresh, allowing texture colors to change, glow, or sparkle. Without a palette, those pixels are no longer magical in the game. Oh well, time to get creative...

In any case, enjoy alpha 10. In summary, lots of big changes, and the end result is a few more things broken! Yay! Hopefully not too many new bugs were introduced in the port, but I'm sure you'll all let me know. Source code is now available for Linux users or anyone who wants to see all the wrong things I did.

Newest Features of Dark Ages Version 2.0

May 16, 2017

Ironically, Dark Ages has always been a console style game that required a keyboard and did not support a gamepad. It was very unconsole-like in that regard. At the time, this was mostly a limitation of trying to support peripherals the average PC user didn't have in an outdated and abandoned programming language. I wasn't going to waste my time doing that. Thankfully, the development libraries available to game programmers today are much more advanced, to the point that it is probably easier to support gamepads for a basic tile RPG like this one.

When I started the port of DA1, I did it more or less directly; make the gameplay identical to the original. However, under the hood the code is a bit more dynamic (although still very basic by game design standards - not what I would do when building a new game from scratch). Particularly, I designed it for different user inputs. With just a few basic system checks and some additional event handlers, gamepads are detected and operate seamlessly with the keyboard. Mouse will follow shortly, although I wouldn't recommend it, and that is a topic for a different time. Each action in the game has a key mapped to it. Simply mapping the gamepad buttons duplicates all functionality. If you have a gamepad, use it at any time. If you prefer your keyboard, just ignore your gamepad. Both work simultaneously.

One small caveat is there are two specific places where the player is asked to provide text. The most obvious place is when entering the name of the hero at the start of a new game. Keyboard is still required. On a console the standard procedure is to present all the letters of the alphabet in a table, and the gamepad navigates a cursor among those letters to select the next one to use. This is novel to the gamepad and I'm not convinced it is worth the effort for use only twice in the entire game. After all, the game doesn't run on a console, it runs on your computer, so you SHOULD have a keyboard or equivalent. Tablet owners trying to use their little device like a true computer may disagree, but that was your bad decision. :) Oh well, I suppose I'll cave eventually and make the alphabet table...

Finally, above is the image of the new in-game options menu. I know, how boring. Of all the things I could possibly take a screen capture of, why that? I promise more exiting images in the future. Truth be told, I focused my efforts the past month almost exclusively on that. Other than displaying the instructions on the bottom, you can toggle screen resolutions and windowed or full screen mode. Believe me, it makes a world of difference when you are playing. Feel free to toggle the music volume. I swear that works, but sadly there are no music files yet. Perhaps in the next alpha release.

First Alpha Release of Darkages Version 2.0

April 16, 2017

The first alpha of Darkages: The Continents has been posted. Grab it from the links on the DA1 page. For the first time, the game plays natively in Windows environments. I'm not exactly sure which ones :) - I use Windows 7, works on that. Probably works from XP to 10, too. Linux and source code coming soon.

Modernizing a 20-year old DOS game to work on today's computers has been an unusual experience. Part of me wanted to keep it as exactly original as possible. But on the other side of the argument, it's hard to justify not using at least some of comforts of modern computers. In the end I did keep the game as original as possible, with the idea of overlaying mods in future versions to modernize the game.

The most obvious differences are quite noticeable. Foremost among them is the new title screen. I just couldn't keep the original PowerPoint (!) title screen. I'm not even sure if I'll keep the new one. Most definitely, it will be polished up some more. But I tried to keep that 8-bit NES aesthetic, including the bulky, pixelated font. More on that down below. From the very first step in the game, you will now notice pixel scrolling instead of tile scrolling. This was actually difficult to pull off because at 320x200 resolution, pixel scrolling is SUPER CHUNKY on a 24-inch computer monitor. The solution, in the end was to scale the tiles from 20x20 to 40x40. It gives the appearance of scrolling through half pixels. It's tolerable now, but perhaps I'll double down again for smoother scrolling. After all, I'm getting almost 3000 FPS. Finally, I couldn't help modernize the interface just a little. Text boxes and menus are now translucent. I just love the effect. Menus are operational from the cursors, instead of typing in numbers like on a PC console. The remainder of changes are even more minor, including more descriptive battle text that everyone will probably just click-through without ever reading. But I feel it is these small touches that count.

There were times as well that I went out of my way to keep the game the same. The font is the best example. I actually created that font from scratch to look identical to the original game. It turned out so wonderfully old school, I'll need to release it to the public domain. It's nearly impossible to find old clunky fonts; most are actually too good looking to be true minimalist. The quirky quests, such as guessing the name of the hermit in the mountains is still there, including typing it the name from the keyboard. I'll probably change that eventually, likely to a selectable menu, so that the game can be played with a gamepad.

Speaking of which, there are a few features missing from the alpha. The gamepad is a new feature I added, but have not finished yet. But it is essential for that classic console feel. Maybe alpha 2 will have it. Also missing is the music. That might be a good thing. I was able to convert the old midi files to sheet music, and can remaster them to ogg, but I should probably rewrite them as well. At the very least, I can now use console-like sounds instead of midi instrument samples.

So stay tuned in the next few weeks. I'll keep blogging my progress. And expect to play on Linux soon.

Version 2.0 for Windows and Linux

April 13, 2017

Consider this a birthday party! September of this year will mark the 20th anniversary of the development of Dark Ages I: The Continents. Development continued through the winter of 1997 and was completed in the spring of 1998, and various bug fixes and upgrades followed over the next year or so. Then DA1 was shelved to begin production of the sequel. Surprisingly, the game continued to kick around the Internet, and is still playable today through the DosBox emulator. It was this resilience that inspired me to dust off the old QuickBasic code and do a reboot after 20 years. The end result is Dark Ages: The Continents version 2.0! I will be posting the first alpha release in a few days. Happy 20th Birthday DA1!

I decided to do a reboot after playing around a bit with Simple DirectMedia Layer. I was playing with the graphics modules for a project at work, but found the code so easy to work with that I could build a simple rendering engine for DA1 in minutes. After that, it was mostly a matter of scripting the storyline and recreating the interface. I struggled for a day exporting the original BSAVE (yes, from QBasic!) formatted graphics to bitmaps, but otherwise the whole process took only a week to build the game engine. Then I spent a few hours a week over the next few months coding the storyline and play testing. It was amusing to play through from beginning to end after nearly 20 years. It was even more amusing looking at my old QB code. I barely knew what I was doing back then, and it still compiled...somehow.

In the next few posts I'll explain a bit more about the upgraded features, the features deliberately not upgraded (to maintain that NES aesthetic), and what I've learned in the process. I'll post the code to GitHub, including the original QB source, just for grins.