To allow simple, consistent ways to patch the DOOM executable.
This is a very simple patch program. It was written with DOOM in
mind, but should be able to be used with almost any file (with some
things in mind, see caveats). I wrote it to be flexible, and made
it allow easy patches to different versions of the executable.
This program takes either 1 or 2 command line arguments. If there
are two command line arguments, the first is the name of the file,
and the second is the offset in the file to make the modifications.
If there is only one argument, it is the offset into the file. In
this case, the file 'doom.exe' in the current directory is assumed
to be the file to edit.
After the program starts, and it does a few things, it will ask you
how many bytes you want to change. Enter the amount you desire.
Now the program will put you in a rather crude editing mode. The
current values at the requested address will be display, and a
"_" will be shown a couple of lines below. This represents the
current editing position. You may enter in the patch values you
want. If you make a mistake, the backspace should work; however,
I wouldn't count on it 100%. Try not to make mistakes, and don't
start without backing up the original.
After you have entered the correct number of bytes, the program will
display what you entered and ask if that is OK to patch. If you
say yes, the program will patch the addresses and drop you out on the
DOS command line. Otherwise, it will just drop you out in DOS that
I am trying to get a consistent way to publish the many things I
have found about the executable in a way that will help most people.
I will organize this into some sort of table ASAP. I am always
welcome to new entries from anyone, and will also field requests
to figure out patches to do new things.
This program will modify your executable. If you enter erroneous
information, you could DESTROY your executable. Please backup the
DOOM.EXE (or whatever other file you are patching) before beginning.
I have tried to make sure it is stable, but we all know how that
goes. If anyone catches anything I missed (bugs that is), I would
appreciate a line.
This program is crude. It is not user friendly. I did not spend a
lot of time on it. If you have suggestions for interface or other
modifications/additions, I would love to hear them (particularly if
they are not too complex to implement).
Say I want to change 4 bytes at hex offset 8ab48 in doom.exe (which is in
the current directory)
Then enter 4 when it asks how many bytes to change, etc, etc.
Say I want to change 6 bytes at hex offset 12af9 in \games\doom\doom.exe
(which is NOT in the current directory)
dmpatch \games\doom\doom.exe 12af9
Then enter 6 when it asks how many bytes to change, etc, etc.
I wrote this for my own use. For this reason, I wrote it to be
most compatible with the disassembler I use. The disassembler that
I use does some weird segmenting stuff with the DOS4GW header, and
hence, subtracts 1dd0 (hex) from each address (ie: offset 5dd0 in the
file appears as 4000). So, the patch values that I supply will be
1dd0 (hex) less than their actual offset in the file. If you are
going to use this program on a file other than DOOM, keep this in mind.
I would love to have some help disassembling doom.exe. If anyone has
done any of this and would like to share it with me, I will add it
to what I have already (and of course give credit where due). I think
we could get a pretty decent list pretty quick with a few peoples
I wrote this program for my own use. I am releasing it into public
domain so that others can use it to. I make no guarantees express
or otherwise about its operation. If you can't deal with that, don't
use it. I will not accept responsibility for how this program is
used (particularly if it is illegal), or what it does to your
information if you use it wrong or there is a bug in it. The program
may be freely distributed.
ID software has no knowledge (to my knowledge) of this software and
is in no way affiliated with it. They cannot be held responsible for
it in any way.
Please any suggestions/observations/etc e-mail to me.