I'm wondering how people used to write DOS games (like Doom), I can't find much on this, but would love to learn more about the earlier days of game development.

What language was used predominantly?

I presume it was C. Or C++ already?

What IDEs (or editors/compilers) were popular?

Microsoft Visual C/C++ (or Microsoft C/C++ as I believe it used to be called) didn't exist back then AFAIK. So what did people use? edit and a command-line compiler from Intel or something?

What APIs where used?

What was common for 2D games? What about 3D games like Doom and Tomb Raider?

Anything else that's different from today?

I'd be happy to hear any other differences, like what image/audio formats were used.

  • \$\begingroup\$ I'm fairly sure your intended to do some research for this class assignment. Perhaps gdcvault.com/play/1014627/Classic-Game-Postmortem can give you a start. \$\endgroup\$ Aug 12 '12 at 7:58
  • \$\begingroup\$ It's not an assignment, I'm way out of school/college. I did google around for a while but couldn't find much. \$\endgroup\$
    – futlib
    Aug 12 '12 at 8:01
  • \$\begingroup\$ I recall reading a note from one of the ID guys about Watcom C++. Borland was always pretty popular because their compilers were freaking FAST. (I used to rebuild three or four times in a row because I wasn't convinced that anything had actually happened.) \$\endgroup\$
    – 3Dave
    Aug 14 '12 at 23:40

Language: C was predominant, but C++ was around and used.

Dev tools: Development environments included those from Borland and Watcom (almost unheard of today) among others. Both Borland and Watcom had their own compilers and their own IDEs. Borland was by far the most popular in general, though Watcom had a reputation for producing faster compiled programs, iirc.

APIs: Few APIs existed or were used. Video programming often consisted of directly writing pixels to the VGA framebuffer. Even 3D game were software rasterized. The Miles sound API was used for audio, which included drivers internally as the OS didn't have it's own audio framework or drivers. Keyboard and mouse input were generally read straight from the system. There were a couple popular memory extenders for 32-bit mode which were very popular and necessary towards the end of DOS's reign. The hardware was simple, thankfully, but it was definitely a pain in the butt writing games that worked on a variety of hardware. Libraries to deal with all the simple low-level stuff (like SDL, SFML, GLFW, etc.) did not exist, and porting was a huge amount of the work in releasing a game due to all the different platforms and hardware popular at the time (though its getting equally bad these days, what with all the consoles, handhelds, and mobile devices, plus Windows and the fringe desktop OSes like OSX and Linux).

On a side note to the previous point, Doom was not 3D the way we know it today. That is, it imposed huge limitations on 3D environments due to its highly specialized software rasterization algorithm, and characters and items were all jut sprites.

File Formats: Asset formats were just as proprietary to the engine then as they are now. I vaguely recall Bink being around back then for video (which was very rare, generally only in opening and closing sequences), and I think Creative had some specialized sound formats. I'm unsure what source or intermediary formats were popular for sound or video back then, but TGA was pretty popular for images.

  • 1
    \$\begingroup\$ The ubiquitous middleware that many licensed for audio was Miles, which provided driver abstraction for many devices. If you didn't use Miles, you probably just supported Adlib or SoundBlaster compatibles. For enabling VESA support on legacy cards, some games used UniVBE. \$\endgroup\$ Aug 12 '12 at 8:45
  • \$\begingroup\$ That's right! Good memory! :) \$\endgroup\$ Aug 12 '12 at 9:25
  • \$\begingroup\$ I may be wrong, but I believe the reference you're trying to make was for Watcom, not Watson. They made an excellent C compiler and a lightweight SQL server called Watcom SQL, a predecessor of SQLite, that I liked very much. \$\endgroup\$
    – Bob Mc
    Aug 12 '12 at 13:29
  • \$\begingroup\$ Indeed, you are correct. My memory is definitely getting more jumbled in my old age. \$\endgroup\$ Aug 12 '12 at 16:37
  • \$\begingroup\$ ASM was likely more common than now. You needed to squeeze extra performance and the compiler optimizers weren't as good as they are now. That is, majority still in C but the engines likely had ASM pieces. \$\endgroup\$ Aug 12 '12 at 20:43

As a completion to Sean's post, since you mentioned Doom: there is a nice blog by Fabien Sanglard, who made a review on the part of code used for making Doom (the one from 1993). The review is here: http://fabiensanglard.net/doomIphone/doomClassicRenderer.php

PS: The blog has a lot of Doom/Quake-related code reviews, and it's a nice read for a game developer to see how others designed a game from ground up


Not the answer you're looking for? Browse other questions tagged or ask your own question.