So in order to make DOS games in 2021, there are several options. None of them are perfect, but after studying all the options, I’ve discovered the two options I believe to be the best. There are more options if you specifically want to make adventure games. For that you can use either, an old version of AGS, AGI, SCI Studio, or SCI Companion. However, this article will assume you want an open ended system that will allow you to make any type of game. You will need to know C to continue.
I narrowed it down to FreeBASIC and OpenWatcom C. This article will specifically focus on OpenWatcom with the Allegro game engine. I found this to be the best choice for multiple reasons including speed, flexibility, and development on Windows (instead of inside DOS). OpenWatcom was also the compiler used to make DOOM and it’s very fast compared to the primitive Turbo C and the GNU DJGPP. The fact you can build your games in Windows helps a lot too because you can read the code on an HD screen and not be limited to the low resolution of DOS.
So to start out, you should probably download the PCX plug-in for Paint.NET. This will allow you to produce an old compressed image format that can be loaded by your game. The other option is just using bitmaps and that will use more space. And no, there’s no JPG, PNG, or GIF here 🙂 PCX is basically an old fashioned PNG file.
1. Now you can download OpenWatcom V1.9 from their main website. Version 2.0 might also work, but I didn’t try it. Now install Watcom with all the DOS options enabled.
2. Goto this link and download the alleg.lib: http://matejhorvat.si/en/dos/allegwat/allegow.zip
3. Download the allegro source and extract: http://cdn.allegro.cc/file/library/allegro-4.2.3/all423.zip
4. In the directory you extracted, run fix.bat watcom.
5. Copy the lib you downloaded to .\WATCOM\lib386\dos
6. Copy the fixed include files from the thing you extracted into .\WATCOM\h
7. Comment out line 36 in .\WATCOM\h\ALLEGRO\PLATFORM\ALWATCOM.H
8. Open Watcom (LITERALLY – Open Open Watcom) and make a new project – choose 32-bit DOS using DOS/32A LE.
9. Goto Linker Switches #2 and put alleg.lib under Libraries (NOT Library Files).
10. Goto C Compiler switches #5 and disable stack depth check.
11. Goto C Compiler switches #10 and select 80386 stack-based calling -3s.
12. Now you can just add the exhello.c (hello world example) to your project and do a makeall.
It should now be working and have made an EXE file about 757KB.
(Make sure you are adhering to the C89 standard. So basically declare all variables only at the beginning of code blocks and make sure all functions/methods are written above what’s calling them.)
When you create the watcom project, I recommend using DOS/32A LE. This way it’s smaller and there is no need for an external DOS extender like DOS4GW. Initially my EXE was 757KB which is really big just to draw a sprite, so I ended up following the guide here:
https://liballeg.org/stabledocs/en/alleg043.html
…which made my EXE down to 500KB with no sound enabled (I’m going to use PC speaker). It’s still bigger than I expected, but I couldn’t figure out how to further optimize. I tried the space optimization in watcom and it only saved like 5KB. So I downloaded UPX for DOS and applied -9 compression and got 200KB. And that’s with the DOS extender linked in, so that’s good enough for me.