DeHackEd v. 2.0 By Greg Lewis (Tree) gregory.lewis@umich.edu The premiere Doom.exe hack editor! This is a general help file for DeHackEd version 2.0. For more specific product information, see the file DEHACKED.TXT. If the information contained here is not specific enough, or you want more technical details, get a copy of the the doom.exe hack specs written by Matt Fell. They are available for FTP at infant2.sphs.indiana.edu, in the directory /pub/doom/wad_edit/doomhack, and are called DEHACKER.ZIP. And, if you are more interested in simply finding fun stuff to experiment with, check out "Fun with DeHackEd" (dhefun??.txt) bundled with the program. It was written by Dan Lottero, and includes all sorts of wild things to do! This help file is arranged in the following nine sections: 1. Command Line Options 2. DeHackEd.ini Options 3. Patch File Info 4. Available Keys 5. Thing Editor a. Thing fields b. Bit fields 6. Frame Editor 7. Ammo Editor 8. Sound Editor 9. Sprite Editor 10. Text Editor So, without further ado, here it is! 1. *** Command Line Options \------====================== First, an explanation of command line options. The full command line syntax for DeHackEd is: dehacked [doompath] [-load ] [-save ] [doompath] is optional, and specifies a different location for the doom files, doom.exe and doom.wad, other than the current directory. -load will update the doom.exe file with the patch called and return to the DOS prompt--great for batch files!. And, conversely, the -save option will save the current doom.exe status to a patch file named and return to the DOS prompt. These options are similar to 'l' and 's' in DeHackEd, although when used in DeHackEd the 'l' option requires a 'w' after it to actually write the changes to the doom.exe file. See section 4 for more info on 'l', 's', and 'w'. Example command line: dehacked c:\games\doom -load suprwep4.deh This will start DeHackEd, using the doom.exe file found in c:\games\doom, will update it with the info from the suprwep4.deh patch file, and return to the DOS prompt. And of course, just typing a plain 'dehacked' will take you straight into the DeHackEd main program. 2. *** DeHackEd.ini Options \------====================== Included with DeHackEd 2.0 is a new DeHackEd.ini file which can specify several parameters for DeHackEd. They allow you to customize where you want your patch files located, what your doom files are named, and more. Note: you must keep a space on both sides of the equal signs for a parameter to be processed properly. A summary of the allowable command line options follows: # Start comment lines with a pound sign. Anything after the pound sign is ignored. doomexe = This is the name of your doom.exe file, and full path if necessary. You can change this easily to determine whether you are working with a Doom 1.2 exe or a Doom 1.666 exe. This doesn't need to be included if you are running DeHackEd from the directory that your doom.exe file resides in. doomwad = This is the name of your doom.wad file, and full path if necessary. This must be a registered wad file, not a shareware file. This is needed for verification that you are really registered, and not just trying to fake it. Once again, if this is in the same directory that DeHackEd is run from you don't need this parameter. doompath = This is the path from which you want Doom to be run. This is only used when using the 'r'un option from inside DeHackEd. doomargs = These are command-line parameters that are fed to Doom when it's run using the 'r'un option from within DeHackEd. Useful if you are using DeHackEd for a custom patch for a WAD you are writing; you can simply include a '-file ' in this line, and Doom will load your level every time DeHackEd runs it. patchdir = This is the directory that DeHackEd will look in for patch files. A nifty way of keeping all of your thousands of .DEH files out of the Doom main directory. The following parameters are all totally optional, and need only be used if you are doing some "custom" doom.exe hacking. doomver = <0 | 1> This is the version of Doom you are hacking. 0 is Doom 1.2 and 1 is Doom 1.666. This *must* be included if any of the following options are set. doomsize = The size of your Doom.exe file. I've had a few people complain that they have a non-standard doom.exe file size, and this may fix your problem simply by changing this. If you get erroneous results though, you may have to play with the following params... thingoff = soundoff = frameoff = spriteoff = ammooff = weaponoff = textoff = These are the offsets in the doom.exe file for their corresponding data chunks. Read Matt Fell's specs if you don't understand what these sections are, they are explained fairly clearly (among the rest of the information in the file). PLAY WITH THESE AT YOUR OWN RISK. 3. *** Patch File Info \------================= This is some more info on patch files, which may help explain any difficulties you are having with them. Patch files save ALL the info on Frames, Ammo, Things, Weapons, Sound, Sprites, and Text, NOT just changed data. Saving only changed data would involve complications with just what was 'changed' (don't ask, just trust me!). This way, if several people load a specific patch, you KNOW everyone will have the same doom.exe file. The patch files that DeHackEd 1.3 created saved only 4 pieces of info: the Frames, Things, Ammo and Weapons. If you are editing Doom 1.2, DeHackEd 2.0 will only save those pieces of information in order to create a patch file compatible with DeHackEd 1.3. It is a good idea to save back-up patch files before messing around with your doom.exe file. The standard naming convention for back-up patches is "normal??.deh", where the ?? are replaced with 12 or 16, depending on your doom version. Those files are then also used for merging patches, as a "clean" patch of your doom.exe file. For example, if you are merging in a patch for Doom 1.666, DeHackEd expects to find a clean patch file called "normal16.deh" in your patch directory. If anyone is interested in the actual make-up of the patch files (for compatibility with your own doom exe editor, or for any other purposes) please contact me and I'll let you know the format that they are stored in. 4. *** Available Keys \------================ Available keys are as follows: ESC Exits to DOS. Or, if you are in an input box, or just about *anywhere* in the program for that matter, it will back you out to whatever you had previously been doing. This is certainly an improvement over 1.3, as many of you will attest. :-) Enter Edits the current field, if it is an editable field. To leave an editing box if you hit Enter by mistake, simply hit ESC. Space Views, plays, or displays the current field, if applicable. If you are on a "frame" field, such as any of the Thing frames, or any field in the Frame table, or the Frame fields in the Ammo editor, you can see the frame that you've got highlighted simply by hitting the spacebar. (Note: If you are on the "Next Frame" field in the Frame editor you WILL see the next frame, not the current frame.) If the frame you are viewing is the first in a series of frames, repeatedly pressing the spacebar will cycle through all of the frames. Escape will exit. The spacebar will also view the full text strings in the Text Editor. And it will also play the sounds when you are in a sound field (currently not inplemented yet). C The copy command. This will copy information from one entry to another. The syntax is fairly basic: enter the number of the entry to copy FROM, and the entry number to copy TO. A clipboard for Things is available as Thing #138 (Thing #104 for Doom 1.2), which is just a temporary storage Thing (and is not actually present in the Doom.exe file). Note that the Thing names will not change... the Thing name is not actually in the Doom.exe, and is just included for your own benefit. The Thing # is also only for the convenience of the hacker, and is not in the doom.exe file. A specific Thing # will always have the same Thing Name, and this cannot be changed. D Change numeric mode to Decimal. This displays all numbers as normal decimal numbers. 'H' will switch to hexidecimal displays, which may be helpful sometimes. G Goes to a specific Thing. If you know exactly which Thing or Frame you want to see, jump right to it without bothering to arrow or page down. The Things now have a goto window arranged alphabetically by name. That's so that you don't need to remember lots of Thing numbers all the time! H Displays all numbers in the hexidecimal number format. Useful for those true hackers who live in hex their whole lives. Use 'D' to return to the normal decimal world. J Jumps to the information in the current field, in it's respec- tive editor. For example, if you are in the Thing editor, and the 'Death Frame' is highlighted, and you press the 'j' key, you will jump to the Frame editor, with the corresponding Frame number high- lighted. A very handy tool for moving around the various editors. Generally it'll jump to a "logical" place, if there is one. L Loads a patch file. You must enter the patch filename, and it will replace the current information. Note that 'w' must still be used to make the changes permanent. You can also do this from the command line by typing dehacked -load One caveat: the load feature was just recently changed to allow automatic conversion of 1.2 patch files to 1.666 files. With the few patches I've tested i have not noticed any problems loading 1.2 patch files into 1.666. However, 1.666 to 1.2 will NOT work. M Merges a new patch file into Doom. The 'l'oad option overwrites all information with the information from the new patch file. The 'm'erge option compares the patch file that you specify with a "normal" patch file, and only changes data that is *different* between the two files. It will not always give the expected results when the new patch file changes something that's already changed in the current doom.exe, but it will usually work. Also, you will need to have a "normal" patch file for Doom to compare against. See the section on patch files for more information on those patch files. I have been having a few problems with this particular command, and I'm checking into it to see if I can pinpoint the problems. It should be fixed by next release. R Runs Doom. This option is slightly tempermental, for reasons unknown to me. If you have plenty of memory, try hitting it to see if it'll work. It allows you to quickly test-run Doom, to check out the changes you've made (remember to hit 'w' before running!). After Doom finishes, you will be returned to your current place in the editor to continue working. You can specify command-line parameters for Doom, and the directory to run Doom from in the DeHackEd.ini file. S Save a patch file. You must enter the patch filename, and it will save all editable material to the patch file. It saves either a 1.2 patch or 1.666 patch depending on what doom.exe you are editing at the time. You can also do this from the command line by typing dehacked -save U Undo all changes. This reloads the information straight from the doom.exe file, and will return you to your most recent 'w'rite of the doom.exe file. W Writes all changes to the doom.exe file. This step is necessary to get any results! F2 Thing Editor. This is the main Thing editor, the default screen in DeHackEd 2.0. See section 5 for more detailed Thing info. F3 Frame Table. Displays Frame information, in a list format. See section 6 for more detailed Frame info. F4 Ammo/Weapon Editor. This allows you to edit the ammo and weapon amounts and graphics. F5 Sound Table. A jolly good table of all the sounds. Editing of the sounds is included in DeHackEd 2.0. F6 Sprite Table. A handy list of all the sprites, in case someone needs it. Also has recently added editing capabilities. F7 Text Editor. This shows all the text strings in the Doom.exe file. You can also edit the strings, a capability new to DeHackEd. F8 Thing List. This is a Table version of the Thing editor. It shows only the most important Thing information, and is meant as a quick- reference guide. 5. *** Thing Editor \------============== a. Thing fields This is the first thing you see when you start up DeHackEd. It is also one of the main areas of the program. Edit Things by highlighting the desired field and hitting Enter. Thing Number: The number of the Thing. Basically it's just for reference, numbered in order according to how the Things are stored in the doom.exe file. Note: these are different between 1.2 and 1.666, because new Things have been added! Thing Name: A short descriptive name for the Thing. This info is NOT stored in the Doom.exe file, and thus you can't edit it, and it will always remain the same. So a Thing #55 (the rocket launcher in Doom 1.2) will always be described as a "Rocket Launcher", even if you change it to something entirely different, like a Cacodemon. Thing ID#: This is the Thing's 'identification number' which is used in level developement (WAD files). Wherever this number appears in a WAD file, this Thing will appear. Hit Points: How much damage it can sustain. For all non-living Things, it's generally 1000 (not necessary though). Speed: How fast it can go. Projectiles have their speed multiplied by 65536, but DeHackEd displays projectiles the same way it does normal speeds (so you don't need to wade though large numbers for projectile speeds). Whether a certain is a projectile or not is determined by bit #10, 'Projectile/player'. If that bit is set, the speed is displayed as a Projectile, otherwise it is a "normal" speed. Basically though, just ignore it and DeHackEd will take care of it for you. :-) Width: The radius of the Thing. A narrow Thing is harder to hit! To fit a Thing through a narrow passageway, you need to have the passage slightly wider than twice it's width. Thus a passage must be 33 to allow the Marine through, even though his actual radius is 16. Height: Same as width, but it's height. Duh. :-) Missile Damage: If it's a projectile, how much damage it does upon "death" (explosion). Note that Lost Souls have this set to 3. Reaction Time: For monsters, their reaction time. Lower=quicker to attack, higher=slower to attack. Pain Chance: Chance out of 256 that a monster's action/attack will be interrupted by an injury. The Lost Soul always will (256), and the Spider Boss very rarely will (40). Mass: Thing's mass. Set a trooper's to 1 and watch him fly! Note the Cyberdemon has a high mass, and your rockets don't budge him much. Bits: This is the actual value of all of the bits. Just change this one number if you want to set all of the bits at once to something. See also the Bit fields portion of the text, coming up in a few pages or so. SOUNDS Alert: Sound made when the monster first spots the player, or a projectile is launched. These all point to the sounds in the Sound table. Attack: Sound made during a close attack. Pain: Sound made when the Thing is injured. Death: Sound made when the Thing dies. For projectiles and barrels, the sound of it's explosion. Action: Sound made when the Thing is just milling around. FRAMES First Normal: What an inactive thing looks like, or a monster that's not yet active. All frame numbers refer to the Frame table. Only the first frame is listed, you will need to refer to that Frame entry in the Frame table to find out if it's actually a sequence of frames. First Moving: A movable Thing's "first steps." Injury: Frame played for an injured Thing. Close Attack: Attacks that are close (clawing imps). Far Attack: Attacks that are far away (imp winding up for a fireball attack). Death: Monster death or barrel/projectile explosion. Explode Death: Exploding death (slop!) for players, troopers, imps, and sargeants. Respawn: This is the frame that's shown when the Thing comes back to life due to the ArchVile. This field is only shown for Doom 1.666. b. Bit Editor 0.Gettable Thing: Something that can be picked up by the player, like an ammo clip. 1.Obstacle: Something that can't be walked through. 2.Shootable Thing: It will only take damage if this is set. Note that barrels also have this set. 3.Total Invisibility: The Thing just can't be seen, no-how, no-way. It won't even show up with iddt-iddt. The technical reason for this is that it isn't included in the list of objects in the Sector, and thus isn't even considered for drawing. 4.'Automatics': From Jason Gorski: "Okay well if you don't want your weapons to auto-lock onto something set the automatics to yes." Basically Things like PUFF, TFOG, BLUD, and projectiles. 5.Unknown ??? If you find out what any of the Unknowns do, please let me know so I can include it in future versions! 6.In Pain: Used internally by the doom.exe to determine if a monster is in pain or not. 7.Unknown ??? 8.Hangs From Ceiling: For those gory legs & mangled bodies. Have it set, well, if the Thing hangs from the ceiling! 9.No Gravity: Used for floating monsters and Things that aren't on the ground. 10.Proj/players: Set for projectiles and players... ?? 11.Can pick up items: This Thing (i.e. the player) can pick up Gettable Things. 12.No Clipping: Same effect as idspispopd, but also effective for monsters. 13.Unknown ??? 14.Floating: For floating monsters, like the Cacodemon and the Lost Soul. 15.Semi-No Clipping: Kinda like idspispopd, kinda not. You can't walk through walls, or trigger any linedefs, but you can walk over any height cliffs. 16.Projectiles: Set for projectiles. 17.Disappearing Weapon: This is used for weapons such as the shotgun that the sargeants use, so that it disappears when picked up in a multi- player game. Normal weapons do not have this set, however, because they stick around in normal multi-player games when picked up. 18.Partial Invisibilty: The Spectre effect. 19.Blood (vs. puffs): Whether a thing bleeds (bit off) or puffs (bit on) when hit. The barrel is the only default Thing that has this set. 20.Sliding Helpless: ??? (Try setting this and bit 7??) 21.Unknown ??? 22.Counts for Kill% This Thing counts as part of the Kill% at the end of the level. 23.Counts for Item% Just like Kill%, but for Things. 24.Unknown ??? 25.Not in Deathmatch: Things not present in Deathmatch mode, such as keys and the normal "Player" starting spots (deathmatch spots are used instead). 26.Color 1 00-greens->greens 01-greens->browns 27.Color 2 10-greens->indigos 11-greens->dark reds 28.Unknown \ 29.Unknown Perhaps these are unused??? 30.Unknown / 31.Unknown / 6. *** Frame Editor \------============== This displays the majority of the Frame information. Each frame has six editable fields. The only two fields that are NOT shown on the screen are always 0 in all of the Frames. Go figure. Frame #: This is the number that is specified in the Thing Frame fields. Name: A lookup done on the Text info in the doom.exe file, specified by a reference to the Sprite #, the Sprite Table, and the Sprite subnumber. Sprite #: The sprite that is shown for this Frame. Sprite Sub #: The individual "picture" (for lack of a better word... I think the technical term is "lump") suffix for this Frame. In the Doom.wad, there is (for example) a Sprite called TROO, for the trooper. The sub # specifies which TROO picture to use... TROOA, TROOB, TROOC, etc. Bright Sprite: This check box is not actually included in the Doom.exe file. The Sprite subnumber is multiplied by 32768 if the Sprite is to always be displayed at it's full brightness. I've just changed that into a check box to make it easier to make a Sprite bright, or not-bright. Sprites that are always displayed at their full brightness are Lost Souls, plasma bullets, etc... they are always visible no matter what the lighting is. Next Frame #: Which Frame to play next. You can skip a few shotgun frames this way, to make the super-fast ("combat") shotgun. Duration: How long the frame stays on the screen. Make 'em all 1 to make the super fast shotgun *really* be super fast! Notice that the notoriously slow BFG has a value of 20 and 10 for a few of its Frames. (hint hint... =) Code pointer: An offset in the doom.exe file to where it should look for the "action" associated with this Frame. It appears after more digging that this value is really useless. The actual location in the code is specified by a relocation table elsewhere in the doom.exe, which is referred to instead of the code pointer. 7. *** Ammo Editor \------============= Weapon Name: The name of the weapon (not editable) Ammo Type: A pithy description. This will be 'N/A' when an 'unknown' ammo type is given for the Ammo Number. Ammo type 5 is listed as "Unlimited". Ammo Number: 0=bullets 3=rockets 1=shells 4= ??? (none) 2=cells 5=unlimited (fist/chainsaw) Max ammo cap: The starting capacity for the current type of ammo. It's listed on the right side of the slash on the status bar. Backpacks will double this limit automatically. This will be 'N/A' for unknown ammo types. Ammo per item: How much ammo you get when you pick up a power-up of the current ammo type. For example, normally the bullet power-up gives you 10 bullets. This value is multiplied by 5 for the 'large' power-ups, i.e. boxes of rockets, boxes of shells, etc. Different difficulty modes also change this. Also 'N/A' for unknown types. Bobbing1-3 frame: Frame numbers for the bobbing weapon. This is the number that Doom refers to in the Frame list for more information. Shooting frame: Frame played when the weapon shoots. Firing frame: Frame that actually shows the "flames" from the weapon. 8. *** Sound Editor \------============== Sound Number: This is the number that's referenced by the Things for each sound. Text Offset: The offset into the Text section where the sound name is found. Sound Name: Found by simply checking the Text section at the correct offset. 0 / 1: ??? Perhaps some complicated sound thingy. Value: ??? Another unknown sound value, perhaps something dealing with how the sound was sampled. Ammo per item: How much ammo you get when you pick up a power-up of the current ammo type. For example, normally the bullet power-up gives 9. *** Sprite Editor \------=============== Sprite Number: The number in the Frame table that refences this Sprite. Text Offset: The offset into the Text section where the Sprite name is found. Sprite Name: Also found through a simple lookup in the Text section. 10. *** Text Editor \------============= Text Offset: The offset into the Text section of the current Text string. Text: This is the actual text that's located at the text offset. Some notes are in order on the Text viewing, editing, etc. First of all, if the Text is longer than about 60 characters (too long to fit on one line in the general Text screen) three ellipses are displayed at the end of the line. Non-printing characters, such as new-lines, tabs, and other screwy characters are shown by a tilde symbol in the text (~). If you want to view the actual text, just hit the Spacebar and a window will pop up with the actual text string in it. A newline is shown by a '\n' shown in black (dark grey), tabs by '\t' in black, and so on. The text is formatted in basically the same way that it would be on-screen. To edit the text, just hit Enter and the view window and an edit window will pop up. Enter your new text in the edit window, and hit Escape when you are done editing. If you are hitting Escape to cancel the current editing operation, answer 'n'o when asked if you want your changes saved, otherwise answer 'y'es and the text will change to your modification. Because each text string is variable length in the doom.exe file, you have a slight lee-way in how long the edited text needs to be. The minimum and maximum length for the string you are editing are shown on the top line of the editing window, along with the current number of character. Generally you will have a range of 4 characters that the new string must fit into. Typing beyond the maximum number of characters is not allowed, and stopping short of the minimum is also not allowed. The text editor is not exactly a full-fledged version of Wordperfect, so the only movement key you have is the back-space... no arrow keys, no macros, no spell checker, etc. :-) That's about it. Any more question? Feel free to write me at gregory.lewis@umich.edu for more information. Have fun!