home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Action Ware 12: Heretic & Hexen
/
actionware12.iso
/
acware12
/
utility
/
dm2conv.doc
< prev
next >
Wrap
Text File
|
1995-05-24
|
27KB
|
679 lines
=======================
DM2CONV v3.0
by Vincenzo Alcamo
=======================
** DESCRIPTION
--------------
This program converts DOOM/DOOM2/HERETIC levels to run with one of the
other games: a total of six different conversion types.
Some of DM2CONV's features are:
- DOOM, DOOM II, HERETIC support
- level conversion and remapping
- music conversion, remapping and mixing
- linedef/sector types remapping
- wall/floor textures remapping
- resource renaming
- object substitution with difficulty level & conditional substitution
- fully programmable via response files
- GFXMAKER utility to use one game's textures inside another one
PLEASE, take the time to read this entire documentation because v3.0 is
a totally new program. It has a different syntax and many new features.
** WHY I MUST CONVERT A PWAD?
-----------------------------
Levels designed for DOOM are incompatible with DOOM II or HERETIC
because some resources (ie: graphic bitmap) and objects only exist
inside the DOOM main wad file: DOOM.WAD.
Nevertheless, if you have played DOOM II or HERETIC you should have seen
new monsters and things (the SuperShotgun, the Ethereal Crossbow...).
DM2CONV handles the conversion process in a very easy way.
Let's introduce some conventional names:
D = DOOM
D2 = DOOM II
H = HERETIC
If you want to convert from game1 to game2 you should type:
DM2CONV source destination @:(game1)TO(game2)
Let suppose you want to run SNIPER.WAD (a well-made level by Eric C.
Reuter) with DOOM II; just execute the following command:
DM2CONV SNIPER.WAD SNIPER2.WAD @:DTOD2
For HERETIC you have to execute:
DM2CONV SNIPER.WAD SNIPERH.WAD @:DTOH
NOTE: DM2CONV requires the DEFAULT.RSP file, place it in the same
directory where DM2CONV.EXE resides.
Please, read carefully the KNOWN PROBLEMS paragraph.
** HOW THE CONVERSION WORKS
---------------------------
The differences between DOOM / DOOM II / HERETIC are the following:
- many resources have different names
- most wall/floor textures are different
- new things or missing things
- incompatible linedef/sector types
DM2CONV renames the resource to their appropriate names, remaps the
textures to similar ones, changes the objects, etc...
The general syntax is:
DM2CONV <input> [output] [/symbol[=[value]]]... <@response>...
input
This parameter is required: it specifies the name of the wad to
convert. The .WAD extension is optional.
The input file must be a PWAD or a IWAD file.
output
This is the name of the output wad. The .WAD extension is optional.
If a file of the same name already exists, it is deleted.
If this parameter is omitted, the input file is overwritten (you
should make a backup copy of the source file).
/symbol[=[value]]
You can define or undefine a symbol.
/name The symbol 'name' is defined with the 'name' value
/name=value The symbol 'name' is defined with the value 'value'
/name= The symbol 'name' is undefined.
@response
response is the name of a text file containing additional parameters
for DM2CONV. The .RSP extension is optional.
If the response file is not found in the specified directory, it will
be searched in the same directory where DM2CONV.EXE resides.
** RESPONSE FILES
-----------------
If you have read the above paragraphs, you may think that DM2CONV is
rather simple. You may also think that simple programs can do only
simple things: THIS IS COMPLETELY WRONG.
DM2CONV has a simple syntax because it is an interpreter:
all conversion logic is contained inside response files.
I have supplied a basic response file, DEFAULT.RSP, that handles all the
conversion process. If you want to customize the conversion, you should
edit the DEFAULT.RSP file, or create a new one.
Response files are a sort of batch files, a set of commands have been
provided to handle response files.
@[response][:label]
This command calls the specified response file (like DOS CALL).
If a label is supplied, the execution of the response file
will start at the specified label: a label is defined with a
colon, like in DOS batch files.
If the response name is omitted, the current response file is
used or, if in command-line mode, the DEFAULT.RSP is used.
The maximum number of nested response files is 10.
Examples:
@TEST ;call the TEST.RSP file
@TEST:NO1 ;call the TEST.RSP file at line :NO1
@:SUB2 ;call the current response file at line :SUB2
:label
This command defines a label inside a response file.
;comment
All text in a line after the semicolon is a comment and is discarded.
RETURN
This command terminates the current response file and returns
control to the calling response file.
ABORT
This command terminates the program, control returns to DOS.
ECHO text
This command displays the specified text.
IFDEF symbol
IFNDEF symbol
ELSE
ENDIF
These commands implement conditional parsing of response files.
If a symbol is defined (IFDEF) or undefined (IFNDEF) parsing
will continue on the True branch or in the False (ELSE) branch.
IFDEF/IFNDEF can be nested. There is no limit for nesting level.
Example:
IFDEF TEST
ECHO TEST is defined
@TRUE ;do something
ELSE
ECHO TEST is not defined
ENDIF
SET symbol[=[value]] ...
This command defines or undefines a specified symbol.
It is equivalent to the /symbol command, but it is for response files.
Use SET alone to display the symbols currently defined.
Examples:
SET TEST=2 PIC=GIF ;defines TEST and PIC
SET GFX= ;undefines GFX
SET ;display all symbols
** SYMBOLS
Symbols are a new features of DM2CONV and are used primarily for
conditional parsing (IFDEF/IFNDEF).
Symbols can be defined with the SET or / commands (see the general
syntax). Any symbol can be redefined or undefined.
There are two types of symbols: environmental and private.
Private symbols are those defined using DM2CONV, environmental symbols
are the environment variables of the DOS shell.
An environmental symbol cannot be redefined or undefined, but a private
symbol of the same name has the precedence over it.
The SET command will display only the private symbols.
Although you can use any name for a symbol, there are some symbols
that performs special functions:
SOURCE
This symbol contains the name of the source file, as specified in
the command line of DM2CONV.
Can be (re)defined in a response file.
DEST
This symbol contains the name of the destination file, as specified
in the command line of DM2CONV.
Can be (re)defined in a response file.
HELP
This symbol, if set, will skip the conversion process, and displays
the help page of DM2CONV.
It is the same as to type DM2CONV with no parameters.
FROM
This symbol specify the format of the source file.
Valid values are:
D or DOOM for DOOM wads
D2 or DOOM2 for DOOM II wads
H or HERETIC for HERETIC wads
Currently this symbol has no use since no checking is performed
on the source file format.
Default value is DOOM.
TO
This symbol specify the format of the destination file.
Values are the same for the FROM symbol.
Default value is DOOM2.
This symbol is needed to change the names for levels and musics.
REMAP
This symbol enables the level remapping feature.
Just define it with the number of the first level, and all
levels in a wad are remapped.
Examples:
/REMAP=5 ;start from E1M5 or MAP05
/REMAP=10 ;start from E2M1 or MAP10
/REMAP=28 ;start from E4M1 or MAP28
Musics are remapped automatically: if E1M1 is mapped to E2M1, then
D_E1M1 is mapped to D_E2M1.
DEBUG
This symbol, if set, will enable the debug mode.
In debug mode, detailed information are shown: currently only
statistics about the object conversion are displayed.
Be warned: debug mode could generate a large amount of text.
MIX
This symbol enable the music mix feature.
If it is defined, all musics in a wad are mixed (randomized).
You can have a wad with several musics and mix them before running
DOOM to play musics in a random order.
SEED
This symbol pertains to the object substitution algorithm.
It defines the value for the random number generator's seed.
Default is 0.
Each level is randomized with the specified seed.
ONCE
This symbol pertains to the object substitution algorithm.
The value of the symbol specify the objects suitable for conversion:
0 all objects can be converted
1 only objects not already converted
2 only objects already converted
others same as 1
/ONCE means /ONCE=ONCE, so the default value of 1 is used.
Example:
/ONCE= ;with ONCE undefined (or ONCE=0)
8=3 ; objects type 8 becomes type 3
3=4 ; all objects type 3 becomes type 4 -> no type 3 remains
/ONCE ;with ONCE defined (ONCE=1)
8=3 ; objects type 8 becomes type 3
3=4 ; objects type 3 (not the former type 8) becomes type 4
GFX
This symbol is used by DEFAULT.RSP: it specify to not convert
textures and floors names.
You must define this symbol if you use the wad built by GFXMAKER.
See GFXMAKER for more details.
HANGS
This symbol is used by DEFAULT.RSP: it specify to convert hanging
objects (valid only for HERETIC to DOOM/DOOM2 conversions).
In HERETIC, players can walk under hanging objects, but not in
DOOM/DOOM2.
** REPLACEMENTS
To convert a level several things must be replaced: texture names,
floor names, directory entry names, objects types, linedef and sector
actions.
All of these replacements can be specified in a response file.
A replacement expression must not contain spaces, thus more than
one expression is allowed on the same line.
A section tag specifies the type of replace expression.
Valid section tags are:
[TEXTURES] ;texture name replaces
[FLOORS] ;floor name replaces
[NAMES] ;directory entry names replaces
[THINGS] ;object replacement expressions
[LINEDEFS] ;linedef replacement expressions
[SECTORS] ;sector replacement expressions
[OBJECTS] ;object names (see OBJECTS.RSP)
Only the first 3 characters of a section name are used.
[TEXTURE] [FLOORS] and [NAMES] expressions
oldname=newname
[LINEDEFS] and [SECTORS] expressions
action1,action2,...=newaction
action1-action2,...=newaction
[OBJECTS] expressions
number=[(radius,height)]game,name
Game is a combination of game ids: D for DOOM, D2 for DOOM II
and H for HERETIC.
Radius and height are optional and are currently unused.
Example: 2001=DD2,Shotgun
82=(20,32)D2,Super Shotgun
NOTE: spaces are allowed after the equal sign, only one object
per line can be defined.
[THINGS] expressions are discussed in the following paragraph.
** OBJECT SUBSTITUTIONS
-----------------------
All things in DOOM are objects: lamps, monsters, weapons, power-ups,
obstacles, other players, etc..
DOOM II supports all DOOM objects plus others: the super shotgun, the
megasphere, many new monsters, etc..
HERETIC hasn't any of the DOOM objects.
With DM2CONV you can transform specified DOOM objects into DOOM II or
HERETIC objects. The object substitution is such a process and is
enabled by specifying at least one replacement expression.
A replacement is a string describing what objects to transform and how
to transform them. The simplest replacement string is of the format:
object1=object2
This replacement will transform each object of the type object1 to one
of the type object2.
An object is specified by its number or its name.
Spaces in name aren't allowed: you must discard them; also, you can
specify only the first characters of the name.
Example: SUPER SHOTGUN must be entered as SUPERSHOTGUN or as SUPER
WARNING: if you want to specify objects by name, you must first include
the OBJECTS.RSP file.
Example: DM2CONV in out @OBJECTS SHOTGUN=SUPERSHOTGUN @:DTOD2
You can change multiple objects:
obj1,obj2=obj3
all objects of type obj1 and obj2 are transformed into obj3 objects.
obj1=obj2,obj3
all obj1 objects becomes obj2 and obj3 (they are chosen randomly in
equal proportions: this is why the /SEED parameter exists).
obj1-obj2=obj3
all objects with types in range obj1 to obj2 becomes types obj3.
You can specify any number of source objects and any number of
destination objects.
You can also specify quantities (only for the destination objects):
IMP=DEMON@5
In the above example, only 5 IMPs become DEMONs; the others remain IMPs.
IMP=DEMON@5,SPECTRE@10
Five IMPs become DEMONs and ten become SPECTREs.
If the number of source objects is less than the destination, the
quantities are adjusted proportionally.
In the above example if there are only 9 IMPS, 3 become DEMONs (33%)
and 6 become SPECTREs (66%).
Another example:
IMP=DEMON@5,SPECTRE
5 IMPs become DEMONs, the remaining become SPECTRE: if there are less
than 5 IMPs, all of them become DEMONs.
That is, if you don't specify a quantity the remaining objects are used.
The quantity can be a percentual:
IMP=DEMONS@50%
In this way, 50% of IMPs become DEMONs.
You can mix all of the above rules:
IMP,DEMON=BARON@2,LOSTSOUL@50%,TROOPER
In DOOM/DOOM II/HERETIC the difficulty level chosen when you start a new
game will affect the objects in a considerable manner:
- new objects may appear
- other objects disappear
The reason is that each object has flags that specify in which level of
difficulty it should appear.
There are five flags:
1 - object appears on difficulty levels 1 and 2
2 - object appears on difficulty level 3
3 - object appears on difficulty levels 4 and 5
D - object is deaf (useful only for monsters)
M - object appears ONLY in multiplayer mode
Starting from version 1.5, DM2CONV supports these flags in the
substitution rules; the complete syntax is:
sobj1[:flags]...=dobj1[@quantity[%]][:flags]...
Additional flags are introduced by DM2CONV v3.0:
0 - object does not appear at all (if 123 flags are not specified)
This is useful to remove an object from a level.
A - process all objects
O - process only objects not already converted
C - process only objects already converted
The AOC flags overrides the ONCE symbol.
Each object can have one or more of the above flags.
If difficulty flags are specified in the source, only the objects
that have those flags are changed.
IMP:1=STIMPACK
means that all IMP that will appear (at least) in difficulty level 1
will be transformed into STIMPACK.
This affects all IMP that have the '1' flag, not the ones that
have only the '1' flag.
If difficulty flags are specified in the destination, the object
remapped will have the specified flags.
IMP=STIMPACK:123
means that all IMP will be transformed into STIMPACK and will appear
on any level (except multiplayer mode).
The 'D' flag has no means if used in a source object.
The 'M' flag works in different ways if used in source or destination
source: only multiplayer-mode objects are changed
destination: the object appear only on multiplayer mode
** CONDITIONAL OBJECT SUBSTITIONS
With DM2CONV v3.0 you can specify to perform an object substitution if
and only if a specified condition is true.
Three new object expressions are available:
?objectlist relational_operator value
?ELSE
?END
I will explain these with examples:
?3003>10 ;if there are more than ten baron of hell(=3003)
3003=69@50% ;converts 50% of baron into hellknight
?ELSE
3003=64@1 ;else converts 1 baron into an archvile
?ENDIF
Another example:
?82=0 2001=82@1 ?ENDIF
If there is no supershotgun, a shotgun is converted into a supershotgun.
In details:
objectlist is a list of objects, like any object expression.
obj1,obj2,...
obj1:flags,obj2-obj3:flags,...
relational_operator is one of the following:
= <> > >= < <=
value is an integer in the range 0-16383.
DM2CONV will count the number of objects specified in the object list.
If this number is in relation with the value specified, the expressions
in the true branch are executed, otherwise the other branch is executed
(the one between ?ELSE and ?END, this is optional).
This works like the IFDEF/IFNDEF commands.
The ?ELSE command is optional, but the ?END command is mandatory.
Conditional expressions can be nested.
The primary use of conditional substitutions is to ensure a specific
amount of an object; example:
?BFG>2 ;this is only an example
BFG=BFG@2,CELLPACK
?ELSE
?BFG<2
BFG,PLASMA,CELLPACK,CELLCHARGE=BFG@2
?END
?END
** TEXTURE REPLACEMENTS
-----------------------
The texture replacement lists were the hardest part to write.
When choosing a texture replacement you must follow these rules:
1- the two textures must have the same height, alternatively
the second must be 128 pixels high.
This is because textures are repeated vertically every 128 pixels
(otherwise you have the TUTTIFRUTTI effect).
2- if the source texture has only one patch, the second must have
only one patch.
This is because fake walls can have only this type of texture
(otherwise you have the MEDUSA effect).
I recommend you to use EDMAP: this awesome editor has a powerful viewer
that shows textures/patches/floors/sprites. Texture info are also shown.
** GFXMAKER
-----------
GFXMAKER can create a wad file that contains all the textures of a
specified set of games.
For example: you can create a wad that contains DOOM II and HERETIC
textures for DOOM.
You will need the registered version of the selected games.
Please, execute GFXMAKER and follow its instructions.
The wad built by GFXMAKER has a name defined by the set of games used.
A wad for one game (DOOM's GFXD_H.WAD for example) cannot be used with
another game (DOOM II or HERETIC).
If you use the GFX* wad, you can convert levels mantaining the original
textures/floors by specify the /GFX parameter.
For example:
DM2CONV SNIPER SNIPERH /GFX @:DTOH
HERETIC -FILE GFXH_D.WAD SNIPERH.WAD
SPECIAL CONSIDERATION ABOUT GFXMAKER:
- DOOM and DOOM II have the same color palette, but not HERETIC.
If you specify HERETIC as source/destination to GFXMAKER, the
colors of patches/floors need to be converted.
Most of the time there is no exact match, so another similar colour
must be used. This is why the textures look different.
- I have noticed that HERETIC will hang the computer if the external
files have too many resources. (HERETIC has lot of bugs)
This happen if you use (for example) GFXH_D.WAD and all the three
episodes of DOOM.
I recommend you to use only one level at a time with GFXH_D.WAD
- For the above reason, I have not implemented the DOOM II textures
for HERETIC.
However, you can specify the /GFX parameter if you use GFXH_D.WAD:
DOOM textures are mantained, only DOOM II textures are converted.
- The effect that shows when a switch or button is pressed, is
implemented inside the executable, so buttons will not change when
you press them, although they will work as usual.
** DMT
------
Included in this version of DM2CONV is DMT: my first program developed
for DOOM.
DMT fully supports DOOM, but not DOOM2 or HERETIC although many options
will work well.
Brief instructions are included with DMT: just type DMT -HELP
DMT can be used to extract DOOM/DOOM II/HERETIC resources: like levels,
musics, sprites and so on.
Example:
DMT -OPEN DOOM.WAD -NEW EPISODE1 -COPY #2 #1 E1*.L
Copy first episode of DOOM to EPISODE1.WAD
DMT -OPEN DOOM2.WAD -NEW MUSICS2 -COPY #2 #1 *.M
Copy all DOOM II's musics to MUSICS2.WAD
DMT -OPEN HERETIC.WAD -NEW MUSICSH -COPY #2 #1 MUS_*
Copy all HERETIC's musics to MUSICSH.WAD
** KNOWN PROBLEMS
-----------------
Multi-level pwads can create problems with DOOM II because the level
sequence cannot be replicated: DOOM has 3 episodes, each with 8 levels
and 1 secret level, while DOOM II has 30 levels, 1 secret level and 1
super-secret level.
This means that accessing the secret level in a wad will load the
31th level of DOOM II instead of the ExM9 level of DOOM.
For the same reason, DOOM II level converted for HERETIC must consist
of less than nine maps. HERETIC has the same level scheme of DOOM.
Monster substituition has a weak spot. When you change monsters with
bigger ones, if these new monsters are too near a wall they cannot move
because they collide with the scenario. It is the same as you type
IDSPISPOPD (or IDCLIP for DOOM II, KITTY for HERETIC), then move into a
wall and retype the code.
Levels converted to HERETIC could have the FOS bug (FLASH OF SKY): when
you stand over a linedef you will see the sky.
This is probably due to some limitation of the HERETIC graphic engine,
it is not a DM2CONV's bug, perhaps it could be removed with the use of a
node builder (currently no known nodebuilders can remove this bug).
HERETIC has another strange bug: it does not support more than 1 maces in
a level. If a level has more than 8 maces it exits to DOS with the error:
Too many mace spots
But if a level has 8 or less maces, all the maces (except one) are
converted into monsters: this conversion is made on-the-fly by HERETIC.
For this reason, DEFAULT.RSP has an instruction to limit the number of
maces in a level: if more than 1 mace is found, all but 1 are converted
into phoenix rods and hellstaffs.
Due to the many differences of these three great games, the only
conversions ensured at 100% are those from DOOM to DOOM2/HERETIC.
All the other conversions may produce unplayable levels.
Some of the most common problems:
- objects are of different sizes, so a converted object may block
a passage, or it may not block a passage it was meant to block.
example: HERETIC level E1M1 to DOOM2, secret room near the start
- many linedefs are not supported by all games: fast doors, raising
stairs by 16 pixels, etc...
example: HERETIC level E1M1 to DOOM, raising stairs near the exit
- monster conversion: some levels rely on the destruction of a
specific monster (BOSS BRAIN, COMMANDER KEEN, etc..) to open the
exit. This feature could not work once the level is converted, so
it will be impossible to exit.
Most of these problems can be skipped with the use of cheat codes:
that works only in single player mode! DEATHMATCHERS are warned!
** DISTRIBUTION LICENSE
-----------------------
All files in the original distribution package are PUBLIC DOMAIN.
You can freely distribute these files (also separately) in any form.
The files included inside DM2CNV30.ZIP are:
DM2CONV.EXE the converter!
DM2CONV.PAS source for DM2CONV
DM2CONV.DOC documentation
GFXMAKER.EXE the wad builder
GFXMAKER.PAS source for GFXMAKER
DEFAULT.RSP the official default response file
OBJECTS.RSP response to use names in object expressions
OBJECTS.TXT object table for DOOM/DOOM2/HERETIC
DMT.EXE manipulation tool
FILE_ID.DIZ package description
For comments, bug reports, suggestions, etc.. please contact the author:
snail-mail:
Vincenzo Alcamo
via Verdi 185
40059 Medicina (BO)
ITALY
e-mail:
alcamo@arci01.bo.cnr.it
(I am always glad to receive E-mails, but I can use this account
only on Tuesdays and Saturdays: don't expect fast replies)
You can ask me by e-mail the latest version of DM2CONV:
please state your current version and I will send you a newer version
when it will be available (or I can inform you where to find the latest
release, please specify which option you prefer).
** ADDITIONAL CREDITS
---------------------
Matt Fell author of the DOOM specs - vital info
Raphael Quinet,Brendon J Wyber authors of DEU - first DOOM editor
Jeff Rabenhorst author of EDMAP - awesome DOOM editor
Greg Lewis author of DEHACKED
v3.0 beta testers: Jack Hartman, Bradford Youngkin, Glenn Willing
** PROGRAM HISTORY
------------------
05/23/95 v3.0 Totally rewritten version: syntax has changed.
New conversions: HERETIC to DOOM/DOOM2, DOOM2 to DOOM.
Conversion driven by response files: no tables are
included in the executable program.
Conditional parsing, conditional object expressions.
Symbols instead of switches.
New ONCE feature: replace objects once.
New MIX feature to scramble music order.
DM2MKWAD obsolete: GFXMAKER now supports DOOM/DOOMII/HERETIC.
Many other enhancements: find them by yourself.
Special thanks to Bradford Youngkin: HERETIC's mace bug
and problems with hanging objects.
04/01/95 v2.0 Registered HERETIC support (shareware is no longer supported)
DOOM textures and floors inside HERETIC.
DOOM II to HERETIC conversion.
Many little improvements: IWAD support, no RSP extension
needed in response files, nested response files,
/NOTEXTURE and /NOFLOOR switch.
03/04/95 v1.7b Special bug fix version:
- texture names were case sensitive
(reported by Thomas Beckmann)
- strange substitutions with multi-level pwads
(reported by Rick Weber,Jack Hartman,Georg Deppe)
01/21/95 v1.6b Resource renaming.
Improved documentation.
01/14/95 v1.5b Sky resource remapping.
Heretic support.
External texture tables.
Difficulty level supported.
Some code rewritten.
12/14/94 v1.2 Music remapping. Other minor changes.
Sources released in the public domain.
DMT tool distributed to check reactions.
11/12/94 v1.0 The first release.
DM2CONV.PAS should be in the distribution package:
it wasn't for my fault.