Directory restructuring to make it easier to version projects that don't build zdoom.exe.

SVN r4 (trunk)
This commit is contained in:
Randy Heit 2006-02-24 04:48:15 +00:00
commit cf11cbdb30
821 changed files with 361202 additions and 0 deletions

71
docs/BUILDLIC.TXT Normal file
View file

@ -0,0 +1,71 @@
BUILD SOURCE CODE LICENSE TERMS: 06/20/2000
[1] I give you permission to make modifications to my Build source and
distribute it, BUT:
[2] Any derivative works based on my Build source may be distributed ONLY
through the INTERNET.
[3] Distribution of any derivative works MUST be done completely FREE of
charge - no commercial exploitation whatsoever.
[4] Anything you distribute which uses a part of my Build Engine source
code MUST include:
[A] The following message somewhere in the archive:
// "Build Engine & Tools" Copyright (c) 1993-1997 Ken Silverman
// Ken Silverman's official web site: "http://www.advsys.net/ken"
// See the included license file "BUILDLIC.TXT" for license info.
[B] This text file "BUILDLIC.TXT" along with it.
[C] Any source files that you modify must include this message as well:
// This file has been modified from Ken Silverman's original release
[5] The use of the Build Engine for commercial purposes will require an
appropriate license arrangement with me. Contact information is
on my web site.
[6] I take no responsibility for damage to your system.
[7] Technical support: Before contacting me with questions, please read
and do ALL of the following!
[A] Look though ALL of my text files. There are 7 of them (including this
one). I like to think that I wrote them for a reason. You will find
many of your answers in the history section of BUILD.TXT and
BUILD2.TXT (they're located inside SRC.ZIP).
[B] If that doesn't satisfy you, then try going to:
"http://www.advsys.net/ken/buildsrc"
where I will maintain a Build Source Code FAQ (or perhaps I might
just provide a link to a good FAQ).
[C] I am willing to respond to questions, but ONLY if they come at a rate
that I can handle.
PLEASE TRY TO AVOID ASKING DUPLICATE QUESTIONS!
As my line of defense, I will post my current policy about
answering Build source questions (right below the E-mail address
on my web site.) You can check there to see if I'm getting
overloaded with questions or not.
If I'm too busy, it might say something like this:
I'm too busy to answer Build source questions right now.
Sorry, but don't expect a reply from me any time soon.
If I'm open for Build source questions, please state your question
clearly and don't include any unsolicited attachments unless
they're really small (like less than 50k). Assume that I have
a 28.8k modem. Also, don't leave out important details just
to make your question appear shorter - making me guess what
you're asking doesn't save me time!
----------------------------------------------------------------------------
-Ken S. (official web site: http://www.advsys.net/ken)

283
docs/README.Carmack Normal file
View file

@ -0,0 +1,283 @@
README - DOOM assembly code
Okay, I add the DOS assembly module for the historically
inclined here (may rec.games.programmer suffer). If anyone
feels the urge to port these to GNU GCC; either inline or
as separate modules including Makefile support, be my guest.
Module tmap.S includes the inner loops for texture mapping,
the interesting one being the floor/ceiling span rendering.
There was another module in the source dump, fpfunc.S, that
had both texture mapping and fixed point functions. It
contained implementations both for i386 and M68k. For
brevity, I include only the i386 fixed point stuff below.
//====================================================
// tmap.S as of January 10th, 1997
//================
//
// R_DrawColumn
//
//================
.data
loopcount .long 0
pixelcount .long 0
.text
.align 16
.globl _R_DrawColumn
_R_DrawColumn:
pushad
movl ebp,[_dc_yl]
movl ebx,ebp
movl edi,[_ylookup+ebx*4]
movl ebx,[_dc_x]
addl edi,[_columnofs + ebx*4]
movl eax,[_dc_yh]
incl eax
subl eax,ebp // pixel count
movl [pixelcount],eax // save for final pixel
js done // nothing to scale
shrl eax,1 // double pixel count
movl [loopcount],eax
movl ecx,[_dc_iscale]
movl eax,[_centery]
subl eax,ebp
imull ecx
movl ebp,[_dc_texturemid]
subl ebp,eax
shll ebp,9 // 7 significant bits, 25 frac
movl esi,[_dc_source]
movl ebx,[_dc_iscale]
shll ebx,9
movl eax,OFFSET patch1+2 // convice tasm to modify code...
movl [eax],ebx
movl eax,OFFSET patch2+2 // convice tasm to modify code...
movl [eax],ebx
// eax aligned colormap
// ebx aligned colormap
// ecx,edx scratch
// esi virtual source
// edi moving destination pointer
// ebp frac
movl ecx,ebp // begin calculating first pixel
addl ebp,ebx // advance frac pointer
shrl ecx,25 // finish calculation for first pixel
movl edx,ebp // begin calculating second pixel
addl ebp,ebx // advance frac pointer
shrl edx,25 // finish calculation for second pixel
movl eax,[_dc_colormap]
movl ebx,eax
movb al,[esi+ecx] // get first pixel
movb bl,[esi+edx] // get second pixel
movb al,[eax] // color translate first pixel
movb bl,[ebx] // color translate second pixel
testl [pixelcount],0fffffffeh
jnz doubleloop // at least two pixels to map
jmp checklast
.align 16
doubleloop:
movl ecx,ebp // begin calculating third pixel
patch1:
addl ebp,12345678h // advance frac pointer
movb [edi],al // write first pixel
shrl ecx,25 // finish calculation for third pixel
movl edx,ebp // begin calculating fourth pixel
patch2:
addl ebp,12345678h // advance frac pointer
movl [edi+SCREENWIDTH],bl // write second pixel
shrl edx,25 // finish calculation for fourth pixel
movb al,[esi+ecx] // get third pixel
addl edi,SCREENWIDTH*2 // advance to third pixel destination
movb bl,[esi+edx] // get fourth pixel
decl [loopcount] // done with loop?
movb al,[eax] // color translate third pixel
movb bl,[ebx] // color translate fourth pixel
jnz doubleloop
// check for final pixel
checklast:
testl [pixelcount],1
jz done
movb [edi],al // write final pixel
done:
popad
ret
//================
//
// R_DrawSpan
//
// Horizontal texture mapping
//
//================
.align 16
.globl _R_DrawSpan
_R_DrawSpan:
pushad
//
// find loop count
//
movl eax,[_ds_x2]
incl eax
subl eax,[_ds_x1] // pixel count
movl [pixelcount],eax // save for final pixel
js hdone // nothing to scale
shrl eax,1 // double pixel count
movl [loopcount],eax
//
// build composite position
//
movl ebp,[_ds_xfrac]
shll ebp,10
andl ebp,0ffff0000h
movl eax,[_ds_yfrac]
shrl eax,6
andl eax,0ffffh
orl ebp,eax
movl esi,[_ds_source]
//
// calculate screen dest
//
movl edi,[_ds_y]
movl edi,[_ylookup+edi*4]
movl eax,[_ds_x1]
addl edi,[_columnofs+eax*4]
//
// build composite step
//
movl ebx,[_ds_xstep]
shll ebx,10
andl ebx,0ffff0000h
movl eax,[_ds_ystep]
shrl eax,6
andl eax,0ffffh
orl ebx,eax
movl eax,OFFSET hpatch1+2 // convice tasm to modify code...
movl [eax],ebx
movl eax,OFFSET hpatch2+2 // convice tasm to modify code...
movl [eax],ebx
// eax aligned colormap
// ebx aligned colormap
// ecx,edx scratch
// esi virtual source
// edi moving destination pointer
// ebp frac
shldl ecx,ebp,22 // begin calculating third pixel (y units)
shldl ecx,ebp,6 // begin calculating third pixel (x units)
addl ebp,ebx // advance frac pointer
andl ecx,4095 // finish calculation for third pixel
shldl edx,ebp,22 // begin calculating fourth pixel (y units)
shldl edx,ebp,6 // begin calculating fourth pixel (x units)
addl ebp,ebx // advance frac pointer
andl edx,4095 // finish calculation for fourth pixel
movl eax,[_ds_colormap]
movl ebx,eax
movb al,[esi+ecx] // get first pixel
movb bl,[esi+edx] // get second pixel
movb al,[eax] // color translate first pixel
movb bl,[ebx] // color translate second pixel
testl [pixelcount],0fffffffeh
jnz hdoubleloop // at least two pixels to map
jmp hchecklast
.align 16
hdoubleloop:
shldl ecx,ebp,22 // begin calculating third pixel (y units)
shldl ecx,ebp,6 // begin calculating third pixel (x units)
hpatch1:
addl ebp,12345678h // advance frac pointer
movb [edi],al // write first pixel
andl ecx,4095 // finish calculation for third pixel
shldl edx,ebp,22 // begin calculating fourth pixel (y units)
shldl edx,ebp,6 // begin calculating fourth pixel (x units)
hpatch2:
addl ebp,12345678h // advance frac pointer
movb [edi+1],bl // write second pixel
andl edx,4095 // finish calculation for fourth pixel
movb al,[esi+ecx] // get third pixel
addl edi,2 // advance to third pixel destination
movb bl,[esi+edx] // get fourth pixel
decl [loopcount] // done with loop?
movb al,[eax] // color translate third pixel
movb bl,[ebx] // color translate fourth pixel
jnz hdoubleloop
// check for final pixel
hchecklast:
testl [pixelcount],1
jz hdone
movb [edi],al // write final pixel
hdone:
popad
ret
//====================================================
// fpfunc.S as of January 10th, 1997 (parts)
#ifdef i386
.text
.align 4
.globl _FixedMul
_FixedMul:
pushl %ebp
movl %esp,%ebp
movl 8(%ebp),%eax
imull 12(%ebp)
shrdl $16,%edx,%eax
popl %ebp
ret
.align 4
.globl _FixedDiv2
_FixedDiv2:
pushl %ebp
movl %esp,%ebp
movl 8(%ebp),%eax
cdq
shldl $16,%eax,%edx
sall $16,%eax
idivl 12(%ebp)
popl %ebp
ret
#endif

283
docs/README.asm Normal file
View file

@ -0,0 +1,283 @@
README - DOOM assembly code
Okay, I add the DOS assembly module for the historically
inclined here (may rec.games.programmer suffer). If anyone
feels the urge to port these to GNU GCC; either inline or
as separate modules including Makefile support, be my guest.
Module tmap.S includes the inner loops for texture mapping,
the interesting one being the floor/ceiling span rendering.
There was another module in the source dump, fpfunc.S, that
had both texture mapping and fixed point functions. It
contained implementations both for i386 and M68k. For
brevity, I include only the i386 fixed point stuff below.
//====================================================
// tmap.S as of January 10th, 1997
//================
//
// R_DrawColumn
//
//================
.data
loopcount .long 0
pixelcount .long 0
.text
.align 16
.globl _R_DrawColumn
_R_DrawColumn:
pushad
movl ebp,[_dc_yl]
movl ebx,ebp
movl edi,[_ylookup+ebx*4]
movl ebx,[_dc_x]
addl edi,[_columnofs + ebx*4]
movl eax,[_dc_yh]
incl eax
subl eax,ebp // pixel count
movl [pixelcount],eax // save for final pixel
js done // nothing to scale
shrl eax,1 // double pixel count
movl [loopcount],eax
movl ecx,[_dc_iscale]
movl eax,[_centery]
subl eax,ebp
imull ecx
movl ebp,[_dc_texturemid]
subl ebp,eax
shll ebp,9 // 7 significant bits, 25 frac
movl esi,[_dc_source]
movl ebx,[_dc_iscale]
shll ebx,9
movl eax,OFFSET patch1+2 // convice tasm to modify code...
movl [eax],ebx
movl eax,OFFSET patch2+2 // convice tasm to modify code...
movl [eax],ebx
// eax aligned colormap
// ebx aligned colormap
// ecx,edx scratch
// esi virtual source
// edi moving destination pointer
// ebp frac
movl ecx,ebp // begin calculating first pixel
addl ebp,ebx // advance frac pointer
shrl ecx,25 // finish calculation for first pixel
movl edx,ebp // begin calculating second pixel
addl ebp,ebx // advance frac pointer
shrl edx,25 // finish calculation for second pixel
movl eax,[_dc_colormap]
movl ebx,eax
movb al,[esi+ecx] // get first pixel
movb bl,[esi+edx] // get second pixel
movb al,[eax] // color translate first pixel
movb bl,[ebx] // color translate second pixel
testl [pixelcount],0fffffffeh
jnz doubleloop // at least two pixels to map
jmp checklast
.align 16
doubleloop:
movl ecx,ebp // begin calculating third pixel
patch1:
addl ebp,12345678h // advance frac pointer
movb [edi],al // write first pixel
shrl ecx,25 // finish calculation for third pixel
movl edx,ebp // begin calculating fourth pixel
patch2:
addl ebp,12345678h // advance frac pointer
movl [edi+SCREENWIDTH],bl // write second pixel
shrl edx,25 // finish calculation for fourth pixel
movb al,[esi+ecx] // get third pixel
addl edi,SCREENWIDTH*2 // advance to third pixel destination
movb bl,[esi+edx] // get fourth pixel
decl [loopcount] // done with loop?
movb al,[eax] // color translate third pixel
movb bl,[ebx] // color translate fourth pixel
jnz doubleloop
// check for final pixel
checklast:
testl [pixelcount],1
jz done
movb [edi],al // write final pixel
done:
popad
ret
//================
//
// R_DrawSpan
//
// Horizontal texture mapping
//
//================
.align 16
.globl _R_DrawSpan
_R_DrawSpan:
pushad
//
// find loop count
//
movl eax,[_ds_x2]
incl eax
subl eax,[_ds_x1] // pixel count
movl [pixelcount],eax // save for final pixel
js hdone // nothing to scale
shrl eax,1 // double pixel count
movl [loopcount],eax
//
// build composite position
//
movl ebp,[_ds_xfrac]
shll ebp,10
andl ebp,0ffff0000h
movl eax,[_ds_yfrac]
shrl eax,6
andl eax,0ffffh
orl ebp,eax
movl esi,[_ds_source]
//
// calculate screen dest
//
movl edi,[_ds_y]
movl edi,[_ylookup+edi*4]
movl eax,[_ds_x1]
addl edi,[_columnofs+eax*4]
//
// build composite step
//
movl ebx,[_ds_xstep]
shll ebx,10
andl ebx,0ffff0000h
movl eax,[_ds_ystep]
shrl eax,6
andl eax,0ffffh
orl ebx,eax
movl eax,OFFSET hpatch1+2 // convice tasm to modify code...
movl [eax],ebx
movl eax,OFFSET hpatch2+2 // convice tasm to modify code...
movl [eax],ebx
// eax aligned colormap
// ebx aligned colormap
// ecx,edx scratch
// esi virtual source
// edi moving destination pointer
// ebp frac
shldl ecx,ebp,22 // begin calculating third pixel (y units)
shldl ecx,ebp,6 // begin calculating third pixel (x units)
addl ebp,ebx // advance frac pointer
andl ecx,4095 // finish calculation for third pixel
shldl edx,ebp,22 // begin calculating fourth pixel (y units)
shldl edx,ebp,6 // begin calculating fourth pixel (x units)
addl ebp,ebx // advance frac pointer
andl edx,4095 // finish calculation for fourth pixel
movl eax,[_ds_colormap]
movl ebx,eax
movb al,[esi+ecx] // get first pixel
movb bl,[esi+edx] // get second pixel
movb al,[eax] // color translate first pixel
movb bl,[ebx] // color translate second pixel
testl [pixelcount],0fffffffeh
jnz hdoubleloop // at least two pixels to map
jmp hchecklast
.align 16
hdoubleloop:
shldl ecx,ebp,22 // begin calculating third pixel (y units)
shldl ecx,ebp,6 // begin calculating third pixel (x units)
hpatch1:
addl ebp,12345678h // advance frac pointer
movb [edi],al // write first pixel
andl ecx,4095 // finish calculation for third pixel
shldl edx,ebp,22 // begin calculating fourth pixel (y units)
shldl edx,ebp,6 // begin calculating fourth pixel (x units)
hpatch2:
addl ebp,12345678h // advance frac pointer
movb [edi+1],bl // write second pixel
andl edx,4095 // finish calculation for fourth pixel
movb al,[esi+ecx] // get third pixel
addl edi,2 // advance to third pixel destination
movb bl,[esi+edx] // get fourth pixel
decl [loopcount] // done with loop?
movb al,[eax] // color translate third pixel
movb bl,[ebx] // color translate fourth pixel
jnz hdoubleloop
// check for final pixel
hchecklast:
testl [pixelcount],1
jz hdone
movb [edi],al // write final pixel
hdone:
popad
ret
//====================================================
// fpfunc.S as of January 10th, 1997 (parts)
#ifdef i386
.text
.align 4
.globl _FixedMul
_FixedMul:
pushl %ebp
movl %esp,%ebp
movl 8(%ebp),%eax
imull 12(%ebp)
shrdl $16,%edx,%eax
popl %ebp
ret
.align 4
.globl _FixedDiv2
_FixedDiv2:
pushl %ebp
movl %esp,%ebp
movl 8(%ebp),%eax
cdq
shldl $16,%eax,%edx
sall $16,%eax
idivl 12(%ebp)
popl %ebp
ret
#endif

149
docs/README.gl Normal file
View file

@ -0,0 +1,149 @@
README: glDOOM
I never got around to do anything with respect to
a Linux glDOOM port except for assembling a Linux3Dfx
HOWTO (which, at that time, was a prerequisite
to get permission to publicly distribute the
already finished LinuxGlide port by Daryll Strauss).
Linux q2test (and soon LinuxQuake2) demonstrate that
Mesa with the MesaVoodoo driver is quite up to the
requirements for a glDOOM port. If anybody wants to
get into Linux glDOOM, please drop me a line.
There is a Win32 GLDOOM port in the works, by Jim Dose.
Quoting a recent posting by him:
"I haven't had as much time lately to really work on
the conversion. I currently have the renderer drawing
the walls and floors as texture spans as the are in
the software renderer. There's lighting on the walls,
but not the floors, and sprites are being drawn, but
not with the right texture. I figure that this is one
nights work to get the game looking "normal". I haven't
tested the game on less than a p200, so I'm not sure
how it will perform under the average machine, but I
don't expect it to be blindingly fast because of the
number of spans that have to be drawn each frame.
Rendering as polys is definitely the way to go.
The reason I chose to do spans first was because it
left the base renderer intact and I could concentrate
on ironing out any Windows compatibility problems.
Actually, the first version I had running was simply
a blit of the 320x200 game screen through Open GL.
Surprisingly, this actually was very playable, but
certainly wasn't taking any advantage of 3D acceleration.
Once the game was running, I started converting all
the span routines over."
Comment: for merging Linuxdoom with Win32, this is
probably the best source for getting the Win32
environment done - before more significant changes
occur.
"One problem with drawing spans is that the engine
doesn't calculate the texture coordinates with
fractional accuracy, so the bilinear filtering works
vertically, but not horizontally on the walls. I may
try to fix this, but since I plan to use polys for
the final version, it's not really high priority.
Also, spans don't really allow for looking up and
down."
Comment: true looking up/down vs. Heretic-style
y-shearing seems to require either a strange kind
of transofrmation matrix (he probably does not use
the OpenGL transformation at all), or rendering
all the spans as textured rectangular slices
instead of using glDrawBitmap. No, polys are the
way to go.
"When I tackle the conversion to polys, one big problem
I'll encounter is drawing floors. Since the world is
stored in a 2D bsp tree, there is no information on
the shape of the floors. In fact the floors can be
concave and may include holes (typically, most renderers
break concave polys down into a collection of convex
polys or triangles). In software, the floors are actually
drawn using an algorithm that's similar to a flood fill
(except that a list of open spans is kept instead of a
buffer of pixels). This makes drawing the floors as
polys fairly difficult."
A polygon based approach will require significant changes
to the data structures used in the refresh module. I
recommend either separating a libref_soft.so first (a
Quake2 like approach), and creating libref_gl afterwards,
or abandoning the software rendering entirely.
John Carmack wrote once upon a time:
"... the U64 DOOM engine is much more what I would consider
The Right Thing now -- it turns the subsector boundaries
into polygons for the floors and ceilings ahead of time,
then for rendering it walks the BSP front to back, doing
visibility determination of subsectors by the one dimensional
occlusion buffer and clipping sprites into subsectors, then
it goes backwards through the visible subsectors, drawing
floors, ceilings, walls, then sorted internal sprite fragments.
It's a ton simpler and a ton faster, although it does suffer
some overdraw when a high subsector overlooks a low one (but
that is more than made up for by the simplicity of everything
else)."
Well, IMO compiling a separate list of floor/ceiling polygons
after having read the WAD file, and thus introducing this as
a completely separate data structure to the current code base
might be the easiest thing to do. Jim Dose writes:
"One method I may use to draw the floors as polys was suggested
by Billy Zelsnack of Rebel Boat Rocker when we were working
at 3D Realms together a few years ago. Basically, Billy was
designing an engine that dealt with the world in a 2D portal
format similar to the one that Build used, except that it had
true looking up and down (no shearing). Since floors were
basically implicit and could be concave, Billy drew them as
if the walls extended downwards to infinity, but fixed the
texture coordinates to appear that they were on the plane of
the floor. The effect was that you could look up and down and
there were no gaps or overdraw. It's a fairly clever method
and allows you to store the world in a simpler data format.
Had perspective texture mapping been fast enough back then,
both Build and Doom could have done this in software."
Perhaps the above is sufficient to get you started.
Other Issues:
1. Occlusion
DOOM uses a per-column lookup (top/bottom index) to do HLHSR.
This works fine with span based rendering (well, getting
horizontal spans of floors/ceilings into the picture is a
separate story). It isn't really mindboggling with polygon
based rendering. GLDOOM should abandon that.
2. Precalculated Visibility
DOOM has the data used by Quake's PVS - in REJECT.
During Quake development, lots of replacements for the
occlusion buffer were tried, and PVS turned out to be best.
I suggest usind the REJECT as PVS.
There have been special effects using a utility named RMB.
REJECT is a lump meant for enemy AI LoS calculation - a
nonstandard REJECT will not work as a PVS, and introduce
rendering errors. I suggest looking for a PVS lump in the
WAD, and using REJECT if none is found. That way, it might
be feasible to eat the cake and keep it.
3. Mipmaps
DOOM does not have mipmapping. As we have 8bit palettized
textures, OpenGL mipmapping might not give the desired
results. Plus, composing textures from patches at runtime
would require runtime mipmapping. Precalculated mipmaps
in the WAD?
4. Sprites
Partly transparent textures and sprites impose another
problem related to mipmapping. Without alpha channel,
this could give strange results. Precalculated, valid
sprite mipmaps (w/o alpha)?

303
docs/classes.txt Normal file
View file

@ -0,0 +1,303 @@
ZDoom 1.19 offers a partial conversion of the Doom code to C++. As such, some
functions and classes have been encapsulated in classes. This document tries
to give an overview of those classes and how to use them.
Command line parameters
=======================
Previous versions of ZDoom kept the command line in the myargv and myargc
global variables. This version uses a single variable, Args, of type DArgs.
This class is defined in m_argv.h and implemented in m_argv.cpp. The three
most important functions are:
int DArgs::CheckParm (const char *check) const;
Checks to see if a parameter exists. If it does, it's index number is
returned. Use the GetArg() method to retrieve an arguments specified
after it.
char *DArgs::CheckValue (const char *check) const;
This is similar to CheckParm(), but it returns the value of the argument
immediately following parameter. If the parameter is not present, or it
has no argument, NULL is returned.
char *DArgs::GetArg (int index) const;
Retrieves the value of an argument. This is similar to argv[index].
For the other functions, check the implementation in m_argv.cpp to see what
they do.
Error messages
==============
There are two functions for reporting error conditions: I_Error() and
I_FatalError(). Use the first for errors that can be recovered from. It will
drop the user to the fullscreen console and print the message. Use the
second for error conditions that are much harder to recover from. It will
terminate the program and display the message.
Console commands
================
Adding new console commands is now very simple, compared to previous
versions of ZDoom. Registration is now completely automatic if you use the
BEGIN_COMMAND and END_COMMAND macros defined in c_dispatch.h. A simple
command could be implemented like this:
#include "c_dispatch.h"
BEGIN_COMMAND(hello)
{
Printf (PRINT_HIGH, "Hello, world!\n");
}
END_COMMAND(hello)
The parameter to the BEGIN_COMMAND and END_COMMAND macros is the name of
the command, as typed at the console (in this case, "hello"). You should use
the same name for both BEGIN_ and END_. You can access the arguments to the
command using argc and argv. If you want to know who activated the command,
m_Instigator is a pointer to the actor of the player who called it.
Console variables
=================
Adding new console variables is also similar. The c_cvars.h file contains
four macros related to using cvars:
CVAR (name, default, flags)
Declares a new console variable with the name "name" and default
value "default" and flags "flags". (See c_cvars.h for the different
flags). An example:
CVAR (var_friction, "1", CVAR_SERVERINFO);
EXTERN_CVAR (name)
Imports a cvar defined elsewhere. This just generates the code
"extern cvar_t name;", but you should still use this macro.
BEGIN_CUSTOM_CVAR (name, default, flags)
END_CUSTOM_CVAR (name)
Declares a cvar that performs some special action each time its value
changes. You should use a compound statement between the BEGIN_ and
END_ macros, just like with commands above. Any code between these
two macros can use "var" to access the associated cvar. Example:
BEGIN_CUSTOM_CVAR (splashfactor, "1.0", CVAR_SERVERINFO)
{
if (var.value <= 0.0f)
var.Set (1.0f);
else
selfthrustscale = 1.0f / var.value;
}
END_CUSTOM_CVAR (splashfactor)
This example also illustrates bounds checking for cvars. The basic
idea is:
if (variable is within range)
<do something with it>
else
<set it to something that is in range>
Calling Set() will automatically execute the code block again, so you
must make sure that you do nothing but reset the value of the cvar if
it's out of range. The code block will also be executed at program
startup when the cvar is constructed.
The DObject class hierarchy
===========================
Most classes in ZDoom 1.18 are descendants of the DObject class. This class
provides basic typechecking and serialization functionality. In a future
version of ZDoom, it will also provide a means to interface C++ code with
DoomScript. If you want to be able to perform type-checking on a class, save
it to disk, or access it from DoomScript (in a later version), it should be
a descendant of DObject.
The basic features of DObject require that you use some of the macros in
dobject.h: DECLARE_CLASS, IMPLEMENT_CLASS, DECLARE_SERIAL, and
IMPLEMENT_SERIAL. For a class that won't be saved to disk, do this:
class MyClass : public DObject
{
DECLARE_CLASS (MyClass, DObject)
public:
...
Rest of class definition
...
}
Then someplace else, where you define the class, add this line:
IMPLEMENT_CLASS (MyClass, DObject)
(You should be sure to replace MyClass with the actual name of your class
and DObject with the name of your class's superclass.)
For a class that can be saved to disk (ie, a serializable class), use
DECLARE_SERIAL and IMPLEMENT_SERIAL instead. Serializable classes require
default constructors. If you don't want anybody to be able to create an
instance of the class using the default constructor, you can hide it
inside the private portion of the class definition:
...
private:
MyClass () {}
...
Serializable classes also require that you define a Serialize() method.
This function should call the superclass's Serialize() method and then
either store or extract the fields for the class. (Whenever you change
the contents of a class, be sure to change its accompanying Serialize()
method.) A generic Serialize() looks like this:
void MyClass::Serialize (FArchive &arc)
{
Super::Serialize (arc);
if (arc.IsStoring ())
{
arc << m_field1 << m_field2 << m_field3 << ... ;
}
else
{
arc >> m_field1 >> m_field2 >> m_field3 >> ... ;
}
}
There are also some structs that use some serialization code that you
should be sure to change if you change the structs. The code for
serializing sector_t and line_t can be found in P_SerializeWorld() in
p_saveg.cpp. The code for serializing player_t is in p_user.cpp as
player_s::Serialize().
To determine the type of an object, you can use the IsA() and IsKindOf()
methods of DObject. IsA() tests if the object is an instance of a
specific type of class, and is probably not what you want. IsKindOf()
checks if an object is a specific type of class or one of its
descendants. Example: Suppose anActor points to an instance of AActor.
(anActor->IsA (RUNTIME_CLASS(DThinker))) will return false because AActor
is not the same as DThinker, but (anActor->IsKindOf
(RUNTIME_CLASS(DThinker))) will return true because AActor is a
descendant of DThinker.
Pointer cleanup
===============
Whenever an object is destroyed, ZDoom will attempt to NULL any pointers that
pointed to that object. This eliminates various anomalies caused by trying to
reference stale pointers. This mechanism is not entirely transparent and
requires some work on your part. When you create a subclass of DObject that
contains pointers, you should use the IMPLEMENT_POINTY_SERIAL or
IMPLEMENT_POINTY_CLASS macros instead of IMPLEMENT_SERIAL or IMPLEMENT_CLASS.
Following the macro, you list each element of the class that points to a
DObject (or a subclass of it). If the pointer points to something that is not
a DObject (such as a char *), you do not need to include it in this list.
After you list all the pointers, use the END_POINTERS macro.
The implementation for the AActor class looks like this:
IMPLEMENT_POINTY_SERIAL (AActor, DThinker)
DECLARE_POINTER (target)
DECLARE_POINTER (lastenemy)
DECLARE_POINTER (tracer)
DECLARE_POINTER (goal)
END_POINTERS
If you add pointers to any class, you need to update this list accordingly.
The player class uses a hack, because it is not derived from DObject, to
clear pointers. See player_s::FixPointers() in p_user.cpp if you add any
pointers to player_s.
When you want to destroy any object derived from DThinker (this includes all
actors), call that object's Destroy() method. Do not use delete, because it
is not guaranteed to perform all necessary cleanup. If the object is not
derived from DThinker, however, you can safely call delete on it.
As an example, if you have an instance of AActor called actor, and you want
to get rid of it, use:
actor->Destroy ();
If you have an instance of DCanvas called canvas and want to get rid of it,
either of the following will work (but not both):
canvas->Destroy (); or
delete canvas;
Thinkers
========
Almost everything that can affect the appearance of the world is implemented
as a subclass of DThinker. The important base classes are:
DPolyAction
A polyobject that is doing something (DRotatePoly, DMovePoly, or
DPolyDoor).
DSectorEffect
An effect that occurs inside a certain sector. This is further broken
up into DLighting (for lighting changes) and DMover (for floor/
ceiling movement). DMover is also subclassed into DMovingFloor (for
moving floors only) and DMovingCeiling (for moving ceilings only).
For effects that move both the floor and ceiling, subclass DMover
and have a look at either DPillar or DElevator.
AActor
This is probably the most important. All players, monsters, items,
ammo, weapons, and anything else that appears as a sprite in the
world is an instance of AActor. This is nowhere near as encapsulated
as I would like it to be because of the necessity to maintain
compatibility with DeHackEd patches until DoomScript is done. This
means that there is no easy way to subclass AActor and spawn an
instance of the subclass in the map. I don't like it, but it's a step
in the right direction.
To find all instances of a specific type of thinker in a map, you can use the
TThinkerIterator template class. It's usage is simple:
TThinkerIterator<TypeOfClass> iterator;
TypeOfClass *object;
while ( (object = iterator.Next ()) )
{
// do something with the object
}
AActor methods
==============
A few of the functions that operate on actors have been moved inside the
AActor class:
P_ClearTidHashes() -> AActor::ClearTIDHashes()
P_AddMobjToHash() -> AActor::AddToHash()
P_RemoveMobjFromHash() -> AActor::RemoveFromHash()
P_FindMobjByTid() -> AActor::FindByTID()
P_FindGoal() -> AActor::FindGoal()
P_UnsetThingPosition() -> AActor::UnlinkFromWorld()
P_SetThingPosition() -> AActor::LinkToWorld()
AActor::SetOrigin() has also been introduced. It simply moves the actor to
a specific location on the map without performing any collision detection.
A bit more on serialization
===========================
The serialization mechanism is a fairly standard, yet powerful, framework
that can save a bunch of objects to disk and properly maintain pointers
between them. When you store a pointer to an object, the object will also be
stored to disk if it hasn't been already. When you read the pointer, the
object it points to will also be read from disk if it hasn't been already.
This allows pointers to objects to be preserved without any extra effort on
your part. Pointers to something other than a DObject or one of its
descendents need to be implemented specially by overloading operator << (see
info.h for a few of these). If you're not sure how serialization works, take
a look at some of the serialization functions for the existing classes by
grepping through the source for "::Serialize" (without the quotes).

756
docs/colors.txt Normal file
View file

@ -0,0 +1,756 @@
! $XConsortium: rgb.txt,v 10.41 94/02/20 18:39:36 rws Exp $
255 250 250 snow
248 248 255 ghost white
248 248 255 GhostWhite
245 245 245 white smoke
245 245 245 WhiteSmoke
220 220 220 gainsboro
255 250 240 floral white
255 250 240 FloralWhite
253 245 230 old lace
253 245 230 OldLace
250 240 230 linen
250 235 215 antique white
250 235 215 AntiqueWhite
255 239 213 papaya whip
255 239 213 PapayaWhip
255 235 205 blanched almond
255 235 205 BlanchedAlmond
255 228 196 bisque
255 218 185 peach puff
255 218 185 PeachPuff
255 222 173 navajo white
255 222 173 NavajoWhite
255 228 181 moccasin
255 248 220 cornsilk
255 255 240 ivory
255 250 205 lemon chiffon
255 250 205 LemonChiffon
255 245 238 seashell
240 255 240 honeydew
245 255 250 mint cream
245 255 250 MintCream
240 255 255 azure
240 248 255 alice blue
240 248 255 AliceBlue
230 230 250 lavender
255 240 245 lavender blush
255 240 245 LavenderBlush
255 228 225 misty rose
255 228 225 MistyRose
255 255 255 white
0 0 0 black
47 79 79 dark slate gray
47 79 79 DarkSlateGray
47 79 79 dark slate grey
47 79 79 DarkSlateGrey
105 105 105 dim gray
105 105 105 DimGray
105 105 105 dim grey
105 105 105 DimGrey
112 128 144 slate gray
112 128 144 SlateGray
112 128 144 slate grey
112 128 144 SlateGrey
119 136 153 light slate gray
119 136 153 LightSlateGray
119 136 153 light slate grey
119 136 153 LightSlateGrey
190 190 190 gray
190 190 190 grey
211 211 211 light grey
211 211 211 LightGrey
211 211 211 light gray
211 211 211 LightGray
25 25 112 midnight blue
25 25 112 MidnightBlue
0 0 128 navy
0 0 128 navy blue
0 0 128 NavyBlue
100 149 237 cornflower blue
100 149 237 CornflowerBlue
72 61 139 dark slate blue
72 61 139 DarkSlateBlue
106 90 205 slate blue
106 90 205 SlateBlue
123 104 238 medium slate blue
123 104 238 MediumSlateBlue
132 112 255 light slate blue
132 112 255 LightSlateBlue
0 0 205 medium blue
0 0 205 MediumBlue
65 105 225 royal blue
65 105 225 RoyalBlue
0 0 255 blue
30 144 255 dodger blue
30 144 255 DodgerBlue
0 191 255 deep sky blue
0 191 255 DeepSkyBlue
135 206 235 sky blue
135 206 235 SkyBlue
135 206 250 light sky blue
135 206 250 LightSkyBlue
70 130 180 steel blue
70 130 180 SteelBlue
176 196 222 light steel blue
176 196 222 LightSteelBlue
173 216 230 light blue
173 216 230 LightBlue
176 224 230 powder blue
176 224 230 PowderBlue
175 238 238 pale turquoise
175 238 238 PaleTurquoise
0 206 209 dark turquoise
0 206 209 DarkTurquoise
72 209 204 medium turquoise
72 209 204 MediumTurquoise
64 224 208 turquoise
0 255 255 cyan
224 255 255 light cyan
224 255 255 LightCyan
95 158 160 cadet blue
95 158 160 CadetBlue
102 205 170 medium aquamarine
102 205 170 MediumAquamarine
127 255 212 aquamarine
0 100 0 dark green
0 100 0 DarkGreen
85 107 47 dark olive green
85 107 47 DarkOliveGreen
143 188 143 dark sea green
143 188 143 DarkSeaGreen
46 139 87 sea green
46 139 87 SeaGreen
60 179 113 medium sea green
60 179 113 MediumSeaGreen
32 178 170 light sea green
32 178 170 LightSeaGreen
152 251 152 pale green
152 251 152 PaleGreen
0 255 127 spring green
0 255 127 SpringGreen
124 252 0 lawn green
124 252 0 LawnGreen
0 255 0 green
127 255 0 chartreuse
0 250 154 medium spring green
0 250 154 MediumSpringGreen
173 255 47 green yellow
173 255 47 GreenYellow
50 205 50 lime green
50 205 50 LimeGreen
154 205 50 yellow green
154 205 50 YellowGreen
34 139 34 forest green
34 139 34 ForestGreen
107 142 35 olive drab
107 142 35 OliveDrab
189 183 107 dark khaki
189 183 107 DarkKhaki
240 230 140 khaki
238 232 170 pale goldenrod
238 232 170 PaleGoldenrod
250 250 210 light goldenrod yellow
250 250 210 LightGoldenrodYellow
255 255 224 light yellow
255 255 224 LightYellow
255 255 0 yellow
255 215 0 gold
238 221 130 light goldenrod
238 221 130 LightGoldenrod
218 165 32 goldenrod
184 134 11 dark goldenrod
184 134 11 DarkGoldenrod
188 143 143 rosy brown
188 143 143 RosyBrown
205 92 92 indian red
205 92 92 IndianRed
139 69 19 saddle brown
139 69 19 SaddleBrown
160 82 45 sienna
205 133 63 peru
222 184 135 burlywood
245 245 220 beige
245 222 179 wheat
244 164 96 sandy brown
244 164 96 SandyBrown
210 180 140 tan
210 105 30 chocolate
178 34 34 firebrick
165 42 42 brown
233 150 122 dark salmon
233 150 122 DarkSalmon
250 128 114 salmon
255 160 122 light salmon
255 160 122 LightSalmon
255 165 0 orange
255 140 0 dark orange
255 140 0 DarkOrange
255 127 80 coral
240 128 128 light coral
240 128 128 LightCoral
255 99 71 tomato
255 69 0 orange red
255 69 0 OrangeRed
255 0 0 red
255 105 180 hot pink
255 105 180 HotPink
255 20 147 deep pink
255 20 147 DeepPink
255 192 203 pink
255 182 193 light pink
255 182 193 LightPink
219 112 147 pale violet red
219 112 147 PaleVioletRed
176 48 96 maroon
199 21 133 medium violet red
199 21 133 MediumVioletRed
208 32 144 violet red
208 32 144 VioletRed
255 0 255 magenta
238 130 238 violet
221 160 221 plum
218 112 214 orchid
186 85 211 medium orchid
186 85 211 MediumOrchid
153 50 204 dark orchid
153 50 204 DarkOrchid
148 0 211 dark violet
148 0 211 DarkViolet
138 43 226 blue violet
138 43 226 BlueViolet
160 32 240 purple
147 112 219 medium purple
147 112 219 MediumPurple
216 191 216 thistle
255 250 250 snow1
238 233 233 snow2
205 201 201 snow3
139 137 137 snow4
255 245 238 seashell1
238 229 222 seashell2
205 197 191 seashell3
139 134 130 seashell4
255 239 219 AntiqueWhite1
238 223 204 AntiqueWhite2
205 192 176 AntiqueWhite3
139 131 120 AntiqueWhite4
255 228 196 bisque1
238 213 183 bisque2
205 183 158 bisque3
139 125 107 bisque4
255 218 185 PeachPuff1
238 203 173 PeachPuff2
205 175 149 PeachPuff3
139 119 101 PeachPuff4
255 222 173 NavajoWhite1
238 207 161 NavajoWhite2
205 179 139 NavajoWhite3
139 121 94 NavajoWhite4
255 250 205 LemonChiffon1
238 233 191 LemonChiffon2
205 201 165 LemonChiffon3
139 137 112 LemonChiffon4
255 248 220 cornsilk1
238 232 205 cornsilk2
205 200 177 cornsilk3
139 136 120 cornsilk4
255 255 240 ivory1
238 238 224 ivory2
205 205 193 ivory3
139 139 131 ivory4
240 255 240 honeydew1
224 238 224 honeydew2
193 205 193 honeydew3
131 139 131 honeydew4
255 240 245 LavenderBlush1
238 224 229 LavenderBlush2
205 193 197 LavenderBlush3
139 131 134 LavenderBlush4
255 228 225 MistyRose1
238 213 210 MistyRose2
205 183 181 MistyRose3
139 125 123 MistyRose4
240 255 255 azure1
224 238 238 azure2
193 205 205 azure3
131 139 139 azure4
131 111 255 SlateBlue1
122 103 238 SlateBlue2
105 89 205 SlateBlue3
71 60 139 SlateBlue4
72 118 255 RoyalBlue1
67 110 238 RoyalBlue2
58 95 205 RoyalBlue3
39 64 139 RoyalBlue4
0 0 255 blue1
0 0 238 blue2
0 0 205 blue3
0 0 139 blue4
30 144 255 DodgerBlue1
28 134 238 DodgerBlue2
24 116 205 DodgerBlue3
16 78 139 DodgerBlue4
99 184 255 SteelBlue1
92 172 238 SteelBlue2
79 148 205 SteelBlue3
54 100 139 SteelBlue4
0 191 255 DeepSkyBlue1
0 178 238 DeepSkyBlue2
0 154 205 DeepSkyBlue3
0 104 139 DeepSkyBlue4
135 206 255 SkyBlue1
126 192 238 SkyBlue2
108 166 205 SkyBlue3
74 112 139 SkyBlue4
176 226 255 LightSkyBlue1
164 211 238 LightSkyBlue2
141 182 205 LightSkyBlue3
96 123 139 LightSkyBlue4
198 226 255 SlateGray1
185 211 238 SlateGray2
159 182 205 SlateGray3
108 123 139 SlateGray4
202 225 255 LightSteelBlue1
188 210 238 LightSteelBlue2
162 181 205 LightSteelBlue3
110 123 139 LightSteelBlue4
191 239 255 LightBlue1
178 223 238 LightBlue2
154 192 205 LightBlue3
104 131 139 LightBlue4
224 255 255 LightCyan1
209 238 238 LightCyan2
180 205 205 LightCyan3
122 139 139 LightCyan4
187 255 255 PaleTurquoise1
174 238 238 PaleTurquoise2
150 205 205 PaleTurquoise3
102 139 139 PaleTurquoise4
152 245 255 CadetBlue1
142 229 238 CadetBlue2
122 197 205 CadetBlue3
83 134 139 CadetBlue4
0 245 255 turquoise1
0 229 238 turquoise2
0 197 205 turquoise3
0 134 139 turquoise4
0 255 255 cyan1
0 238 238 cyan2
0 205 205 cyan3
0 139 139 cyan4
151 255 255 DarkSlateGray1
141 238 238 DarkSlateGray2
121 205 205 DarkSlateGray3
82 139 139 DarkSlateGray4
127 255 212 aquamarine1
118 238 198 aquamarine2
102 205 170 aquamarine3
69 139 116 aquamarine4
193 255 193 DarkSeaGreen1
180 238 180 DarkSeaGreen2
155 205 155 DarkSeaGreen3
105 139 105 DarkSeaGreen4
84 255 159 SeaGreen1
78 238 148 SeaGreen2
67 205 128 SeaGreen3
46 139 87 SeaGreen4
154 255 154 PaleGreen1
144 238 144 PaleGreen2
124 205 124 PaleGreen3
84 139 84 PaleGreen4
0 255 127 SpringGreen1
0 238 118 SpringGreen2
0 205 102 SpringGreen3
0 139 69 SpringGreen4
0 255 0 green1
0 238 0 green2
0 205 0 green3
0 139 0 green4
127 255 0 chartreuse1
118 238 0 chartreuse2
102 205 0 chartreuse3
69 139 0 chartreuse4
192 255 62 OliveDrab1
179 238 58 OliveDrab2
154 205 50 OliveDrab3
105 139 34 OliveDrab4
202 255 112 DarkOliveGreen1
188 238 104 DarkOliveGreen2
162 205 90 DarkOliveGreen3
110 139 61 DarkOliveGreen4
255 246 143 khaki1
238 230 133 khaki2
205 198 115 khaki3
139 134 78 khaki4
255 236 139 LightGoldenrod1
238 220 130 LightGoldenrod2
205 190 112 LightGoldenrod3
139 129 76 LightGoldenrod4
255 255 224 LightYellow1
238 238 209 LightYellow2
205 205 180 LightYellow3
139 139 122 LightYellow4
255 255 0 yellow1
238 238 0 yellow2
205 205 0 yellow3
139 139 0 yellow4
255 215 0 gold1
238 201 0 gold2
205 173 0 gold3
139 117 0 gold4
255 193 37 goldenrod1
238 180 34 goldenrod2
205 155 29 goldenrod3
139 105 20 goldenrod4
255 185 15 DarkGoldenrod1
238 173 14 DarkGoldenrod2
205 149 12 DarkGoldenrod3
139 101 8 DarkGoldenrod4
255 193 193 RosyBrown1
238 180 180 RosyBrown2
205 155 155 RosyBrown3
139 105 105 RosyBrown4
255 106 106 IndianRed1
238 99 99 IndianRed2
205 85 85 IndianRed3
139 58 58 IndianRed4
255 130 71 sienna1
238 121 66 sienna2
205 104 57 sienna3
139 71 38 sienna4
255 211 155 burlywood1
238 197 145 burlywood2
205 170 125 burlywood3
139 115 85 burlywood4
255 231 186 wheat1
238 216 174 wheat2
205 186 150 wheat3
139 126 102 wheat4
255 165 79 tan1
238 154 73 tan2
205 133 63 tan3
139 90 43 tan4
255 127 36 chocolate1
238 118 33 chocolate2
205 102 29 chocolate3
139 69 19 chocolate4
255 48 48 firebrick1
238 44 44 firebrick2
205 38 38 firebrick3
139 26 26 firebrick4
255 64 64 brown1
238 59 59 brown2
205 51 51 brown3
139 35 35 brown4
255 140 105 salmon1
238 130 98 salmon2
205 112 84 salmon3
139 76 57 salmon4
255 160 122 LightSalmon1
238 149 114 LightSalmon2
205 129 98 LightSalmon3
139 87 66 LightSalmon4
255 165 0 orange1
238 154 0 orange2
205 133 0 orange3
139 90 0 orange4
255 127 0 DarkOrange1
238 118 0 DarkOrange2
205 102 0 DarkOrange3
139 69 0 DarkOrange4
255 114 86 coral1
238 106 80 coral2
205 91 69 coral3
139 62 47 coral4
255 99 71 tomato1
238 92 66 tomato2
205 79 57 tomato3
139 54 38 tomato4
255 69 0 OrangeRed1
238 64 0 OrangeRed2
205 55 0 OrangeRed3
139 37 0 OrangeRed4
255 0 0 red1
238 0 0 red2
205 0 0 red3
139 0 0 red4
255 20 147 DeepPink1
238 18 137 DeepPink2
205 16 118 DeepPink3
139 10 80 DeepPink4
255 110 180 HotPink1
238 106 167 HotPink2
205 96 144 HotPink3
139 58 98 HotPink4
255 181 197 pink1
238 169 184 pink2
205 145 158 pink3
139 99 108 pink4
255 174 185 LightPink1
238 162 173 LightPink2
205 140 149 LightPink3
139 95 101 LightPink4
255 130 171 PaleVioletRed1
238 121 159 PaleVioletRed2
205 104 137 PaleVioletRed3
139 71 93 PaleVioletRed4
255 52 179 maroon1
238 48 167 maroon2
205 41 144 maroon3
139 28 98 maroon4
255 62 150 VioletRed1
238 58 140 VioletRed2
205 50 120 VioletRed3
139 34 82 VioletRed4
255 0 255 magenta1
238 0 238 magenta2
205 0 205 magenta3
139 0 139 magenta4
255 131 250 orchid1
238 122 233 orchid2
205 105 201 orchid3
139 71 137 orchid4
255 187 255 plum1
238 174 238 plum2
205 150 205 plum3
139 102 139 plum4
224 102 255 MediumOrchid1
209 95 238 MediumOrchid2
180 82 205 MediumOrchid3
122 55 139 MediumOrchid4
191 62 255 DarkOrchid1
178 58 238 DarkOrchid2
154 50 205 DarkOrchid3
104 34 139 DarkOrchid4
155 48 255 purple1
145 44 238 purple2
125 38 205 purple3
85 26 139 purple4
171 130 255 MediumPurple1
159 121 238 MediumPurple2
137 104 205 MediumPurple3
93 71 139 MediumPurple4
255 225 255 thistle1
238 210 238 thistle2
205 181 205 thistle3
139 123 139 thistle4
0 0 0 gray0
0 0 0 grey0
3 3 3 gray1
3 3 3 grey1
5 5 5 gray2
5 5 5 grey2
8 8 8 gray3
8 8 8 grey3
10 10 10 gray4
10 10 10 grey4
13 13 13 gray5
13 13 13 grey5
15 15 15 gray6
15 15 15 grey6
18 18 18 gray7
18 18 18 grey7
20 20 20 gray8
20 20 20 grey8
23 23 23 gray9
23 23 23 grey9
26 26 26 gray10
26 26 26 grey10
28 28 28 gray11
28 28 28 grey11
31 31 31 gray12
31 31 31 grey12
33 33 33 gray13
33 33 33 grey13
36 36 36 gray14
36 36 36 grey14
38 38 38 gray15
38 38 38 grey15
41 41 41 gray16
41 41 41 grey16
43 43 43 gray17
43 43 43 grey17
46 46 46 gray18
46 46 46 grey18
48 48 48 gray19
48 48 48 grey19
51 51 51 gray20
51 51 51 grey20
54 54 54 gray21
54 54 54 grey21
56 56 56 gray22
56 56 56 grey22
59 59 59 gray23
59 59 59 grey23
61 61 61 gray24
61 61 61 grey24
64 64 64 gray25
64 64 64 grey25
66 66 66 gray26
66 66 66 grey26
69 69 69 gray27
69 69 69 grey27
71 71 71 gray28
71 71 71 grey28
74 74 74 gray29
74 74 74 grey29
77 77 77 gray30
77 77 77 grey30
79 79 79 gray31
79 79 79 grey31
82 82 82 gray32
82 82 82 grey32
84 84 84 gray33
84 84 84 grey33
87 87 87 gray34
87 87 87 grey34
89 89 89 gray35
89 89 89 grey35
92 92 92 gray36
92 92 92 grey36
94 94 94 gray37
94 94 94 grey37
97 97 97 gray38
97 97 97 grey38
99 99 99 gray39
99 99 99 grey39
102 102 102 gray40
102 102 102 grey40
105 105 105 gray41
105 105 105 grey41
107 107 107 gray42
107 107 107 grey42
110 110 110 gray43
110 110 110 grey43
112 112 112 gray44
112 112 112 grey44
115 115 115 gray45
115 115 115 grey45
117 117 117 gray46
117 117 117 grey46
120 120 120 gray47
120 120 120 grey47
122 122 122 gray48
122 122 122 grey48
125 125 125 gray49
125 125 125 grey49
127 127 127 gray50
127 127 127 grey50
130 130 130 gray51
130 130 130 grey51
133 133 133 gray52
133 133 133 grey52
135 135 135 gray53
135 135 135 grey53
138 138 138 gray54
138 138 138 grey54
140 140 140 gray55
140 140 140 grey55
143 143 143 gray56
143 143 143 grey56
145 145 145 gray57
145 145 145 grey57
148 148 148 gray58
148 148 148 grey58
150 150 150 gray59
150 150 150 grey59
153 153 153 gray60
153 153 153 grey60
156 156 156 gray61
156 156 156 grey61
158 158 158 gray62
158 158 158 grey62
161 161 161 gray63
161 161 161 grey63
163 163 163 gray64
163 163 163 grey64
166 166 166 gray65
166 166 166 grey65
168 168 168 gray66
168 168 168 grey66
171 171 171 gray67
171 171 171 grey67
173 173 173 gray68
173 173 173 grey68
176 176 176 gray69
176 176 176 grey69
179 179 179 gray70
179 179 179 grey70
181 181 181 gray71
181 181 181 grey71
184 184 184 gray72
184 184 184 grey72
186 186 186 gray73
186 186 186 grey73
189 189 189 gray74
189 189 189 grey74
191 191 191 gray75
191 191 191 grey75
194 194 194 gray76
194 194 194 grey76
196 196 196 gray77
196 196 196 grey77
199 199 199 gray78
199 199 199 grey78
201 201 201 gray79
201 201 201 grey79
204 204 204 gray80
204 204 204 grey80
207 207 207 gray81
207 207 207 grey81
209 209 209 gray82
209 209 209 grey82
212 212 212 gray83
212 212 212 grey83
214 214 214 gray84
214 214 214 grey84
217 217 217 gray85
217 217 217 grey85
219 219 219 gray86
219 219 219 grey86
222 222 222 gray87
222 222 222 grey87
224 224 224 gray88
224 224 224 grey88
227 227 227 gray89
227 227 227 grey89
229 229 229 gray90
229 229 229 grey90
232 232 232 gray91
232 232 232 grey91
235 235 235 gray92
235 235 235 grey92
237 237 237 gray93
237 237 237 grey93
240 240 240 gray94
240 240 240 grey94
242 242 242 gray95
242 242 242 grey95
245 245 245 gray96
245 245 245 grey96
247 247 247 gray97
247 247 247 grey97
250 250 250 gray98
250 250 250 grey98
252 252 252 gray99
252 252 252 grey99
255 255 255 gray100
255 255 255 grey100
169 169 169 dark grey
169 169 169 DarkGrey
169 169 169 dark gray
169 169 169 DarkGray
0 0 139 dark blue
0 0 139 DarkBlue
0 139 139 dark cyan
0 139 139 DarkCyan
139 0 139 dark magenta
139 0 139 DarkMagenta
139 0 0 dark red
139 0 0 DarkRed
144 238 144 light green
144 238 144 LightGreen

1742
docs/commands.txt Normal file

File diff suppressed because it is too large Load diff

162
docs/console.css Normal file
View file

@ -0,0 +1,162 @@
DT
{
font-weight: bold;
}
DD
{
margin-bottom: 1em;
margin-left: 1.5em;
margin-right: 1.5em;
}
TH
{
text-align: left;
font-weight: bold;
padding-right: 2em;
vertical-align: top;
}
TD
{
text-align: left;
}
/* Command Descriptions */
DIV.c
{
border-right: 2px solid;
padding-right: 0.4em;
border-top: 1px solid;
margin-top: 1em;
padding-left: 0.4em;
font-weight: bold;
padding-bottom: 0.2em;
border-left: 1px solid;
padding-top: 0.2em;
border-bottom: 1px solid;
background-color: rgb(152,251,152);
margin-bottom: 0px;
}
DIV.b
{
border-right: 2px solid;
padding-right: 1.2em;
border-top: 1px;
padding-left: 1.2em;
padding-bottom: 0.5em;
border-left: 1px solid;
padding-top: 0.5em;
border-bottom: 2px solid;
background-color: rgb(240,255,240);
margin-top: 0px;
}
/* Variable Descriptions */
DIV.v, DIV.vf
{
border-right: 2px solid;
padding-right: 0.4em;
border-top: 1px solid;
margin-top: 1em;
padding-left: 0.4em;
font-weight: bold;
padding-bottom: 0.2em;
border-left: 1px solid;
padding-top: 0.2em;
border-bottom: 1px solid;
background-color: rgb(175,238,238);
}
DIV.vf
{
background-color: rgb(175,200,238);
}
DIV.t, DIV.tf
{
border-right: 2px solid;
padding-right: 1.2em;
border-top: 1px;
padding-left: 0.9em;
padding-bottom: 0.2em;
border-left: 1px solid;
padding-top: 0.2em;
border-bottom: 1px solid;
background-color: rgb(224,255,255);
}
DIV.tf
{
background-color: rgb(224,238,255);
}
DIV.d, DIV.df
{
border-right: 2px solid;
padding-right: 1.2em;
border-top: 2px;
padding-left: 1.2em;
padding-bottom: 0.5em;
border-left: 1px solid;
padding-top: 0.5em;
border-bottom: 2px solid;
background-color: rgb(240,255,255);
}
DIV.df
{
background-color: rgb(240,248,255);
}
P
{
margin-top: 1em;
margin-bottom: 0em;
}
A
{
color: Blue;
text-decoration: none;
}
A:hover
{
text-decoration: underline;
}
H1, H2
{
font-weight: bold;
left: -0.8em;
font-family: Verdana, Arial, Helvetica, Sans-Serif;
position: relative;
}
H3, H4
{
font-weight: bold;
font-family: Verdana, Arial, Helvetica, Sans-Serif;
left: 0em;
}
BODY
{
margin: 2em 2em 2em 2em;
background-color: white;
}
PRE
{
border: ridge 2px;
background-color: rgb(210,210,210);
padding: 1em 1em 1em 1em;
}
DIV.index
{
padding-right: 0.8em;
padding-left: 0.8em;
left: 0px;
float: left;
padding-bottom: 1em;
overflow: auto;
clip: rect(auto,auto,auto,auto);
padding-top: 0.5em;
position: absolute;
top: 0px;
background-color: #ffffcc;
border-right: solid 1px #808080;
border-bottom: solid 1px #808080;
}
DIV.main
{
margin-left: 11em;
height: 50%;
}

3587
docs/console.html Normal file

File diff suppressed because it is too large Load diff

390
docs/console.txt Normal file
View file

@ -0,0 +1,390 @@
<a href="#addbot">addbot</a><br>
<a href="#addkeysection">addkeysection</a><br>
<a href="#addmenukey">addmenukey</a><br>
<a href="#addrocketexplosion">addrocketexplosion</a><br>
<a href="#addslot">addslot</a><br>
<a href="#alias">alias</a><br>
<a href="#alwaysapplydmflags">alwaysapplydmflags</a><br>
<a href="#am_backcolor">am_backcolor</a><br>
<a href="#am_cdwallcolor">am_cdwallcolor</a><br>
<a href="#am_fdwallcolor">am_fdwallcolor</a><br>
<a href="#am_gridcolor">am_gridcolor</a><br>
<a href="#am_interlevelcolor">am_interlevelcolor</a><br>
<a href="#am_intralevelcolor">am_intralevelcolor</a><br>
<a href="#am_lockedcolor">am_lockedcolor</a><br>
<a href="#am_notseencolor">am_notseencolor</a><br>
<a href="#am_overlay">am_overlay</a><br>
<a href="#am_ovotherwallscolor">am_ovotherwallscolor</a><br>
<a href="#am_ovtelecolor">am_ovtelecolor</a><br>
<a href="#am_ovthingcolor">am_ovthingcolor</a><br>
<a href="#am_ovtrans">am_ovtrans</a><br>
<a href="#am_ovunseencolor">am_ovunseencolor</a><br>
<a href="#am_ovwallcolor">am_ovwallcolor</a><br>
<a href="#am_ovyourcolor">am_ovyourcolor</a><br>
<a href="#am_rotate">am_rotate</a><br>
<a href="#am_showitems">am_showitems</a><br>
<a href="#am_showmonsters">am_showmonsters</a><br>
<a href="#am_showsecrets">am_showsecrets</a><br>
<a href="#am_showtime">am_showtime</a><br>
<a href="#am_thingcolor">am_thingcolor</a><br>
<a href="#am_tswallcolor">am_tswallcolor</a><br>
<a href="#am_usecustomcolors">am_usecustomcolors</a><br>
<a href="#am_wallcolor">am_wallcolor</a><br>
<a href="#am_xhaircolor">am_xhaircolor</a><br>
<a href="#am_yourcolor">am_yourcolor</a><br>
<a href="#anubis">anubis</a><br>
<a href="#archivecvar">archivecvar</a><br>
<a href="#atexit">atexit</a><br>
<a href="#autoaim">autoaim</a><br>
<a href="#autosavenum">autosavenum</a><br>
<a href="#bind">bind</a><br>
<a href="#binddefaults">binddefaults</a><br>
<a href="#bot_allowspy">bot_allowspy</a><br>
<a href="#bot_next_color">bot_next_color</a><br>
<a href="#bot_observer">bot_observer</a><br>
<a href="#bumpgamma">bumpgamma</a><br>
<a href="#cd_close">cd_close</a><br>
<a href="#cd_drive">cd_drive</a><br>
<a href="#cd_eject">cd_eject</a><br>
<a href="#cd_enabled">cd_enabled</a><br>
<a href="#cd_pause">cd_pause</a><br>
<a href="#cd_play">cd_play</a><br>
<a href="#cd_resume">cd_resume</a><br>
<a href="#cd_stop">cd_stop</a><br>
<a href="#centerview">centerview</a><br>
<a href="#changemap">changemap</a><br>
<a href="#changemus">changemus</a><br>
<a href="#chase">chase</a><br>
<a href="#chase_dist">chase_dist</a><br>
<a href="#chase_height">chase_height</a><br>
<a href="#chasedemo">chasedemo</a><br>
<a href="#chat_substitution">chat_substition</a><br>
<a href="#chatmacroX">chatmacro0</a><br>
<a href="#chatmacroX">chatmacro1</a><br>
<a href="#chatmacroX">chatmacro2</a><br>
<a href="#chatmacroX">chatmacro3</a><br>
<a href="#chatmacroX">chatmacro4</a><br>
<a href="#chatmacroX">chatmacro5</a><br>
<a href="#chatmacroX">chatmacro6</a><br>
<a href="#chatmacroX">chatmacro7</a><br>
<a href="#chatmacroX">chatmacro8</a><br>
<a href="#chatmacroX">chatmacro9</a><br>
<a href="#cl_bbannounce">cl_bbannounce</a><br>
<a href="#cl_bloodsplats">cl_bloodsplats</a><br>
<a href="#cl_bloodtype">cl_bloodtype</a><br>
<a href="#cl_maxdecals">cl_maxdecals</a><br>
<a href="#cl_missiledecals">cl_missiledecals</a><br>
<a href="#cl_pufftype">cl_pufftype</a><br>
<a href="#cl_rockettrails">cl_rockettrails</a><br>
<a href="#cl_run">cl_run</a><br>
<a href="#cl_showmultikills">cl_showmultikills</a><br>
<a href="#cl_showsprees">cl_showsprees</a><br>
<a href="#cl_spreaddecals">cl_spreaddecals</a><br>
<a href="#clear">clear</a><br>
<a href="#clearwallcycles">clearwallcycles</a><br>
<a href="#cmdlist">cmdlist</a><br>
<a href="#color">color</a><br>
<a href="#compat_limitpain">compat_limitpain</a><br>
<a href="#compat_nopassover">compat_nopassover</a><br>
<a href="#compat_shortTex">compat_shortTex</a><br>
<a href="#compat_silentpickup">compat_silentpickup</a><br>
<a href="#compat_soundslots">compat_soundslots</a><br>
<a href="#compat_stairs">compat_stairs</a><br>
<a href="#compatflags">compatflags</a><br>
<a href="#con_centernotify">con_centernotify</a><br>
<a href="#con_ctrl_d">con_ctrl_d</a><br>
<a href="#con_midtime">con_midtime</a><br>
<a href="#con_notifytime">con_notifytime</a><br>
<a href="#con_scaletext">con_scaletext</a><br>
<a href="#countdecals">countdecals</a><br>
<a href="#countdecalsreal">countdecalsreal</a><br>
<a href="#crosshair">crosshair</a><br>
<a href="#crosshaircolor">crosshaircolor</a><br>
<a href="#crosshairgrow">crosshairgrow</a><br>
<a href="#crosshairhealth">crosshairhealth</a><br>
<a href="#crosshairscale">crosshairscale</a><br>
<a href="#cvarlist">cvarlist</a><br>
<a href="#cvarlistplain">cvarlistplain</a><br>
<a href="#deathmatch">deathmatch</a><br>
<a href="#defaultbind">defaultbind</a><br>
<a href="#demo_compress">demo_compress</a><br>
<a href="#developer">developer</a><br>
<a href="#dimamount">dimamount</a><br>
<a href="#dimcolor">dimcolor</a><br>
<a href="#dir">dir </a><br>
<a href="#disableautosave">disableautosave</a><br>
<a href="#dmflags">dmflags</a><br>
<a href="#dmflags2">dmflags2</a><br>
<a href="#doublebind">doublebind</a><br>
<a href="#dumpclasses">dumpclasses</a><br>
<a href="#dumpheap">dumpheap</a><br>
<a href="#dumpmap">dumpmap</a><br>
<a href="#dumpmapthings">dumpmapthings</a><br>
<a href="#dumpspawnables">dumpspawnables</a><br>
<a href="#echo">echo</a><br>
<a href="#endgame">endgame</a><br>
<a href="#error">error</a><br>
<a href="#eval">eval</a><br>
<a href="#exec">exec</a><br>
<a href="#exit">exit</a><br>
<a href="#fly">fly</a><br>
<a href="#forcewater">forcewater</a><br>
<a href="#fov">fov</a><br>
<a href="#fraglimit">fraglimit</a><br>
<a href="#freelook">freelook</a><br>
<a href="#freeze">freeze</a><br>
<a href="#fullscreen">fullscreen</a><br>
<a href="#gameversion">gameversion</a><br>
<a href="#gamma">gamma</a><br>
<a href="#genblockmap">genblockmap</a><br>
<a href="#gender">gender</a><br>
<a href="#gennodes">gennodes</a><br>
<a href="#get">get</a><br>
<a href="#give">give</a><br>
<a href="#god">god</a><br>
<a href="#heapsize">heapsize</a><br>
<a href="#history">history</a><br>
<a href="#hud_scale">hud_scale</a><br>
<a href="#i_remapkeypad">i_remapkeypad</a><br>
<a href="#idclev">idclev</a><br>
<a href="#iddqd">iddqd</a><br>
<a href="#idmus">idmus</a><br>
<a href="#idmypos">idmypos</a><br>
<a href="#in_mouse">in_mouse</a><br>
<a href="#invertmouse">invertmouse</a><br>
<a href="#invnext">invnext</a><br>
<a href="#invprev">invprev</a><br>
<a href="#invuse">invuse</a><br>
<a href="#invuseall">invuseall</a><br>
<a href="#joy_speedmultiplier">joy_speedmultiplier</a><br>
<a href="#joy_xsensitivity">joy_xsensitivity</a><br>
<a href="#joy_xthreshold">joy_xthreshold</a><br>
<a href="#joy_ysensitivity">joy_ysensitivity</a><br>
<a href="#joy_ythreshold">joy_ythreshold</a><br>
<a href="#key">key</a><br>
<a href="#kill">kill</a><br>
<a href="#land">land</a><br>
<a href="#language">language</a><br>
<a href="#listbots">listbots</a><br>
<a href="#logfile">logfile</a><br>
<a href="#lookspring">lookspring</a><br>
<a href="#lookstrafe">lookstrafe</a><br>
<a href="#m_forward">m_forward</a><br>
<a href="#m_pitch">m_pitch</a><br>
<a href="#m_side">m_side</a><br>
<a href="#m_yaw">m_yaw</a><br>
<a href="#map">map</a><br>
<a href="#mdk">mdk</a><br>
<a href="#mem">mem</a><br>
<a href="#menu_display">menu_display</a><br>
<a href="#menu_endgame">menu_endgame</a><br>
<a href="#menu_game">menu_game</a><br>
<a href="#menu_gameplay">menu_gameplay</a><br>
<a href="#menu_help">menu_help</a><br>
<a href="#menu_keys">menu_keys</a><br>
<a href="#menu_load">menu_load</a><br>
<a href="#menu_main">menu_main</a><br>
<a href="#menu_options">menu_options</a><br>
<a href="#menu_player">menu_player</a><br>
<a href="#menu_quit">menu_quit</a><br>
<a href="#menu_save">menu_save</a><br>
<a href="#menu_video">menu_video</a><br>
<a href="#messagemode">messagemode</a><br>
<a href="#messagemode2">messagemode2</a><br>
<a href="#morphme">morphme</a><br>
<a href="#mouse_sensitivity">mouse_sensitivity</a><br>
<a href="#movebob">movebob</a><br>
<a href="#msg">msg</a><br>
<a href="#msg0color">msg0color</a><br>
<a href="#msg1color">msg1color</a><br>
<a href="#msg2color">msg2color</a><br>
<a href="#msg3color">msg3color</a><br>
<a href="#msg4color">msg4color</a><br>
<a href="#msgmidcolor">msgmidcolor</a><br>
<a href="#msgmidcolor2">msgmidcolor2</a><br>
<a href="#name">name</a><br>
<a href="#neverswitchonpickup">neverswitchonpickup</a><br>
<a href="#noclip">noclip</a><br>
<a href="#nofilecompression">nofilecompression</a><br>
<a href="#noise">noise</a><br>
<a href="#notarget">notarget</a><br>
<a href="#pause">pause</a><br>
<a href="#pings">pings</a><br>
<a href="#playdemo">playdemo</a><br>
<a href="#playerinfo">playerinfo</a><br>
<a href="#playersounds">playersounds</a><br>
<a href="#playlist">playlist</a><br>
<a href="#playlistnext">playlistnext</a><br>
<a href="#playlistpos">playlistpos</a><br>
<a href="#playlistprev">playlistprev</a><br>
<a href="#playliststatus">playliststatus</a><br>
<a href="#playmovie">playmovie</a><br>
<a href="#playsound">playsound</a><br>
<a href="#png_gamma">png_gamma</a><br>
<a href="#png_level">png_level</a><br>
<a href="#powerup">powerup</a><br>
<a href="#print">print</a><br>
<a href="#puke">puke</a><br>
<a href="#pullin">pullin</a><br>
<a href="#queryiwad">queryiwad</a><br>
<a href="#quickload">quickload</a><br>
<a href="#quicksave">quicksave</a><br>
<a href="#quit">quit</a><br>
<a href="#r_columnmethod">r_columnmethod</a><br>
<a href="#r_detal">r_detail</a><br>
<a href="#r_drawflat">r_drawflat</a><br>
<a href="#r_drawfuzz">r_drawfuzz</a><br>
<a href="#r_drawmirrors">r_drawmirrors</a><br>
<a href="#r_drawplayersprites">r_drawplayersprites</a><br>
<a href="#r_drawtrans">r_drawtrans</a><br>
<a href="#r_fogboundary">r_fogboundary</a><br>
<a href="#r_particles">r_particles</a><br>
<a href="#r_stretchsky">r_stretchsky</a><br>
<a href="#r_viewsize">r_viewsize</a><br>
<a href="#r_visibility">r_visibility</a><br>
<a href="#rebind">rebind</a><br>
<a href="#removebots">removebots</a><br>
<a href="#say">say</a><br>
<a href="#say_team">say_team</a><br>
<a href="#screenblocks">screenblocks</a><br>
<a href="#screenshot">screenshot</a><br>
<a href="#screenshot_quiet">screenshot_quiet</a><br>
<a href="#screenshot_type">screenshot_type</a><br>
<a href="#scriptstat">scriptstat</a><br>
<a href="#select">select</a><br>
<a href="#set">set</a><br>
<a href="#setcolor">setcolor</a><br>
<a href="#setslot">setslot</a><br>
<a href="#show_messages">show_messages</a><br>
<a href="#sizedown">sizedown</a><br>
<a href="#sizeup">sizeup</a><br>
<a href="#skill">skill</a><br>
<a href="#skin">skin</a><br>
<a href="#skins">skins</a><br>
<a href="#slot">slot</a><br>
<a href="#snd_3d">snd_3d</a><br>
<a href="#snd_buffersize">snd_buffersize</a><br>
<a href="#snd_channels">snd_channels</a><br>
<a href="#snd_driver">snd_driver</a><br>
<a href="#snd_flipstereo">snd_flipstereo</a><br>
<a href="#snd_fpumixer">snd_fpumixer</a><br>
<a href="#snd_listdrivers">snd_listdrivers</a><br>
<a href="#snd_listmididevices">snd_listmididevices</a><br>
<a href="#snd_matrix">snd_matrix</a><br>
<a href="#snd_mididevice">snd_mididevice</a><br>
<a href="#snd_midiprecache">snd_midiprecache</a><br>
<a href="#snd_midivolume">snd_midivolume</a><br>
<a href="#snd_movievolume">snd_movievolume</a><br>
<a href="#snd_musicvolume">snd_musicvolume</a><br>
<a href="#snd_output">snd_output</a><br>
<a href="#snd_pitched">snd_pitched</a><br>
<a href="#snd_reset">snd_reset</a><br>
<a href="#snd_samplerate">snd_samplerate</a><br>
<a href="#snd_sfxvolume">snd_sfxvolume</a><br>
<a href="#snd_status">snd_status</a><br>
<a href="#snd_surround">snd_surround</a><br>
<a href="#snd_waterreverb">snd_waterreverb</a><br>
<a href="#soundlinks">soundlinks</a><br>
<a href="#soundlist">soundlist</a><br>
<a href="#spc_8bit">spc_8bit</a><br>
<a href="#spc_amp">spc_amp</a><br>
<a href="#spc_frequency">spc_frequency</a><br>
<a href="#spc_lowpass">spc_lowpass</a><br>
<a href="#spc_oldsamples">spc_oldsamples</a><br>
<a href="#spc_quality">spc_quality</a><br>
<a href="#spc_stereo">spc_stereo</a><br>
<a href="#spc_surround">spc_surround</a><br>
<a href="#splashfactor">splashfactor</a><br>
<a href="#spray">spray</a><br>
<a href="#spynext">spynext</a><br>
<a href="#spyprev">spyprev</a><br>
<a href="#st_scale">st_scale</a><br>
<a href="#stat">stat</a><br>
<a href="#stillbob">stillbob</a><br>
<a href="#stop">stop</a><br>
<a href="#stopmus">stopmus</a><br>
<a href="#storesavepic">storesavepic</a><br>
<a href="#summon">summon</a><br>
<a href="#sv_aircontrol">sv_aircontrol</a><br>
<a href="#sv_barrelrespawn">sv_barrelrespawn</a><br>
<a href="#sv_cheats">sv_cheats</a><br>
<a href="#sv_falldamage">sv_falldamage</a><br>
<a href="#sv_fastmonsters">sv_fastmonsters</a><br>
<a href="#sv_forcerespawn">sv_forcerespawn</a><br>
<a href="#sv_gravity">sv_gravity</a><br>
<a href="#sv_infiniteammo">sv_infiniteammo</a><br>
<a href="#sv_itemrespawn">sv_itemrespawn</a><br>
<a href="#sv_monsterrespawn">sv_monsterrespawn</a><br>
<a href="#sv_noarmor">sv_noarmor</a><br>
<a href="#sv_nobfgaim">sv_nobfgaim</a><br>
<a href="#sv_noexit">sv_noexit</a><br>
<a href="#sv_nofov">sv_nofov</a><br>
<a href="#sv_nofreelook">sv_nofreelook</a><br>
<a href="#sv_nohealth">sv_nohealth</a><br>
<a href="#sv_noitems">sv_noitems</a><br>
<a href="#sv_nojump">sv_nojump</a><br>
<a href="#sv_nomonsters">sv_nomonsters</a><br>
<a href="#sv_oldfalldamage">sv_oldfalldamage</a><br>
<a href="#sv_respawnprotect">sv_respawnprotect</a><br>
<a href="#sv_respawnsuper">sv_respawnsuper</a><br>
<a href="#sv_samelevel">sv_samelevel</a><br>
<a href="#sv_spawnfarthest">sv_spawnfarthest</a><br>
<a href="#sv_weapondrop">sv_weapondrop</a><br>
<a href="#sv_weaponstay">sv_weaponstay</a><br>
<a href="#team">team</a><br>
<a href="#teamdamage">teamdamage</a><br>
<a href="#teamplay">teamplay</a><br>
<a href="#telezoom">telezoom</a><br>
<a href="#test">test</a><br>
<a href="#testblend">testblend</a><br>
<a href="#testcolor">testcolor</a><br>
<a href="#testfade">testfade</a><br>
<a href="#ticker">ticker</a><br>
<a href="#tilt">tilt</a><br>
<a href="#timedemo">timedemo</a><br>
<a href="#timelimit">timelimit</a><br>
<a href="#timidity_8bit">timidity_8bit</a><br>
<a href="#timidity_byteswap">timidity_byteswap</a><br>
<a href="#timidity_chorus">timidity_chorus</a><br>
<a href="#timidity_exe">timidity_exe</a><br>
<a href="#timidity_extargs">timidity_extargs</a><br>
<a href="#timidity_frequency">timidity_frequency</a><br>
<a href="#timidity_pipe">timidity_pipe</a><br>
<a href="#timidity_reverb">timidity_reverb</a><br>
<a href="#timidity_stereo">timidity_stereo</a><br>
<a href="#toggle">toggle</a><br>
<a href="#toggleconsole">toggleconsole</a><br>
<a href="#togglemap">togglemap</a><br>
<a href="#togglemessages">togglemessages</a><br>
<a href="#transsouls">transsouls</a><br>
<a href="#turbo">turbo</a><br>
<a href="#turn180">turn180</a><br>
<a href="#turnspeeds">turnspeeds</a><br>
<a href="#tx">tx</a><br>
<a href="#ty">ty</a><br>
<a href="#unbind">unbind</a><br>
<a href="#unbindall">unbindall</a><br>
<a href="#undoublebind">undoublebind</a><br>
<a href="#unset">unset</a><br>
<a href="#use">use</a><br>
<a href="#use_joystick">use_joystick</a><br>
<a href="#use_mouse">use_mouse</a><br>
<a href="#var_friction">var_friction</a><br>
<a href="#var_pushers">var_pushers</a><br>
<a href="#vid_attachedsurfaces">vid_attachedsurfaces (Win32 only)</a><br>
<a href="#vid_currentmode">vid_currentmode</a><br>
<a href="#vid_defbits">vid_defbits</a><br>
<a href="#vid_defheight">vid_defheight</a><br>
<a href="#vid_defwidth">vid_defwidth</a><br>
<a href="#vid_fps">vid_fps</a><br>
<a href="#vid_listmodes">vid_listmodes</a><br>
<a href="#vid_noblitter">vid_noblitter (Win32 only)</a><br>
<a href="#vid_palettehack">vid_palettehack (Win32 only)</a><br>
<a href="#vid_setmode">vid_setmode</a><br>
<a href="#vid_vsync">vid_vsync (Win32 only)</a><br>
<a href="#vid_winscale">vid_winscale</a><br>
<a href="#weapnext">weapnext</a><br>
<a href="#weapon">weapon</a><br>
<a href="#weapprev">weapprev</a><br>
<a href="#wi_percents">wi_percents</a><br>
<a href="#wipetype">wipetype</a><br>

464
docs/console2.html Normal file
View file

@ -0,0 +1,464 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:w="urn:schemas-microsoft-com:office:word"
xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv=Content-Type content="text/html; charset=windows-1252">
<meta name=ProgId content=Word.Document>
<meta name=Generator content="Microsoft Word 9">
<meta name=Originator content="Microsoft Word 9">
<link rel=File-List href="./console2_files/filelist.xml">
<title>ZDoom includes a powerful console that you can use to manipulate or
inspect various aspects of the game while you are playing</title>
<!--[if gte mso 9]><xml>
<o:DocumentProperties>
<o:Author>Randy Heit</o:Author>
<o:LastAuthor>Randy Heit</o:LastAuthor>
<o:Revision>2</o:Revision>
<o:TotalTime>2</o:TotalTime>
<o:Created>2002-08-20T01:18:00Z</o:Created>
<o:LastSaved>2002-08-20T01:18:00Z</o:LastSaved>
<o:Pages>38</o:Pages>
<o:Words>14199</o:Words>
<o:Characters>80938</o:Characters>
<o:Lines>674</o:Lines>
<o:Paragraphs>161</o:Paragraphs>
<o:CharactersWithSpaces>99397</o:CharactersWithSpaces>
<o:Version>9.3821</o:Version>
</o:DocumentProperties>
</xml><![endif]-->
<style>
<!--
@import url("console.css");
/* Font Definitions */
@font-face
{font-family:Times;
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-charset:0;
mso-generic-font-family:roman;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:3 0 0 0 1 0;}
@font-face
{font-family:Helvetica;
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:3 0 0 0 1 0;}
@font-face
{font-family:Courier;
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-charset:0;
mso-generic-font-family:modern;
mso-font-format:other;
mso-font-pitch:fixed;
mso-font-signature:3 0 0 0 1 0;}
@font-face
{font-family:Geneva;
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:3 0 0 0 1 0;}
@font-face
{font-family:"Tms Rmn";
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-charset:0;
mso-generic-font-family:roman;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:3 0 0 0 1 0;}
@font-face
{font-family:Helv;
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:3 0 0 0 1 0;}
@font-face
{font-family:"MS Serif";
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-charset:0;
mso-generic-font-family:roman;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:3 0 0 0 1 0;}
@font-face
{font-family:"MS Sans Serif";
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:3 0 0 0 1 0;}
@font-face
{font-family:"New York";
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-charset:0;
mso-generic-font-family:roman;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:3 0 0 0 1 0;}
@font-face
{font-family:System;
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:3 0 0 0 1 0;}
@font-face
{font-family:Wingdings;
panose-1:5 0 0 0 0 0 0 0 0 0;
mso-font-charset:2;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:0 268435456 0 0 -2147483648 0;}
@font-face
{font-family:Mincho;
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-alt:\660E\671D;
mso-font-charset:128;
mso-generic-font-family:roman;
mso-font-format:other;
mso-font-pitch:fixed;
mso-font-signature:1 134676480 16 0 131072 0;}
@font-face
{font-family:Batang;
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-alt:\BC14\D0D5;
mso-font-charset:129;
mso-generic-font-family:auto;
mso-font-format:other;
mso-font-pitch:fixed;
mso-font-signature:1 151388160 16 0 524288 0;}
@font-face
{font-family:SimSun;
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-alt:\5B8B\4F53;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:1 135135232 16 0 262144 0;}
@font-face
{font-family:PMingLiU;
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-alt:\65B0\7D30\660E\9AD4;
mso-font-charset:136;
mso-generic-font-family:auto;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:1 134742016 16 0 1048576 0;}
@font-face
{font-family:Gothic;
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-alt:\FF7B\FF9E\FF7C\FF6F\FF78;
mso-font-charset:128;
mso-generic-font-family:modern;
mso-font-format:other;
mso-font-pitch:fixed;
mso-font-signature:1 134676480 16 0 131072 0;}
@font-face
{font-family:Dotum;
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-alt:\B3CB\C6C0;
mso-font-charset:129;
mso-generic-font-family:modern;
mso-font-format:other;
mso-font-pitch:fixed;
mso-font-signature:1 151388160 16 0 524288 0;}
@font-face
{font-family:SimHei;
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-alt:\9ED1\4F53;
mso-font-charset:134;
mso-generic-font-family:modern;
mso-font-format:other;
mso-font-pitch:fixed;
mso-font-signature:1 135135232 16 0 262144 0;}
@font-face
{font-family:MingLiU;
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-alt:\7D30\660E\9AD4;
mso-font-charset:136;
mso-generic-font-family:modern;
mso-font-format:other;
mso-font-pitch:fixed;
mso-font-signature:1 134742016 16 0 1048576 0;}
@font-face
{font-family:"MS Mincho";
panose-1:2 2 6 9 4 2 5 8 3 4;
mso-font-alt:"\FF2D\FF33 \660E\671D";
mso-font-charset:128;
mso-generic-font-family:roman;
mso-font-format:other;
mso-font-pitch:fixed;
mso-font-signature:1 134676480 16 0 131072 0;}
@font-face
{font-family:Gulim;
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-alt:\AD74\B9BC;
mso-font-charset:129;
mso-generic-font-family:roman;
mso-font-format:other;
mso-font-pitch:fixed;
mso-font-signature:1 151388160 16 0 524288 0;}
@font-face
{font-family:"MS Gothic";
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-alt:"\FF2D\FF33 \30B4\30B7\30C3\30AF";
mso-font-charset:128;
mso-generic-font-family:modern;
mso-font-format:other;
mso-font-pitch:fixed;
mso-font-signature:1 134676480 16 0 131072 0;}
@font-face
{font-family:Century;
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-charset:0;
mso-generic-font-family:roman;
mso-font-format:other;
mso-font-pitch:variable;
mso-font-signature:3 0 0 0 1 0;}
@font-face
{font-family:Tahoma;
panose-1:0 0 0 0 0 0 0 0 0 0;
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-format:other;
mso-font-pitch:auto;
mso-font-signature:3 0 0 0 1 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0in;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
p
{font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:"Times New Roman";}
code
{mso-ascii-font-family:"Courier New";
mso-fareast-font-family:"Courier New";
mso-hansi-font-family:"Courier New";
mso-bidi-font-family:"Courier New";}
pre
{margin:0in;
margin-bottom:.0001pt;
font-size:10.0pt;
font-family:"Courier New";
mso-fareast-font-family:"Courier New";}
span.msoIns
{mso-style-type:export-only;
mso-style-name:"";
text-decoration:underline;
text-underline:single;
color:teal;}
span.msoDel
{mso-style-type:export-only;
mso-style-name:"";
text-decoration:line-through;
color:red;}
span.msoChangeProp
{mso-style-type:export-only;
mso-style-name:"";
color:black;}
@page Section1
{size:8.5in 11.0in;
margin:1.0in 1.25in 1.0in 1.25in;
mso-header-margin:.5in;
mso-footer-margin:.5in;
mso-paper-source:0;}
div.Section1
{page:Section1;}
/* List Definitions */
@list l0
{mso-list-id:165635405;
mso-list-type:hybrid;
mso-list-template-ids:531535356 1333277374 509800712 1215476482 -74960582 -1013130576 793565182 -525691652 -338382956 1561079150;}
@list l1
{mso-list-id:489369666;
mso-list-type:hybrid;
mso-list-template-ids:291644094 748713652 1210619528 2048810284 -1043671612 1052133222 1607473504 -291189002 846466160 -1554904668;}
@list l1:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l2
{mso-list-id:516233099;
mso-list-type:hybrid;
mso-list-template-ids:-401820510 902876440 -1935265674 -1649118304 839043126 931940900 -1297343802 -1779383916 -816549988 1136297300;}
@list l3
{mso-list-id:766197230;
mso-list-type:hybrid;
mso-list-template-ids:1002708612 -143332926 1885998388 -432645964 1361103628 504258760 744004868 551295218 1599524860 -1676777782;}
@list l4
{mso-list-id:858549816;
mso-list-type:hybrid;
mso-list-template-ids:1863861142 929091656 305442802 -1918993072 -450992264 -81600322 1602393256 1532296078 718961654 762977100;}
@list l5
{mso-list-id:918905342;
mso-list-type:hybrid;
mso-list-template-ids:1295798056 1225576180 -128685948 543434488 2097070882 -1816471038 784390768 -2102859786 2033076946 -324740692;}
@list l6
{mso-list-id:1362979378;
mso-list-type:hybrid;
mso-list-template-ids:-1850549792 -391186072 -905432110 2063762872 1730582286 -2082574146 -1539803674 -1996176218 -1381079158 -1410833194;}
@list l7
{mso-list-id:1635328699;
mso-list-type:hybrid;
mso-list-template-ids:1228281090 1104947790 991701514 983832616 741385964 620277532 1606465572 -369836152 1736976332 1084508316;}
@list l8
{mso-list-id:1646624103;
mso-list-type:hybrid;
mso-list-template-ids:1224640572 -953379986 1961779546 914290964 744158696 -2083898490 -615732342 1695052258 -1966034182 -1493239608;}
@list l8:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l9
{mso-list-id:1802117089;
mso-list-type:hybrid;
mso-list-template-ids:1380746592 689494654 -1541107352 -1297045148 -173254316 -2131698750 1508031626 -1410297752 -1837830562 372664458;}
@list l10
{mso-list-id:1807695059;
mso-list-type:hybrid;
mso-list-template-ids:1407893458 1337116600 -2124374718 -2145628386 -2039033766 -1145645950 1018592814 926160498 1505642846 712400720;}
@list l10:level1
{mso-level-number-format:bullet;
mso-level-text:\F0B7;
mso-level-tab-stop:.5in;
mso-level-number-position:left;
text-indent:-.25in;
mso-ansi-font-size:10.0pt;
font-family:Symbol;}
@list l11
{mso-list-id:1905872787;
mso-list-type:hybrid;
mso-list-template-ids:150497658 223655122 1863870932 -2041170490 1818011262 -636699064 1665060092 1516957276 -588601664 2126671290;}
@list l12
{mso-list-id:2131968032;
mso-list-type:hybrid;
mso-list-template-ids:-1936026304 1252412506 1728357352 1996384130 1098690316 -585067264 -1692122122 -1350537662 1298047156 -873440630;}
@list l13
{mso-list-id:2142531460;
mso-list-type:hybrid;
mso-list-template-ids:-701841198 -1314860012 -1088756404 989619594 -745792078 1975953494 -1896712442 -987226800 -987218510 1376819838;}
ol
{margin-bottom:0in;}
ul
{margin-bottom:0in;}
-->
</style>
<meta content="http://schemas.microsoft.com/intellisense/nav4-0"
name="vs_targetSchema">
</head>
<body lang=EN-US link=blue vlink=blue style='tab-interval:.5in'>
<div class=Section1>
<p class=MsoNormal>ZDoom includes a powerful console that you can use to
manipulate or inspect various aspects of the game while you are playing. </p>
<h1>Obsolete commands and variables</h1>
<p class=MsoNormal>The following commands and variables were present in ZDoom
1.22 but have been removed: </p>
<p class=MsoNormal><b>configver<o:p></o:p></b></p>
<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;
margin-left:.5in'>This variable was used by ZDoom to determine which version
wrote the zdoom.cfg. This has been replaced by the [LastRun] section of
zdoom.ini and is no longer accessible from the console.</p>
<p class=MsoNormal><b>def_patch<o:p></o:p></b></p>
<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;
margin-left:.5in'>You can now have multiple dehacked patches loaded
automatically. To do this, add a [Doom.DefaultDehacked] section to zdoom.ini
like this: </p>
<pre style='margin-left:.5in'>[Doom.DefaultDehacked]</pre><pre
style='margin-left:.5in'>Path=my_first_patch.deh</pre><pre style='margin-left:
.5in'>Path=my_second_patch.deh</pre>
<p class=MsoNormal style='margin-left:.5in'>You can add as many Path= lines as
you like. Not all Dehacked patches will work well together. Changes made by
patches listed later will override any changes made by patches listed earlier
that affect the same things. If you specify any patches with -deh or -bex at
the command line, then those patches will be loaded instead of the ones listed
here.</p>
<p class=MsoNormal><b>impulse<o:p></o:p></b></p>
<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;
margin-left:.5in'>Use the new slot and weapon commands instead.</p>
<p class=MsoNormal><b>nobfgaim<o:p></o:p></b></p>
<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;
margin-left:.5in'>This was renamed to sv_nobfgaim and is now a part of
dmflags2.</p>
<p class=MsoNormal><b>vid_noptc<o:p></o:p></b></p>
<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;
margin-left:.5in'>PTC is no longer used for video, so there is nothing for this
cvar to disable.</p>
<p class=MsoNormal><b>testgibs<o:p></o:p></b></p>
<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;
margin-left:.5in'>This variable never did anything useful in 1.22. </p>
<p class=MsoNormal>There are five types of cvars: </p>
<p class=MsoNormal><b>boolean<o:p></o:p></b></p>
<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;
margin-left:.5in'>This type of variable represents a yes/no or on/off value. It
can only be set to true or false. As shorthand, setting a boolean variable to 0
will set it to false, and setting it to anything non-zero will set it to true.</p>
<p class=MsoNormal><b>integer<o:p></o:p></b></p>
<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;
margin-left:.5in'>This is an ordinary number without a decimal point. For
example, 1 is an integer, but 1.2 is not.</p>
<p class=MsoNormal><b>float<o:p></o:p></b></p>
<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;
margin-left:.5in'>This is an ordinary number that can have a decimal point.</p>
<p class=MsoNormal><b>string<o:p></o:p></b></p>
<p class=MsoNormal style='margin-top:0in;margin-right:0in;margin-bottom:12.0pt;
margin-left:.5in'>This is a series of text characters enclosed in quotes: For
example, &quot;Felix loitered lecherously on the lot&quot; is a string. If you
removed the quotes around it, then it would not be a string.</p>
<p class=MsoNormal>

112
docs/doomlic.txt Normal file
View file

@ -0,0 +1,112 @@
LIMITED USE SOFTWARE LICENSE AGREEMENT
This Limited Use Software License Agreement (the "Agreement")
is a legal agreement between you, the end-user, and Id Software, Inc.
("ID"). By downloading or purchasing the software material, which
includes source code (the "Source Code"), artwork data, music and
software tools (collectively, the "Software"), you are agreeing to
be bound by the terms of this Agreement. If you do not agree to the
terms of this Agreement, promptly destroy the Software you may have
downloaded or copied.
ID SOFTWARE LICENSE
1. Grant of License. ID grants to you the right to use the
Software. You have no ownership or proprietary rights in or to the
Software, or the Trademark. For purposes of this section, "use" means
loading the Software into RAM, as well as installation on a hard disk
or other storage device. The Software, together with any archive copy
thereof, shall be destroyed when no longer used in accordance with
this Agreement, or when the right to use the Software is terminated.
You agree that the Software will not be shipped, transferred or
exported into any country in violation of the U.S. Export
Administration Act (or any other law governing such matters) and that
you will not utilize, in any other manner, the Software in violation
of any applicable law.
2. Permitted Uses. For educational purposes only, you, the
end-user, may use portions of the Source Code, such as particular
routines, to develop your own software, but may not duplicate the
Source Code, except as noted in paragraph 4. The limited right
referenced in the preceding sentence is hereinafter referred to as
"Educational Use." By so exercising the Educational Use right you
shall not obtain any ownership, copyright, proprietary or other
interest in or to the Source Code, or any portion of the Source
Code. You may dispose of your own software in your sole discretion.
With the exception of the Educational Use right, you may not
otherwise use the Software, or an portion of the Software, which
includes the Source Code, for commercial gain.
3. Prohibited Uses: Under no circumstances shall you, the
end-user, be permitted, allowed or authorized to commercially exploit
the Software. Neither you nor anyone at your direction shall do any
of the following acts with regard to the Software, or any portion
thereof:
Rent;
Sell;
Lease;
Offer on a pay-per-play basis;
Distribute for money or any other consideration; or
In any other manner and through any medium whatsoever
commercially exploit or use for any commercial purpose.
Notwithstanding the foregoing prohibitions, you may commercially
exploit the software you develop by exercising the Educational Use
right, referenced in paragraph 2. hereinabove.
4. Copyright. The Software and all copyrights related thereto
(including all characters and other images generated by the Software
or depicted in the Software) are owned by ID and is protected by
United States copyright laws and international treaty provisions.
Id shall retain exclusive ownership and copyright in and to the
Software and all portions of the Software and you shall have no
ownership or other proprietary interest in such materials. You must
treat the Software like any other copyrighted material. You may not
otherwise reproduce, copy or disclose to others, in whole or in any
part, the Software. You may not copy the written materials
accompanying the Software. You agree to use your best efforts to
see that any user of the Software licensed hereunder complies with
this Agreement.
5. NO WARRANTIES. ID DISCLAIMS ALL WARRANTIES, BOTH EXPRESS
IMPLIED, INCLUDING BUT NOT LIMITED TO, IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE WITH RESPECT
TO THE SOFTWARE. THIS LIMITED WARRANTY GIVES YOU SPECIFIC LEGAL
RIGHTS. YOU MAY HAVE OTHER RIGHTS WHICH VARY FROM JURISDICTION TO
JURISDICTION. ID DOES NOT WARRANT THAT THE OPERATION OF THE SOFTWARE
WILL BE UNINTERRUPTED, ERROR FREE OR MEET YOUR SPECIFIC REQUIREMENTS.
THE WARRANTY SET FORTH ABOVE IS IN LIEU OF ALL OTHER EXPRESS
WARRANTIES WHETHER ORAL OR WRITTEN. THE AGENTS, EMPLOYEES,
DISTRIBUTORS, AND DEALERS OF ID ARE NOT AUTHORIZED TO MAKE
MODIFICATIONS TO THIS WARRANTY, OR ADDITIONAL WARRANTIES ON BEHALF
OF ID.
Exclusive Remedies. The Software is being offered to you
free of any charge. You agree that you have no remedy against ID, its
affiliates, contractors, suppliers, and agents for loss or damage
caused by any defect or failure in the Software regardless of the form
of action, whether in contract, tort, includinegligence, strict
liability or otherwise, with regard to the Software. This Agreement
shall be construed in accordance with and governed by the laws of the
State of Texas. Copyright and other proprietary matters will be
governed by United States laws and international treaties. IN ANY
CASE, ID SHALL NOT BE LIABLE FOR LOSS OF DATA, LOSS OF PROFITS, LOST
SAVINGS, SPECIAL, INCIDENTAL, CONSEQUENTIAL, INDIRECT OR OTHER
SIMILAR DAMAGES ARISING FROM BREACH OF WARRANTY, BREACH OF CONTRACT,
NEGLIGENCE, OR OTHER LEGAL THEORY EVEN IF ID OR ITS AGENT HAS BEEN
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES, OR FOR ANY CLAIM BY ANY
OTHER PARTY. Some jurisdictions do not allow the exclusion or
limitation of incidental or consequential damages, so the above
limitation or exclusion may not apply to you.

227
docs/foo.txt Normal file
View file

@ -0,0 +1,227 @@
<div class="v" id="addrocketexplosion">addrocketexplosion</div>
<div class="v" id="alwaysapplydmflags">alwaysapplydmflags</div>
<div class="v" id="am_backcolor">am_backcolor</div>
<div class="v" id="am_cdwallcolor">am_cdwallcolor</div>
<div class="v" id="am_fdwallcolor">am_fdwallcolor</div>
<div class="v" id="am_gridcolor">am_gridcolor</div>
<div class="v" id="am_interlevelcolor">am_interlevelcolor</div>
<div class="v" id="am_intralevelcolor">am_intralevelcolor</div>
<div class="v" id="am_lockedcolor">am_lockedcolor</div>
<div class="v" id="am_notseencolor">am_notseencolor</div>
<div class="v" id="am_overlay">am_overlay</div>
<div class="v" id="am_ovotherwallscolor">am_ovotherwallscolor</div>
<div class="v" id="am_ovtelecolor">am_ovtelecolor</div>
<div class="v" id="am_ovthingcolor">am_ovthingcolor</div>
<div class="v" id="am_ovtrans">am_ovtrans</div>
<div class="v" id="am_ovunseencolor">am_ovunseencolor</div>
<div class="v" id="am_ovwallcolor">am_ovwallcolor</div>
<div class="v" id="am_ovyourcolor">am_ovyourcolor</div>
<div class="v" id="am_rotate">am_rotate</div>
<div class="v" id="am_showitems">am_showitems</div>
<div class="v" id="am_showmonsters">am_showmonsters</div>
<div class="v" id="am_showsecrets">am_showsecrets</div>
<div class="v" id="am_showtime">am_showtime</div>
<div class="v" id="am_thingcolor">am_thingcolor</div>
<div class="v" id="am_tswallcolor">am_tswallcolor</div>
<div class="v" id="am_usecustomcolors">am_usecustomcolors</div>
<div class="v" id="am_wallcolor">am_wallcolor</div>
<div class="v" id="am_xhaircolor">am_xhaircolor</div>
<div class="v" id="am_yourcolor">am_yourcolor</div>
<div class="v" id="autoaim">autoaim</div>
<div class="v" id="bot_allowspy">bot_allowspy</div>
<div class="v" id="bot_next_color">bot_next_color</div>
<div class="v" id="bot_observer">bot_observer</div>
<div class="v" id="cd_drive">cd_drive</div>
<div class="v" id="cd_enabled">cd_enambled</div>
<div class="v" id="chase_dist">chase_dist</div>
<div class="v" id="chase_height">chase_height</div>
<div class="v" id="chasedemo">chasedemo</div>
<div class="v" id="chat_substitution">chat_substition</div>
<div class="v" id="chatmacroX">chatmacro0<br>
<div class="v" id="cl_bbannounce">cl_bbannounce</div>
<div class="v" id="cl_bloodsplats">cl_bloodsplats</div>
<div class="v" id="cl_bloodtype">cl_bloodtype</div>
<div class="v" id="cl_maxdecals">cl_maxdecals</div>
<div class="v" id="cl_missiledecals">cl_missiledecals</div>
<div class="v" id="cl_pufftype">cl_pufftype</div>
<div class="v" id="cl_rockettrails">cl_rockettrails</div>
<div class="v" id="cl_run">cl_run</div>
<div class="v" id="cl_showmultikills">cl_showmultikills</div>
<div class="v" id="cl_showsprees">cl_showsprees</div>
<div class="v" id="cl_spreaddecals">cl_spreaddecals</div>
<div class="v" id="color">color</div>
<div class="v" id="compat_limitpain">compat_limitpain</div>
<div class="v" id="compat_nopassover">compat_nopassover</div>
<div class="v" id="compat_shortTex">compat_shortTex</div>
<div class="v" id="compat_silentpickup">compat_silentpickup</div>
<div class="v" id="compat_soundslots">compat_soundslots</div>
<div class="v" id="compat_stairs">compat_stairs</div>
<div class="v" id="compatflags">compatflags</div>
<div class="v" id="con_centernotify">con_centernotify</div>
<div class="v" id="con_ctrl_d">con_ctrl_d</div>
<div class="v" id="con_midtime">con_midtime</div>
<div class="v" id="con_notifytime">con_notifytime</div>
<div class="v" id="con_scaletext">con_scaletext</div>
<div class="v" id="crosshair">crosshair</div>
<div class="v" id="crosshaircolor">crosshaircolor</div>
<div class="v" id="crosshairgrow">crosshairgrow</div>
<div class="v" id="crosshairhealth">crosshairhealth</div>
<div class="v" id="crosshairscale">crosshairscale</div>
<div class="v" id="deathmatch">deathmatch</div>
<div class="v" id="demo_compress">demo_compress</div>
<div class="v" id="developer">developer</div>
<div class="v" id="dimamount">dimamount</div>
<div class="v" id="dimcolor">dimcolor</div>
<div class="v" id="disableautosave">disableautosave</div>
<div class="v" id="dmflags">dmflags</div>
<div class="v" id="dmflags2">dmflags2</div>
<div class="v" id="forcewater">forcewater</div>
<div class="v" id="fraglimit">fraglimit</div>
<div class="v" id="freelook">freelook</div>
<div class="v" id="fullscreen">fullscreen</div>
<div class="v" id="gamma">gamma</div>
<div class="v" id="genblockmap">genblockmap</div>
<div class="v" id="gender">gender</div>
<div class="v" id="gennodes">gennodes</div>
<div class="v" id="heapsize">heapsize</div>
<div class="v" id="hud_scale">hud_scale</div>
<div class="v" id="i_remapkeypad">i_remapkeypad</div>
<div class="v" id="idmypos">idmypos</div>
<div class="v" id="in_mouse">in_mouse</div>
<div class="v" id="invertmouse">invertmouse</div>
<div class="v" id="joy_speedmultiplier">joy_speedmultiplier</div>
<div class="v" id="joy_xsensitivity">joy_xsensitivity</div>
<div class="v" id="joy_xthreshold">joy_xthreshold</div>
<div class="v" id="joy_ysensitivity">joy_ysensitivity</div>
<div class="v" id="joy_ythreshold">joy_ythreshold</div>
<div class="v" id="language">language</div>
<div class="v" id="lookspring">lookspring</div>
<div class="v" id="lookstrafe">lookstrafe</div>
<div class="v" id="m_forward">m_forward</div>
<div class="v" id="m_pitch">m_pitch</div>
<div class="v" id="m_side">m_side</div>
<div class="v" id="m_yaw">m_yaw</div>
<div class="v" id="mouse_sensitivity">mouse_sensitivity</div>
<div class="v" id="movebob">movebob</div>
<div class="v" id="msg">msg</div>
<div class="v" id="msg0color">msg0color</div>
<div class="v" id="msg1color">msg1color</div>
<div class="v" id="msg2color">msg2color</div>
<div class="v" id="msg3color">msg3color</div>
<div class="v" id="msg4color">msg4color</div>
<div class="v" id="msgmidcolor">msgmidcolor</div>
<div class="v" id="msgmidcolor2">msgmidcolor2</div>
<div class="v" id="name">name</div>
<div class="v" id="neverswitchonpickup">neverswitchonpickup</div>
<div class="v" id="nofilecompression">nofilecompression</div>
<div class="v" id="noise">noise</div>
<div class="v" id="png_gamma">png_gamma</div>
<div class="v" id="png_level">png_level</div>
<div class="v" id="queryiwad">queryiwad</div>
<div class="v" id="r_columnmethod">r_columnmethod</div>
<div class="v" id="r_detal">r_detail</div>
<div class="v" id="r_drawflat">r_drawflat</div>
<div class="v" id="r_drawfuzz">r_drawfuzz</div>
<div class="v" id="r_drawmirrors">r_drawmirrors</div>
<div class="v" id="r_drawplayersprites">r_drawplayersprites</div>
<div class="v" id="r_drawtrans">r_drawtrans</div>
<div class="v" id="r_fogboundary">r_fogboundary</div>
<div class="v" id="r_particles">r_particles</div>
<div class="v" id="r_stretchsky">r_stretchsky</div>
<div class="v" id="r_viewsize">r_viewsize</div>
<div class="v" id="screenblocks">screenblocks</div>
<div class="v" id="screenshot_quiet">screenshot_quiet</div>
<div class="v" id="screenshot_type">screenshot_type</div>
<div class="v" id="show_messages">show_messages</div>
<div class="v" id="skill">skill</div>
<div class="v" id="skin">skin</div>
<div class="v" id="snd_3d">snd_3d</div>
<div class="v" id="snd_buffersize">snd_buffersize</div>
<div class="v" id="snd_channels">snd_channels</div>
<div class="v" id="snd_driver">snd_driver</div>
<div class="v" id="snd_flipstereo">snd_flipstereo</div>
<div class="v" id="snd_fpumixer">snd_fpumixer</div>
<div class="v" id="snd_matrix">snd_matrix</div>
<div class="v" id="snd_mididevice">snd_mididevice</div>
<div class="v" id="snd_midiprecache">snd_midiprecache</div>
<div class="v" id="snd_midivolume">snd_midivolume</div>
<div class="v" id="snd_movievolume">snd_movievolume</div>
<div class="v" id="snd_musicvolume">snd_musicvolume</div>
<div class="v" id="snd_output">snd_output</div>
<div class="v" id="snd_pitched">snd_pitched</div>
<div class="v" id="snd_samplerate">snd_samplerate</div>
<div class="v" id="snd_sfxvolume">snd_sfxvolume</div>
<div class="v" id="snd_surround">snd_surround</div>
<div class="v" id="snd_waterreverb">snd_waterreverb</div>
<div class="v" id="spc_8bit">spc_8bit</div>
<div class="v" id="spc_amp">spc_amp</div>
<div class="v" id="spc_frequency">spc_frequency</div>
<div class="v" id="spc_lowpass">spc_lowpass</div>
<div class="v" id="spc_oldsamples">spc_oldsamples</div>
<div class="v" id="spc_quality">spc_quality</div>
<div class="v" id="spc_stereo">spc_stereo</div>
<div class="v" id="spc_surround">spc_surround</div>
<div class="v" id="splashfactor">splashfactor</div>
<div class="v" id="st_scale">st_scale</div>
<div class="v" id="stillbob">stillbob</div>
<div class="v" id="storesavepic">storesavepic</div>
<div class="v" id="sv_aircontrol">sv_aircontrol</div>
<div class="v" id="sv_barrelrespawn">sv_barrelrespawn</div>
<div class="v" id="sv_cheats">sv_cheats</div>
<div class="v" id="sv_falldamage">sv_falldamage</div>
<div class="v" id="sv_fastmonsters">sv_fastmonsters</div>
<div class="v" id="sv_forcerespawn">sv_forcerespawn</div>
<div class="v" id="sv_gravity">sv_gravity</div>
<div class="v" id="sv_infiniteammo">sv_infiniteammo</div>
<div class="v" id="sv_itemrespawn">sv_itemrespawn</div>
<div class="v" id="sv_monsterrespawn">sv_monsterrespawn</div>
<div class="v" id="sv_noarmor">sv_noarmor</div>
<div class="v" id="sv_nobfgaim">sv_nobfgaim</div>
<div class="v" id="sv_noexit">sv_noexit</div>
<div class="v" id="sv_nofov">sv_nofov</div>
<div class="v" id="sv_nofreelook">sv_nofreelook</div>
<div class="v" id="sv_nohealth">sv_nohealth</div>
<div class="v" id="sv_noitems">sv_noitems</div>
<div class="v" id="sv_nojump">sv_nojump</div>
<div class="v" id="sv_nomonsters">sv_nomonsters</div>
<div class="v" id="sv_oldfalldamage">sv_oldfalldamage</div>
<div class="v" id="sv_respawnprotect">sv_respawnprotect</div>
<div class="v" id="sv_respawnsuper">sv_respawnsuper</div>
<div class="v" id="sv_samelevel">sv_samelevel</div>
<div class="v" id="sv_spawnfarthest">sv_spawnfarthest</div>
<div class="v" id="sv_weapondrop">sv_weapondrop</div>
<div class="v" id="sv_weaponstay">sv_weaponstay</div>
<div class="v" id="team">team</div>
<div class="v" id="teamdamage">teamdamage</div>
<div class="v" id="teamplay">teamplay</div>
<div class="v" id="telezoom">telezoom</div>
<div class="v" id="ticker">ticker</div>
<div class="v" id="tilt">tilt</div>
<div class="v" id="timelimit">timelimit</div>
<div class="v" id="timidity_8bit">timidity_8bit</div>
<div class="v" id="timidity_byteswap">timidity_byteswap</div>
<div class="v" id="timidity_chorus">timidity_chorus</div>
<div class="v" id="timidity_exe">timidity_exe</div>
<div class="v" id="timidity_extargs">timidity_extargs</div>
<div class="v" id="timidity_frequency">timidity_frequency</div>
<div class="v" id="timidity_pipe">timidity_pipe</div>
<div class="v" id="timidity_reverb">timidity_reverb</div>
<div class="v" id="timidity_stereo">timidity_stereo</div>
<div class="v" id="transsouls">transsouls</div>
<div class="v" id="turbo">turbo</div>
<div class="v" id="tx">tx</div>
<div class="v" id="ty">ty</div>
<div class="v" id="use_joystick">use_joystick</div>
<div class="v" id="use_mouse">use_mouse</div>
<div class="v" id="var_friction">var_friction</div>
<div class="v" id="var_pushers">var_pushers</div>
<div class="v" id="vid_attachedsurfaces">vid_attachedsurfaces (Win32 only)</div>
<div class="v" id="vid_defbits">vid_defbits</div>
<div class="v" id="vid_defheight">vid_defheight</div>
<div class="v" id="vid_defwidth">vid_defwidth</div>
<div class="v" id="vid_fps">vid_fps</div>
<div class="v" id="vid_noblitter">vid_noblitter (Win32 only)</div>
<div class="v" id="vid_palettehack">vid_palettehack (Win32 only)</div>
<div class="v" id="vid_vsync">vid_vsync (Win32 only)</div>
<div class="v" id="wi_percents">wi_percents</div>
<div class="v" id="wipetype">wipetype</div>

534
docs/history.txt Normal file
View file

@ -0,0 +1,534 @@
ZDoom Release History
More detailed info can be found in the file docs/rh-log.txt included with
the source code.
1.22 (12 December 1999)
=======================
* Scroll_Texture_Both and TranslucentLine specials can now be used from ACS.
* Fixed compiler-dependent cvar ordering during netgame arbitration.
* Fixed certain polyobject movement combinations that would not stop even
though they were supposed to.
* Did some cleanup for Alpha processors.
1.21 (26 November 1999)
=======================
* Fixed problems with thinkers removing themselves and causing other thinkers
to not get a chance to think.
* Added hud_scale cvar.
1.20 (25 November 1999)
=======================
* Fixed saving, reloading, and then resaving games when travelling between
levels in a hub.
* Fixed saving of ACS scripts scheduled to occur on a future level.
1.19 (24 November 1999)
=======================
* DeHackEd patches that set an actor's death sound to 0 without removing
the A_Scream call no longer crash.
* Fixed sync problems when playing with bullet puffs as particles vs as
sprites.
* Fixed friction when walking on the bottom of swimmable water.
* Added Jeffrey Cuenco's fixes to get -host and -join to work properly.
* Fixed BOOM generalized locked doors so that the open/close type will
actually close.
* Added pointer tracking and cleanup. This should fix the occasional
crashes when saving games and various other anomalies.
1.18b (15 September 1999)
=========================
* Fixed crash when saving games with more than 1024 objects.
* Fixed crash when loading a game without starting a new one first.
* Reduced the size and frequency of pregame network packets, under the
assumption that problems people were having using 1.18 on the Internet
are a result of limited modem bandwidth.
1.18a (12 September 1999)
=========================
* Fixed liquid warping temporarily stopping when changing levels.
* +/-mlook commands do not generate unknown command messages.
* Fixed support for maps with >10 deathmatch starts. Thanks to Roman
Hatsiev.
* Fixed support for the special "maps" EndGame? in MAPINFO lumps.
* Teleport destination (no gravity) now works as intended.
* Hopefully fixed savegame problems.
* Bots are restored from savegames.
* Fixed keyboard turning speed when -dup is used.
* Network commands get executed only once when -dup is used.
* In sectors with damaging floors and swimmable deep water, the damage
will also be applied while the player is swimming and not just when
the player is on the ground.
1.18 (5 September 1999)
=======================
* Replaced the older Cajun 0.71 with Cajun 0.97.
* Fixed handling of status bar faces with skins that provide them.
* Added swimmable water.
* Messages printed to the middle of the screen also print to the console.
* Skill and other server cvars get saved in savegames again.
* Added liquid texture warping.
* Bad MAPINFO lumps generate error messages instead of hanging.
* Realized that it's impossible to guarantee that all object pointers will
be valid without some effort, so FArchive saves DObject objects as NULL
objects now instead of aborting with an error.
* Added the ACS built-in functions localambientsound, activatorsound, and
setlinemonsterblocking.
* Added a thing that does nothing but count toward the number of secrets.
* Added a fly mode.
* Finally implemented the +moveup and +movedown commands.
118test10-source only (14 August 1999)
======================================
* Reimplemented hub travel.
* Optimized R_MapPlane slightly.
* Added fov command.
* Added vertical sub-pixel accuracy to the renderer.
* Added searches for an IWAD in the current directory, $DOOMWADDIR, and
$HOME.
118test9 (9 August 1999)
========================
* Fixed the "wild" bot spinning problem.
* Commands like changemap that could make network games go out of sync
should work properly now. The reason they would do that is closely related
to the reason that the bots would start spinning.
* Finished the serializer. Now savegames work. Hubs don't, because I haven't
written the player travelling code yet.
* Various other code cleanup.
118test8 (20 July 1999)
=======================
* Fixed a crash problem with the "burn" screen wipe.
* Fixed a crash problem with playing non-assigned sound sequences.
* Fixed a crash problem related to trying to shutdown the music subsystem
twice.
* If you try to add more coop bots than there are coop starts, the extra
bot leaves quietly instead of ending the game.
* Weapondrop is now a "server" cvar, which it should have been in the
first place.
* Changed the nodetable file format to be more compact.
* Bots can now be recorded in demos.
* Bots work in multiplayer games. Still buggy. Spawning bots can cause
consistancy failures, and they can start spinning wildly.
118test7 (12 July 1999)
=======================
* Fixed handling of maps with scrolling walls.
* Single player works again. In test6, all games were considered either coop
or deathmatch.
* Disabled the bot thinking code in single player games, so you don't suffer
a performance hitwhen not using bots.
* Added some performance counters accessible through the stat command.
118test6 (10 July 1999)
=======================
* Rewrote the wu line drawer to look better (especially in overlay mode).
* Stretched skies now get stretched horizontally as well as vertically.
* Did an initial integration of the Cajun Bot 0.71 code.
118test5 (6 July 1999)
======================
* Fixed a potential infinite loop that was introduced in 118test1.
* Delayed the initial execution of cvar callbacks.
* Added Heretic's anti-aliased Wu line drawer to the automap.
118test4 (3 July 1999)
======================
* Fixed the "Bad DCanvas::CopyRect" problem introduced in test3.
* Fixed sound sequences that should not be cut off when stopped (such as
the standard doors).
118test3 (2 July 1999)
======================
* Removed unnecessary display mode switches.
* Created a DCanvas class to encapsulate most 2D rendering.
118test2 (1 July 1999)
======================
* Fixed vertical aim clipping (BFG works again).
* Fixed monster wandering.
* Maps with mapthings of type 0 no longer generate warning messages.
* Crushers that do no damage no longer act as if they inflict pain to
actors.
* The alias command lists aliases again.
* Aliases are saved to the config file again.
118test1 (30 June 1999)
=======================
* Tweaked the optimized renderer for fifth-generation processors.
* Added the following specials:
- Line_AlignFloor
- Line_AlignCeiling
- Sector_SetRotation
- Sector_SetCeilingPanning
- Sector_SetFloorPanning
- Secter_SetCeilingScale
- Sector_SetFloorScale
* Added an additional parameter to the Transfer_Heights special.
* Switched to the OpenPTC library for display.
* Converted lots of code to an object-oriented C++ architecture.
1.17c (5 May 1999)
==================
* Fixed game saving crashes on maps with wind/current effects.
* In deep water sectors, the underwater light and fog colors can now be
set independently of the area above water.
* Added nojump, allowjump, nofreelook, and allowfreelook keywords for
use in MAPINFO lumps.
* The random number seed now changes each time you run the program.
1.17b (15 March 1999)
=====================
1.17b contains some minor bug fixes over 1.17 and 1.17a. It also loads
faster because the sprite dimensions are not cached until they are
actually needed. There are also some other internal changes in
preparation for supporting Heretic and Hexen, but those don't affect
the user yet.
1.17a (21 February 1999)
========================
1.17a is mostly minor bug fixes and was released because Herian 2 needed
some of those fixes. There are a few new features, however:
* If you have a skins directory in the same directory as zdoom.exe,
every wad file in it will be automatically loaded when the game starts.
This way, you don't have to load your skins by hand to use them.
* New formatting options for text printed using ACS.
* A code pointer to make monsters fire a railgun.
1.17 (17 February 1999)
=======================
* I'm releasing both DOS and Win32 versions simultaneously. (The DOS version
does not support MIDI/MUS music or a joystick.)
Bug fixes:
* Multiplayer games with monsters do not crash.
* Player corpses do not levitate and then fall down when a player respawns
in multiplayer games.
* Using togglemap outside of a game will not crash.
* Monsters stop attacking their target once it's dead.
* EV_StopPlat() does not get stuck in an infinite loop if there are moving
platforms.
* Partially invisible players are drawn the proper colors (instead of
green) if r_drawfuzz is 0.
* If you are invisible, so are your muzzle flashes.
* Trying to execute a non-existant script will not crash.
* Using a ChangeCamera special from an open script will not crash.
* The FloorAndCeiling_RaiseByValue and FloorAndCeiling_LowerByValues now
behave like Hexen's.
* Using -loadgame from the command line works.
* Fixed a memory leak during generation of the translucency tables.
* In high resolutions, weapon sprites meet the bottom of the screen.
* Sounds will not cut out mysteriously when there is no reason for them to
do so.
* Sounds will also not be stopped immediately when a thing is removed, so
explosion sounds will play to their full length.
* Things can make more than one sound at once.
* The deathmatch scoreboard is aligned properly at high resolutions.
* Spynext and spyprev work properly instead of leaving the status bar
"lagging behind" the player being viewed.
* The light-amp does not disable colored lighting.
* The sky gets inverted when using the invulnerability powerup.
* Implemented better z-checking code (from Heretic/Hexen).
* Pain elementals will spawn one lost soul at a time instead of two inside
of each other.
* Bex patches that use thing mnemonics really do work now, and unknown bit
messages aren't generated for regular DeHackEd patches.
* Linedef type 134 for regular DOOM/BOOM maps requires a red key for
activation (it was being improperly translated to require a blue one).
* Monsters can activate secret lines when they cross them. (See DOOM2/MAP08).
* The player extreme death sound is used.
* When a player leaves a network game, their body is removed instead of
being left empty.
* 0-length sounds are treated as empty sounds instead of sounds 4 gigs long.
* Skins that replaced player sounds with sounds in the IWAD work.
* Muzzle flashes do not light up foggy areas, and fullbright sprites stay
shrouded in fog.
* Alphanumeric keys no longer automatically repeat on the console.
* Wads such as gothicdm2 that used new flats in addition to the ones in the
IWAD with the regular doom.exe work.
New features:
* Significant speed improvements on modern processors.
* Armor and keys are shown on the fullscreen HUD.
* Colored text.
* A playdemo console command.
* A chasecam.
* A particle sytsem.
* An optional railgun to show off the particle system. (Start the game with
-deh railgun.bex if you want to use it.)
New features interesting for wad authors:
* Polyobjects.
* Sound sequences.
* WAVE files can be used as sound lumps without converting them to DMX's
format first.
* A sky can be specified to not be stretched even if it is shorter than 200
pixels.
* Sparks.
* Particle fountains.
* Parallax skies.
* Some new DeHackEd thing flags from Hexen (bobbing, reflective, etc.).
1.16 (22 December 1998)
=======================
Bug fixes:
* No more limit on size of savegames or demos.
* Screen resolutions above 320x200 are now the proper brightness (they were
too bright before.)
* Improved the brightness of the console font.
* Bullet puffs can show up on the floor and ceiling and not just walls.
* Missile weapons can trigger gun activation lines.
* Barrels now bounce around as much as they did in original DOOM. (They were
too "inert" in 1.14.)
* If a demo is being recorded, quitting the game normally will save the demo
to disk. (Previously, you had to use the stop command to do this.)
New features for players:
* Proper support for BOOM maps.
* Mouse wheel support and weapnext/weapprev commands.
* Doublebindings.
* Better analog joystick support.
* 180 degree turn command for keyboarders.
* Damage done by a rocket to its shooter is configurable and defaults to the
original Doom behavior.
* User-configurable gender. (Even though I don't have any new player sounds,
at least the obituaries are gender-aware. :-)
* Teamplay mode.
* New cvar to disable manual aiming of the BFG to prevent someone from
shooting it at the floor and quickly triggering tracer damage before.
* Maps no longer need to have as many deathmatch starts as there are players
in a deathmatch game.
* Support for Doom Legacy skins.
* Rewrote the MIDI/MUS code so that it has a working volume control.
* Many more console commands and cvars.
New features for editors:
* Proper support for BOOM maps.
* Obituaries are configurable with a .bex patch.
* Moster paths
* Colored lighting
* Fog can be applied to only part of a level instead of all of it.
* Per-sector gravity settings.
* Support for up to 256 ambient sounds (as opposed to the limit of 64 in
earlier versions).
* Sector damage adjustable from between 0-255 points of damage.
* Changable camera views.
* The following editing features that were introduced in Hexen are also
available in ZDoom:
- Most line specials take arguments that modify their behavior.
- ACS scripting.
- Hubs.
- Earthquakes.
- Dormant monsters.
- Trigger events to happen on monster deaths.
- "Waggling" floors.
- Pillar builders.
- Push activation lines (walking into a wall can trigger an event).
- Thing spawning (e.g. for traps/gifts).
1.14a (27 July 1998)
====================
Bugs fixed are:
* No more crashing about freeing a pointer without ZONEID when changing
levels.
* Skies wider than 256 pixels are drawn correctly.
* Monsters' heights are once again the same as they were in id's original
DOOM, so certain areas work properly again.
* Monsters shouldn't teleport into each other anymore.
* Improved support for international keyboards.
* The skill level chosen for a new game is no longer ignored if the new
game is started while a demo is playing.
Cosmetic changes:
* No more "sv_gravity changed to...", "skill changed to...", etc. messages
in single player games.
* Activating the player setup menu automatically stops any playing demos,
since it doesn't work properly while they play.
* Barrels don't go flying away when exploding anymore.
* Added def_patch cvar to automatically load a DeHackEd patch each time the
game is started.
* ZDoom save games now use the name zdoomsv?.dsg instead of doomsav?.dsg.
This version also includes some preliminary BOOM support as I started
integrating some of the BOOM source code with ZDoom:
* Medusa fix.
* Openings limit removed.
* Removed limit on switches and animations.
* Added support for BOOM-like ANIMATED and SWITCHES lumps in PWADs.
* Added support for BOOM-style scrollers (including conveyors).
* Added partial deep-water support.
1.14 (14 July 1998)
===================
Bugs fixed:
* The bunny scroller at the end of E3M8 no longer crashes the game.
* The IDKFA cheat gives the proper amount of armor again.
* Demo recording works again.
* Telefragging works again.
* Picking up the invulnerability sphere displays the correct colors now.
* DeHackEd patches containing text replacements no longer crash the game.
* Printing a string containing "%s" to the console and then changing the
video mode will no longer crash the game.
* Chat mode finally works again.
* If MIDAS can't initialize, you can still play the game but without sound.
* Pistol and chaingun sounds no longer cut out when there are lots of
zombie men shooting their pistols at you.
* Mouse input should no longer be so jerky under Windows NT.
* The crosshair is finally accurate for aiming.
* Autoaim is properly remembered each time you start ZDoom.
* Switches in the Ultimate Doom that aren't also in the shareware Doom
properly change their appearance when switched.
New features:
* Players can choose their own colors and names.
(Player setup menu is included).
* 8-player support (untested but should work).
* Miscellaneous internal code changes have been borrowed from the BOOM
source. (This does *not* mean that ZDoom supports BOOM levels yet.)
* Cheats, chat messages, and gamestate changes are now recorded in demos.
* Single-player demos recorded with ZDoom are generally smaller than
before.
* Quake 2-style deathmatch flags.
* Cheats (optionally) work in multiplayer games.
* Mode X is now supported under Win95, so all the machines that couldn't
run ZDoom in 320x200 before should be able to now.
* Fewer conditions result in error messages that quit the game. (If you
have Heretic, try this: Start ZDoom with -file heretic and go to the
console and type "MAP E1M1".)
* Keys can repeat in the console.
* The console and chat mode now use the localized keymap set with the
Keyboard control panel.
* Messages at the top of the screen now break along between words instead
of in the middle of them.
* Added -config command line parameter.
* Added -fastdemo command line parameter.
* Added new screen shot command. (bound to "Print Screen" key by default)
* Added Quake-like +showscores command. (bound to "\" key by default)
* Aliases are now saved in the config file.
* Added support for multiple pitched sounds like in very old version of
Doom. (Use the snd_pitched cvar to turn it on and off.)
1.13 (26 May 1998)
==================
* Fixed some major bugs (that crashed the game) and other lesser bugs that were
just annoying.
* 3-D collisions for walking under and standing on other things.
* The status bar can be scaled to the full width of the screen.
* The screen mode can be selected from a menu inside the game.
* ZDoom can run in a window on the desktop.
* Better DeHackEd support. Only a few text replacements are not supported.
Everything else works (including monster infighting which I haven't seen
in any other port).
* New features for level designers (see editing.txt for details):
Specification of next and secret maps on a per-map basis.
Specify sky texture on a per-map basis.
Use any lump in a wad as music for a map.
Give maps a custom name without using a DeHackEd patch.
Maps can be named anything (not just E?M? or MAP??).
Place any messages of any length between any two maps.
Hexen-style fog (of any color).
Ambient sounds--either point like Quake or global like Heretic and Hexen.
Automatic use of DeHackEd patches in PWADs.
No more tutti-frutti for short textures of certain heights.
zdoom.wcf file for use with WadAuthor.
* Rocket jumping. (One very important note about this: You need to be *in the
air* when your rocket explodes for rocket jumping to work. This is different
from Quake, and I will probably rewrite it for the next release.)
* Dynamic palette flashes.
* Supports stretching skies for freelook.
* Larger freelook range.
* Added tab-completion to the console.
* zdoom.cfg is now the name of the default configuration file since Doom
Legacy decided to start using config.cfg.
* French language support. (Set language cvar to "french".)
* Player obituaries.
* Unlimited ammo cheat (use g_unlimitedammo cvar).
1.12 (7 April 1998)
===================
* Some visual enhancements were made such as centering the menus and
drawing borders around the status bar in higher resolutions.
* Console commands can now be specified on the command line.
* Removed some of DOOM's limits such as VisPlanes, VisSprites, and 2S
HOM.
* Rewrote some of the inner loops in assembly. (There was some assembly
in 1.11, but it never got used.)
* New cvars relating to mouse movement. (invertmouse, m_pitch, m_yaw,
etc.)
* Mouse movement doesn't get sluggish in high resolutions.
* Automap colors are customizable.
* Automap overlay and rotation are available.
* Eight crosshairs.
* Shoot up/down.
* Alt-Tab and Pause work properly on all machines now.
* The +jump command now works.
* 25% and 75% translucency levels in addition to 50%. The translucency
tables now get saved to disk, too, so they only need to be calculated
once instead of every time the game is run.
* The console font is now editable.
* Near complete support for DeHackEd patches. (Only monster infighting
and changing a few minor text strings are not supported.)
* Sky height and position is now fixed for high resolutions. (It still
wraps if you look up, but at least now if you look straight ahead, it
never will.)
* Weapon sprite is always drawn at the correct location. (It was being
drawn too low in some resolutions like 400x300.)
* New options menu, which includes a key configuration screen.
* "Stealth" monsters.
* New full-screen HUD.
* And a few other things not worth mentioning separately.
1.11 (6 March 1998) Initial Release
===================================
* Works under both Windows 95 and NT 4.0, although it works best under
Win95.
* Limited support for the Pause key. It works with some keyboards on
some machines.
* Supports any resolution compatible with your DirectDraw drivers.
* Look up/down ala Heretic.
* Translucency for selected objects.
* Has a console with most of the functionality of Quake's. The only
significant missing feature is Tab-completion.
* Notarget cheat.
* Command to kill all monsters in a level or yourself.
* Can play MUS, MIDI, and MOD music.
* Selected sounds are played in surround sound.
* Doors that need keys to open are highlighted on the automap.
* Automap now shows various statistics in addition to the level name.
* True keybindings. Bind any key to any command or sequence of
commands.
* Intermission screen can now display your stats using absolute values
rather than percentages.
* A new more general demo format.

22
docs/notes.txt Normal file
View file

@ -0,0 +1,22 @@
For cygwin, using the PSDK headers:
#define _STDCALL_SUPPORTED, _M_IX86, _inline=__inline__
-Wno-unknown-pragmas
But then there is all the __asm, which won't work with GCC. :-(
---Hexen---
Pig (not player) needs MF3_SEEISALSOACTIVE and activesound "PigActive2"
MT_WRAITHB, MT_SERPENT, MT_SERPENTLEADER, and MT_MINOTAUR need MF3_STAYMORPHED
MT_LEAF1, MT_LEAF2, MT_SPLASH and MT_SLUDGECHUNK need MF3_DONTSPLASH
MT_CENTAUR_FX is launched at z+45*FRACUNIT
MT_ICEGUY_FX is launched at z+40*FRACUNIT
MT_HOLY_MISSILE is launched at z+40*FRACUNIT
MT_ICEGUY_FX2 is launched at z+3*FRACUNIT
MT_MSTAFF_FX2 is launched at z+40*FRACUNIT
MT_LIGHTNING_FLOOR is launched at ONFLOORZ
MT_LIGHTNING_CEILING is launched at ONCEILINGZ
MT_MWAND_MISSILE and MT_CFLAME_MISSILE need MF3_VERYFAST
Anything with MF2_BOSS also needs MF3_IGNOREMATTACKS

11792
docs/rh-log.txt Normal file

File diff suppressed because it is too large Load diff

597
docs/thingdef_doc.txt Normal file
View file

@ -0,0 +1,597 @@
Examples for actor definitions
------------------------------
1) a complete definition from scratch:
ACTOR ZombieMan 3004
{
Health 20
Radius 20
Height 56
Speed 8
PainChance 200
MONSTER
+FLOORCLIP
SeeSound grunt/sight
AttackSound grunt/attack
PainSound grunt/pain
DeathSound grunt/death
ActiveSound grunt/active
Obituary "%o was killed by a zombieman."
DropItem Clip
Damage 4
States
{
Spawn:
POSS AB 10 A_Look
Loop
See:
POSS AABBCCDD 4 A_Chase
Loop
Missile:
POSS E 10 A_FaceTarget
POSS F 8 A_BulletAttack
POSS E 8
Goto See
Pain:
POSS G 3
POSS G 3 A_Pain
Goto See
Death:
POSS H 5
POSS I 5 A_Scream
POSS J 5 A_Fall
POSS K 5
POSS L -1
Stop
XDeath:
POSS M 5
POSS N 5 A_XScream
POSS O 5 A_Fall
POSS PQRST 5
POSS U -1
Stop
Raise:
POSS KJIH 5
Goto See
}
}
2) an actor which inherits from an existing one:
ACTOR PlasmaZombie : ZombieMan 9600
{
Health 40
DropItem Cell
MissileType PlasmaBall
States
{
Missile:
POSS E 10 A_FaceTarget
POSS F 5 A_MissileAttack
POSS E 5 A_FaceTarget
POSS F 5 A_MissileAttack
POSS E 5 A_FaceTarget
POSS F 5 A_MissileAttack
Goto See
}
}
(this is a zombie which fires 3 plasma bullets when attacking)
3) an actor which uses SKIP_SUPER
ACTOR DeadZombieMan : ZombieMan 18
{
SKIP_SUPER
Spawn Parent Death+4
}
(this actor doesn't inherit anything from its parent - it just uses
some of its states.)
Syntax:
-------
ACTOR classname [ : parentclassname] [doomednum]
{
properties
flags
...
}
classname: The name this new actor is referenced by in the game
parentclassname: (optional) The name of a parent class this new actor
inherits its attributes from.
doomednum: Editor number for this actor (optional)
List of properties:
===================
SKIP_SUPER reinitializes the actor as if it has no parent
This can be used to have access to the parent's
states without inheriting its attributes. See
3) above for an example.
SPAWNID value defines the spawn ID to be used with Thing_Spawn
and its derivates.
HEALTH value defines the health a monster starts with
Default is 1000
REACTIONTIME value Time in tics (1/35 seconds) a monster needs
to attack back. There is normally no need to
change this value.
Default is 8
PAINCHANCE value Probability of entering the pain state.
255=always, 0=never
Default is 0
DAMAGE value For a projectile defines the damage it inflicts
upon impact. The formula is random(1,8)*damage
or (random(1,4)*damage if STRIFEDAMAGE is set.
This also defines the damage for actors which
attack like the Lost Soul. The formula for this
is random(1,8)*damage.
DAMAGE is also used to define how many bullets
are fired by the generic hitscan attack function
A_Bulletattack.
Default is 0
SPEED value Defines how fast an actor moves. For projectiles
this is the distance it moves. For monsters it
defines the size of one step done in A_Chase.
Default is 0.
RADIUS value Defines the radius of this actor.
Default is 20.
HEIGHT value Defines the height of this actor
Default is 16.
MASS value Defines the mass of this actor.
The larger the mass the less an actor moves when
being thrust by damage.
Default is 100.
XSCALE value Defines the X-scaling for this actor.
Range is [0.0, 4.0].
Default is 1.0
YSCALE value Defines the Y-scaling for this actor.
Range is [0.0, 4.0].
Default is 1.0
SCALE value Combines XScale and YScale
Range is [0.0, 4.0].
Default is 1.0
SEESOUND name Defines the sound the actor makes when it sees
the player (for monsters) or when a projectile
is spawned.
ATTACKSOUND name Defines the sound the actor makes when attacking.
PAINSOUND name Defines the sound the actor makes when in pain.
To hear this sound A_Pain has to be called.
DEATHSOUND name Defines the sound the actor makes when dying
or when a projectile explodes.
ACTIVESOUND name Defines the sound the actor makes when active.
MELEESOUND name Defines the sound the actor makes when doing
a melee attack in A_MeleeAttack. Note that
several original attack functions which have
such a sound use a hard coded reference (e.g.
A_TroopAttack uses imp/melee)
RENDERSTYLE type Defines how this actor is rendered. Useful values are:
NONE - actor is invisible
NORMAL - actor is visible and not translucent
FUZZY - like the Spectre in Doom
TRANSLUCENT - actor is translucent.
ADD - actor uses additive translucency.
Default is NORMAL
ALPHA value defines the opacity/intensity for render styles
TRANSLUCENT and ADD.
Range is [0.0, 1.0]
Default is 1.0
DEATHHEIGHT value Defines the height this actor has after dying.
Default is 1/4 of the original height
BURNHEIGHT value Defines the height this actor has after dying by fire.
Default is 1/4 of the original height
*OBITUARY string Defines the obituary string for this actor. This string
uses a few placeholders:
%o: victim's name
%k: killer's name
%g: he/she/it
%h: him/her/it
%p: his/her/its
*HITOBITUARY string Defines the obituary string for a melee attack by this
actor. If not present OBITUARY is used. The same format
as for OBITUARY appplies.
*DONTHURTSHOOTER If this actor deals explosive damage and is a projectile
it does not hurt the shooter.
*EXPLOSIONRADIUS value Defines the radius of explosive damage
Default is 128
*EXPLOSIONDAMAGE value Defines the amount of explosive damage
Default is 128
MELEEDAMAGE value Defines the amount of damage this monste will inflict
when using A_MeleeAttack. The formula is random(1,8)*damage.
MISSILETYPE name Defines the projectile type this monster is firing when
using A_MissileAttack. Any valid projectile present in the
game can be specified.
MISSILEHEIGHT value Defines the height at which the projectile is spawned.
Default is 32.
MONSTER Sets all appropriate flags to make this actor act as a regular
monster. The following flags are being set:
SHOOTABLE, COUNTKILL, SOLID, CANPUSHWALLS, ACTIVATEMCROSS, CANPASS, ISMONSTER.
PROJECTILE Sets all appropriate flags to make this actor act as a regular
projectile. The following flags are being set:
NOBLOCKMAP, NOGRAVITY, DROPOFF, MISSILE, ACTIVATEIMPACT, ACTIVATEPCROSS, NOTELEPORT.
CLEARFLAGS clears all flags
*DROPITEM name [probability [amount]]
Drops an item of type 'name' when dying. Optionally the probability
can be specified. A probability of 255 means the item is always dropped,
a probability of 0 means it is never dropped.
amount is only applicable for Heretic ammuniton. It specifies how much
ammo the dropped item contains.
There can be more than one DROPITEM definitions for an actor. The
amount is unlimited.
DROPITEM works differently with inherited actors. An actor can inherit
a list of DROPITEM definitions from its parent but if it defines one
of its own the entire parent's list is discarded.
SPAWN
SEE
MELEE
MISSILE
PAIN
DEATH
XDEATH
BURN
ICE
RAISE
CRASH With these keywords a specific state in the actor can be either cleared
or set to one of the parent's states. The syntax is:
SPAWN 0 to clear a state or
SPAWN PARENT DEATH[+offset] to set a parent's state. See 3) above for an
example
STATES Defines an actor's states. See the separate block STATES for more information
Properties prefixed with a '*' cannot be inherited from predefined actors due to the
implementation.
List of flags
=============
Flags are special properties that can be either set or cleared
+flagname sets a flag
-flagname clears a flag
The following flags exist. If applicable the name is identical with the one used
in regular DECORATE items.
SOLID set when the object should be solid (blocking)
SHOOTABLE object can be damaged. If health goes below 0 it dies
NOSECTOR Object is not linked into the sector. This makes it invisible
and excludes it from certain physics checks.
NOBLOCKMAP This object is excluded from passive collision detection. Nothing else
can run into a NOBLOCKMAP object but the object itself can run
into others. All projectiles have this set.
AMBUSH Monster is 'deaf'. Normally this is set in an editor on a per-
object basis.
JUSTHIT try to attack right back (used in monster AI, probably not
particularly useful in actor definitions)
JUSTATTACKED take at least one step before attacking
SPAWNCEILING spawned hanging from the ceiling as opposed to standing on the
floor.
NOGRAVITY Actor is not subject to gravity
DROPOFF Monster can walk over ledges/taller steps.
NOCLIP Actor is totally excluded from collision detection and
can walk through walls etc.
FLOAT Floating monster - can change height at will.
TELEPORT Although implemented there isn't a single actor which
uses this flag. I can't say what it does precisely but
it excludes an actor that has it set from certain parts
of the collision detection logic.
MISSILE Actor is a projectile.
SHADOW Actor is nearly invisible. Unlike regular Doom this does
not automatically imply fuzziness. For that you have to
specify RenderStyle Fuzzy.
NOBLOOD Actor does not bleed when hurt.
CORPSE Actor is a corpse. For normal actors there is no need to
set this but in combination with the crashstate it might
be useful.
COUNTKILL Counts toward kill percentage
COUNTITEM Counts toward item percentage
NOTDMATCH Is not being spawned in Deathmatch games.
NOLIFTDROP Does not drop when a lift under it lowers
STEALTH Stealth monster
ICECORPSE Actor is a frozen corpse
LOWGRAVITY Actor is subject to low gravity
WINDTHRUST Actor is thrust by the Heretic wind specials. I hope its
functionality is some day expanded to the Boom wind specials
HERETICBOUNCE Heretic style bouncing (objects only bounce off the floor)
HEXENBOUNCE Hexen style bouncing (objects bounce off floors and walls)
DOOMBOUNCE ZDoom style bouncing (like hexen but stops when losing a certain
amount of momentum)
The 3 bounce types are mutually exclusive
FLOORCLIP Actor's lower part is clipped when standing in a sector
with a liquid texture (defined in the TERRAIN lump)
SPAWNFLOAT Actor is spawned hat a random height in the sector.
NOTELEPORT Actor cannot teleport
RIPPER For projectiles that can rip through monsters and players.
PUSHABLE Actor can be pushed.
SLIDESONWALLS Actor can slide along walls
CANPASS Actor uses height sensitive collision detection. Use with care!
This only makes sense on actors that can move by themselves.
CANNOTPUSH This actor cannot push pushable objects.
THRUGHOST This actor passes through ghosts (set with the GHOST flag.)
BOSS Actor is a boss. Bosses have a few special properties
(like playing some sounds at full volume.)
FIREDAMAGE Actor inflicts fire damage.
ICEDAMAGE Actor inflicts ice damage.
NODAMAGETHRUST Upon hitting another actor the victim is not thrust when damaged.
TELESTOMP This actor can telefrag others.
FLOATBOB use float bobbing z movement like Heretic/Hexen's powerups
ACTIVATEIMPACT Upon hitting a wall this actor can activate G1/GR lines
CANPUSHWALLS Upon hitting a wall this actor can activate P1/PR lines
ACTIVATEMCROSS This actor can activate 'Monster crosses' lines.
ACTIVATEPCROSS This actor can activate 'Projectile crosses' lines.
CANTLEAVEFLOORPIC This actor cannot cross into a sector with a different floor
texture.
NONSHOOTABLE Actor cannot be hit (projectiles pass through.)
INVULNERABLE Actor cannot be hurt.
DORMANT Actor is dormant and has to be activated with Thing_Activate.
SEEKERMISSILE Actor is a homing missile. This is only used as a hint to the
game. For a homing missile to be effective it has to use
one of the seeker missile code pointers in its moving states.
REFLECTIVE Actor reflects missiles shot at it.
FLOORHUGGER defines a projectile that is moving along the floor.
CEILINGHUGGER defines a projectile that is moving along the ceiling.
NORADIUSDMG Actor cannot be hurt by radius (explosive) damage.
GHOST Actor is a ghost. This does not imply translucency etc.
DONTSPLASH Actor does not create any terrain splashes
DONTOVERLAP Two actors with this flag cannot overlap at the same x/y-position
but different heights
DONTMORPH Cannot be morphed into a chicken or pig.
DONTSQUASH This actor cannot be instantly killed by Heretic's powered up Mace.
FULLVOLACTIVE Plays its active sound at full volume
ISMONSTER Actor is a monster
SKYEXPLODE Projectile explodes when hitting a sky instead of vanishing
STAYMORPHED If morphed this actor cannot revert to its original form.
DONTBLAST Cannot be blasted by Hexen's Disc of Repulsion.
CANBLAST Can be blasted by Hexen's Disc of Repulsion. For monsters this is
implicit.
NOTARGET cannot be targeted by other monsters.
DONTGIB cannot be crushed to a pile of blood.
NOBLOCKMONST can walk through monster blocking lines.
FULLVOLDEATH Plays its death sound at full volume
CANBOUNCEWATER Can bounce on water. Normally an object is destroyed in this case.
NOWALLBOUNCESND Does not play a sound when bouncing off a wall. Normally the
Seesound is played in this case.
FOILINVUL Can hurt invulnerable monsters (but not players.)
NOTELEOTHER Cannot be teleported by Hexen's banishment device.
QUICKTORETALIATE Immediately switches targets when being attacked.
NOICEDEATH Monster cannot be frozen, used to prevent the generic ice death.
RANDOMIZE Randomizes the duration for its first frame. Most of Doom's projectiles
use this.
FIXMAPTHINGPOS Move thing out of walls. For torches and similar things that tend to be
placed directly on a wall.
ACTLIKEBRIDGE Uses the special collision logic for bridge things.
STRIFEDAMAGE Strife uses a different damage calculation for its projectiles.
States (a.k.a. Frames)
======================
States define the behavior of an actor. For any regular actor there are the following
labels:
SPAWN defines the state that is displayed when an actor is spawned
For monsters this is normally also the idle loop.
SEE defines the walking animation for a monster.
MELEE defines the melee (near) attack.
MISSILE defines the missile (far) attack.
PAIN defines the pain action
DEATH defines the normal death sequence
XDEATH defines the extreme (splatter) death sequence
BURN defines the burn (fire) death sequence
ICE defines the freeze (ice) death sequence
RAISE defines the resurrection sequence (for the Arch Vile)
CRASH defines the crash sequence. This is entered when the actor
is a corpse and hits the floor.
A state definition is started with the 'STATES' keyword and enclosed
by braces '{', '}'.
A state definition consists of the following:
1) State labels. This is one of the keywords listed above followed by a ':'.
Example
Spawn:
defines the entry point for the spawn state.
2) State definitions. These consist of a sprite name, a frame sequence,
the duration in tics (1/35 seconds) and optionally the 'BRIGHT'
keyword to indicate a fullbright display and an action function name
(code pointer)
Example
POSS AABBCCDD 4 A_Chase
This defines 8 states. Each one of them uses the sprite POSS, has a duration
of 4 and uses the code pointer A_Chase which is the standard walk function
for monsters. Of these 8 states the first 2 will use the sprite frame 'A',
the next 2 the frame 'B' and so on. The length of theframe sequence can be
up to 256 characters. Valid frames are 'A'-'Z', '[', '\' and ']'.
Different sprites can be freely mixed in an actor definition each separate
state definition is limited to one sprite only.
3) Jump instructions
There are 4 different jump instructions:
-Loop jumps to the most recently defined state label. This is
used for a looping animation
-Stop Stops animating this actor. Normally this is used at the
end of the death sequences.
-Wait Loops the last defined state. This is only useful if a
code pointer is used that waits a given time or for a
certain event. Currently the only usable code pointer
for this is A_FreezeDeathChunks which is normally used
at the end of a freeze death sequence.
-Goto label+offset
Jumps to an arbitrary state in the current actor.
With this you can also jump to a state that was
inherited by a parent. See Example 2) above for this
The 'Goto see' jumps to the walking animation that
has been inherited.
Important note:
---------------
This format has been designed for maximum flexibility. As a result no assumptions
are made what the designer wants. No states are ever implicitly created.
Action functions:
=================
This information is kept rather brief. For normal purposes in-depth information
is not necessary. All action functions names are preceded by 'A_'.
A_BFGSpray Starts the effect when a BFG projectile hits something
A_Pain Plays the pain sound (that's all it does, it can also be used outside the pain sequence!)
A_NoBlocking Sets the actor to non-blocking and drops items.
A_XScream Plays the sound 'misc/gibbed'
A_Look Look for players - used in the idle sequence of monsters
A_Chase Standard walking function - used in the walk sequence of monsters
A_FaceTarget Change angle to face target
A_PosAttack Zombie attack (one bullet)
A_Scream Plays the death sound (that's all it does, it can also be used outside the death sequence!)
A_SPosAttack Shotgunner attack (3 bullets)
A_VileChase Arch Vile: look for corpses and walk.
A_VileStart Plays sound 'vile/start'
A_VileTarget Spawns the Arch Vile fire.
A_VileAttack Arch Vile attack function. Inflicts some damage and thrusts victim in the air.
A_Fire Keeps Arch Vile's fire in front of target
A_StartFire Plays sound 'vile/firestrt' and calls A_Fire
A_FireCrackle Plays sound 'vile/firecrkl' and calls A_Fire
A_Tracer Homing routine for Revenant's missile
A_SkelWhoosh Calls A_FaceTarget and plays sound 'skeleton/swing'.
A_SkelFist Revenant's melee attack.
A_SkelMissile Revenant's missile attack
A_FatRaise Calls A_FaceTarget and plays sound 'fatso/raiseguns'.
A_FatAttack1 Mancubus attack 1
A_FatAttack2 Mancubus attack 2
A_FatAttack3 Mancubus attack 3
A_BossDeath Boss death specials. Has no effect for custom monsters
A_CPosAttack Chaingunner attack
A_CPosRefire Chaingunner refiring
A_TroopAttack Imp attack
A_SargAttack Demon attack
A_HeadAttack Cacodemon attack
A_BruisAttack Baron attack
A_SkullAttack Lost Soul attack
A_Metal Plays 'spider/metal' and calls A_Chase
A_SpidRefire Spider refiring
A_BabyMetal Plays 'baby/walk' and calls A_Chase
A_BspiAttack Arachnotron attack
A_Hoof Plays 'cyber/hoof' and calls A_Chase
A_CyberAttack Cyberdemon attack
A_PainAttack Pain Elemental attack
A_PainDie Pain Elemental death
A_KeenDie Keen death - opens door with tag 666 if all monsters of the calling kind are dead.
A_BrainPain Plays 'brain/pain' at full volume.
A_BrainScream Starts brain explosion
A_BrainDie Ends level if not in deathmatch
A_BrainAwake Plays 'brain/sight' at full volume.
A_BrainSpit Spits one brain cube
A_SpawnFly Brain cube handling incl. monster creation
A_SpawnSound plays 'brain/cube' and calls A_SpawnFly
A_BrainExplode Brain explosion
A_Die Kills actor
A_Detonate Inflicts explosive damage - amount specified by DAMAGE in the actor
A_Mushroom Shoots a lot of mancubus fireballs high in the air
A_SetFloorClip Sets the FLOORCLIP flag
A_UnSetFloorClip Clears the FLOORCLIP flag
A_HideThing Makes actor invisible
A_UnHideThing Makes actor visible
A_SetInvulnerable Makes actor invulnerable
A_UnSetInvulnerable Makes actor vulnerable
A_SetReflective Sets the REFLECTIVE flag
A_UnSetReflective Clears the REFLECTIVE flag
A_SetReflectiveInvulnerable A_SetInvulnerable + A_SetReflective
A_UnSetReflectiveInvulnerable A_UnSetInvulnerable + A_UnSetReflective
A_SetShootable Makes actor shootable
A_UnSetShootable Makes actor non shootable
A_NoGravity makes Actor not subject to gravity
A_Gravity makes Actor subject to gravity
A_LowGravity makes Actor subject to low gravity
A_ScreamAndUnblock combines A_Scream and A_NoBlocking
A_ActiveSound plays actor's active sound
A_ActiveAndUnblock combines A_ActiveSound and A_NoBlocking
A_FastChase A_Chase variation used by Hexen's class bosses
A_FreezeDeath Starts the freeze death sequence.
A_GenericFreezeDeath Starts the generic freeze death sequence. Calls A_FreezeDeath and sets the ice palette translation.
A_FreezeDeathChunks Burst the actor into chunks. The state with this function has to be looped because it waits until all movement has stopped.
A_IceGuyDie Stops all movement and bursts the actor into ice chunks immediately.
The following functions use some actor properties to determine their behavior
-----------------------------------------------------------------------------
A_Explode Inflicts explosive damage.
Uses:
ExplosionDamage Amount of damage being inflicted
ExplosionRadius Radius of damage
DontHurtShooter If a projectile, don't hurt the guy who shot it.
A_MeleeAttack performs a melee attack
Uses:
MeleeDamage Amount of damage, The formula is random(1,8)*MeleeDamage
MeleeSound Sound being played if the actual attack happens.
A_MissileAttack launches a missile
Uses:
MissileName Actor name of the missile being launched
MissileHeight Height above floor for the spawned missile
A_MissileAttack can handle homing missiles as long as the missile
has the SEEKERMISSILE flag set and contains some kind of tracer
code pointer (A_Tracer, A_MummyFX1Seek, etc.) In its moving animation.
A_ComboAttack combines A_MeleeAttack and A_MissileAttack depending on the current
distance to the target.
A_BulletAttack Hitscan attack
Uses:
damage amount of bullets being fired
The following functions use direct parameters:
----------------------------------------------
A_PlaySound ("soundname") Plays the sound soundname
A_PlayWeaponSound ("soundname") Plays the sound soundname on the weapon channel
Sounds played with A_PlaySound and A_PlayWeaponSound
can occur simultaneously.
A_SeekerMissile (threshold, maxturnangle)
Seeker missile handling. threshold and maxturnangle determine
how 'aggressive' the missile will home in on its target. The larger
the values the more precise it is. threshold specifies the angle
inside which the missile will home in directly on its target.
If the angle toward the target is larger than threshold it will
change its movement angle only partially towards the target.
maxturnangle is the maximum change of movement direction that
will be performed in one move. Maxturnangle should be larger
than threshold. Both angles are specified in degrees and must be
in the range [0, 90].
Example: The flaming skull of Heretic's mummy uses an equivalent
of A_SeekerMisile 20 30
A_Jump (chance, distance) Randomly advances to different state. Like painchance, the chance
value can range between 0 and 255. A chance of 0 will never advance,
while a chance of 255 will almost always advance. If the state is
not advanced, then the one immediately following the A_Jump will
be used as if A_Jump had not been present.
A_CustomMissile ("missiletype", spawnheight, spawnofs_xy, angle)
Spawns a missile attack where "missiletype" is the type of missile
to shoot, spawnheight is how high from the monster's feet to shoot
the missile, spawnofs_xy is how far the monster's center to shoot
the missile, and angle is the direction relative to the monster's
facing angle in which to shoot the missile.

1134
docs/zdoom.txt Normal file

File diff suppressed because it is too large Load diff