Ken Silverman's Build Engine Page

Build engine & Apogee logo
I made this graphic for the intro screen of my Build "test" game.


On 12/23/2003, Jonathon Fowler released the first Build Engine port to use my "POLYMOST" technology. Polymost is an extension to the Build Engine code, featuring OpenGL support with true look up/down, MD2/MD3 models, and high resolution textures. You can find more information at Jonathon's site: http://www.jonof.id.au/


I found this excellent quote on the Apogee/3DRealms website:

The Build engine, upon which Duke Nukem 3D was constructed, went on to become the most successful engine in terms of number of games released, a record still maintained at the date of this writing (May, 1999), with 12 published games. Notable games developed using the Build engine include Witchaven, TekWar, Shadow Warrior, Blood, PowerSlave and Redneck Rampage.


Maybe you've seen me in the credits of these games:

"Build" engine games that I was heavily involved with: "Build" engine games that I've done some kind of limited support for: Other legal "Build" engine games that I'm aware of:

For a video history of the Build Engine, with excerpts from most of the above mentioned games, check out this video made by CuteFloor:
http://www.youtube.com/watch?v=VSVzn0F3pyQ


VESA 2.0 patch for Windows NT/2000/XP (09/21/2002)

Tired of 320x200? With this, you can play in hi-res again :)

I bought a new computer a few days ago. It came with Windows XP. That means a lot of my old programs that used to work on Windows 98 don't work anymore. I didn't want to reinstall Windows 98.

Here's the problem: When DOS programs initialize the VESA 2.0 linear framebuffer mode, one of the steps (after the screen mode is set) is using DPMI function call (ax=0x800) to map video memory into a linear space. Under WinNT/2K/XP, this call always fails. I don't know why. My programs exit to DOS with this error message: "DPMI_mapPhysicalToLinear() failed!". Unfortunately, the screen is usually black or jumbled at this point, so to most people, it looks like a crash. (If you don't believe me, type "duke3d > error.txt" at the command prompt and look at error.txt after running it :) Here's my workaround:

NOLFB.ZIP (1,350 bytes) A TSR that patches the VESA driver by fooling DOS programs into thinking the VESA 2.0 linear framebuffer modes aren't supported. Source code is included. You must run this program at the command prompt. Double-clicking on NOLFB.COM in the windows explorer will NOT work! If you're unfamiliar with DOS commands, then please follow these instructions:

For my example, I will assume that you have your game installed in the C:\DUKE3D\ directory and a copy of NOLFB.COM extracted into the same directory (also C:\DUKE3D\). Follow these steps:

  1. Start... Run... type "CMD.EXE" and press enter
  2. At the command prompt, type: "CD \DUKE3D" and press enter
  3. At the command prompt, type: "NOLFB" and press enter
  4. At the command prompt, type: "DUKE3D" and press enter
  5. At the command prompt, type: "EXIT" and press enter

If you have the game installed in a different directory, then you need to modify step 2 so it has the correct directory.

NOTES:

  1. NOLFB will only fix DOS VESA 2.0 applications that have a fallback code that supports the segmented video modes (from VESA 1.2). If the application does not run in segmented video mode, then it will exit with a visible error message instead of a black or jumbled screen.
  2. NOLFB does not add any new VESA modes to your computer! In fact it does just the opposite. If your graphics adapter does not support standard VESA modes (such as 640x480x8) in any DOS application, then this patch will not help you.
  3. Some newer video chipsets (most notably those based on the GeForce4 series) do not support VESA with resolutions above 640x480 under Windows NT/2K/XP. I believe this is due to a conflict between the VESA driver and the operating system and not NOLFB. If your monitor goes into a standby/power-off mode, and you are using a resolution above 640x480, please remember to also try 640x480 mode!
  4. Here's a list of programs I've tested that are fixed by this patch (assuming the above conditions are true): Duke Nukem 3D, Shadow Warrior, most of the Build engine tools, 2Draw, and some demos on my website that are linked to my DOS VESA code: "VES2.H".
  5. NOLFB will not do much in Win95/98/ME other than cause the framerates to decrease in games. Use at your own risk!

Duke Nukem 3D "echo" crash patch (04/18/2000-04/26/2000)

Has Duke Nukem 3D been crashing predictably whenever you enter certain places in the game? It happens mostly on "SB Live!" PCI sound cards, but may occur on others as well. Here are some examples of places that crash:

I made a little program that fixes this problem. It disables the "echo" effect by modifying some bytes in DUKE3D.EXE. This patch works for v1.3D (shareware & registered) and v1.5 (Atomic Edition). If you are patching v1.3d (registered), please be aware that this will require you to reinstall from the original CD if you purchase the Plutonium PAK at some point in the future.

DUKSNDFX.EXE (5,654 bytes) Please save this program to your Duke3D game directory and run it from there.

DUKSNDFX.C (5,167 bytes) Source code for hackers.

Known .EXE offsets to the start of this 5-byte sequence:
DUKE3D.EXE from:EXE File size:Hex offset to 5-byte signature (0x2D,0xE8,0x03,0x00,0x00):
v1.0 (Shareware)1,066,391 bytes0x74A29
v1.1 (Shareware)1,076,339 bytes0x75249
v1.3D (Shareware)1,178,963 bytes0x89090
v1.3D (Registered)1,179,131 bytes0x89040
v1.4 (Plutonium Pak)1,240,151 bytes0x8F1E1
v1.5 (Atomic Edition)1,246,231 bytes0x8FE51
v1.5 (Australian version)1,246,231 bytes0x8FE51
v1.5 (Walmart version)1,246,439 bytes0x8FE81

If your version is not listed here, UPGRADE NOW!

Or even better, help me find the offset in your EXE! Look for this 5-byte sequence: 0x2D,0xE8,0x03,0x00,0x00 and replace it with 0xB8,0x00,0x00,0x00,0x00. There will likely be more than one occurence, but you must only patch one (usually the first occurence). If you see a 0xE8 byte soon after the sequence, then it's a good sign. (Sometimes, Watcom C inserts instructions in between, so don't be alarmed if it's not right after the 5-byte sequence)

Shadow Warrior "echo" crash patch (04/28/2000)

Exact same fix as above, but for Shadow Warrior! Use this only if Shadow Warrior crashes in these places (among others):

This program supports ONLY version v1.2 (shareware) and v1.2 (registered) None of the 3dfx versions are currently supported. As a side effect, reverberation will be disabled. If you'd like to make your own patch for a version of Shadow Warrior not supported, look at the instructions at the top of my C file.

SWSNDFX.EXE (5,634 bytes) Please save this program to your Shadow Warrior game directory and run it from there.

SWSNDFX.C (5,537 bytes) Source code for hackers.


Ken Silverman's History of the Build Engine

These are only some of the highlights. I put the dates I found to be most crucial in the development of the Build engine in this list. The history includes everything from business deals to important features that were added to the engine. Some of the dates were quite hard to find - I had to search through old records to find evidence. In any case, it was a lot of fun to make this list even though it took a whole day out of my life.

BUILD .MAP and .ART format history:

During the development of the Build engine, I spent over half my time in Rhode Island (my homeland!). I went on a total of 10 "business" trips from 1994 to 1996. The Apogee/3DRealms office (which is located in Garland, Texas) was a destination to all of these flight paths. I also visited Redmond, Washington a few times to help out the Blood team (and also Lobotomy software when they were still working under the Apogee/3DRealms name).

So, how much time exactly did I spend away from home?

Where:

Ken Silverman's Frequently Asked Questions (& Answers)

Any game programming in your future?

For the near future I can tell you that the answer is no. Programming will always be a hobby of mine. Perhaps someday a great idea will come to mind and I won't be able to resist temptation. Until then, I don't know. Who knows - maybe it won't be a game. If I ever do start a new game, you will hear about it on this web site. (http://www.advsys.net/ken)

(07/15/2000): I'm playing around with a new voxel engine, but I don't know if I'll get anywhere with it. Right now, it supports voxels placed anywhere (built-in room over room), look anywhere (6 degrees of freedom), and some basic editing functions.

Do you still do any 3D programming?

As long as I'm alive, I'll always be doing some kind of programming. I have many programming interests besides 3D graphics: 2D graphics, sound & music, utilities, games, compression, and of course optimization. 3D graphics will always be very high on my list.

How do I get started in 3D programming?

  1. Know your math! For 3D engine programming, you will need to master: algebra, trigonometry, and geometry (feel free to sleep through calculus). You also should learn how to manipulate vectors, such as dot and cross products.
  2. Get a 32-bit C compiler so you can generate fast code quickly. Often times, you will find it difficult to debug your C code (even worse for assembly). In these cases, you should develop small sections of your code in a programming environment that you're more comfortable with (and port it to C later). For me, that's good old Microsoft QuickBasic.
  3. Spend all of your spare time reading, studying, and thinking about computer algorithms. Warning: This will put your social life at risk! Do this ONLY if you're willing to accept the consequences.

How did you hook up with 3D Realms?

Look at my Build history. Our first contact was the letter I wrote to them, asking for them to evaluate a beta version of Ken's Labyrinth. They were one of seven companies I wrote to at the time when I was trying to find a publisher for my game.

How long did you work on the Build Engine?

It all depends on how you define "work". Judge for yourself by looking at my Build History. Obviously I wasn't working on it continuously, but I did spend considerable amounts of time and energy for almost four years.

What's your favorite video game?

I really don't play games much these days (other than mine, of course) Well that's not really true. Since September 1999, I have been playing Q3TEST way too much. By the way, I play under the name of "Awesoken" (Awesome + Ken)

Are you any good at multiplayer games?

I'm ok, I guess. I used to be a keyboard-only person until a few years ago, when I forced myself to play with right hand on keyboard and left hand on trackball. (Before you ask, I'm right-handed, my older brother is left-handed, and we used to share a computer.) It improved my game quite a bit. Also, getting a low ping never hurts :)

What's the .MAP / .ART file format?

Go to my Build Source Code Page and download BUILDSRC.ZIP. I have a text file in there (BUILDINF.TXT) which describes both formats.

What's the PALETTE.DAT format?

See this separate PALETTE.TXT file which explains it all.

What's the TABLES.DAT format ?

See this separate TABLES.TXT file which explains it all.

What's the .GRP file format?

The ".grp" file format is just a collection of a lot of files stored into 1 big one. I tried to make the format as simple as possible: The first 12 bytes contains my name, "KenSilverman". The next 4 bytes is the number of files that were compacted into the group file. Then for each file, there is a 16 byte structure, where the first 12 bytes are the filename, and the last 4 bytes are the file's size. The rest of the group file is just the raw data packed one after the other in the same order as the list of files.

What's the .KVX file format?

Go to my Projects Page and download SLAB6.ZIP. I have a text file in there (SLAB6.TXT) which describes the format.

What's the .VOX file format?

Both SLABSPRI & SLAB6 support a simpler, uncompressed voxel format using the .VOX file extension. (See the documentation that comes with those programs.) The .VOX format is simple enough to fit a description of it right here. Here's some C pseudocode:

long xsiz, ysiz, zsiz;          //Variable declarations
char voxel[xsiz][ysiz][zsiz];
char palette[256][3];

fil = open("?.vox",...);
read(fil,&xsiz,4);              //Dimensions of 3-D array of voxels
read(fil,&ysiz,4);
read(fil,&zsiz,4);
read(fil,voxel,xsiz*ysiz*zsiz); //The 3-D array itself!
read(fil,palette,768);          //VGA palette (values range from 0-63)
close(fil);
In the voxel array, use color 255 to define your empty space (air). For interior voxels (ones you can never see), do not use color 255, because it will prevent SLABSPRI from being able to take advantage of back-face culling.

How does SLABSPRI convert images to voxels?

It starts out with a solid cube. Then it runs through all of the rotations, chopping out any voxels that lie behind a transparent pixel (color 255). Once this is done, it runs through all the rotations again, this time painting colors onto the voxel object. If an individual cube is painted twice, the colors get averaged. Voxels that don't get hit by paint get randomly set to a nearby color.

What is a voxel? Where does the name come from?

VOXEL = VOlume + piXEL. You can think of a voxel as a pixel with volume - a 3D pixel. It is an individual cube inside a 3D array of cubes, just like a pixel is a square inside a 2D array of squares. I actually got the name out of an old computer graphics book.

In Build, when I go into 3D mode the screen is jumbled. What am I doing wrong?

Wow! You're the first person to ask this question. That's why it's in my FAQ. Wait a minute... how could it be in my FAQ if you were the first... that doesn't make sense! Please read the text files that come with the game and stop asking this!

Do you have an old Build editor which can edit Lameduke (map version 5) or Witchaven (map version 6) maps? If not, then do you have a way of converting between the formats? What about supporting Legend of the Seven Paladins (map version 4)?

Due to a gap in my archives, I actually don't have any Build editors that are compatible with map version 5. (Version 5 only existed for about 3.5 months) I probably have a map version 6 editor somewhere, but I'd rather not release it because you can now download converters that let you take any Build map forwards in history from 4->5->6->7, or backwards from 7->6->5. Notice that there is no map version 5->4 converter. It is not an oversight. Write your own if you want it. Download here: CONVMAPS.ZIP (25,631 bytes, 04/25/2012, includes source code)

Have you made any maps for Duke3D?

No, only maps for Ken-Build.

Is there a way to increase the limits to the number of sectors, walls, and sprites in BUILD?

Yes, but since it's hard-coded into the engine, the only way is by doing a re-compile.

Can you answer my question about .CON files?

No! I had nothing to do with the design of the .CON files. They were designed by Todd Replogle, for use with Duke Nukem 3D. This is why you don't see them in Shadow Warrior or Blood. However with many of the sublicenses, Apogee/3DRealms gave out the Duke Nukem 3D source along with the Build engine. This is why you see it in some other games.

How do you pronounce Todd Replogle's last name?

He used to say it this way: "Ree-ploh'-gull". Then later, he told me it was: "Rep'-low-gull" (accent on 1st syllable), explaining that he used to mispronounce his name on purpose (just to confuse people). I'm still not sure which is right.

Can you release a version of Duke Nukem 3D with features that were in newer Build engine games?

Some features wouldn't be difficult, such as voxels because 99% of the code was part of my Build engine. Other features like room over room were added by individual developers - so that would take a lot longer for me. The hardest part of any update (if I had to do it all myself) would be to find the right places in Todd Replogle's code. I haven't looked at his code in a long time. But all this doesn't matter because I haven't been keeping in regular contact with Todd. And even if I did get it working, I would have to seek permission from 3DRealms.

I have a problem with a tool that is unique to Blood. Can you help me?

No, probably not. The Blood team wrote a lot of custom utilities for themselves and I just don't remember what most of them do anymore since I have my own tools that do much of the same thing.

Why does BSETUP have all those extra options that don't get used for anything?

Some of those extra options are used in my Build test game: "Ken-Build"

I have no life, and for fun, I was looking through Duke Nukem's BUILD.EXE with a hex editor. I noticed that there were some VERY interesting messages that never seem to appear inside the editor.

This is one of the few things in BUILD.EXE that I can't take credit for. Allen Blum made this modification to make his job even more interesting. In his code, the messages were disabled from displaying, but he forgot to also remove the message declarations themselves. A different message would pop up depending on what the current frame rate of Build was. "Slow" meant just over the line, and as the frame rate of Build got progressively worse, so did the messages.

Can you help me solve a problem with conflicting IRQ's / DMA's? Is your sound patch supposed to fix this?

Please don't ask me this. I don't install computers for a living. I usually have to resort to good old trial and error to get stuff like this to work. About the sound patches: They only fix a crashing bug inside the game when you walk into certain places that have the "echo" effect. My patch WILL NOT help you if you can't get the sound to work at all.

Will you be making a sound patch for Blood, Redneck Rampage, and the rest of the Build games?

Grrr... I have to draw the line somewhere. Blood - it might happen, but don't count on it. I don't even have copies of the others, so you can forget about those. You must realize that this problem is not even in my code. Apparently, there is a conflict with Jim Dose's echo routines and newer sound cards. It's not fair to blame him since these new sound cards didn't exist back in 1996. I don't know why it crashes. Just consider yourself lucky that I was able to make patches for Duke Nukem 3D and Shadow Warrior.

Are you going to release the Build Engine source code and if so, when?

(Update: 06/20/2000) Ummm... I think this link will answer your question in a most satisfying way. :)

What programming languages are you familiar with?

Basic (Microsoft QuickBasic 4.5), C (Watcom C/C++ v11.0, Microsoft Visual C/C++ 6.00), and x86 assembly language (16-bit, 32-bit, MMX, and Pentium III instructions). I use all 3 of them regularly. I first develop algorithms in QuickBasic because it has a great debugger. When I'm satisfied, I then port the code to C. The final step is converting some critical parts of the C code to assembly.

What C compiler do you recommend?

I recommend Microsoft Visual C because it's the industry standard... and also what I use for current projects. I used to use Watcom C when it was the only 32-bit compiler. I had lots of trouble finding example code for it because it was not so popular. Thankfully, everything is 32-bit these days. You'll save yourself a lot of trouble in the future by starting with a popular compiler.

Since April 2004, Microsoft has been giving out their latest command line compiler for free! You can get it here: Visual C++ Toolkit 2003 The difference between this and their commercial version is this doesn't include their fancy GUI/debugger interface. Strangely, I've always compiled things at the command line, so I'm perfectly happy with it :)

As for optimization, I've heard good things about Intel's compiler, but it's expensive and I've never tried it myself.

How do you program games?

By typing things on a keyboard. I love my Key-tronic 101 and wouldn't trade it for the world.

Do you answer your E-mails or are you just too busy?

I try very hard to answer all my E-mails. If you're really looking for no response, then all you have to do is go on and on about how "U da' MAN", ask no questions, and while you're at it, throw some exclamation marks all over the place!!! That should do the trick.

Do you use IRC or ICQ?

I used IRC a few times around the time of that Dukeworld interview, but haven't been back since then. ICQ: never used it. I also used AOL Instant Messenger for a while. Nowadays, I use Skype.

Is it ok if I mirror a part of your site onto my own site?

Yes, but only if you provide a link back to my site and are willing to update yours often enough - by that I mean that you should check my site for updates every once in a while. I hate having old stuff just lingering around.

What are your plans after graduation?

The first thing I plan to do after graduation is to lose all my wisdom. Oops, I omitted a word - I meant to say: ...lose all my wisdom teeth. :( Assuming I survive that (which I did BTW), my plans are: #1. Take over the world #2. Ok get the point, Ken: I have no plans right now.

Do you have any regrets about leaving Apogee/3D Realms?

Sure, I miss all the fun we used to have testing the game. The reality of it is this: the only way I could have maintained a future with Apogee/3DRealms is if I went into direct competition with Quake. At the time I was far behind, and I just wasn't interested in making a commitment with Apogee for several more years. (If you estimate the release date of Duke Forever, that would have been a lifelong commitment!) I thought it would be best if I returned to school while I was still young.


Interviews:

(NOTE: I have converted dead links to be unclickable, which is most of them : /)

An (http://www.theherald.org/issues/040198/duke.f.html) interview of me by the Brown Daily Herald.

An (http://www.planetduke.com/features/interviews/ks19981129_1.shtml) interview of me by Brad Wernicke at (http://www.planetduke.com) PlanetDuke (originally at Dukeworld). (11/29/1998)

An interview of me by Peter Bridger of (This/That) Strife (Streams). Also featured on Peter's page are his unique comic strips, which he made with the help of the Build Engine. (12/19/2001)

An interview of me by Dr. Curween from the Doom Encyclopedia website. (04/11/2002)

An (http://www.dosgamesarchive.com/interviews/kensilverman/index.php) interview of me by (http://www.dosgamesarchive.com>www.dosgamesarchive.com). (07/20/2003)

An (http://eliteincorporated.org/Worlds/FPS/games/Ken's%20Labyrinth/interview.html) interview of me by Advocate of (http://firstpersonshooters.org) . (06/20/2004)

An (http://www.polarismapcentral.com/Misc/Duke3d/Interviews/KenMike359.htm) interview of me by Mike359 of (http://www.polarismapcentral.com) Polaris Map Central. (10/01/2004)

An (http://home.arcor.de/cppjunky/content/misc_szene_ken1.htm) interview of me by (http://cppjunky.online.cx) CPP Junky. (09/14/2005)

An interview of me by Classic DOS Games. (11/21/2005)

An interview of me by Peter Bridger of (This/That) Strife (Streams). (12/03/2005)

An interview of me by 3D Realms (part of their Apogee legacy series) (02/27/2006)

An interview of me by Tcerhnobog of the Blood Wiki (10/23/2008)

An interview of me by Duncan Rule of Retroaction (see issue two) (05/13/2009)

An interview of me by Mister Dai (aka David Boyer). (03/25/2010)


Other links:

Find out more about these games from the company that was in the middle of it all: Apogee/3DRealms.

I made a "What is the Build Engine? FAQ" to clear any confusion about what my role was during its development.

Jonathon Fowler's Build engine page- A compilation of all the Build games onto one site, with screenshots and download links for each game. His site is also home to a great Windows port of Build and Duke Nukem 3D.


Back to Ken Silverman's Official Home Page