From 93e4bc02a0166862f34c7bfd3cae55c5494ef10b Mon Sep 17 00:00:00 2001 From: proff_fs Date: Sun, 9 Apr 2000 17:50:31 +0000 Subject: [PATCH] Initial revision --- .gitattributes | 19 + prboom/BIN2C.DSP | 87 + prboom/BMP2C.DSP | 87 + prboom/COPYING | 339 +++ prboom/ICONS/BARREL.ICO | Bin 0 -> 1923 bytes prboom/ICONS/FOUCH.ICO | Bin 0 -> 2238 bytes prboom/ICONS/GOD.ICO | Bin 0 -> 2238 bytes prboom/ICONS/Heada1.ico | Bin 0 -> 1895 bytes prboom/ICONS/ICONS.APS | Bin 0 -> 9103 bytes prboom/ICONS/ICONS.RC | 76 + prboom/ICONS/RESOURCE.H | 20 + prboom/ICONS/SKULL.ICO | Bin 0 -> 2238 bytes prboom/LUMPS/GRAPHICS/COLCHIP.BMP | Bin 0 -> 1186 bytes prboom/LUMPS/GRAPHICS/CURCHIP.BMP | Bin 0 -> 1186 bytes prboom/LUMPS/GRAPHICS/DOOM.ACT | Bin 0 -> 768 bytes prboom/LUMPS/GRAPHICS/PRBOOM.PSD | Bin 0 -> 2326 bytes prboom/LUMPS/GRAPHICS/Prboom.bmp | Bin 0 -> 2460 bytes prboom/LUMPS/GRAPHICS/VRFYBOX.BMP | 1 + prboom/LUMPS/TEST.RES | 12 + prboom/LUMPS/TEST.SGN | 5 + prboom/LUMPS/TEST.WAD | Bin 0 -> 8315 bytes prboom/LUMPS/TEST/HISTORY/HISTORY.TXT | 1 + prboom/LUMPS/TEST/LUMPS/CDATA.C | 121 + prboom/LUMPS/TEST/LUMPS/COLCHIP.LMP | Bin 0 -> 170 bytes prboom/LUMPS/TEST/LUMPS/CURCHIP.LMP | Bin 0 -> 149 bytes prboom/LUMPS/TEST/LUMPS/PRBOOM.LMP | Bin 0 -> 1860 bytes prboom/LUMPS/TEST/LUMPS/Prboom.bmp | Bin 0 -> 2460 bytes prboom/LUMPS/TEST/LUMPS/TEST.C | 79 + prboom/LUMPS/TEST/LUMPS/TEST2.C | 0 prboom/LUMPS/TEST/LUMPS/VRFYBOX.LMP | Bin 0 -> 5992 bytes prboom/LUMPS/TEST/TEST.DEF | 305 ++ prboom/LUMPS/TEST/TEST.RES | 29 + prboom/LUMPS/TEST/TEST.WAD | Bin 0 -> 8315 bytes prboom/MAKFILES/MAKEFILE.C32 | 619 +++++ prboom/MAKFILES/MAKEFILE.DOS | 620 +++++ prboom/MAKFILES/MAKEFILE.M32 | 626 +++++ prboom/MISC/COMMON.CFG | 592 ++++ prboom/MISC/DEFSWANI.DAT | 85 + prboom/MISC/DOOM17.DAT | 490 ++++ prboom/MISC/DOOM19.DAT | 480 ++++ prboom/PRBOOM.DSP | 1144 ++++++++ prboom/PRBOOM.DSW | 53 + prboom/PRBSTUFF/DEH2BEX.BAT | 1 + prboom/PRBSTUFF/DEH2BEX.PL | 20 + prboom/PRBSTUFF/PRBOOM.INF | 61 + prboom/TXTS/BOOM/BOOMDEH.TXT | 2392 ++++++++++++++++ prboom/TXTS/BOOM/BOOMSRC.TXT | 325 +++ prboom/TXTS/BOOM/LOG_JFF.TXT | 1469 ++++++++++ prboom/TXTS/BOOM/LOG_LEE.TXT | 3706 +++++++++++++++++++++++++ prboom/TXTS/BOOM/LOG_RSP.TXT | 1217 ++++++++ prboom/TXTS/BOOM/LOG_TY.TXT | 365 +++ prboom/TXTS/BOOM/SNDDRVR.TXT | 208 ++ prboom/TXTS/COMPILE.TXT | 58 + prboom/TXTS/COPYING | 339 +++ prboom/TXTS/DOOM/ChangeLog | 922 ++++++ prboom/TXTS/DOOM/Files | 98 + prboom/TXTS/DOOM/Files2 | 221 ++ prboom/TXTS/DOOM/Makefile | 98 + prboom/TXTS/DOOM/README.ASM | 283 ++ prboom/TXTS/DOOM/README.B | 140 + prboom/TXTS/DOOM/README.GL | 149 + prboom/TXTS/DOOM/README.book | 57 + prboom/TXTS/DOOM/README.sound | 110 + prboom/TXTS/DOOM/Readme.txt | 78 + prboom/TXTS/DOOM/Todo | 123 + prboom/TXTS/Log_pr.txt | 659 +++++ prboom/TXTS/Readme.txt | 313 +++ prboom/TXTS/WHATSNEW.TXT | 109 + 68 files changed, 19411 insertions(+) create mode 100644 prboom/BIN2C.DSP create mode 100644 prboom/BMP2C.DSP create mode 100644 prboom/COPYING create mode 100644 prboom/ICONS/BARREL.ICO create mode 100644 prboom/ICONS/FOUCH.ICO create mode 100644 prboom/ICONS/GOD.ICO create mode 100644 prboom/ICONS/Heada1.ico create mode 100644 prboom/ICONS/ICONS.APS create mode 100644 prboom/ICONS/ICONS.RC create mode 100644 prboom/ICONS/RESOURCE.H create mode 100644 prboom/ICONS/SKULL.ICO create mode 100644 prboom/LUMPS/GRAPHICS/COLCHIP.BMP create mode 100644 prboom/LUMPS/GRAPHICS/CURCHIP.BMP create mode 100644 prboom/LUMPS/GRAPHICS/DOOM.ACT create mode 100644 prboom/LUMPS/GRAPHICS/PRBOOM.PSD create mode 100644 prboom/LUMPS/GRAPHICS/Prboom.bmp create mode 100644 prboom/LUMPS/GRAPHICS/VRFYBOX.BMP create mode 100644 prboom/LUMPS/TEST.RES create mode 100644 prboom/LUMPS/TEST.SGN create mode 100644 prboom/LUMPS/TEST.WAD create mode 100644 prboom/LUMPS/TEST/HISTORY/HISTORY.TXT create mode 100644 prboom/LUMPS/TEST/LUMPS/CDATA.C create mode 100644 prboom/LUMPS/TEST/LUMPS/COLCHIP.LMP create mode 100644 prboom/LUMPS/TEST/LUMPS/CURCHIP.LMP create mode 100644 prboom/LUMPS/TEST/LUMPS/PRBOOM.LMP create mode 100644 prboom/LUMPS/TEST/LUMPS/Prboom.bmp create mode 100644 prboom/LUMPS/TEST/LUMPS/TEST.C create mode 100644 prboom/LUMPS/TEST/LUMPS/TEST2.C create mode 100644 prboom/LUMPS/TEST/LUMPS/VRFYBOX.LMP create mode 100644 prboom/LUMPS/TEST/TEST.DEF create mode 100644 prboom/LUMPS/TEST/TEST.RES create mode 100644 prboom/LUMPS/TEST/TEST.WAD create mode 100644 prboom/MAKFILES/MAKEFILE.C32 create mode 100644 prboom/MAKFILES/MAKEFILE.DOS create mode 100644 prboom/MAKFILES/MAKEFILE.M32 create mode 100644 prboom/MISC/COMMON.CFG create mode 100644 prboom/MISC/DEFSWANI.DAT create mode 100644 prboom/MISC/DOOM17.DAT create mode 100644 prboom/MISC/DOOM19.DAT create mode 100644 prboom/PRBOOM.DSP create mode 100644 prboom/PRBOOM.DSW create mode 100755 prboom/PRBSTUFF/DEH2BEX.BAT create mode 100644 prboom/PRBSTUFF/DEH2BEX.PL create mode 100644 prboom/PRBSTUFF/PRBOOM.INF create mode 100644 prboom/TXTS/BOOM/BOOMDEH.TXT create mode 100644 prboom/TXTS/BOOM/BOOMSRC.TXT create mode 100644 prboom/TXTS/BOOM/LOG_JFF.TXT create mode 100644 prboom/TXTS/BOOM/LOG_LEE.TXT create mode 100644 prboom/TXTS/BOOM/LOG_RSP.TXT create mode 100644 prboom/TXTS/BOOM/LOG_TY.TXT create mode 100644 prboom/TXTS/BOOM/SNDDRVR.TXT create mode 100644 prboom/TXTS/COMPILE.TXT create mode 100644 prboom/TXTS/COPYING create mode 100644 prboom/TXTS/DOOM/ChangeLog create mode 100644 prboom/TXTS/DOOM/Files create mode 100644 prboom/TXTS/DOOM/Files2 create mode 100644 prboom/TXTS/DOOM/Makefile create mode 100644 prboom/TXTS/DOOM/README.ASM create mode 100644 prboom/TXTS/DOOM/README.B create mode 100644 prboom/TXTS/DOOM/README.GL create mode 100644 prboom/TXTS/DOOM/README.book create mode 100644 prboom/TXTS/DOOM/README.sound create mode 100644 prboom/TXTS/DOOM/Readme.txt create mode 100644 prboom/TXTS/DOOM/Todo create mode 100644 prboom/TXTS/Log_pr.txt create mode 100644 prboom/TXTS/Readme.txt create mode 100644 prboom/TXTS/WHATSNEW.TXT diff --git a/.gitattributes b/.gitattributes index 8e948c534..d92bd27be 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1 +1,20 @@ * text=auto !eol +prboom/ICONS/BARREL.ICO -text svneol=native#unset +prboom/ICONS/FOUCH.ICO svneol=native#unset +prboom/ICONS/GOD.ICO svneol=native#unset +prboom/ICONS/Heada1.ico -text +prboom/ICONS/ICONS.APS -text svneol=native#unset +prboom/ICONS/SKULL.ICO svneol=native#unset +prboom/LUMPS/GRAPHICS/COLCHIP.BMP svneol=native#unset +prboom/LUMPS/GRAPHICS/CURCHIP.BMP svneol=native#unset +prboom/LUMPS/GRAPHICS/DOOM.ACT svneol=native#unset +prboom/LUMPS/GRAPHICS/PRBOOM.PSD -text svneol=native#unset +prboom/LUMPS/GRAPHICS/Prboom.bmp svneol=native#unset +prboom/LUMPS/TEST.WAD -text svneol=native#unset +prboom/LUMPS/TEST/HISTORY/HISTORY.TXT -text svneol=native#unset +prboom/LUMPS/TEST/LUMPS/COLCHIP.LMP svneol=native#unset +prboom/LUMPS/TEST/LUMPS/CURCHIP.LMP svneol=native#unset +prboom/LUMPS/TEST/LUMPS/PRBOOM.LMP -text svneol=native#unset +prboom/LUMPS/TEST/LUMPS/Prboom.bmp svneol=native#unset +prboom/LUMPS/TEST/LUMPS/VRFYBOX.LMP -text svneol=native#unset +prboom/LUMPS/TEST/TEST.WAD -text svneol=native#unset diff --git a/prboom/BIN2C.DSP b/prboom/BIN2C.DSP new file mode 100644 index 000000000..c8775ca68 --- /dev/null +++ b/prboom/BIN2C.DSP @@ -0,0 +1,87 @@ +# Microsoft Developer Studio Project File - Name="bin2c" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=bin2c - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "bin2c.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "bin2c.mak" CFG="bin2c - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "bin2c - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "bin2c - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "bin2c - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x407 /d "NDEBUG" +# ADD RSC /l 0x407 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "bin2c - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x407 /d "_DEBUG" +# ADD RSC /l 0x407 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "bin2c - Win32 Release" +# Name "bin2c - Win32 Debug" +# Begin Source File + +SOURCE=.\src\bin2c.c +# End Source File +# End Target +# End Project diff --git a/prboom/BMP2C.DSP b/prboom/BMP2C.DSP new file mode 100644 index 000000000..ab9e5045f --- /dev/null +++ b/prboom/BMP2C.DSP @@ -0,0 +1,87 @@ +# Microsoft Developer Studio Project File - Name="bmp2c" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Console Application" 0x0103 + +CFG=bmp2c - Win32 Debug +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "bmp2c.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "bmp2c.mak" CFG="bmp2c - Win32 Debug" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "bmp2c - Win32 Release" (based on "Win32 (x86) Console Application") +!MESSAGE "bmp2c - Win32 Debug" (based on "Win32 (x86) Console Application") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +RSC=rc.exe + +!IF "$(CFG)" == "bmp2c - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "Release" +# PROP Intermediate_Dir "Release" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x407 /d "NDEBUG" +# ADD RSC /l 0x407 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 + +!ELSEIF "$(CFG)" == "bmp2c - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "bmp2c___" +# PROP BASE Intermediate_Dir "bmp2c___" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "Debug" +# PROP Intermediate_Dir "Debug" +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c +# ADD BASE RSC /l 0x407 /d "_DEBUG" +# ADD RSC /l 0x407 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept + +!ENDIF + +# Begin Target + +# Name "bmp2c - Win32 Release" +# Name "bmp2c - Win32 Debug" +# Begin Source File + +SOURCE=.\src\bmp2c.c +# End Source File +# End Target +# End Project diff --git a/prboom/COPYING b/prboom/COPYING new file mode 100644 index 000000000..a43ea2126 --- /dev/null +++ b/prboom/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/prboom/ICONS/BARREL.ICO b/prboom/ICONS/BARREL.ICO new file mode 100644 index 0000000000000000000000000000000000000000..b415f0b6af03535ade630a899dbd5dbead743dc6 GIT binary patch literal 1923 zcmaJ=F=!%b7<~%|9;i$qoQ33!nZg5$DZHRCg$GkiVd0S}j10#V=CGJOEJl#vf*A%P z#6nO=1Pd2j@E}DBixepgY~ewQ6e&`8V6jDt6j|6}i!1(nWA>uS?cJ|$M*lbe_rLf4 zZ-7_)Y;IyXe*YHuj=z2&Hi@5zSKy>SzInX;`#J^q#dP|3%+#)6-M_*CD5MjK^aPheO0NdF1nXoSdAHE1=zOBc&F&kAZm3faiH=Hk+u|>nIco zC>D#*b)CEkP19hSCR9~LCX?Zu1zEG8C<>CvB+BJ7WLc)}3X0bj3R4sMnE`82fh5^T z>NafKMsAo#rl+A=twQl~s614Wax(PnKrSnY8A(K=b)*V)M721ibQD!lM^KI+5DlVG zZZM-J6r+iF+(X`~qiB23idCeGE#!;}GI?r~+b|vaOLdU3I!J3pDD+rv^w8_|sQUy) zo%87d@?5W$2e6w12-vhJwlo_bGb26x`}#c46S+!nYrou8DeP-&66|c zHG%F-&>EgIw+m)9MZPgbXFNr@*x*cBMwH5}&#H#axX%O=eBE!3ic zMq`foe2!LYfpTww#bSYUK}V-^2YYabySqDT$?+WTk<4XKoZrJ4J>cQt0i)3;G)_PB z{69mxxP>x!k9gw@5p#fm)&j$ZHxcX;f!>9{1u>WkjAsIqYyQ6xn9T+E7r6OAZXmF@ z7jT52E&k#DHiMO~N56gb6|2g1su(o1)W!a2yE3fM7of z_Pt-}pDKO@kFW`Ym{Y^WE%i`mgZj;pfZ7p=H3g#1CrH(MNRRw=w^`=9fb zIK!==H=;w>gigo=c&5k<0i_4XEhKrSF-1c}&L9|5`1SxQp%5~`HxNNW8wz~UUB;0$Z=3)WoTc=gK*UZls-<;aFYA%o*_CiI2zZ=PE!xuxA*rF(qb@Ap-o3rnjf zlD1o`xo+w3@W_86>obOw^_MP3V$a>TUGMOSbie;|$lt;UZ+~GWDdD;`>!|x+7HKwNm$Z zJF7nVH`epn@^)W$`+f2&|KZR|-`D(0Yx!>_6N&xWbN}o7#+&{98V#=d-&s4~4SUb0 zpZSxFb^rePzTlsqFY|fMulwWqAK3q!k6SApGQ0oG=dnN7nNR%@&aU$PT0Y_R{zz_p X|Lco<*7Y%;H%o(0{lNwauk!yJha)I` literal 0 HcmV?d00001 diff --git a/prboom/ICONS/FOUCH.ICO b/prboom/ICONS/FOUCH.ICO new file mode 100644 index 0000000000000000000000000000000000000000..6b2a338812881e1146b13f5b7d06f8beb7a2bd14 GIT binary patch literal 2238 zcma)7F=!)46n#em3aD6wArh$2nJpX;W(g|hK!pM-RES#@f>EJDH>hwS4lRg90u^fz zi;FE}u)ts;bl`&x=fZ^w7cOMD!T}don8Sqw3S8mBg%7T{Ktd*O?bxx;7szPe%+CDz z|G)p|?+AFp-_xhKZa;qqe9yNZh^NF)#1n8aYTw=rkNY{m2lM&Oz@D!-Iy%D9uSfX! z%WK4w8N`ev(&;pomX;8Y#}SLgkP#M)tch4A2_y|HWpgmhEKW{Nkj@s6vLKudaPNztVGRoyLwzsz_s~`vhWb+mJsUlOTVlWuM^E`CB zT~sO+)M_=9N+rtcC>D#T*XzjV^AJLCtpT&xfMr=&Sy@4|*@S7Dg(HmpGbYgcV#JAyHHU^XqJt1Cz*yU13$NES0Na!Isx z7jbh5v1A;TW}i9oU{yV2G6R$wUDR3w6l-ndY8xn2*C5K|W(KHt7+-b>(HJ6EtifW8 z&Hfg)wzkN78`Un?b7PdLpKp%Q^2R98UUM)-dt=I2cTs5VB1fBrLWpdsj_xo-vAqYA zc`KFnkoY&csCC-R!3ioJ(ON@w@D82M zDNavMQEJvv56+OURnhOCAI<|5g zC1uoqZG$acM_H?@mU3MAc!OVc@?HLSG7(#>5>1Ns%io%bzH3q$a*)374DhA`n7KbG2tI8>TZc zja8$!Y)UEa2q+n%~3=orJPN>C*0crDQ9A& z|Nc$jy8fF@$7GuB$&EzMc1K}23fv%YoHsk+$hCWkTXiFnD}QI?drlCgX0+q0$8yhe zsq8p`s}!Sus4rM`j^hTS$Om7Q`A}}!$~GPLj>`jJ@_P^EJ=->wDQptwSxeDNJ&>n* zrch>d`l3gfNF)-e`}|YXq#_$L!5x$*?#Yb=3zjv&s<|#fVLlWa2|=;v`D7P0lDY4m ziAsnlr=IKkjLqiczV+)w_V}+TqWWeGqIZ{D-T_+w7SsCZ8?D!$+*}L18vf$tc#A)I a6GiwP$lT&1V0;a?^8XrdZAG>te}4nOfN@v= literal 0 HcmV?d00001 diff --git a/prboom/ICONS/GOD.ICO b/prboom/ICONS/GOD.ICO new file mode 100644 index 0000000000000000000000000000000000000000..44118977ba54817ba76a01610312425e5a0090ce GIT binary patch literal 2238 zcmb_dKWJh}9R8L&@W4VOa0V<~m?8%j78X;a@W8@CcoxF5u#mwbg)F{B9tsvOAdf7( zLcs@tNYLFZyko(9f(egg2pWb%1n&nZq%PjULwDL(x8 z65&_^p-2qzcpPhMYY2zK2!%pO$P^+;flwj_#3EQrrV$ZIoS&Z~p3ESY%HZtmjC^wi zSsWi9V>}+?@bHlDIf!%)K@ea#93n3B$mjFe-QA_E0MGM~+$>N}5s6F@olXaiHt3YHcNTpKP*w{d|T7?jTc5k8dwt~W>jNDNX zmDv^|ks3B~HPmV~WQKXjeirq59jQ(RTX%IN89zmv)dTZb9a0oA6L>(7$9CveHF5TSAIH zR@;5_`+eHIi(-@O=>hUQzgZoi<_wS_U$rwteP>8t50I%HAWhCpCO|S*Mzb3rTR((g z+;X`i#M4WaE^jQ)V5IUyhWpN zfs2a^(qy(?^%ifFg5aeaM_ot+t~{TXJn8PbIuy4@Sp1~<65xuGo?=J6IA8Hv*M zEgA=RxVyWE#Ui$!SGlV;t|nU*Ybh7M69io`W-IJu%dw6jh7%Lf{pU5&V-5o>%z zq<)LY)(qjw6+$Jl6yC7>kNHU);Y!mtqD$0>93coWr;tM+)d$25Hki|RDvLEC5ss($ z^#GehiVy_9K!l0xP~*d|8ZSp9Y;SLKge(dyb`ydj!&)^G;v&yvswc_i8%VWBx5yQn|goo-+;n>7^e`9lp3+ zTxu|-`HV-X!<%0IIeEs#rCdtWR@P`ZdahhwJ?F$ywkiKopyX5A7`@ZO(F@OeF&gT3 zBg20BH@_`g%&amEDV37aU=A$RlJ=6Ha*Bl2vkjY1&l22pPacW34BLNw=`+L(u7CO3 zw~f}lDxqAtd%jB_=!EOuS)G@cWiiwAe)T*{k5YTlI9f`q%7vi}VX?Ou2}Lhj ztMZm%2qomgLl&8At*^+}TS6*9-+7QS8I4BQ@7ur5lVoLUEp|{Iy(f=E4bxDJIdf#N zNwF%9L|Gw@(%diehz7U q`jyt(j}}+M@4Ou6_>H&F62Ab6IX(c9FJUSFw{gic=UwQb=05=9tA};~ literal 0 HcmV?d00001 diff --git a/prboom/ICONS/Heada1.ico b/prboom/ICONS/Heada1.ico new file mode 100644 index 0000000000000000000000000000000000000000..43c3f8962345fce9485a1f306978e40fc1909ac1 GIT binary patch literal 1895 zcmZWoJ!s=d6#fJUIWUKczxBezkRnB3g^0vNY>|T$IY^Nr2Pw8lk-`gGEXx(TPuaiX#{OnT@6G%4 z=6g?o#^1ANcpQKJ2>i_5FT^wAcR~Y=$@t;(^8Z-@{6neF3ukU|etwSgf6np#uS2BL zD_GLg$Ye5DUS38jmBP}}5>`qAdOnM#l{Apnv79%dXY;tcyhJ8nMp~3{adAPu3^SO$wS;f)O5$5wbGNl@7wHo&K_vx!+Z*LFz%{t%XV5RI}JRV~>970No zdcBTDqk(F*N`DiTN(Iek6PufxD3waIwUDi}AcVmB`a0U}HnQ0)^WH(@s)f30qI%+> zb+-du?_#~$MYr2Ud0se)9A$# zsq8YA(kay218OvcaE4e}8Kc&cXmrP@GEIga&m-9?-*I? zR;`{OV^%QSKcQZysP<2>JNKyD8MRWV4HPCv3hm*5`dpyV?@@zG)Q3cO2hR8k{r)ws zudh*UH__a?!Dhq3U~r4u+gt4J-l09c!`!_<;3t360wa z^bZzTEEYI8_<+IjN7nx%DrYwkv$t3ooM5>*!%}4z6dU8yn0*psdKTl1n5h^?7cow+ z_ymoHz^LN5M6&c}swLLYO|zl|u$1(6;FxhVQ( z`@TtBDi_kNl0)Ae+zCC>BBeA<1={1H_)P29QTQ$J!Z1`?5c(mHaPI}b6~4OlHQ@!H z7#oI~N~S=43Oup)*{`%n^Fn&Pzz=+%2t1x}J=ztIM7rx*N_*p}CXQQb7M^yfv>qLR3ZJrmh1Yy2&01WM2HO`o)`r?6uwWUuSg<0u2nQPSgGhRP#s$o?T(bMr0iHl>&wnA z3Q`AD)6S7wjz%32^jVDcxc&qD(Amv_*HvwWU?B{!y)4(&h;%w<1=Y`ZEc| zID2HdPQ6xlTx(?Wnbs&reUiHRfy7REX85{{dv?f0_UQ literal 0 HcmV?d00001 diff --git a/prboom/ICONS/ICONS.APS b/prboom/ICONS/ICONS.APS new file mode 100644 index 0000000000000000000000000000000000000000..50f4d5ce985b779fed227ca19c3a96fc9061ca4e GIT binary patch literal 9103 zcmeHMPiQ088UK_mxKy-Lv!zz>!D~=Cumv~du!lW3kV9%(I{m$o z|46oXy_6jN&^PnueShBfeedbL-@G9rx&ZRL2BF$gdhql!&~IprevP~51@`!D-`lIu z#=Ass{PL~Wul?n%sdxW0GxOf7Z@rV9c|X^c0at9o6$bZUVG(jqMx3s{}LpKn)Ug2-p{_P{rTF39%V8QW3Rm3^8<*S z13ljrCedmNdVl@?ex}YHWTCmYOHjE0`V}ZZ5N72dM~%nBt4o9*xo+czE2^}yu|XUE z*r2cfc9Vh~UDU>PP-kZ+oj-q`g25oQwY5=~C=l1rQ(IRDQ3pro`=iA1{j|BcNuB*8 z)FF(}y?ggyk982EN~J>U>+5v;_H8`JiI2vqTrShf$_jOgqcl1?N;huY053(BWl{f7 z3jL(1Ya~tc^YdgF2I;y^sZ@%_#>OZfkApu>u~>}8$H!@CXoy5nMB4=Mu?Z3cfi7OW zNZD+bc%FyfQ#5vef>Q1{#qXqPVta}>ZkjH}r)he6nnqSeNnDK4%*+f4^CL91GeiA3 z5i#e8&kEF;zDOM%I`yY?>WFm_7ww=KPp2S%p4vKsl*-N`M+OOLgSxurX>>xTvFUk= zjm=PWY=K77QzVYUH{PQ09OCOQkT_AGXl#rG#F(93q{YQW_@rOo z%QOOe+4&WkSy(}=Ycw*wMp4)t87WhLe4O+`nPM}yiAUbz@jKKRjgfKV4)V25@!UEs ztW=P)#)jpb&LgH1{qpy??}&)=t9?g2e`@POjkaT>QC(a>0$ zW@jJM-X{e zz@vMQJ@oI#ARv$GyeOnAtJhunLZLpz|aK#xG1pmk6gv<$L91}F!b z0*#Xgzdg)V4|CHi6v)fv$V;cm!+i2E@0q22E6lC*E||3 zc+_cl)RFs!xS6NKO>I+f;t{ot!Aj~2O#cf05_jm4huA;`&@?Cx;z5KlC2@sFSR~>X z=px3nQ;5-dUZh~BfPW9s5J&*=Ap8UUl`Xd7(bxa>=;rDwUB7-Et+0h3TUPxWuFSlL z3-{thQjDc?dC5?u6Llm-RTWug*OLS!SyL4u5)l+tlaC8Xl5DC%CYj6#swqpy1Z4Cs za|0ZHGCYuvxFE?g`fW7A1LNtE#0b3Zie-7cuKpRkLi?2dWC+%I76T;#FK# z4FiDW=Ue%CN#Ye=l;AkVS{C!67Jewtiwe(1U(ACiwzs#3n*9$!6N)Iv1SG(3Z{l<9 zn6Q`wm^J7$&@91v) z_)F7|upV7QtrhAp^b(*87aAyrp`O4I>~kDxonfCd>~n^F&alsSh_W?Zl*>a!cz>LdYP(ePGe*;`w-g^H#e=|WZw zOOZbHi=mEnWUvitFEZRj05`+hx>aP@rg&?M^&=nh8MY}d6^*U3 zz4g#8Zy9(vf^9y63i`0N9`02>YQ;9#(N|YiKLJKkK0!srKHH3KKG3AqFTIu3Pc7@y z)fMl{RZ08c5IZsKf^n7oogW*hk8hi>3&TF5$g4$7((v=KO*8gsV4Ke#+DI{yYd`$# znb<}_5au(n4Vzv-FaQD1z&08ykT}COhm-61H6Qz&fPaqSo@VTG66RrT&%!(V?MHDB z>$Vm9Ouhj2dFcrDId@Fw4Evm6pEK-phJC&(?1OXOmU47OZDHb}nJ@DEQ8u1=et&m= zKL6@fyr|+uxW#5Wv_e~ z&j*7I{ZJ?bZ$lxxEr&vQ9}k7_3eB3(7J~iL`A9~vy9YpYaC?xH9iaU$OZ$Fif0|fvZgT*cR!$WF7AQ~4a^^7+1c-F54IeHfa)zD6~l#~BCW z#}Sw;_u+d2E9kOO>FY!L3-MtANRj7#J=pi}IJZKh(m47$jgR;(46x5?}R198AqBaFNaoG~54 zKJ5Jcv~!ud{DnXWzWezInw~{-1AN^?I*U=ju*xy?(-C$yjc04Q!VQ zwMYnDJ%Ifz5OAGJ{hJ$N|4cs5raOtoT^i;f}9E@G8MGD5UF#SOu`L(UUBP=6W9$nPTj419?0l*7d(!u zW%NlmP<6sW&tNp{hNFW$LfEMWGH%VSf$t1wGS#Y3t4G2iK^PQ-P&ksT3Dqhru`roS zf_t;~J~TIlZebHv`jR(YfjP_U2P)m+wcedUVX!CDGY3NL@55{1?n(gm15OpnKim<* zi9|Ayfv?F#A}s85Ub*R3odD-lYyIi8a5)?uPR{9txq?2I9FB%B3!PW`YgMO)yuO?s zjOYVb^tnP|ac;3tnA5Ke=n<|H!{yfNnJekR@IWFnsYCVSywFr#9l2qAi%VPY$khQTc4Yo%;<@Xo=NDL$+Y4;$C2lY!1_iJH^v z)Do}3Rt9ln6j}a}g<35+Fbu&eQi{C0!vje+4XXY$b5OyY0k;x>(LeiBv?%0 zf`PzV_#h8lNRh%KMF<*Rk%bf~QlxOf;uR@UB=Cy2VPWr{8ME;6c1iMO&b@Q*H{bbw z?vDYs`1kG|BKhq{;3vLq6Yq$hi7jw4lpi+Tf7=DX2aCm~W6M`8mrE@FSmNRLk5H0n z#MC5GsT2~41QbO^^m;v%%Vkun zRallqeGR5*qE@S+P$)nM!MQqgvkt>BkjZ4wY&N0mI^%AkdR0exQG<0{L4DnVsqKDn8Qb0ZR2As_g;HY6to15XDLhqQuzr05zBStjQaqU z9_RBDlxSaQPSExzD3Y%^n4&YBGS@>C+lR=Lvsj!VXVuUf&0uzpptEk4b&OQrgnw|% zdd*?Ea}1{^tlKGTwLq!Az-YEW)9^#^e*y{bM9*6U59RSZoaDlKVtrd@6BDOcoNe3yJv^$JY`UD@p$n*Pp4I zNUZN9TqzlsM7=Iq3(49`?xB0)GjT&)5_4ikOo)K+372RQHAu!SxmP9krW}nRT^F)a zf#iOY-1i~VzbqlcfM^pHV#OFvZx|2b>@)t_p+sRMk@6*y?iZ+?JE*NSl==-~RkD;n zar>X}NF3uvGB;vGvUTU(^9cHH@M(k%{YT;So!{!5e2m)6B8|~|QejGA9iSIu%erdovU~?7lI(PtLA(s4? h;U(7dVg%v|1Y!gNfj~Tg7=d`=i4}LhvTu|91NJt*-kbLJ+>`Hor@#IF=Vu<{ zSIxg@_45xt@zdk^ACLQw+b7Kx8g;8ptzj`33^2yfYPD!Ko7C%dYPA||*P+q1skJSz z8g%<1b}yjS^>}?XJU@SDv-!r;(+6dFV?Mt!onFZE6Ipg7O%Ei=o;ZFZ40i;<3!b;7 z-`~*dt#F(ty4@1nUeIpObbf(lO_W1Uqme0(k@6UdL`2Fs6oK%$ei%+)4Tp>2?PS=! z8@30-YHwJ+8D=}fRQctbJK5?+y1bGs&P20!!s5tax+lnY_~U21Y(qa?;SNiB@f;^A z=!O$IL5A%QX?qbZcYx)1G`l?-c9;A8&h2*NdcAVFTsWOh9FIp1hXeclUi!SU+wG*$ zGu!Q!^?EIxo>(rIEEWr9vl&HEFqupkkH^w0lU}LxN~BjTy+Y{~;QPMx>f^eu^m6EQ zI?~H#Y$lBEV}{oe@%xZ)pAfu6c2yhwFNm`lVLD|noZ!b}yl8|w7}E1&9O;qH)Oo{U`VKyR26Z&yPFATKDqvN^c@>_iQz<)dAtiI5mzR*lo)ciS0{Ncw- zRa@0^wNfpohT+i2KSo|L@<7F1d=+PL6nn7~Td@)gQHWfOL?S8=`54vCs8&YxF=dI# zb!HS{q_a^URMD%*Rn#hC6>TOmQ8}^dmy103c2<7!-Bf-{HimwwJ}L}W{*A`?gU0Ae zeR!r8D^mDH_I=gyFOTofim?-=$V4D)p_iaO!Ciy11ba@W($(>4+Aj5$^T;7k9(~~m tTc}H^i|TWKZ5Z4PM!HqkyRH?gF_qW0eExT6|L4E{8P#v(e_Q`2{@+d}d$|Ar literal 0 HcmV?d00001 diff --git a/prboom/LUMPS/GRAPHICS/CURCHIP.BMP b/prboom/LUMPS/GRAPHICS/CURCHIP.BMP new file mode 100644 index 0000000000000000000000000000000000000000..42f55e681b2ebb03db2e4e6aafa55803848a498e GIT binary patch literal 1186 zcmb`Hp|9dt6vls(Ou}vu2t)+}QNbpN3X-irG}(#@vZ+8+R3Iu4odi*VKvW7SPTXOj4`xYEt<_H^?IFJtw!5*Xmo9AZ40ah z-F}GO3utvcUSAE*&p+5~zVr0-K~daTEUwIE7qaX`njT4#197}3irxsr9YOGd=WXft zH}rZXj`KvfTVUHu+U>c{&#|nja>!^jQspsL9wQNpp)w9dAbhSLhSN90;bM3@8Fuf6 z?ZHs)4XZc9d}o*`zie|SEpH^NEAjHoaQ;r19~sQ{1lbOM@{E^m=qDxasGt`uaE3YE za7rggvHcNkZ%E4>U^yPmZjXlD<$k|&yWO~6uUsw{PNx&c55oHs?bWD)M^rIoYFwh>4j^~oeZ_(ug|Lu%Zex*Hop&6Id`~^z<;m1o= zTh+2GRm+)SG&1s!kyng7P;nRE#9180UhKqHlwv7zk%_U0MdcwMquLqO%BVi3C@`7M z91bzk*{Bby=vCw@Y8A1HHW#U=oLKeCMIL-RD?j;eCcniSL%&cTy`WR+>i9HmmwL;2;J_68zV+~^#A|> literal 0 HcmV?d00001 diff --git a/prboom/LUMPS/GRAPHICS/DOOM.ACT b/prboom/LUMPS/GRAPHICS/DOOM.ACT new file mode 100644 index 0000000000000000000000000000000000000000..3ae5870405d7e37fbddd49cd5eb8816c35a65be0 GIT binary patch literal 768 zcmW-f5wx^W6orokK@bE%5DWwtf*`nXAqavX2!bHE5ClOG1Oo#>Fc1U-K`;;u3RaKQ`SrkP<5QwGehNNhMq=07| zj;T{a#mnX2F#McO@8j`R*Xw@26vZRUZk*3?JcZ#k2u9C4J5EpO$+lb5JQ7kH#zEIB zO)FJ3SCmYaxg;f`7zsis2)-bA01f~H!1s#Z4_sz^T=72Q+~d^ZwZXCaHx!>!_Gn?pNH+BbxYT=op@@GgB?f zIL(5DdtvPOf$exEbqtH{5VQ9ZJg@AlCFeqGLwV1H%z(``E(>0-*tS>{7)3}aY8nE3 z0KNg905^aMUrPp z1;7FP-`@9v&nwO?js>1VtZgjSpGz53o@oSQKLk#0LaW34}_q7<{FKG+=nx*c5pr)Y-jyR}G-SNp|L&@BjXt zfBt`VHg|gIY(S7`G#Sj~sRSOV1SK!XonADPx~R`AP)J4u_^(m7UD9omSRV65>Y~1w z8fnyc+M)9!NH0M-#J~p;sDmgOW1te;2%!7_rt3@qgM&H(2q4`;8}+#s)iPb#uh01* zRYGIXXJiMOBEzE349Oi~-ETl=3n8njidbq$&klJdm@S)HlS~e=Ad&${G7syFC&lRR zyh7$cc0;1RS)&hc7bFd8^GtUi_V-qqg?YSD)1_GM5N(VyL>W{ z?-QQFQbkGe{|QSW46n2Glw~!A%6$G{mDC-$$^#aIuE5wsAQ|0wma_;a~z! z&@~C1ui-#A5+E8a=4c=s(C|TmUs+nO5=<2n+`KfTHW2(B!DDLb!y$sTn#y6-R|i0A z`5Y5h{nZ3NK(G`mFY^-o2mmhyhv9|8a9mwR;so&4MwiDz!Roj&&VQehotKxZ6siq1 zYCP^K_4yb3Vgbcl8;<%S%gJHa_pEt=P0Ou9k~}dxZ{kExP9{lzvfb90RNWqEwM{7c zXX!OV&Z8+V<(uMaw~`Y>z8`8sid(n|VE4-at{+m|n0Lt4(FD-ZIcz^p?YvaS7DnLFh%waQmt6IZmP`fF=y>thPJpZu!g`R5_N zW5;1(4U1z!nOdcidyp(Ohn%udBuL5~354RI+K3X0+^WKN=r$|{4JOVt0rs{VAU~T4 zmQER{i${UBi$KkLi&#*yZpFeJ(7wE(5RnQD;U<14X zt?)Lq!8T}zU9cNIgZ=Oo9D#448-9cy=!Nsp2bbYGLWn~~WJhi^3XMhMQ4Y#QkD>xp zjLJ|2T7ZHmg6h!<^b%TwUPrBH3)+T0MtjhHbQm2+r_gEiEBYN>!xWaVj7Q>hoP~4o zH2fqk$Isv(UVK@8N1KMF%Ph+}*$j3PTgX*9L3E4;{$;&b>Jd?g>@U*uc(?fe&f7k`$& zE?9)I!epUD2nfrC^+KDlSLhUah3f{ZA;U1$P;OXcSY_B~Xg3@({AB1CMe$xSPn;!& z#23Vk;z!~);%V`!WRvcfywW_WURo!;FYS{~N&QBnG2NJNtTe`r>x|os2aLZMubAwn zOjD65V0zxP+0tY=CS5!=K1DEbBp;CbEo-&MX;n>ycVBjrDd~akL7#IfYolz zww74K*0t8{*2C6wHqMrAE3gG@O}2M!2W)5Tlzp__YxmnZ+O#w^?bWpQw63&2Tz9$h aU8-xfYp1K*bfP`( zt2wAtZcr{SQ7T=bP?$rAOXTxY5AL^|DP4n3q&9p-VtJX%DPs59dlQ6Vhs zo;4o6YTRx$q6ZDRzMVxk9NuN3k_Up)rQ250S6+abD>lXSI+m*O4h!krri~HM+)fxx`|zpiY;V&1RTPCK!!I7!HT%_xtE}yVR>g zz1q~PNxd4>t46&luq=yul~61esh7a{`8oB&WBUv%dW4vNL3VJ1v*sKLYYZkH`*CY}%U;gs?BzhC)zb8j zrdKpQVDLhGB_4@8VnaB@l9&?{Vo3Ce3!+IF4_VOcoo25z`=h5*=pN6k*P*Gi<~=a% zhS{(hM#DBDI)rhexi4FKFnVNu^xc4dYhG!Tro2Z(jdbrDQr%~yE_O(^9+7B}srH5T zl|23?j(;SFLrjSdQ6X{!Hv!%g6c>P)0l6{GjjqDNS+0m=M#MQ(m`8~aM2_GsMUpV# z)foNzlh43mNoL7-%?4x@<6la)|P#i0yZM9af~XbE8k@{>yUKPY?{0e z!Er~0a($o22GVg{qi-O|ZH^V5%~02UD^di8`())a8w#y_&tXl5o58GLZHAFb+OYx- zCGlczYQe1k5Rqs5WIG5b0v3O|@*U47ci{Q##yZYhn*LI~C|a{w??c6b#zrz?Ya*ZA z;+ReOpH|B8R1~?cCq1cRO{C+xKD)qW5HR(_P@a)igf7R5;=42ud+B)l1lCe{pH`I7 zkJwEokp7_Xq9cDhpb$}^o79-F3&CLbf_ zR;#_>wr!|SxQ$PkffF~xrF*!0vhr4Y6A5?ah*xq)`$jSqbKgEr;>@@sj*>j}yJW7kVh!{Qfv?{3id1@gI|up<)04 literal 0 HcmV?d00001 diff --git a/prboom/LUMPS/GRAPHICS/VRFYBOX.BMP b/prboom/LUMPS/GRAPHICS/VRFYBOX.BMP new file mode 100644 index 000000000..1a9cab1ca --- /dev/null +++ b/prboom/LUMPS/GRAPHICS/VRFYBOX.BMP @@ -0,0 +1 @@ +BM \ No newline at end of file diff --git a/prboom/LUMPS/TEST.RES b/prboom/LUMPS/TEST.RES new file mode 100644 index 000000000..b7b65747b --- /dev/null +++ b/prboom/LUMPS/TEST.RES @@ -0,0 +1,12 @@ +;------------------------------------------------------------------------ +;test.WAD breakdown, written by BRK.EXE on 09:47 PM Sunday Dec 6, 1998 +;------------------------------------------------------------------------ +; + +; No COLMAPS in test.WAD +; No TRANMAPS in test.WAD + +; Resource section for HISTORY, default location: HISTORY\*.TXT +[HISTORY] +HISTORY + diff --git a/prboom/LUMPS/TEST.SGN b/prboom/LUMPS/TEST.SGN new file mode 100644 index 000000000..de90dea77 --- /dev/null +++ b/prboom/LUMPS/TEST.SGN @@ -0,0 +1,5 @@ +[GRAPHICS] +COLCHIP 0 0 +CURCHIP 0 0 +VRFYBOX 0 0 +PRBOOM 0 0 \ No newline at end of file diff --git a/prboom/LUMPS/TEST.WAD b/prboom/LUMPS/TEST.WAD new file mode 100644 index 0000000000000000000000000000000000000000..58054a9cd3789ec7381f360c3fe0825ac4ef43a9 GIT binary patch literal 8315 zcmeI%Z)jCz9Ki8s?rzRGYt_`fD7t}CFU(_VFhxk`ib<1unaieIXtr{Ktd$E^?ZpTo z6A1&08G9k&i(z}=J^%j<*$ZEcFpwBwVIU#2VuXZ{pm6*Co^$W+z0M$r-o$z2b3NyG zp8K5V&+j>dbF;7RXsc05txGGljDJ$rVJq6P7kzjaqxcl#plYgER9?>R#wGRNot52h zQD0xAOIh^bExdyfe2n}0TBTB|PCoML-yc>^gHn-NEq7G6mnhX(&0L}#eHg_!e9Yn& z8d6F3C`hHx5_n88h`rAj@H7Ia|{ zr!axbxPg0Uu2X6=vN(zpIFD&u#~n10DjU#&ejLX+OyL@Cqp_axqaA%1#W;M-;uac~ zGk&z;AVx3-8&@%px(3FN?dZiY&fp@hU=FDjj33+3jUk-IBxZ0E>LJFD7Ia|{r!axb zxPg0Uewgtii=#M!^O(kU+(A<#<3|VjaUAC`g=@Ht#zz=G+R=wmjKjw)ZlU2(#*a1} z#0bV<<0|G+_ZZ{HcJyKxXK)c$Fo#qVupD8FaqZB9O7Yr}#pTe#HQKH$J;^oZ^GM~S zaF)!A|9)`s%RwDc`TdHQu#~|n-o0WBlbFUV=I|$K zc@Mu5Yp@Be$eUypW!Q*xP));J$}X?sOEQoCalHtV7iUU!n<8!o*x-}1itTkp%KSy zjttB5T-UMvLd=qSwokAu7EVbl41%)nO3d|XKnm^EE5p|Hf~a^J$k+HNT;+n{Q6)Zg zbcaf((icA}UiExG2qJx2RY&jTT&~GUAVqGnq*fVIzAy3WhKgaw0qLFRGrXWsBj+22 zY1@t?Gaz3v1H;HMQo9(C8U)I|A~gu=K~{73oCI|BMJH6VinlU7ZY5)q$`v-B=AS%|Tqag31MQR?Z8usLU?i?N);h;7!+kR$3XV-loiIo3e>lhYlH z!&H^-SB6d6VrHI=!*RnjVoR8Y%fs}+(fx8G4i@_527VYi6ql~ihpH8l(Vk zNW@57*CnHMb})mHPnPKq=9~;&C`>S?5y@cNrqq_xoXo$)%Eb#5IP}1G~DC|b!B#Tab`MwkIywnpPFBuO|GKn2u z+}k;u`_YbmqUl_6xfn*FevnBMzT7d20{KQw+h#CZw#e3ZeEvuZp)S}udS$8{K~2>U}vUdXZxD;IO0t0dJ%K!iX literal 0 HcmV?d00001 diff --git a/prboom/LUMPS/TEST/HISTORY/HISTORY.TXT b/prboom/LUMPS/TEST/HISTORY/HISTORY.TXT new file mode 100644 index 000000000..dba347823 --- /dev/null +++ b/prboom/LUMPS/TEST/HISTORY/HISTORY.TXT @@ -0,0 +1 @@ +MAK test.sgn [02:43 PM Sunday Oct 24, 1999] diff --git a/prboom/LUMPS/TEST/LUMPS/CDATA.C b/prboom/LUMPS/TEST/LUMPS/CDATA.C new file mode 100644 index 000000000..95172ed0c --- /dev/null +++ b/prboom/LUMPS/TEST/LUMPS/CDATA.C @@ -0,0 +1,121 @@ +static const char prboom[]= +{ + 90, 0, 15, 0, 0, 0, 0, 0, + 112, 1, 0, 0,132, 1, 0, 0,152, 1, 0, 0,172, 1, 0, 0, + 192, 1, 0, 0,212, 1, 0, 0,232, 1, 0, 0,247, 1, 0, 0, + 6, 2, 0, 0, 21, 2, 0, 0, 36, 2, 0, 0, 51, 2, 0, 0, + 66, 2, 0, 0, 79, 2, 0, 0, 92, 2, 0, 0,103, 2, 0, 0, + 120, 2, 0, 0,137, 2, 0, 0,154, 2, 0, 0,171, 2, 0, 0, + 188, 2, 0, 0,205, 2, 0, 0,218, 2, 0, 0,231, 2, 0, 0, + 244, 2, 0, 0, 5, 3, 0, 0, 22, 3, 0, 0, 39, 3, 0, 0, + 56, 3, 0, 0, 72, 3, 0, 0, 89, 3, 0, 0, 90, 3, 0, 0, + 110, 3, 0, 0,130, 3, 0, 0,150, 3, 0, 0,170, 3, 0, 0, + 190, 3, 0, 0,210, 3, 0, 0,233, 3, 0, 0, 0, 4, 0, 0, + 23, 4, 0, 0, 46, 4, 0, 0, 66, 4, 0, 0, 86, 4, 0, 0, + 104, 4, 0, 0,122, 4, 0, 0,138, 4, 0, 0,153, 4, 0, 0, + 168, 4, 0, 0,183, 4, 0, 0,200, 4, 0, 0,217, 4, 0, 0, + 234, 4, 0, 0,251, 4, 0, 0, 12, 5, 0, 0, 29, 5, 0, 0, + 46, 5, 0, 0, 63, 5, 0, 0, 80, 5, 0, 0, 95, 5, 0, 0, + 110, 5, 0, 0,123, 5, 0, 0,138, 5, 0, 0,153, 5, 0, 0, + 170, 5, 0, 0,187, 5, 0, 0,204, 5, 0, 0,221, 5, 0, 0, + 238, 5, 0, 0,255, 5, 0, 0, 16, 6, 0, 0, 33, 6, 0, 0, + 50, 6, 0, 0, 65, 6, 0, 0, 80, 6, 0, 0, 95, 6, 0, 0, + 111, 6, 0, 0,128, 6, 0, 0,145, 6, 0, 0,162, 6, 0, 0, + 178, 6, 0, 0,190, 6, 0, 0,202, 6, 0, 0,214, 6, 0, 0, + 226, 6, 0, 0,242, 6, 0, 0, 3, 7, 0, 0, 20, 7, 0, 0, + 37, 7, 0, 0, 53, 7, 0, 0, 0, 15, 0, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0,255, 0, 15, 0, 47, + 183,184,187, 47, 47,183,184,185,184,184,184,183,186, 47, 0,255, + 0, 15, 0, 47,180,183,186, 47, 47,179,183,183,182,182,181,180, + 184, 47, 0,255, 0, 15, 0, 47,179,184,187, 47, 47,180,184,183, + 183,182,181,180,184, 47, 0,255, 0, 15, 0, 47,179,186,188, 47, + 47,180,184,186,185,185,184,183,186, 47, 0,255, 0, 15, 0, 47, + 180,186,188, 47, 47,182,184,186, 47, 47, 47, 47, 47, 47, 0,255, + 0, 10, 0, 47,180,186,188, 47, 47,180,185,187, 47, 0,255, 0, + 10, 0, 47,180,185,188, 47, 47,180,185,188, 47, 0,255, 0, 10, + 0, 47,180,185,187, 47, 47,183,186,188, 47, 0,255, 0, 10, 0, + 47,181,184,187, 47, 47,183,186,188, 47, 0,255, 0, 10, 0, 47, + 181,183,186, 47, 47,184,187,188, 47, 0,255, 0, 10, 0, 47,183, + 184,184,185,185,187,187,188, 47, 0,255, 1, 8, 0, 47,183,183, + 184,184,185,188, 47, 0,255, 1, 8, 0, 47,185,185,185,185,185, + 187, 47, 0,255, 2, 6, 0, 47,188,184,184,188, 47, 0,255, 3, + 12, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0,255, + 3, 12, 0, 47,184,186, 47, 47,183,184,183,182,182,185, 47, 0, + 255, 3, 12, 0, 47,177,184, 47, 47,178,180,180,181,181,186, 47, + 0,255, 3, 12, 0, 47,178,185, 47, 47,177,182,181,180,180,186, + 47, 0,255, 3, 12, 0, 47,177,184, 47, 47,177,182,181,182,182, + 185, 47, 0,255, 3, 12, 0, 47,177,185, 47, 47,177,184, 47, 47, + 47, 47, 47, 0,255, 3, 8, 0, 47,177,185, 47, 47,177,186, 47, + 0,255, 3, 8, 0, 47,177,185, 47, 47,177,186, 47, 0,255, 3, + 8, 0, 47,177,184, 47, 47,179,185, 47, 0,255, 3, 12, 0, 47, + 178,183, 47, 47,178,183,186, 47, 47, 47, 47, 0,255, 3, 12, 0, + 47,178,183,184,184,179,179,178,178,179,184, 47, 0,255, 3, 12, + 0, 47,178,180,181,180,179,179,179,179,178,186, 47, 0,255, 3, + 12, 0, 47,186,178,179,181,181,180,180,179,178,185, 47, 0,255, + 4, 11, 0, 47,186,182,184, 47, 47,183,184,182,185, 47, 0,255, + 5, 3, 0, 47, 47, 47, 0, 10, 5, 0, 47, 47, 47, 47, 47, 0, + 255,255, 0, 15, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 0,255, 0, 15, 0, 47,182,184,186, 47, 47,186, + 186,185,185,185,186,186,186, 47, 0,255, 0, 15, 0, 47,179,183, + 186, 47, 47,180,184,184,183,182,183,183,184, 47, 0,255, 0, 15, + 0, 47,180,184,186, 47, 47,180,184,184,183,183,183,184,185, 47, + 0,255, 0, 15, 0, 47,180,183,186, 47, 47,180,183,184,185,185, + 184,183,185, 47, 0,255, 0, 15, 0, 47,177,181,185, 47, 47,180, + 187, 47, 47, 47,177,181,185, 47, 0,255, 0, 9, 0, 47,177,182, + 184, 47, 47,177,187, 47, 0, 10, 5, 0, 47,177,182,185, 47, 0, + 255, 0, 9, 0, 47,177,182,185, 47, 47,178,185, 47, 0, 10, 5, + 0, 47,177,182,185, 47, 0,255, 0, 9, 0, 47,178,183,185, 47, + 47,179,185, 45, 0, 10, 5, 0, 47,177,183,185, 47, 0,255, 0, + 9, 0, 47,180,183,185, 47, 47,180,187, 47, 0, 10, 5, 0, 47, + 177,183,185, 47, 0,255, 0, 15, 0, 47,181,184,186, 47, 47,180, + 182,187, 47,181,184,184,185, 47, 0,255, 0, 15, 0, 47,182,185, + 184,186,186,181,181,181,181,182,184,185,185, 47, 0,255, 1, 13, + 0, 47,183,184,183,181,180,178,178,178,183,184,183, 47, 0,255, + 1, 13, 0, 47,187,183,183,184,182,182,182,179,183,183,187, 47, + 0,255, 2, 11, 0, 47,187,184,184,187, 47,187,184,184,187, 47, + 0,255, 3, 10, 0, 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0, + 255, 4, 10, 0, 47,187,178,180,180,180,180,178,187, 47, 0,255, + 4, 10, 0, 47,177,179,181,181,180,179,178,183, 47, 0,255, 3, + 12, 0, 47,185,181,181,184,184,184,182,179,178,185, 47, 0,255, + 3, 12, 0, 47,179,181,187, 47, 47, 47, 47,181,181,185, 47, 0, + 255, 3, 4, 0, 47,177,184, 47, 0, 11, 4, 0, 47,177,184, 47, + 0,255, 3, 4, 0, 47,177,184, 47, 0, 11, 4, 0, 47,177,183, + 47, 0,255, 3, 4, 0, 47,177,187, 47, 0, 11, 4, 0, 47,177, + 185, 47, 0,255, 3, 4, 0, 47,177,187, 47, 0, 11, 4, 0, 47, + 179,188, 47, 0,255, 3, 4, 0, 47,177,186, 47, 0, 11, 4, 0, + 47,180,186, 47, 0,255, 3, 12, 0, 47,180,182,188, 47, 47, 47, + 47,182,184,187, 47, 0,255, 3, 12, 0, 47,185,183,183,185,185, + 185,186,185,186,187, 47, 0,255, 4, 10, 0, 47,184,184,184,186, + 187,187,186,184, 47, 0,255, 4, 10, 0, 47,187,181,182,185,187, + 187,186,188, 47, 0,255, 5, 8, 0, 47, 47, 47, 47, 47, 47, 47, + 47, 0,255, 4, 10, 0, 47,187,178,180,180,180,180,178,187, 47, + 0,255, 4, 10, 0, 47,177,179,181,181,180,179,178,183, 47, 0, + 255, 3, 12, 0, 47,185,181,181,184,184,184,182,179,178,185, 47, + 0,255, 3, 12, 0, 47,179,181,187, 47, 47, 47, 47,181,181,185, + 47, 0,255, 3, 4, 0, 47,177,184, 47, 0, 11, 4, 0, 47,177, + 184, 47, 0,255, 3, 4, 0, 47,177,184, 47, 0, 11, 4, 0, 47, + 177,183, 47, 0,255, 3, 4, 0, 47,177,187, 47, 0, 11, 4, 0, + 47,177,185, 47, 0,255, 3, 4, 0, 47,177,187, 47, 0, 11, 4, + 0, 47,179,188, 47, 0,255, 3, 4, 0, 47,177,186, 47, 0, 11, + 4, 0, 47,180,186, 47, 0,255, 3, 12, 0, 47,180,182,188, 47, + 47, 47, 47,182,184,187, 47, 0,255, 3, 12, 0, 47,185,183,183, + 185,185,185,186,185,186,187, 47, 0,255, 4, 10, 0, 47,184,184, + 184,186,187,187,186,184, 47, 0,255, 4, 10, 0, 47,187,181,182, + 185,187,187,186,188, 47, 0,255, 5, 10, 0, 47, 47, 47, 47, 47, + 47, 47, 47, 47, 47, 0,255, 4, 11, 0, 47,184,183,184,182,182, + 182,181,181,184, 47, 0,255, 3, 12, 0, 47,181,178,179,179,179, + 179,180,180,179,184, 47, 0,255, 3, 12, 0, 47,177,177,179,181, + 181,180,179,180,179,184, 47, 0,255, 3, 12, 0, 47,182,181,182, + 184,182,183,184,183,183,185, 47, 0,255, 4, 11, 0, 47,182,187, + 187,188,188, 47, 47, 47, 47, 47, 0,255, 5, 7, 0, 47,183,187, + 187,187,188, 47, 0,255, 6, 7, 0, 47,180,186,186,186,186, 47, + 0,255, 6, 7, 0, 47,180,185,184,182,185, 47, 0,255, 5, 7, + 0, 47,179,181,181,182,185, 47, 0,255, 4, 11, 0, 47,181,185, + 183,182,181, 47, 47, 47, 47, 47, 0,255, 3, 12, 0, 47,180,184, + 183,181,180,179,183,184,184,186, 47, 0,255, 3, 12, 0, 47,177, + 180,182,183,184,186,186,186,187,188, 47, 0,255, 3, 12, 0, 47, + 179,182,184,184,186,186,187,186,185,187, 47, 0,255, 4, 11, 0, + 47,184,187,187,188, 47,187,187,185,186, 47, 0,255, 5, 10, 0, + 47, 47, 47, 47, 47, 47, 47, 47, 47, 47, 0,255, +}; + diff --git a/prboom/LUMPS/TEST/LUMPS/COLCHIP.LMP b/prboom/LUMPS/TEST/LUMPS/COLCHIP.LMP new file mode 100644 index 0000000000000000000000000000000000000000..3a01142fa1328ccb003dadfbd876676b17588a2f GIT binary patch literal 170 zcmd;N;A8*+9U!&>VhP8V2(3M8 literal 0 HcmV?d00001 diff --git a/prboom/LUMPS/TEST/LUMPS/CURCHIP.LMP b/prboom/LUMPS/TEST/LUMPS/CURCHIP.LMP new file mode 100644 index 0000000000000000000000000000000000000000..12df111285908a00022a00580fa47058d1a60ec2 GIT binary patch literal 149 zcmd;N;A8*+9U!&>Vpkvz0ODvMP6OgXAg%%8b|3~SWq|>P{|t-_EDRhVf*MQ|qXB1K B4H5tV literal 0 HcmV?d00001 diff --git a/prboom/LUMPS/TEST/LUMPS/PRBOOM.LMP b/prboom/LUMPS/TEST/LUMPS/PRBOOM.LMP new file mode 100644 index 0000000000000000000000000000000000000000..ddb632592bd6b42f5586dfa2307cb5b6f960bcbe GIT binary patch literal 1860 zcmds%ziSmi5XU!pKcY!Q3x8A=f?{P36v0kRWoIhEAf(hPT8cIzHm0)?V`(MP=I(a) zc5g$l6wyXRP_VJ_M`0m?g~jtTb9c#m`X9LPdGGdnv$L}^v$t&a8X4E8jJXRB;Tb%K zx9|mi!EoA`18@{h!6ICM%Wws5z&&^bPhk^Y!w2{bKVi@_<{%u0GjJX*!7{AE9e4m6 zumx}6E1149hhPB~;UZjxo3IA!@B}J&0q@}({D%2~F^6FR&cYI`z$)B=HCTrYNbm|i z!gmM5{u|_=zEe zs?HkC@|2ZT<-N0^)k?9m0dY*LH$|&s99t`z4>*v4zgd%6wTr2nMp?#B`<543g-J7Y z8qm&EVhO2xTZIr~(&^MLqL;b6lSz~zn@kT)wi$xxz4?h_H-bc01&$Y6i#%jmVXbqL z0a;SSEXz5m?F6wv7+WG1hukv= zy1nb7bc9k8lo|EsOjdh5Rzbt3x5d@$pgE@*X;sDj&St1+waerQyWJ!~BFm|P#FJ})jf|;;KPeaZA~Po%xp9mW zD>9D9Wnyp|mrp!w$K_+FYsc_}MhsJXq@ycmi=yDaRT3xh-qX?A9b_;Cx=eq_IUTw^ zNHEhxGgw=QwM=u#e@W$<0!2pz!8i4gij_{XkU335ug?NAwp-A8u8rI+2}`z(RVBrYbr&a5)hX3dNIiw~Tot`Z1A4L@|LY0=sv<=W zT6K!m=F1gwt++^?kT-?h5xC&N(>L0Ra??DY8qGQ`1~c?lYQ8-~o-Nl%?vXyn_BNu^ zEZX?8-bKEbn)s$fP`( zt2wAtZcr{SQ7T=bP?$rAOXTxY5AL^|DP4n3q&9p-VtJX%DPs59dlQ6Vhs zo;4o6YTRx$q6ZDRzMVxk9NuN3k_Up)rQ250S6+abD>lXSI+m*O4h!krri~HM+)fxx`|zpiY;V&1RTPCK!!I7!HT%_xtE}yVR>g zz1q~PNxd4>t46&luq=yul~61esh7a{`8oB&WBUv%dW4vNL3VJ1v*sKLYYZkH`*CY}%U;gs?BzhC)zb8j zrdKpQVDLhGB_4@8VnaB@l9&?{Vo3Ce3!+IF4_VOcoo25z`=h5*=pN6k*P*Gi<~=a% zhS{(hM#DBDI)rhexi4FKFnVNu^xc4dYhG!Tro2Z(jdbrDQr%~yE_O(^9+7B}srH5T zl|23?j(;SFLrjSdQ6X{!Hv!%g6c>P)0l6{GjjqDNS+0m=M#MQ(m`8~aM2_GsMUpV# z)foNzlh43mNoL7-%?4x@<6la)|P#i0yZM9af~XbE8k@{>yUKPY?{0e z!Er~0a($o22GVg{qi-O|ZH^V5%~02UD^di8`())a8w#y_&tXl5o58GLZHAFb+OYx- zCGlczYQe1k5Rqs5WIG5b0v3O|@*U47ci{Q##yZYhn*LI~C|a{w??c6b#zrz?Ya*ZA z;+ReOpH|B8R1~?cCq1cRO{C+xKD)qW5HR(_P@a)igf7R5;=42ud+B)l1lCe{pH`I7 zkJwEokp7_Xq9cDhpb$}^o79-F3&CLbf_ zR;#_>wr!|SxQ$PkffF~xrF*!0vhr4Y6A5?ah*xq)`$jSqbKgEr;>@@sj*>j}yJW7kVh!{Qfv?{3id1@gI|up<)04 literal 0 HcmV?d00001 diff --git a/prboom/LUMPS/TEST/LUMPS/TEST.C b/prboom/LUMPS/TEST/LUMPS/TEST.C new file mode 100644 index 000000000..5cc67439c --- /dev/null +++ b/prboom/LUMPS/TEST/LUMPS/TEST.C @@ -0,0 +1,79 @@ +// proff: changed from char to unsigned char +static const unsigned char data[] = { + 90,0,15,0,0,0,0,0,112,1,0,0,132,1,0,0,152,1,0,0,172,1,0,0,192,1,0,0,212,1,0, + 0,232,1,0,0,247,1,0,0,6,2,0,0,21,2,0,0,36,2,0,0,51,2,0,0,66,2,0,0,79,2,0,0, + 92,2,0,0,103,2,0,0,120,2,0,0,137,2,0,0,154,2,0,0,171,2,0,0,188,2,0,0,205,2,0, + 0,218,2,0,0,231,2,0,0,244,2,0,0,5,3,0,0,22,3,0,0,39,3,0,0,56,3,0,0,72,3,0,0, + 89,3,0,0,90,3,0,0,110,3,0,0,130,3,0,0,150,3,0,0,170,3,0,0,190,3,0,0,210,3,0, + 0,233,3,0,0,0,4,0,0,23,4,0,0,46,4,0,0,66,4,0,0,86,4,0,0,104,4,0,0,122,4,0,0, + 138,4,0,0,153,4,0,0,168,4,0,0,183,4,0,0,200,4,0,0,217,4,0,0,234,4,0,0,251,4, + 0,0,12,5,0,0,29,5,0,0,46,5,0,0,63,5,0,0,80,5,0,0,95,5,0,0,110,5,0,0,123,5,0, + 0,138,5,0,0,153,5,0,0,170,5,0,0,187,5,0,0,204,5,0,0,221,5,0,0,238,5,0,0,255, + 5,0,0,16,6,0,0,33,6,0,0,50,6,0,0,65,6,0,0,80,6,0,0,95,6,0,0,111,6,0,0,128,6, + 0,0,145,6,0,0,162,6,0,0,178,6,0,0,190,6,0,0,202,6,0,0,214,6,0,0,226,6,0,0, + 242,6,0,0,3,7,0,0,20,7,0,0,37,7,0,0,53,7,0,0,0,15,0,47,47,47,47,47,47,47,47, + 47,47,47,47,47,47,47,0,255,0,15,0,47,183,184,187,47,47,183,184,185,184,184, + 184,183,186,47,0,255,0,15,0,47,180,183,186,47,47,179,183,183,182,182,181,180, + 184,47,0,255,0,15,0,47,179,184,187,47,47,180,184,183,183,182,181,180,184,47, + 0,255,0,15,0,47,179,186,188,47,47,180,184,186,185,185,184,183,186,47,0,255,0, + 15,0,47,180,186,188,47,47,182,184,186,47,47,47,47,47,47,0,255,0,10,0,47,180, + 186,188,47,47,180,185,187,47,0,255,0,10,0,47,180,185,188,47,47,180,185,188, + 47,0,255,0,10,0,47,180,185,187,47,47,183,186,188,47,0,255,0,10,0,47,181,184, + 187,47,47,183,186,188,47,0,255,0,10,0,47,181,183,186,47,47,184,187,188,47,0, + 255,0,10,0,47,183,184,184,185,185,187,187,188,47,0,255,1,8,0,47,183,183,184, + 184,185,188,47,0,255,1,8,0,47,185,185,185,185,185,187,47,0,255,2,6,0,47,188, + 184,184,188,47,0,255,3,12,0,47,47,47,47,47,47,47,47,47,47,47,47,0,255,3,12,0, + 47,184,186,47,47,183,184,183,182,182,185,47,0,255,3,12,0,47,177,184,47,47, + 178,180,180,181,181,186,47,0,255,3,12,0,47,178,185,47,47,177,182,181,180,180, + 186,47,0,255,3,12,0,47,177,184,47,47,177,182,181,182,182,185,47,0,255,3,12,0, + 47,177,185,47,47,177,184,47,47,47,47,47,0,255,3,8,0,47,177,185,47,47,177,186, + 47,0,255,3,8,0,47,177,185,47,47,177,186,47,0,255,3,8,0,47,177,184,47,47,179, + 185,47,0,255,3,12,0,47,178,183,47,47,178,183,186,47,47,47,47,0,255,3,12,0,47, + 178,183,184,184,179,179,178,178,179,184,47,0,255,3,12,0,47,178,180,181,180, + 179,179,179,179,178,186,47,0,255,3,12,0,47,186,178,179,181,181,180,180,179, + 178,185,47,0,255,4,11,0,47,186,182,184,47,47,183,184,182,185,47,0,255,5,3,0, + 47,47,47,0,10,5,0,47,47,47,47,47,0,255,255,0,15,0,47,47,47,47,47,47,47,47,47, + 47,47,47,47,47,47,0,255,0,15,0,47,182,184,186,47,47,186,186,185,185,185,186, + 186,186,47,0,255,0,15,0,47,179,183,186,47,47,180,184,184,183,182,183,183,184, + 47,0,255,0,15,0,47,180,184,186,47,47,180,184,184,183,183,183,184,185,47,0, + 255,0,15,0,47,180,183,186,47,47,180,183,184,185,185,184,183,185,47,0,255,0, + 15,0,47,177,181,185,47,47,180,187,47,47,47,177,181,185,47,0,255,0,9,0,47,177, + 182,184,47,47,177,187,47,0,10,5,0,47,177,182,185,47,0,255,0,9,0,47,177,182, + 185,47,47,178,185,47,0,10,5,0,47,177,182,185,47,0,255,0,9,0,47,178,183,185, + 47,47,179,185,45,0,10,5,0,47,177,183,185,47,0,255,0,9,0,47,180,183,185,47,47, + 180,187,47,0,10,5,0,47,177,183,185,47,0,255,0,15,0,47,181,184,186,47,47,180, + 182,187,47,181,184,184,185,47,0,255,0,15,0,47,182,185,184,186,186,181,181, + 181,181,182,184,185,185,47,0,255,1,13,0,47,183,184,183,181,180,178,178,178, + 183,184,183,47,0,255,1,13,0,47,187,183,183,184,182,182,182,179,183,183,187, + 47,0,255,2,11,0,47,187,184,184,187,47,187,184,184,187,47,0,255,3,10,0,47,47, + 47,47,47,47,47,47,47,47,0,255,4,10,0,47,187,178,180,180,180,180,178,187,47,0, + 255,4,10,0,47,177,179,181,181,180,179,178,183,47,0,255,3,12,0,47,185,181,181, + 184,184,184,182,179,178,185,47,0,255,3,12,0,47,179,181,187,47,47,47,47,181, + 181,185,47,0,255,3,4,0,47,177,184,47,0,11,4,0,47,177,184,47,0,255,3,4,0,47, + 177,184,47,0,11,4,0,47,177,183,47,0,255,3,4,0,47,177,187,47,0,11,4,0,47,177, + 185,47,0,255,3,4,0,47,177,187,47,0,11,4,0,47,179,188,47,0,255,3,4,0,47,177, + 186,47,0,11,4,0,47,180,186,47,0,255,3,12,0,47,180,182,188,47,47,47,47,182, + 184,187,47,0,255,3,12,0,47,185,183,183,185,185,185,186,185,186,187,47,0,255, + 4,10,0,47,184,184,184,186,187,187,186,184,47,0,255,4,10,0,47,187,181,182,185, + 187,187,186,188,47,0,255,5,8,0,47,47,47,47,47,47,47,47,0,255,4,10,0,47,187, + 178,180,180,180,180,178,187,47,0,255,4,10,0,47,177,179,181,181,180,179,178, + 183,47,0,255,3,12,0,47,185,181,181,184,184,184,182,179,178,185,47,0,255,3,12, + 0,47,179,181,187,47,47,47,47,181,181,185,47,0,255,3,4,0,47,177,184,47,0,11,4, + 0,47,177,184,47,0,255,3,4,0,47,177,184,47,0,11,4,0,47,177,183,47,0,255,3,4,0, + 47,177,187,47,0,11,4,0,47,177,185,47,0,255,3,4,0,47,177,187,47,0,11,4,0,47, + 179,188,47,0,255,3,4,0,47,177,186,47,0,11,4,0,47,180,186,47,0,255,3,12,0,47, + 180,182,188,47,47,47,47,182,184,187,47,0,255,3,12,0,47,185,183,183,185,185, + 185,186,185,186,187,47,0,255,4,10,0,47,184,184,184,186,187,187,186,184,47,0, + 255,4,10,0,47,187,181,182,185,187,187,186,188,47,0,255,5,10,0,47,47,47,47,47, + 47,47,47,47,47,0,255,4,11,0,47,184,183,184,182,182,182,181,181,184,47,0,255, + 3,12,0,47,181,178,179,179,179,179,180,180,179,184,47,0,255,3,12,0,47,177,177, + 179,181,181,180,179,180,179,184,47,0,255,3,12,0,47,182,181,182,184,182,183, + 184,183,183,185,47,0,255,4,11,0,47,182,187,187,188,188,47,47,47,47,47,0,255, + 5,7,0,47,183,187,187,187,188,47,0,255,6,7,0,47,180,186,186,186,186,47,0,255, + 6,7,0,47,180,185,184,182,185,47,0,255,5,7,0,47,179,181,181,182,185,47,0,255, + 4,11,0,47,181,185,183,182,181,47,47,47,47,47,0,255,3,12,0,47,180,184,183,181, + 180,179,183,184,184,186,47,0,255,3,12,0,47,177,180,182,183,184,186,186,186, + 187,188,47,0,255,3,12,0,47,179,182,184,184,186,186,187,186,185,187,47,0,255, + 4,11,0,47,184,187,187,188,47,187,187,185,186,47,0,255,5,10,0,47,47,47,47,47, + 47,47,47,47,47,0,255, +}; diff --git a/prboom/LUMPS/TEST/LUMPS/TEST2.C b/prboom/LUMPS/TEST/LUMPS/TEST2.C new file mode 100644 index 000000000..e69de29bb diff --git a/prboom/LUMPS/TEST/LUMPS/VRFYBOX.LMP b/prboom/LUMPS/TEST/LUMPS/VRFYBOX.LMP new file mode 100644 index 0000000000000000000000000000000000000000..f46cec7c98d278041de9d3d373c610df5e495f4d GIT binary patch literal 5992 zcmeI$Ay1o86b9g%t=qb-+q$hAh>3}bi3!9+MFj$Zs6Zf^P(erqBo&B?3IqaCQGq}p zDi8=n1)`z}2n3=6fj}TC5QqvyMFpY>d%9&50!#J-?oFQLYj4uzJ$X;XcMvAR=nS5O zkbWA%4`wN`PJ=dQ^hqT`_|6QAtg%gtQ?5up3*j5n6sfYsJ}2}@JP+Y3ISN$Rq)CTM z!ix~TkY%1#>g;jM1w$s2A^c>HGBtKNqRTazmmy4%XPFIlIOLoG=~wbIONn(Fv^k?s z>b3mLu*e$Qv^eF8WJ-RfDN<#NeNO0+cq2bK3RKvnNry|qTlvW{&nk8HIOc*Olkenb zjxsfNIikxonY8@mS!RPB4moE)`n~+jQevG3ZO-VE`XE0uEV9NnEl#;2`B8qRDN<#N zeNO0+$jDEQ0u?rC(&3WuNq(}-vr3&kj=5mS~ HH{s?N9nu9^ literal 0 HcmV?d00001 diff --git a/prboom/LUMPS/TEST/TEST.DEF b/prboom/LUMPS/TEST/TEST.DEF new file mode 100644 index 000000000..23a6ebbc9 --- /dev/null +++ b/prboom/LUMPS/TEST/TEST.DEF @@ -0,0 +1,305 @@ +; +; Resource definition file +; +; This consists of nine standard resource categories +; +; LUMPS LEVELS TEXTURES SOUNDS MUSICS GRAPHICS SPRITES PATCHES FLATS +; +; Plus some categories needed to specify more information +; +; HISTORY LEVOBJ PALETTE SIGNLOOK +; +; and as many user named and defined categories as desired +; +; For each category there is a section denoted [CATEGORY] in the file +; below. Following the [CATEGORY] tag, on the same line, is info defining the +; the category to Patcher utilities: +; +; [CATEGORY] DEFAULTDIR [.EXT[:METHOD]]... TYPE +; +; This consists of the default path location for the resource type relative +; to current directory, DEFAULTDIR. +; +; A list of extensions and methods that are used with the resource data +; files. The extensions are those that resource data files may be found +; with. A method is essentially the conversions and processing +; necessary to insert the file into the wad. There are currently +; methods GENERIC, LEVELS, TEXTURES, SOUNDS, PICS, and FLATS. If a +; method is not specified, it is assumed GENERIC, no translation, the +; file image is the wad image. +; +; And finally the resource type - LISTED or MARKED or NONE. A listed resource +; can only be named one of the names listed under the category in the resource +; definition file. A marked resource is delimited in the wad directory by +; markers of the form X_START,X_END,XX_START,X1_START, etc, it can have any +; name. X is always the first letter of the resource category name right now. +; There is no data listed under a marked resource category. + +[LUMPS] LUMPS .LMP LISTED + PLAYPAL COLORMAP DEMO1 DEMO2 DEMO3 DEMO4 ENDOOM GENMIDI DMXGUSC + SWITCHES ANIMATED PRBOOM COLCHIP CURCHIP VRFYBOX +; New in ZDoom + SNDCURVE + CRBRICK CRTAN CRGRAY CRGREEN CRBROWN CRGOLD + CRRED CRBLUE CRBLUE2 CRORANGE CRYELLOW +; New in ZDoom +[DEFINITIONS] DEFS .TXT LISTED + SNDSEQ SNDINFO MAPINFO + X11R6RGB +[LEVELS] LEVELS .WAD:LEVELS LISTED + MAP01 MAP02 MAP03 MAP04 MAP05 MAP06 MAP07 MAP08 + MAP09 MAP10 MAP11 MAP12 MAP13 MAP14 MAP15 MAP16 + MAP17 MAP18 MAP19 MAP20 MAP21 MAP22 MAP23 MAP24 + MAP25 MAP26 MAP27 MAP28 MAP29 MAP30 MAP31 MAP32 +[TEXTURES] TEXTURES .RES:TEXTURES .SGN:TEXTURES LISTED + TEXTURE1 + PNAMES +[SOUNDS] SOUNDS .WAV:SOUNDS .TXT LISTED + DPPISTOL DSPISTOL DPSHOTGN DSSHOTGN DPSGCOCK DSSGCOCK DPSAWUP DSSAWUP + DPSAWIDL DSSAWIDL DPSAWFUL DSSAWFUL DPSAWHIT DSSAWHIT DPRLAUNC DSRLAUNC + DPRXPLOD DSRXPLOD DPFIRSHT DSFIRSHT DPFIRXPL DSFIRXPL DPPSTART DSPSTART + DPPSTOP DSPSTOP DPDOROPN DSDOROPN DPDORCLS DSDORCLS DPSTNMOV DSSTNMOV + DPSWTCHN DSSWTCHN DPSWTCHX DSSWTCHX DPPLPAIN DSPLPAIN DPDMPAIN DSDMPAIN + DPPOPAIN DSPOPAIN DPSLOP DSSLOP DPITEMUP DSITEMUP DPWPNUP DSWPNUP + DPOOF DSOOF DPTELEPT DSTELEPT DPPOSIT1 DSPOSIT1 DPPOSIT2 DSPOSIT2 + DPPOSIT3 DSPOSIT3 DPBGSIT1 DSBGSIT1 DPBGSIT2 DSBGSIT2 DPSGTSIT DSSGTSIT + DPBRSSIT DSBRSSIT DPSGTATK DSSGTATK DPCLAW DSCLAW DPPLDETH DSPLDETH + DPPDIEHI DSPDIEHI DPPODTH1 DSPODTH1 DPPODTH2 DSPODTH2 DPPODTH3 DSPODTH3 + DPBGDTH1 DSBGDTH1 DPBGDTH2 DSBGDTH2 DPSGTDTH DSSGTDTH DPBRSDTH DSBRSDTH + DPPOSACT DSPOSACT DPBGACT DSBGACT DPDMACT DSDMACT DPNOWAY DSNOWAY DPBAREXP + DSBAREXP DPPUNCH DSPUNCH DPTINK DSTINK DPBDOPN DSBDOPN DPBDCLS DSBDCLS + DPITMBK DSITMBK DPGETPOW DSGETPOW DPPLASMA DSPLASMA DPBFG DSBFG + DPCACSIT DSCACSIT DPCYBSIT DSCYBSIT DPSPISIT DSSPISIT DPSKLATK DSSKLATK + DPCACDTH DSCACDTH DPSKLDTH DSSKLDTH DPCYBDTH DSCYBDTH DPSPIDTH DSSPIDTH + DPHOOF DSHOOF DPMETAL DSMETAL DPDSHTGN DSDSHTGN DPDBOPN DSDBOPN + DPDBCLS DSDBCLS DPDBLOAD DSDBLOAD DPVIPAIN DSVIPAIN DPMNPAIN DSMNPAIN + DPPEPAIN DSPEPAIN DPBSPSIT DSBSPSIT DPKNTSIT DSKNTSIT DPVILSIT DSVILSIT + DPMANSIT DSMANSIT DPPESIT DSPESIT DPSKEPCH DSSKEPCH DPVILATK DSVILATK + DPSKESWG DSSKESWG DPBSPDTH DSBSPDTH DPVILDTH DSVILDTH DPKNTDTH DSKNTDTH + DPPEDTH DSPEDTH DPSKEDTH DSSKEDTH DPBSPACT DSBSPACT DPBSPWLK DSBSPWLK + DPVILACT DSVILACT DPFLAME DSFLAME DPFLAMST DSFLAMST DPBOSPIT DSBOSPIT + DPBOSCUB DSBOSCUB DPBOSSIT DSBOSSIT DPBOSPN DSBOSPN DPBOSDTH DSBOSDTH + DPMANATK DSMANATK DPMANDTH DSMANDTH DPSSSIT DSSSSIT DPSSDTH DSSSDTH + DPKEENPN DSKEENPN DPKEENDT DSKEENDT DPSKEACT DSSKEACT DPSKESIT DSSKESIT + DPSKEATK DSSKEATK DPRADIO DSRADIO +; New in ZDoom + DSQUAKE DSEMPTY DSSECRET +; New in ZDoom +[WAVESNDS] WAVESNDS .WAV:GENERIC LISTED + SPARK1 SPARK2 SPARK3 RAILGF1 +[MUSICS] MUSICS .MUS .MID LISTED + D_RUNNIN D_STALKS D_COUNTD D_BETWEE D_DOOM D_THE_DA D_SHAWN D_DDTBLU + D_IN_CIT D_DEAD D_STLKS2 D_THEDA2 D_DOOM2 D_DDTBL2 D_RUNNI2 D_DEAD2 + D_STLKS3 D_ROMERO D_SHAWN2 D_MESSAG D_COUNT2 D_DDTBL3 D_AMPIE D_THEDA3 + D_ADRIAN D_MESSG2 D_ROMER2 D_TENSE D_SHAWN3 D_OPENIN D_EVIL D_ULTIMA + D_READ_M D_DM2TTL D_DM2INT +[GRAPHICS] GRAPHICS .BMP:PICS LISTED + HELP VICTORY2 PFUB1 PFUB2 END0 END1 END2 END3 END4 END5 END6 TITLEPIC + CREDIT BOSSBACK AMMNUM0 AMMNUM1 AMMNUM2 AMMNUM3 AMMNUM4 AMMNUM5 + AMMNUM6 AMMNUM7 AMMNUM8 AMMNUM9 STBAR STGNUM0 STGNUM1 STGNUM2 STGNUM3 + STGNUM4 STGNUM5 STGNUM6 STGNUM7 STGNUM8 STGNUM9 STTMINUS STTNUM0 + STTNUM1 STTNUM2 STTNUM3 STTNUM4 STTNUM5 STTNUM6 STTNUM7 STTNUM8 + STTNUM9 STTPRCNT STYSNUM0 STYSNUM1 STYSNUM2 STYSNUM3 STYSNUM4 STYSNUM5 + STYSNUM6 STYSNUM7 STYSNUM8 STYSNUM9 STKEYS0 STKEYS1 STKEYS2 STKEYS3 + STKEYS4 STKEYS5 STDISK STCDROM STARMS STCFN033 STCFN034 STCFN035 + STCFN036 STCFN037 STCFN038 STCFN039 STCFN040 STCFN041 STCFN042 STCFN043 + STCFN044 STCFN045 STCFN046 STCFN047 STCFN048 STCFN049 STCFN050 STCFN051 + STCFN052 STCFN053 STCFN054 STCFN055 STCFN056 STCFN057 STCFN058 STCFN059 + STCFN060 STCFN061 STCFN062 STCFN063 STCFN064 STCFN065 STCFN066 STCFN067 + STCFN068 STCFN069 STCFN070 STCFN071 STCFN072 STCFN073 STCFN074 STCFN075 + STCFN076 STCFN077 STCFN078 STCFN079 STCFN080 STCFN081 STCFN082 STCFN083 + STCFN084 STCFN085 STCFN086 STCFN087 STCFN088 STCFN089 STCFN090 STCFN091 + STCFN092 STCFN093 STCFN094 STCFN095 STCFN121 STFB1 STFB0 STFB2 STFB3 + STPB1 STPB0 STPB2 STPB3 STFST01 STFST00 STFST02 STFTL00 STFTR00 STFOUCH0 + STFEVL0 STFKILL0 STFST11 STFST10 STFST12 STFTL10 STFTR10 STFOUCH1 STFEVL1 + STFKILL1 STFST21 STFST20 STFST22 STFTL20 STFTR20 STFOUCH2 STFEVL2 STFKILL2 + STFST31 STFST30 STFST32 STFTL30 STFTR30 STFOUCH3 STFEVL3 STFKILL3 STFST41 + STFST40 STFST42 STFTL40 STFTR40 STFOUCH4 STFEVL4 STFKILL4 STFGOD0 STFDEAD0 + M_DOOM M_RDTHIS M_OPTION M_QUITG M_NGAME M_SKULL1 M_SKULL2 M_THERMO + M_THERMR M_THERMM M_THERML M_ENDGAM M_PAUSE M_MESSG M_MSGON M_MSGOFF + M_EPISOD M_EPI1 M_EPI2 M_EPI3 M_HURT M_JKILL M_ROUGH M_SKILL M_NEWG + M_ULTRA M_NMARE M_SVOL M_OPTTTL M_SAVEG M_LOADG M_DISP M_MSENS M_GDHIGH + M_GDLOW M_DETAIL M_DISOPT M_SCRNSZ M_SGTTL M_LGTTL M_SFXVOL M_MUSVOL + M_LSLEFT M_LSCNTR M_LSRGHT BRDR_TL BRDR_T BRDR_TR BRDR_L BRDR_R BRDR_BL + BRDR_B BRDR_BR WIOSTK WIOSTI WIF WIMSTT WIOSTS WIOSTF WITIME WIPAR + WIMSTAR WIMINUS WIPCNT WINUM0 WINUM1 WINUM2 WINUM3 WINUM4 WINUM5 + WINUM6 WINUM7 WINUM8 WINUM9 WICOLON WISUCKS WIFRGS WILV00 WILV01 + WILV02 WILV03 WILV04 WILV05 WILV06 WILV07 WILV08 WILV11 WILV12 + WILV14 WILV15 WILV16 WILV17 WILV18 WILV20 WILV21 WILV22 WILV23 + WILV24 WILV25 WILV26 WILV27 WILV28 WILV13 WILV10 WIP1 WIP2 WIP3 WIP4 + WIBP1 WIBP2 WIBP3 WIBP4 WIKILRS WIVCTMS WISCRT2 WIENTER CWILV00 CWILV01 + CWILV02 CWILV03 CWILV04 CWILV05 CWILV06 CWILV07 CWILV08 CWILV09 CWILV10 + CWILV11 CWILV12 CWILV13 CWILV14 CWILV15 CWILV16 CWILV17 CWILV18 CWILV19 + CWILV20 CWILV21 CWILV22 CWILV23 CWILV24 CWILV25 CWILV26 CWILV27 CWILV28 + CWILV29 CWILV30 CWILV31 INTERPIC + M_HORSEN M_VERSEN STBR123 STBR124 STBR125 STBR126 STBR127 + DIG0 DIG1 DIG2 DIG3 DIG4 DIG5 DIG6 DIG7 DIG8 DIG9 DIGA DIGB DIGC + DIGD DIGE DIGF DIGG DIGH DIGI DIGJ DIGK DIGL DIGM DIGN DIGO DIGP + DIGQ DIGR DIGS DIGT DIGU DIGV DIGW DIGX DIGY DIGZ DIG45 DIG47 + DIG58 DIG91 DIG93 STKEYS6 STKEYS7 STKEYS8 BOXUL BOXUC BOXUR BOXCL + BOXCC BOXCR BOXLL BOXLC BOXLR STTMINUS M_SETUP M_KEYBND M_AUTO + M_CHAT M_ENEM M_STAT M_WEAP M_MESS M_COLORS M_PALNO STCFN096 + M_BUTT1 M_BUTT2 +; New in ZDoom + CSLIDE RSLIDE MSLIDE LSLIDE LITLCURS CONCHARS STPBANY STFBANY + M_PBOX M_PSETUP M_PSTTL M_VIDMOD M_GMPLAY M_VIDEO M_CONTRO + FONTA60 FONTA61 FONTA62 FONTA63 + FONTB01 FONTB02 FONTB03 FONTB04 FONTB05 FONTB06 FONTB07 FONTB08 + FONTB09 FONTB10 FONTB11 FONTB12 FONTB13 FONTB15 FONTB14 FONTB16 + FONTB17 FONTB18 FONTB19 FONTB20 FONTB21 FONTB22 FONTB23 FONTB24 + FONTB25 FONTB26 FONTB27 FONTB28 FONTB29 FONTB30 FONTB31 FONTB32 + FONTB33 FONTB34 FONTB35 FONTB36 FONTB37 FONTB38 FONTB39 FONTB40 + FONTB41 FONTB42 FONTB43 FONTB44 FONTB45 FONTB46 FONTB47 FONTB48 + FONTB49 FONTB50 FONTB51 FONTB52 FONTB53 FONTB54 FONTB55 FONTB56 + FONTB57 FONTB58 + XHAIR1 XHAIR2 XHAIR3 XHAIR4 XHAIR5 XHAIR6 XHAIR7 XHAIR8 +[COLMAPS] COLMAPS .LMP MARKED +[TRANMAPS] TRANMAPS .LMP MARKED +[SPRITES] SPRITES .BMP:PICS MARKED +[PATCHES] PATCHES .BMP:PICS MARKED +[FLATS] FLATS .BMP:FLATS MARKED + +; +; ------------------------------------------------------------------- +; Non-standard wad resources +; ------------------------------------------------------------------- +; HISTORY: +; +; When a wad is made with MAK the command line and date stamp are the single +; line in HST.TXT. +; +; When MER, DIF, or KIL is performed on wad1 and wad2 to create wad3, the +; history of wad3 looks like: +; +; MER, DIF, or KIL command line and date stamp +; wad1 history +; wad2 history +; +[HISTORY] HISTORY .TXT LISTED + HISTORY ; command line, date, and histories of wadfiles used +; +; ------------------------------------------------------------------- +; Informational sections do not correspond to wad resources +; An info resource is always a LISTED type, and has no extensions or +; default directory. +; ------------------------------------------------------------------- +; +; LEVOBJ: +; +; These represent the substructures of a level. Each is a resource that +; is transferred as a binary image from file to wad or wad to wad. This +; resource identifies the name, number, and order of level structures. +; +[LEVOBJ] !InFo! + THINGS + LINEDEFS + SIDEDEFS + VERTEXES + SEGS + SSECTORS + NODES + SECTORS + REJECT + BLOCKMAP + BEHAVIOR + SCRIPTS +; +; PALETTE: +; +; This is the reference palette for the .BMP files output. +; This information is referenced by BRK, MAK, and any utility +; that can perform a MAK given a .RES input file, like MER. +; +; If an input wad has a PLAYPAL resource, that is used +; If an IWAD is specified by the command line (BRK /i:iwad) it is used +; Otherwise this table is used +; +[PALETTE] !InFo! + 0 0 0 31 23 11 23 15 7 75 75 75 + 255 255 255 27 27 27 19 19 19 11 11 11 + 7 7 7 47 55 31 35 43 15 23 31 7 + 15 23 0 79 59 43 71 51 35 63 43 27 + 255 183 183 247 171 171 243 163 163 235 151 151 + 231 143 143 223 135 135 219 123 123 211 115 115 + 203 107 107 199 99 99 191 91 91 187 87 87 + 179 79 79 175 71 71 167 63 63 163 59 59 + 155 51 51 151 47 47 143 43 43 139 35 35 + 131 31 31 127 27 27 119 23 23 115 19 19 + 107 15 15 103 11 11 95 7 7 91 7 7 + 83 7 7 79 0 0 71 0 0 67 0 0 + 255 235 223 255 227 211 255 219 199 255 211 187 + 255 207 179 255 199 167 255 191 155 255 187 147 + 255 179 131 247 171 123 239 163 115 231 155 107 + 223 147 99 215 139 91 207 131 83 203 127 79 + 191 123 75 179 115 71 171 111 67 163 107 63 + 155 99 59 143 95 55 135 87 51 127 83 47 + 119 79 43 107 71 39 95 67 35 83 63 31 + 75 55 27 63 47 23 51 43 19 43 35 15 + 239 239 239 231 231 231 223 223 223 219 219 219 + 211 211 211 203 203 203 199 199 199 191 191 191 + 183 183 183 179 179 179 171 171 171 167 167 167 + 159 159 159 151 151 151 147 147 147 139 139 139 + 131 131 131 127 127 127 119 119 119 111 111 111 + 107 107 107 99 99 99 91 91 91 87 87 87 + 79 79 79 71 71 71 67 67 67 59 59 59 + 55 55 55 47 47 47 39 39 39 35 35 35 + 119 255 111 111 239 103 103 223 95 95 207 87 + 91 191 79 83 175 71 75 159 63 67 147 55 + 63 131 47 55 115 43 47 99 35 39 83 27 + 31 67 23 23 51 15 19 35 11 11 23 7 + 191 167 143 183 159 135 175 151 127 167 143 119 + 159 135 111 155 127 107 147 123 99 139 115 91 + 131 107 87 123 99 79 119 95 75 111 87 67 + 103 83 63 95 75 55 87 67 51 83 63 47 + 159 131 99 143 119 83 131 107 75 119 95 63 + 103 83 51 91 71 43 79 59 35 67 51 27 + 123 127 99 111 115 87 103 107 79 91 99 71 + 83 87 59 71 79 51 63 71 43 55 63 39 + 255 255 115 235 219 87 215 187 67 195 155 47 + 175 123 31 155 91 19 135 67 7 115 43 0 + 255 255 255 255 219 219 255 187 187 255 155 155 + 255 123 123 255 95 95 255 63 63 255 31 31 + 255 0 0 239 0 0 227 0 0 215 0 0 + 203 0 0 191 0 0 179 0 0 167 0 0 + 155 0 0 139 0 0 127 0 0 115 0 0 + 103 0 0 91 0 0 79 0 0 67 0 0 + 231 231 255 199 199 255 171 171 255 143 143 255 + 115 115 255 83 83 255 55 55 255 27 27 255 + 0 0 255 0 0 227 0 0 203 0 0 179 + 0 0 155 0 0 131 0 0 107 0 0 83 + 255 255 255 255 235 219 255 215 187 255 199 155 + 255 179 123 255 163 91 255 143 59 255 127 27 + 243 115 23 235 111 15 223 103 15 215 95 11 + 203 87 7 195 79 0 183 71 0 175 67 0 + 255 255 255 255 255 215 255 255 179 255 255 143 + 255 255 107 255 255 71 255 255 35 255 255 0 + 167 63 0 159 55 0 147 47 0 135 35 0 + 79 59 39 67 47 27 55 35 19 47 27 11 + 0 0 83 0 0 71 0 0 59 0 0 47 + 0 0 35 0 0 23 0 0 11 0 0 0 + 255 159 67 255 231 75 255 123 255 255 0 255 + 207 0 207 159 0 155 111 0 107 167 107 107 +; +; SIGNLOOK: +; +; Signs are created in sixteen shades of a color from bright to dark +; This table represents the palette index choices for those shades +; +[SIGNLOOK] !InFo! + 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 ; red + 112 113 114 115 116 117 118 119 120 121 122 122 123 123 124 124 ; green + 200 200 201 201 202 202 203 203 204 204 205 206 240 241 242 243 ; blue + 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 ; white + 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 ; gray + 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 ; yellow +; +; XPARENT: +; +; If present, this section forces a specified color value on the transparent +; color used in BMP's, pallete index 247. Otherwise the palette taken from the +; wad, or the palette (above) in the DEF file specifies the color. +; +[XPARENT] !InFo! + 0 255 255 247 + + diff --git a/prboom/LUMPS/TEST/TEST.RES b/prboom/LUMPS/TEST/TEST.RES new file mode 100644 index 000000000..1eba1723d --- /dev/null +++ b/prboom/LUMPS/TEST/TEST.RES @@ -0,0 +1,29 @@ +;------------------------------------------------------------------------ +;test.WAD breakdown, written by BRK.EXE on 02:50 PM Sunday Oct 24, 1999 +;------------------------------------------------------------------------ +; + +; Resource section for LUMPS, default location: LUMPS\*.LMP +[LUMPS] +PRBOOM +COLCHIP +CURCHIP +VRFYBOX + +; No DEFINITIONS in test.WAD +; No LEVELS in test.WAD +; No TEXTURES in test.WAD +; No SOUNDS in test.WAD +; No WAVESNDS in test.WAD +; No MUSICS in test.WAD +; No GRAPHICS in test.WAD +; No COLMAPS in test.WAD +; No TRANMAPS in test.WAD +; No SPRITES in test.WAD +; No PATCHES in test.WAD +; No FLATS in test.WAD + +; Resource section for HISTORY, default location: HISTORY\*.TXT +[HISTORY] +HISTORY + diff --git a/prboom/LUMPS/TEST/TEST.WAD b/prboom/LUMPS/TEST/TEST.WAD new file mode 100644 index 0000000000000000000000000000000000000000..58054a9cd3789ec7381f360c3fe0825ac4ef43a9 GIT binary patch literal 8315 zcmeI%Z)jCz9Ki8s?rzRGYt_`fD7t}CFU(_VFhxk`ib<1unaieIXtr{Ktd$E^?ZpTo z6A1&08G9k&i(z}=J^%j<*$ZEcFpwBwVIU#2VuXZ{pm6*Co^$W+z0M$r-o$z2b3NyG zp8K5V&+j>dbF;7RXsc05txGGljDJ$rVJq6P7kzjaqxcl#plYgER9?>R#wGRNot52h zQD0xAOIh^bExdyfe2n}0TBTB|PCoML-yc>^gHn-NEq7G6mnhX(&0L}#eHg_!e9Yn& z8d6F3C`hHx5_n88h`rAj@H7Ia|{ zr!axbxPg0Uu2X6=vN(zpIFD&u#~n10DjU#&ejLX+OyL@Cqp_axqaA%1#W;M-;uac~ zGk&z;AVx3-8&@%px(3FN?dZiY&fp@hU=FDjj33+3jUk-IBxZ0E>LJFD7Ia|{r!axb zxPg0Uewgtii=#M!^O(kU+(A<#<3|VjaUAC`g=@Ht#zz=G+R=wmjKjw)ZlU2(#*a1} z#0bV<<0|G+_ZZ{HcJyKxXK)c$Fo#qVupD8FaqZB9O7Yr}#pTe#HQKH$J;^oZ^GM~S zaF)!A|9)`s%RwDc`TdHQu#~|n-o0WBlbFUV=I|$K zc@Mu5Yp@Be$eUypW!Q*xP));J$}X?sOEQoCalHtV7iUU!n<8!o*x-}1itTkp%KSy zjttB5T-UMvLd=qSwokAu7EVbl41%)nO3d|XKnm^EE5p|Hf~a^J$k+HNT;+n{Q6)Zg zbcaf((icA}UiExG2qJx2RY&jTT&~GUAVqGnq*fVIzAy3WhKgaw0qLFRGrXWsBj+22 zY1@t?Gaz3v1H;HMQo9(C8U)I|A~gu=K~{73oCI|BMJH6VinlU7ZY5)q$`v-B=AS%|Tqag31MQR?Z8usLU?i?N);h;7!+kR$3XV-loiIo3e>lhYlH z!&H^-SB6d6VrHI=!*RnjVoR8Y%fs}+(fx8G4i@_527VYi6ql~ihpH8l(Vk zNW@57*CnHMb})mHPnPKq=9~;&C`>S?5y@cNrqq_xoXo$)%Eb#5IP}1G~DC|b!B#Tab`MwkIywnpPFBuO|GKn2u z+}k;u`_YbmqUl_6xfn*FevnBMzT7d20{KQw+h#CZw#e3ZeEvuZp)S}udS$8{K~2>U}vUdXZxD;IO0t0dJ%K!iX literal 0 HcmV?d00001 diff --git a/prboom/MAKFILES/MAKEFILE.C32 b/prboom/MAKFILES/MAKEFILE.C32 new file mode 100644 index 000000000..71fc829d5 --- /dev/null +++ b/prboom/MAKFILES/MAKEFILE.C32 @@ -0,0 +1,619 @@ +################################################################ +# +# $Id: MAKEFILE.C32,v 1.1 2000/04/09 17:52:24 proff_fs Exp $ +# +################################################################ + +CC = gcc + +# the command you use to delete files +RM = rm -f + +# the command you use to copy files +CP = cp + +# options common to all builds +CFLAGS_common = -Wall -Winline -DNOASM + +# debug options +CFLAGS_debug = -g -O2 -DRANGECHECK -DINSTRUMENTED -DCHECKHEAP +#CFLAGS_debug = -g -O2 -DRANGECHECK -DINSTRUMENTED +LDFLAGS_debug = + +# optimized (release) options +CFLAGS_release = -O3 -ffast-math -fomit-frame-pointer -m486 +LDFLAGS_release = -s + +# new features; comment out what you don't want at the moment +#CFLAGS_newfeatures = +CFLAGS_newfeatures = + +# libraries to link in +LIBS = -lcygwin -luser32 -lgdi32 -lcomdlg32 -lkernel32 -lwsock32 -lwinmm + +# this selects flags based on debug and release tagets +mode = release +CFLAGS = $(CFLAGS_common) $(CFLAGS_$(mode)) $(CFLAGS_newfeatures) +LDFLAGS = $(LDFLAGS_common) $(LDFLAGS_$(mode)) + +# subdirectory for objects (depends on target, to allow you +# to build debug and release versions simultaneously) + +O=$(O_$(mode)) +O_release=obj/cygwin32 +O_debug=objdebug/cygwin32 + +B=$(B_$(mode)) +B_release=bin/cygwin32 +B_debug=bindebug/cygwin32 + +# object files +OBJS= $(O)/doomdef.o \ + $(O)/doomstat.o \ + $(O)/dstrings.o \ + $(O)/i_system.o \ + $(O)/i_sound.o \ + $(O)/i_video.o \ + $(O)/i_net.o \ + $(O)/tables.o \ + $(O)/f_finale.o \ + $(O)/f_wipe.o \ + $(O)/d_main.o \ + $(O)/d_net.o \ + $(O)/d_items.o \ + $(O)/g_game.o \ + $(O)/m_menu.o \ + $(O)/m_misc.o \ + $(O)/m_argv.o \ + $(O)/m_bbox.o \ + $(O)/m_cheat.o \ + $(O)/m_random.o \ + $(O)/am_map.o \ + $(O)/p_ceilng.o \ + $(O)/p_doors.o \ + $(O)/p_enemy.o \ + $(O)/p_floor.o \ + $(O)/p_inter.o \ + $(O)/p_lights.o \ + $(O)/p_map.o \ + $(O)/p_maputl.o \ + $(O)/p_plats.o \ + $(O)/p_pspr.o \ + $(O)/p_setup.o \ + $(O)/p_sight.o \ + $(O)/p_spec.o \ + $(O)/p_switch.o \ + $(O)/p_mobj.o \ + $(O)/p_telept.o \ + $(O)/p_tick.o \ + $(O)/p_saveg.o \ + $(O)/p_user.o \ + $(O)/r_bsp.o \ + $(O)/r_data.o \ + $(O)/r_draw.o \ + $(O)/r_main.o \ + $(O)/r_plane.o \ + $(O)/r_segs.o \ + $(O)/r_sky.o \ + $(O)/r_things.o \ + $(O)/w_wad.o \ + $(O)/wi_stuff.o \ + $(O)/v_video.o \ + $(O)/st_lib.o \ + $(O)/st_stuff.o \ + $(O)/hu_stuff.o \ + $(O)/hu_lib.o \ + $(O)/s_sound.o \ + $(O)/z_zone.o \ + $(O)/info.o \ + $(O)/sounds.o \ + $(O)/mmus2mid.o \ + $(O)/i_main.o \ + $(O)/p_genlin.o \ + $(O)/d_deh.o \ + $(O)/lprintf.o \ + $(O)/winstuff.o + +boom doom release all: $(B)/cprboom.exe + +debug: + $(MAKE) mode=debug + +clean: + $(RM) boom.exe + $(RM) $(B_release)/*.exe + $(RM) $(B_debug)/*.exe + $(RM) $(O_release)/*.o + $(RM) $(O_debug)/*.o + +$(B)/cprboom.exe: $(OBJS) $(O)/version.o + $(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) $(O)/version.o -o $@ $(LIBS) + $(RM) $(O)/version.o + +$(O)/%.o: $(addprefix src/, %.c) + $(CC) $(CFLAGS) -c $< -o $@ + +$(O)/%.o: $(addprefix src/, %.s) + $(CC) $(CFLAGS) -c $< -o $@ + +# Very important that all sources #include this one +$(OBJS): $(addprefix src/, z_zone.h) + +# If you change the makefile, everything should rebuild +# $(OBJS): Makefile + +# individual file depedencies follow + +$(O)/doomdef.o: $(addprefix src/, doomdef.c doomdef.h z_zone.h m_swap.h version.h) + +$(O)/doomstat.o: $(addprefix src/, doomstat.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h) + +$(O)/dstrings.o: $(addprefix src/, dstrings.c dstrings.h d_englsh.h) + +$(O)/i_system.o: $(addprefix src/, i_system.c i_system.h d_ticcmd.h doomtype.h i_sound.h \ + sounds.h doomstat.h doomdata.h d_net.h d_player.h d_items.h doomdef.h \ + z_zone.h m_swap.h version.h p_pspr.h m_fixed.h tables.h info.h \ + d_think.h p_mobj.h m_misc.h g_game.h d_event.h w_wad.h) + +$(O)/i_sound.o: $(addprefix src/, i_sound.c z_zone.h doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h mmus2mid.h \ + i_sound.h sounds.h w_wad.h g_game.h d_event.h d_main.h) + +$(O)/i_video.o: $(addprefix src/, i_video.c z_zone.h doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h v_video.h \ + r_data.h r_defs.h r_state.h d_main.h d_event.h) + +$(O)/i_net.o: $(addprefix src/, i_net.c z_zone.h doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h d_event.h \ + m_argv.h i_net.h) + +$(O)/tables.o: $(addprefix src/, tables.c tables.h m_fixed.h i_system.h d_ticcmd.h doomtype.h) + +$(O)/f_finale.o: $(addprefix src/, f_finale.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + d_event.h v_video.h r_data.h r_defs.h r_state.h w_wad.h s_sound.h \ + sounds.h dstrings.h d_englsh.h d_deh.h hu_stuff.h) + +$(O)/f_wipe.o: $(addprefix src/, f_wipe.c doomdef.h z_zone.h m_swap.h version.h i_video.h \ + doomtype.h v_video.h r_data.h r_defs.h m_fixed.h i_system.h \ + d_ticcmd.h d_think.h p_mobj.h tables.h doomdata.h info.h r_state.h \ + d_player.h d_items.h p_pspr.h m_random.h f_wipe.h) + +$(O)/d_main.o: $(addprefix src/, d_main.c doomdef.h z_zone.h m_swap.h version.h doomstat.h \ + doomdata.h doomtype.h d_net.h d_player.h d_items.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h dstrings.h \ + d_englsh.h sounds.h w_wad.h s_sound.h v_video.h r_data.h r_defs.h \ + r_state.h f_finale.h d_event.h f_wipe.h m_argv.h m_misc.h m_menu.h \ + i_sound.h i_video.h g_game.h hu_stuff.h wi_stuff.h st_stuff.h \ + am_map.h p_setup.h r_draw.h r_main.h d_main.h d_deh.h) + +$(O)/d_net.o: $(addprefix src/, d_net.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h m_menu.h \ + d_event.h i_video.h i_net.h g_game.h) + +$(O)/d_items.o: $(addprefix src/, d_items.c info.h d_think.h d_items.h doomdef.h z_zone.h \ + m_swap.h version.h) + +$(O)/g_game.o: $(addprefix src/, g_game.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h f_finale.h \ + d_event.h m_argv.h m_misc.h m_menu.h m_random.h p_setup.h p_saveg.h \ + p_tick.h d_main.h wi_stuff.h hu_stuff.h st_stuff.h am_map.h w_wad.h \ + r_main.h r_data.h r_defs.h r_state.h r_draw.h p_map.h s_sound.h \ + dstrings.h d_englsh.h sounds.h r_sky.h d_deh.h p_inter.h g_game.h) + +$(O)/m_menu.o: $(addprefix src/, m_menu.c doomdef.h z_zone.h m_swap.h version.h doomstat.h \ + doomdata.h doomtype.h d_net.h d_player.h d_items.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h dstrings.h \ + d_englsh.h d_main.h d_event.h i_video.h v_video.h r_data.h r_defs.h \ + r_state.h w_wad.h r_main.h hu_stuff.h g_game.h s_sound.h sounds.h \ + m_menu.h d_deh.h m_misc.h) + +$(O)/m_misc.o: $(addprefix src/, m_misc.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h m_argv.h \ + g_game.h d_event.h m_menu.h am_map.h w_wad.h i_sound.h sounds.h \ + i_video.h v_video.h r_data.h r_defs.h r_state.h hu_stuff.h st_stuff.h \ + dstrings.h d_englsh.h m_misc.h s_sound.h) + +$(O)/m_argv.o: $(addprefix src/, m_argv.c) + +$(O)/m_bbox.o: $(addprefix src/, m_bbox.c m_bbox.h z_zone.h m_fixed.h i_system.h d_ticcmd.h \ + doomtype.h) + +$(O)/m_cheat.o: $(addprefix src/, m_cheat.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + g_game.h d_event.h r_data.h r_defs.h r_state.h p_inter.h m_cheat.h \ + m_argv.h s_sound.h sounds.h dstrings.h d_englsh.h d_deh.h) + +$(O)/m_random.o: $(addprefix src/, m_random.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + m_random.h) + +$(O)/am_map.o: $(addprefix src/, am_map.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h st_stuff.h \ + d_event.h r_main.h r_data.h r_defs.h r_state.h p_setup.h p_maputl.h \ + w_wad.h v_video.h p_spec.h am_map.h dstrings.h d_englsh.h d_deh.h) + +$(O)/p_ceilng.o: $(addprefix src/, p_ceilng.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + r_main.h r_data.h r_defs.h r_state.h p_spec.h p_tick.h s_sound.h \ + sounds.h) + +$(O)/p_doors.o: $(addprefix src/, p_doors.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + r_main.h r_data.h r_defs.h r_state.h p_spec.h p_tick.h s_sound.h \ + sounds.h dstrings.h d_englsh.h d_deh.h) + +$(O)/p_enemy.o: $(addprefix src/, p_enemy.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + m_random.h r_main.h r_data.h r_defs.h r_state.h p_maputl.h p_map.h \ + p_setup.h p_spec.h s_sound.h sounds.h p_inter.h g_game.h d_event.h \ + p_enemy.h) + +$(O)/p_floor.o: $(addprefix src/, p_floor.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + r_main.h r_data.h r_defs.h r_state.h p_map.h p_spec.h p_tick.h \ + s_sound.h sounds.h) + +$(O)/p_inter.o: $(addprefix src/, p_inter.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + dstrings.h d_englsh.h m_random.h am_map.h d_event.h r_main.h r_data.h \ + r_defs.h r_state.h s_sound.h sounds.h d_deh.h p_inter.h) + +$(O)/p_lights.o: $(addprefix src/, p_lights.c doomdef.h z_zone.h m_swap.h version.h \ + m_random.h doomtype.h r_main.h d_player.h d_items.h p_pspr.h d_net.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + doomdata.h r_data.h r_defs.h r_state.h p_spec.h p_tick.h doomstat.h) + +$(O)/p_map.o: $(addprefix src/, p_map.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h r_main.h \ + r_data.h r_defs.h r_state.h p_maputl.h p_map.h p_setup.h p_spec.h \ + s_sound.h sounds.h p_inter.h m_random.h m_bbox.h) + +$(O)/p_maputl.o: $(addprefix src/, p_maputl.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + m_bbox.h r_main.h r_data.h r_defs.h r_state.h p_maputl.h p_map.h \ + p_setup.h) + +$(O)/p_plats.o: $(addprefix src/, p_plats.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + m_random.h r_main.h r_data.h r_defs.h r_state.h p_spec.h p_tick.h \ + s_sound.h sounds.h) + +$(O)/p_pspr.o: $(addprefix src/, p_pspr.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h r_main.h \ + r_data.h r_defs.h r_state.h p_map.h p_inter.h p_enemy.h m_random.h \ + s_sound.h sounds.h d_event.h) + +$(O)/p_setup.o: $(addprefix src/, p_setup.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + m_bbox.h m_argv.h g_game.h d_event.h w_wad.h r_main.h r_data.h \ + r_defs.h r_state.h r_things.h p_maputl.h p_map.h p_setup.h p_spec.h \ + p_tick.h p_enemy.h s_sound.h) + +$(O)/p_sight.o: $(addprefix src/, p_sight.c r_main.h d_player.h d_items.h doomdef.h z_zone.h \ + m_swap.h version.h p_pspr.h m_fixed.h i_system.h d_ticcmd.h \ + doomtype.h tables.h info.h d_think.h p_mobj.h doomdata.h r_data.h \ + r_defs.h r_state.h p_maputl.h p_setup.h m_bbox.h) + +$(O)/p_spec.o: $(addprefix src/, p_spec.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h p_spec.h \ + r_defs.h p_tick.h p_setup.h m_random.h d_englsh.h m_argv.h w_wad.h \ + r_main.h r_data.h r_state.h p_maputl.h p_map.h g_game.h d_event.h \ + p_inter.h s_sound.h sounds.h m_bbox.h d_deh.h) + +$(O)/p_switch.o: $(addprefix src/, p_switch.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + w_wad.h r_main.h r_data.h r_defs.h r_state.h p_spec.h g_game.h \ + d_event.h s_sound.h sounds.h) + +$(O)/p_mobj.o: $(addprefix src/, p_mobj.c doomdef.h z_zone.h m_swap.h version.h doomstat.h \ + doomdata.h doomtype.h d_net.h d_player.h d_items.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h m_random.h \ + r_main.h r_data.h r_defs.h r_state.h p_maputl.h p_map.h p_tick.h \ + sounds.h st_stuff.h d_event.h hu_stuff.h s_sound.h g_game.h) + +$(O)/p_telept.o: $(addprefix src/, p_telept.c doomdef.h z_zone.h m_swap.h version.h p_spec.h \ + r_defs.h m_fixed.h i_system.h d_ticcmd.h doomtype.h d_think.h p_user.h \ + p_mobj.h tables.h doomdata.h info.h d_player.h d_items.h p_pspr.h \ + p_maputl.h p_map.h r_main.h r_data.h r_state.h p_tick.h s_sound.h \ + sounds.h) + +$(O)/p_tick.o: $(addprefix src/, p_tick.c z_zone.h doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h p_user.h \ + p_spec.h r_defs.h p_tick.h) + +$(O)/p_saveg.o: $(addprefix src/, p_saveg.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + r_main.h r_data.h r_defs.h r_state.h p_maputl.h p_spec.h p_tick.h \ + p_saveg.h m_random.h am_map.h d_event.h p_enemy.h) + +$(O)/p_user.o: $(addprefix src/, p_user.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h d_event.h \ + r_main.h r_data.h r_defs.h r_state.h p_map.h p_spec.h p_user.h) + +$(O)/r_bsp.o: $(addprefix src/, r_bsp.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h m_bbox.h \ + r_main.h r_data.h r_defs.h r_state.h r_segs.h r_plane.h r_things.h) + +$(O)/r_data.o: $(addprefix src/, r_data.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h w_wad.h \ + r_main.h r_data.h r_defs.h r_state.h r_sky.h) + +$(O)/r_draw.o: $(addprefix src/, r_draw.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h w_wad.h \ + r_main.h r_data.h r_defs.h r_state.h v_video.h) + +$(O)/r_main.o: $(addprefix src/, r_main.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h r_data.h \ + r_defs.h r_state.h r_main.h r_bsp.h r_segs.h r_plane.h r_things.h \ + r_draw.h m_bbox.h r_sky.h v_video.h) + +$(O)/r_plane.o: $(addprefix src/, r_plane.c z_zone.h i_system.h d_ticcmd.h doomtype.h w_wad.h \ + doomdef.h m_swap.h version.h doomstat.h doomdata.h d_net.h d_player.h \ + d_items.h p_pspr.h m_fixed.h tables.h info.h d_think.h p_mobj.h \ + r_plane.h r_data.h r_defs.h r_state.h r_main.h r_bsp.h r_segs.h \ + r_things.h r_draw.h r_sky.h) + +$(O)/r_segs.o: $(addprefix src/, r_segs.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h r_main.h \ + r_data.h r_defs.h r_state.h r_bsp.h r_plane.h r_things.h r_draw.h \ + w_wad.h) + +$(O)/r_sky.o: $(addprefix src/, r_sky.c r_sky.h m_fixed.h i_system.h d_ticcmd.h doomtype.h) + +$(O)/r_things.o: $(addprefix src/, r_things.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + w_wad.h r_main.h r_data.h r_defs.h r_state.h r_bsp.h r_segs.h \ + r_draw.h r_things.h) + +$(O)/w_wad.o: $(addprefix src/, w_wad.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h w_wad.h) + +$(O)/wi_stuff.o: $(addprefix src/, wi_stuff.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + m_random.h w_wad.h g_game.h d_event.h r_main.h r_data.h r_defs.h \ + r_state.h v_video.h wi_stuff.h s_sound.h sounds.h) + +$(O)/v_video.o: $(addprefix src/, v_video.c doomdef.h z_zone.h m_swap.h version.h r_main.h \ + d_player.h d_items.h p_pspr.h m_fixed.h i_system.h d_ticcmd.h \ + doomtype.h tables.h info.h d_think.h p_mobj.h doomdata.h r_data.h \ + r_defs.h r_state.h m_bbox.h w_wad.h v_video.h) + +$(O)/st_lib.o: $(addprefix src/, st_lib.c doomdef.h z_zone.h m_swap.h version.h v_video.h \ + doomtype.h r_data.h r_defs.h m_fixed.h i_system.h d_ticcmd.h \ + d_think.h p_mobj.h tables.h doomdata.h info.h r_state.h d_player.h \ + d_items.h p_pspr.h w_wad.h st_stuff.h d_event.h st_lib.h r_main.h \ + r_bsp.h r_segs.h r_plane.h r_things.h r_draw.h) + +$(O)/st_stuff.o: $(addprefix src/, st_stuff.c doomdef.h z_zone.h m_swap.h version.h \ + doomstat.h doomdata.h doomtype.h d_net.h d_player.h d_items.h \ + p_pspr.h m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h \ + p_mobj.h m_random.h i_video.h w_wad.h st_stuff.h d_event.h st_lib.h \ + r_defs.h v_video.h r_data.h r_state.h r_main.h am_map.h m_cheat.h \ + s_sound.h sounds.h dstrings.h d_englsh.h) + +$(O)/hu_stuff.o: $(addprefix src/, hu_stuff.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + hu_stuff.h d_event.h hu_lib.h r_defs.h v_video.h r_data.h r_state.h \ + st_stuff.h w_wad.h s_sound.h dstrings.h d_englsh.h sounds.h d_deh.h) + +$(O)/hu_lib.o: $(addprefix src/, hu_lib.c doomdef.h z_zone.h m_swap.h version.h v_video.h \ + doomtype.h r_data.h r_defs.h m_fixed.h i_system.h d_ticcmd.h \ + d_think.h p_mobj.h tables.h doomdata.h info.h r_state.h d_player.h \ + d_items.h p_pspr.h hu_lib.h r_main.h r_bsp.h r_segs.h r_plane.h \ + r_things.h r_draw.h) + +$(O)/s_sound.o: $(addprefix src/, s_sound.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + s_sound.h i_sound.h sounds.h r_main.h r_data.h r_defs.h r_state.h \ + m_random.h w_wad.h) + +$(O)/z_zone.o: $(addprefix src/, z_zone.c z_zone.h doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h) + +$(O)/info.o: $(addprefix src/, info.c doomdef.h z_zone.h m_swap.h version.h sounds.h \ + m_fixed.h i_system.h d_ticcmd.h doomtype.h p_mobj.h tables.h \ + d_think.h doomdata.h info.h w_wad.h) + +$(O)/sounds.o: $(addprefix src/, sounds.c doomtype.h sounds.h) + +$(O)/mmus2mid.o: $(addprefix src/, mmus2mid.c mmus2mid.h z_zone.h) + +$(O)/i_main.o: $(addprefix src/, i_main.c doomdef.h z_zone.h m_swap.h version.h m_argv.h \ + d_main.h d_event.h doomtype.h i_system.h d_ticcmd.h) + +$(O)/p_genlin.o: $(addprefix src/, p_genlin.c r_main.h d_player.h d_items.h doomdef.h \ + z_zone.h m_swap.h version.h p_pspr.h m_fixed.h i_system.h d_ticcmd.h \ + doomtype.h tables.h info.h d_think.h p_mobj.h doomdata.h r_data.h \ + r_defs.h r_state.h p_spec.h p_tick.h m_random.h s_sound.h sounds.h) + +$(O)/d_deh.o: $(addprefix src/, d_deh.c doomdef.h z_zone.h m_swap.h version.h doomstat.h \ + doomdata.h doomtype.h d_net.h d_player.h d_items.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h sounds.h \ + m_cheat.h p_inter.h g_game.h d_event.h dstrings.h d_englsh.h) + +$(O)/lprintf.o: $(addprefix src/, lprintf.c lprintf.h) + +$(O)/version.o: $(addprefix src/, version.c version.h z_zone.h) + +$(O)/winstuff.o: $(addprefix src/, winstuff.c doomdef.h m_argv.h d_event.h \ + d_main.h v_video.h i_system.h) + +# Allegro patches required for Boom to function satisfactorily + +$(O)/emu8kmid.o: $(addprefix src/, emu8kmid.c emu8k.h internal.h interndj.h allegro.h) + +$(O)/keyboard.o: $(addprefix src/, keyboard.c internal.h interndj.h allegro.h) + +# bin2c utility + +bin2c: $(O)/bin2c.exe + $(CP) $(O)\bin2c.exe . + +$(O)/bin2c.exe: $(O)/bin2c.o + $(CC) $(CFLAGS) $(LDFLAGS) $(O)/bin2c.o -o $@ $(LIBS) + +$(O)/bin2c.o: bin2c.c + +# DCK support files + +dckboom: dckboom.zip + +dckboom.zip: doom17.dat doom19.dat watermap.wad dckboom.txt + pkzip -a -Ex dckboom.zip doom17.dat doom19.dat watermap.wad dckboom.txt + +############################################################################### +# $Log: MAKEFILE.C32,v $ +# Revision 1.1 2000/04/09 17:52:24 proff_fs +# Initial revision +# +# Revision 1.40 1998/10/17 03:11:37 jim +# Suppressed if/else warnings +# +# Revision 1.39 1998/09/07 20:12:32 jim +# Logical output routine added +# +# Revision 1.38 1998/05/18 22:59:22 killough +# Update p_lights.o depedencies +# +# Revision 1.37 1998/05/16 09:41:24 jim +# formatted net files, installed temp switch for testing Stan/Lee's version +# +# Revision 1.36 1998/05/15 00:35:40 killough +# Remove p_tick.h dependence from i_main.o +# +# Revision 1.35 1998/05/13 22:58:58 killough +# Restore Doom bug compatibility for demos +# +# Revision 1.34 1998/05/12 12:47:35 phares +# Removed OVER_UNDER code +# +# Revision 1.33 1998/05/10 23:43:03 killough +# Add p_user.h to p_user.o, p_telept.o dependencies +# +# Revision 1.32 1998/05/05 16:29:20 phares +# Removed RECOIL and OPT_BOBBING defines +# +# Revision 1.31 1998/05/03 23:20:15 killough +# Reflect current dependencies, beautify +# +# Revision 1.30 1998/04/27 02:25:42 killough +# Fix missing tabs after fixing cvsto script +# +# Revision 1.26 1998/04/14 08:14:50 killough +# remove obsolete ADAPTIVE_GAMETICS +# +# Revision 1.25 1998/04/13 13:03:22 killough +# Add -DADAPTIVE_GAMETIC +# +# Revision 1.24 1998/04/13 09:43:20 killough +# Add watermap.wad to dckboom.zip +# +# Revision 1.23 1998/04/12 02:07:37 killough +# Add r_segs.c dependency for translucency +# +# Revision 1.22 1998/04/09 09:18:52 thldrmn +# Added dependency of d_main.c on d_deh.h +# +# Revision 1.21 1998/03/29 21:40:17 jim +# Fix to DEH text problem +# +# Revision 1.20 1998/03/23 15:24:21 phares +# Changed pushers to linedef control +# +# Revision 1.19 1998/03/23 03:23:47 killough +# Add dckboom, bin2c targets, add new dependencies +# +# Revision 1.18 1998/03/20 00:29:51 phares +# Changed friction to linedef control +# +# Revision 1.17 1998/03/16 12:32:18 killough +# Add -m486 flag for better 486 codegen +# +# Revision 1.16 1998/03/11 17:48:20 phares +# New cheats, clean help code, friction fix +# +# Revision 1.15 1998/03/10 07:15:05 jim +# Initial DEH support added, minus text +# +# Revision 1.14 1998/03/09 07:17:18 killough +# Turn on instrumenting in debug builds +# +# Revision 1.13 1998/03/04 21:02:24 phares +# Dynamic HELP screen +# +# Revision 1.12 1998/03/02 11:38:42 killough +# Add dependencies, clarify CFLAGS_debug +# +# Revision 1.11 1998/02/27 08:10:05 phares +# Added optional player bobbing +# +# Revision 1.10 1998/02/24 08:46:08 phares +# Pushers, recoil, new friction, and over/under work +# +# Revision 1.9 1998/02/23 04:42:54 killough +# Correct depedencies +# +# Revision 1.8 1998/02/18 01:00:11 jim +# Addition of HUD +# +# Revision 1.7 1998/02/17 05:41:34 killough +# Add drawspan.s, drawcol.s, fix some dependencies +# +# Revision 1.6 1998/02/08 05:35:13 jim +# Added generalized linedef types +# +# Revision 1.5 1998/02/02 13:26:04 killough +# Add version information files +# +# Revision 1.4 1998/01/30 14:45:16 jim +# Makefile changed to build BOOM.EXE +# +# Revision 1.3 1998/01/26 19:31:15 phares +# First rev w/o ^Ms +# +# Revision 1.2 1998/01/26 05:56:52 killough +# Add PPro blit routine +# +# Revision 1.1.1.1 1998/01/19 14:02:52 rand +# Lee's Jan 19 sources +# +############################################################################### diff --git a/prboom/MAKFILES/MAKEFILE.DOS b/prboom/MAKFILES/MAKEFILE.DOS new file mode 100644 index 000000000..4920d881f --- /dev/null +++ b/prboom/MAKFILES/MAKEFILE.DOS @@ -0,0 +1,620 @@ +################################################################ +# +# $Id: MAKEFILE.DOS,v 1.1 2000/04/09 17:52:04 proff_fs Exp $ +# +################################################################ + +CC = gcc + +# the command you use to delete files +RM = rm -f + +# the command you use to copy files +CP = cp + +# options common to all builds +CFLAGS_common = -Wall -Winline -Wno-parentheses -DNORMALUNIX + +# debug options +#CFLAGS_debug = -g -O2 -DRANGECHECK -DINSTRUMENTED -DCHECKHEAP +CFLAGS_debug = -g -O2 -DRANGECHECK -DINSTRUMENTED +LDFLAGS_debug = + +# optimized (release) options +CFLAGS_release = -O3 -ffast-math -fomit-frame-pointer -m486 +LDFLAGS_release = -s + +# new features; comment out what you don't want at the moment +#CFLAGS_newfeatures = +CFLAGS_newfeatures = + +# libraries to link in +LIBS=-lalleg -lm -lemu + +# this selects flags based on debug and release tagets +mode = release +CFLAGS = $(CFLAGS_common) $(CFLAGS_$(mode)) $(CFLAGS_newfeatures) +LDFLAGS = $(LDFLAGS_common) $(LDFLAGS_$(mode)) + +# subdirectory for objects (depends on target, to allow you +# to build debug and release versions simultaneously) + +O=$(O_$(mode)) +O_release=obj/djgpp +O_debug=objdebug/djgpp + +B=$(B_$(mode)) +B_release=bin/djgpp +B_debug=bindebug/djgpp + +# object files +OBJS= $(O)/doomdef.o \ + $(O)/doomstat.o \ + $(O)/dstrings.o \ + $(O)/i_system.o \ + $(O)/i_sound.o \ + $(O)/i_video.o \ + $(O)/i_net.o \ + $(O)/tables.o \ + $(O)/f_finale.o \ + $(O)/f_wipe.o \ + $(O)/d_main.o \ + $(O)/d_net.o \ + $(O)/d_items.o \ + $(O)/g_game.o \ + $(O)/m_menu.o \ + $(O)/m_misc.o \ + $(O)/m_argv.o \ + $(O)/m_bbox.o \ + $(O)/m_cheat.o \ + $(O)/m_random.o \ + $(O)/am_map.o \ + $(O)/p_ceilng.o \ + $(O)/p_doors.o \ + $(O)/p_enemy.o \ + $(O)/p_floor.o \ + $(O)/p_inter.o \ + $(O)/p_lights.o \ + $(O)/p_map.o \ + $(O)/p_maputl.o \ + $(O)/p_plats.o \ + $(O)/p_pspr.o \ + $(O)/p_setup.o \ + $(O)/p_sight.o \ + $(O)/p_spec.o \ + $(O)/p_switch.o \ + $(O)/p_mobj.o \ + $(O)/p_telept.o \ + $(O)/p_tick.o \ + $(O)/p_saveg.o \ + $(O)/p_user.o \ + $(O)/r_bsp.o \ + $(O)/r_data.o \ + $(O)/r_draw.o \ + $(O)/r_main.o \ + $(O)/r_plane.o \ + $(O)/r_segs.o \ + $(O)/r_sky.o \ + $(O)/r_things.o \ + $(O)/w_wad.o \ + $(O)/wi_stuff.o \ + $(O)/v_video.o \ + $(O)/st_lib.o \ + $(O)/st_stuff.o \ + $(O)/hu_stuff.o \ + $(O)/hu_lib.o \ + $(O)/s_sound.o \ + $(O)/z_zone.o \ + $(O)/info.o \ + $(O)/sounds.o \ + $(O)/mmus2mid.o \ + $(O)/i_main.o \ + $(O)/pproblit.o \ + $(O)/drawspan.o \ + $(O)/drawcol.o \ + $(O)/p_genlin.o \ + $(O)/d_deh.o \ + $(O)/lprintf.o \ + $(O)/keyboard.o \ + $(O)/emu8kmid.o + +boom doom release all: $(B)/boom.exe + +debug: + $(MAKE) mode=debug + +clean: + $(RM) boom.exe + $(RM) $(B_release)/*.exe + $(RM) $(B_debug)/*.exe + $(RM) $(O_release)/*.o + $(RM) $(O_debug)/*.o + +$(B)/boom.exe: $(OBJS) $(O)/version.o + $(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) $(O)/version.o -o $@ $(LIBS) + $(RM) $(O)/version.o + +$(O)/%.o: $(addprefix src/, %.c) + $(CC) $(CFLAGS) -c $< -o $@ + +$(O)/%.o: $(addprefix src/, %.s) + $(CC) $(CFLAGS) -c $< -o $@ + +# Very important that all sources #include this one +$(OBJS): $(addprefix src/, z_zone.h) + +# If you change the makefile, everything should rebuild +# $(OBJS): Makefile.dos + +# individual file depedencies follow + +$(O)/doomdef.o: $(addprefix src/, doomdef.c doomdef.h z_zone.h m_swap.h version.h) + +$(O)/doomstat.o: $(addprefix src/, doomstat.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h) + +$(O)/dstrings.o: $(addprefix src/, dstrings.c dstrings.h d_englsh.h) + +$(O)/i_system.o: $(addprefix src/, i_system.c i_system.h d_ticcmd.h doomtype.h i_sound.h \ + sounds.h doomstat.h doomdata.h d_net.h d_player.h d_items.h doomdef.h \ + z_zone.h m_swap.h version.h p_pspr.h m_fixed.h tables.h info.h \ + d_think.h p_mobj.h m_misc.h g_game.h d_event.h w_wad.h) + +$(O)/i_sound.o: $(addprefix src/, i_sound.c z_zone.h doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h mmus2mid.h \ + i_sound.h sounds.h w_wad.h g_game.h d_event.h d_main.h) + +$(O)/i_video.o: $(addprefix src/, i_video.c z_zone.h doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h v_video.h \ + r_data.h r_defs.h r_state.h d_main.h d_event.h) + +$(O)/i_net.o: $(addprefix src/, i_net.c z_zone.h doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h d_event.h \ + m_argv.h i_net.h) + +$(O)/tables.o: $(addprefix src/, tables.c tables.h m_fixed.h i_system.h d_ticcmd.h doomtype.h) + +$(O)/f_finale.o: $(addprefix src/, f_finale.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + d_event.h v_video.h r_data.h r_defs.h r_state.h w_wad.h s_sound.h \ + sounds.h dstrings.h d_englsh.h d_deh.h hu_stuff.h) + +$(O)/f_wipe.o: $(addprefix src/, f_wipe.c doomdef.h z_zone.h m_swap.h version.h i_video.h \ + doomtype.h v_video.h r_data.h r_defs.h m_fixed.h i_system.h \ + d_ticcmd.h d_think.h p_mobj.h tables.h doomdata.h info.h r_state.h \ + d_player.h d_items.h p_pspr.h m_random.h f_wipe.h) + +$(O)/d_main.o: $(addprefix src/, d_main.c doomdef.h z_zone.h m_swap.h version.h doomstat.h \ + doomdata.h doomtype.h d_net.h d_player.h d_items.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h dstrings.h \ + d_englsh.h sounds.h w_wad.h s_sound.h v_video.h r_data.h r_defs.h \ + r_state.h f_finale.h d_event.h f_wipe.h m_argv.h m_misc.h m_menu.h \ + i_sound.h i_video.h g_game.h hu_stuff.h wi_stuff.h st_stuff.h \ + am_map.h p_setup.h r_draw.h r_main.h d_main.h d_deh.h) + +$(O)/d_net.o: $(addprefix src/, d_net.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h m_menu.h \ + d_event.h i_video.h i_net.h g_game.h) + +$(O)/d_items.o: $(addprefix src/, d_items.c info.h d_think.h d_items.h doomdef.h z_zone.h \ + m_swap.h version.h) + +$(O)/g_game.o: $(addprefix src/, g_game.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h f_finale.h \ + d_event.h m_argv.h m_misc.h m_menu.h m_random.h p_setup.h p_saveg.h \ + p_tick.h d_main.h wi_stuff.h hu_stuff.h st_stuff.h am_map.h w_wad.h \ + r_main.h r_data.h r_defs.h r_state.h r_draw.h p_map.h s_sound.h \ + dstrings.h d_englsh.h sounds.h r_sky.h d_deh.h p_inter.h g_game.h) + +$(O)/m_menu.o: $(addprefix src/, m_menu.c doomdef.h z_zone.h m_swap.h version.h doomstat.h \ + doomdata.h doomtype.h d_net.h d_player.h d_items.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h dstrings.h \ + d_englsh.h d_main.h d_event.h i_video.h v_video.h r_data.h r_defs.h \ + r_state.h w_wad.h r_main.h hu_stuff.h g_game.h s_sound.h sounds.h \ + m_menu.h d_deh.h m_misc.h) + +$(O)/m_misc.o: $(addprefix src/, m_misc.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h m_argv.h \ + g_game.h d_event.h m_menu.h am_map.h w_wad.h i_sound.h sounds.h \ + i_video.h v_video.h r_data.h r_defs.h r_state.h hu_stuff.h st_stuff.h \ + dstrings.h d_englsh.h m_misc.h s_sound.h) + +$(O)/m_argv.o: $(addprefix src/, m_argv.c) + +$(O)/m_bbox.o: $(addprefix src/, m_bbox.c m_bbox.h z_zone.h m_fixed.h i_system.h d_ticcmd.h \ + doomtype.h) + +$(O)/m_cheat.o: $(addprefix src/, m_cheat.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + g_game.h d_event.h r_data.h r_defs.h r_state.h p_inter.h m_cheat.h \ + m_argv.h s_sound.h sounds.h dstrings.h d_englsh.h d_deh.h) + +$(O)/m_random.o: $(addprefix src/, m_random.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + m_random.h) + +$(O)/am_map.o: $(addprefix src/, am_map.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h st_stuff.h \ + d_event.h r_main.h r_data.h r_defs.h r_state.h p_setup.h p_maputl.h \ + w_wad.h v_video.h p_spec.h am_map.h dstrings.h d_englsh.h d_deh.h) + +$(O)/p_ceilng.o: $(addprefix src/, p_ceilng.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + r_main.h r_data.h r_defs.h r_state.h p_spec.h p_tick.h s_sound.h \ + sounds.h) + +$(O)/p_doors.o: $(addprefix src/, p_doors.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + r_main.h r_data.h r_defs.h r_state.h p_spec.h p_tick.h s_sound.h \ + sounds.h dstrings.h d_englsh.h d_deh.h) + +$(O)/p_enemy.o: $(addprefix src/, p_enemy.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + m_random.h r_main.h r_data.h r_defs.h r_state.h p_maputl.h p_map.h \ + p_setup.h p_spec.h s_sound.h sounds.h p_inter.h g_game.h d_event.h \ + p_enemy.h) + +$(O)/p_floor.o: $(addprefix src/, p_floor.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + r_main.h r_data.h r_defs.h r_state.h p_map.h p_spec.h p_tick.h \ + s_sound.h sounds.h) + +$(O)/p_inter.o: $(addprefix src/, p_inter.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + dstrings.h d_englsh.h m_random.h am_map.h d_event.h r_main.h r_data.h \ + r_defs.h r_state.h s_sound.h sounds.h d_deh.h p_inter.h) + +$(O)/p_lights.o: $(addprefix src/, p_lights.c doomdef.h z_zone.h m_swap.h version.h \ + m_random.h doomtype.h r_main.h d_player.h d_items.h p_pspr.h d_net.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + doomdata.h r_data.h r_defs.h r_state.h p_spec.h p_tick.h doomstat.h) + +$(O)/p_map.o: $(addprefix src/, p_map.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h r_main.h \ + r_data.h r_defs.h r_state.h p_maputl.h p_map.h p_setup.h p_spec.h \ + s_sound.h sounds.h p_inter.h m_random.h m_bbox.h) + +$(O)/p_maputl.o: $(addprefix src/, p_maputl.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + m_bbox.h r_main.h r_data.h r_defs.h r_state.h p_maputl.h p_map.h \ + p_setup.h) + +$(O)/p_plats.o: $(addprefix src/, p_plats.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + m_random.h r_main.h r_data.h r_defs.h r_state.h p_spec.h p_tick.h \ + s_sound.h sounds.h) + +$(O)/p_pspr.o: $(addprefix src/, p_pspr.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h r_main.h \ + r_data.h r_defs.h r_state.h p_map.h p_inter.h p_enemy.h m_random.h \ + s_sound.h sounds.h d_event.h) + +$(O)/p_setup.o: $(addprefix src/, p_setup.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + m_bbox.h m_argv.h g_game.h d_event.h w_wad.h r_main.h r_data.h \ + r_defs.h r_state.h r_things.h p_maputl.h p_map.h p_setup.h p_spec.h \ + p_tick.h p_enemy.h s_sound.h) + +$(O)/p_sight.o: $(addprefix src/, p_sight.c r_main.h d_player.h d_items.h doomdef.h z_zone.h \ + m_swap.h version.h p_pspr.h m_fixed.h i_system.h d_ticcmd.h \ + doomtype.h tables.h info.h d_think.h p_mobj.h doomdata.h r_data.h \ + r_defs.h r_state.h p_maputl.h p_setup.h m_bbox.h) + +$(O)/p_spec.o: $(addprefix src/, p_spec.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h p_spec.h \ + r_defs.h p_tick.h p_setup.h m_random.h d_englsh.h m_argv.h w_wad.h \ + r_main.h r_data.h r_state.h p_maputl.h p_map.h g_game.h d_event.h \ + p_inter.h s_sound.h sounds.h m_bbox.h d_deh.h) + +$(O)/p_switch.o: $(addprefix src/, p_switch.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + w_wad.h r_main.h r_data.h r_defs.h r_state.h p_spec.h g_game.h \ + d_event.h s_sound.h sounds.h) + +$(O)/p_mobj.o: $(addprefix src/, p_mobj.c doomdef.h z_zone.h m_swap.h version.h doomstat.h \ + doomdata.h doomtype.h d_net.h d_player.h d_items.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h m_random.h \ + r_main.h r_data.h r_defs.h r_state.h p_maputl.h p_map.h p_tick.h \ + sounds.h st_stuff.h d_event.h hu_stuff.h s_sound.h g_game.h) + +$(O)/p_telept.o: $(addprefix src/, p_telept.c doomdef.h z_zone.h m_swap.h version.h p_spec.h \ + r_defs.h m_fixed.h i_system.h d_ticcmd.h doomtype.h d_think.h p_user.h \ + p_mobj.h tables.h doomdata.h info.h d_player.h d_items.h p_pspr.h \ + p_maputl.h p_map.h r_main.h r_data.h r_state.h p_tick.h s_sound.h \ + sounds.h) + +$(O)/p_tick.o: $(addprefix src/, p_tick.c z_zone.h doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h p_user.h \ + p_spec.h r_defs.h p_tick.h) + +$(O)/p_saveg.o: $(addprefix src/, p_saveg.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + r_main.h r_data.h r_defs.h r_state.h p_maputl.h p_spec.h p_tick.h \ + p_saveg.h m_random.h am_map.h d_event.h p_enemy.h) + +$(O)/p_user.o: $(addprefix src/, p_user.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h d_event.h \ + r_main.h r_data.h r_defs.h r_state.h p_map.h p_spec.h p_user.h) + +$(O)/r_bsp.o: $(addprefix src/, r_bsp.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h m_bbox.h \ + r_main.h r_data.h r_defs.h r_state.h r_segs.h r_plane.h r_things.h) + +$(O)/r_data.o: $(addprefix src/, r_data.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h w_wad.h \ + r_main.h r_data.h r_defs.h r_state.h r_sky.h) + +$(O)/r_draw.o: $(addprefix src/, r_draw.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h w_wad.h \ + r_main.h r_data.h r_defs.h r_state.h v_video.h) + +$(O)/r_main.o: $(addprefix src/, r_main.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h r_data.h \ + r_defs.h r_state.h r_main.h r_bsp.h r_segs.h r_plane.h r_things.h \ + r_draw.h m_bbox.h r_sky.h v_video.h) + +$(O)/r_plane.o: $(addprefix src/, r_plane.c z_zone.h i_system.h d_ticcmd.h doomtype.h w_wad.h \ + doomdef.h m_swap.h version.h doomstat.h doomdata.h d_net.h d_player.h \ + d_items.h p_pspr.h m_fixed.h tables.h info.h d_think.h p_mobj.h \ + r_plane.h r_data.h r_defs.h r_state.h r_main.h r_bsp.h r_segs.h \ + r_things.h r_draw.h r_sky.h) + +$(O)/r_segs.o: $(addprefix src/, r_segs.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h r_main.h \ + r_data.h r_defs.h r_state.h r_bsp.h r_plane.h r_things.h r_draw.h \ + w_wad.h) + +$(O)/r_sky.o: $(addprefix src/, r_sky.c r_sky.h m_fixed.h i_system.h d_ticcmd.h doomtype.h) + +$(O)/r_things.o: $(addprefix src/, r_things.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + w_wad.h r_main.h r_data.h r_defs.h r_state.h r_bsp.h r_segs.h \ + r_draw.h r_things.h) + +$(O)/w_wad.o: $(addprefix src/, w_wad.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h w_wad.h) + +$(O)/wi_stuff.o: $(addprefix src/, wi_stuff.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + m_random.h w_wad.h g_game.h d_event.h r_main.h r_data.h r_defs.h \ + r_state.h v_video.h wi_stuff.h s_sound.h sounds.h) + +$(O)/v_video.o: $(addprefix src/, v_video.c doomdef.h z_zone.h m_swap.h version.h r_main.h \ + d_player.h d_items.h p_pspr.h m_fixed.h i_system.h d_ticcmd.h \ + doomtype.h tables.h info.h d_think.h p_mobj.h doomdata.h r_data.h \ + r_defs.h r_state.h m_bbox.h w_wad.h v_video.h) + +$(O)/st_lib.o: $(addprefix src/, st_lib.c doomdef.h z_zone.h m_swap.h version.h v_video.h \ + doomtype.h r_data.h r_defs.h m_fixed.h i_system.h d_ticcmd.h \ + d_think.h p_mobj.h tables.h doomdata.h info.h r_state.h d_player.h \ + d_items.h p_pspr.h w_wad.h st_stuff.h d_event.h st_lib.h r_main.h \ + r_bsp.h r_segs.h r_plane.h r_things.h r_draw.h) + +$(O)/st_stuff.o: $(addprefix src/, st_stuff.c doomdef.h z_zone.h m_swap.h version.h \ + doomstat.h doomdata.h doomtype.h d_net.h d_player.h d_items.h \ + p_pspr.h m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h \ + p_mobj.h m_random.h i_video.h w_wad.h st_stuff.h d_event.h st_lib.h \ + r_defs.h v_video.h r_data.h r_state.h r_main.h am_map.h m_cheat.h \ + s_sound.h sounds.h dstrings.h d_englsh.h) + +$(O)/hu_stuff.o: $(addprefix src/, hu_stuff.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + hu_stuff.h d_event.h hu_lib.h r_defs.h v_video.h r_data.h r_state.h \ + st_stuff.h w_wad.h s_sound.h dstrings.h d_englsh.h sounds.h d_deh.h) + +$(O)/hu_lib.o: $(addprefix src/, hu_lib.c doomdef.h z_zone.h m_swap.h version.h v_video.h \ + doomtype.h r_data.h r_defs.h m_fixed.h i_system.h d_ticcmd.h \ + d_think.h p_mobj.h tables.h doomdata.h info.h r_state.h d_player.h \ + d_items.h p_pspr.h hu_lib.h r_main.h r_bsp.h r_segs.h r_plane.h \ + r_things.h r_draw.h) + +$(O)/s_sound.o: $(addprefix src/, s_sound.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + s_sound.h i_sound.h sounds.h r_main.h r_data.h r_defs.h r_state.h \ + m_random.h w_wad.h) + +$(O)/z_zone.o: $(addprefix src/, z_zone.c z_zone.h doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h) + +$(O)/info.o: $(addprefix src/, info.c doomdef.h z_zone.h m_swap.h version.h sounds.h \ + m_fixed.h i_system.h d_ticcmd.h doomtype.h p_mobj.h tables.h \ + d_think.h doomdata.h info.h w_wad.h) + +$(O)/sounds.o: $(addprefix src/, sounds.c doomtype.h sounds.h) + +$(O)/mmus2mid.o: $(addprefix src/, mmus2mid.c mmus2mid.h z_zone.h) + +$(O)/i_main.o: $(addprefix src/, i_main.c doomdef.h z_zone.h m_swap.h version.h m_argv.h \ + d_main.h d_event.h doomtype.h i_system.h d_ticcmd.h) + +$(O)/p_genlin.o: $(addprefix src/, p_genlin.c r_main.h d_player.h d_items.h doomdef.h \ + z_zone.h m_swap.h version.h p_pspr.h m_fixed.h i_system.h d_ticcmd.h \ + doomtype.h tables.h info.h d_think.h p_mobj.h doomdata.h r_data.h \ + r_defs.h r_state.h p_spec.h p_tick.h m_random.h s_sound.h sounds.h) + +$(O)/d_deh.o: $(addprefix src/, d_deh.c doomdef.h z_zone.h m_swap.h version.h doomstat.h \ + doomdata.h doomtype.h d_net.h d_player.h d_items.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h sounds.h \ + m_cheat.h p_inter.h g_game.h d_event.h dstrings.h d_englsh.h) + +$(O)/lprintf.o: $(addprefix src/, lprintf.c lprintf.h) + +$(O)/version.o: $(addprefix src/, version.c version.h z_zone.h) + +# Allegro patches required for Boom to function satisfactorily + +$(O)/emu8kmid.o: $(addprefix src/, emu8kmid.c emu8k.h internal.h interndj.h allegro.h) + +$(O)/keyboard.o: $(addprefix src/, keyboard.c internal.h interndj.h allegro.h) + +# bin2c utility + +bin2c: $(O)/bin2c.exe + $(CP) $(O)\bin2c.exe . + +$(O)/bin2c.exe: $(O)/bin2c.o + $(CC) $(CFLAGS) $(LDFLAGS) $(O)/bin2c.o -o $@ $(LIBS) + +$(O)/bin2c.o: bin2c.c + +# DCK support files + +dckboom: dckboom.zip + +dckboom.zip: doom17.dat doom19.dat watermap.wad dckboom.txt + pkzip -a -Ex dckboom.zip doom17.dat doom19.dat watermap.wad dckboom.txt + +############################################################################### +# $Log: MAKEFILE.DOS,v $ +# Revision 1.1 2000/04/09 17:52:04 proff_fs +# Initial revision +# +# Revision 1.40 1998/10/17 03:11:37 jim +# Suppressed if/else warnings +# +# Revision 1.39 1998/09/07 20:12:32 jim +# Logical output routine added +# +# Revision 1.38 1998/05/18 22:59:22 killough +# Update p_lights.o depedencies +# +# Revision 1.37 1998/05/16 09:41:24 jim +# formatted net files, installed temp switch for testing Stan/Lee's version +# +# Revision 1.36 1998/05/15 00:35:40 killough +# Remove p_tick.h dependence from i_main.o +# +# Revision 1.35 1998/05/13 22:58:58 killough +# Restore Doom bug compatibility for demos +# +# Revision 1.34 1998/05/12 12:47:35 phares +# Removed OVER_UNDER code +# +# Revision 1.33 1998/05/10 23:43:03 killough +# Add p_user.h to p_user.o, p_telept.o dependencies +# +# Revision 1.32 1998/05/05 16:29:20 phares +# Removed RECOIL and OPT_BOBBING defines +# +# Revision 1.31 1998/05/03 23:20:15 killough +# Reflect current dependencies, beautify +# +# Revision 1.30 1998/04/27 02:25:42 killough +# Fix missing tabs after fixing cvsto script +# +# Revision 1.26 1998/04/14 08:14:50 killough +# remove obsolete ADAPTIVE_GAMETICS +# +# Revision 1.25 1998/04/13 13:03:22 killough +# Add -DADAPTIVE_GAMETIC +# +# Revision 1.24 1998/04/13 09:43:20 killough +# Add watermap.wad to dckboom.zip +# +# Revision 1.23 1998/04/12 02:07:37 killough +# Add r_segs.c dependency for translucency +# +# Revision 1.22 1998/04/09 09:18:52 thldrmn +# Added dependency of d_main.c on d_deh.h +# +# Revision 1.21 1998/03/29 21:40:17 jim +# Fix to DEH text problem +# +# Revision 1.20 1998/03/23 15:24:21 phares +# Changed pushers to linedef control +# +# Revision 1.19 1998/03/23 03:23:47 killough +# Add dckboom, bin2c targets, add new dependencies +# +# Revision 1.18 1998/03/20 00:29:51 phares +# Changed friction to linedef control +# +# Revision 1.17 1998/03/16 12:32:18 killough +# Add -m486 flag for better 486 codegen +# +# Revision 1.16 1998/03/11 17:48:20 phares +# New cheats, clean help code, friction fix +# +# Revision 1.15 1998/03/10 07:15:05 jim +# Initial DEH support added, minus text +# +# Revision 1.14 1998/03/09 07:17:18 killough +# Turn on instrumenting in debug builds +# +# Revision 1.13 1998/03/04 21:02:24 phares +# Dynamic HELP screen +# +# Revision 1.12 1998/03/02 11:38:42 killough +# Add dependencies, clarify CFLAGS_debug +# +# Revision 1.11 1998/02/27 08:10:05 phares +# Added optional player bobbing +# +# Revision 1.10 1998/02/24 08:46:08 phares +# Pushers, recoil, new friction, and over/under work +# +# Revision 1.9 1998/02/23 04:42:54 killough +# Correct depedencies +# +# Revision 1.8 1998/02/18 01:00:11 jim +# Addition of HUD +# +# Revision 1.7 1998/02/17 05:41:34 killough +# Add drawspan.s, drawcol.s, fix some dependencies +# +# Revision 1.6 1998/02/08 05:35:13 jim +# Added generalized linedef types +# +# Revision 1.5 1998/02/02 13:26:04 killough +# Add version information files +# +# Revision 1.4 1998/01/30 14:45:16 jim +# Makefile changed to build BOOM.EXE +# +# Revision 1.3 1998/01/26 19:31:15 phares +# First rev w/o ^Ms +# +# Revision 1.2 1998/01/26 05:56:52 killough +# Add PPro blit routine +# +# Revision 1.1.1.1 1998/01/19 14:02:52 rand +# Lee's Jan 19 sources +# +############################################################################### diff --git a/prboom/MAKFILES/MAKEFILE.M32 b/prboom/MAKFILES/MAKEFILE.M32 new file mode 100644 index 000000000..7e5fae35b --- /dev/null +++ b/prboom/MAKFILES/MAKEFILE.M32 @@ -0,0 +1,626 @@ +################################################################ +# +# $Id: MAKEFILE.M32,v 1.1 2000/04/09 17:52:14 proff_fs Exp $ +# +################################################################ + +CC = gcc + +# the command you use to delete files +RM = rm -f + +# the command you use to copy files +CP = cp + +# options common to all builds +CFLAGS_common = -mwindows -Wall -Winline -DNOASM + +# debug options +CFLAGS_debug = -g -O2 -DRANGECHECK -DINSTRUMENTED -DCHECKHEAP +#CFLAGS_debug = -g -O2 -DRANGECHECK -DINSTRUMENTED +LDFLAGS_debug = + +# optimized (release) options +CFLAGS_release = -O3 -ffast-math -fomit-frame-pointer -m486 +LDFLAGS_release = -s + +# new features; comment out what you don't want at the moment +#CFLAGS_newfeatures = +CFLAGS_newfeatures = + +# libraries to link in +LIBS = -lmingw32 -lgcc -lmoldname -lcrtdll -luser32 -lgdi32 -lcomdlg32 -lkernel32 -lwsock32 -lwinmm -lddraw -ldsound + +# this selects flags based on debug and release tagets +mode = release +CFLAGS = $(CFLAGS_common) $(CFLAGS_$(mode)) $(CFLAGS_newfeatures) +LDFLAGS = $(LDFLAGS_common) $(LDFLAGS_$(mode)) + +# subdirectory for objects (depends on target, to allow you +# to build debug and release versions simultaneously) + +O=$(O_$(mode)) +O_release=obj/mwin32 +O_debug=objdebug/mwin32 + +B=$(B_$(mode)) +B_release=bin/mwin32 +B_debug=bindebug/mwin32 + +# object files +OBJS= $(O)/doomdef.o \ + $(O)/doomstat.o \ + $(O)/dstrings.o \ + $(O)/i_system.o \ + $(O)/i_sound.o \ + $(O)/i_video.o \ + $(O)/i_net.o \ + $(O)/tables.o \ + $(O)/f_finale.o \ + $(O)/f_wipe.o \ + $(O)/d_main.o \ + $(O)/d_net.o \ + $(O)/d_items.o \ + $(O)/g_game.o \ + $(O)/m_menu.o \ + $(O)/m_misc.o \ + $(O)/m_argv.o \ + $(O)/m_bbox.o \ + $(O)/m_cheat.o \ + $(O)/m_random.o \ + $(O)/am_map.o \ + $(O)/p_ceilng.o \ + $(O)/p_doors.o \ + $(O)/p_enemy.o \ + $(O)/p_floor.o \ + $(O)/p_inter.o \ + $(O)/p_lights.o \ + $(O)/p_map.o \ + $(O)/p_maputl.o \ + $(O)/p_plats.o \ + $(O)/p_pspr.o \ + $(O)/p_setup.o \ + $(O)/p_sight.o \ + $(O)/p_spec.o \ + $(O)/p_switch.o \ + $(O)/p_mobj.o \ + $(O)/p_telept.o \ + $(O)/p_tick.o \ + $(O)/p_saveg.o \ + $(O)/p_user.o \ + $(O)/r_bsp.o \ + $(O)/r_data.o \ + $(O)/r_draw.o \ + $(O)/r_main.o \ + $(O)/r_plane.o \ + $(O)/r_segs.o \ + $(O)/r_sky.o \ + $(O)/r_things.o \ + $(O)/w_wad.o \ + $(O)/wi_stuff.o \ + $(O)/v_video.o \ + $(O)/st_lib.o \ + $(O)/st_stuff.o \ + $(O)/hu_conf.o \ + $(O)/hu_stuff.o \ + $(O)/hu_lib.o \ + $(O)/s_sound.o \ + $(O)/z_zone.o \ + $(O)/info.o \ + $(O)/sounds.o \ + $(O)/mmus2mid.o \ + $(O)/i_main.o \ + $(O)/p_genlin.o \ + $(O)/d_deh.o \ + $(O)/lprintf.o \ + $(O)/winstuff.o + +boom doom release all: $(B)/mprboom.exe + +debug: + $(MAKE) mode=debug + +clean: + $(RM) boom.exe + $(RM) $(B_release)/*.exe + $(RM) $(B_debug)/*.exe + $(RM) $(O_release)/*.o + $(RM) $(O_debug)/*.o + +$(B)/mprboom.exe: $(OBJS) $(O)/version.o + $(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) $(O)/version.o -o $@ $(LIBS) + $(RM) $(O)/version.o + +$(O)/%.o: $(addprefix src/, %.c) + $(CC) $(CFLAGS) -c $< -o $@ + +$(O)/%.o: $(addprefix src/, %.s) + $(CC) $(CFLAGS) -c $< -o $@ + +# Very important that all sources #include this one +$(OBJS): $(addprefix src/, z_zone.h) + +# If you change the makefile, everything should rebuild +# $(OBJS): Makefile + +# individual file depedencies follow + +$(O)/doomdef.o: $(addprefix src/, doomdef.c doomdef.h z_zone.h m_swap.h version.h) + +$(O)/doomstat.o: $(addprefix src/, doomstat.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h) + +$(O)/dstrings.o: $(addprefix src/, dstrings.c dstrings.h d_englsh.h) + +$(O)/i_system.o: $(addprefix src/, i_system.c i_system.h d_ticcmd.h doomtype.h i_sound.h \ + sounds.h doomstat.h doomdata.h d_net.h d_player.h d_items.h doomdef.h \ + z_zone.h m_swap.h version.h p_pspr.h m_fixed.h tables.h info.h \ + d_think.h p_mobj.h m_misc.h g_game.h d_event.h w_wad.h) + +$(O)/i_sound.o: $(addprefix src/, i_sound.c z_zone.h doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h mmus2mid.h \ + i_sound.h sounds.h w_wad.h g_game.h d_event.h d_main.h) + +$(O)/i_video.o: $(addprefix src/, i_video.c z_zone.h doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h v_video.h \ + r_data.h r_defs.h r_state.h d_main.h d_event.h) + +$(O)/i_net.o: $(addprefix src/, i_net.c z_zone.h doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h d_event.h \ + m_argv.h i_net.h) + +$(O)/tables.o: $(addprefix src/, tables.c tables.h m_fixed.h i_system.h d_ticcmd.h doomtype.h) + +$(O)/f_finale.o: $(addprefix src/, f_finale.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + d_event.h v_video.h r_data.h r_defs.h r_state.h w_wad.h s_sound.h \ + sounds.h dstrings.h d_englsh.h d_deh.h hu_stuff.h) + +$(O)/f_wipe.o: $(addprefix src/, f_wipe.c doomdef.h z_zone.h m_swap.h version.h i_video.h \ + doomtype.h v_video.h r_data.h r_defs.h m_fixed.h i_system.h \ + d_ticcmd.h d_think.h p_mobj.h tables.h doomdata.h info.h r_state.h \ + d_player.h d_items.h p_pspr.h m_random.h f_wipe.h) + +$(O)/d_main.o: $(addprefix src/, d_main.c doomdef.h z_zone.h m_swap.h version.h doomstat.h \ + doomdata.h doomtype.h d_net.h d_player.h d_items.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h dstrings.h \ + d_englsh.h sounds.h w_wad.h s_sound.h v_video.h r_data.h r_defs.h \ + r_state.h f_finale.h d_event.h f_wipe.h m_argv.h m_misc.h m_menu.h \ + i_sound.h i_video.h g_game.h hu_stuff.h wi_stuff.h st_stuff.h \ + am_map.h p_setup.h r_draw.h r_main.h d_main.h d_deh.h) + +$(O)/d_net.o: $(addprefix src/, d_net.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h m_menu.h \ + d_event.h i_video.h i_net.h g_game.h) + +$(O)/d_items.o: $(addprefix src/, d_items.c info.h d_think.h d_items.h doomdef.h z_zone.h \ + m_swap.h version.h) + +$(O)/g_game.o: $(addprefix src/, g_game.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h f_finale.h \ + d_event.h m_argv.h m_misc.h m_menu.h m_random.h p_setup.h p_saveg.h \ + p_tick.h d_main.h wi_stuff.h hu_stuff.h st_stuff.h am_map.h w_wad.h \ + r_main.h r_data.h r_defs.h r_state.h r_draw.h p_map.h s_sound.h \ + dstrings.h d_englsh.h sounds.h r_sky.h d_deh.h p_inter.h g_game.h) + +$(O)/m_menu.o: $(addprefix src/, m_menu.c doomdef.h z_zone.h m_swap.h version.h doomstat.h \ + doomdata.h doomtype.h d_net.h d_player.h d_items.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h dstrings.h \ + d_englsh.h d_main.h d_event.h i_video.h v_video.h r_data.h r_defs.h \ + r_state.h w_wad.h r_main.h hu_stuff.h g_game.h s_sound.h sounds.h \ + m_menu.h d_deh.h m_misc.h) + +$(O)/m_misc.o: $(addprefix src/, m_misc.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h m_argv.h \ + g_game.h d_event.h m_menu.h am_map.h w_wad.h i_sound.h sounds.h \ + i_video.h v_video.h r_data.h r_defs.h r_state.h hu_stuff.h st_stuff.h \ + dstrings.h d_englsh.h m_misc.h s_sound.h) + +$(O)/m_argv.o: $(addprefix src/, m_argv.c) + +$(O)/m_bbox.o: $(addprefix src/, m_bbox.c m_bbox.h z_zone.h m_fixed.h i_system.h d_ticcmd.h \ + doomtype.h) + +$(O)/m_cheat.o: $(addprefix src/, m_cheat.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + g_game.h d_event.h r_data.h r_defs.h r_state.h p_inter.h m_cheat.h \ + m_argv.h s_sound.h sounds.h dstrings.h d_englsh.h d_deh.h) + +$(O)/m_random.o: $(addprefix src/, m_random.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + m_random.h) + +$(O)/am_map.o: $(addprefix src/, am_map.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h st_stuff.h \ + d_event.h r_main.h r_data.h r_defs.h r_state.h p_setup.h p_maputl.h \ + w_wad.h v_video.h p_spec.h am_map.h dstrings.h d_englsh.h d_deh.h) + +$(O)/p_ceilng.o: $(addprefix src/, p_ceilng.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + r_main.h r_data.h r_defs.h r_state.h p_spec.h p_tick.h s_sound.h \ + sounds.h) + +$(O)/p_doors.o: $(addprefix src/, p_doors.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + r_main.h r_data.h r_defs.h r_state.h p_spec.h p_tick.h s_sound.h \ + sounds.h dstrings.h d_englsh.h d_deh.h) + +$(O)/p_enemy.o: $(addprefix src/, p_enemy.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + m_random.h r_main.h r_data.h r_defs.h r_state.h p_maputl.h p_map.h \ + p_setup.h p_spec.h s_sound.h sounds.h p_inter.h g_game.h d_event.h \ + p_enemy.h) + +$(O)/p_floor.o: $(addprefix src/, p_floor.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + r_main.h r_data.h r_defs.h r_state.h p_map.h p_spec.h p_tick.h \ + s_sound.h sounds.h) + +$(O)/p_inter.o: $(addprefix src/, p_inter.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + dstrings.h d_englsh.h m_random.h am_map.h d_event.h r_main.h r_data.h \ + r_defs.h r_state.h s_sound.h sounds.h d_deh.h p_inter.h) + +$(O)/p_lights.o: $(addprefix src/, p_lights.c doomdef.h z_zone.h m_swap.h version.h \ + m_random.h doomtype.h r_main.h d_player.h d_items.h p_pspr.h d_net.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + doomdata.h r_data.h r_defs.h r_state.h p_spec.h p_tick.h doomstat.h) + +$(O)/p_map.o: $(addprefix src/, p_map.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h r_main.h \ + r_data.h r_defs.h r_state.h p_maputl.h p_map.h p_setup.h p_spec.h \ + s_sound.h sounds.h p_inter.h m_random.h m_bbox.h) + +$(O)/p_maputl.o: $(addprefix src/, p_maputl.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + m_bbox.h r_main.h r_data.h r_defs.h r_state.h p_maputl.h p_map.h \ + p_setup.h) + +$(O)/p_plats.o: $(addprefix src/, p_plats.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + m_random.h r_main.h r_data.h r_defs.h r_state.h p_spec.h p_tick.h \ + s_sound.h sounds.h) + +$(O)/p_pspr.o: $(addprefix src/, p_pspr.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h r_main.h \ + r_data.h r_defs.h r_state.h p_map.h p_inter.h p_enemy.h m_random.h \ + s_sound.h sounds.h d_event.h) + +$(O)/p_setup.o: $(addprefix src/, p_setup.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + m_bbox.h m_argv.h g_game.h d_event.h w_wad.h r_main.h r_data.h \ + r_defs.h r_state.h r_things.h p_maputl.h p_map.h p_setup.h p_spec.h \ + p_tick.h p_enemy.h s_sound.h) + +$(O)/p_sight.o: $(addprefix src/, p_sight.c r_main.h d_player.h d_items.h doomdef.h z_zone.h \ + m_swap.h version.h p_pspr.h m_fixed.h i_system.h d_ticcmd.h \ + doomtype.h tables.h info.h d_think.h p_mobj.h doomdata.h r_data.h \ + r_defs.h r_state.h p_maputl.h p_setup.h m_bbox.h) + +$(O)/p_spec.o: $(addprefix src/, p_spec.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h p_spec.h \ + r_defs.h p_tick.h p_setup.h m_random.h d_englsh.h m_argv.h w_wad.h \ + r_main.h r_data.h r_state.h p_maputl.h p_map.h g_game.h d_event.h \ + p_inter.h s_sound.h sounds.h m_bbox.h d_deh.h) + +$(O)/p_switch.o: $(addprefix src/, p_switch.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + w_wad.h r_main.h r_data.h r_defs.h r_state.h p_spec.h g_game.h \ + d_event.h s_sound.h sounds.h) + +$(O)/p_mobj.o: $(addprefix src/, p_mobj.c doomdef.h z_zone.h m_swap.h version.h doomstat.h \ + doomdata.h doomtype.h d_net.h d_player.h d_items.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h m_random.h \ + r_main.h r_data.h r_defs.h r_state.h p_maputl.h p_map.h p_tick.h \ + sounds.h st_stuff.h d_event.h hu_stuff.h s_sound.h g_game.h) + +$(O)/p_telept.o: $(addprefix src/, p_telept.c doomdef.h z_zone.h m_swap.h version.h p_spec.h \ + r_defs.h m_fixed.h i_system.h d_ticcmd.h doomtype.h d_think.h p_user.h \ + p_mobj.h tables.h doomdata.h info.h d_player.h d_items.h p_pspr.h \ + p_maputl.h p_map.h r_main.h r_data.h r_state.h p_tick.h s_sound.h \ + sounds.h) + +$(O)/p_tick.o: $(addprefix src/, p_tick.c z_zone.h doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h p_user.h \ + p_spec.h r_defs.h p_tick.h) + +$(O)/p_saveg.o: $(addprefix src/, p_saveg.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + r_main.h r_data.h r_defs.h r_state.h p_maputl.h p_spec.h p_tick.h \ + p_saveg.h m_random.h am_map.h d_event.h p_enemy.h) + +$(O)/p_user.o: $(addprefix src/, p_user.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h d_event.h \ + r_main.h r_data.h r_defs.h r_state.h p_map.h p_spec.h p_user.h) + +$(O)/r_bsp.o: $(addprefix src/, r_bsp.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h m_bbox.h \ + r_main.h r_data.h r_defs.h r_state.h r_segs.h r_plane.h r_things.h) + +$(O)/r_data.o: $(addprefix src/, r_data.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h w_wad.h \ + r_main.h r_data.h r_defs.h r_state.h r_sky.h) + +$(O)/r_draw.o: $(addprefix src/, r_draw.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h w_wad.h \ + r_main.h r_data.h r_defs.h r_state.h v_video.h) + +$(O)/r_main.o: $(addprefix src/, r_main.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h r_data.h \ + r_defs.h r_state.h r_main.h r_bsp.h r_segs.h r_plane.h r_things.h \ + r_draw.h m_bbox.h r_sky.h v_video.h) + +$(O)/r_plane.o: $(addprefix src/, r_plane.c z_zone.h i_system.h d_ticcmd.h doomtype.h w_wad.h \ + doomdef.h m_swap.h version.h doomstat.h doomdata.h d_net.h d_player.h \ + d_items.h p_pspr.h m_fixed.h tables.h info.h d_think.h p_mobj.h \ + r_plane.h r_data.h r_defs.h r_state.h r_main.h r_bsp.h r_segs.h \ + r_things.h r_draw.h r_sky.h) + +$(O)/r_segs.o: $(addprefix src/, r_segs.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h r_main.h \ + r_data.h r_defs.h r_state.h r_bsp.h r_plane.h r_things.h r_draw.h \ + w_wad.h) + +$(O)/r_sky.o: $(addprefix src/, r_sky.c r_sky.h m_fixed.h i_system.h d_ticcmd.h doomtype.h) + +$(O)/r_things.o: $(addprefix src/, r_things.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + w_wad.h r_main.h r_data.h r_defs.h r_state.h r_bsp.h r_segs.h \ + r_draw.h r_things.h) + +$(O)/w_wad.o: $(addprefix src/, w_wad.c doomstat.h doomdata.h doomtype.h d_net.h d_player.h \ + d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h w_wad.h) + +$(O)/wi_stuff.o: $(addprefix src/, wi_stuff.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + m_random.h w_wad.h g_game.h d_event.h r_main.h r_data.h r_defs.h \ + r_state.h v_video.h wi_stuff.h s_sound.h sounds.h) + +$(O)/v_video.o: $(addprefix src/, v_video.c doomdef.h z_zone.h m_swap.h version.h r_main.h \ + d_player.h d_items.h p_pspr.h m_fixed.h i_system.h d_ticcmd.h \ + doomtype.h tables.h info.h d_think.h p_mobj.h doomdata.h r_data.h \ + r_defs.h r_state.h m_bbox.h w_wad.h v_video.h) + +$(O)/st_lib.o: $(addprefix src/, st_lib.c doomdef.h z_zone.h m_swap.h version.h v_video.h \ + doomtype.h r_data.h r_defs.h m_fixed.h i_system.h d_ticcmd.h \ + d_think.h p_mobj.h tables.h doomdata.h info.h r_state.h d_player.h \ + d_items.h p_pspr.h w_wad.h st_stuff.h d_event.h st_lib.h r_main.h \ + r_bsp.h r_segs.h r_plane.h r_things.h r_draw.h) + +$(O)/st_stuff.o: $(addprefix src/, st_stuff.c doomdef.h z_zone.h m_swap.h version.h \ + doomstat.h doomdata.h doomtype.h d_net.h d_player.h d_items.h \ + p_pspr.h m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h \ + p_mobj.h m_random.h i_video.h w_wad.h st_stuff.h d_event.h st_lib.h \ + r_defs.h v_video.h r_data.h r_state.h r_main.h am_map.h m_cheat.h \ + s_sound.h sounds.h dstrings.h d_englsh.h) + +$(O)/hu_stuff.o: $(addprefix src/, hu_stuff.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + hu_stuff.h d_event.h hu_lib.h r_defs.h v_video.h r_data.h r_state.h \ + st_stuff.h w_wad.h s_sound.h dstrings.h d_englsh.h sounds.h d_deh.h) + +$(O)/hu_conf.o: $(addprefix src/, hu_conf.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + hu_stuff.h d_event.h hu_lib.h r_defs.h v_video.h r_data.h r_state.h \ + st_stuff.h w_wad.h s_sound.h dstrings.h d_englsh.h sounds.h d_deh.h) + +$(O)/hu_lib.o: $(addprefix src/, hu_lib.c doomdef.h z_zone.h m_swap.h version.h v_video.h \ + doomtype.h r_data.h r_defs.h m_fixed.h i_system.h d_ticcmd.h \ + d_think.h p_mobj.h tables.h doomdata.h info.h r_state.h d_player.h \ + d_items.h p_pspr.h hu_lib.h r_main.h r_bsp.h r_segs.h r_plane.h \ + r_things.h r_draw.h) + +$(O)/s_sound.o: $(addprefix src/, s_sound.c doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h z_zone.h m_swap.h version.h p_pspr.h \ + m_fixed.h i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h \ + s_sound.h i_sound.h sounds.h r_main.h r_data.h r_defs.h r_state.h \ + m_random.h w_wad.h) + +$(O)/z_zone.o: $(addprefix src/, z_zone.c z_zone.h doomstat.h doomdata.h doomtype.h d_net.h \ + d_player.h d_items.h doomdef.h m_swap.h version.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h) + +$(O)/info.o: $(addprefix src/, info.c doomdef.h z_zone.h m_swap.h version.h sounds.h \ + m_fixed.h i_system.h d_ticcmd.h doomtype.h p_mobj.h tables.h \ + d_think.h doomdata.h info.h w_wad.h) + +$(O)/sounds.o: $(addprefix src/, sounds.c doomtype.h sounds.h) + +$(O)/mmus2mid.o: $(addprefix src/, mmus2mid.c mmus2mid.h z_zone.h) + +$(O)/i_main.o: $(addprefix src/, i_main.c doomdef.h z_zone.h m_swap.h version.h m_argv.h \ + d_main.h d_event.h doomtype.h i_system.h d_ticcmd.h) + +$(O)/p_genlin.o: $(addprefix src/, p_genlin.c r_main.h d_player.h d_items.h doomdef.h \ + z_zone.h m_swap.h version.h p_pspr.h m_fixed.h i_system.h d_ticcmd.h \ + doomtype.h tables.h info.h d_think.h p_mobj.h doomdata.h r_data.h \ + r_defs.h r_state.h p_spec.h p_tick.h m_random.h s_sound.h sounds.h) + +$(O)/d_deh.o: $(addprefix src/, d_deh.c doomdef.h z_zone.h m_swap.h version.h doomstat.h \ + doomdata.h doomtype.h d_net.h d_player.h d_items.h p_pspr.h m_fixed.h \ + i_system.h d_ticcmd.h tables.h info.h d_think.h p_mobj.h sounds.h \ + m_cheat.h p_inter.h g_game.h d_event.h dstrings.h d_englsh.h) + +$(O)/lprintf.o: $(addprefix src/, lprintf.c lprintf.h) + +$(O)/version.o: $(addprefix src/, version.c version.h z_zone.h) + +$(O)/winstuff.o: $(addprefix src/, winstuff.c doomdef.h m_argv.h d_event.h \ + d_main.h v_video.h i_system.h) + +# Allegro patches required for Boom to function satisfactorily + +$(O)/emu8kmid.o: $(addprefix src/, emu8kmid.c emu8k.h internal.h interndj.h allegro.h) + +$(O)/keyboard.o: $(addprefix src/, keyboard.c internal.h interndj.h allegro.h) + +# bin2c utility + +bin2c: $(O)/bin2c.exe + $(CP) $(O)\bin2c.exe . + +$(O)/bin2c.exe: $(O)/bin2c.o + $(CC) $(CFLAGS) $(LDFLAGS) $(O)/bin2c.o -o $@ $(LIBS) + +$(O)/bin2c.o: bin2c.c + +# DCK support files + +dckboom: dckboom.zip + +dckboom.zip: doom17.dat doom19.dat watermap.wad dckboom.txt + pkzip -a -Ex dckboom.zip doom17.dat doom19.dat watermap.wad dckboom.txt + +############################################################################### +# $Log: MAKEFILE.M32,v $ +# Revision 1.1 2000/04/09 17:52:14 proff_fs +# Initial revision +# +# Revision 1.40 1998/10/17 03:11:37 jim +# Suppressed if/else warnings +# +# Revision 1.39 1998/09/07 20:12:32 jim +# Logical output routine added +# +# Revision 1.38 1998/05/18 22:59:22 killough +# Update p_lights.o depedencies +# +# Revision 1.37 1998/05/16 09:41:24 jim +# formatted net files, installed temp switch for testing Stan/Lee's version +# +# Revision 1.36 1998/05/15 00:35:40 killough +# Remove p_tick.h dependence from i_main.o +# +# Revision 1.35 1998/05/13 22:58:58 killough +# Restore Doom bug compatibility for demos +# +# Revision 1.34 1998/05/12 12:47:35 phares +# Removed OVER_UNDER code +# +# Revision 1.33 1998/05/10 23:43:03 killough +# Add p_user.h to p_user.o, p_telept.o dependencies +# +# Revision 1.32 1998/05/05 16:29:20 phares +# Removed RECOIL and OPT_BOBBING defines +# +# Revision 1.31 1998/05/03 23:20:15 killough +# Reflect current dependencies, beautify +# +# Revision 1.30 1998/04/27 02:25:42 killough +# Fix missing tabs after fixing cvsto script +# +# Revision 1.26 1998/04/14 08:14:50 killough +# remove obsolete ADAPTIVE_GAMETICS +# +# Revision 1.25 1998/04/13 13:03:22 killough +# Add -DADAPTIVE_GAMETIC +# +# Revision 1.24 1998/04/13 09:43:20 killough +# Add watermap.wad to dckboom.zip +# +# Revision 1.23 1998/04/12 02:07:37 killough +# Add r_segs.c dependency for translucency +# +# Revision 1.22 1998/04/09 09:18:52 thldrmn +# Added dependency of d_main.c on d_deh.h +# +# Revision 1.21 1998/03/29 21:40:17 jim +# Fix to DEH text problem +# +# Revision 1.20 1998/03/23 15:24:21 phares +# Changed pushers to linedef control +# +# Revision 1.19 1998/03/23 03:23:47 killough +# Add dckboom, bin2c targets, add new dependencies +# +# Revision 1.18 1998/03/20 00:29:51 phares +# Changed friction to linedef control +# +# Revision 1.17 1998/03/16 12:32:18 killough +# Add -m486 flag for better 486 codegen +# +# Revision 1.16 1998/03/11 17:48:20 phares +# New cheats, clean help code, friction fix +# +# Revision 1.15 1998/03/10 07:15:05 jim +# Initial DEH support added, minus text +# +# Revision 1.14 1998/03/09 07:17:18 killough +# Turn on instrumenting in debug builds +# +# Revision 1.13 1998/03/04 21:02:24 phares +# Dynamic HELP screen +# +# Revision 1.12 1998/03/02 11:38:42 killough +# Add dependencies, clarify CFLAGS_debug +# +# Revision 1.11 1998/02/27 08:10:05 phares +# Added optional player bobbing +# +# Revision 1.10 1998/02/24 08:46:08 phares +# Pushers, recoil, new friction, and over/under work +# +# Revision 1.9 1998/02/23 04:42:54 killough +# Correct depedencies +# +# Revision 1.8 1998/02/18 01:00:11 jim +# Addition of HUD +# +# Revision 1.7 1998/02/17 05:41:34 killough +# Add drawspan.s, drawcol.s, fix some dependencies +# +# Revision 1.6 1998/02/08 05:35:13 jim +# Added generalized linedef types +# +# Revision 1.5 1998/02/02 13:26:04 killough +# Add version information files +# +# Revision 1.4 1998/01/30 14:45:16 jim +# Makefile changed to build BOOM.EXE +# +# Revision 1.3 1998/01/26 19:31:15 phares +# First rev w/o ^Ms +# +# Revision 1.2 1998/01/26 05:56:52 killough +# Add PPro blit routine +# +# Revision 1.1.1.1 1998/01/19 14:02:52 rand +# Lee's Jan 19 sources +# +############################################################################### diff --git a/prboom/MISC/COMMON.CFG b/prboom/MISC/COMMON.CFG new file mode 100644 index 000000000..6afa89275 --- /dev/null +++ b/prboom/MISC/COMMON.CFG @@ -0,0 +1,592 @@ +#Doom I, Doom II, and Ultimate Doom Common Elements File +#Included by main Configuration file for all of the above +#The Common Things List is at the *end* of this file + + +[specials] +############################################################################## +############################# Special Actions List ########################### +############################################################################## +#LineDef Types for any Doom game, version 1.666 or later. +#You can add new menus or revise existing ones; put new menu titles in double +#quotes like the existing ones. Do not make short descriptions longer then 20 +#characters (as in the pattern below.) +#Number,"-- Desc-------------", "### -- Long Desc" +"Normal" +0, "-- Normal", "-- Normal [ 0]" + +"-" +"Doors" +1, "DR Open Door", "DR Open Door, Wait 4, Close [ 1]" +31, "D1 Open Door & Stay", "D1 Open Door, Stay Open [ 31]" +999, "-", "-" +63, "SR Open Door", "SR Open Door, Wait 4, Close [ 63]" +29, "S1 Open Door", "S1 Open Door, Wait 4, Close [ 29]" +90, "WR Open Door", "WR Open Door, Wait 4, Close [ 90]" +4, "W1 Open Door", "W1 Open Door, Wait 4, Close [ 4]" +999, "-", "-" +61, "SR Open Door & Stay", "SR Open Door, Stay Open [ 61]" +103, "S1 Open Door & Stay", "S1 Open Door, Stay Open [103]" +86, "WR Open Door & Stay", "WR Open Door, Stay Open [ 86]" +2, "W1 Open Door & Stay", "W1 Open Door, Stay Open [ 2]" +46, "G1 Open Door & Stay", "G1 Open Door, Stay Open [ 46]" +999, "-", "-" +42, "SR Close Door", "SR Close Door, Lower Ceiling to Floor [ 42]" +50, "S1 Close Door", "S1 Close Door [ 50]" +75, "WR Close Door", "WR Close Door [ 75]" +3, "W1 Close Door", "W1 Close Door [ 3]" +999, "-", "-" +196, "sR Close Door 30", "sR Close Door, Opens after 30 seconds [196]" +175, "s1 Close Door 30", "s1 Close Door, Opens after 30 seconds [175]" +76, "WR Close Door 30", "WR Close Door, Opens after 30 seconds [ 76]" +16, "W1 Close Door 30", "W1 Close Door, Opens after 30 seconds [ 16]" +999, "-", "-" +26, "DR Open Blue Door", "DR Open Blue Door, Wait 4, Close [ 26]" +32, "D1 Open Blue & Stay", "D1 Open Blue Door, Stay Open [ 32]" +28, "DR Open Red Door", "DR Open Red Door, Wait 4, Close [ 28]" +33, "D1 Open Red & Stay", "D1 Open Red Door, Stay Open [ 33]" +27, "DR Open Yellow Door", "DR Open Yellow Door, Wait 4, Close [ 27]" +34, "D1 Open Yelw & Stay", "D1 Open Yellow Door, Stay Open [ 34]" + +"Doors (Fast)" +117, "DR Open Door Fast", "DR Open Door Fast, Wait 4, Close [117]" +118, "D1 Open Door F Stay", "D1 Open Door Fast, Stay Open [118]" +999, "-", "-" +114, "SR Open Door Fast", "SR Open Door Fast, Wait 4, Close [114]" +111, "S1 Open Door Fast", "S1 Open Door Fast, Wait 4, Close [111]" +105, "WR Open Door Fast", "WR Open Door Fast, Wait 4, Close [105]" +108, "W1 Open Door Fast", "W1 Open Door Fast, Wait 4, Close [108]" +999, "-", "-" +115, "SR Open Door F Stay", "SR Open Door Fast, Stay Open [115]" +112, "S1 Open Door F Stay", "S1 Open Door Fast, Stay Open [112]" +106, "WR Open Door F Stay", "WR Open Door Fast, Stay Open [106]" +109, "W1 Open Door F Stay", "W1 Open Door Fast, Stay Open [109]" +999, "-", "-" +116, "SR Close Door Fast", "SR Close Door Fast [116]" +113, "S1 Close Door Fast", "S1 Close Door Fast [113]" +107, "WR Close Door Fast", "WR Close Door Fast [107]" +110, "W1 Close Door Fast", "W1 Close Door Fast [110]" +999, "-", "-" +99, "SR Open Door Blue F", "SR Open Blue Door Fast, Stay Open [ 99]" +133, "S1 Open Door Blue F", "S1 Open Blue Door Fast, Stay Open [133]" +134, "SR Open Door Red F", "SR Open Red Door Fast, Stay Open [134]" +135, "S1 Open Door Red F", "S1 Open Red Door Fast, Stay Open [135]" +136, "SR Open Door Yelw F", "SR Open Yellow Door Fast, Stay Open [136]" +137, "S1 Open Door Yelw F", "S1 Open Yellow Door Fast, Stay Open [137]" + +"--" +"Floors (Raise/Lower to Next)" +69, "SR Raise Floor nF", "SR Raise Floor to next Floor [ 69]" +18, "S1 Raise Floor nF", "S1 Raise Floor to next Floor [ 18]" +128, "WR Raise Floor nF", "WR Raise Floor to next Floor [128]" +119, "W1 Raise Floor nF", "W1 Raise Floor to next Floor [119]" +999, "-", "-" +222, "sR Lower Floor nF", "sR Lower Floor to next Floor [222]" +221, "s1 Lower Floor nF", "s1 Lower Floor to next Floor [221]" +220, "wR Lower Floor nF", "wR Lower Floor to next Floor [220]" +219, "w1 Lower Floor nF", "w1 Lower Floor to next Floor [219]" +999, "-", "-" +132, "SR Raise Floor nFF", "SR Raise Floor to next Floor Fast [132]" +131, "S1 Raise Floor nFF", "S1 Raise Floor to next Floor Fast [131]" +129, "WR Raise Floor nFF", "WR Raise Floor to next Floor Fast [129]" +130, "W1 Raise Floor nFF", "W1 Raise Floor to next Floor Fast [130]" + +"Floors (Raise to Ceiling)" +64, "SR Set Floor LnC", "SR Set Floor to Lowest neighboring Ceiling [ 64]" +101, "S1 Set Floor LnC", "S1 Set Floor to Lowest neighboring Ceiling [101]" +91, "WR Set Floor LnC", "WR Set Floor to Lowest neighboring Ceiling [ 91]" +5, "W1 Set Floor LnC", "W1 Set Floor to Lowest neighboring Ceiling [ 5]" +24, "G1 Set Floor LnC", "G1 Set Floor to Lowest neighboring Ceiling [ 24]" +999, "-", "-" +65, "SR Set Floor 8uLnC", "SR Set Floor to 8 under Lowest neighboring Ceiling [ 65]" +55, "S1 Set Floor 8uLnC", "S1 Set Floor to 8 under Lowest neighboring Ceiling [ 55]" +94, "WR Set Floor 8uLnC", "WR Set Floor to 8 under Lowest Neighboring Ceiling [ 94]" +56, "W1 Set Floor 8uLnC", "W1 Set Floor to 8 under Lowest neighboring Ceiling [ 56]" + +"Floors (Raise Absolute)" +180, "sR Raise Floor 24", "sR Raise Floor 24 [180]" +161, "s1 Raise Floor 24", "s1 Raise Floor 24 [161]" +92, "WR Raise Floor 24", "WR Raise Floor 24 [ 92]" +58, "W1 Raise Floor 24", "W1 Raise Floor 24 [ 58]" +999, "-", "-" +179, "sR Raise Floor 24cTt", "sR Raise Floor 24, change Texture & Type [179]" +160, "s1 Raise Floor 24cTt", "s1 Raise Floor 24, change Texture & Type [160]" +93, "WR Raise Floor 24cTt", "WR Raise Floor 24, change Texture & Type [ 93]" +59, "W1 Raise Floor 24cTt", "W1 Raise Floor 24, change Texture & Type [ 59]" +999, "-", "-" +176, "sR Raise Floor sLT", "sR Raise Floor by shortest lower Texture [176]" +158, "s1 Raise Floor sLT", "s1 Raise Floor by shortest lower Texture [158]" +96, "WR Raise Floor sLT", "WR Raise Floor by shortest lower Texture [147]" +30, "W1 Raise Floor sLT", "W1 Raise Floor by shortest lower Texture [142]" +999, "-", "-" +178, "sR Raise Floor 512", "sR Raise Floor 512 [178]" +140, "S1 Raise Floor 512", "S1 Raise Floor 512 [140]" +147, "wR Raise Floor 512", "wR Raise Floor 512 [147]" +142, "w1 Raise Floor 512", "w1 Raise Floor 512 [142]" + +"Floors (Set to Neigbhor)" +60, "SR Set Floor LnF", "SR Floor to Lowest neighboring Floor [ 60]" +23, "S1 Set Floor LnF", "S1 Floor to Lowest neighboring Floor [ 23]" +82, "WR Set Floor LnF", "WR Floor to Lowest neighboring Floor [ 82]" +38, "W1 Set Floor LnF", "W1 Floor to Lowest neighboring Floor [ 38]" +999, "-", "-" +177, "sR Set Floor LnFcTn", "sR Floor to Lowest neighboring Floor, change Texture/Type Numeric [177]" +159, "s1 Set Floor LnFcTn", "s1 Floor to Lowest neighboring Floor, change Texture/Type Numeric [159]" +84, "WR Set Floor LnFcTn", "WR Floor to Lowest neighboring Floor, change Texture/Type Numeric [ 84]" +37, "W1 Set Floor LnFcTn", "W1 Floor to Lowest neighboring Floor, change Texture/Type Numeric [ 37]" +999, "-", "-" +45, "SR Set Floor HnF", "SR Floor to Highest neighboring Floor [ 45]" +102, "S1 Set Floor HnF", "S1 Floor to Highest neighboring Floor [102]" +83, "WR Set Floor HnF", "WR Floor to Highest neighboring Floor [ 83]" +19, "W1 Set Floor HnF", "W1 Floor to Highest neighboring Floor [ 19]" +999, "-", "-" +70, "SR Set Floor 8aHnF", "SR Floor to 8 above Highest neighboring Floor [ 70]" +71, "S1 Set Floor 8aHnF", "S1 Floor to 8 above Highest neighboring Floor [ 71]" +98, "WR Set Floor 8aHnF", "WR Floor to 8 above Highest neighboring Floor [ 98]" +36, "W1 Set Floor 8aHnF", "W1 Floor to 8 above Highest neighboring Floor [ 36]" + +"---" +"Floor Changers" +190, "sR Change Floor cTt", "sR Change Floor/Sector Type (Trigger Model) [190]" +189, "s1 Change Floor cTt", "s1 Change Floor/Sector Type (Trigger Model) [189]" +154, "wR Change Floor cTt", "wR Change Floor/Sector Type (Trigger Model) [154]" +153, "w1 Change Floor cTt", "w1 Change Floor/Sector Type (Trigger Model) [153]" +999, "-", "-" +78, "sR Change Floor cTn", "sR Change Floor/Sector Type (Numeric Model) [ 78]" +241, "s1 Change Floor cTn", "s1 Change Floor/Sector Type (Numeric Model) [241]" +240, "wR Change Floor cTn", "wR Change Floor/Sector Type (Numeric Model) [240]" +239, "w1 Change Floor cTn", "w1 Change Floor/Sector Type (Numeric Model) [239]" + +"----" +"Platforms (Raise)" +66, "SR Raise Plat 24cTto", "SR Raise Platform 24, change Texture Only [ 66]" +15, "S1 Raise Plat 24cTto", "S1 Raise Platform 24, change Texture Only [ 15]" +148, "wR Raise Plat 24cTto", "wR Raise Platform 24, change Texture Only [148]" +143, "w1 Raise Plat 24cTto", "w1 Raise Platform 24, change Texture Only [143]" +999, "-", "-" +67, "SR Raise Plat 32cTto", "SR Raise Platform 32, change Texture Only [ 67]" +14, "S1 Raise Plat 32cTto", "S1 Raise Platform 32, change Texture Only [ 14]" +149, "wR Raise Plat 32cTto", "wR Raise Platform 32, change Texture Only [149]" +144, "w1 Raise Plat 32cTto", "w1 Raise Platform 32, change Texture Only [144]" +999, "-", "-" +68, "SR Raise Plat nFcTt0", "SR Raise Platform to next Floor, change Texture, Type=0 [ 68]" +20, "S1 Raise Plat nFcTt0", "S1 Raise Platform to next Floor, change Texture, Type=0 [ 20]" +95, "WR Raise Plat nFcTt0", "WR Raise Platform to next Floor, change Texture, Type=0 [ 95]" +22, "W1 Raise Plat nFcTt0", "W1 Raise Platform to next Floor, change Texture, Type=0 [ 22]" +47, "G1 Raise Plat nFcTt0", "G1 Raise Platform to Next Floor, change Texture, Type=0 [ 47]" + +"Platforms (Up and Down)" +181, "sR Plat Up & Down", "sR Start Moving Platform Up, wait 3, Down [181]" +162, "s1 Plat Up & Down", "s1 Start Moving Platform Up, wait 3, Down [162]" +87, "WR Plat Up & Down", "WR Start Moving Platform Up, wait 3, Down [ 87]" +53, "W1 Plat Up & Down", "W1 Start Moving Platform Up, wait 3, Down [ 53]" +999, "-", "-" +182, "sR Stop Platform", "sR Stop Moving Platform [182]" +163, "s1 Stop Platform", "s1 Stop Moving Platform [163]" +89, "WR Stop Platform", "WR Stop Moving Platform [ 89]" +54, "W1 Stop Platform", "W1 Stop Moving Platform [ 54]" +999, "-", "-" +211, "sR Toggle Platform", "sR Toggle Floor Between Ceiling and Floor Instantly [211]" +212, "wR Toggle Platform", "wR Toggle Floor Between Ceiling and Floor Instantly [212]" +999, "-", "-" +62, "SR Lower Lift", "SR Lower Lift, wait 3, Rise [ 62]" +21, "S1 Lower Lift", "S1 Lower Lift, wait 3, Rise [ 21]" +88, "WR Lower Lift", "WR Lower Lift, wait 3, Rise [ 88]" +10, "W1 Lower Lift", "W1 Lower Lift, wait 3, Rise [ 10]" +999, "-", "-" +123, "SR Lower Lift Fast", "SR Lower Lift Fast, wait 3, Rise [123]" +122, "S1 Lower Lift Fast", "S1 Lower Lift Fast, wait 3, Rise [122]" +120, "WR Lower Lift Fast", "WR Lower Lift Fast, wait 3, Rise [120]" +121, "W1 Lower Lift Fast", "W1 Lower Lift Fast, wait 3, Rise [121]" + +"-----" +"Elevators" +230, "sR Elevator Up Next", "sR Elevator to Next Highest Floor [230]" +229, "s1 Elevator Up Next", "s1 Elevator to Next Highest Floor [229]" +228, "wR Elevator Up Next", "wR Elevator to Next Highest Floor [228]" +227, "w1 Elevator Up Next", "w1 Elevator to Next Highest Floor [227]" +999, "-", "-" +234, "sR Elevator Dn Next", "sR Elevator to Next Lowest Floor [234]" +233, "s1 Elevator Dn Next", "s1 Elevator to Next Lowest Floor [233]" +232, "wR Elevator Dn Next", "wR Elevator to Next Lowest Floor [232]" +231, "w1 Elevator Db Next", "w1 Elevator to Next Lowest Floor [231]" +999, "-", "-" +238, "sR Elevator Current", "sR Elevator to Current Floor [238]" +237, "s1 Elevator Current", "s1 Elevator to Current Floor [227]" +236, "wR Elevator Current", "wR Elevator to Current Floor [236]" +235, "w1 Elevator Current", "w1 Elevator to Current Floor [235]" + +"------" +"Ceilings" +43, "SR Lower Ceiling F", "SR Lower Ceiling to Floor [ 43]" +41, "S1 Lower Ceiling F", "S1 Lower Ceiling to Floor [ 41]" +152, "wR Lower Ceiling F", "wR Lower Ceiling to Floor [152]" +145, "w1 Lower Ceiling F", "w1 Lower Ceiling to Floor [145]" +999, "-", "-" +186, "sR Ceil Up to HnC", "sR Ceiling Up to hnC [186]" +166, "s1 Ceil Up to HnC", "s1 Ceiling Up to hnC [166]" +151, "wR Ceil Up to HnC", "wR Ceiling Up to hnC [151]" +40, "W1 Ceil Up to HnC", "W1 Ceiling Up to hnC [ 40]" +999, "-", "-" +187, "sR Lower Ceiling 8aF", "sR Lower Ceiling to 8 above Floor [187]" +167, "s1 Lower Ceiling 8aF", "s1 Lower Ceiling to 8 above Floor [167]" +72, "WR Lower Ceiling 8aF", "WR Lower Ceiling to 8 above Floor [ 72]" +44, "W1 Lower Ceiling 8aF", "W1 Lower Ceiling to 8 above Floor [ 44]" +999, "-", "-" +205, "sR Lower Ceiling LnC", "sR Lower Ceiling to Lowest Neighbor Ceiling [205]" +203, "s1 Lower Ceiling LnC", "s1 Lower Ceiling to Lowest Neighbor Ceiling [203]" +201, "wR Lower Ceiling LnC", "wR Lower Ceiling to Lowest Neighbor Ceiling [201]" +199, "w1 Lower Ceiling LnC", "w1 Lower Ceiling to Lowest Neighbor Ceiling [199]" +999, "-", "-" +206, "sR Lower Ceiling HnF", "sR Lower Ceiling to Highest Neighbor Floor [206]" +204, "s1 Lower Ceiling HnF", "s1 Lower Ceiling to Highest Neighbor Floor [204]" +202, "wR Lower Ceiling HnF", "wR Lower Ceiling to Highest Neighbor Floor [202]" +200, "w1 Lower Ceiling HnF", "w1 Lower Ceiling to Highest Neighbor Floor [200]" + +"Crushers" +184, "sR Slow Crusher Fd", "sR Start Slow Crusher - Fast damage [184]" +49, "S1 Slow Crusher Fd", "S1 Start Slow Crusher - Fast damage [ 49]" +73, "WR Slow Crusher Fd", "WR Start Slow Crusher - Fast damage [ 73]" +25, "W1 Slow Crusher Fd", "W1 Start Slow Crusher - Fast damage [ 25]" +999, "-", "-" +183, "sR Fast Crusher Sd", "sR Start Fast Crusher - Slow damage [183]" +164, "s1 Fast Crusher Sd", "s1 Start Fast Crusher - Slow damage [164]" +77, "WR Fast Crusher Sd", "WR Start Fast Crusher - Slow damage [ 77]" +6, "W1 Fast Crusher Sd", "W1 Start Fast Crusher - Slow damage [ 6]" +999, "-", "-" +185, "sR Slow Crusher QFd", "sR Start Slow Quiet Crusher - Fast damage [185]" +165, "s1 Slow Crusher QFd", "s1 Start Slow Quiet Crusher - Fast damage [165]" +150, "wR Slow Crusher QFd", "wR Start Slow Quiet Crusher - Fast damage [150]" +141, "W1 Slow Crusher QFd", "W1 Start Slow Quiet Crusher - Fast damage [141]" +999, "-", "-" +188, "sR Stop Crusher", "sR Stop Crusher [188]" +168, "s1 Stop Crusher", "s1 Stop Crusher [168]" +74, "WR Stop Crusher", "WR Stop Crusher [ 74]" +57, "W1 Stop Crusher", "W1 Stop Crusher [ 57]" + +"Stairs" +258, "sR Raise Stairs 8", "sR Raise Stairs 8 [258]" +7, "S1 Raise Stairs 8", "S1 Raise Stairs 8 [ 7]" +256, "wR Raise Stairs 8", "wR Raise Stairs 8 [256]" +8, "W1 Raise Stairs 8", "W1 Raise Stairs 8 [ 8]" +999, "-", "-" +259, "sR Raise Stairs 16F", "sR Raise Stairs 16 Fast [259]" +127, "S1 Raise Stairs 16F", "S1 Raise Stairs 16 Fast [127]" +257, "wR Raise Stairs 16F", "wR Raise Stairs 16 Fast [257]" +100, "W1 Raise Stairs 16F", "W1 Raise Stairs 16 Fast [100]" + +"Lighting" +139, "SR Lights to 35", "SR Light Level Drops to 35 [139]" +170, "s1 Lights to 35", "s1 Light Level Drops to 35 [170]" +79, "WR Lights to 35", "WR Light Level Drops to 35 [ 79]" +35, "W1 Lights to 35", "W1 Light Level Drops to 35 [ 35]" +999, "-", "-" +138, "SR Lights to 255", "SR Light Level Increases to 255 [138]" +171, "s1 Lights to 255", "s1 Light Level Increases to 255 [171]" +81, "WR Lights to 255", "WR Light Level Increases to 255 [ 81]" +13, "W1 Lights to 255", "W1 Light Level Increases to 255 [ 13]" +999, "-", "-" +192, "sR Lights Max N", "sR Light to Maximum Neighboring Light Level [192]" +169, "s1 Lights Max N", "s1 Light to Maximum Neighboring Light Level [169]" +80, "WR Lights Max N", "WR Light to Maximum Neighboring Light Level [ 80]" +12, "W1 Lights Max N", "W1 Light to Maximum Neighboring Light Level [ 12]" +999, "-", "-" +194, "sR Lights Min N", "sR Light to Minimum Neighboring Light Level [194]" +173, "s1 Lights Min N", "s1 Light to Minimum Neighboring Light Level [173]" +157, "wR Lights Min N", "wR Light to Minimum Neighboring Light Level [157]" +104, "W1 Lights Min N", "W1 Light to Minimum Neighboring Light Level [104]" +999, "-", "-" +193, "sR Lights Blink 1", "sR Start Lights Blinking every second [193]" +172, "s1 Lights Blink 1", "s1 Start Lights Blinking every second [172]" +156, "wR Lights Blink 1", "wR Start Lights Blinking every second [156]" +17, "W1 Lights Blink 1", "W1 Start Lights Blinking every second [ 17]" +999, "-", "-" +213, "Set Floor LightLev" "Set Tagged Sector's Floor Light Level [213]" +261, "Set Ceil LightLev" "Set Tagged Sector's Ceiling Light Level [261]" + +"Teleports" +195, "sR Teleport", "sR Teleport to a Sector containing Teleport Thing [195]" +174, "s1 Teleport", "s1 Teleport to a Sector containing Teleport Thing [174]" +97, "WR Teleport", "WR Teleport to a Sector containing Teleport Thing [ 97]" +39, "W1 Teleport", "W1 Teleport to a Sector containing Teleport Thing [ 39]" +999, "-", "-" +126, "MR Teleport", "MR Teleport Monster Only [126]" +125, "M1 Teleport", "M1 Teleport Monster Only [125]" +999, "-", "-" +210, "sR Silent Teleport", "sR Silent Teleport to a Teleport Thing [210]" +209, "s1 Silent Teleport", "s1 Silent Teleport to a Teleport Thing [209]" +208, "wR Silent Teleport", "wR Silent Teleport to a Teleport Thing [208]" +207, "w1 Silent Teleport", "w1 Silent Teleport to a Teleport Thing [207]" +999, "-", "-" +269, "mR Silent Teleport", "mR Silent Teleport Monster Only to a Teleport Thing [269]" +268, "m1 Silent Teleport", "m1 Silent Teleport Monster Only to a Teleport Thing [268]" +999, "-", "-" +244, "wR Silent Line Tp", "wR Silent Teleport to a Line with Same Tag [244]" +243, "w1 Silent Line Tp", "w1 Silent Teleport to a Line with Same Tag [243]" +263, "wR Silent Line Rev", "wR Silent Teleport to a Line with Same Tag Reversed [263]" +262, "w1 Silent Line Rev", "w1 Silent Teleport to a Line with Same Tag Reversed [262]" +999, "-", "-" +267, "mR Silent Line Tp", "mR Silent Teleport Monster Only Line-Line [267]" +266, "m1 Silent Line Tp", "m1 Silent Teleport Monster Only Line-Line [266]" +265, "mR Silent Line Rev", "mR Silent Teleport Monster Only Line-Line Reversed [265]" +264, "m1 Silent Line Rev", "m1 Silent Teleport Monster Only Line-Line Reversed [264]" + +"Exits" +11, "S1 Exit Level", "S1 Exit Level [ 11]" +52, "W1 Exit Level", "W1 Exit Level [ 52]" +197, "g1 Exit Level", "g1 Exit Level [197]" +999, "-", "-" +51, "S1 Exit Level S", "S1 Exit Level & goto Secret Level [ 51]" +124, "W1 Exit level S", "W1 Exit Level & goto Secret Level [124]" +198, "g1 Exit level S", "g1 Exit Level & goto Secret Level [198]" + +"Specials" +191, "sR Lwr Pillar rDcTn", "sR Lower Pillar, raise Donut, change Texture/Type Numeric [191]" +9, "S1 Lwr Pillar rDcTn", "S1 Lower Pillar, raise Donut, change Texture/Type Numeric [ 9]" +155, "wR Lwr Pillar rDcTn", "wR Lower Pillar, raise Donut, change Texture/Type Numeric [155]" +146, "w1 Lwr Pillar rDcTn", "w1 Lower Pillar, raise Donut, change Texture/Type Numeric [146]" +999, "-", "-" +48, "** Animated Wall L", "** Animated wall, Scrolls Left [ 48]" +85, ".. Animated Wall R", ".. Animated wall, Scrolls Right [ 85]" + +"Vectors" +223, ".. Friction Amount", ".. Sets Friction in Tagged Sector,Sludge<100, Ice>100 [223]" +224, ".. Linear Wind", ".. Sets Wind Force/Direction in Tagged Sectors [224]" +225, ".. Linear Current", ".. Sets Current Force/Direction in Tagged Sectors [225]" +226, ".. Pt. Source Push", ".. Sets Force of Point Push/Pull Field in Tagged Sectors [226]" +999, "-", "-" +242, ".. Sector Heights", ".. Set Tagged Sectors Drawn Heights to 1st Side's [242]" +260, ".. Translucency", ".. Set Tagged Lines (or this one if tag=0) Translucent [260]" +999, "-", "-" +214, ".. Accel Ceiling", ".. Accel Tagged Ceiling w.r.t. 1st Side's Sector [214]" +215, ".. Accel Floor", ".. Accel Tagged Floor w.r.t. 1st Side's Sector [215]" +216, ".. Accel Objects", ".. Accel Objects on Tagged Floor wrt 1st Side's Sector [216]" +217, ".. Accel Flr & Obj", ".. Accel Objects & Tagged Floor wrt 1st Side's Sector [217]" +218, ".. Accel Wall", ".. Accel Tagged Wall w.r.t 1st Side's Sector [218]" +999, "-", "-" +245, ".. Affect Ceiling", ".. Scroll Tagged Ceiling w.r.t. 1st Side's Sector [245]" +246, ".. Affect Floor", ".. Scroll Tagged Floor w.r.t. 1st Side's Sector [246]" +247, ".. Affect Objects", ".. Scroll Objects on Tagged Floor wrt 1st Side's Sector [247]" +248, ".. Affect Flr & Obj", ".. Scroll Objects & Tagged Floor wrt 1st Side's Sector [248]" +249, ".. Affect Wall", ".. Scroll Tagged Wall w.r.t 1st Side's Sector [249]" +999, "-", "-" +250, ".. Scroll Ceiling", ".. Scroll Tagged Ceiling [250]" +251, ".. Scroll Floor", ".. Scroll Tagged Floor [251]" +252, ".. Scroll Objects", ".. Scroll Objects on Tagged Floor [252]" +253, ".. Scroll Flr & Obj", ".. Scroll Tagged Floor, Carry Objects [253]" +254, ".. Scroll Wall", ".. Scroll Tagged Wall, Same as Floor/Ceiling [254]" +999, "-", "-" +255, ".. Scroll by Sdf Off", ".. Scroll Wall Using Sidedef Offsets [255]" +"-------" + + +[sectors] +############################################################################## +############################### Sector List ################################## +############################################################################## +#Number,"Desc-------------", "### Long Desc" +"Normal" +0, "Normal", "Normal [ 0]" + +"Lighting effects" +2, "Blinks 0.5 sec", "Light Blinks every 0.5 second [ 2]" +3, "Blinks 1.0 sec", "Light Blinks every second [ 3]" +13, "Blinks 0.5 sec sync", "Light Blinks every 0.5 second in Sync [13]" +12, "Blinks 1.0 sec sync", "Light Blinks every second in Sync [12]" +1, "Blinks randomly", "Light Blinks Randomly [ 1]" +8, "Pulsates Smoothly", "Light Pulsates Smoothly [ 8]" +17, "Flickers", "Light Flickers [17]" + +"Painful floors" +7, "-2/5% health", "Minus 02/05% Health [ 7]" +5, "-5/10% health", "Minus 05/10% Health [ 5]" +16, "-10/20% health", "Minus 10/20% Health [16]" +4, "-10/20% & blinks", "Minus 10/20% Health and Light Blinks every 0.5 seconds [ 4]" +11, "-10/20% & end level", "Minus 10/20% Health and Exit Level when Health <= 10% [11]" + +"Specials" +9, "Secret", "Secret Area [ 9]" +10, "Close after 30 secs", "Sector Drops 30 seconds after Starting Level [10]" +14, "Open/Close 5 mins", "Opens then Closes 5 minutes after Starting Level [14]" + +"-" + +#Color definitions taken from palette 0 of PLAYPAL entry in main IWAD +#You can customize these by changing which names reference which entries in +#the palette +[colors] +WHITE 4 +BLACK 0 +GRAY 103 "Textures not required" text. +DARKGRAY 100 3D boxes. +LIGHTGRAY 88 Highlight of 3D boxes. +DARKERGRAY 105 Lowlight of 3D boxes. +DARKBLUE 205 Grid. + +SECTORTAGGED 176 +SECTORSECRET 253 +SECTORPAINFUL 118 +SECTORLIGHT 193 + +LINEDEFTAGGED 176 +LINEDEFSECRET 253 +LINEDEFNOSOUND 185 +LINEDEFNOPASS 121 +LINEDEFNOMAP 219 + +MAGENTA 253 +LIGHTRED 176 +GREEN 118 +LIGHTCYAN 193 +DARKMAGENTA 253 +DARKRED 185 +DARKGREEN 121 +ORANGE 219 +LIGHTBLUE 197 +BLUE 202 +LIGHTGREEN 114 +RED 183 +LIGHTMAGENTA 250 +CYAN 196 +YELLOW 231 +BROWN 144 + + + +[things] +#Common Things list goes down here so Doom 2 can append its additions - +# DO NOT MOVE THIS LIST FROM THE END OF FILE UNLESS YOU ARE GOING TO DO +# MAJOR RESTRUCTURING, OR THE DOOM II CONFIG MAY NOT WORK! +############################################################################## +############################### Things List ################################## +############################################################################## +#You can add new menus or revise existing ones; put new menu titles in double +#quotes like the existing ones. Thing entries must be in this pattern: +#Number,Color, | Radius, "Desc", "Sprite" + +"Starting Positions" +1, LIGHTGREEN, 16, "Player 1 Start", "PLAYA1" +2, LIGHTGREEN, 16, "Player 2 Start", "PLAYB1" +3, LIGHTGREEN, 16, "Player 3 Start", "PLAYC1" +4, LIGHTGREEN, 16, "Player 4 Start", "PLAYD1" +11, LIGHTGREEN, 16, "Death Match Start", "PLAYF1" +14, YELLOW, 16, "Teleport Landing", "TFOGB0" + +"Enemies" +3004, RED, 20, "Trooper","POSSF1" +9, RED, 20, "Shotgun Guy","SPOSB1" +58, RED, 30, "Spector","SARGB5" +3001, RED, 20, "Imp","TROOF1" +3002, RED, 30, "Demon","SARGF1" +3006, RED, 16, "Lost Soul","SKULD1" +3005, RED, 32, "Cacodemon","HEADA1" +3003, RED, 24, "Baron of Hell", "BOSSG1" +16, RED, 40, "Cyber Demon","CYBRF1" +7, RED, 80, "Spider Mastermind,"SPIDH1" + +"Weapons" +2005, BLUE, 20, "Chainsaw", "CSAWA0" +2001, BLUE, 20, "Shotgun", "SHOTA0" +2002, BLUE, 20, "Chaingun", "MGUNA0" +2003, BLUE, 20, "Rocket Launcher", "LAUNA0" +2004, BLUE, 20, "Plasma Gun", "PLASA0" +2006, BLUE, 20, "BFG9000", "BFUGA0" +2035, ORANGE, 16, "Barrel", "BAR1A0" + +"Ammunition" +2007, LIGHTCYAN, 16, "Ammo Clip", "CLIPA0" +2048, LIGHTCYAN, 16, "Box of Ammo", "AMMOA0" +2008, LIGHTCYAN, 16, "Shells", "SHELA0" +2049, LIGHTCYAN, 16, "Box of Shells", "SBOXA0" +2010, LIGHTCYAN, 16, "Rocket", "ROCKA0" +2046, LIGHTCYAN, 16, "Box of Rockets", "BROKA0" +2047, LIGHTCYAN, 16, "Energy Cell", "CELLA0" +17, LIGHTCYAN, 16, "Energy Pack", "CELPA0" +8, LIGHTCYAN, 16, "Backpack", "BPAKA0" + +"Armour and Health" +2015, MAGENTA, 16, "Armour Helmet", "BON2D0" +2014, MAGENTA, 16, "Health Potion", "BON1D0" +2011, CYAN, 16, "Stim Pack", "STIMA0" +2012, CYAN, 16, "Medical Kit", "MEDIA0" +2018, CYAN, 16, "Armour (Green)", "ARM1A0" +2019, CYAN, 16, "Mega Armour (Blue)", "ARM2A0" + +"Power-ups" +2024, LIGHTMAGENTA, 16, "Partial Invisibility Sphere", "PINSA0" +2013, LIGHTMAGENTA, 16, "Supercharge Sphere", "SOULA0" +2022, LIGHTMAGENTA, 16, "Invunerability Sphere", "PINVA0" +2025, LIGHTMAGENTA, 16, "Radiation Shielding Suit", "SUITA0" +2023, LIGHTMAGENTA, 16, "Berserk Sphere", "PSTRA0" +2045, LIGHTMAGENTA, 16, "Lite Amplification Goggles", "PVISA0" +2026, LIGHTMAGENTA, 16, "Computer Map", "PMAPD0" + +"Keys" +13, MAGENTA, 20, "Red KeyCard", "RKEYA0" +38, MAGENTA, 20, "Red Skull Key", "RSKUA0" +5, MAGENTA, 20, "Blue KeyCard", "BKEYA0" +40, MAGENTA, 20, "Blue Skull Key", "BSKUA0" +6, MAGENTA, 20, "Yellow KeyCard", "YKEYA0" +39, MAGENTA, 20, "Yellow Skull Key", "YSKUA0" + +"Dead Dudes" +15, BROWN, 16, "Dead Player (Green)", "PLAYN0" +18, BROWN, 16, "Dead ZombieMan", "POSSL0" +19, BROWN, 16, "Dead Shotgun Guy", "SPOSL0" +20, BROWN, 16, "Dead Imp", "TROOM0" +21, BROWN, 16, "Dead Demon", "SARGN0" +23, BROWN, 16, "Dead Lost Soul (Explosion)", "SKULH0" +22, BROWN, 16, "Dead Cacodemon", "HEADL0" + +"Tortured Dudes" +25, BROWN, 16, "Impaled Body", "POL1A0" +26, BROWN, 16, "Impaled Twitching Body", "POL6A0" +49, BROWN, 16, "Hanging Swaying Body", "GOR1A0" +63, BROWN, 16, "Hanging Swaying Body *", "GOR1A0" +51, BROWN, 16, "Hanging One-legged Body", "GOR3A0" +61, BROWN, 16, "Hanging One-legged Body *", "GOR3A0" +53, BROWN, 16, "Hanging Leg", "GOR5A0" +62, BROWN, 16, "Hanging Leg *", "GOR5A0" +50, BROWN, 16, "Hanging Body with Arms Out", "GOR2A0" +59, BROWN, 16, "Hanging Body with Arms Out *", "GOR2A0" +52, BROWN, 16, "Hanging Pair of Legs", "GOR4A0" +60, BROWN, 16, "Hanging Pair of Legs *", "GOR4A0" + +"Blood and Stuff" +24, BROWN, 16, "Pool of Blood", "POL5A0" +10, BROWN, 16, "Guts and Bones", "PLAYW0" +12, BROWN, 16, "Guts and Bones 2", "PLAYW0" +27, BROWN, 16, "Pole with Skull", "POL4A0" +28, BROWN, 16, "Skewer with Heads", "POL2A0" +42, BROWN, 16, "Skulls in Flames", "FSKUA0" +29, BROWN, 16, "Pile of Skulls", "POL3A0" + +"Lighting" +34, WHITE, 10, "Candle", "CANDA0" +2028, WHITE, 16, "Lamp", "COLUA0" +35, WHITE, 16, "Candelabra", "CBRAA0" +57, WHITE, 16, "Small Red Torch", "SMRTA0" +46, WHITE, 16, "Tall Red Torch", "TREDA0" +55, WHITE, 16, "Small Blue Torch", "SMBTA0" +44, WHITE, 16, "Tall Blue Torch", "TBLUA0" +56, WHITE, 16, "Small Green Torch", "SMGTA0" +45, WHITE, 16, "Tall Green Torch", "TGRNA0" + +"Miscellaneous" +33, BROWN, 16, "Short Red Pillar", "COL4A0" +32, BROWN, 16, "Tall Red Pillar", "COL3A0" +31, BROWN, 16, "Short Green Pillar", "COL2A0" +30, BROWN, 16, "Tall Green Pillar", "COL1A0" +37, BROWN, 16, "Red Pillar with Skull", "COL6A0" +36, BROWN, 16, "Pillar with Pumping Heart", "COL5B0" +48, BROWN, 16, "Technical Column", "ELECA0" +54, BROWN, 32, "Big Brown Tree", "TRE2A0" +43, BROWN, 16, "Short Grey Tree", "TRE1A0" +47, BROWN, 16, "Grey Tree Stump", "SMITA0" +41, BROWN, 16, "Eye in Symbol", "CEYEA0" + +"Controllers" +5001, BROWN, 16, "Push Controller", "CANDA0" +5002, BROWN, 16, "Pull Controller", "CANDA0" + +"-" diff --git a/prboom/MISC/DEFSWANI.DAT b/prboom/MISC/DEFSWANI.DAT new file mode 100644 index 000000000..179954c3f --- /dev/null +++ b/prboom/MISC/DEFSWANI.DAT @@ -0,0 +1,85 @@ +# +# This file is input for SWANTBLS.EXE, it specifies the switchnames +# and animated textures and flats usable with BOOM. The output of +# SWANTBLS is two lumps, SWITCHES.LMP and ANIMATED.LMP that should +# be inserted in the PWAD as lumps. +# +#switches usable with each IWAD, 1=SW, 2=registered DOOM, 3=DOOM2 +[SWITCHES] +#epi texture1 texture2 +1 SW1BRCOM SW2BRCOM +1 SW1BRN1 SW2BRN1 +1 SW1BRN2 SW2BRN2 +1 SW1BRNGN SW2BRNGN +1 SW1BROWN SW2BROWN +1 SW1COMM SW2COMM +1 SW1COMP SW2COMP +1 SW1DIRT SW2DIRT +1 SW1EXIT SW2EXIT +1 SW1GRAY SW2GRAY +1 SW1GRAY1 SW2GRAY1 +1 SW1METAL SW2METAL +1 SW1PIPE SW2PIPE +1 SW1SLAD SW2SLAD +1 SW1STARG SW2STARG +1 SW1STON1 SW2STON1 +1 SW1STON2 SW2STON2 +1 SW1STONE SW2STONE +1 SW1STRTN SW2STRTN + +2 SW1BLUE SW2BLUE +2 SW1CMT SW2CMT +2 SW1GARG SW2GARG +2 SW1GSTON SW2GSTON +2 SW1HOT SW2HOT +2 SW1LION SW2LION +2 SW1SATYR SW2SATYR +2 SW1SKIN SW2SKIN +2 SW1VINE SW2VINE +2 SW1WOOD SW2WOOD + +3 SW1PANEL SW2PANEL +3 SW1ROCK SW2ROCK +3 SW1MET2 SW2MET2 +3 SW1WDMET SW2WDMET +3 SW1BRIK SW2BRIK +3 SW1MOD1 SW2MOD1 +3 SW1ZIM SW2ZIM +3 SW1STON6 SW2STON6 +3 SW1TEK SW2TEK +3 SW1MARB SW2MARB +3 SW1SKULL SW2SKULL + +#animated flats, spd is number of frames between changes +[FLATS] +#spd last first +8 NUKAGE3 NUKAGE1 +8 FWATER4 FWATER1 +8 SWATER4 SWATER1 +8 LAVA4 LAVA1 +8 BLOOD3 BLOOD1 + +8 RROCK08 RROCK05 +8 SLIME04 SLIME01 +8 SLIME08 SLIME05 +8 SLIME12 SLIME09 + +#animated textures, spd is number of frames between changes +[TEXTURES] +#spd last first +8 BLODGR4 BLODGR1 +8 SLADRIP3 SLADRIP1 + +8 BLODRIP4 BLODRIP1 +8 FIREWALL FIREWALA +8 GSTFONT3 GSTFONT1 +8 FIRELAVA FIRELAV3 +8 FIREMAG3 FIREMAG1 +8 FIREBLU2 FIREBLU1 +8 ROCKRED3 ROCKRED1 + +8 BFALL4 BFALL1 +8 SFALL4 SFALL1 +8 WFALL4 WFALL1 +8 DBRAIN4 DBRAIN1 + diff --git a/prboom/MISC/DOOM17.DAT b/prboom/MISC/DOOM17.DAT new file mode 100644 index 000000000..0aa30d6c9 --- /dev/null +++ b/prboom/MISC/DOOM17.DAT @@ -0,0 +1,490 @@ +# Linetypes for Boom engine (TeamTNT) +# +# Contact killough@classicgaming.com for questions about this file +# (but not DCK generally), as Ben Morris no longer maintains DCK, +# and does not use Boom. +# +# Commented entries below (beginning with #) are supported in Boom, +# but are commented out because DCK2.2-f does not allow more than a +# certain number of linedef types at a time. If uncomment one, you +# must comment out another to avoid the limit from being exceeded. + +GAMEDATA + +[Lines: Normal] +Normal Line (0); 0 + +[Lines: Door Open-Close] +DR Door OpenWaitClose (1); 1 +SR Door OpenWaitClose (63); 63 +S1 Door OpenWaitClose (29); 29 +WR Door OpenWaitClose (90); 90 +W1 Door OpenWaitClose (4); 4 +DR Door OpenWaitClose Blue (26); 26 +DR Door OpenWaitClose Red (28); 28 +DR Door OpenWaitClose Yellow (27); 27 +DR Door OpenWaitClose Blazing (117); 117 +SR Door OpenWaitClose Blazing (114); 114 +S1 Door OpenWaitClose Blazing (111); 111 +WR Door OpenWaitClose Blazing (105); 105 +W1 Door OpenWaitClose Blazing (108); 108 + +[Lines: Door Open-Stay] +DR Door OpenStay (31); 31 +SR Door OpenStay (61); 61 +S1 Door OpenStay (103); 103 +WR Door OpenStay (86); 86 +W1 Door OpenStay (2); 2 +GR Door OpenStay (46); 46 +DR Door OpenStay Blue (32); 32 +DR Door OpenStay Red (33); 33 +DR Door OpenStay Yellow (34); 34 +DR Door OpenStay Blazing (118); 118 +SR Door OpenStay Blazing (115); 115 +S1 Door OpenStay Blazing (112); 112 +WR Door OpenStay Blazing (106); 106 +W1 Door OpenStay Blazing (109); 109 +S1 Door OpenStay Blazing Blue (133); 133 +S1 Door OpenStay Blazing Red (135); 135 +S1 Door OpenStay Blazing Yellow (136); 136 + +[Lines: Door Close] +SR Door Close (42); 42 +S1 Door Close (50); 50 +WR Door Close (75); 75 +W1 Door Close (3); 3 +SR Door Close Blazing (116); 116 +S1 Door Close Blazing (113); 113 +WR Door Close Blazing (107); 107 +W1 Door Close Blazing (110); 110 +WR Door Close for 30 Seconds (76); 76 +W1 Door Close For 30 Seconds (16); 16 +SR Door Close for 30 Seconds (196); 196 +S1 Door Close For 30 Seconds (175); 175 + +[Lines: Platforms] +SR Plat DownWaitUpStay (62); 62 +S1 Plat DownWaitUpStay (21); 21 +WR Plat DownWaitUpStay (88); 88 +W1 Plat DownWaitUpStay (10); 10 +SR Plat DownWaitUpStay Blazing (123); 123 +S1 Plat DownWaitUpStay Blazing (122); 122 +WR Plat DownWaitUpStay Blazing (120); 120 +W1 Plat DownWaitUpStay Blazing (121); 121 +WR Plat Start UpWaitDownWait (87); 87 +W1 Plat Start UpWaitDownWait (53); 53 +SR Plat Start UpWaitDownWait (181); 181 +S1 Plat Start UpWaitDownWait (162); 162 +WR Plat Stop UpWaitDownWait (89); 89 +W1 Plat Stop UpWaitDownWait (54); 54 +SR Plat Stop UpWaitDownWait (182); 182 +S1 Plat Stop UpWaitDownWait (163); 163 +SR Plat Toggle UpDownInstant (211); 211 +WR Plat Toggle UpDownInstant (212); 212 + +[Lines: Elevators] +#W1 Raise Elevator Next Floor (227); 227 +WR Raise Elevator Next Floor (228); 228 +S1 Raise Elevator Next Floor (229); 229 +SR Raise Elevator Next Floor (230); 230 +#W1 Lower Elevator Next Floor (231); 231 +WR Lower Elevator Next Floor (232); 232 +S1 Lower Elevator Next Floor (233); 233 +SR Lower Elevator Next Floor (234); 234 +#W1 Elevator To Current Floor (235); 235 +WR Elevator To Current Floor (236); 236 +S1 Elevator To Current Floor (237); 237 +SR Elevator To Current Floor (238); 238 + +[Lines: Lighting] +WR Lights to 0 (79); 79 +W1 Lights to 0 (35); 35 +SR Lights to 0 (139); 139 +S1 Lights to 0 (170); 170 +WR Lights To Dimmest Near (157); 157 +W1 Lights To Dimmest Near (104); 104 +SR Lights To Dimmest Near (194); 194 +S1 Lights To Dimmest Near (173); 173 +WR Lights to 255 (81); 81 +W1 Lights to 255 (13); 13 +SR Lights to 255 (138); 138 +S1 Lights to 255 (171); 171 +WR Lights to Brightest Near (80); 80 +W1 Lights to Brightest Near (12); 12 +SR Lights to Brightest Near (192); 192 +S1 Lights to Brightest Near (169); 169 +W1 Lights Start Strobing (17); 17 +WR Lights Start Strobing (156); 156 +S1 Lights Start Strobing (172); 172 +SR Lights Start Strobing (193); 193 + +[Lines: Teleports and Stairs] +WR Teleport (97); 97 +W1 Teleport (39); 39 +SR Teleport (195); 195 +S1 Teleport (174); 174 +WR Teleport Monster Only (125); 126 +W1 Teleport Monster Only (125); 125 +WR Silent Teleport (208); 208 +W1 Silent Teleport (207); 207 +SR Silent Teleport (210); 210 +S1 Silent Teleport (209); 209 +W1 Silent Line-Line Teleport (243); 243 +WR Silent Line-Line Teleport (244); 244 +WR Silent Teleport Monster Only (269); 269 +#W1 Silent Teleport Monster Only (268); 268 +#W1 Silent Line-Line Tele Reversed (262); 262 +WR Silent Line-Line Tele Reversed (263); 263 +WR Silent Tele Line-Line Monster (266); 267 +#W1 Silent Tele Line-Line Monster (266); 266 +#WR Silent Tele Line-Line Rev Monster (265); 265 +#W1 Silent Tele Line-Line Rev Monster (264); 264 +S1 Stairs Build 8 High (7); 7 +W1 Stairs Build 8 High (8); 8 +S1 Stairs Build 16 Turbo (127); 127 +W1 Stairs Build 16 Turbo (100); 100 + +[Lines: Crushers, etc] +W1 Ceiling Stutter Start FastDmg (141); 141 +WR Ceiling Stutter Start FastDmg (150); 150 +S1 Ceiling Stutter Start FastDmg (165); 165 +SR Ceiling Stutter Start FastDmg (185); 185 +W1 Ceiling Crush Start SlowDmg (6); 6 +WR Ceiling Crush Start SlowDmg (73); 73 +S1 Ceiling Crush Start SlowDmg (164); 164 +SR Ceiling Crush Start SlowDmg (183); 183 +W1 Ceiling Crush Start FastDmg (25); 25 +WR Ceiling Crush Start FastDmg (77); 77 +S1 Ceiling Crush Start FastDmg (49); 49 +SR Ceiling Crush Start FastDmg (184); 184 +W1 Ceiling Crush Stop (57); 57 +WR Ceiling Crush Stop (74); 74 +#S1 Ceiling Crush Stop (168); 168 +SR Ceiling Crush Stop (188); 188 +W1 Ceiling Crush&Stay (44); 44 +WR Ceiling Crush&Stay (72); 72 +S1 Ceiling Crush&Stay (167); 167 +SR Ceiling Crush&Stay (187); 187 +W1 Ceiling Lower To Floor (145); 145 +WR Ceiling Lower To Floor (152); 152 +S1 Ceiling Lower To Floor (41); 41 +SR Ceiling Lower To Floor (43); 43 +#W1 Ceiling Lower To Highest Floor (200); 200 +WR Ceiling Lower To Highest Floor (202); 202 +#S1 Ceiling Lower To Highest Floor (204); 204 +SR Ceiling Lower To Highest Floor (206); 206 +W1 Ceiling Lower To Lowest (199); 199 +WR Ceiling Lower To Lowest (201); 201 +#S1 Ceiling Lower To Lowest (203); 203 +SR Ceiling Lower To Lowest (205); 205 +W1 Floor Raise Crush (56); 56 +WR Floor Raise Crush (94); 94 +S1 Floor Raise Crush (55); 55 +SR Floor Raise Crush (65); 65 +W1 Floor Lower Ceiling Raise Crush (40); 40 +WR Floor Lower Ceiling Raise Crush (151); 151 +S1 Floor Lower Ceiling Raise Crush (166); 166 +SR Floor Lower Ceiling Raise Crush (186); 186 + +[Lines: Exits] +S1 Exit Level (11); 11 +W1 Exit Level (52); 52 +G1 Exit Level (197); 197 +W1 Exit To 31 (Secret Level 1) (124); 124 +S1 Exit To 32 (Secret Level 2) (51); 51 +S1 Exit To 9 (Secret Level) (51); 51 +#G1 Exit To Secret Level (198); 198 + +[Lines: Properties Transfer] +Set Tagged Sector's Draw Heights (242); 242 +Make Tagged Lines Translucent (260); 260 +Set Sector's Floor Light Level (213); 213 +Set Sector's Ceiling Light Level (261); 261 + +[Lines: Scroll Effects] +Effect Scrolling First Side (48); 48 +Reverse Scrolling First Side (85); 85 +Displace Scroll Sector's Ceiling (245); 245 +Displace Scroll Sector's Floor (246); 246 +Displace Things on Tagged Floor (247); 247 +Displ Scroll Floor & Carry Things (248); 248 +Displace 1st Side Tagged Line (249); 249 +Accel Scroll Sector's Ceiling (214); 214 +Accel Scroll Sector's Floor (215); 215 +Accel Things on Tagged Floor (216); 216 +Accel Scroll Floor & Carry Things (217); 217 +Accel Scroll 1st Side Tagged Line (218); 218 +Scroll Sector's Ceiling (250); 250 +Scroll Sector's Floor (251); 251 +Carry Things On Tagged Floor (252); 252 +Scroll&Carry Things Sector Floor (253); 253 +Scroll First Side of Tagged Line (254); 254 +Effect Scrolling From XY Offsets (255); 255 + +[Lines: Floor Lowers] +S1 Floor Change Donut (9); 9 +#SR Floor Change Donut (191); 191 +W1 Floor Change Donut (146); 146 +#WR Floor Change Donut (155); 155 +W1 Floor Lower To Near (219); 219 +WR Floor Lower To Near (220); 220 +S1 Floor Lower To Near (221); 221 +SR Floor Lower To Near (222); 222 +WR Floor Lower To Highest (83); 83 +W1 Floor Lower To Highest (19); 19 +SR Floor Lower To Highest (45); 45 +S1 Floor Lower To Highest (102); 102 +SR Floor Lower To Lowest (60); 60 +S1 Floor Lower To Lowest (23); 23 +WR Floor Lower To Lowest (82); 82 +W1 Floor Lower To Lowest (38); 38 +WR Floor Lower Turbo (98); 98 +W1 Floor Lower Turbo (36); 36 +SR Floor Lower Turbo (70); 70 +S1 Floor Lower Turbo (71); 71 +WR Floor Lower & Change (84); 84 +W1 Floor Lower & Change (37); 37 +SR Floor Lower & Change (177); 177 +S1 Floor Lower & Change (159); 159 + +[Lines: Floor Raises] +W1 Floor Raise (5); 5 +WR Floor Raise (91); 91 +S1 Floor Raise (101); 101 +SR Floor Raise (64); 64 +W1 Floor Raise Turbo (130); 130 +WR Floor Raise Turbo (129); 129 +S1 Floor Raise Turbo (131); 131 +SR Floor Raise Turbo (132); 132 +W1 Floor Raise To Nearest (119); 119 +WR Floor Raise To Nearest (128); 128 +S1 Floor Raise To Nearest (18); 18 +SR Floor Raise To Nearest (69); 69 +W1 Floor Raise 24 (58); 58 +WR Floor Raise 24 (92); 92 +S1 Floor Raise 24 (161); 161 +SR Floor Raise 24 (180); 180 +W1 Floor Raise 24 & Change (59); 59 +WR Floor Raise 24 & Change (93); 93 +S1 Floor Raise 24 & Change (160); 160 +SR Floor Raise 24 & Change (179); 179 +W1 Floor Raise 24 & Change Tex (143); 143 +WR Floor Raise 24 & Change Tex (148); 148 +S1 Floor Raise 24 & Change Tex (15); 15 +SR Floor Raise 24 & Change Tex (66); 66 +W1 Floor Raise 32 & Change Tex (144); 144 +WR Floor Raise 32 & Change Tex (149); 149 +S1 Floor Raise 32 & Change Tex (14); 14 +SR Floor Raise 32 & Change Tex (67); 67 +W1 Floor Raise 512 (142); 142 +WR Floor Raise 512 (147); 147 +S1 Floor Raise 512 (140); 140 +SR Floor Raise 512 (178); 178 +W1 Floor Raise Near & Change (22); 22 +WR Floor Raise Near & Change (95); 95 +S1 Floor Raise Near & Change (20); 20 +SR Floor Raise Near & Change (68); 68 +W1 Floor Raise To Short Tex (30); 30 +WR Floor Raise To Short Tex (96); 96 +S1 Floor Raise To Short Tex (158); 158 +SR Floor Raise To Short Tex (176); 176 +G1 Floor Raise (24); 24 +G1 Floor Raise Near & Change (47); 47 + +#[Lines: Floor Changers] +#W1 Floor Change Trig (153); 153 +#WR Floor Change Trig (154); 154 +#S1 Floor Change Trig (189); 189 +#SR Floor Change Trig (190); 190 +#W1 Floor Change Numeric (215); 239 +#WR Floor Change Numeric (216); 240 +#S1 Floor Change Numeric (217); 241 +#SR Floor Change Numeric (218); 78 + +[Lines: Friction, Wind, Current] +Friction, Ice>100, Sludge<100 (223); 223 +Wind Force/Direction (224); 224 +Current Force/Direction (225); 225 +Force of Point Push/Pull Field (226); 226 + +[Sectors] +Normal; 0 +Light blinks randomly; 1 +Light blinks on every 0.5 seconds; 2 +Light blinks on every 1.0 seconds; 3 +Light pulses smoothly; 8 +Light blinks on every 1.0 seconds (Synch); 12 +Light blinks on every 0.5 seconds (Synch); 13 +Light flickers like fire; 17 +Secret credit given; 9 +-10% / 20% health; 16 +-05% / 10% health; 5 +-02% / 05% health; 7 +-10% / 20% health & light blinks every 0.5 seconds; 4 +-10% / 20% health until 10% left, then ends level; 11 +30 seconds after level start, closes like a door; 10 +5 minutes after level start, opens and closes; 14 + +[Angles] +North; 90 +South; 270 +East; 0 +West; 180 +Northeast; 45 +Northwest; 135 +Southeast; 315 +Southwest; 225 + +[TInfo] +# Thing information: Type; Radius; Height; DrawAngleData (0/1) +# Nonspecified things have radius of 19 and height of 16, and don't draw +# angles. + +# players, dm, teleport.. etc +1; 20; 56; 1 +2; 20; 56; 1 +3; 20; 56; 1 +4; 20; 56; 1 +14; 20; 56; 1 +11; 20; 56; 1 + +# monsters +3004; 20; 56; 1 +84; 20; 56; 1 +9; 20; 56; 1 +65; 20; 56; 1 +3001; 20; 56; 1 +3002; 30; 56; 1 +58; 30; 56; 1 +3006; 16; 56; 1 +3005; 31; 56; 1 +69; 24; 64; 1 +3003; 24; 64; 1 +68; 64; 64; 1 +71; 31; 56; 1 +66; 20; 56; 1 +67; 48; 64; 1 +64; 20; 56; 1 +7; 128; 100; 1 +16; 40; 110; 1 + +#other items +72; 16; 72; 0 +2035; 10; 42; 0 +54; 32; 16; 0 + +#radius of 19 means don't check for thing collisions +#(yah yah, bad i know :) +5; 19; 16; 0 +6; 19; 16; 0 +13; 19; 16; 0 +40; 19; 16; 0 +39; 19; 16; 0 +38; 19; 16; 0 +2012; 19; 16; 0 +2011; 19; 16; 0 +2018; 19; 16; 0 +2019; 19; 16; 0 +2025; 19; 16; 0 +2015; 19; 16; 0 +2014; 19; 16; 0 +2013; 19; 16; 0 +2026; 19; 16; 0 +2024; 19; 16; 0 +2023; 19; 16; 0 +2022; 19; 16; 0 +2045; 19; 16; 0 +83; 19; 16; 0 +2001; 19; 16; 0 +2005; 19; 16; 0 +2002; 19; 16; 0 +82; 19; 16; 0 +2003; 19; 16; 0 +2004; 19; 16; 0 +2006; 19; 16; 0 +2007; 19; 16; 0 +2008; 19; 16; 0 +2048; 19; 16; 0 +2049; 19; 16; 0 +2010; 19; 16; 0 +2046; 19; 16; 0 +2047; 19; 16; 0 +17; 19; 16; 0 +8; 19; 16; 0 +5001; 19; 16; 1 +5002; 19; 16; 1 + +[Things: Miscellaneous] +Color; Brown +Push Controller; 5001; CANDA0 +Color; Brown +Pull Controller; 5002; CANDA0 + +[Lines_NoTag] +# A list of all the line types that don't require tags. +1 +99 +26 +28 +27 +117 +31 +32 +33 +34 +118 +48 +124 +11 +52 +51 +197 +198 +85 +255 +260 + +# +# $Id: DOOM17.DAT,v 1.1 2000/04/09 17:51:47 proff_fs Exp $ +# +# $Log: DOOM17.DAT,v $ +# Revision 1.1 2000/04/09 17:51:47 proff_fs +# Initial revision +# +# Revision 1.18 1998/05/12 06:15:25 killough +# Change push/pull controller thing numbers +# +# Revision 1.17 1998/05/11 16:15:08 jim +# changed push things +# +# Revision 1.16 1998/04/17 10:26:41 killough +# Add new silent teleporters, fix problems +# +# Revision 1.13 1998/04/12 02:11:22 killough +# Add types 260-264 +# +# Revision 1.12 1998/03/28 17:50:16 killough +# Fix typos and DCK limits exceeded +# +# Revision 1.11 1998/03/23 23:30:34 jim +# update DCK files for push things +# +# Revision 1.9 1998/03/23 03:09:43 killough +# Comment out some linedef types since DCK crashes +# +# Revision 1.8 1998/03/20 02:11:55 jim +# added new friction linedef +# +# Revision 1.7 1998/03/16 15:49:38 killough +# Add accellerative scrollers, merge Jim's changes +# +# Revision 1.4 1998/03/12 21:54:02 jim +# Freed up 12 linedefs for use as vectors +# +# Revision 1.3 1998/03/10 03:15:21 killough +# nothing really +# +# Revision 1.2 1998/03/09 08:00:09 killough +# fix comments +# +# diff --git a/prboom/MISC/DOOM19.DAT b/prboom/MISC/DOOM19.DAT new file mode 100644 index 000000000..e3ac45d5f --- /dev/null +++ b/prboom/MISC/DOOM19.DAT @@ -0,0 +1,480 @@ +# Linetypes for Boom engine (TeamTNT) +# +# Contact killough@classicgaming.com for questions about +# this file (not DCK generally), as Ben Morris no longer +# maintains DCK, and does not use Boom. +# +# No linedef types > 255 are supported with DCK versions +# starting with DCK3.0. Use DCK2.2-f if you want to use +# linedef types > 255, as DCK3.* will ruin wads that use +# such linedefs. + +GAMEDATA + +[Actions: Normal] +Normal Line (0); 0 + +[Actions: Door Open-Close] +DR Door OpenWaitClose (1); 1 +SR Door OpenWaitClose (63); 63 +S1 Door OpenWaitClose (29); 29 +WR Door OpenWaitClose (90); 90 +W1 Door OpenWaitClose (4); 4 +DR Door OpenWaitClose Blue (26); 26 +DR Door OpenWaitClose Red (28); 28 +DR Door OpenWaitClose Yellow (27); 27 +DR Door OpenWaitClose Blazing (117); 117 +SR Door OpenWaitClose Blazing (114); 114 +S1 Door OpenWaitClose Blazing (111); 111 +WR Door OpenWaitClose Blazing (105); 105 +W1 Door OpenWaitClose Blazing (108); 108 + +[Actions: Door Open-Stay] +DR Door OpenStay (31); 31 +SR Door OpenStay (61); 61 +S1 Door OpenStay (103); 103 +WR Door OpenStay (86); 86 +W1 Door OpenStay (2); 2 +GR Door OpenStay (46); 46 +DR Door OpenStay Blue (32); 32 +DR Door OpenStay Red (33); 33 +DR Door OpenStay Yellow (34); 34 +DR Door OpenStay Blazing (118); 118 +SR Door OpenStay Blazing (115); 115 +S1 Door OpenStay Blazing (112); 112 +WR Door OpenStay Blazing (106); 106 +W1 Door OpenStay Blazing (109); 109 +S1 Door OpenStay Blazing Blue (133); 133 +S1 Door OpenStay Blazing Red (135); 135 +S1 Door OpenStay Blazing Yellow (136); 136 + +[Actions: Door Close] +SR Door Close (42); 42 +S1 Door Close (50); 50 +WR Door Close (75); 75 +W1 Door Close (3); 3 +SR Door Close Blazing (116); 116 +S1 Door Close Blazing (113); 113 +WR Door Close Blazing (107); 107 +W1 Door Close Blazing (110); 110 +WR Door Close for 30 Seconds (76); 76 +W1 Door Close For 30 Seconds (16); 16 +SR Door Close for 30 Seconds (196); 196 +S1 Door Close For 30 Seconds (175); 175 + +[Actions: Platforms] +SR Plat DownWaitUpStay (62); 62 +S1 Plat DownWaitUpStay (21); 21 +WR Plat DownWaitUpStay (88); 88 +W1 Plat DownWaitUpStay (10); 10 +SR Plat DownWaitUpStay Blazing (123); 123 +S1 Plat DownWaitUpStay Blazing (122; 122 +WR Plat DownWaitUpStay Blazing (120); 120 +W1 Plat DownWaitUpStay Blazing (121); 121 +WR Plat Start UpWaitDownWait (87); 87 +W1 Plat Start UpWaitDownWait (53); 53 +SR Plat Start UpWaitDownWait (181); 181 +S1 Plat Start UpWaitDownWait (162); 162 +WR Plat Stop UpWaitDownWait (89); 89 +W1 Plat Stop UpWaitDownWait (54); 54 +SR Plat Stop UpWaitDownWait (182); 182 +S1 Plat Stop UpWaitDownWait (163); 163 +SR Plat Toggle UpDownInstant (211); 211 +WR Plat Toggle UpDownInstant (212); 212 + +[Actions: Elevators] +W1 Raise Elevator Next Floor (227); 227 +WR Raise Elevator Next Floor (228); 228 +S1 Raise Elevator Next Floor (229); 229 +SR Raise Elevator Next Floor (230); 230 +W1 Lower Elevator Next Floor (231); 231 +WR Lower Elevator Next Floor (232); 232 +S1 Lower Elevator Next Floor (233); 233 +SR Lower Elevator Next Floor (234); 234 +W1 Elevator To Current Floor (235); 235 +WR Elevator To Current Floor (236); 236 +S1 Elevator To Current Floor (237); 237 +SR Elevator To Current Floor (238); 238 + +[Actions: Lighting] +WR Lights to 0 (79); 79 +W1 Lights to 0 (35); 35 +SR Lights to 0 (139); 139 +S1 Lights to 0 (170); 170 +WR Lights To Dimmest Near (157); 157 +W1 Lights To Dimmest Near (104); 104 +SR Lights To Dimmest Near (194); 194 +S1 Lights To Dimmest Near (173); 173 +WR Lights to 255 (81); 81 +W1 Lights to 255 (13); 13 +SR Lights to 255 (138); 138 +S1 Lights to 255 (171); 171 +WR Lights to Brightest Near (80); 80 +W1 Lights to Brightest Near (12); 12 +SR Lights to Brightest Near (192); 192 +S1 Lights to Brightest Near (169); 169 +W1 Lights Start Strobing (17); 17 +WR Lights Start Strobing (156); 156 +S1 Lights Start Strobing (172); 172 +SR Lights Start Strobing (193); 193 +Set Sector's Floor Light Level (213); 213 + +[Actions: Teleports] +WR Teleport (97); 97 +W1 Teleport (39); 39 +SR Teleport (195); 195 +S1 Teleport (174); 174 +WR Teleport Monster Only (125); 126 +W1 Teleport Monster Only (125); 125 +WR Silent Teleport (208); 208 +W1 Silent Teleport (207); 207 +SR Silent Teleport (210); 210 +S1 Silent Teleport (209); 209 +W1 Silent Line-Line Teleport (243); 243 +WR Silent Line-Line Teleport (244); 244 + +[Actions: Stairs] +S1 Stairs Build 8 High (7); 7 +W1 Stairs Build 8 High (8); 8 +S1 Stairs Build 16 Turbo (127); 127 +W1 Stairs Build 16 Turbo (100); 100 + +[Actions: Crushers, etc] +W1 Ceiling Stutter Start FastDmg (141); 141 +WR Ceiling Stutter Start FastDmg (150); 150 +S1 Ceiling Stutter Start FastDmg (165); 165 +SR Ceiling Stutter Start FastDmg (185); 185 +W1 Ceiling Crush Start SlowDmg (6); 6 +WR Ceiling Crush Start SlowDmg (73); 73 +S1 Ceiling Crush Start SlowDmg (164); 164 +SR Ceiling Crush Start SlowDmg (183); 183 +W1 Ceiling Crush Start FastDmg (25); 25 +WR Ceiling Crush Start FastDmg (77); 77 +S1 Ceiling Crush Start FastDmg (49); 49 +SR Ceiling Crush Start FastDmg (184); 184 +W1 Ceiling Crush Stop (57); 57 +WR Ceiling Crush Stop (74); 74 +S1 Ceiling Crush Stop (168); 168 +SR Ceiling Crush Stop (188); 188 +W1 Ceiling Crush&Stay (44); 44 +WR Ceiling Crush&Stay (72); 72 +S1 Ceiling Crush&Stay (167); 167 +SR Ceiling Crush&Stay (187); 187 +W1 Ceiling Lower To Floor (145); 145 +WR Ceiling Lower To Floor (152); 152 +S1 Ceiling Lower To Floor (41); 41 +SR Ceiling Lower To Floor (43); 43 +#W1 Ceiling Lower To Highest Floor (200); 200 +#WR Ceiling Lower To Highest Floor (202); 202 +#S1 Ceiling Lower To Highest Floor (204); 204 +SR Ceiling Lower To Highest Floor (206); 206 +W1 Ceiling Lower To Lowest (199); 199 +WR Ceiling Lower To Lowest (201); 201 +S1 Ceiling Lower To Lowest (203); 203 +SR Ceiling Lower To Lowest (205); 205 +W1 Floor Raise Crush (56); 56 +WR Floor Raise Crush (94); 94 +S1 Floor Raise Crush (55); 55 +SR Floor Raise Crush (65); 65 +W1 Floor Lower Ceiling Raise Crush (40); 40 +WR Floor Lower Ceiling Raise Crush (151); 151 +S1 Floor Lower Ceiling Raise Crush (166); 166 +SR Floor Lower Ceiling Raise Crush (186); 186 + +[Actions: Exits] +S1 Exit Level (11); 11 +W1 Exit Level (52); 52 +#G1 Exit Level (197); 197 +W1 Exit To 31 (Secret Level 1) (124); 124 +S1 Exit To 32 (Secret Level 2) (51); 51 +S1 Exit To 9 (Secret Level) (51); 51 +#G1 Exit To Secret Level (198); 198 + +[Actions: Friction, Wind, Current] +Friction, Ice>100, Sludge<100 (223); 223 +Wind Force/Direction (224); 224 +Current Force/Direction (225); 225 +Force of Point Push/Pull Field (226); 226 + +[Actions: Scroll Effects] +Effect Scrolling First Side (48); 48 +Reverse Scrolling First Side (85); 85 +Set Tagged Sector's Texture Height (242); 242 +Remote Scroll Sector's Ceiling (245); 245 +Remote Scroll Sector's Floor (246); 246 +Remote Carry Things on Floor (247); 247 +Remote Scroll Floor & Carry Things (248); 248 +Remote Scroll 1st Side Tagged Line (249); 249 +Accel Scroll Sector's Ceiling (214); 214 +Accel Scroll Sector's Floor (215); 215 +Accel Carry Things on Floor (216); 216 +Accel Scroll Floor & Carry Things (217); 217 +Accel Scroll 1st Side Tagged Line (218); 218 +Scroll Sector's Ceiling (250); 250 +Scroll Sector's Floor (251); 251 +Carry Things On Sector Floor (252); 252 +Scroll&Carry Things Sector Floor (253); 253 +Scroll First Side of Tagged Line (254); 254 +Effect Scrolling From XY Offsets (255); 255 + +[Actions: Floor Lowers] +S1 Floor Change Donut (9); 9 +#SR Floor Change Donut (191); 191 +#W1 Floor Change Donut (146); 146 +#WR Floor Change Donut (155); 155 +W1 Floor Lower To Near (219); 219 +WR Floor Lower To Near (220); 220 +S1 Floor Lower To Near (221); 221 +SR Floor Lower To Near (222); 222 +WR Floor Lower To Highest (83); 83 +W1 Floor Lower To Highest (19); 19 +SR Floor Lower To Highest (45); 45 +S1 Floor Lower To Highest (102); 102 +SR Floor Lower To Lowest (60); 60 +S1 Floor Lower To Lowest (23); 23 +WR Floor Lower To Lowest (82); 82 +W1 Floor Lower To Lowest (38); 38 +WR Floor Lower Turbo (98); 98 +W1 Floor Lower Turbo (36); 36 +SR Floor Lower Turbo (70); 70 +S1 Floor Lower Turbo (71); 71 +WR Floor Lower & Change (84); 84 +W1 Floor Lower & Change (37); 37 +SR Floor Lower & Change (177); 177 +S1 Floor Lower & Change (159); 159 +#W1 Floor Change Trig (153); 153 +WR Floor Change Trig (154); 154 +#S1 Floor Change Trig (189); 189 +SR Floor Change Trig (190); 190 +#W1 Floor Change Numeric (215); 239 +#WR Floor Change Numeric (216); 240 +#S1 Floor Change Numeric (217); 241 +SR Floor Change Numeric (218); 78 + + +[Actions: Floor Raises] +W1 Floor Raise (5); 5 +WR Floor Raise (91); 91 +S1 Floor Raise (101); 101 +SR Floor Raise (64); 64 +W1 Floor Raise Turbo (130); 130 +WR Floor Raise Turbo (129); 129 +S1 Floor Raise Turbo (131); 131 +SR Floor Raise Turbo (132); 132 +W1 Floor Raise To Nearest (119); 119 +WR Floor Raise To Nearest (128); 128 +S1 Floor Raise To Nearest (18); 18 +SR Floor Raise To Nearest (69); 69 +W1 Floor Raise 24 (58); 58 +WR Floor Raise 24 (92); 92 +S1 Floor Raise 24 (161); 161 +SR Floor Raise 24 (180); 180 +W1 Floor Raise 24 & Change (59); 59 +WR Floor Raise 24 & Change (93); 93 +S1 Floor Raise 24 & Change (160); 160 +SR Floor Raise 24 & Change (179); 179 +W1 Floor Raise 24 & Change Tex (143); 143 +WR Floor Raise 24 & Change Tex (148); 148 +S1 Floor Raise 24 & Change Tex (15); 15 +SR Floor Raise 24 & Change Tex (66); 66 +W1 Floor Raise 32 & Change Tex (144); 144 +WR Floor Raise 32 & Change Tex (149); 149 +S1 Floor Raise 32 & Change Tex (14); 14 +SR Floor Raise 32 & Change Tex (67); 67 +W1 Floor Raise 512 (142); 142 +WR Floor Raise 512 (147); 147 +S1 Floor Raise 512 (140); 140 +SR Floor Raise 512 (178); 178 +W1 Floor Raise Near & Change (22); 22 +WR Floor Raise Near & Change (95); 95 +S1 Floor Raise Near & Change (20); 20 +SR Floor Raise Near & Change (68); 68 +W1 Floor Raise To Short Tex (30); 30 +WR Floor Raise To Short Tex (96); 96 +S1 Floor Raise To Short Tex (158); 158 +SR Floor Raise To Short Tex (176); 176 +G1 Floor Raise (24); 24 +G1 Floor Raise Near & Change (47); 47 + +[Sectors] +Normal; 0 +Light blinks randomly; 1 +Light blinks on every 0.5 seconds; 2 +Light blinks on every 1.0 seconds; 3 +Light pulses smoothly; 8 +Light blinks on every 1.0 seconds (Synch); 12 +Light blinks on every 0.5 seconds (Synch); 13 +Light flickers like fire; 17 +Secret credit given; 9 +-10% / 20% health; 16 +-05% / 10% health; 5 +-02% / 05% health; 7 +-10% / 20% health & light blinks every 0.5 seconds; 4 +-10% / 20% health until 10% left, then ends level; 11 +30 seconds after level start, closes like a door; 10 +5 minutes after level start, opens and closes; 14 + +[Angles] +North; 90 +South; 270 +East; 0 +West; 180 +Northeast; 45 +Northwest; 135 +Southeast; 315 +Southwest; 225 + +[Thing Info] +# Thing information: Type; Radius; Height; AngleClash +# AngleClash: 0 = No angle/clash, 1 = angle, 2 = clash, 3 = angle/clash +# Nonspecified things have radius of 20 and height of 16, and don't draw +# angles or clash. + +# players, dm, teleport.. etc +1; 20; 56; 3 +2; 20; 56; 3 +3; 20; 56; 3 +4; 20; 56; 3 +14; 20; 56; 3 +11; 20; 56; 3 + +# monsters +3004; 20; 56; 3 +84; 20; 56; 3 +9; 20; 56; 3 +65; 20; 56; 3 +3001; 20; 56; 3 +3002; 30; 56; 3 +58; 30; 56; 3 +3006; 16; 56; 3 +3005; 31; 56; 3 +69; 24; 64; 3 +3003; 24; 64; 3 +68; 64; 64; 3 +71; 31; 56; 3 +66; 20; 56; 3 +67; 48; 64; 3 +64; 20; 56; 3 +7; 128; 100; 3 +16; 40; 110; 3 + +#other items +72; 16; 72; 0 +2035; 10; 42; 0 +54; 32; 16; 2 + +5; 20; 16; 2 +6; 20; 16; 2 +13; 20; 16; 2 +40; 20; 16; 2 +39; 20; 16; 2 +38; 20; 16; 2 +2012; 20; 16; 2 +2011; 20; 16; 2 +2018; 20; 16; 2 +2019; 20; 16; 2 +2025; 20; 16; 2 +2015; 20; 16; 2 +2014; 20; 16; 2 +2013; 20; 16; 2 +2026; 20; 16; 2 +2024; 20; 16; 2 +2023; 20; 16; 2 +2022; 20; 16; 2 +2045; 20; 16; 2 +83; 20; 16; 2 +2001; 20; 16; 2 +2005; 20; 16; 2 +2002; 20; 16; 2 +82; 20; 16; 2 +2003; 20; 16; 2 +2004; 20; 16; 2 +2006; 20; 16; 2 +2007; 20; 16; 2 +2008; 20; 16; 2 +2048; 20; 16; 2 +2049; 20; 16; 2 +2010; 20; 16; 2 +2046; 20; 16; 2 +2047; 20; 16; 2 +17; 20; 16; 2 +8; 20; 16; 2 +5001; 20; 16; 1 +5002; 20; 16; 1 + +[Things: Miscellaneous] +Color; Brown +Push Controller; 5001; CANDA0 +Color; Brown +Pull Controller; 5002; CANDA0 + +[Actions without Tag] +# A list of all the line types that don't require tags. +1 +99 +26 +28 +27 +117 +31 +32 +33 +34 +118 +48 +124 +11 +52 +51 +197 +198 +85 +255 + +# +# $Id: DOOM19.DAT,v 1.1 2000/04/09 17:51:52 proff_fs Exp $ +# +# $Log: DOOM19.DAT,v $ +# Revision 1.1 2000/04/09 17:51:52 proff_fs +# Initial revision +# +# Revision 1.17 1998/05/12 06:15:26 killough +# Change push/pull controller thing numbers +# +# Revision 1.16 1998/05/11 16:15:10 jim +# changed push things +# +# Revision 1.15 1998/04/17 10:26:43 killough +# Add new silent teleporters, fix problems +# +# Revision 1.14 1998/03/28 17:50:18 killough +# Fix typos and DCK limits exceeded +# +# Revision 1.13 1998/03/23 23:30:36 jim +# update DCK files for push things +# +# Revision 1.11 1998/03/23 03:09:45 killough +# Comment out some linedef types since DCK crashes +# +# Revision 1.10 1998/03/20 02:11:57 jim +# added new friction linedef +# +# Revision 1.9 1998/03/16 18:24:09 jim +# fixed format and renumbered conflicts +# +# Revision 1.6 1998/03/12 21:54:03 jim +# Freed up 12 linedefs for use as vectors +# +# Revision 1.5 1998/03/11 12:24:19 killough +# fix again +# +# Revision 1.4 1998/03/10 02:10:06 killough +# fix all sorts of broken things +# +# Revision 1.3 1998/03/09 08:01:11 killough +# fix comments +# +# Revision 1.2 1998/03/09 08:00:10 killough +# fix comments +# +# diff --git a/prboom/PRBOOM.DSP b/prboom/PRBOOM.DSP new file mode 100644 index 000000000..11e044bed --- /dev/null +++ b/prboom/PRBOOM.DSP @@ -0,0 +1,1144 @@ +# Microsoft Developer Studio Project File - Name="prboom" - Package Owner=<4> +# Microsoft Developer Studio Generated Build File, Format Version 5.00 +# ** DO NOT EDIT ** + +# TARGTYPE "Win32 (x86) Application" 0x0101 + +CFG=prboom - Win32 Debug GL +!MESSAGE This is not a valid makefile. To build this project using NMAKE, +!MESSAGE use the Export Makefile command and run +!MESSAGE +!MESSAGE NMAKE /f "prboom.mak". +!MESSAGE +!MESSAGE You can specify a configuration when running NMAKE +!MESSAGE by defining the macro CFG on the command line. For example: +!MESSAGE +!MESSAGE NMAKE /f "prboom.mak" CFG="prboom - Win32 Debug GL" +!MESSAGE +!MESSAGE Possible choices for configuration are: +!MESSAGE +!MESSAGE "prboom - Win32 Release" (based on "Win32 (x86) Application") +!MESSAGE "prboom - Win32 Debug" (based on "Win32 (x86) Application") +!MESSAGE "prboom - Win32 Release_NOASM" (based on "Win32 (x86) Application") +!MESSAGE "prboom - Win32 Release GL" (based on "Win32 (x86) Application") +!MESSAGE "prboom - Win32 Debug GL" (based on "Win32 (x86) Application") +!MESSAGE + +# Begin Project +# PROP Scc_ProjName "" +# PROP Scc_LocalPath "" +CPP=cl.exe +MTL=midl.exe +RSC=rc.exe + +!IF "$(CFG)" == "prboom - Win32 Release" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "Release" +# PROP BASE Intermediate_Dir "Release" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "obj/win32" +# PROP Intermediate_Dir "obj/win32" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /G4 /W3 /GX /O2 /D "NDEBUG" /D "WIN32" /D "_WINDOWS" /D "DOGS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x407 /d "NDEBUG" +# ADD RSC /l 0x407 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /machine:I386 +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winmm.lib dsound.lib ddraw.lib wsock32.lib /nologo /subsystem:windows /machine:I386 /out:"bin/win32/prboom.exe" +# SUBTRACT LINK32 /profile /incremental:yes /debug + +!ELSEIF "$(CFG)" == "prboom - Win32 Debug" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "Debug" +# PROP BASE Intermediate_Dir "Debug" +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "objdebug/win32" +# PROP Intermediate_Dir "objdebug/win32" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /D "_DEBUG" /D "INSTRUMENTED" /D "RANGECHECK" /D "ZONEIDCHECK" /D "WIN32" /D "_WINDOWS" /D "DOGS" /YX /FD /c +# SUBTRACT CPP /WX +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x407 /d "_DEBUG" +# ADD RSC /l 0x407 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winmm.lib ddraw.lib dsound.lib wsock32.lib /nologo /subsystem:windows /incremental:no /debug /machine:I386 /out:"bindebug/win32/prboom.exe" +# SUBTRACT LINK32 /profile + +!ELSEIF "$(CFG)" == "prboom - Win32 Release_NOASM" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "prboom__" +# PROP BASE Intermediate_Dir "prboom__" +# PROP BASE Ignore_Export_Lib 0 +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "obj/win32woasm" +# PROP Intermediate_Dir "obj/win32woasm" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /W3 /GX /O2 /D "NDEBUG" /D "NOASM" /D "WIN32" /D "_WINDOWS" /D "DOGS" /YX /FD /c +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x407 /d "NDEBUG" +# ADD RSC /l 0x407 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winmm.lib dsound.lib ddraw.lib wsock32.lib /nologo /subsystem:windows /machine:I386 /out:"bin/win32/prboom.exe" +# SUBTRACT BASE LINK32 /profile /debug +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winmm.lib dsound.lib ddraw.lib wsock32.lib /nologo /subsystem:windows /machine:I386 /out:"bin/win32woasm/prboom.exe" +# SUBTRACT LINK32 /profile /debug + +!ELSEIF "$(CFG)" == "prboom - Win32 Release GL" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 0 +# PROP BASE Output_Dir "prboom__" +# PROP BASE Intermediate_Dir "prboom__" +# PROP BASE Ignore_Export_Lib 0 +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 0 +# PROP Output_Dir "obj/win32gl" +# PROP Intermediate_Dir "obj/win32gl" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /G4 /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /YX /FD /c +# ADD CPP /nologo /G4 /W3 /GX /O2 /D "NDEBUG" /D "GL_DOOM" /D "WIN32" /D "_WINDOWS" /D "DOGS" /YX /FD /c +# SUBTRACT CPP /Fr +# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x407 /d "NDEBUG" +# ADD RSC /l 0x407 /d "NDEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winmm.lib dsound.lib ddraw.lib wsock32.lib /nologo /subsystem:windows /machine:I386 /out:"bin/win32/prboom.exe" +# SUBTRACT BASE LINK32 /profile /incremental:yes /debug +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winmm.lib dsound.lib ddraw.lib wsock32.lib opengl32.lib glu32.lib /nologo /subsystem:windows /profile /machine:I386 /out:"bin/win32gl/glboom.exe" +# SUBTRACT LINK32 /debug + +!ELSEIF "$(CFG)" == "prboom - Win32 Debug GL" + +# PROP BASE Use_MFC 0 +# PROP BASE Use_Debug_Libraries 1 +# PROP BASE Output_Dir "prboom_0" +# PROP BASE Intermediate_Dir "prboom_0" +# PROP BASE Ignore_Export_Lib 0 +# PROP BASE Target_Dir "" +# PROP Use_MFC 0 +# PROP Use_Debug_Libraries 1 +# PROP Output_Dir "objdebug/win32gl" +# PROP Intermediate_Dir "objdebug/win32gl" +# PROP Ignore_Export_Lib 0 +# PROP Target_Dir "" +# ADD BASE CPP /nologo /W3 /Gm /GX /Zi /Od /D "WIN32" /D "_DEBUG" /D "_WINDOWS" /D "INSTRUMENTED" /D "RANGECHECK" /YX /FD /c +# ADD CPP /nologo /W3 /Gm /GX /Zi /Od /D "_DEBUG" /D "INSTRUMENTED" /D "RANGECHECK" /D "ZONEIDCHECK" /D "GL_DOOM" /D "WIN32" /D "_WINDOWS" /D "DOGS" /YX /FD /c +# SUBTRACT CPP /Fr +# ADD BASE MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +# ADD MTL /nologo /D "_DEBUG" /mktyplib203 /o NUL /win32 +# ADD BASE RSC /l 0x407 /d "_DEBUG" +# ADD RSC /l 0x407 /d "_DEBUG" +BSC32=bscmake.exe +# ADD BASE BSC32 /nologo +# ADD BSC32 /nologo +LINK32=link.exe +# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winmm.lib ddraw.lib dsound.lib wsock32.lib /nologo /subsystem:windows /incremental:no /debug /machine:I386 /out:"bindebug/win32/prboom.exe" +# SUBTRACT BASE LINK32 /profile +# ADD LINK32 kernel32.lib user32.lib gdi32.lib winmm.lib ddraw.lib dsound.lib wsock32.lib opengl32.lib glu32.lib /nologo /subsystem:windows /incremental:no /debug /machine:I386 /out:"bindebug/win32gl/glboom.exe" +# SUBTRACT LINK32 /profile + +!ENDIF + +# Begin Target + +# Name "prboom - Win32 Release" +# Name "prboom - Win32 Debug" +# Name "prboom - Win32 Release_NOASM" +# Name "prboom - Win32 Release GL" +# Name "prboom - Win32 Debug GL" +# Begin Group "Source Files" + +# PROP Default_Filter "c;h;nas" +# Begin Source File + +SOURCE=.\src\Am_map.c +# End Source File +# Begin Source File + +SOURCE=.\src\Am_map.h +# End Source File +# Begin Source File + +SOURCE=.\src\D_deh.c +# End Source File +# Begin Source File + +SOURCE=.\src\D_deh.h +# End Source File +# Begin Source File + +SOURCE=.\src\D_englsh.h +# End Source File +# Begin Source File + +SOURCE=.\src\D_event.h +# End Source File +# Begin Source File + +SOURCE=.\src\D_french.h +# End Source File +# Begin Source File + +SOURCE=.\src\D_items.c +# End Source File +# Begin Source File + +SOURCE=.\src\D_items.h +# End Source File +# Begin Source File + +SOURCE=.\src\D_main.c +# End Source File +# Begin Source File + +SOURCE=.\src\D_main.h +# End Source File +# Begin Source File + +SOURCE=.\src\D_net.c +# End Source File +# Begin Source File + +SOURCE=.\src\D_net.h +# End Source File +# Begin Source File + +SOURCE=.\src\D_player.h +# End Source File +# Begin Source File + +SOURCE=.\src\D_textur.h +# End Source File +# Begin Source File + +SOURCE=.\src\D_think.h +# End Source File +# Begin Source File + +SOURCE=.\src\D_ticcmd.h +# End Source File +# Begin Source File + +SOURCE=.\src\Doomdata.h +# End Source File +# Begin Source File + +SOURCE=.\src\Doomdef.c +# End Source File +# Begin Source File + +SOURCE=.\src\Doomdef.h +# End Source File +# Begin Source File + +SOURCE=.\src\Doomstat.c +# End Source File +# Begin Source File + +SOURCE=.\src\Doomstat.h +# End Source File +# Begin Source File + +SOURCE=.\src\Doomtype.h +# End Source File +# Begin Source File + +SOURCE=.\src\drawasm.nas + +!IF "$(CFG)" == "prboom - Win32 Release" + +# Begin Custom Build - Compiling drawasm.nas +IntDir=.\obj/win32 +InputPath=.\src\drawasm.nas +InputName=drawasm + +"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + nasmw -o $(IntDir)\$(InputName).obj -f win32 $(InputPath) + +# End Custom Build + +!ELSEIF "$(CFG)" == "prboom - Win32 Debug" + +# Begin Custom Build - Compiling drawasm.nas +IntDir=.\objdebug/win32 +InputPath=.\src\drawasm.nas +InputName=drawasm + +"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + nasmw -o $(IntDir)\$(InputName).obj -f win32 $(InputPath) + +# End Custom Build + +!ELSEIF "$(CFG)" == "prboom - Win32 Release_NOASM" + +!ELSEIF "$(CFG)" == "prboom - Win32 Release GL" + +# Begin Custom Build - Compiling drawasm.nas +IntDir=.\obj/win32gl +InputPath=.\src\drawasm.nas +InputName=drawasm + +"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + nasmw -o $(IntDir)\$(InputName).obj -f win32 $(InputPath) + +# End Custom Build + +!ELSEIF "$(CFG)" == "prboom - Win32 Debug GL" + +# Begin Custom Build - Compiling drawasm.nas +IntDir=.\objdebug/win32gl +InputPath=.\src\drawasm.nas +InputName=drawasm + +"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + nasmw -o $(IntDir)\$(InputName).obj -f win32 $(InputPath) + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\src\Dstrings.c +# End Source File +# Begin Source File + +SOURCE=.\src\Dstrings.h +# End Source File +# Begin Source File + +SOURCE=.\src\F_finale.c +# End Source File +# Begin Source File + +SOURCE=.\src\F_finale.h +# End Source File +# Begin Source File + +SOURCE=.\src\F_wipe.c +# End Source File +# Begin Source File + +SOURCE=.\src\F_wipe.h +# End Source File +# Begin Source File + +SOURCE=.\src\G_game.c +# End Source File +# Begin Source File + +SOURCE=.\src\G_game.h +# End Source File +# Begin Source File + +SOURCE=.\src\Hu_conf.c +# End Source File +# Begin Source File + +SOURCE=.\src\Hu_conf.h +# End Source File +# Begin Source File + +SOURCE=.\src\Hu_lib.c +# End Source File +# Begin Source File + +SOURCE=.\src\Hu_lib.h +# End Source File +# Begin Source File + +SOURCE=.\src\Hu_stuff.c +# End Source File +# Begin Source File + +SOURCE=.\src\Hu_stuff.h +# End Source File +# Begin Source File + +SOURCE=.\src\I_main.c +# End Source File +# Begin Source File + +SOURCE=.\src\I_net.c +# End Source File +# Begin Source File + +SOURCE=.\src\I_net.h +# End Source File +# Begin Source File + +SOURCE=.\src\I_sound.c +# End Source File +# Begin Source File + +SOURCE=.\src\I_sound.h +# End Source File +# Begin Source File + +SOURCE=.\src\I_system.c +# End Source File +# Begin Source File + +SOURCE=.\src\I_system.h +# End Source File +# Begin Source File + +SOURCE=.\src\I_video.c +# End Source File +# Begin Source File + +SOURCE=.\src\I_video.h +# End Source File +# Begin Source File + +SOURCE=.\src\Info.c +# End Source File +# Begin Source File + +SOURCE=.\src\Info.h +# End Source File +# Begin Source File + +SOURCE=.\src\lprintf.c +# End Source File +# Begin Source File + +SOURCE=.\src\lprintf.h +# End Source File +# Begin Source File + +SOURCE=.\src\M_argv.c +# End Source File +# Begin Source File + +SOURCE=.\src\M_argv.h +# End Source File +# Begin Source File + +SOURCE=.\src\M_bbox.c +# End Source File +# Begin Source File + +SOURCE=.\src\M_bbox.h +# End Source File +# Begin Source File + +SOURCE=.\src\M_cheat.c +# End Source File +# Begin Source File + +SOURCE=.\src\M_cheat.h +# End Source File +# Begin Source File + +SOURCE=.\src\M_fixed.h +# End Source File +# Begin Source File + +SOURCE=.\src\M_menu.c +# End Source File +# Begin Source File + +SOURCE=.\src\M_menu.h +# End Source File +# Begin Source File + +SOURCE=.\src\M_misc.c +# End Source File +# Begin Source File + +SOURCE=.\src\M_misc.h +# End Source File +# Begin Source File + +SOURCE=.\src\M_random.c +# End Source File +# Begin Source File + +SOURCE=.\src\M_random.h +# End Source File +# Begin Source File + +SOURCE=.\src\M_swap.h +# End Source File +# Begin Source File + +SOURCE=.\src\Mmus2mid.c +# End Source File +# Begin Source File + +SOURCE=.\src\Mmus2mid.h +# End Source File +# Begin Source File + +SOURCE=.\src\P_ceilng.c +# End Source File +# Begin Source File + +SOURCE=.\src\P_doors.c +# End Source File +# Begin Source File + +SOURCE=.\src\P_enemy.c +# End Source File +# Begin Source File + +SOURCE=.\src\P_enemy.h +# End Source File +# Begin Source File + +SOURCE=.\src\P_floor.c +# End Source File +# Begin Source File + +SOURCE=.\src\P_genlin.c +# End Source File +# Begin Source File + +SOURCE=.\src\P_inter.c +# End Source File +# Begin Source File + +SOURCE=.\src\P_inter.h +# End Source File +# Begin Source File + +SOURCE=.\src\P_lights.c +# End Source File +# Begin Source File + +SOURCE=.\src\P_map.c +# End Source File +# Begin Source File + +SOURCE=.\src\P_map.h +# End Source File +# Begin Source File + +SOURCE=.\src\P_maputl.c +# End Source File +# Begin Source File + +SOURCE=.\src\P_maputl.h +# End Source File +# Begin Source File + +SOURCE=.\src\P_mobj.c +# End Source File +# Begin Source File + +SOURCE=.\src\P_mobj.h +# End Source File +# Begin Source File + +SOURCE=.\src\P_plats.c +# End Source File +# Begin Source File + +SOURCE=.\src\P_pspr.c +# End Source File +# Begin Source File + +SOURCE=.\src\P_pspr.h +# End Source File +# Begin Source File + +SOURCE=.\src\P_saveg.c +# End Source File +# Begin Source File + +SOURCE=.\src\P_saveg.h +# End Source File +# Begin Source File + +SOURCE=.\src\P_setup.c +# End Source File +# Begin Source File + +SOURCE=.\src\P_setup.h +# End Source File +# Begin Source File + +SOURCE=.\src\P_sight.c +# End Source File +# Begin Source File + +SOURCE=.\src\P_spec.c +# End Source File +# Begin Source File + +SOURCE=.\src\P_spec.h +# End Source File +# Begin Source File + +SOURCE=.\src\P_switch.c +# End Source File +# Begin Source File + +SOURCE=.\src\P_telept.c +# End Source File +# Begin Source File + +SOURCE=.\src\P_tick.c +# End Source File +# Begin Source File + +SOURCE=.\src\P_tick.h +# End Source File +# Begin Source File + +SOURCE=.\src\P_user.c +# End Source File +# Begin Source File + +SOURCE=.\src\P_user.h +# End Source File +# Begin Source File + +SOURCE=.\src\R_bsp.c +# End Source File +# Begin Source File + +SOURCE=.\src\R_bsp.h +# End Source File +# Begin Source File + +SOURCE=.\src\R_data.c +# End Source File +# Begin Source File + +SOURCE=.\src\R_data.h +# End Source File +# Begin Source File + +SOURCE=.\src\R_defs.h +# End Source File +# Begin Source File + +SOURCE=.\src\R_draw.c +# End Source File +# Begin Source File + +SOURCE=.\src\R_draw.h +# End Source File +# Begin Source File + +SOURCE=.\src\R_main.c +# End Source File +# Begin Source File + +SOURCE=.\src\R_main.h +# End Source File +# Begin Source File + +SOURCE=.\src\R_plane.c +# End Source File +# Begin Source File + +SOURCE=.\src\R_plane.h +# End Source File +# Begin Source File + +SOURCE=.\src\R_segs.c +# End Source File +# Begin Source File + +SOURCE=.\src\R_segs.h +# End Source File +# Begin Source File + +SOURCE=.\src\R_sky.c +# End Source File +# Begin Source File + +SOURCE=.\src\R_sky.h +# End Source File +# Begin Source File + +SOURCE=.\src\R_state.h +# End Source File +# Begin Source File + +SOURCE=.\src\R_things.c +# End Source File +# Begin Source File + +SOURCE=.\src\R_things.h +# End Source File +# Begin Source File + +SOURCE=.\src\S_sound.c +# End Source File +# Begin Source File + +SOURCE=.\src\S_sound.h +# End Source File +# Begin Source File + +SOURCE=.\src\Sounds.c +# End Source File +# Begin Source File + +SOURCE=.\src\Sounds.h +# End Source File +# Begin Source File + +SOURCE=.\src\St_lib.c +# End Source File +# Begin Source File + +SOURCE=.\src\St_lib.h +# End Source File +# Begin Source File + +SOURCE=.\src\St_stuff.c +# End Source File +# Begin Source File + +SOURCE=.\src\St_stuff.h +# End Source File +# Begin Source File + +SOURCE=.\src\Tables.c +# End Source File +# Begin Source File + +SOURCE=.\src\Tables.h +# End Source File +# Begin Source File + +SOURCE=.\src\V_video.c +# End Source File +# Begin Source File + +SOURCE=.\src\V_video.h +# End Source File +# Begin Source File + +SOURCE=.\src\Version.c +# End Source File +# Begin Source File + +SOURCE=.\src\Version.h +# End Source File +# Begin Source File + +SOURCE=.\src\vscale.nas + +!IF "$(CFG)" == "prboom - Win32 Release" + +# Begin Custom Build - Compiling vscale.nas +IntDir=.\obj/win32 +InputPath=.\src\vscale.nas +InputName=vscale + +"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + nasmw -o $(IntDir)\$(InputName).obj -f win32 $(InputPath) + +# End Custom Build + +!ELSEIF "$(CFG)" == "prboom - Win32 Debug" + +# Begin Custom Build - Compiling vscale.nas +IntDir=.\objdebug/win32 +InputPath=.\src\vscale.nas +InputName=vscale + +"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + nasmw -o $(IntDir)\$(InputName).obj -f win32 $(InputPath) + +# End Custom Build + +!ELSEIF "$(CFG)" == "prboom - Win32 Release_NOASM" + +!ELSEIF "$(CFG)" == "prboom - Win32 Release GL" + +# Begin Custom Build - Compiling vscale.nas +IntDir=.\obj/win32gl +InputPath=.\src\vscale.nas +InputName=vscale + +"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + nasmw -o $(IntDir)\$(InputName).obj -f win32 $(InputPath) + +# End Custom Build + +!ELSEIF "$(CFG)" == "prboom - Win32 Debug GL" + +# Begin Custom Build - Compiling vscale.nas +IntDir=.\objdebug/win32gl +InputPath=.\src\vscale.nas +InputName=vscale + +"$(IntDir)\$(InputName).obj" : $(SOURCE) "$(INTDIR)" "$(OUTDIR)" + nasmw -o $(IntDir)\$(InputName).obj -f win32 $(InputPath) + +# End Custom Build + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\src\W_wad.c +# End Source File +# Begin Source File + +SOURCE=.\src\W_wad.h +# End Source File +# Begin Source File + +SOURCE=.\src\Wi_stuff.c +# End Source File +# Begin Source File + +SOURCE=.\src\Wi_stuff.h +# End Source File +# Begin Source File + +SOURCE=.\src\Winstuff.c +# End Source File +# Begin Source File + +SOURCE=.\src\Winstuff.h +# End Source File +# Begin Source File + +SOURCE=.\src\Z_zone.c +# End Source File +# Begin Source File + +SOURCE=.\src\Z_zone.h +# End Source File +# End Group +# Begin Group "Text Files" + +# PROP Default_Filter "" +# Begin Group "boom" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\txts\boom\Boom.txt +# End Source File +# Begin Source File + +SOURCE=.\txts\boom\Boomdeh.txt +# End Source File +# Begin Source File + +SOURCE=.\txts\boom\Boomref.txt +# End Source File +# Begin Source File + +SOURCE=.\txts\boom\Boomsrc.txt +# End Source File +# Begin Source File + +SOURCE=.\txts\boom\Copying +# End Source File +# Begin Source File + +SOURCE=.\txts\boom\Log_jff.txt +# End Source File +# Begin Source File + +SOURCE=.\txts\boom\Log_lee.txt +# End Source File +# Begin Source File + +SOURCE=.\txts\boom\Log_rsp.txt +# End Source File +# Begin Source File + +SOURCE=.\txts\boom\Log_ty.txt +# End Source File +# Begin Source File + +SOURCE=.\txts\boom\Snddrvr.txt +# End Source File +# End Group +# Begin Group "doom" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\txts\doom\ChangeLog +# End Source File +# Begin Source File + +SOURCE=.\txts\doom\Doomlic.txt +# End Source File +# Begin Source File + +SOURCE=.\txts\doom\Files +# End Source File +# Begin Source File + +SOURCE=.\txts\doom\Files2 +# End Source File +# Begin Source File + +SOURCE=.\txts\doom\Makefile +# End Source File +# Begin Source File + +SOURCE=.\txts\doom\Readme.asm +# End Source File +# Begin Source File + +SOURCE=.\txts\doom\Readme.b +# End Source File +# Begin Source File + +SOURCE=.\txts\doom\README.book +# End Source File +# Begin Source File + +SOURCE=.\txts\doom\Readme.gl +# End Source File +# Begin Source File + +SOURCE=.\txts\doom\README.sound +# End Source File +# Begin Source File + +SOURCE=.\txts\doom\Readme.txt +# End Source File +# Begin Source File + +SOURCE=.\txts\doom\Todo +# End Source File +# End Group +# Begin Source File + +SOURCE=.\txts\compile.txt +# End Source File +# Begin Source File + +SOURCE=.\txts\Log_pr.txt +# End Source File +# Begin Source File + +SOURCE=.\txts\Readme.txt +# End Source File +# Begin Source File + +SOURCE=.\txts\whatsnew.txt +# End Source File +# End Group +# Begin Group "Resources" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\icons\barrel.ico +# End Source File +# Begin Source File + +SOURCE=.\icons\fouch.ico +# End Source File +# Begin Source File + +SOURCE=.\icons\god.ico +# End Source File +# Begin Source File + +SOURCE=.\icons\Heada1.ico +# End Source File +# Begin Source File + +SOURCE=.\icons\icons.rc +# End Source File +# Begin Source File + +SOURCE=.\icons\skull.ico +# End Source File +# End Group +# Begin Group "GL_Source Files" + +# PROP Default_Filter "" +# Begin Source File + +SOURCE=.\src\gl_intern.h + +!IF "$(CFG)" == "prboom - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "prboom - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "prboom - Win32 Release_NOASM" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "prboom - Win32 Release GL" + +!ELSEIF "$(CFG)" == "prboom - Win32 Debug GL" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\src\gl_pr_tex.c + +!IF "$(CFG)" == "prboom - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "prboom - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "prboom - Win32 Release_NOASM" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "prboom - Win32 Release GL" + +!ELSEIF "$(CFG)" == "prboom - Win32 Debug GL" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\src\gl_proff.c + +!IF "$(CFG)" == "prboom - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "prboom - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "prboom - Win32 Release_NOASM" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "prboom - Win32 Release GL" + +!ELSEIF "$(CFG)" == "prboom - Win32 Debug GL" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\src\gl_struct.h + +!IF "$(CFG)" == "prboom - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "prboom - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "prboom - Win32 Release_NOASM" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "prboom - Win32 Release GL" + +# PROP BASE Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "prboom - Win32 Debug GL" + +# PROP BASE Exclude_From_Build 1 + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\src\OpenGL.c + +!IF "$(CFG)" == "prboom - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "prboom - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "prboom - Win32 Release_NOASM" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "prboom - Win32 Release GL" + +!ELSEIF "$(CFG)" == "prboom - Win32 Debug GL" + +!ENDIF + +# End Source File +# Begin Source File + +SOURCE=.\src\opengl.h + +!IF "$(CFG)" == "prboom - Win32 Release" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "prboom - Win32 Debug" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "prboom - Win32 Release_NOASM" + +# PROP Exclude_From_Build 1 + +!ELSEIF "$(CFG)" == "prboom - Win32 Release GL" + +!ELSEIF "$(CFG)" == "prboom - Win32 Debug GL" + +!ENDIF + +# End Source File +# End Group +# End Target +# End Project diff --git a/prboom/PRBOOM.DSW b/prboom/PRBOOM.DSW new file mode 100644 index 000000000..2c0cdf574 --- /dev/null +++ b/prboom/PRBOOM.DSW @@ -0,0 +1,53 @@ +Microsoft Developer Studio Workspace File, Format Version 5.00 +# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE! + +############################################################################### + +Project: "bin2c"=.\bin2c.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "bmp2c"=.\bmp2c.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Project: "prboom"=.\prboom.dsp - Package Owner=<4> + +Package=<5> +{{{ +}}} + +Package=<4> +{{{ +}}} + +############################################################################### + +Global: + +Package=<5> +{{{ +}}} + +Package=<3> +{{{ +}}} + +############################################################################### + diff --git a/prboom/PRBSTUFF/DEH2BEX.BAT b/prboom/PRBSTUFF/DEH2BEX.BAT new file mode 100755 index 000000000..dbca2a6c1 --- /dev/null +++ b/prboom/PRBSTUFF/DEH2BEX.BAT @@ -0,0 +1 @@ +perl -w deh2bex.pl bexout.txt \ No newline at end of file diff --git a/prboom/PRBSTUFF/DEH2BEX.PL b/prboom/PRBSTUFF/DEH2BEX.PL new file mode 100644 index 000000000..00e92e91c --- /dev/null +++ b/prboom/PRBSTUFF/DEH2BEX.PL @@ -0,0 +1,20 @@ +#!/usr/bin/perl +$write = 0; +while ($line = <>) { + chop($line); + if ($write == 1) { + if ($line =~ /^?END BEX/) { + $write = 0; + } + else + { + print $line, "\n"; + } + } + else + { + if ($line =~ /^?BEX FORMAT/) { + $write = 1; + } + } +} \ No newline at end of file diff --git a/prboom/PRBSTUFF/PRBOOM.INF b/prboom/PRBSTUFF/PRBOOM.INF new file mode 100644 index 000000000..a700020dd --- /dev/null +++ b/prboom/PRBSTUFF/PRBOOM.INF @@ -0,0 +1,61 @@ +[Version] +signature="$chicago$" + +[DefaultInstall] +CopyFiles=INF_File +AddReg=Registry,Registry_Uninstall +UpdateInis=Symbols_Create + +[DefaultInstall.ntx86] +CopyFiles=INF_File +AddReg=Registry,Registry_Uninstall_NT +UpdateInis=Symbols_Create + +[DefaultUninstall] +DelFiles=INF_File +DelReg=Registry,Registry_Uninstall +UpdateInis=Symbols_Remove + +[INF_File] +prboom.inf + +[DestinationDirs] +INF_File=17 + +[SourceDisksNames] +1="%01%",,1 + +[Registry] +HKLM,"%Reg_Path_Run%","Registering 'DOOM Options File' (.rsp)",, +HKCR,".rsp",,,"rspfile" +HKCR,"rspfile",,,"DOOM Options File" +HKCR,"rspfile\Shell\Open",,,"&Open" +HKCR,"rspfile\Shell\Open\command",,,"%01%\prboom.exe ""@%1"" -condump" +HKCR,"rspfile\Shell\Edit",,,"&Edit" +HKCR,"rspfile\Shell\Edit\command",,,"%10%\NOTEPAD.EXE ""%1""" +HKCR,"rspfile\DefaultIcon",,,"%01%\prboom.exe,0" +HKLM,"%Reg_Path_Run%","Viewing README.TXT",,"%10%\notepad.exe %01%\txts\readme.txt" + +[Registry_Uninstall] +HKLM,%UnInstallPath%,DisplayName,,"PrBoom - the Win32 port of Boom" +HKLM,%UnInstallPath%,UninstallString,,"%10%\rundll.exe setupx.dll,InstallHinfSection DefaultUninstall 132 %17%\prboom.inf" + +[Registry_Uninstall_NT] +HKLM,%UnInstallPath%,DisplayName,,"PrBoom - the Win32 port of Boom" +HKLM,%UnInstallPath%,UninstallString,,"%11%\rundll32.exe setupapi.dll,InstallHinfSection DefaultUninstall 132 %17%\prboom.inf" + +[Symbols_Create] +setup.ini, progman.groups,, "group1=PrBoom - the Win32 port of Boom" +setup.ini, group1,,""PrBoom","%01%\prboom.exe"" +setup.ini, group1,,""Readme.txt","%01%\txts\readme.txt"" +setup.ini, group1,,""Whatsnew.txt","%01%\txts\Whatsnew.txt"" + +[Symbols_Remove] +setup.ini, progman.groups,, "group1=PrBoom - the Win32 port of Boom" +setup.ini, group1,,""PrBoom"" +setup.ini, group1,,""Readme.txt"" +setup.ini, group1,,""Whatsnew.txt"" + +[Strings] +Reg_Path_Run="Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup" +UnInstallPath="Software\Microsoft\Windows\CurrentVersion\Uninstall\TeamTNT - PrBoom" diff --git a/prboom/TXTS/BOOM/BOOMDEH.TXT b/prboom/TXTS/BOOM/BOOMDEH.TXT new file mode 100644 index 000000000..bbf9f56b1 --- /dev/null +++ b/prboom/TXTS/BOOM/BOOMDEH.TXT @@ -0,0 +1,2392 @@ + +========================================== +Dehacked support in BOOM, extended support +========================================== + +Changes: + +8/28/98 added mnemonic representation for the bits of an item +definition. Also added an appendix B with the default bit +states for all DOOM2 Things. + +5/16/98 added a A_NULL codepointer entry to clear an already +existing code pointer to zero. + +5/3/98 added SAVEGAMENAME string parameter to change the first +part of the savegame name. 0-7 is appended during save. + +-------------------------------THINGS----------------------------- +##### +USAGE +##### + +This is actually something you can use to hack your Dehacked +output file to be more understandable and modifiable. Note that +once you do this you won't be able to bring it back into +Dehacked. + +You will find an area in a Dehacked output file for Things, +starting with an entry such as: + + Thing 31 (Barrel) + +Down a few lines, if you've altered the bits at all, you'll see +a line like: + + Bits = 205636102 + +That horrible number is why we are providing some mnemonics +instead. All you need to do is to put the appropriate ones +of the following mnemonics on the line where the big number is, +and it'll be read in and converted to the number for you. An +example line: + + Bits = SOLID+SHOOTABLE+NOBLOOD + +which converts to Bits = 524294 but you didn't have to figure +that part out. Just use plus signs between the mnemonics. +Here's the list, along with a bit of explanation of each, +and the phrase that's used in Dehacked to describe them. If +there are any disagreements between the 2 definitions, ours +wins. There is a complete list of all the DOOM2 Things in +Appendix B at the end of this file, with which bits they have +by default in BOOM (including for example which Things are +translucent) + + Mnemonic Bit mask Meaning / Dehacked phrase + ------------------------------------------------------------------ + SPECIAL, 0x00000001 - call P_Specialthing when touched + Can be picked up + SOLID, 0x00000002 - block movement + Obstacle + SHOOTABLE, 0x00000004 - can be hit + Shootable + NOSECTOR, 0x00000008 - invisible but touchable + Total invisibility + NOBLOCKMAP, 0x00000010 - inert but displayable + Can't be hit + AMBUSH, 0x00000020 - deaf monster + Semi-deaf + JUSTHIT, 0x00000040 - will try to attack right back + In pain + JUSTATTACKED, 0x00000080 - take at least 1 step before attacking + Steps before attack + SPAWNCEILING, 0x00000100 - initially hang from ceiling + Hangs from ceiling + NOGRAVITY, 0x00000200 - don't apply gravity during play + No Gravity + DROPOFF, 0x00000400 - can jump from high places + Travels over cliffs + PICKUP, 0x00000800 - will pick up items + Picks up items + NOCLIP, 0x00001000 - goes through walls + No clipping + SLIDE, 0x00002000 - keep info about sliding along walls + Slides along walls + FLOAT, 0x00004000 - allow movement to any height + Floating + TELEPORT, 0x00008000 - don't cross lines or look at teleport heights + Semi-no clipping + MISSILE, 0x00010000 - don't hit same species, explode on block + Projectiles + DROPPED, 0x00020000 - dropped, not spawned (like ammo clip) + Disappearing weapon + SHADOW, 0x00040000 - use fuzzy draw like spectres + Partial invisibility + NOBLOOD, 0x00080000 - puffs instead of blood when shot + Puffs (vs. bleeds) + CORPSE, 0x00100000 - so it will slide down steps when dead + Sliding helpless + INFLOAT, 0x00200000 - float but not to target height + No auto-leveling + COUNTKILL, 0x00400000 - count toward the kills total + Affects Kill % + COUNTITEM, 0x00800000 - count toward the items total + Affects Item % + SKULLFLY, 0x01000000 - special handling for flying skulls + Running + NOTDMATCH, 0x02000000 - do not spawn in deathmatch + Not in deathmatch + TRANSLATION, 0x04000000 - use translation table for color (players + Color 1 (gray/red) + UNUSED1, 0x08000000 - undefined or second bit for translation + Color 2 (brown/red) + UNUSED2, 0x10000000 - undefined + UNUSED3, 0x20000000 - undefined + UNUSED4, 0x40000000 - undefined + TRANSLUCENT, 0x80000000 - apply translucency to sprite (BOOM) + + +----------------------------CODE POINTERS------------------------- +##### +USAGE +##### + +Insert this block into your BEX file: + +[CODEPTR] +FRAME nn = mnemonic +... + +The Frame number is the same as you would use in Dehacked, and the +mnemonic is one of the ones listed below. These mnemonics, though +not perfectly clear, are the actual names of the functions in DOOM +that are called, so it makes the most sense to use them. + +When using Dehacked frame code pointer changes, BOOM will write out +a line for each one used showing what you'd put into a BEX [CODEPTR] +block, in the DEHOUT.TXT file. For example: + + Original Dehacked file lines: + + Pointer 93 (Frame 196) + Codep Frame = 176 + + Output from BOOM in the DEHOUT.TXT file when processing them: + + Line='Pointer 93 (Frame 196)' + Processing function [2] for Pointer + Processing Pointer at index 196: Frame + - applied 1c53c from codeptr[176] to states[196] + BEX [CODEPTR] -> FRAME 196 = Chase + + You could then use this in the [CODEPTR] block of a BEX file + instead of the Dehacked lines, making it much more clear + that in frame 196 you expect the monster to Chase the player: + + FRAME 196 = Chase + +In addition, you can now put any code pointer into any frame, whereas +Dehacked is limited to replacing only the existing ones. + +Valid mnemonics you can use: + + NULL << new, zeroes out an existing codepointer + Light0 + WeaponReady + Lower + Raise + Punch + ReFire + FirePistol + Light1 + FireShotgun + Light2 + FireShotgun2 + CheckReload + OpenShotgun2 + LoadShotgun2 + CloseShotgun2 + FireCGun + GunFlash + FireMissile + Saw + FirePlasma + BFGsound + FireBFG + BFGSpray + Explode + Pain + PlayerScream + Fall + XScream + Look + Chase + FaceTarget + PosAttack + Scream + SPosAttack + VileChase + VileStart + VileTarget + VileAttack + StartFire + Fire + FireCrackle + Tracer + SkelWhoosh + SkelFist + SkelMissile + FatRaise + FatAttack1 + FatAttack2 + FatAttack3 + BossDeath + CPosAttack + CPosRefire + TroopAttack + SargAttack + HeadAttack + BruisAttack + SkullAttack + Metal + SpidRefire + BabyMetal + BspiAttack + Hoof + CyberAttack + PainAttack + PainDie + KeenDie + BrainPain + BrainScream + BrainDie + BrainAwake + BrainSpit + SpawnSound + SpawnFly + BrainExplode + + +See the end of this file for the Code Pointer Appendix +which contains the actual default settings for code pointers +and frames. Remember, changing code pointers with BEX files is +no less prone to you trying to do something impossible that will +crash than it ever was in Dehacked--it's just simpler and more +flexible, and clearer to read, in specification. + + +----------------------------PAR TIMES----------------------------- +##### +USAGE +##### + +Insert the following block in your BEX file, using one or more +of the par lines depending on if you want to alter them for +DOOM 1 or DOOM 2. + +[PARS] +par e m p << for DOOM 1: episode, map, parseconds +par m p << for DOOM 2: mapnumber, parseconds + +You may have as many par times listed as you wish in the pars block. + +----------------------------INCLUDES------------------------------ +##### +USAGE +##### + +To include a DEH or BEX file in another one, put one or more of the +following lines in your BEX file: + + +INCLUDE filename +INCLUDE NOTEXT filename + +Filename must be specified in full, including a path if it's not +going to be in the current directory, and including its .deh or +.bex extension. By far better is to ship a file as a completely +self-contained file, but you can use this during testing and development. + +The NOTEXT directive will cause BOOM to skip any deh-style text blocks +in the included file, with the assumption that you're doing something +else in your main BEX file instead. Note that this will include any text +changes, including sprite names, etc. + +You may not nest include files (one include file can't include another). + +-----------------------------STRINGS------------------------------ +########## +BACKGROUND +########## + +The basic Dehacked file is understood and properly evaluated to change +such things as sounds, frame rewiring, Thing attributes, etc. No change +is required to the original .deh file for those things. However, text +is handled differently in BOOM for several reasons: + +1. Dehacked by the nature of the program was simply doing a search and +replace action on the strings as found in the executable. This is +clumsy and dangerous, though as good as can be done when dealing with +a compiled executable program. We now have the ability to change the +actual string values during play, a safer and better solution. + +2. Because Dehacked used the original string to find the place to +plug in the replacement, there was no way to write a generic hack that +would replace strings in all versions regardless of language. In BOOM, +the strings are identified by their names, which are the same in all +cases. + +3. Because Dehacked was replacing strings in a physical location in +the program file, it was limited to approximately the same size string +as the original. Though this is generally practical, it is limiting in +flexibility. BOOM allows any length string to replace any of the ones +in the game (this also applies to cheats). + +4. The purpose of replacing a string is to show the player some text +at a particular point in the game. Finding the original text that was +there and replacing it with other text worked, but logically what the +author should have been able to do was assign strings depending on the +desired purpose, and not have to recognize the original text to do so. +In BOOM, all strings are identified by a mnemonic name (actually the +name of the internal variable), making it easier to assign a string to +its desired purpose. In later versions we may also make other aliases +for some of those. + +Detailed information is available further down in this file, explaining +the mnemonic codes that are used for all the replaceable strings. Note +that some of the strings are always displayed in the small (uppercase +only) font, so capitalization is not important for those. + +The dehacked method of supplying an old texture followed by a new one, +with the lengths of the before and after strings in the dehacked file, +will be supported so long as the old string can be found as the default +value of one of the supported strings (see below). This should take +care of 97% of actual hacks, since intermission texts, informational +messages and level names for the automap are by far the most +prevalent and important changes. We urge the patch authors to also +provide new BEX format files, for clarity, supportability and +flexibility. + +##### +USAGE +##### + +To use extended string support in BOOM, start the section with a +[STRINGS] section marker, followed by lines that start with the key +mnemonic, an equal sign, and the value to assign to that string. You +may split the value to be assigned onto multiple lines by ending +each line that is to be continued with a backslash. Don't put +quotes around the string if you don't want them to show up in the +result. A couple of examples: + +# Start comments with a # +# Change the level name that shows up in the automap for MAP12: +[STRINGS] +HUSTR_12 = The Twelfth Night +# and now the new red key message for switches +PD_REDO = You need the scarlet pimpernel to \ + turn on this machine. +# Note that the blank before the backslash is included in the string +# but that the indentation before the word "turn" is not, allowing +# the change file to be easy to read. + +Other example files are included in the BEX_SAMP.ZIP file. All use the +.bex extension to avoid conflict with existing .deh files of the same +name. + +######################################## +MNEMONIC KEYS AND ORIGINAL VALUES TABLES +######################################## + +Note: +If the original initial value is longer than about 40 characters, +the string will have been truncated and will have an ellipsis (...) +after the closing double-quote. There should be enough in the part +that is shown to recognize it. + +If a string has C language printf() characters in it, such as %s or %d, +you should be sure that your replacement string either contains the +same ones in the same order, or that you leave them out of your string. +If that confuses you, you need to learn C or leave 'em alone . +Some trailing linefeeds have been removed for clarity, though \n in +the middle of a string indicates an internal linefeed and your +replacement can do likewise. + +=========================================== +Part 1 - GENERAL INITIALIZATION AND PROMPTS +=========================================== + +MNEMONIC Purpose + Initial original value (just the first part if long) +------------------ ----------------------------------------------------- +D_DEVSTR What shows during init if -devparm is used + "Development mode ON." +D_CDROM Init: if switch -cdrom is used + "CD-ROM Version: default.cfg from c:\\doomdata" +QUITMSG Default display when you pick Quit + "are you sure you want to\nquit this great game?" +LOADNET Warning when you try to load during a network game + "you can't do load while in a net game!" +QLOADNET Warning when you try quickload during a network game + "you can't quickload during a netgame!" +QSAVESPOT Warning when you quickload without a quicksaved game + "you haven't picked a quicksave slot yet!" +SAVEDEAD Warning when not playing or dead and you try to save + "you can't save if you aren't playing!" +QSPROMPT Prompt when quicksaving your game + "quicksave over your game named\n\n'%s'?" +QLPROMPT Prompt when quickloading a game + "do you want to quickload the game named\n\n'%s'?" +NEWGAME Warning if you try to start a game during network play + "you can't start a new game\nwhile in a network"... +NIGHTMARE Nightmare mode warning + "are you sure? this skill level\nisn't even rem"... +SWSTRING Warning when you pick any episode but 1 in Shareware + "this is the shareware version of doom.\n\nyou '... +MSGOFF Message when toggling messages off (F8) + "Messages OFF" +MSGON Message when toggling messages back on (F8) + "Messages ON" +NETEND Message when you try to Quit during a network game + "you can't end a netgame!" +ENDGAME Warning when you try to end the game + "are you sure you want to end the game?" +DETAILHI Message switching to high detail (obsolete in BOOM) + "High detail" +DETAILLO Message switching to high detail (obsolete in BOOM) + "Low detail" +GAMMALVL0 Message when gamma correction is set off + "Gamma correction OFF" +GAMMALVL1 Message when gamma correction is set to 1 + "Gamma correction level 1" +GAMMALVL2 Message when gamma correction is set to 2 + "Gamma correction level 2" +GAMMALVL3 Message when gamma correction is set to 3 + "Gamma correction level 3" +GAMMALVL4 Message when gamma correction is set to 4 + "Gamma correction level 4" +EMPTYSTRING Value that shows up in an unused savegame slot + "empty slot" +GGSAVED Message after a savegame has been written to disk + "game saved." +SAVEGAMENAME Saved game name, number is appended during save + "BOOMSAV" << new 5/3/98 + +============================================= +Part 2 - MESSAGES WHEN THE PLAYER GETS THINGS +============================================= + +GOTARMOR Picking up the Green armor (100%) + "Picked up the armor." +GOTMEGA Picking up the Blue armor (200%) + "Picked up the MegaArmor!" +GOTHTHBONUS Picking up a health bottle (1%) + "Picked up a health bonus." +GOTARMBONUS Picking up an armor helmet (1%) + "Picked up an armor bonus." +GOTSTIM Picking up a stimpack (10%) + "Picked up a stimpack." +GOTMEDINEED Picking up a medikit (25%) when very low on health + "Picked up a medikit that you REALLY need!" +GOTMEDIKIT Picking up a medikit (25%) under normal conditions + "Picked up a medikit." +GOTSUPER Picking up the blue health orb (200%) + "Supercharge!" +GOTBLUECARD Picking up the blue keycard + "Picked up a blue keycard." +GOTYELWCARD Picking up the yellow keycard + "Picked up a yellow keycard." +GOTREDCARD Picking up the red keycard + "Picked up a red keycard." +GOTBLUESKUL Picking up the blue skull key + "Picked up a blue skull key." +GOTYELWSKUL Picking up the yellow skull key + "Picked up a yellow skull key." +GOTREDSKULL Picking up the red skull key + "Picked up a red skull key." +GOTINVUL Picking up the invulnerability sphere + "Invulnerability!" +GOTBERSERK Picking up the berserk box + "Berserk!" +GOTINVIS Picking up the invisibility sphere + "Partial Invisibility" +GOTSUIT Picking up the rad suit + "Radiation Shielding Suit" +GOTMAP Picking up the computer map + "Computer Area Map" +GOTVISOR Picking up the light-amp goggles + "Light Amplification Visor" +GOTMSPHERE Picking up the mega orb (200%/200%) + "MegaSphere!" +GOTCLIP Picking up an ammo clip + "Picked up a clip." +GOTCLIPBOX Picking up a box of ammo + "Picked up a box of bullets." +GOTROCKET Picking up a single rocket + "Picked up a rocket." +GOTROCKBOX Picking up a box of rockets + "Picked up a box of rockets." +GOTCELL Picking up an energy cell (20 units) + "Picked up an energy cell." +GOTCELLBOX Picking up an energy pack (100 units) + "Picked up an energy cell pack." +GOTSHELLS Picking up a set of 4 shells + "Picked up 4 shotgun shells." +GOTSHELLBOX Picking up a box of 20 shells + "Picked up a box of shotgun shells." +GOTBACKPACK Picking up a backpack + "Picked up a backpack full of ammo!" +GOTBFG9000 Picking up the BFG (weapon 7) + "You got the BFG9000! Oh, yes." +GOTCHAINGUN Picking up the chaingun (weapon 4) + "You got the chaingun!" +GOTCHAINSAW Picking up the chainsaw (weapon 8) + "A chainsaw! Find some meat!" +GOTLAUNCHER Picking up the rocket launcher (weapon 5) + "You got the rocket launcher!" +GOTPLASMA Picking up the plasma gun (weapon 6) + "You got the plasma gun!" +GOTSHOTGUN Picking up the shotgun (weapon 3) + "You got the shotgun!" +GOTSHOTGUN2 Picking up the double-barreled shotgun (weapon 9) + "You got the super shotgun!" + +====================================== +Part 3 - MESSAGES WHEN KEYS ARE NEEDED (*)= BOOM extensions +====================================== + +PD_BLUEO When you don't have the blue key for a switch + "You need a blue key to activate this object" +PD_REDO When you don't have the red key for a switch + "You need a red key to activate this object" +PD_YELLOWO When you don't have the yellow key for a switch + "You need a yellow key to activate this object" +PD_BLUEK Blue key needed to open a door + "You need a blue key to open this door" +PD_REDK Red key needed to open a door + "You need a red key to open this door" +PD_YELLOWK Yellow key needed to open a door + "You need a yellow key to open this door" +PD_BLUEC Blue card key needed, not skull (*) + "You need a blue card to open this door" +PD_REDC Red card key needed, not skull (*) + "You need a red card to open this door" +PD_YELLOWC Yellow card key needed, not skull (*) + "You need a yellow card to open this door" +PD_BLUES Blue skull key needed, not card (*) + "You need a blue skull to open this door" +PD_REDS Red skull key needed, not card (*) + "You need a red skull to open this door" +PD_YELLOWS Yellow skull key needed, not card (*) + "You need a yellow skull to open this door" +PD_ANY You need a key but any of them will do (*) + "Any key will open this door" +PD_ALL3 You need red, blue and yellow keys (*) + "You need all three keys to open this door" +PD_ALL6 You need both skulls and cards in all 3 colors (*) + "You need all six keys to open this door" + +============================== +Part 4 - MULTIPLAYER MESSAGING +============================== + +HUSTR_MSGU If you try to send a blank message? + "[Message unsent]" +HUSTR_MESSAGESENT After you send a message? Haven't seen it + "[Message Sent]" + +* Chat macros 1-10 +* Original values in quotes + +HUSTR_CHATMACRO1 "I'm ready to kick butt!" +HUSTR_CHATMACRO2 "I'm OK." +HUSTR_CHATMACRO3 "I'm not looking too good!" +HUSTR_CHATMACRO4 "Help!" +HUSTR_CHATMACRO5 "You suck!" +HUSTR_CHATMACRO6 "Next time, scumbag..." +HUSTR_CHATMACRO7 "Come here!" +HUSTR_CHATMACRO8 "I'll take care of it." +HUSTR_CHATMACRO9 "Yes" +HUSTR_CHATMACRO0 "No" + +* What shows up when you message yourself, depending +* on how many times you've done it during the game + +HUSTR_TALKTOSELF1 "You mumble to yourself" +HUSTR_TALKTOSELF2 "Who's there?" +HUSTR_TALKTOSELF3 "You scare yourself" +HUSTR_TALKTOSELF4 "You start to rave" +HUSTR_TALKTOSELF5 "You've lost it..." + +* Prefixes for the multiplayer messages when displayed + +HUSTR_PLRGREEN "Green: " +HUSTR_PLRINDIGO "Indigo: " +HUSTR_PLRBROWN "Brown: " +HUSTR_PLRRED "Red: " + +=================================== +Part 5 - LEVEL NAMES IN THE AUTOMAP +=================================== + +* For DOOM - These names are made up of HUSTR_ and +* ExMx for the episode and map numbers. Original +* names are shown in quotes. Episode 4 entries are +* for Ultimate DOOM only. +* Blank lines separate sky change groupings + +HUSTR_E1M1 "E1M1: Hangar" +HUSTR_E1M2 "E1M2: Nuclear Plant" +HUSTR_E1M3 "E1M3: Toxin Refinery" +HUSTR_E1M4 "E1M4: Command Control" +HUSTR_E1M5 "E1M5: Phobos Lab" +HUSTR_E1M6 "E1M6: Central Processing" +HUSTR_E1M7 "E1M7: Computer Station" +HUSTR_E1M8 "E1M8: Phobos Anomaly" +HUSTR_E1M9 "E1M9: Military Base" + +HUSTR_E2M1 "E2M1: Deimos Anomaly" +HUSTR_E2M2 "E2M2: Containment Area" +HUSTR_E2M3 "E2M3: Refinery" +HUSTR_E2M4 "E2M4: Deimos Lab" +HUSTR_E2M5 "E2M5: Command Center" +HUSTR_E2M6 "E2M6: Halls of the Damned" +HUSTR_E2M7 "E2M7: Spawning Vats" +HUSTR_E2M8 "E2M8: Tower of Babel" +HUSTR_E2M9 "E2M9: Fortress of Mystery" + +HUSTR_E3M1 "E3M1: Hell Keep" +HUSTR_E3M2 "E3M2: Slough of Despair" +HUSTR_E3M3 "E3M3: Pandemonium" +HUSTR_E3M4 "E3M4: House of Pain" +HUSTR_E3M5 "E3M5: Unholy Cathedral" +HUSTR_E3M6 "E3M6: Mt. Erebus" +HUSTR_E3M7 "E3M7: Limbo" +HUSTR_E3M8 "E3M8: Dis" +HUSTR_E3M9 "E3M9: Warrens" + +HUSTR_E4M1 "E4M1: Hell Beneath" +HUSTR_E4M2 "E4M2: Perfect Hatred" +HUSTR_E4M3 "E4M3: Sever The Wicked" +HUSTR_E4M4 "E4M4: Unruly Evil" +HUSTR_E4M5 "E4M5: They Will Repent" +HUSTR_E4M6 "E4M6: Against Thee Wickedly" +HUSTR_E4M7 "E4M7: And Hell Followed" +HUSTR_E4M8 "E4M8: Unto The Cruel" +HUSTR_E4M9 "E4M9: Fear" + +* For DOOM2 - These names are made up of HUSTR_ and +* a number for the map number. Original names are shown in quotes. +* Blank lines separate sky change groupings + +HUSTR_1 "level 1: entryway" +HUSTR_2 "level 2: underhalls" +HUSTR_3 "level 3: the gantlet" +HUSTR_4 "level 4: the focus" +HUSTR_5 "level 5: the waste tunnels" +HUSTR_6 "level 6: the crusher" +HUSTR_7 "level 7: dead simple" +HUSTR_8 "level 8: tricks and traps" +HUSTR_9 "level 9: the pit" +HUSTR_10 "level 10: refueling base" +HUSTR_11 "level 11: 'o' of destruction!" + +HUSTR_12 "level 12: the factory" +HUSTR_13 "level 13: downtown" +HUSTR_14 "level 14: the inmost dens" +HUSTR_15 "level 15: industrial zone" +HUSTR_16 "level 16: suburbs" +HUSTR_17 "level 17: tenements" +HUSTR_18 "level 18: the courtyard" +HUSTR_19 "level 19: the citadel" +HUSTR_20 "level 20: gotcha!" + +HUSTR_21 "level 21: nirvana" +HUSTR_22 "level 22: the catacombs" +HUSTR_23 "level 23: barrels o' fun" +HUSTR_24 "level 24: the chasm" +HUSTR_25 "level 25: bloodfalls" +HUSTR_26 "level 26: the abandoned mines" +HUSTR_27 "level 27: monster condo" +HUSTR_28 "level 28: the spirit world" +HUSTR_29 "level 29: the living end" +HUSTR_30 "level 30: icon of sin" + +* Secret levels + +HUSTR_31 "level 31: wolfenstein" +HUSTR_32 "level 32: grosse" + +* For PLUTONIA - These names are made up of PHUSTR_ and +* a number for the map number. Original names are shown in quotes. +* Blank lines separate sky change groupings + +PHUSTR_1 "level 1: congo" +PHUSTR_2 "level 2: well of souls" +PHUSTR_3 "level 3: aztec" +PHUSTR_4 "level 4: caged" +PHUSTR_5 "level 5: ghost town" +PHUSTR_6 "level 6: baron's lair" +PHUSTR_7 "level 7: caughtyard" +PHUSTR_8 "level 8: realm" +PHUSTR_9 "level 9: abattoire" +PHUSTR_10 "level 10: onslaught" +PHUSTR_11 "level 11: hunted" + +PHUSTR_12 "level 12: speed" +PHUSTR_13 "level 13: the crypt" +PHUSTR_14 "level 14: genesis" +PHUSTR_15 "level 15: the twilight" +PHUSTR_16 "level 16: the omen" +PHUSTR_17 "level 17: compound" +PHUSTR_18 "level 18: neurosphere" +PHUSTR_19 "level 19: nme" +PHUSTR_20 "level 20: the death domain" + +PHUSTR_21 "level 21: slayer" +PHUSTR_22 "level 22: impossible mission" +PHUSTR_23 "level 23: tombstone" +PHUSTR_24 "level 24: the final frontier" +PHUSTR_25 "level 25: the temple of darkness" +PHUSTR_26 "level 26: bunker" +PHUSTR_27 "level 27: anti-christ" +PHUSTR_28 "level 28: the sewers" +PHUSTR_29 "level 29: odyssey of noises" +PHUSTR_30 "level 30: the gateway of hell" + +PHUSTR_31 "level 31: cyberden" +PHUSTR_32 "level 32: go 2 it" + +* For TNT:Evilution - These names are made up of THUSTR_ and +* a number for the map number. Original names are shown in quotes. +* Blank lines separate sky change groupings + +THUSTR_1 "level 1: system control" +THUSTR_2 "level 2: human bbq" +THUSTR_3 "level 3: power control" +THUSTR_4 "level 4: wormhole" +THUSTR_5 "level 5: hanger" +THUSTR_6 "level 6: open season" +THUSTR_7 "level 7: prison" +THUSTR_8 "level 8: metal" +THUSTR_9 "level 9: stronghold" +THUSTR_10 "level 10: redemption" +THUSTR_11 "level 11: storage facility" + +THUSTR_12 "level 12: crater" +THUSTR_13 "level 13: nukage processing" +THUSTR_14 "level 14: steel works" +THUSTR_15 "level 15: dead zone" +THUSTR_16 "level 16: deepest reaches" +THUSTR_17 "level 17: processing area" +THUSTR_18 "level 18: mill" +THUSTR_19 "level 19: shipping/respawning" +THUSTR_20 "level 20: central processing" + +THUSTR_21 "level 21: administration center" +THUSTR_22 "level 22: habitat" +THUSTR_23 "level 23: lunar mining project" +THUSTR_24 "level 24: quarry" +THUSTR_25 "level 25: baron's den" +THUSTR_26 "level 26: ballistyx" +THUSTR_27 "level 27: mount pain" +THUSTR_28 "level 28: heck" +THUSTR_29 "level 29: river styx" +THUSTR_30 "level 30: last call" + +THUSTR_31 "level 31: pharaoh" +THUSTR_32 "level 32: caribbean" + +================================================ +Part 6 - MESSAGES AS A RESULT OF TOGGLING STATES +================================================ + +AMSTR_FOLLOWON Automap follow mode toggled on (F) + "Follow Mode ON" +AMSTR_FOLLOWOFF Automap follow mode toggled off (F) + "Follow Mode OFF" +AMSTR_GRIDON Automap grid mode toggled on (G) + "Grid ON" +AMSTR_GRIDOFF Automap grid mode toggled off (G) + "Grid OFF" +AMSTR_MARKEDSPOT Automap spot marked (M) + "Marked Spot" +AMSTR_MARKSCLEARED Automap marks cleared (C) + "All Marks Cleared" +STSTR_MUS Music changed with IDMUSnn + "Music Change" +STSTR_NOMUS Error message [IDMUS] to bad number + "IMPOSSIBLE SELECTION" +STSTR_DQDON God mode toggled on [IDDQD] + "Degreelessness Mode On" +STSTR_DQDOFF God mode toggled off [IDDQD] + "Degreelessness Mode Off" +STSTR_KFAADDED Ammo and keys added [IDKFA] + "Very Happy Ammo Added" +STSTR_FAADDED Ammo no keys added [IDK or IDKA] + "Ammo (no keys) Added" +STSTR_NCON Walk through walls toggled on [IDCLIP or IDSPISPOPD] + "No Clipping Mode ON" +STSTR_NCOFF Walk through walls off [IDCLIP or IDSPISPOPD] + "No Clipping Mode OFF" +STSTR_BEHOLD Prompt for IDBEHOLD cheat menu + "inVuln, Str, Inviso, Rad, Allmap, or Lite-amp" +STSTR_BEHOLDX Prompt after toggling the special with IDBEHOLD + "Power-up Toggled" +STSTR_CHOPPERS Message when the chainsaw is picked [IDCHOPPERS] + "... doesn't suck - GM" +STSTR_CLEV Message while changing levels [IDCLEVxx] + "Changing Level..." +STSTR_COMPON Message when turning on DOOM compatibility mode (*) + "Compatibility Mode On" +STSTR_COMPOFF Message when turning off DOOM compatibility mode (*) + "Compatibility Mode Off" + + +=================================== +Part 7 - EPISODE INTERMISSION TEXTS +=================================== + +* DOOM/Ultimate DOOM Intermissions + +E1TEXT Message after Episode 1 of DOOM + "Once you beat the big badasses and\nclean out "... +E2TEXT Message after Episode 2 of DOOM + "You've done it! The hideous cyber-\ndemon lord"... +E3TEXT Message after Episode 3 of DOOM + "The loathsome spiderdemon that\nmasterminded t"... +E4TEXT Message after Episode 4 of Ultimate DOOM + "the spider mastermind must have sent forth\nit"... + +* DOOM2 Intermissions + +C1TEXT Message after MAP06 + "YOU HAVE ENTERED DEEPLY INTO THE INFESTED\nSTA"... +C2TEXT Message after MAP11 + "YOU HAVE WON! YOUR VICTORY HAS ENABLED\nHUMANK"... +C3TEXT Message after MAP20 + "YOU ARE AT THE CORRUPT HEART OF THE CITY,\nSUR"... +C4TEXT Message after MAP30 + "THE HORRENDOUS VISAGE OF THE BIGGEST\nDEMON YO"... +C5TEXT Message when entering MAP31 + "CONGRATULATIONS, YOU'VE FOUND THE SECRET\nLEVE"... +C6TEXT Message when entering MAP32 + "CONGRATULATIONS, YOU'VE FOUND THE\nSUPER SECRE"... + +* PLUTONIA Intermissions + +P1TEXT Message after MAP06 + "You gloat over the steaming carcass of the\nGu"... +P2TEXT Message after MAP11 + "Even the deadly Arch-Vile labyrinth could\nnot"... +P3TEXT Message after MAP20 + "You've bashed and battered your way into\nthe "... +P4TEXT Message after MAP30 + "The Gatekeeper's evil face is splattered\nall "... +P5TEXT Message when entering MAP31 + "You've found the second-hardest level we\ngot."... +P6TEXT Message when entering MAP32 + "Betcha wondered just what WAS the hardest\nlev"... + +* TNT:Evilution Intermissions + +T1TEXT Message after MAP06 + "You've fought your way out of the infested\nex"... +T2TEXT Message after MAP11 + "You hear the grinding of heavy machinery\nahea"... +T3TEXT Message after MAP20 + "The vista opening ahead looks real damn\nfamil"... +T4TEXT Message after MAP30 + "Suddenly, all is silent, from one horizon\nto "... +T5TEXT Message when entering MAP31 + "What now? Looks totally different. Kind\nof li"... +T6TEXT Message when entering MAP32 + "Time for a vacation. You've burst the\nbowels "... + + +====================================== +Part 8 - CREATURE NAMES FOR THE FINALE +====================================== + +CC_ZOMBIE Trooper + "ZOMBIEMAN" +CC_SHOTGUN Sargeant + "SHOTGUN GUY" +CC_HEAVY Chaingunner + "HEAVY WEAPON DUDE" +CC_IMP Imp + "IMP" +CC_DEMON Demon + "DEMON" +CC_LOST Lost Soul + "LOST SOUL" +CC_CACO Cacodemon + "CACODEMON" +CC_HELL Hell Knight + "HELL KNIGHT" +CC_BARON Baron of Hell + "BARON OF HELL" +CC_ARACH Arachnotron (baby spider) + "ARACHNOTRON" +CC_PAIN Pain Elemental + "PAIN ELEMENTAL" +CC_REVEN Revenant + "REVENANT" +CC_MANCU Mancubus + "MANCUBUS" +CC_ARCH Arch Vile + "ARCH-VILE" +CC_SPIDER Spider Mastermind + "THE SPIDER MASTERMIND" +CC_CYBER Cyberdemon + "THE CYBERDEMON" +CC_HERO Green player + "OUR HERO" + +======================================= +Part 9 - INTERMISSION TILED BACKGROUNDS +======================================= + +BGFLATE1 End of DOOM Episode 1 + "FLOOR4_8" +BGFLATE2 End of DOOM Episode 2 + "SFLR6_1" +BGFLATE3 End of DOOM Episode 3 + "MFLR8_4" +BGFLATE4 End of DOOM Episode 4 + "MFLR8_3" +BGFLAT06 DOOM2 after MAP06 + "SLIME16" +BGFLAT11 DOOM2 after MAP11 + "RROCK14" +BGFLAT20 DOOM2 after MAP20 + "RROCK07" +BGFLAT30 DOOM2 after MAP30 + "RROCK17" +BGFLAT15 DOOM2 going MAP15 to MAP31 + "RROCK13" +BGFLAT31 DOOM2 going MAP31 to MAP32 + "RROCK19" +BGCASTCALL Panel behind cast call + "BOSSBACK" + +============================== +Part 10 - NEW: STARTUP BANNERS +============================== + +STARTUP1 Starting strings to be displayed during startup + "" +STARTUP2 Leave them blank to not display + "" +STARTUP3 You may include \n to split a line + "" +STARTUP4 Have a nice time + "" +STARTUP5 Burma Shave + "" + +======================================================================= + +################################# +CODE POINTER INFORMATION APPENDIX +################################# + +This comes directly from the source code, with frame numbers inserted. +at the beginning of the line. Values are as follows, separated by : +commas. Don't worry if you don't understand C, you'll get the idea. +This is the stuff that Dehacked messes with in the Frames section, +and for the most part we don't care because we don't do that stuff +in here. Note that the "zero'th" entry is a dummy one--don't use it. + + First, 3 things we can ignore + Name of the sprite, preceded by SPR_ + Subsprite number + Duration in tics + + Then the code pointer, which is what we really care about here + Code pointer + + Then some frame info and spare parts + Next frame if any (see the // comment at the end of + the line for the identifier for that line) + A couple of zeroes + +Wherever you see {NULL} as the code pointer, that means there +isn't anything there now. Otherwise it's the mnemonic we use +in BOOM BEX file code pointers, preceded by "A_". A mnemonic +entry for the NULL pointer is available using mnemonic "NULL" + +[0] dummy {SPR_TROO,0,-1,{NULL},S_NULL,0,0}, // S_NULL +[1] {SPR_SHTG,4,0,{A_Light0},S_NULL,0,0}, // S_LIGHTDONE +[2] {SPR_PUNG,0,1,{A_WeaponReady},S_PUNCH,0,0}, // S_PUNCH +[3] {SPR_PUNG,0,1,{A_Lower},S_PUNCHDOWN,0,0}, // S_PUNCHDOWN +[4] {SPR_PUNG,0,1,{A_Raise},S_PUNCHUP,0,0}, // S_PUNCHUP +[5] {SPR_PUNG,1,4,{NULL},S_PUNCH2,0,0}, // S_PUNCH1 +[6] {SPR_PUNG,2,4,{A_Punch},S_PUNCH3,0,0}, // S_PUNCH2 +[7] {SPR_PUNG,3,5,{NULL},S_PUNCH4,0,0}, // S_PUNCH3 +[8] {SPR_PUNG,2,4,{NULL},S_PUNCH5,0,0}, // S_PUNCH4 +[9] {SPR_PUNG,1,5,{A_ReFire},S_PUNCH,0,0}, // S_PUNCH5 +[10] {SPR_PISG,0,1,{A_WeaponReady},S_PISTOL,0,0},// S_PISTOL +[11] {SPR_PISG,0,1,{A_Lower},S_PISTOLDOWN,0,0}, // S_PISTOLDOWN +[12] {SPR_PISG,0,1,{A_Raise},S_PISTOLUP,0,0}, // S_PISTOLUP +[13] {SPR_PISG,0,4,{NULL},S_PISTOL2,0,0}, // S_PISTOL1 +[14] {SPR_PISG,1,6,{A_FirePistol},S_PISTOL3,0,0},// S_PISTOL2 +[15] {SPR_PISG,2,4,{NULL},S_PISTOL4,0,0}, // S_PISTOL3 +[16] {SPR_PISG,1,5,{A_ReFire},S_PISTOL,0,0}, // S_PISTOL4 +[17] {SPR_PISF,32768,7,{A_Light1},S_LIGHTDONE,0,0}, // S_PISTOLFLASH +[18] {SPR_SHTG,0,1,{A_WeaponReady},S_SGUN,0,0}, // S_SGUN +[19] {SPR_SHTG,0,1,{A_Lower},S_SGUNDOWN,0,0}, // S_SGUNDOWN +[20] {SPR_SHTG,0,1,{A_Raise},S_SGUNUP,0,0}, // S_SGUNUP +[21] {SPR_SHTG,0,3,{NULL},S_SGUN2,0,0}, // S_SGUN1 +[22] {SPR_SHTG,0,7,{A_FireShotgun},S_SGUN3,0,0}, // S_SGUN2 +[23] {SPR_SHTG,1,5,{NULL},S_SGUN4,0,0}, // S_SGUN3 +[24] {SPR_SHTG,2,5,{NULL},S_SGUN5,0,0}, // S_SGUN4 +[25] {SPR_SHTG,3,4,{NULL},S_SGUN6,0,0}, // S_SGUN5 +[26] {SPR_SHTG,2,5,{NULL},S_SGUN7,0,0}, // S_SGUN6 +[27] {SPR_SHTG,1,5,{NULL},S_SGUN8,0,0}, // S_SGUN7 +[28] {SPR_SHTG,0,3,{NULL},S_SGUN9,0,0}, // S_SGUN8 +[29] {SPR_SHTG,0,7,{A_ReFire},S_SGUN,0,0}, // S_SGUN9 +[30] {SPR_SHTF,32768,4,{A_Light1},S_SGUNFLASH2,0,0}, // S_SGUNFLASH1 +[31] {SPR_SHTF,32769,3,{A_Light2},S_LIGHTDONE,0,0}, // S_SGUNFLASH2 +[32] {SPR_SHT2,0,1,{A_WeaponReady},S_DSGUN,0,0}, // S_DSGUN +[33] {SPR_SHT2,0,1,{A_Lower},S_DSGUNDOWN,0,0}, // S_DSGUNDOWN +[34] {SPR_SHT2,0,1,{A_Raise},S_DSGUNUP,0,0}, // S_DSGUNUP +[35] {SPR_SHT2,0,3,{NULL},S_DSGUN2,0,0}, // S_DSGUN1 +[36] {SPR_SHT2,0,7,{A_FireShotgun2},S_DSGUN3,0,0}, // S_DSGUN2 +[37] {SPR_SHT2,1,7,{NULL},S_DSGUN4,0,0}, // S_DSGUN3 +[38] {SPR_SHT2,2,7,{A_CheckReload},S_DSGUN5,0,0}, // S_DSGUN4 +[39] {SPR_SHT2,3,7,{A_OpenShotgun2},S_DSGUN6,0,0}, // S_DSGUN5 +[40] {SPR_SHT2,4,7,{NULL},S_DSGUN7,0,0}, // S_DSGUN6 +[41] {SPR_SHT2,5,7,{A_LoadShotgun2},S_DSGUN8,0,0}, // S_DSGUN7 +[42] {SPR_SHT2,6,6,{NULL},S_DSGUN9,0,0}, // S_DSGUN8 +[43] {SPR_SHT2,7,6,{A_CloseShotgun2},S_DSGUN10,0,0}, // S_DSGUN9 +[44] {SPR_SHT2,0,5,{A_ReFire},S_DSGUN,0,0}, // S_DSGUN10 +[45] {SPR_SHT2,1,7,{NULL},S_DSNR2,0,0}, // S_DSNR1 +[46] {SPR_SHT2,0,3,{NULL},S_DSGUNDOWN,0,0}, // S_DSNR2 +[47] {SPR_SHT2,32776,5,{A_Light1},S_DSGUNFLASH2,0,0}, // S_DSGUNFLASH1 +[48] {SPR_SHT2,32777,4,{A_Light2},S_LIGHTDONE,0,0}, // S_DSGUNFLASH2 +[49] {SPR_CHGG,0,1,{A_WeaponReady},S_CHAIN,0,0}, // S_CHAIN +[50] {SPR_CHGG,0,1,{A_Lower},S_CHAINDOWN,0,0}, // S_CHAINDOWN +[51] {SPR_CHGG,0,1,{A_Raise},S_CHAINUP,0,0}, // S_CHAINUP +[52] {SPR_CHGG,0,4,{A_FireCGun},S_CHAIN2,0,0}, // S_CHAIN1 +[53] {SPR_CHGG,1,4,{A_FireCGun},S_CHAIN3,0,0}, // S_CHAIN2 +[54] {SPR_CHGG,1,0,{A_ReFire},S_CHAIN,0,0}, // S_CHAIN3 +[55] {SPR_CHGF,32768,5,{A_Light1},S_LIGHTDONE,0,0}, // S_CHAINFLASH1 +[56] {SPR_CHGF,32769,5,{A_Light2},S_LIGHTDONE,0,0}, // S_CHAINFLASH2 +[57] {SPR_MISG,0,1,{A_WeaponReady},S_MISSILE,0,0}, // S_MISSILE +[58] {SPR_MISG,0,1,{A_Lower},S_MISSILEDOWN,0,0}, // S_MISSILEDOWN +[59] {SPR_MISG,0,1,{A_Raise},S_MISSILEUP,0,0}, // S_MISSILEUP +[60] {SPR_MISG,1,8,{A_GunFlash},S_MISSILE2,0,0}, // S_MISSILE1 +[61] {SPR_MISG,1,12,{A_FireMissile},S_MISSILE3,0,0}, // S_MISSILE2 +[62] {SPR_MISG,1,0,{A_ReFire},S_MISSILE,0,0}, // S_MISSILE3 +[63] {SPR_MISF,32768,3,{A_Light1},S_MISSILEFLASH2,0,0}, // S_MISSILEFLASH1 +[64] {SPR_MISF,32769,4,{NULL},S_MISSILEFLASH3,0,0}, // S_MISSILEFLASH2 +[65] {SPR_MISF,32770,4,{A_Light2},S_MISSILEFLASH4,0,0}, // S_MISSILEFLASH3 +[66] {SPR_MISF,32771,4,{A_Light2},S_LIGHTDONE,0,0}, // S_MISSILEFLASH4 +[67] {SPR_SAWG,2,4,{A_WeaponReady},S_SAWB,0,0}, // S_SAW +[68] {SPR_SAWG,3,4,{A_WeaponReady},S_SAW,0,0}, // S_SAWB +[69] {SPR_SAWG,2,1,{A_Lower},S_SAWDOWN,0,0}, // S_SAWDOWN +[70] {SPR_SAWG,2,1,{A_Raise},S_SAWUP,0,0}, // S_SAWUP +[71] {SPR_SAWG,0,4,{A_Saw},S_SAW2,0,0}, // S_SAW1 +[72] {SPR_SAWG,1,4,{A_Saw},S_SAW3,0,0}, // S_SAW2 +[73] {SPR_SAWG,1,0,{A_ReFire},S_SAW,0,0}, // S_SAW3 +[74] {SPR_PLSG,0,1,{A_WeaponReady},S_PLASMA,0,0}, // S_PLASMA +[75] {SPR_PLSG,0,1,{A_Lower},S_PLASMADOWN,0,0}, // S_PLASMADOWN +[76] {SPR_PLSG,0,1,{A_Raise},S_PLASMAUP,0,0}, // S_PLASMAUP +[77] {SPR_PLSG,0,3,{A_FirePlasma},S_PLASMA2,0,0}, // S_PLASMA1 +[78] {SPR_PLSG,1,20,{A_ReFire},S_PLASMA,0,0}, // S_PLASMA2 +[79] {SPR_PLSF,32768,4,{A_Light1},S_LIGHTDONE,0,0}, // S_PLASMAFLASH1 +[80] {SPR_PLSF,32769,4,{A_Light1},S_LIGHTDONE,0,0}, // S_PLASMAFLASH2 +[81] {SPR_BFGG,0,1,{A_WeaponReady},S_BFG,0,0}, // S_BFG +[82] {SPR_BFGG,0,1,{A_Lower},S_BFGDOWN,0,0}, // S_BFGDOWN +[83] {SPR_BFGG,0,1,{A_Raise},S_BFGUP,0,0}, // S_BFGUP +[84] {SPR_BFGG,0,20,{A_BFGsound},S_BFG2,0,0}, // S_BFG1 +[85] {SPR_BFGG,1,10,{A_GunFlash},S_BFG3,0,0}, // S_BFG2 +[86] {SPR_BFGG,1,10,{A_FireBFG},S_BFG4,0,0}, // S_BFG3 +[87] {SPR_BFGG,1,20,{A_ReFire},S_BFG,0,0}, // S_BFG4 +[88] {SPR_BFGF,32768,11,{A_Light1},S_BFGFLASH2,0,0}, // S_BFGFLASH1 +[89] {SPR_BFGF,32769,6,{A_Light2},S_LIGHTDONE,0,0}, // S_BFGFLASH2 +[90] {SPR_BLUD,2,8,{NULL},S_BLOOD2,0,0}, // S_BLOOD1 +[91] {SPR_BLUD,1,8,{NULL},S_BLOOD3,0,0}, // S_BLOOD2 +[92] {SPR_BLUD,0,8,{NULL},S_NULL,0,0}, // S_BLOOD3 +[93] {SPR_PUFF,32768,4,{NULL},S_PUFF2,0,0}, // S_PUFF1 +[94] {SPR_PUFF,1,4,{NULL},S_PUFF3,0,0}, // S_PUFF2 +[95] {SPR_PUFF,2,4,{NULL},S_PUFF4,0,0}, // S_PUFF3 +[96] {SPR_PUFF,3,4,{NULL},S_NULL,0,0}, // S_PUFF4 +[97] {SPR_BAL1,32768,4,{NULL},S_TBALL2,0,0}, // S_TBALL1 +[98] {SPR_BAL1,32769,4,{NULL},S_TBALL1,0,0}, // S_TBALL2 +[99] {SPR_BAL1,32770,6,{NULL},S_TBALLX2,0,0}, // S_TBALLX1 +[100] {SPR_BAL1,32771,6,{NULL},S_TBALLX3,0,0}, // S_TBALLX2 +[101] {SPR_BAL1,32772,6,{NULL},S_NULL,0,0}, // S_TBALLX3 +[102] {SPR_BAL2,32768,4,{NULL},S_RBALL2,0,0}, // S_RBALL1 +[103] {SPR_BAL2,32769,4,{NULL},S_RBALL1,0,0}, // S_RBALL2 +[104] {SPR_BAL2,32770,6,{NULL},S_RBALLX2,0,0}, // S_RBALLX1 +[105] {SPR_BAL2,32771,6,{NULL},S_RBALLX3,0,0}, // S_RBALLX2 +[106] {SPR_BAL2,32772,6,{NULL},S_NULL,0,0}, // S_RBALLX3 +[107] {SPR_PLSS,32768,6,{NULL},S_PLASBALL2,0,0}, // S_PLASBALL +[108] {SPR_PLSS,32769,6,{NULL},S_PLASBALL,0,0}, // S_PLASBALL2 +[109] {SPR_PLSE,32768,4,{NULL},S_PLASEXP2,0,0}, // S_PLASEXP +[110] {SPR_PLSE,32769,4,{NULL},S_PLASEXP3,0,0}, // S_PLASEXP2 +[111] {SPR_PLSE,32770,4,{NULL},S_PLASEXP4,0,0}, // S_PLASEXP3 +[112] {SPR_PLSE,32771,4,{NULL},S_PLASEXP5,0,0}, // S_PLASEXP4 +[113] {SPR_PLSE,32772,4,{NULL},S_NULL,0,0}, // S_PLASEXP5 +[114] {SPR_MISL,32768,1,{NULL},S_ROCKET,0,0}, // S_ROCKET +[115] {SPR_BFS1,32768,4,{NULL},S_BFGSHOT2,0,0}, // S_BFGSHOT +[116] {SPR_BFS1,32769,4,{NULL},S_BFGSHOT,0,0}, // S_BFGSHOT2 +[117] {SPR_BFE1,32768,8,{NULL},S_BFGLAND2,0,0}, // S_BFGLAND +[118] {SPR_BFE1,32769,8,{NULL},S_BFGLAND3,0,0}, // S_BFGLAND2 +[119] {SPR_BFE1,32770,8,{A_BFGSpray},S_BFGLAND4,0,0}, // S_BFGLAND3 +[120] {SPR_BFE1,32771,8,{NULL},S_BFGLAND5,0,0}, // S_BFGLAND4 +[121] {SPR_BFE1,32772,8,{NULL},S_BFGLAND6,0,0}, // S_BFGLAND5 +[122] {SPR_BFE1,32773,8,{NULL},S_NULL,0,0}, // S_BFGLAND6 +[123] {SPR_BFE2,32768,8,{NULL},S_BFGEXP2,0,0}, // S_BFGEXP +[124] {SPR_BFE2,32769,8,{NULL},S_BFGEXP3,0,0}, // S_BFGEXP2 +[125] {SPR_BFE2,32770,8,{NULL},S_BFGEXP4,0,0}, // S_BFGEXP3 +[126] {SPR_BFE2,32771,8,{NULL},S_NULL,0,0}, // S_BFGEXP4 +[127] {SPR_MISL,32769,8,{A_Explode},S_EXPLODE2,0,0}, // S_EXPLODE1 +[128] {SPR_MISL,32770,6,{NULL},S_EXPLODE3,0,0}, // S_EXPLODE2 +[129] {SPR_MISL,32771,4,{NULL},S_NULL,0,0}, // S_EXPLODE3 +[130] {SPR_TFOG,32768,6,{NULL},S_TFOG01,0,0}, // S_TFOG +[131] {SPR_TFOG,32769,6,{NULL},S_TFOG02,0,0}, // S_TFOG01 +[132] {SPR_TFOG,32768,6,{NULL},S_TFOG2,0,0}, // S_TFOG02 +[133] {SPR_TFOG,32769,6,{NULL},S_TFOG3,0,0}, // S_TFOG2 +[134] {SPR_TFOG,32770,6,{NULL},S_TFOG4,0,0}, // S_TFOG3 +[135] {SPR_TFOG,32771,6,{NULL},S_TFOG5,0,0}, // S_TFOG4 +[136] {SPR_TFOG,32772,6,{NULL},S_TFOG6,0,0}, // S_TFOG5 +[137] {SPR_TFOG,32773,6,{NULL},S_TFOG7,0,0}, // S_TFOG6 +[138] {SPR_TFOG,32774,6,{NULL},S_TFOG8,0,0}, // S_TFOG7 +[139] {SPR_TFOG,32775,6,{NULL},S_TFOG9,0,0}, // S_TFOG8 +[140] {SPR_TFOG,32776,6,{NULL},S_TFOG10,0,0}, // S_TFOG9 +[141] {SPR_TFOG,32777,6,{NULL},S_NULL,0,0}, // S_TFOG10 +[142] {SPR_IFOG,32768,6,{NULL},S_IFOG01,0,0}, // S_IFOG +[143] {SPR_IFOG,32769,6,{NULL},S_IFOG02,0,0}, // S_IFOG01 +[144] {SPR_IFOG,32768,6,{NULL},S_IFOG2,0,0}, // S_IFOG02 +[145] {SPR_IFOG,32769,6,{NULL},S_IFOG3,0,0}, // S_IFOG2 +[146] {SPR_IFOG,32770,6,{NULL},S_IFOG4,0,0}, // S_IFOG3 +[147] {SPR_IFOG,32771,6,{NULL},S_IFOG5,0,0}, // S_IFOG4 +[148] {SPR_IFOG,32772,6,{NULL},S_NULL,0,0}, // S_IFOG5 +[149] {SPR_PLAY,0,-1,{NULL},S_NULL,0,0}, // S_PLAY +[150] {SPR_PLAY,0,4,{NULL},S_PLAY_RUN2,0,0}, // S_PLAY_RUN1 +[151] {SPR_PLAY,1,4,{NULL},S_PLAY_RUN3,0,0}, // S_PLAY_RUN2 +[152] {SPR_PLAY,2,4,{NULL},S_PLAY_RUN4,0,0}, // S_PLAY_RUN3 +[153] {SPR_PLAY,3,4,{NULL},S_PLAY_RUN1,0,0}, // S_PLAY_RUN4 +[154] {SPR_PLAY,4,12,{NULL},S_PLAY,0,0}, // S_PLAY_ATK1 +[155] {SPR_PLAY,32773,6,{NULL},S_PLAY_ATK1,0,0}, // S_PLAY_ATK2 +[156] {SPR_PLAY,6,4,{NULL},S_PLAY_PAIN2,0,0}, // S_PLAY_PAIN +[157] {SPR_PLAY,6,4,{A_Pain},S_PLAY,0,0}, // S_PLAY_PAIN2 +[158] {SPR_PLAY,7,10,{NULL},S_PLAY_DIE2,0,0}, // S_PLAY_DIE1 +[159] {SPR_PLAY,8,10,{A_PlayerScream},S_PLAY_DIE3,0,0}, // S_PLAY_DIE2 +[160] {SPR_PLAY,9,10,{A_Fall},S_PLAY_DIE4,0,0}, // S_PLAY_DIE3 +[161] {SPR_PLAY,10,10,{NULL},S_PLAY_DIE5,0,0}, // S_PLAY_DIE4 +[162] {SPR_PLAY,11,10,{NULL},S_PLAY_DIE6,0,0}, // S_PLAY_DIE5 +[163] {SPR_PLAY,12,10,{NULL},S_PLAY_DIE7,0,0}, // S_PLAY_DIE6 +[164] {SPR_PLAY,13,-1,{NULL},S_NULL,0,0}, // S_PLAY_DIE7 +[165] {SPR_PLAY,14,5,{NULL},S_PLAY_XDIE2,0,0}, // S_PLAY_XDIE1 +[166] {SPR_PLAY,15,5,{A_XScream},S_PLAY_XDIE3,0,0}, // S_PLAY_XDIE2 +[167] {SPR_PLAY,16,5,{A_Fall},S_PLAY_XDIE4,0,0}, // S_PLAY_XDIE3 +[168] {SPR_PLAY,17,5,{NULL},S_PLAY_XDIE5,0,0}, // S_PLAY_XDIE4 +[169] {SPR_PLAY,18,5,{NULL},S_PLAY_XDIE6,0,0}, // S_PLAY_XDIE5 +[170] {SPR_PLAY,19,5,{NULL},S_PLAY_XDIE7,0,0}, // S_PLAY_XDIE6 +[171] {SPR_PLAY,20,5,{NULL},S_PLAY_XDIE8,0,0}, // S_PLAY_XDIE7 +[172] {SPR_PLAY,21,5,{NULL},S_PLAY_XDIE9,0,0}, // S_PLAY_XDIE8 +[173] {SPR_PLAY,22,-1,{NULL},S_NULL,0,0}, // S_PLAY_XDIE9 +[174] {SPR_POSS,0,10,{A_Look},S_POSS_STND2,0,0}, // S_POSS_STND +[175] {SPR_POSS,1,10,{A_Look},S_POSS_STND,0,0}, // S_POSS_STND2 +[176] {SPR_POSS,0,4,{A_Chase},S_POSS_RUN2,0,0}, // S_POSS_RUN1 +[177] {SPR_POSS,0,4,{A_Chase},S_POSS_RUN3,0,0}, // S_POSS_RUN2 +[178] {SPR_POSS,1,4,{A_Chase},S_POSS_RUN4,0,0}, // S_POSS_RUN3 +[179] {SPR_POSS,1,4,{A_Chase},S_POSS_RUN5,0,0}, // S_POSS_RUN4 +[180] {SPR_POSS,2,4,{A_Chase},S_POSS_RUN6,0,0}, // S_POSS_RUN5 +[181] {SPR_POSS,2,4,{A_Chase},S_POSS_RUN7,0,0}, // S_POSS_RUN6 +[182] {SPR_POSS,3,4,{A_Chase},S_POSS_RUN8,0,0}, // S_POSS_RUN7 +[183] {SPR_POSS,3,4,{A_Chase},S_POSS_RUN1,0,0}, // S_POSS_RUN8 +[184] {SPR_POSS,4,10,{A_FaceTarget},S_POSS_ATK2,0,0}, // S_POSS_ATK1 +[185] {SPR_POSS,5,8,{A_PosAttack},S_POSS_ATK3,0,0}, // S_POSS_ATK2 +[186] {SPR_POSS,4,8,{NULL},S_POSS_RUN1,0,0}, // S_POSS_ATK3 +[187] {SPR_POSS,6,3,{NULL},S_POSS_PAIN2,0,0}, // S_POSS_PAIN +[188] {SPR_POSS,6,3,{A_Pain},S_POSS_RUN1,0,0}, // S_POSS_PAIN2 +[189] {SPR_POSS,7,5,{NULL},S_POSS_DIE2,0,0}, // S_POSS_DIE1 +[190] {SPR_POSS,8,5,{A_Scream},S_POSS_DIE3,0,0}, // S_POSS_DIE2 +[191] {SPR_POSS,9,5,{A_Fall},S_POSS_DIE4,0,0}, // S_POSS_DIE3 +[192] {SPR_POSS,10,5,{NULL},S_POSS_DIE5,0,0}, // S_POSS_DIE4 +[193] {SPR_POSS,11,-1,{NULL},S_NULL,0,0}, // S_POSS_DIE5 +[194] {SPR_POSS,12,5,{NULL},S_POSS_XDIE2,0,0}, // S_POSS_XDIE1 +[195] {SPR_POSS,13,5,{A_XScream},S_POSS_XDIE3,0,0}, // S_POSS_XDIE2 +[196] {SPR_POSS,14,5,{A_Fall},S_POSS_XDIE4,0,0}, // S_POSS_XDIE3 +[197] {SPR_POSS,15,5,{NULL},S_POSS_XDIE5,0,0}, // S_POSS_XDIE4 +[198] {SPR_POSS,16,5,{NULL},S_POSS_XDIE6,0,0}, // S_POSS_XDIE5 +[199] {SPR_POSS,17,5,{NULL},S_POSS_XDIE7,0,0}, // S_POSS_XDIE6 +[200] {SPR_POSS,18,5,{NULL},S_POSS_XDIE8,0,0}, // S_POSS_XDIE7 +[201] {SPR_POSS,19,5,{NULL},S_POSS_XDIE9,0,0}, // S_POSS_XDIE8 +[202] {SPR_POSS,20,-1,{NULL},S_NULL,0,0}, // S_POSS_XDIE9 +[203] {SPR_POSS,10,5,{NULL},S_POSS_RAISE2,0,0}, // S_POSS_RAISE1 +[204] {SPR_POSS,9,5,{NULL},S_POSS_RAISE3,0,0}, // S_POSS_RAISE2 +[205] {SPR_POSS,8,5,{NULL},S_POSS_RAISE4,0,0}, // S_POSS_RAISE3 +[206] {SPR_POSS,7,5,{NULL},S_POSS_RUN1,0,0}, // S_POSS_RAISE4 +[207] {SPR_SPOS,0,10,{A_Look},S_SPOS_STND2,0,0}, // S_SPOS_STND +[208] {SPR_SPOS,1,10,{A_Look},S_SPOS_STND,0,0}, // S_SPOS_STND2 +[209] {SPR_SPOS,0,3,{A_Chase},S_SPOS_RUN2,0,0}, // S_SPOS_RUN1 +[210] {SPR_SPOS,0,3,{A_Chase},S_SPOS_RUN3,0,0}, // S_SPOS_RUN2 +[211] {SPR_SPOS,1,3,{A_Chase},S_SPOS_RUN4,0,0}, // S_SPOS_RUN3 +[212] {SPR_SPOS,1,3,{A_Chase},S_SPOS_RUN5,0,0}, // S_SPOS_RUN4 +[213] {SPR_SPOS,2,3,{A_Chase},S_SPOS_RUN6,0,0}, // S_SPOS_RUN5 +[214] {SPR_SPOS,2,3,{A_Chase},S_SPOS_RUN7,0,0}, // S_SPOS_RUN6 +[215] {SPR_SPOS,3,3,{A_Chase},S_SPOS_RUN8,0,0}, // S_SPOS_RUN7 +[216] {SPR_SPOS,3,3,{A_Chase},S_SPOS_RUN1,0,0}, // S_SPOS_RUN8 +[217] {SPR_SPOS,4,10,{A_FaceTarget},S_SPOS_ATK2,0,0}, // S_SPOS_ATK1 +[218] {SPR_SPOS,32773,10,{A_SPosAttack},S_SPOS_ATK3,0,0}, // S_SPOS_ATK2 +[219] {SPR_SPOS,4,10,{NULL},S_SPOS_RUN1,0,0}, // S_SPOS_ATK3 +[220] {SPR_SPOS,6,3,{NULL},S_SPOS_PAIN2,0,0}, // S_SPOS_PAIN +[221] {SPR_SPOS,6,3,{A_Pain},S_SPOS_RUN1,0,0}, // S_SPOS_PAIN2 +[222] {SPR_SPOS,7,5,{NULL},S_SPOS_DIE2,0,0}, // S_SPOS_DIE1 +[223] {SPR_SPOS,8,5,{A_Scream},S_SPOS_DIE3,0,0}, // S_SPOS_DIE2 +[224] {SPR_SPOS,9,5,{A_Fall},S_SPOS_DIE4,0,0}, // S_SPOS_DIE3 +[225] {SPR_SPOS,10,5,{NULL},S_SPOS_DIE5,0,0}, // S_SPOS_DIE4 +[226] {SPR_SPOS,11,-1,{NULL},S_NULL,0,0}, // S_SPOS_DIE5 +[227] {SPR_SPOS,12,5,{NULL},S_SPOS_XDIE2,0,0}, // S_SPOS_XDIE1 +[228] {SPR_SPOS,13,5,{A_XScream},S_SPOS_XDIE3,0,0}, // S_SPOS_XDIE2 +[229] {SPR_SPOS,14,5,{A_Fall},S_SPOS_XDIE4,0,0}, // S_SPOS_XDIE3 +[230] {SPR_SPOS,15,5,{NULL},S_SPOS_XDIE5,0,0}, // S_SPOS_XDIE4 +[231] {SPR_SPOS,16,5,{NULL},S_SPOS_XDIE6,0,0}, // S_SPOS_XDIE5 +[232] {SPR_SPOS,17,5,{NULL},S_SPOS_XDIE7,0,0}, // S_SPOS_XDIE6 +[233] {SPR_SPOS,18,5,{NULL},S_SPOS_XDIE8,0,0}, // S_SPOS_XDIE7 +[234] {SPR_SPOS,19,5,{NULL},S_SPOS_XDIE9,0,0}, // S_SPOS_XDIE8 +[235] {SPR_SPOS,20,-1,{NULL},S_NULL,0,0}, // S_SPOS_XDIE9 +[236] {SPR_SPOS,11,5,{NULL},S_SPOS_RAISE2,0,0}, // S_SPOS_RAISE1 +[237] {SPR_SPOS,10,5,{NULL},S_SPOS_RAISE3,0,0}, // S_SPOS_RAISE2 +[238] {SPR_SPOS,9,5,{NULL},S_SPOS_RAISE4,0,0}, // S_SPOS_RAISE3 +[239] {SPR_SPOS,8,5,{NULL},S_SPOS_RAISE5,0,0}, // S_SPOS_RAISE4 +[240] {SPR_SPOS,7,5,{NULL},S_SPOS_RUN1,0,0}, // S_SPOS_RAISE5 +[241] {SPR_VILE,0,10,{A_Look},S_VILE_STND2,0,0}, // S_VILE_STND +[242] {SPR_VILE,1,10,{A_Look},S_VILE_STND,0,0}, // S_VILE_STND2 +[243] {SPR_VILE,0,2,{A_VileChase},S_VILE_RUN2,0,0}, // S_VILE_RUN1 +[244] {SPR_VILE,0,2,{A_VileChase},S_VILE_RUN3,0,0}, // S_VILE_RUN2 +[245] {SPR_VILE,1,2,{A_VileChase},S_VILE_RUN4,0,0}, // S_VILE_RUN3 +[246] {SPR_VILE,1,2,{A_VileChase},S_VILE_RUN5,0,0}, // S_VILE_RUN4 +[247] {SPR_VILE,2,2,{A_VileChase},S_VILE_RUN6,0,0}, // S_VILE_RUN5 +[248] {SPR_VILE,2,2,{A_VileChase},S_VILE_RUN7,0,0}, // S_VILE_RUN6 +[249] {SPR_VILE,3,2,{A_VileChase},S_VILE_RUN8,0,0}, // S_VILE_RUN7 +[250] {SPR_VILE,3,2,{A_VileChase},S_VILE_RUN9,0,0}, // S_VILE_RUN8 +[251] {SPR_VILE,4,2,{A_VileChase},S_VILE_RUN10,0,0}, // S_VILE_RUN9 +[252] {SPR_VILE,4,2,{A_VileChase},S_VILE_RUN11,0,0}, // S_VILE_RUN10 +[253] {SPR_VILE,5,2,{A_VileChase},S_VILE_RUN12,0,0}, // S_VILE_RUN11 +[254] {SPR_VILE,5,2,{A_VileChase},S_VILE_RUN1,0,0}, // S_VILE_RUN12 +[255] {SPR_VILE,32774,0,{A_VileStart},S_VILE_ATK2,0,0}, // S_VILE_ATK1 +[256] {SPR_VILE,32774,10,{A_FaceTarget},S_VILE_ATK3,0,0}, // S_VILE_ATK2 +[257] {SPR_VILE,32775,8,{A_VileTarget},S_VILE_ATK4,0,0}, // S_VILE_ATK3 +[258] {SPR_VILE,32776,8,{A_FaceTarget},S_VILE_ATK5,0,0}, // S_VILE_ATK4 +[259] {SPR_VILE,32777,8,{A_FaceTarget},S_VILE_ATK6,0,0}, // S_VILE_ATK5 +[260] {SPR_VILE,32778,8,{A_FaceTarget},S_VILE_ATK7,0,0}, // S_VILE_ATK6 +[261] {SPR_VILE,32779,8,{A_FaceTarget},S_VILE_ATK8,0,0}, // S_VILE_ATK7 +[262] {SPR_VILE,32780,8,{A_FaceTarget},S_VILE_ATK9,0,0}, // S_VILE_ATK8 +[263] {SPR_VILE,32781,8,{A_FaceTarget},S_VILE_ATK10,0,0}, // S_VILE_ATK9 +[264] {SPR_VILE,32782,8,{A_VileAttack},S_VILE_ATK11,0,0}, // S_VILE_ATK10 +[265] {SPR_VILE,32783,20,{NULL},S_VILE_RUN1,0,0}, // S_VILE_ATK11 +[266] {SPR_VILE,32794,10,{NULL},S_VILE_HEAL2,0,0}, // S_VILE_HEAL1 +[267] {SPR_VILE,32795,10,{NULL},S_VILE_HEAL3,0,0}, // S_VILE_HEAL2 +[268] {SPR_VILE,32796,10,{NULL},S_VILE_RUN1,0,0}, // S_VILE_HEAL3 +[269] {SPR_VILE,16,5,{NULL},S_VILE_PAIN2,0,0}, // S_VILE_PAIN +[270] {SPR_VILE,16,5,{A_Pain},S_VILE_RUN1,0,0}, // S_VILE_PAIN2 +[271] {SPR_VILE,16,7,{NULL},S_VILE_DIE2,0,0}, // S_VILE_DIE1 +[272] {SPR_VILE,17,7,{A_Scream},S_VILE_DIE3,0,0}, // S_VILE_DIE2 +[273] {SPR_VILE,18,7,{A_Fall},S_VILE_DIE4,0,0}, // S_VILE_DIE3 +[274] {SPR_VILE,19,7,{NULL},S_VILE_DIE5,0,0}, // S_VILE_DIE4 +[275] {SPR_VILE,20,7,{NULL},S_VILE_DIE6,0,0}, // S_VILE_DIE5 +[276] {SPR_VILE,21,7,{NULL},S_VILE_DIE7,0,0}, // S_VILE_DIE6 +[277] {SPR_VILE,22,7,{NULL},S_VILE_DIE8,0,0}, // S_VILE_DIE7 +[278] {SPR_VILE,23,5,{NULL},S_VILE_DIE9,0,0}, // S_VILE_DIE8 +[279] {SPR_VILE,24,5,{NULL},S_VILE_DIE10,0,0}, // S_VILE_DIE9 +[280] {SPR_VILE,25,-1,{NULL},S_NULL,0,0}, // S_VILE_DIE10 +[281] {SPR_FIRE,32768,2,{A_StartFire},S_FIRE2,0,0}, // S_FIRE1 +[282] {SPR_FIRE,32769,2,{A_Fire},S_FIRE3,0,0}, // S_FIRE2 +[283] {SPR_FIRE,32768,2,{A_Fire},S_FIRE4,0,0}, // S_FIRE3 +[284] {SPR_FIRE,32769,2,{A_Fire},S_FIRE5,0,0}, // S_FIRE4 +[285] {SPR_FIRE,32770,2,{A_FireCrackle},S_FIRE6,0,0}, // S_FIRE5 +[286] {SPR_FIRE,32769,2,{A_Fire},S_FIRE7,0,0}, // S_FIRE6 +[287] {SPR_FIRE,32770,2,{A_Fire},S_FIRE8,0,0}, // S_FIRE7 +[288] {SPR_FIRE,32769,2,{A_Fire},S_FIRE9,0,0}, // S_FIRE8 +[289] {SPR_FIRE,32770,2,{A_Fire},S_FIRE10,0,0}, // S_FIRE9 +[290] {SPR_FIRE,32771,2,{A_Fire},S_FIRE11,0,0}, // S_FIRE10 +[291] {SPR_FIRE,32770,2,{A_Fire},S_FIRE12,0,0}, // S_FIRE11 +[292] {SPR_FIRE,32771,2,{A_Fire},S_FIRE13,0,0}, // S_FIRE12 +[293] {SPR_FIRE,32770,2,{A_Fire},S_FIRE14,0,0}, // S_FIRE13 +[294] {SPR_FIRE,32771,2,{A_Fire},S_FIRE15,0,0}, // S_FIRE14 +[295] {SPR_FIRE,32772,2,{A_Fire},S_FIRE16,0,0}, // S_FIRE15 +[296] {SPR_FIRE,32771,2,{A_Fire},S_FIRE17,0,0}, // S_FIRE16 +[297] {SPR_FIRE,32772,2,{A_Fire},S_FIRE18,0,0}, // S_FIRE17 +[298] {SPR_FIRE,32771,2,{A_Fire},S_FIRE19,0,0}, // S_FIRE18 +[299] {SPR_FIRE,32772,2,{A_FireCrackle},S_FIRE20,0,0}, // S_FIRE19 +[300] {SPR_FIRE,32773,2,{A_Fire},S_FIRE21,0,0}, // S_FIRE20 +[301] {SPR_FIRE,32772,2,{A_Fire},S_FIRE22,0,0}, // S_FIRE21 +[302] {SPR_FIRE,32773,2,{A_Fire},S_FIRE23,0,0}, // S_FIRE22 +[303] {SPR_FIRE,32772,2,{A_Fire},S_FIRE24,0,0}, // S_FIRE23 +[304] {SPR_FIRE,32773,2,{A_Fire},S_FIRE25,0,0}, // S_FIRE24 +[305] {SPR_FIRE,32774,2,{A_Fire},S_FIRE26,0,0}, // S_FIRE25 +[306] {SPR_FIRE,32775,2,{A_Fire},S_FIRE27,0,0}, // S_FIRE26 +[307] {SPR_FIRE,32774,2,{A_Fire},S_FIRE28,0,0}, // S_FIRE27 +[308] {SPR_FIRE,32775,2,{A_Fire},S_FIRE29,0,0}, // S_FIRE28 +[309] {SPR_FIRE,32774,2,{A_Fire},S_FIRE30,0,0}, // S_FIRE29 +[310] {SPR_FIRE,32775,2,{A_Fire},S_NULL,0,0}, // S_FIRE30 +[311] {SPR_PUFF,1,4,{NULL},S_SMOKE2,0,0}, // S_SMOKE1 +[312] {SPR_PUFF,2,4,{NULL},S_SMOKE3,0,0}, // S_SMOKE2 +[313] {SPR_PUFF,1,4,{NULL},S_SMOKE4,0,0}, // S_SMOKE3 +[314] {SPR_PUFF,2,4,{NULL},S_SMOKE5,0,0}, // S_SMOKE4 +[315] {SPR_PUFF,3,4,{NULL},S_NULL,0,0}, // S_SMOKE5 +[316] {SPR_FATB,32768,2,{A_Tracer},S_TRACER2,0,0}, // S_TRACER +[317] {SPR_FATB,32769,2,{A_Tracer},S_TRACER,0,0}, // S_TRACER2 +[318] {SPR_FBXP,32768,8,{NULL},S_TRACEEXP2,0,0}, // S_TRACEEXP1 +[319] {SPR_FBXP,32769,6,{NULL},S_TRACEEXP3,0,0}, // S_TRACEEXP2 +[320] {SPR_FBXP,32770,4,{NULL},S_NULL,0,0}, // S_TRACEEXP3 +[321] {SPR_SKEL,0,10,{A_Look},S_SKEL_STND2,0,0}, // S_SKEL_STND +[322] {SPR_SKEL,1,10,{A_Look},S_SKEL_STND,0,0}, // S_SKEL_STND2 +[323] {SPR_SKEL,0,2,{A_Chase},S_SKEL_RUN2,0,0}, // S_SKEL_RUN1 +[324] {SPR_SKEL,0,2,{A_Chase},S_SKEL_RUN3,0,0}, // S_SKEL_RUN2 +[325] {SPR_SKEL,1,2,{A_Chase},S_SKEL_RUN4,0,0}, // S_SKEL_RUN3 +[326] {SPR_SKEL,1,2,{A_Chase},S_SKEL_RUN5,0,0}, // S_SKEL_RUN4 +[327] {SPR_SKEL,2,2,{A_Chase},S_SKEL_RUN6,0,0}, // S_SKEL_RUN5 +[328] {SPR_SKEL,2,2,{A_Chase},S_SKEL_RUN7,0,0}, // S_SKEL_RUN6 +[329] {SPR_SKEL,3,2,{A_Chase},S_SKEL_RUN8,0,0}, // S_SKEL_RUN7 +[330] {SPR_SKEL,3,2,{A_Chase},S_SKEL_RUN9,0,0}, // S_SKEL_RUN8 +[331] {SPR_SKEL,4,2,{A_Chase},S_SKEL_RUN10,0,0}, // S_SKEL_RUN9 +[332] {SPR_SKEL,4,2,{A_Chase},S_SKEL_RUN11,0,0}, // S_SKEL_RUN10 +[333] {SPR_SKEL,5,2,{A_Chase},S_SKEL_RUN12,0,0}, // S_SKEL_RUN11 +[334] {SPR_SKEL,5,2,{A_Chase},S_SKEL_RUN1,0,0}, // S_SKEL_RUN12 +[335] {SPR_SKEL,6,0,{A_FaceTarget},S_SKEL_FIST2,0,0}, // S_SKEL_FIST1 +[336] {SPR_SKEL,6,6,{A_SkelWhoosh},S_SKEL_FIST3,0,0}, // S_SKEL_FIST2 +[337] {SPR_SKEL,7,6,{A_FaceTarget},S_SKEL_FIST4,0,0}, // S_SKEL_FIST3 +[338] {SPR_SKEL,8,6,{A_SkelFist},S_SKEL_RUN1,0,0}, // S_SKEL_FIST4 +[339] {SPR_SKEL,32777,0,{A_FaceTarget},S_SKEL_MISS2,0,0}, // S_SKEL_MISS1 +[340] {SPR_SKEL,32777,10,{A_FaceTarget},S_SKEL_MISS3,0,0}, // S_SKEL_MISS2 +[341] {SPR_SKEL,10,10,{A_SkelMissile},S_SKEL_MISS4,0,0}, // S_SKEL_MISS3 +[342] {SPR_SKEL,10,10,{A_FaceTarget},S_SKEL_RUN1,0,0}, // S_SKEL_MISS4 +[343] {SPR_SKEL,11,5,{NULL},S_SKEL_PAIN2,0,0}, // S_SKEL_PAIN +[344] {SPR_SKEL,11,5,{A_Pain},S_SKEL_RUN1,0,0}, // S_SKEL_PAIN2 +[345] {SPR_SKEL,11,7,{NULL},S_SKEL_DIE2,0,0}, // S_SKEL_DIE1 +[346] {SPR_SKEL,12,7,{NULL},S_SKEL_DIE3,0,0}, // S_SKEL_DIE2 +[347] {SPR_SKEL,13,7,{A_Scream},S_SKEL_DIE4,0,0}, // S_SKEL_DIE3 +[348] {SPR_SKEL,14,7,{A_Fall},S_SKEL_DIE5,0,0}, // S_SKEL_DIE4 +[349] {SPR_SKEL,15,7,{NULL},S_SKEL_DIE6,0,0}, // S_SKEL_DIE5 +[350] {SPR_SKEL,16,-1,{NULL},S_NULL,0,0}, // S_SKEL_DIE6 +[351] {SPR_SKEL,16,5,{NULL},S_SKEL_RAISE2,0,0}, // S_SKEL_RAISE1 +[352] {SPR_SKEL,15,5,{NULL},S_SKEL_RAISE3,0,0}, // S_SKEL_RAISE2 +[353] {SPR_SKEL,14,5,{NULL},S_SKEL_RAISE4,0,0}, // S_SKEL_RAISE3 +[354] {SPR_SKEL,13,5,{NULL},S_SKEL_RAISE5,0,0}, // S_SKEL_RAISE4 +[355] {SPR_SKEL,12,5,{NULL},S_SKEL_RAISE6,0,0}, // S_SKEL_RAISE5 +[356] {SPR_SKEL,11,5,{NULL},S_SKEL_RUN1,0,0}, // S_SKEL_RAISE6 +[357] {SPR_MANF,32768,4,{NULL},S_FATSHOT2,0,0}, // S_FATSHOT1 +[358] {SPR_MANF,32769,4,{NULL},S_FATSHOT1,0,0}, // S_FATSHOT2 +[359] {SPR_MISL,32769,8,{NULL},S_FATSHOTX2,0,0}, // S_FATSHOTX1 +[360] {SPR_MISL,32770,6,{NULL},S_FATSHOTX3,0,0}, // S_FATSHOTX2 +[361] {SPR_MISL,32771,4,{NULL},S_NULL,0,0}, // S_FATSHOTX3 +[362] {SPR_FATT,0,15,{A_Look},S_FATT_STND2,0,0}, // S_FATT_STND +[363] {SPR_FATT,1,15,{A_Look},S_FATT_STND,0,0}, // S_FATT_STND2 +[364] {SPR_FATT,0,4,{A_Chase},S_FATT_RUN2,0,0}, // S_FATT_RUN1 +[365] {SPR_FATT,0,4,{A_Chase},S_FATT_RUN3,0,0}, // S_FATT_RUN2 +[366] {SPR_FATT,1,4,{A_Chase},S_FATT_RUN4,0,0}, // S_FATT_RUN3 +[367] {SPR_FATT,1,4,{A_Chase},S_FATT_RUN5,0,0}, // S_FATT_RUN4 +[368] {SPR_FATT,2,4,{A_Chase},S_FATT_RUN6,0,0}, // S_FATT_RUN5 +[369] {SPR_FATT,2,4,{A_Chase},S_FATT_RUN7,0,0}, // S_FATT_RUN6 +[370] {SPR_FATT,3,4,{A_Chase},S_FATT_RUN8,0,0}, // S_FATT_RUN7 +[371] {SPR_FATT,3,4,{A_Chase},S_FATT_RUN9,0,0}, // S_FATT_RUN8 +[372] {SPR_FATT,4,4,{A_Chase},S_FATT_RUN10,0,0}, // S_FATT_RUN9 +[373] {SPR_FATT,4,4,{A_Chase},S_FATT_RUN11,0,0}, // S_FATT_RUN10 +[374] {SPR_FATT,5,4,{A_Chase},S_FATT_RUN12,0,0}, // S_FATT_RUN11 +[375] {SPR_FATT,5,4,{A_Chase},S_FATT_RUN1,0,0}, // S_FATT_RUN12 +[376] {SPR_FATT,6,20,{A_FatRaise},S_FATT_ATK2,0,0}, // S_FATT_ATK1 +[377] {SPR_FATT,32775,10,{A_FatAttack1},S_FATT_ATK3,0,0}, // S_FATT_ATK2 +[378] {SPR_FATT,8,5,{A_FaceTarget},S_FATT_ATK4,0,0}, // S_FATT_ATK3 +[379] {SPR_FATT,6,5,{A_FaceTarget},S_FATT_ATK5,0,0}, // S_FATT_ATK4 +[380] {SPR_FATT,32775,10,{A_FatAttack2},S_FATT_ATK6,0,0}, // S_FATT_ATK5 +[381] {SPR_FATT,8,5,{A_FaceTarget},S_FATT_ATK7,0,0}, // S_FATT_ATK6 +[382] {SPR_FATT,6,5,{A_FaceTarget},S_FATT_ATK8,0,0}, // S_FATT_ATK7 +[383] {SPR_FATT,32775,10,{A_FatAttack3},S_FATT_ATK9,0,0}, // S_FATT_ATK8 +[384] {SPR_FATT,8,5,{A_FaceTarget},S_FATT_ATK10,0,0}, // S_FATT_ATK9 +[385] {SPR_FATT,6,5,{A_FaceTarget},S_FATT_RUN1,0,0}, // S_FATT_ATK10 +[386] {SPR_FATT,9,3,{NULL},S_FATT_PAIN2,0,0}, // S_FATT_PAIN +[387] {SPR_FATT,9,3,{A_Pain},S_FATT_RUN1,0,0}, // S_FATT_PAIN2 +[388] {SPR_FATT,10,6,{NULL},S_FATT_DIE2,0,0}, // S_FATT_DIE1 +[389] {SPR_FATT,11,6,{A_Scream},S_FATT_DIE3,0,0}, // S_FATT_DIE2 +[390] {SPR_FATT,12,6,{A_Fall},S_FATT_DIE4,0,0}, // S_FATT_DIE3 +[391] {SPR_FATT,13,6,{NULL},S_FATT_DIE5,0,0}, // S_FATT_DIE4 +[392] {SPR_FATT,14,6,{NULL},S_FATT_DIE6,0,0}, // S_FATT_DIE5 +[393] {SPR_FATT,15,6,{NULL},S_FATT_DIE7,0,0}, // S_FATT_DIE6 +[394] {SPR_FATT,16,6,{NULL},S_FATT_DIE8,0,0}, // S_FATT_DIE7 +[395] {SPR_FATT,17,6,{NULL},S_FATT_DIE9,0,0}, // S_FATT_DIE8 +[396] {SPR_FATT,18,6,{NULL},S_FATT_DIE10,0,0}, // S_FATT_DIE9 +[397] {SPR_FATT,19,-1,{A_BossDeath},S_NULL,0,0}, // S_FATT_DIE10 +[398] {SPR_FATT,17,5,{NULL},S_FATT_RAISE2,0,0}, // S_FATT_RAISE1 +[399] {SPR_FATT,16,5,{NULL},S_FATT_RAISE3,0,0}, // S_FATT_RAISE2 +[400] {SPR_FATT,15,5,{NULL},S_FATT_RAISE4,0,0}, // S_FATT_RAISE3 +[401] {SPR_FATT,14,5,{NULL},S_FATT_RAISE5,0,0}, // S_FATT_RAISE4 +[402] {SPR_FATT,13,5,{NULL},S_FATT_RAISE6,0,0}, // S_FATT_RAISE5 +[403] {SPR_FATT,12,5,{NULL},S_FATT_RAISE7,0,0}, // S_FATT_RAISE6 +[404] {SPR_FATT,11,5,{NULL},S_FATT_RAISE8,0,0}, // S_FATT_RAISE7 +[405] {SPR_FATT,10,5,{NULL},S_FATT_RUN1,0,0}, // S_FATT_RAISE8 +[406] {SPR_CPOS,0,10,{A_Look},S_CPOS_STND2,0,0}, // S_CPOS_STND +[407] {SPR_CPOS,1,10,{A_Look},S_CPOS_STND,0,0}, // S_CPOS_STND2 +[408] {SPR_CPOS,0,3,{A_Chase},S_CPOS_RUN2,0,0}, // S_CPOS_RUN1 +[409] {SPR_CPOS,0,3,{A_Chase},S_CPOS_RUN3,0,0}, // S_CPOS_RUN2 +[410] {SPR_CPOS,1,3,{A_Chase},S_CPOS_RUN4,0,0}, // S_CPOS_RUN3 +[411] {SPR_CPOS,1,3,{A_Chase},S_CPOS_RUN5,0,0}, // S_CPOS_RUN4 +[412] {SPR_CPOS,2,3,{A_Chase},S_CPOS_RUN6,0,0}, // S_CPOS_RUN5 +[413] {SPR_CPOS,2,3,{A_Chase},S_CPOS_RUN7,0,0}, // S_CPOS_RUN6 +[414] {SPR_CPOS,3,3,{A_Chase},S_CPOS_RUN8,0,0}, // S_CPOS_RUN7 +[415] {SPR_CPOS,3,3,{A_Chase},S_CPOS_RUN1,0,0}, // S_CPOS_RUN8 +[416] {SPR_CPOS,4,10,{A_FaceTarget},S_CPOS_ATK2,0,0}, // S_CPOS_ATK1 +[417] {SPR_CPOS,32773,4,{A_CPosAttack},S_CPOS_ATK3,0,0}, // S_CPOS_ATK2 +[418] {SPR_CPOS,32772,4,{A_CPosAttack},S_CPOS_ATK4,0,0}, // S_CPOS_ATK3 +[419] {SPR_CPOS,5,1,{A_CPosRefire},S_CPOS_ATK2,0,0}, // S_CPOS_ATK4 +[420] {SPR_CPOS,6,3,{NULL},S_CPOS_PAIN2,0,0}, // S_CPOS_PAIN +[421] {SPR_CPOS,6,3,{A_Pain},S_CPOS_RUN1,0,0}, // S_CPOS_PAIN2 +[422] {SPR_CPOS,7,5,{NULL},S_CPOS_DIE2,0,0}, // S_CPOS_DIE1 +[423] {SPR_CPOS,8,5,{A_Scream},S_CPOS_DIE3,0,0}, // S_CPOS_DIE2 +[424] {SPR_CPOS,9,5,{A_Fall},S_CPOS_DIE4,0,0}, // S_CPOS_DIE3 +[425] {SPR_CPOS,10,5,{NULL},S_CPOS_DIE5,0,0}, // S_CPOS_DIE4 +[426] {SPR_CPOS,11,5,{NULL},S_CPOS_DIE6,0,0}, // S_CPOS_DIE5 +[427] {SPR_CPOS,12,5,{NULL},S_CPOS_DIE7,0,0}, // S_CPOS_DIE6 +[428] {SPR_CPOS,13,-1,{NULL},S_NULL,0,0}, // S_CPOS_DIE7 +[429] {SPR_CPOS,14,5,{NULL},S_CPOS_XDIE2,0,0}, // S_CPOS_XDIE1 +[430] {SPR_CPOS,15,5,{A_XScream},S_CPOS_XDIE3,0,0}, // S_CPOS_XDIE2 +[431] {SPR_CPOS,16,5,{A_Fall},S_CPOS_XDIE4,0,0}, // S_CPOS_XDIE3 +[432] {SPR_CPOS,17,5,{NULL},S_CPOS_XDIE5,0,0}, // S_CPOS_XDIE4 +[433] {SPR_CPOS,18,5,{NULL},S_CPOS_XDIE6,0,0}, // S_CPOS_XDIE5 +[434] {SPR_CPOS,19,-1,{NULL},S_NULL,0,0}, // S_CPOS_XDIE6 +[435] {SPR_CPOS,13,5,{NULL},S_CPOS_RAISE2,0,0}, // S_CPOS_RAISE1 +[436] {SPR_CPOS,12,5,{NULL},S_CPOS_RAISE3,0,0}, // S_CPOS_RAISE2 +[437] {SPR_CPOS,11,5,{NULL},S_CPOS_RAISE4,0,0}, // S_CPOS_RAISE3 +[438] {SPR_CPOS,10,5,{NULL},S_CPOS_RAISE5,0,0}, // S_CPOS_RAISE4 +[439] {SPR_CPOS,9,5,{NULL},S_CPOS_RAISE6,0,0}, // S_CPOS_RAISE5 +[440] {SPR_CPOS,8,5,{NULL},S_CPOS_RAISE7,0,0}, // S_CPOS_RAISE6 +[441] {SPR_CPOS,7,5,{NULL},S_CPOS_RUN1,0,0}, // S_CPOS_RAISE7 +[442] {SPR_TROO,0,10,{A_Look},S_TROO_STND2,0,0}, // S_TROO_STND +[443] {SPR_TROO,1,10,{A_Look},S_TROO_STND,0,0}, // S_TROO_STND2 +[444] {SPR_TROO,0,3,{A_Chase},S_TROO_RUN2,0,0}, // S_TROO_RUN1 +[445] {SPR_TROO,0,3,{A_Chase},S_TROO_RUN3,0,0}, // S_TROO_RUN2 +[446] {SPR_TROO,1,3,{A_Chase},S_TROO_RUN4,0,0}, // S_TROO_RUN3 +[447] {SPR_TROO,1,3,{A_Chase},S_TROO_RUN5,0,0}, // S_TROO_RUN4 +[448] {SPR_TROO,2,3,{A_Chase},S_TROO_RUN6,0,0}, // S_TROO_RUN5 +[449] {SPR_TROO,2,3,{A_Chase},S_TROO_RUN7,0,0}, // S_TROO_RUN6 +[450] {SPR_TROO,3,3,{A_Chase},S_TROO_RUN8,0,0}, // S_TROO_RUN7 +[451] {SPR_TROO,3,3,{A_Chase},S_TROO_RUN1,0,0}, // S_TROO_RUN8 +[452] {SPR_TROO,4,8,{A_FaceTarget},S_TROO_ATK2,0,0}, // S_TROO_ATK1 +[453] {SPR_TROO,5,8,{A_FaceTarget},S_TROO_ATK3,0,0}, // S_TROO_ATK2 +[454] {SPR_TROO,6,6,{A_TroopAttack},S_TROO_RUN1,0,0}, // S_TROO_ATK3 +[455] {SPR_TROO,7,2,{NULL},S_TROO_PAIN2,0,0}, // S_TROO_PAIN +[456] {SPR_TROO,7,2,{A_Pain},S_TROO_RUN1,0,0}, // S_TROO_PAIN2 +[457] {SPR_TROO,8,8,{NULL},S_TROO_DIE2,0,0}, // S_TROO_DIE1 +[458] {SPR_TROO,9,8,{A_Scream},S_TROO_DIE3,0,0}, // S_TROO_DIE2 +[459] {SPR_TROO,10,6,{NULL},S_TROO_DIE4,0,0}, // S_TROO_DIE3 +[460] {SPR_TROO,11,6,{A_Fall},S_TROO_DIE5,0,0}, // S_TROO_DIE4 +[461] {SPR_TROO,12,-1,{NULL},S_NULL,0,0}, // S_TROO_DIE5 +[462] {SPR_TROO,13,5,{NULL},S_TROO_XDIE2,0,0}, // S_TROO_XDIE1 +[463] {SPR_TROO,14,5,{A_XScream},S_TROO_XDIE3,0,0}, // S_TROO_XDIE2 +[464] {SPR_TROO,15,5,{NULL},S_TROO_XDIE4,0,0}, // S_TROO_XDIE3 +[465] {SPR_TROO,16,5,{A_Fall},S_TROO_XDIE5,0,0}, // S_TROO_XDIE4 +[466] {SPR_TROO,17,5,{NULL},S_TROO_XDIE6,0,0}, // S_TROO_XDIE5 +[467] {SPR_TROO,18,5,{NULL},S_TROO_XDIE7,0,0}, // S_TROO_XDIE6 +[468] {SPR_TROO,19,5,{NULL},S_TROO_XDIE8,0,0}, // S_TROO_XDIE7 +[469] {SPR_TROO,20,-1,{NULL},S_NULL,0,0}, // S_TROO_XDIE8 +[470] {SPR_TROO,12,8,{NULL},S_TROO_RAISE2,0,0}, // S_TROO_RAISE1 +[471] {SPR_TROO,11,8,{NULL},S_TROO_RAISE3,0,0}, // S_TROO_RAISE2 +[472] {SPR_TROO,10,6,{NULL},S_TROO_RAISE4,0,0}, // S_TROO_RAISE3 +[473] {SPR_TROO,9,6,{NULL},S_TROO_RAISE5,0,0}, // S_TROO_RAISE4 +[474] {SPR_TROO,8,6,{NULL},S_TROO_RUN1,0,0}, // S_TROO_RAISE5 +[475] {SPR_SARG,0,10,{A_Look},S_SARG_STND2,0,0}, // S_SARG_STND +[476] {SPR_SARG,1,10,{A_Look},S_SARG_STND,0,0}, // S_SARG_STND2 +[477] {SPR_SARG,0,2,{A_Chase},S_SARG_RUN2,0,0}, // S_SARG_RUN1 +[478] {SPR_SARG,0,2,{A_Chase},S_SARG_RUN3,0,0}, // S_SARG_RUN2 +[479] {SPR_SARG,1,2,{A_Chase},S_SARG_RUN4,0,0}, // S_SARG_RUN3 +[480] {SPR_SARG,1,2,{A_Chase},S_SARG_RUN5,0,0}, // S_SARG_RUN4 +[481] {SPR_SARG,2,2,{A_Chase},S_SARG_RUN6,0,0}, // S_SARG_RUN5 +[482] {SPR_SARG,2,2,{A_Chase},S_SARG_RUN7,0,0}, // S_SARG_RUN6 +[483] {SPR_SARG,3,2,{A_Chase},S_SARG_RUN8,0,0}, // S_SARG_RUN7 +[484] {SPR_SARG,3,2,{A_Chase},S_SARG_RUN1,0,0}, // S_SARG_RUN8 +[485] {SPR_SARG,4,8,{A_FaceTarget},S_SARG_ATK2,0,0}, // S_SARG_ATK1 +[486] {SPR_SARG,5,8,{A_FaceTarget},S_SARG_ATK3,0,0}, // S_SARG_ATK2 +[487] {SPR_SARG,6,8,{A_SargAttack},S_SARG_RUN1,0,0}, // S_SARG_ATK3 +[488] {SPR_SARG,7,2,{NULL},S_SARG_PAIN2,0,0}, // S_SARG_PAIN +[489] {SPR_SARG,7,2,{A_Pain},S_SARG_RUN1,0,0}, // S_SARG_PAIN2 +[490] {SPR_SARG,8,8,{NULL},S_SARG_DIE2,0,0}, // S_SARG_DIE1 +[491] {SPR_SARG,9,8,{A_Scream},S_SARG_DIE3,0,0}, // S_SARG_DIE2 +[492] {SPR_SARG,10,4,{NULL},S_SARG_DIE4,0,0}, // S_SARG_DIE3 +[493] {SPR_SARG,11,4,{A_Fall},S_SARG_DIE5,0,0}, // S_SARG_DIE4 +[494] {SPR_SARG,12,4,{NULL},S_SARG_DIE6,0,0}, // S_SARG_DIE5 +[495] {SPR_SARG,13,-1,{NULL},S_NULL,0,0}, // S_SARG_DIE6 +[496] {SPR_SARG,13,5,{NULL},S_SARG_RAISE2,0,0}, // S_SARG_RAISE1 +[497] {SPR_SARG,12,5,{NULL},S_SARG_RAISE3,0,0}, // S_SARG_RAISE2 +[498] {SPR_SARG,11,5,{NULL},S_SARG_RAISE4,0,0}, // S_SARG_RAISE3 +[499] {SPR_SARG,10,5,{NULL},S_SARG_RAISE5,0,0}, // S_SARG_RAISE4 +[500] {SPR_SARG,9,5,{NULL},S_SARG_RAISE6,0,0}, // S_SARG_RAISE5 +[501] {SPR_SARG,8,5,{NULL},S_SARG_RUN1,0,0}, // S_SARG_RAISE6 +[502] {SPR_HEAD,0,10,{A_Look},S_HEAD_STND,0,0}, // S_HEAD_STND +[503] {SPR_HEAD,0,3,{A_Chase},S_HEAD_RUN1,0,0}, // S_HEAD_RUN1 +[504] {SPR_HEAD,1,5,{A_FaceTarget},S_HEAD_ATK2,0,0}, // S_HEAD_ATK1 +[505] {SPR_HEAD,2,5,{A_FaceTarget},S_HEAD_ATK3,0,0}, // S_HEAD_ATK2 +[506] {SPR_HEAD,32771,5,{A_HeadAttack},S_HEAD_RUN1,0,0}, // S_HEAD_ATK3 +[507] {SPR_HEAD,4,3,{NULL},S_HEAD_PAIN2,0,0}, // S_HEAD_PAIN +[508] {SPR_HEAD,4,3,{A_Pain},S_HEAD_PAIN3,0,0}, // S_HEAD_PAIN2 +[509] {SPR_HEAD,5,6,{NULL},S_HEAD_RUN1,0,0}, // S_HEAD_PAIN3 +[510] {SPR_HEAD,6,8,{NULL},S_HEAD_DIE2,0,0}, // S_HEAD_DIE1 +[511] {SPR_HEAD,7,8,{A_Scream},S_HEAD_DIE3,0,0}, // S_HEAD_DIE2 +[512] {SPR_HEAD,8,8,{NULL},S_HEAD_DIE4,0,0}, // S_HEAD_DIE3 +[513] {SPR_HEAD,9,8,{NULL},S_HEAD_DIE5,0,0}, // S_HEAD_DIE4 +[514] {SPR_HEAD,10,8,{A_Fall},S_HEAD_DIE6,0,0}, // S_HEAD_DIE5 +[515] {SPR_HEAD,11,-1,{NULL},S_NULL,0,0}, // S_HEAD_DIE6 +[516] {SPR_HEAD,11,8,{NULL},S_HEAD_RAISE2,0,0}, // S_HEAD_RAISE1 +[517] {SPR_HEAD,10,8,{NULL},S_HEAD_RAISE3,0,0}, // S_HEAD_RAISE2 +[518] {SPR_HEAD,9,8,{NULL},S_HEAD_RAISE4,0,0}, // S_HEAD_RAISE3 +[519] {SPR_HEAD,8,8,{NULL},S_HEAD_RAISE5,0,0}, // S_HEAD_RAISE4 +[520] {SPR_HEAD,7,8,{NULL},S_HEAD_RAISE6,0,0}, // S_HEAD_RAISE5 +[521] {SPR_HEAD,6,8,{NULL},S_HEAD_RUN1,0,0}, // S_HEAD_RAISE6 +[522] {SPR_BAL7,32768,4,{NULL},S_BRBALL2,0,0}, // S_BRBALL1 +[523] {SPR_BAL7,32769,4,{NULL},S_BRBALL1,0,0}, // S_BRBALL2 +[524] {SPR_BAL7,32770,6,{NULL},S_BRBALLX2,0,0}, // S_BRBALLX1 +[525] {SPR_BAL7,32771,6,{NULL},S_BRBALLX3,0,0}, // S_BRBALLX2 +[526] {SPR_BAL7,32772,6,{NULL},S_NULL,0,0}, // S_BRBALLX3 +[527] {SPR_BOSS,0,10,{A_Look},S_BOSS_STND2,0,0}, // S_BOSS_STND +[528] {SPR_BOSS,1,10,{A_Look},S_BOSS_STND,0,0}, // S_BOSS_STND2 +[529] {SPR_BOSS,0,3,{A_Chase},S_BOSS_RUN2,0,0}, // S_BOSS_RUN1 +[530] {SPR_BOSS,0,3,{A_Chase},S_BOSS_RUN3,0,0}, // S_BOSS_RUN2 +[531] {SPR_BOSS,1,3,{A_Chase},S_BOSS_RUN4,0,0}, // S_BOSS_RUN3 +[532] {SPR_BOSS,1,3,{A_Chase},S_BOSS_RUN5,0,0}, // S_BOSS_RUN4 +[533] {SPR_BOSS,2,3,{A_Chase},S_BOSS_RUN6,0,0}, // S_BOSS_RUN5 +[534] {SPR_BOSS,2,3,{A_Chase},S_BOSS_RUN7,0,0}, // S_BOSS_RUN6 +[535] {SPR_BOSS,3,3,{A_Chase},S_BOSS_RUN8,0,0}, // S_BOSS_RUN7 +[536] {SPR_BOSS,3,3,{A_Chase},S_BOSS_RUN1,0,0}, // S_BOSS_RUN8 +[537] {SPR_BOSS,4,8,{A_FaceTarget},S_BOSS_ATK2,0,0}, // S_BOSS_ATK1 +[538] {SPR_BOSS,5,8,{A_FaceTarget},S_BOSS_ATK3,0,0}, // S_BOSS_ATK2 +[539] {SPR_BOSS,6,8,{A_BruisAttack},S_BOSS_RUN1,0,0}, // S_BOSS_ATK3 +[540] {SPR_BOSS,7,2,{NULL},S_BOSS_PAIN2,0,0}, // S_BOSS_PAIN +[541] {SPR_BOSS,7,2,{A_Pain},S_BOSS_RUN1,0,0}, // S_BOSS_PAIN2 +[542] {SPR_BOSS,8,8,{NULL},S_BOSS_DIE2,0,0}, // S_BOSS_DIE1 +[543] {SPR_BOSS,9,8,{A_Scream},S_BOSS_DIE3,0,0}, // S_BOSS_DIE2 +[544] {SPR_BOSS,10,8,{NULL},S_BOSS_DIE4,0,0}, // S_BOSS_DIE3 +[545] {SPR_BOSS,11,8,{A_Fall},S_BOSS_DIE5,0,0}, // S_BOSS_DIE4 +[546] {SPR_BOSS,12,8,{NULL},S_BOSS_DIE6,0,0}, // S_BOSS_DIE5 +[547] {SPR_BOSS,13,8,{NULL},S_BOSS_DIE7,0,0}, // S_BOSS_DIE6 +[548] {SPR_BOSS,14,-1,{A_BossDeath},S_NULL,0,0}, // S_BOSS_DIE7 +[549] {SPR_BOSS,14,8,{NULL},S_BOSS_RAISE2,0,0}, // S_BOSS_RAISE1 +[550] {SPR_BOSS,13,8,{NULL},S_BOSS_RAISE3,0,0}, // S_BOSS_RAISE2 +[551] {SPR_BOSS,12,8,{NULL},S_BOSS_RAISE4,0,0}, // S_BOSS_RAISE3 +[552] {SPR_BOSS,11,8,{NULL},S_BOSS_RAISE5,0,0}, // S_BOSS_RAISE4 +[553] {SPR_BOSS,10,8,{NULL},S_BOSS_RAISE6,0,0}, // S_BOSS_RAISE5 +[554] {SPR_BOSS,9,8,{NULL},S_BOSS_RAISE7,0,0}, // S_BOSS_RAISE6 +[555] {SPR_BOSS,8,8,{NULL},S_BOSS_RUN1,0,0}, // S_BOSS_RAISE7 +[556] {SPR_BOS2,0,10,{A_Look},S_BOS2_STND2,0,0}, // S_BOS2_STND +[557] {SPR_BOS2,1,10,{A_Look},S_BOS2_STND,0,0}, // S_BOS2_STND2 +[558] {SPR_BOS2,0,3,{A_Chase},S_BOS2_RUN2,0,0}, // S_BOS2_RUN1 +[559] {SPR_BOS2,0,3,{A_Chase},S_BOS2_RUN3,0,0}, // S_BOS2_RUN2 +[560] {SPR_BOS2,1,3,{A_Chase},S_BOS2_RUN4,0,0}, // S_BOS2_RUN3 +[561] {SPR_BOS2,1,3,{A_Chase},S_BOS2_RUN5,0,0}, // S_BOS2_RUN4 +[562] {SPR_BOS2,2,3,{A_Chase},S_BOS2_RUN6,0,0}, // S_BOS2_RUN5 +[563] {SPR_BOS2,2,3,{A_Chase},S_BOS2_RUN7,0,0}, // S_BOS2_RUN6 +[564] {SPR_BOS2,3,3,{A_Chase},S_BOS2_RUN8,0,0}, // S_BOS2_RUN7 +[565] {SPR_BOS2,3,3,{A_Chase},S_BOS2_RUN1,0,0}, // S_BOS2_RUN8 +[566] {SPR_BOS2,4,8,{A_FaceTarget},S_BOS2_ATK2,0,0}, // S_BOS2_ATK1 +[567] {SPR_BOS2,5,8,{A_FaceTarget},S_BOS2_ATK3,0,0}, // S_BOS2_ATK2 +[568] {SPR_BOS2,6,8,{A_BruisAttack},S_BOS2_RUN1,0,0}, // S_BOS2_ATK3 +[569] {SPR_BOS2,7,2,{NULL},S_BOS2_PAIN2,0,0}, // S_BOS2_PAIN +[570] {SPR_BOS2,7,2,{A_Pain},S_BOS2_RUN1,0,0}, // S_BOS2_PAIN2 +[571] {SPR_BOS2,8,8,{NULL},S_BOS2_DIE2,0,0}, // S_BOS2_DIE1 +[572] {SPR_BOS2,9,8,{A_Scream},S_BOS2_DIE3,0,0}, // S_BOS2_DIE2 +[573] {SPR_BOS2,10,8,{NULL},S_BOS2_DIE4,0,0}, // S_BOS2_DIE3 +[574] {SPR_BOS2,11,8,{A_Fall},S_BOS2_DIE5,0,0}, // S_BOS2_DIE4 +[575] {SPR_BOS2,12,8,{NULL},S_BOS2_DIE6,0,0}, // S_BOS2_DIE5 +[576] {SPR_BOS2,13,8,{NULL},S_BOS2_DIE7,0,0}, // S_BOS2_DIE6 +[577] {SPR_BOS2,14,-1,{NULL},S_NULL,0,0}, // S_BOS2_DIE7 +[578] {SPR_BOS2,14,8,{NULL},S_BOS2_RAISE2,0,0}, // S_BOS2_RAISE1 +[579] {SPR_BOS2,13,8,{NULL},S_BOS2_RAISE3,0,0}, // S_BOS2_RAISE2 +[580] {SPR_BOS2,12,8,{NULL},S_BOS2_RAISE4,0,0}, // S_BOS2_RAISE3 +[581] {SPR_BOS2,11,8,{NULL},S_BOS2_RAISE5,0,0}, // S_BOS2_RAISE4 +[582] {SPR_BOS2,10,8,{NULL},S_BOS2_RAISE6,0,0}, // S_BOS2_RAISE5 +[583] {SPR_BOS2,9,8,{NULL},S_BOS2_RAISE7,0,0}, // S_BOS2_RAISE6 +[584] {SPR_BOS2,8,8,{NULL},S_BOS2_RUN1,0,0}, // S_BOS2_RAISE7 +[585] {SPR_SKUL,32768,10,{A_Look},S_SKULL_STND2,0,0}, // S_SKULL_STND +[586] {SPR_SKUL,32769,10,{A_Look},S_SKULL_STND,0,0}, // S_SKULL_STND2 +[587] {SPR_SKUL,32768,6,{A_Chase},S_SKULL_RUN2,0,0}, // S_SKULL_RUN1 +[588] {SPR_SKUL,32769,6,{A_Chase},S_SKULL_RUN1,0,0}, // S_SKULL_RUN2 +[589] {SPR_SKUL,32770,10,{A_FaceTarget},S_SKULL_ATK2,0,0}, // S_SKULL_ATK1 +[590] {SPR_SKUL,32771,4,{A_SkullAttack},S_SKULL_ATK3,0,0}, // S_SKULL_ATK2 +[591] {SPR_SKUL,32770,4,{NULL},S_SKULL_ATK4,0,0}, // S_SKULL_ATK3 +[592] {SPR_SKUL,32771,4,{NULL},S_SKULL_ATK3,0,0}, // S_SKULL_ATK4 +[593] {SPR_SKUL,32772,3,{NULL},S_SKULL_PAIN2,0,0}, // S_SKULL_PAIN +[594] {SPR_SKUL,32772,3,{A_Pain},S_SKULL_RUN1,0,0}, // S_SKULL_PAIN2 +[595] {SPR_SKUL,32773,6,{NULL},S_SKULL_DIE2,0,0}, // S_SKULL_DIE1 +[596] {SPR_SKUL,32774,6,{A_Scream},S_SKULL_DIE3,0,0}, // S_SKULL_DIE2 +[597] {SPR_SKUL,32775,6,{NULL},S_SKULL_DIE4,0,0}, // S_SKULL_DIE3 +[598] {SPR_SKUL,32776,6,{A_Fall},S_SKULL_DIE5,0,0}, // S_SKULL_DIE4 +[599] {SPR_SKUL,9,6,{NULL},S_SKULL_DIE6,0,0}, // S_SKULL_DIE5 +[600] {SPR_SKUL,10,6,{NULL},S_NULL,0,0}, // S_SKULL_DIE6 +[601] {SPR_SPID,0,10,{A_Look},S_SPID_STND2,0,0}, // S_SPID_STND +[602] {SPR_SPID,1,10,{A_Look},S_SPID_STND,0,0}, // S_SPID_STND2 +[603] {SPR_SPID,0,3,{A_Metal},S_SPID_RUN2,0,0}, // S_SPID_RUN1 +[604] {SPR_SPID,0,3,{A_Chase},S_SPID_RUN3,0,0}, // S_SPID_RUN2 +[605] {SPR_SPID,1,3,{A_Chase},S_SPID_RUN4,0,0}, // S_SPID_RUN3 +[606] {SPR_SPID,1,3,{A_Chase},S_SPID_RUN5,0,0}, // S_SPID_RUN4 +[607] {SPR_SPID,2,3,{A_Metal},S_SPID_RUN6,0,0}, // S_SPID_RUN5 +[608] {SPR_SPID,2,3,{A_Chase},S_SPID_RUN7,0,0}, // S_SPID_RUN6 +[609] {SPR_SPID,3,3,{A_Chase},S_SPID_RUN8,0,0}, // S_SPID_RUN7 +[610] {SPR_SPID,3,3,{A_Chase},S_SPID_RUN9,0,0}, // S_SPID_RUN8 +[611] {SPR_SPID,4,3,{A_Metal},S_SPID_RUN10,0,0}, // S_SPID_RUN9 +[612] {SPR_SPID,4,3,{A_Chase},S_SPID_RUN11,0,0}, // S_SPID_RUN10 +[613] {SPR_SPID,5,3,{A_Chase},S_SPID_RUN12,0,0}, // S_SPID_RUN11 +[614] {SPR_SPID,5,3,{A_Chase},S_SPID_RUN1,0,0}, // S_SPID_RUN12 +[615] {SPR_SPID,32768,20,{A_FaceTarget},S_SPID_ATK2,0,0}, // S_SPID_ATK1 +[616] {SPR_SPID,32774,4,{A_SPosAttack},S_SPID_ATK3,0,0}, // S_SPID_ATK2 +[617] {SPR_SPID,32775,4,{A_SPosAttack},S_SPID_ATK4,0,0}, // S_SPID_ATK3 +[618] {SPR_SPID,32775,1,{A_SpidRefire},S_SPID_ATK2,0,0}, // S_SPID_ATK4 +[619] {SPR_SPID,8,3,{NULL},S_SPID_PAIN2,0,0}, // S_SPID_PAIN +[620] {SPR_SPID,8,3,{A_Pain},S_SPID_RUN1,0,0}, // S_SPID_PAIN2 +[621] {SPR_SPID,9,20,{A_Scream},S_SPID_DIE2,0,0}, // S_SPID_DIE1 +[622] {SPR_SPID,10,10,{A_Fall},S_SPID_DIE3,0,0}, // S_SPID_DIE2 +[623] {SPR_SPID,11,10,{NULL},S_SPID_DIE4,0,0}, // S_SPID_DIE3 +[624] {SPR_SPID,12,10,{NULL},S_SPID_DIE5,0,0}, // S_SPID_DIE4 +[625] {SPR_SPID,13,10,{NULL},S_SPID_DIE6,0,0}, // S_SPID_DIE5 +[626] {SPR_SPID,14,10,{NULL},S_SPID_DIE7,0,0}, // S_SPID_DIE6 +[627] {SPR_SPID,15,10,{NULL},S_SPID_DIE8,0,0}, // S_SPID_DIE7 +[628] {SPR_SPID,16,10,{NULL},S_SPID_DIE9,0,0}, // S_SPID_DIE8 +[629] {SPR_SPID,17,10,{NULL},S_SPID_DIE10,0,0}, // S_SPID_DIE9 +[630] {SPR_SPID,18,30,{NULL},S_SPID_DIE11,0,0}, // S_SPID_DIE10 +[631] {SPR_SPID,18,-1,{A_BossDeath},S_NULL,0,0}, // S_SPID_DIE11 +[632] {SPR_BSPI,0,10,{A_Look},S_BSPI_STND2,0,0}, // S_BSPI_STND +[633] {SPR_BSPI,1,10,{A_Look},S_BSPI_STND,0,0}, // S_BSPI_STND2 +[634] {SPR_BSPI,0,20,{NULL},S_BSPI_RUN1,0,0}, // S_BSPI_SIGHT +[635] {SPR_BSPI,0,3,{A_BabyMetal},S_BSPI_RUN2,0,0}, // S_BSPI_RUN1 +[636] {SPR_BSPI,0,3,{A_Chase},S_BSPI_RUN3,0,0}, // S_BSPI_RUN2 +[637] {SPR_BSPI,1,3,{A_Chase},S_BSPI_RUN4,0,0}, // S_BSPI_RUN3 +[638] {SPR_BSPI,1,3,{A_Chase},S_BSPI_RUN5,0,0}, // S_BSPI_RUN4 +[639] {SPR_BSPI,2,3,{A_Chase},S_BSPI_RUN6,0,0}, // S_BSPI_RUN5 +[640] {SPR_BSPI,2,3,{A_Chase},S_BSPI_RUN7,0,0}, // S_BSPI_RUN6 +[641] {SPR_BSPI,3,3,{A_BabyMetal},S_BSPI_RUN8,0,0}, // S_BSPI_RUN7 +[642] {SPR_BSPI,3,3,{A_Chase},S_BSPI_RUN9,0,0}, // S_BSPI_RUN8 +[643] {SPR_BSPI,4,3,{A_Chase},S_BSPI_RUN10,0,0}, // S_BSPI_RUN9 +[644] {SPR_BSPI,4,3,{A_Chase},S_BSPI_RUN11,0,0}, // S_BSPI_RUN10 +[645] {SPR_BSPI,5,3,{A_Chase},S_BSPI_RUN12,0,0}, // S_BSPI_RUN11 +[646] {SPR_BSPI,5,3,{A_Chase},S_BSPI_RUN1,0,0}, // S_BSPI_RUN12 +[647] {SPR_BSPI,32768,20,{A_FaceTarget},S_BSPI_ATK2,0,0}, // S_BSPI_ATK1 +[648] {SPR_BSPI,32774,4,{A_BspiAttack},S_BSPI_ATK3,0,0}, // S_BSPI_ATK2 +[649] {SPR_BSPI,32775,4,{NULL},S_BSPI_ATK4,0,0}, // S_BSPI_ATK3 +[650] {SPR_BSPI,32775,1,{A_SpidRefire},S_BSPI_ATK2,0,0}, // S_BSPI_ATK4 +[651] {SPR_BSPI,8,3,{NULL},S_BSPI_PAIN2,0,0}, // S_BSPI_PAIN +[652] {SPR_BSPI,8,3,{A_Pain},S_BSPI_RUN1,0,0}, // S_BSPI_PAIN2 +[653] {SPR_BSPI,9,20,{A_Scream},S_BSPI_DIE2,0,0}, // S_BSPI_DIE1 +[654] {SPR_BSPI,10,7,{A_Fall},S_BSPI_DIE3,0,0}, // S_BSPI_DIE2 +[655] {SPR_BSPI,11,7,{NULL},S_BSPI_DIE4,0,0}, // S_BSPI_DIE3 +[656] {SPR_BSPI,12,7,{NULL},S_BSPI_DIE5,0,0}, // S_BSPI_DIE4 +[657] {SPR_BSPI,13,7,{NULL},S_BSPI_DIE6,0,0}, // S_BSPI_DIE5 +[658] {SPR_BSPI,14,7,{NULL},S_BSPI_DIE7,0,0}, // S_BSPI_DIE6 +[659] {SPR_BSPI,15,-1,{A_BossDeath},S_NULL,0,0}, // S_BSPI_DIE7 +[660] {SPR_BSPI,15,5,{NULL},S_BSPI_RAISE2,0,0}, // S_BSPI_RAISE1 +[661] {SPR_BSPI,14,5,{NULL},S_BSPI_RAISE3,0,0}, // S_BSPI_RAISE2 +[662] {SPR_BSPI,13,5,{NULL},S_BSPI_RAISE4,0,0}, // S_BSPI_RAISE3 +[663] {SPR_BSPI,12,5,{NULL},S_BSPI_RAISE5,0,0}, // S_BSPI_RAISE4 +[664] {SPR_BSPI,11,5,{NULL},S_BSPI_RAISE6,0,0}, // S_BSPI_RAISE5 +[665] {SPR_BSPI,10,5,{NULL},S_BSPI_RAISE7,0,0}, // S_BSPI_RAISE6 +[666] {SPR_BSPI,9,5,{NULL},S_BSPI_RUN1,0,0}, // S_BSPI_RAISE7 +[667] {SPR_APLS,32768,5,{NULL},S_ARACH_PLAZ2,0,0}, // S_ARACH_PLAZ +[668] {SPR_APLS,32769,5,{NULL},S_ARACH_PLAZ,0,0}, // S_ARACH_PLAZ2 +[669] {SPR_APBX,32768,5,{NULL},S_ARACH_PLEX2,0,0}, // S_ARACH_PLEX +[670] {SPR_APBX,32769,5,{NULL},S_ARACH_PLEX3,0,0}, // S_ARACH_PLEX2 +[671] {SPR_APBX,32770,5,{NULL},S_ARACH_PLEX4,0,0}, // S_ARACH_PLEX3 +[672] {SPR_APBX,32771,5,{NULL},S_ARACH_PLEX5,0,0}, // S_ARACH_PLEX4 +[673] {SPR_APBX,32772,5,{NULL},S_NULL,0,0}, // S_ARACH_PLEX5 +[674] {SPR_CYBR,0,10,{A_Look},S_CYBER_STND2,0,0}, // S_CYBER_STND +[675] {SPR_CYBR,1,10,{A_Look},S_CYBER_STND,0,0}, // S_CYBER_STND2 +[676] {SPR_CYBR,0,3,{A_Hoof},S_CYBER_RUN2,0,0}, // S_CYBER_RUN1 +[677] {SPR_CYBR,0,3,{A_Chase},S_CYBER_RUN3,0,0}, // S_CYBER_RUN2 +[678] {SPR_CYBR,1,3,{A_Chase},S_CYBER_RUN4,0,0}, // S_CYBER_RUN3 +[679] {SPR_CYBR,1,3,{A_Chase},S_CYBER_RUN5,0,0}, // S_CYBER_RUN4 +[680] {SPR_CYBR,2,3,{A_Chase},S_CYBER_RUN6,0,0}, // S_CYBER_RUN5 +[681] {SPR_CYBR,2,3,{A_Chase},S_CYBER_RUN7,0,0}, // S_CYBER_RUN6 +[682] {SPR_CYBR,3,3,{A_Metal},S_CYBER_RUN8,0,0}, // S_CYBER_RUN7 +[683] {SPR_CYBR,3,3,{A_Chase},S_CYBER_RUN1,0,0}, // S_CYBER_RUN8 +[684] {SPR_CYBR,4,6,{A_FaceTarget},S_CYBER_ATK2,0,0}, // S_CYBER_ATK1 +[685] {SPR_CYBR,5,12,{A_CyberAttack},S_CYBER_ATK3,0,0}, // S_CYBER_ATK2 +[686] {SPR_CYBR,4,12,{A_FaceTarget},S_CYBER_ATK4,0,0}, // S_CYBER_ATK3 +[687] {SPR_CYBR,5,12,{A_CyberAttack},S_CYBER_ATK5,0,0}, // S_CYBER_ATK4 +[688] {SPR_CYBR,4,12,{A_FaceTarget},S_CYBER_ATK6,0,0}, // S_CYBER_ATK5 +[689] {SPR_CYBR,5,12,{A_CyberAttack},S_CYBER_RUN1,0,0}, // S_CYBER_ATK6 +[690] {SPR_CYBR,6,10,{A_Pain},S_CYBER_RUN1,0,0}, // S_CYBER_PAIN +[691] {SPR_CYBR,7,10,{NULL},S_CYBER_DIE2,0,0}, // S_CYBER_DIE1 +[692] {SPR_CYBR,8,10,{A_Scream},S_CYBER_DIE3,0,0}, // S_CYBER_DIE2 +[693] {SPR_CYBR,9,10,{NULL},S_CYBER_DIE4,0,0}, // S_CYBER_DIE3 +[694] {SPR_CYBR,10,10,{NULL},S_CYBER_DIE5,0,0}, // S_CYBER_DIE4 +[695] {SPR_CYBR,11,10,{NULL},S_CYBER_DIE6,0,0}, // S_CYBER_DIE5 +[696] {SPR_CYBR,12,10,{A_Fall},S_CYBER_DIE7,0,0}, // S_CYBER_DIE6 +[697] {SPR_CYBR,13,10,{NULL},S_CYBER_DIE8,0,0}, // S_CYBER_DIE7 +[698] {SPR_CYBR,14,10,{NULL},S_CYBER_DIE9,0,0}, // S_CYBER_DIE8 +[699] {SPR_CYBR,15,30,{NULL},S_CYBER_DIE10,0,0}, // S_CYBER_DIE9 +[700] {SPR_CYBR,15,-1,{A_BossDeath},S_NULL,0,0}, // S_CYBER_DIE10 +[701] {SPR_PAIN,0,10,{A_Look},S_PAIN_STND,0,0}, // S_PAIN_STND +[702] {SPR_PAIN,0,3,{A_Chase},S_PAIN_RUN2,0,0}, // S_PAIN_RUN1 +[703] {SPR_PAIN,0,3,{A_Chase},S_PAIN_RUN3,0,0}, // S_PAIN_RUN2 +[704] {SPR_PAIN,1,3,{A_Chase},S_PAIN_RUN4,0,0}, // S_PAIN_RUN3 +[705] {SPR_PAIN,1,3,{A_Chase},S_PAIN_RUN5,0,0}, // S_PAIN_RUN4 +[706] {SPR_PAIN,2,3,{A_Chase},S_PAIN_RUN6,0,0}, // S_PAIN_RUN5 +[707] {SPR_PAIN,2,3,{A_Chase},S_PAIN_RUN1,0,0}, // S_PAIN_RUN6 +[708] {SPR_PAIN,3,5,{A_FaceTarget},S_PAIN_ATK2,0,0}, // S_PAIN_ATK1 +[709] {SPR_PAIN,4,5,{A_FaceTarget},S_PAIN_ATK3,0,0}, // S_PAIN_ATK2 +[710] {SPR_PAIN,32773,5,{A_FaceTarget},S_PAIN_ATK4,0,0}, // S_PAIN_ATK3 +[711] {SPR_PAIN,32773,0,{A_PainAttack},S_PAIN_RUN1,0,0}, // S_PAIN_ATK4 +[712] {SPR_PAIN,6,6,{NULL},S_PAIN_PAIN2,0,0}, // S_PAIN_PAIN +[713] {SPR_PAIN,6,6,{A_Pain},S_PAIN_RUN1,0,0}, // S_PAIN_PAIN2 +[714] {SPR_PAIN,32775,8,{NULL},S_PAIN_DIE2,0,0}, // S_PAIN_DIE1 +[715] {SPR_PAIN,32776,8,{A_Scream},S_PAIN_DIE3,0,0}, // S_PAIN_DIE2 +[716] {SPR_PAIN,32777,8,{NULL},S_PAIN_DIE4,0,0}, // S_PAIN_DIE3 +[717] {SPR_PAIN,32778,8,{NULL},S_PAIN_DIE5,0,0}, // S_PAIN_DIE4 +[718] {SPR_PAIN,32779,8,{A_PainDie},S_PAIN_DIE6,0,0}, // S_PAIN_DIE5 +[719] {SPR_PAIN,32780,8,{NULL},S_NULL,0,0}, // S_PAIN_DIE6 +[720] {SPR_PAIN,12,8,{NULL},S_PAIN_RAISE2,0,0}, // S_PAIN_RAISE1 +[721] {SPR_PAIN,11,8,{NULL},S_PAIN_RAISE3,0,0}, // S_PAIN_RAISE2 +[722] {SPR_PAIN,10,8,{NULL},S_PAIN_RAISE4,0,0}, // S_PAIN_RAISE3 +[723] {SPR_PAIN,9,8,{NULL},S_PAIN_RAISE5,0,0}, // S_PAIN_RAISE4 +[724] {SPR_PAIN,8,8,{NULL},S_PAIN_RAISE6,0,0}, // S_PAIN_RAISE5 +[725] {SPR_PAIN,7,8,{NULL},S_PAIN_RUN1,0,0}, // S_PAIN_RAISE6 +[726] {SPR_SSWV,0,10,{A_Look},S_SSWV_STND2,0,0}, // S_SSWV_STND +[727] {SPR_SSWV,1,10,{A_Look},S_SSWV_STND,0,0}, // S_SSWV_STND2 +[728] {SPR_SSWV,0,3,{A_Chase},S_SSWV_RUN2,0,0}, // S_SSWV_RUN1 +[729] {SPR_SSWV,0,3,{A_Chase},S_SSWV_RUN3,0,0}, // S_SSWV_RUN2 +[730] {SPR_SSWV,1,3,{A_Chase},S_SSWV_RUN4,0,0}, // S_SSWV_RUN3 +[731] {SPR_SSWV,1,3,{A_Chase},S_SSWV_RUN5,0,0}, // S_SSWV_RUN4 +[732] {SPR_SSWV,2,3,{A_Chase},S_SSWV_RUN6,0,0}, // S_SSWV_RUN5 +[733] {SPR_SSWV,2,3,{A_Chase},S_SSWV_RUN7,0,0}, // S_SSWV_RUN6 +[734] {SPR_SSWV,3,3,{A_Chase},S_SSWV_RUN8,0,0}, // S_SSWV_RUN7 +[735] {SPR_SSWV,3,3,{A_Chase},S_SSWV_RUN1,0,0}, // S_SSWV_RUN8 +[736] {SPR_SSWV,4,10,{A_FaceTarget},S_SSWV_ATK2,0,0}, // S_SSWV_ATK1 +[737] {SPR_SSWV,5,10,{A_FaceTarget},S_SSWV_ATK3,0,0}, // S_SSWV_ATK2 +[738] {SPR_SSWV,32774,4,{A_CPosAttack},S_SSWV_ATK4,0,0}, // S_SSWV_ATK3 +[739] {SPR_SSWV,5,6,{A_FaceTarget},S_SSWV_ATK5,0,0}, // S_SSWV_ATK4 +[740] {SPR_SSWV,32774,4,{A_CPosAttack},S_SSWV_ATK6,0,0}, // S_SSWV_ATK5 +[741] {SPR_SSWV,5,1,{A_CPosRefire},S_SSWV_ATK2,0,0}, // S_SSWV_ATK6 +[742] {SPR_SSWV,7,3,{NULL},S_SSWV_PAIN2,0,0}, // S_SSWV_PAIN +[743] {SPR_SSWV,7,3,{A_Pain},S_SSWV_RUN1,0,0}, // S_SSWV_PAIN2 +[744] {SPR_SSWV,8,5,{NULL},S_SSWV_DIE2,0,0}, // S_SSWV_DIE1 +[745] {SPR_SSWV,9,5,{A_Scream},S_SSWV_DIE3,0,0}, // S_SSWV_DIE2 +[746] {SPR_SSWV,10,5,{A_Fall},S_SSWV_DIE4,0,0}, // S_SSWV_DIE3 +[747] {SPR_SSWV,11,5,{NULL},S_SSWV_DIE5,0,0}, // S_SSWV_DIE4 +[748] {SPR_SSWV,12,-1,{NULL},S_NULL,0,0}, // S_SSWV_DIE5 +[749] {SPR_SSWV,13,5,{NULL},S_SSWV_XDIE2,0,0}, // S_SSWV_XDIE1 +[750] {SPR_SSWV,14,5,{A_XScream},S_SSWV_XDIE3,0,0}, // S_SSWV_XDIE2 +[751] {SPR_SSWV,15,5,{A_Fall},S_SSWV_XDIE4,0,0}, // S_SSWV_XDIE3 +[752] {SPR_SSWV,16,5,{NULL},S_SSWV_XDIE5,0,0}, // S_SSWV_XDIE4 +[753] {SPR_SSWV,17,5,{NULL},S_SSWV_XDIE6,0,0}, // S_SSWV_XDIE5 +[754] {SPR_SSWV,18,5,{NULL},S_SSWV_XDIE7,0,0}, // S_SSWV_XDIE6 +[755] {SPR_SSWV,19,5,{NULL},S_SSWV_XDIE8,0,0}, // S_SSWV_XDIE7 +[756] {SPR_SSWV,20,5,{NULL},S_SSWV_XDIE9,0,0}, // S_SSWV_XDIE8 +[757] {SPR_SSWV,21,-1,{NULL},S_NULL,0,0}, // S_SSWV_XDIE9 +[758] {SPR_SSWV,12,5,{NULL},S_SSWV_RAISE2,0,0}, // S_SSWV_RAISE1 +[759] {SPR_SSWV,11,5,{NULL},S_SSWV_RAISE3,0,0}, // S_SSWV_RAISE2 +[760] {SPR_SSWV,10,5,{NULL},S_SSWV_RAISE4,0,0}, // S_SSWV_RAISE3 +[761] {SPR_SSWV,9,5,{NULL},S_SSWV_RAISE5,0,0}, // S_SSWV_RAISE4 +[762] {SPR_SSWV,8,5,{NULL},S_SSWV_RUN1,0,0}, // S_SSWV_RAISE5 +[763] {SPR_KEEN,0,-1,{NULL},S_KEENSTND,0,0}, // S_KEENSTND +[764] {SPR_KEEN,0,6,{NULL},S_COMMKEEN2,0,0}, // S_COMMKEEN +[765] {SPR_KEEN,1,6,{NULL},S_COMMKEEN3,0,0}, // S_COMMKEEN2 +[766] {SPR_KEEN,2,6,{A_Scream},S_COMMKEEN4,0,0}, // S_COMMKEEN3 +[767] {SPR_KEEN,3,6,{NULL},S_COMMKEEN5,0,0}, // S_COMMKEEN4 +[768] {SPR_KEEN,4,6,{NULL},S_COMMKEEN6,0,0}, // S_COMMKEEN5 +[769] {SPR_KEEN,5,6,{NULL},S_COMMKEEN7,0,0}, // S_COMMKEEN6 +[770] {SPR_KEEN,6,6,{NULL},S_COMMKEEN8,0,0}, // S_COMMKEEN7 +[771] {SPR_KEEN,7,6,{NULL},S_COMMKEEN9,0,0}, // S_COMMKEEN8 +[772] {SPR_KEEN,8,6,{NULL},S_COMMKEEN10,0,0}, // S_COMMKEEN9 +[773] {SPR_KEEN,9,6,{NULL},S_COMMKEEN11,0,0}, // S_COMMKEEN10 +[774] {SPR_KEEN,10,6,{A_KeenDie},S_COMMKEEN12,0,0},// S_COMMKEEN11 +[775] {SPR_KEEN,11,-1,{NULL},S_NULL,0,0}, // S_COMMKEEN12 +[776] {SPR_KEEN,12,4,{NULL},S_KEENPAIN2,0,0}, // S_KEENPAIN +[777] {SPR_KEEN,12,8,{A_Pain},S_KEENSTND,0,0}, // S_KEENPAIN2 +[778] {SPR_BBRN,0,-1,{NULL},S_NULL,0,0}, // S_BRAIN +[779] {SPR_BBRN,1,36,{A_BrainPain},S_BRAIN,0,0}, // S_BRAIN_PAIN +[780] {SPR_BBRN,0,100,{A_BrainScream},S_BRAIN_DIE2,0,0}, // S_BRAIN_DIE1 +[781] {SPR_BBRN,0,10,{NULL},S_BRAIN_DIE3,0,0}, // S_BRAIN_DIE2 +[782] {SPR_BBRN,0,10,{NULL},S_BRAIN_DIE4,0,0}, // S_BRAIN_DIE3 +[783] {SPR_BBRN,0,-1,{A_BrainDie},S_NULL,0,0}, // S_BRAIN_DIE4 +[784] {SPR_SSWV,0,10,{A_Look},S_BRAINEYE,0,0}, // S_BRAINEYE +[785] {SPR_SSWV,0,181,{A_BrainAwake},S_BRAINEYE1,0,0}, // S_BRAINEYESEE +[786] {SPR_SSWV,0,150,{A_BrainSpit},S_BRAINEYE1,0,0}, // S_BRAINEYE1 +[787] {SPR_BOSF,32768,3,{A_SpawnSound},S_SPAWN2,0,0}, // S_SPAWN1 +[788] {SPR_BOSF,32769,3,{A_SpawnFly},S_SPAWN3,0,0}, // S_SPAWN2 +[789] {SPR_BOSF,32770,3,{A_SpawnFly},S_SPAWN4,0,0}, // S_SPAWN3 +[790] {SPR_BOSF,32771,3,{A_SpawnFly},S_SPAWN1,0,0}, // S_SPAWN4 +[791] {SPR_FIRE,32768,4,{A_Fire},S_SPAWNFIRE2,0,0}, // S_SPAWNFIRE1 +[792] {SPR_FIRE,32769,4,{A_Fire},S_SPAWNFIRE3,0,0}, // S_SPAWNFIRE2 +[793] {SPR_FIRE,32770,4,{A_Fire},S_SPAWNFIRE4,0,0}, // S_SPAWNFIRE3 +[794] {SPR_FIRE,32771,4,{A_Fire},S_SPAWNFIRE5,0,0}, // S_SPAWNFIRE4 +[795] {SPR_FIRE,32772,4,{A_Fire},S_SPAWNFIRE6,0,0}, // S_SPAWNFIRE5 +[796] {SPR_FIRE,32773,4,{A_Fire},S_SPAWNFIRE7,0,0}, // S_SPAWNFIRE6 +[797] {SPR_FIRE,32774,4,{A_Fire},S_SPAWNFIRE8,0,0}, // S_SPAWNFIRE7 +[798] {SPR_FIRE,32775,4,{A_Fire},S_NULL,0,0}, // S_SPAWNFIRE8 +[799] {SPR_MISL,32769,10,{NULL},S_BRAINEXPLODE2,0,0}, // S_BRAINEXPLODE1 +[800] {SPR_MISL,32770,10,{NULL},S_BRAINEXPLODE3,0,0}, // S_BRAINEXPLODE2 +[801] {SPR_MISL,32771,10,{A_BrainExplode},S_NULL,0,0}, // S_BRAINEXPLODE3 +[802] {SPR_ARM1,0,6,{NULL},S_ARM1A,0,0}, // S_ARM1 +[803] {SPR_ARM1,32769,7,{NULL},S_ARM1,0,0}, // S_ARM1A +[804] {SPR_ARM2,0,6,{NULL},S_ARM2A,0,0}, // S_ARM2 +[805] {SPR_ARM2,32769,6,{NULL},S_ARM2,0,0}, // S_ARM2A +[806] {SPR_BAR1,0,6,{NULL},S_BAR2,0,0}, // S_BAR1 +[807] {SPR_BAR1,1,6,{NULL},S_BAR1,0,0}, // S_BAR2 +[808] {SPR_BEXP,32768,5,{NULL},S_BEXP2,0,0}, // S_BEXP +[809] {SPR_BEXP,32769,5,{A_Scream},S_BEXP3,0,0}, // S_BEXP2 +[810] {SPR_BEXP,32770,5,{NULL},S_BEXP4,0,0}, // S_BEXP3 +[811] {SPR_BEXP,32771,10,{A_Explode},S_BEXP5,0,0}, // S_BEXP4 +[812] {SPR_BEXP,32772,10,{NULL},S_NULL,0,0}, // S_BEXP5 +[813] {SPR_FCAN,32768,4,{NULL},S_BBAR2,0,0}, // S_BBAR1 +[814] {SPR_FCAN,32769,4,{NULL},S_BBAR3,0,0}, // S_BBAR2 +[815] {SPR_FCAN,32770,4,{NULL},S_BBAR1,0,0}, // S_BBAR3 +[816] {SPR_BON1,0,6,{NULL},S_BON1A,0,0}, // S_BON1 +[817] {SPR_BON1,1,6,{NULL},S_BON1B,0,0}, // S_BON1A +[818] {SPR_BON1,2,6,{NULL},S_BON1C,0,0}, // S_BON1B +[819] {SPR_BON1,3,6,{NULL},S_BON1D,0,0}, // S_BON1C +[820] {SPR_BON1,2,6,{NULL},S_BON1E,0,0}, // S_BON1D +[821] {SPR_BON1,1,6,{NULL},S_BON1,0,0}, // S_BON1E +[822] {SPR_BON2,0,6,{NULL},S_BON2A,0,0}, // S_BON2 +[823] {SPR_BON2,1,6,{NULL},S_BON2B,0,0}, // S_BON2A +[824] {SPR_BON2,2,6,{NULL},S_BON2C,0,0}, // S_BON2B +[825] {SPR_BON2,3,6,{NULL},S_BON2D,0,0}, // S_BON2C +[826] {SPR_BON2,2,6,{NULL},S_BON2E,0,0}, // S_BON2D +[827] {SPR_BON2,1,6,{NULL},S_BON2,0,0}, // S_BON2E +[828] {SPR_BKEY,0,10,{NULL},S_BKEY2,0,0}, // S_BKEY +[829] {SPR_BKEY,32769,10,{NULL},S_BKEY,0,0}, // S_BKEY2 +[830] {SPR_RKEY,0,10,{NULL},S_RKEY2,0,0}, // S_RKEY +[831] {SPR_RKEY,32769,10,{NULL},S_RKEY,0,0}, // S_RKEY2 +[832] {SPR_YKEY,0,10,{NULL},S_YKEY2,0,0}, // S_YKEY +[833] {SPR_YKEY,32769,10,{NULL},S_YKEY,0,0}, // S_YKEY2 +[834] {SPR_BSKU,0,10,{NULL},S_BSKULL2,0,0}, // S_BSKULL +[835] {SPR_BSKU,32769,10,{NULL},S_BSKULL,0,0}, // S_BSKULL2 +[836] {SPR_RSKU,0,10,{NULL},S_RSKULL2,0,0}, // S_RSKULL +[837] {SPR_RSKU,32769,10,{NULL},S_RSKULL,0,0}, // S_RSKULL2 +[838] {SPR_YSKU,0,10,{NULL},S_YSKULL2,0,0}, // S_YSKULL +[839] {SPR_YSKU,32769,10,{NULL},S_YSKULL,0,0}, // S_YSKULL2 +[840] {SPR_STIM,0,-1,{NULL},S_NULL,0,0}, // S_STIM +[841] {SPR_MEDI,0,-1,{NULL},S_NULL,0,0}, // S_MEDI +[842] {SPR_SOUL,32768,6,{NULL},S_SOUL2,0,0}, // S_SOUL +[843] {SPR_SOUL,32769,6,{NULL},S_SOUL3,0,0}, // S_SOUL2 +[844] {SPR_SOUL,32770,6,{NULL},S_SOUL4,0,0}, // S_SOUL3 +[845] {SPR_SOUL,32771,6,{NULL},S_SOUL5,0,0}, // S_SOUL4 +[846] {SPR_SOUL,32770,6,{NULL},S_SOUL6,0,0}, // S_SOUL5 +[847] {SPR_SOUL,32769,6,{NULL},S_SOUL,0,0}, // S_SOUL6 +[848] {SPR_PINV,32768,6,{NULL},S_PINV2,0,0}, // S_PINV +[849] {SPR_PINV,32769,6,{NULL},S_PINV3,0,0}, // S_PINV2 +[850] {SPR_PINV,32770,6,{NULL},S_PINV4,0,0}, // S_PINV3 +[851] {SPR_PINV,32771,6,{NULL},S_PINV,0,0}, // S_PINV4 +[852] {SPR_PSTR,32768,-1,{NULL},S_NULL,0,0}, // S_PSTR +[853] {SPR_PINS,32768,6,{NULL},S_PINS2,0,0}, // S_PINS +[854] {SPR_PINS,32769,6,{NULL},S_PINS3,0,0}, // S_PINS2 +[855] {SPR_PINS,32770,6,{NULL},S_PINS4,0,0}, // S_PINS3 +[856] {SPR_PINS,32771,6,{NULL},S_PINS,0,0}, // S_PINS4 +[857] {SPR_MEGA,32768,6,{NULL},S_MEGA2,0,0}, // S_MEGA +[858] {SPR_MEGA,32769,6,{NULL},S_MEGA3,0,0}, // S_MEGA2 +[859] {SPR_MEGA,32770,6,{NULL},S_MEGA4,0,0}, // S_MEGA3 +[860] {SPR_MEGA,32771,6,{NULL},S_MEGA,0,0}, // S_MEGA4 +[861] {SPR_SUIT,32768,-1,{NULL},S_NULL,0,0}, // S_SUIT +[862] {SPR_PMAP,32768,6,{NULL},S_PMAP2,0,0}, // S_PMAP +[863] {SPR_PMAP,32769,6,{NULL},S_PMAP3,0,0}, // S_PMAP2 +[864] {SPR_PMAP,32770,6,{NULL},S_PMAP4,0,0}, // S_PMAP3 +[865] {SPR_PMAP,32771,6,{NULL},S_PMAP5,0,0}, // S_PMAP4 +[866] {SPR_PMAP,32770,6,{NULL},S_PMAP6,0,0}, // S_PMAP5 +[867] {SPR_PMAP,32769,6,{NULL},S_PMAP,0,0}, // S_PMAP6 +[868] {SPR_PVIS,32768,6,{NULL},S_PVIS2,0,0}, // S_PVIS +[869] {SPR_PVIS,1,6,{NULL},S_PVIS,0,0}, // S_PVIS2 +[870] {SPR_CLIP,0,-1,{NULL},S_NULL,0,0}, // S_CLIP +[871] {SPR_AMMO,0,-1,{NULL},S_NULL,0,0}, // S_AMMO +[872] {SPR_ROCK,0,-1,{NULL},S_NULL,0,0}, // S_ROCK +[873] {SPR_BROK,0,-1,{NULL},S_NULL,0,0}, // S_BROK +[874] {SPR_CELL,0,-1,{NULL},S_NULL,0,0}, // S_CELL +[875] {SPR_CELP,0,-1,{NULL},S_NULL,0,0}, // S_CELP +[876] {SPR_SHEL,0,-1,{NULL},S_NULL,0,0}, // S_SHEL +[877] {SPR_SBOX,0,-1,{NULL},S_NULL,0,0}, // S_SBOX +[878] {SPR_BPAK,0,-1,{NULL},S_NULL,0,0}, // S_BPAK +[879] {SPR_BFUG,0,-1,{NULL},S_NULL,0,0}, // S_BFUG +[880] {SPR_MGUN,0,-1,{NULL},S_NULL,0,0}, // S_MGUN +[881] {SPR_CSAW,0,-1,{NULL},S_NULL,0,0}, // S_CSAW +[882] {SPR_LAUN,0,-1,{NULL},S_NULL,0,0}, // S_LAUN +[883] {SPR_PLAS,0,-1,{NULL},S_NULL,0,0}, // S_PLAS +[884] {SPR_SHOT,0,-1,{NULL},S_NULL,0,0}, // S_SHOT +[885] {SPR_SGN2,0,-1,{NULL},S_NULL,0,0}, // S_SHOT2 +[886] {SPR_COLU,32768,-1,{NULL},S_NULL,0,0}, // S_COLU +[887] {SPR_SMT2,0,-1,{NULL},S_NULL,0,0}, // S_STALAG +[888] {SPR_GOR1,0,10,{NULL},S_BLOODYTWITCH2,0,0}, // S_BLOODYTWITCH +[889] {SPR_GOR1,1,15,{NULL},S_BLOODYTWITCH3,0,0}, // S_BLOODYTWITCH2 +[890] {SPR_GOR1,2,8,{NULL},S_BLOODYTWITCH4,0,0}, // S_BLOODYTWITCH3 +[891] {SPR_GOR1,1,6,{NULL},S_BLOODYTWITCH,0,0}, // S_BLOODYTWITCH4 +[892] {SPR_PLAY,13,-1,{NULL},S_NULL,0,0}, // S_DEADTORSO +[893] {SPR_PLAY,18,-1,{NULL},S_NULL,0,0}, // S_DEADBOTTOM +[894] {SPR_POL2,0,-1,{NULL},S_NULL,0,0}, // S_HEADSONSTICK +[895] {SPR_POL5,0,-1,{NULL},S_NULL,0,0}, // S_GIBS +[896] {SPR_POL4,0,-1,{NULL},S_NULL,0,0}, // S_HEADONASTICK +[897] {SPR_POL3,32768,6,{NULL},S_HEADCANDLES2,0,0}, // S_HEADCANDLES +[898] {SPR_POL3,32769,6,{NULL},S_HEADCANDLES,0,0}, // S_HEADCANDLES2 +[899] {SPR_POL1,0,-1,{NULL},S_NULL,0,0}, // S_DEADSTICK +[900] {SPR_POL6,0,6,{NULL},S_LIVESTICK2,0,0}, // S_LIVESTICK +[901] {SPR_POL6,1,8,{NULL},S_LIVESTICK,0,0}, // S_LIVESTICK2 +[902] {SPR_GOR2,0,-1,{NULL},S_NULL,0,0}, // S_MEAT2 +[903] {SPR_GOR3,0,-1,{NULL},S_NULL,0,0}, // S_MEAT3 +[904] {SPR_GOR4,0,-1,{NULL},S_NULL,0,0}, // S_MEAT4 +[905] {SPR_GOR5,0,-1,{NULL},S_NULL,0,0}, // S_MEAT5 +[906] {SPR_SMIT,0,-1,{NULL},S_NULL,0,0}, // S_STALAGTITE +[907] {SPR_COL1,0,-1,{NULL},S_NULL,0,0}, // S_TALLGRNCOL +[908] {SPR_COL2,0,-1,{NULL},S_NULL,0,0}, // S_SHRTGRNCOL +[909] {SPR_COL3,0,-1,{NULL},S_NULL,0,0}, // S_TALLREDCOL +[910] {SPR_COL4,0,-1,{NULL},S_NULL,0,0}, // S_SHRTREDCOL +[911] {SPR_CAND,32768,-1,{NULL},S_NULL,0,0}, // S_CANDLESTIK +[912] {SPR_CBRA,32768,-1,{NULL},S_NULL,0,0}, // S_CANDELABRA +[913] {SPR_COL6,0,-1,{NULL},S_NULL,0,0}, // S_SKULLCOL +[914] {SPR_TRE1,0,-1,{NULL},S_NULL,0,0}, // S_TORCHTREE +[915] {SPR_TRE2,0,-1,{NULL},S_NULL,0,0}, // S_BIGTREE +[916] {SPR_ELEC,0,-1,{NULL},S_NULL,0,0}, // S_TECHPILLAR +[917] {SPR_CEYE,32768,6,{NULL},S_EVILEYE2,0,0}, // S_EVILEYE +[918] {SPR_CEYE,32769,6,{NULL},S_EVILEYE3,0,0}, // S_EVILEYE2 +[919] {SPR_CEYE,32770,6,{NULL},S_EVILEYE4,0,0}, // S_EVILEYE3 +[920] {SPR_CEYE,32769,6,{NULL},S_EVILEYE,0,0}, // S_EVILEYE4 +[921] {SPR_FSKU,32768,6,{NULL},S_FLOATSKULL2,0,0}, // S_FLOATSKULL +[922] {SPR_FSKU,32769,6,{NULL},S_FLOATSKULL3,0,0}, // S_FLOATSKULL2 +[923] {SPR_FSKU,32770,6,{NULL},S_FLOATSKULL,0,0}, // S_FLOATSKULL3 +[924] {SPR_COL5,0,14,{NULL},S_HEARTCOL2,0,0}, // S_HEARTCOL +[925] {SPR_COL5,1,14,{NULL},S_HEARTCOL,0,0}, // S_HEARTCOL2 +[926] {SPR_TBLU,32768,4,{NULL},S_BLUETORCH2,0,0}, // S_BLUETORCH +[927] {SPR_TBLU,32769,4,{NULL},S_BLUETORCH3,0,0}, // S_BLUETORCH2 +[928] {SPR_TBLU,32770,4,{NULL},S_BLUETORCH4,0,0}, // S_BLUETORCH3 +[929] {SPR_TBLU,32771,4,{NULL},S_BLUETORCH,0,0}, // S_BLUETORCH4 +[930] {SPR_TGRN,32768,4,{NULL},S_GREENTORCH2,0,0}, // S_GREENTORCH +[931] {SPR_TGRN,32769,4,{NULL},S_GREENTORCH3,0,0}, // S_GREENTORCH2 +[932] {SPR_TGRN,32770,4,{NULL},S_GREENTORCH4,0,0}, // S_GREENTORCH3 +[933] {SPR_TGRN,32771,4,{NULL},S_GREENTORCH,0,0}, // S_GREENTORCH4 +[934] {SPR_TRED,32768,4,{NULL},S_REDTORCH2,0,0}, // S_REDTORCH +[935] {SPR_TRED,32769,4,{NULL},S_REDTORCH3,0,0}, // S_REDTORCH2 +[936] {SPR_TRED,32770,4,{NULL},S_REDTORCH4,0,0}, // S_REDTORCH3 +[937] {SPR_TRED,32771,4,{NULL},S_REDTORCH,0,0}, // S_REDTORCH4 +[938] {SPR_SMBT,32768,4,{NULL},S_BTORCHSHRT2,0,0}, // S_BTORCHSHRT +[939] {SPR_SMBT,32769,4,{NULL},S_BTORCHSHRT3,0,0}, // S_BTORCHSHRT2 +[940] {SPR_SMBT,32770,4,{NULL},S_BTORCHSHRT4,0,0}, // S_BTORCHSHRT3 +[941] {SPR_SMBT,32771,4,{NULL},S_BTORCHSHRT,0,0}, // S_BTORCHSHRT4 +[942] {SPR_SMGT,32768,4,{NULL},S_GTORCHSHRT2,0,0}, // S_GTORCHSHRT +[943] {SPR_SMGT,32769,4,{NULL},S_GTORCHSHRT3,0,0}, // S_GTORCHSHRT2 +[944] {SPR_SMGT,32770,4,{NULL},S_GTORCHSHRT4,0,0}, // S_GTORCHSHRT3 +[945] {SPR_SMGT,32771,4,{NULL},S_GTORCHSHRT,0,0}, // S_GTORCHSHRT4 +[946] {SPR_SMRT,32768,4,{NULL},S_RTORCHSHRT2,0,0}, // S_RTORCHSHRT +[947] {SPR_SMRT,32769,4,{NULL},S_RTORCHSHRT3,0,0}, // S_RTORCHSHRT2 +[948] {SPR_SMRT,32770,4,{NULL},S_RTORCHSHRT4,0,0}, // S_RTORCHSHRT3 +[949] {SPR_SMRT,32771,4,{NULL},S_RTORCHSHRT,0,0}, // S_RTORCHSHRT4 +[950] {SPR_HDB1,0,-1,{NULL},S_NULL,0,0}, // S_HANGNOGUTS +[951] {SPR_HDB2,0,-1,{NULL},S_NULL,0,0}, // S_HANGBNOBRAIN +[952] {SPR_HDB3,0,-1,{NULL},S_NULL,0,0}, // S_HANGTLOOKDN +[953] {SPR_HDB4,0,-1,{NULL},S_NULL,0,0}, // S_HANGTSKULL +[954] {SPR_HDB5,0,-1,{NULL},S_NULL,0,0}, // S_HANGTLOOKUP +[955] {SPR_HDB6,0,-1,{NULL},S_NULL,0,0}, // S_HANGTNOBRAIN +[956] {SPR_POB1,0,-1,{NULL},S_NULL,0,0}, // S_COLONGIBS +[957] {SPR_POB2,0,-1,{NULL},S_NULL,0,0}, // S_SMALLPOOL +[958] {SPR_BRS1,0,-1,{NULL},S_NULL,0,0}, // S_BRAINSTEM +[959] {SPR_TLMP,32768,4,{NULL},S_TECHLAMP2,0,0}, // S_TECHLAMP +[960] {SPR_TLMP,32769,4,{NULL},S_TECHLAMP3,0,0}, // S_TECHLAMP2 +[961] {SPR_TLMP,32770,4,{NULL},S_TECHLAMP4,0,0}, // S_TECHLAMP3 +[962] {SPR_TLMP,32771,4,{NULL},S_TECHLAMP,0,0}, // S_TECHLAMP4 +[963] {SPR_TLP2,32768,4,{NULL},S_TECH2LAMP2,0,0}, // S_TECH2LAMP +[964] {SPR_TLP2,32769,4,{NULL},S_TECH2LAMP3,0,0}, // S_TECH2LAMP2 +[965] {SPR_TLP2,32770,4,{NULL},S_TECH2LAMP4,0,0}, // S_TECH2LAMP3 +[966] {SPR_TLP2,32771,4,{NULL},S_TECH2LAMP,0,0}, // S_TECH2LAMP4 +[967] {SPR_TNT1,0,-1,{NULL},S_TNT1,0,0}, // S_TNT1 + +======================================================================= + +########################### +THING DEFAULT "BITS" VALUES +########################### + +This comes directly from the source code, with Thing numbers added. +The item names are those used in the source code, not necessarily +what Dehacked might call them. They should all be identical to the +defaults in DOOM(2) except where translucency has been added and for +the two Things for PUSH and PULL wind sources at the end. + + +1 PLAYER + SOLID+SHOOTABLE+DROPOFF+PICKUP+NOTDMATCH + +2 POSSESSED + SOLID+SHOOTABLE+COUNTKILL + +3 SHOTGUY + SOLID+SHOOTABLE+COUNTKILL + +4 VILE + SOLID+SHOOTABLE+COUNTKILL + +5 FIRE + NOBLOCKMAP+NOGRAVITY+TRANSLUCENT + +6 UNDEAD + SOLID+SHOOTABLE+COUNTKILL + +7 TRACER + NOBLOCKMAP+MISSILE+DROPOFF+NOGRAVITY + +8 SMOKE + NOBLOCKMAP+NOGRAVITY+TRANSLUCENT + +9 FATSO + SOLID+SHOOTABLE+COUNTKILL + +10 FATSHOT + NOBLOCKMAP+MISSILE+DROPOFF+NOGRAVITY+TRANSLUCENT + +11 CHAINGUY + SOLID+SHOOTABLE+COUNTKILL + +12 TROOP + SOLID+SHOOTABLE+COUNTKILL + +13 SERGEANT + SOLID+SHOOTABLE+COUNTKILL + +14 SHADOWS + SOLID+SHOOTABLE+SHADOW+COUNTKILL + +15 HEAD + SOLID+SHOOTABLE+FLOAT+NOGRAVITY+COUNTKILL + +16 BRUISER + SOLID+SHOOTABLE+COUNTKILL + +17 BRUISERSHOT + NOBLOCKMAP+MISSILE+DROPOFF+NOGRAVITY+TRANSLUCENT + +18 KNIGHT + SOLID+SHOOTABLE+COUNTKILL + +19 SKULL + SOLID+SHOOTABLE+FLOAT+NOGRAVITY + +20 SPIDER + SOLID+SHOOTABLE+COUNTKILL + +21 BABY + SOLID+SHOOTABLE+COUNTKILL + +22 CYBORG + SOLID+SHOOTABLE+COUNTKILL + +23 PAIN + SOLID+SHOOTABLE+FLOAT+NOGRAVITY+COUNTKILL + +24 WOLFSS + SOLID+SHOOTABLE+COUNTKILL + +25 KEEN + SOLID+SPAWNCEILING+NOGRAVITY+SHOOTABLE+COUNTKILL + +26 BOSSBRAIN + SOLID+SHOOTABLE + +27 BOSSSPIT + NOBLOCKMAP+NOSECTOR + +28 BOSSTARGET + NOBLOCKMAP+NOSECTOR + +29 SPAWNSHOT + NOBLOCKMAP+MISSILE+DROPOFF+NOGRAVITY+NOCLIP + +30 SPAWNFIRE + NOBLOCKMAP+NOGRAVITY+TRANSLUCENT + +31 BARREL + SOLID+SHOOTABLE+NOBLOOD + +32 TROOPSHOT + NOBLOCKMAP+MISSILE+DROPOFF+NOGRAVITY+TRANSLUCENT + +33 HEADSHOT + NOBLOCKMAP+MISSILE+DROPOFF+NOGRAVITY+TRANSLUCENT + +34 ROCKET + NOBLOCKMAP+MISSILE+DROPOFF+NOGRAVITY + +35 PLASMA + NOBLOCKMAP+MISSILE+DROPOFF+NOGRAVITY+TRANSLUCENT + +36 BFG + NOBLOCKMAP+MISSILE+DROPOFF+NOGRAVITY+TRANSLUCENT + +37 ARACHPLAZ + NOBLOCKMAP+MISSILE+DROPOFF+NOGRAVITY+TRANSLUCENT + +38 PUFF + NOBLOCKMAP+NOGRAVITY+TRANSLUCENT + +39 BLOOD + NOBLOCKMAP + +40 TFOG + NOBLOCKMAP+NOGRAVITY+TRANSLUCENT + +41 IFOG + NOBLOCKMAP+NOGRAVITY+TRANSLUCENT + +42 TELEPORTMAN + NOBLOCKMAP+NOSECTOR + +43 EXTRABFG + NOBLOCKMAP+NOGRAVITY + +44 MISC0 + SPECIAL + +45 MISC1 + SPECIAL + +46 MISC2 + SPECIAL+COUNTITEM + +47 MISC3 + SPECIAL+COUNTITEM + +48 MISC4 + SPECIAL+NOTDMATCH + +49 MISC5 + SPECIAL+NOTDMATCH + +50 MISC6 + SPECIAL+NOTDMATCH + +51 MISC7 + SPECIAL+NOTDMATCH + +52 MISC8 + SPECIAL+NOTDMATCH + +53 MISC9 + SPECIAL+NOTDMATCH + +54 MISC10 + SPECIAL + +55 MISC11 + SPECIAL + +56 MISC12 + SPECIAL+COUNTITEM+TRANSLUCENT + +57 INV + SPECIAL+COUNTITEM+TRANSLUCENT + +58 MISC13 + SPECIAL+COUNTITEM + +59 INS + SPECIAL+COUNTITEM+TRANSLUCENT + +60 MISC14 + SPECIAL + +61 MISC15 + SPECIAL+COUNTITEM + +62 MISC16 + SPECIAL+COUNTITEM + +63 MEGA + SPECIAL+COUNTITEM+TRANSLUCENT + +64 CLIP + SPECIAL + +65 MISC17 + SPECIAL + +66 MISC18 + SPECIAL + +67 MISC19 + SPECIAL + +68 MISC20 + SPECIAL + +69 MISC21 + SPECIAL + +70 MISC22 + SPECIAL + +71 MISC23 + SPECIAL + +72 MISC24 + SPECIAL + +73 MISC25 + SPECIAL + +74 CHAINGUN + SPECIAL + +75 MISC26 + SPECIAL + +76 MISC27 + SPECIAL + +77 MISC28 + SPECIAL + +78 SHOTGUN + SPECIAL + +79 SUPERSHOTGUN + SPECIAL + +80 MISC29 + SOLID + +81 MISC30 + SOLID + +82 MISC31 + SOLID + +83 MISC32 + SOLID + +84 MISC33 + SOLID + +85 MISC34 + SOLID + +86 MISC35 + SOLID + +87 MISC36 + SOLID + +88 MISC37 + SOLID + +89 MISC38 + SOLID + +90 MISC39 + SOLID + +91 MISC40 + SOLID + +92 MISC41 + SOLID + +93 MISC42 + SOLID + +94 MISC43 + SOLID + +95 MISC44 + SOLID + +96 MISC45 + SOLID + +97 MISC46 + SOLID + +98 MISC47 + SOLID + +99 MISC48 + SOLID + +100 MISC49 + 0 + +101 MISC50 + SOLID + +102 MISC51 + SOLID+SPAWNCEILING+NOGRAVITY + +103 MISC52 + SOLID+SPAWNCEILING+NOGRAVITY + +104 MISC53 + SOLID+SPAWNCEILING+NOGRAVITY + +105 MISC54 + SOLID+SPAWNCEILING+NOGRAVITY + +106 MISC55 + SOLID+SPAWNCEILING+NOGRAVITY + +107 MISC56 + SPAWNCEILING+NOGRAVITY + +108 MISC57 + SPAWNCEILING+NOGRAVITY + +109 MISC58 + SPAWNCEILING+NOGRAVITY + +110 MISC59 + SPAWNCEILING+NOGRAVITY + +111 MISC60 + SPAWNCEILING+NOGRAVITY + +112 MISC61 + 0 + +113 MISC62 + 0 + +114 MISC63 + 0 + +115 MISC64 + 0 + +116 MISC65 + 0 + +117 MISC66 + 0 + +118 MISC67 + 0 + +119 MISC68 + 0 + +120 MISC69 + 0 + +121 MISC70 + SOLID + +122 MISC71 + 0 + +123 MISC72 + SOLID + +124 MISC73 + SOLID + +125 MISC74 + SOLID + +126 MISC75 + SOLID + +127 MISC76 + SOLID + +128 MISC77 + SOLID + +129 MISC78 + SOLID+SPAWNCEILING+NOGRAVITY + +130 MISC79 + SOLID+SPAWNCEILING+NOGRAVITY + +131 MISC80 + SOLID+SPAWNCEILING+NOGRAVITY + +132 MISC81 + SOLID+SPAWNCEILING+NOGRAVITY + +133 MISC82 + SOLID+SPAWNCEILING+NOGRAVITY + +134 MISC83 + SOLID+SPAWNCEILING+NOGRAVITY + +135 MISC84 + NOBLOCKMAP + +136 MISC85 + NOBLOCKMAP + +137 MISC86 + NOBLOCKMAP + +138 PUSH + NOBLOCKMAP + +139 PULL + NOBLOCKMAP + + + + +/// end of file BOOMDEH.TXT - last revised 8/28/98 diff --git a/prboom/TXTS/BOOM/BOOMSRC.TXT b/prboom/TXTS/BOOM/BOOMSRC.TXT new file mode 100644 index 000000000..bf95e552f --- /dev/null +++ b/prboom/TXTS/BOOM/BOOMSRC.TXT @@ -0,0 +1,325 @@ +---------------------------------------------------------------------- +TNT BOOM Phase I Source Release BOOMSRC.TXT 5/27/98 +---------------------------------------------------------------------- + +These are the TNT BOOM sources for the final Phase I release, May 27, +1998. They were based on the DOSDoom .20 release, which was in turn +based on the Linux DOOM sources released by John Carmack around Christmas +1997. + +If you use the sources in whole or part you are bound by the software +license agreement DOOMLIC.TXT. We would appreciate your giving +credit to John Carmack, B. Krenheimer, Chi Hoang, and TeamTNT. + +The files are in DOS format, with CRLF line terminators. The +formatting styles vary slightly from file to file depending on the +programmer who did most of the work on them, but are reasonably close +to each other with block braces directly over each other. There are +no tabs in the sources, so all should appear the same in most +editors. + +The sources compile under DJGPP v2, available at: + +http://www.delorie.com/ + + +---------------------------------------------------------------------- +The changes since DOSDoom .20 are described in the programmer logs: +---------------------------------------------------------------------- + +name identifier change log name +--------------------------------------------- +Lee Killough "killough" log_lee.txt +Jim Flynn "jff" log_jff.txt +Rand Phares "phares" log_rsp.txt +Ty Halderman "Ty" log_ty.txt +Stan Gula "SG" none (d_net and i_net changes) + +The changes are marked in the sources with a comment containing the +programmer's identifier and date of change. + + + +---------------------------------------------------------------------- +A brief description of the contents of the source files follows +---------------------------------------------------------------------- + + +Global and misc. stuff +----------------------------------------------------------------------- + +doomdata.h +doomdata.c - external data definitions (WAD file structure) + +doomdef.h +doomdef.c - internal data definitions (game structs) + +doomstat.h +doomstat.c - declarations for types and variables that store game state + +doomtype.h - misc declarations (boolean, char limits) + +dstrings.h +dstrings.c - quitting game messages + +d_french.h - printed strings for translation, french +d_englsh.h - printed strings for translation, english + +d_event.h - event handling declarations +d_player.h - declarations for player state and information +d_textur.h - declaration of pic_t structure for graphics column +d_think.h - declarations for thinkers and action routine types +d_ticcmd.h - declaration of structure for atomic game actions + +m_fixed.h - fixed point arithmetic functions +m_swap.h - byte order swapping (big/little endian) + +info.h +info.c - lookup tables for thing table, frame table, predefined lumps + +version.h +version.c - compile version handler, marks exe each build with date + +------------------------------------------------------------------------ +DOOM game loop and top level stuff +------------------------------------------------------------------------ + +g_game.h +g_game.c - Game loop functions, event handling, demos savegame + handling, etc. + +d_main.h +d_main.c - event handling, D_DoomMain() and other functions + +d_net.h +d_net.c - high level networking protocol code + +d_items.h +d_items.c - weapon animation information + +d_deh.h +d_deh.c - DEH file parser and implementation + + +------------------------------------------------------------------ +I Interfaces, system specifics +------------------------------------------------------------------ + +i_main.c - main() program entry, calls D_DoomMain(). + +i_net.h +i_net.c - system specific net driver + +i_sound.h +i_sound.c - system specific sound/music driver + +i_system.h +i_system.c - system specific routines, system specific driver install + +i_video.h +i_video.c - system specific joystick, keyboard, video routines + +------------------------------------------------------------------ +AM AutoMap +------------------------------------------------------------------ + +am_map.h +am_map.c - automap code + +------------------------------------------------------------------ +HU Heads Up +------------------------------------------------------------------ + +hu_lib.h +hu_lib.c - heads-up text and input code + +hu_stuff.h +hu_stuff.c - Heads-up displays + +------------------------------------------------------------------- +M Menu, Miscellaneous +------------------------------------------------------------------- + +m_menu.c - DOOM options code, game control, setup code + +m_misc.c - defaults file handling, screen shots, file I/O + +m_argv.h +m_argv.c - command line argument parsing + +m_bbox.h +m_bbox.c - bounding box routines + +m_cheat.h +m_cheat.c - cheat code handler + +m_random.h +m_random.c - random number generators + +------------------------------------------------------------------- +P Play, Specials +------------------------------------------------------------------- + +p_spec.h - declarations for specials + +p_spec.c - texture animation, specials, lighting, doors, plats, etc +p_switch.c - button switches and animation +p_doors.c - door handlers +p_plats.c - platform raising/lowering handlers +p_ceilng.c - ceiling movers and crushers +p_floor.c - floor movers, stairs, and donuts +p_lights.c - dynamic (e.g. flickering) lighting +p_genlin.c - generalized linedef handling +p_telept.c - teleportation code + +p_enemy.h +p_enemy.c - enemy AI and animation + +p_inter.h +p_inter.c - player/object interaction + +p_map.h +p_map.c - movement objects, handling of collisions + +p_maputl.h +p_maputl.c - distance, position, utilities for movement, point/line queries + +p_mobj.h +p_mobj.c - mobile objects handling, spawn etc. + +p_user.h +p_user.c - player movement, bobbing + +p_sight.c - monster line-of-sight, REJECT + +p_pspr.h +p_pspr.c - player weapons -- sprites, ammo, preferences + +p_setup.h +p_setup.c - load map from WAD file, level setup + +p_saveg.h +p_saveg.c - savegame functions (archive/unarchive) + +p_tick.h +p_tick.c - thinker list handling, game tick updates + +------------------------------------------------------------------- +R Rendering +------------------------------------------------------------------- + +r_defs.h - shared declarations for rendering modules +r_state.h - internal state variables for renderer + +r_bsp.h +r_bsp.c - bsp traversal, seg clipping, #242 effect + +r_data.h +r_data.c - wall texture composition, lookup renderer resources by name + +r_draw.h +r_draw.c - access to framebuffer API, drawing functions + + +r_main.h +r_main.c - view frame setup, lighting setup, main renderer code + +r_plane.h +r_plane.c - floor/ceiling visplanes, sky + +r_segs.h +r_segs.c - wall texture drawing, marking openings + +r_sky.h +r_sky.c - drawing skies + +r_things.h +r_things.c - sprite and sprite frame/rotation handling, drawing + + +tables.h +tables.c - trigonometry lookup tables + +v_video.h +v_video.c - gamma correction lookup, patch drawing to rectangle, + color translation + +drawcol.s +drawspan.s +pproblit.s - optimized assembly routines for screen drawing/blitting + +------------------------------------------------------------------- +S Sound +------------------------------------------------------------------- + +s_sound.h +s_sound.c - system-independent sound and music handling + +sounds.h +sounds.c - sound and music lookup tables + +mmus2mid.h +mmus2mid.c - conversion of MUS lumps to MIDI for Allegro + +------------------------------------------------------------------- +ST STatus bar +------------------------------------------------------------------- + +st_lib.h +st_lib.c - status bar widget code + +st_stuff.c +st_stuff.h - status bar code + +------------------------------------------------------------------- +W Wad file I/O +------------------------------------------------------------------- + +w_wad.h +w_wad.c - wad and lump management + +------------------------------------------------------------------- +WI WIn / level end screens +------------------------------------------------------------------- + +wi_stuff.h +wi_stuff.c - intermission animation patchwork + +------------------------------------------------------------------- +Z Zone memory allocation +------------------------------------------------------------------- + +z_zone.h +z_zone.c - dynamic memory allocation and debugging system + +------------------------------------------------------------------- +F Final screen animation +------------------------------------------------------------------- + +f_finale.h +f_finale.c - DOOM mission end screens, end of game stuff + +f_wipe.h +f_wipe.c - screen wipe between intermission screens/demos etc. + +------------------------------------------------------------------- + Allegro library patches +------------------------------------------------------------------- + +emu8kmid.c - fix to AWE32 midi driver to avoid use of fp in interrupt + +keyboard.c - fixes to keyboard handler to make it more responsive, + and to mask interrupts whenever necessary + +emu8k.h - unchanged global files required by the above +allegro.h +internal.h +interndj.h + +------------------------------------------------------------------- + makefile +------------------------------------------------------------------- + +makefile - contains debug and release targets + +------------------------------------------------------------------- diff --git a/prboom/TXTS/BOOM/LOG_JFF.TXT b/prboom/TXTS/BOOM/LOG_JFF.TXT new file mode 100644 index 000000000..179891764 --- /dev/null +++ b/prboom/TXTS/BOOM/LOG_JFF.TXT @@ -0,0 +1,1469 @@ +10/12/98 + +Rand's seg adjust proved to be the better after measuring, so +my experiment was removed in favor of his code. + +Fixed a calculation in the blockmap that now allows zero guardband +around level, hence slightly smaller blockmaps. + +10/8/98 + +Replaced brute force internal blockmap calculation with one much +faster. Difference on a 64K blockmap is 5 sec vs 32 sec. + +Wrote a slightly different implementation of the seg adjustment +idea of Rand's that uses a bit more accurate arithmetic and +provably flattens all vertices to the line they came from. Rand's +code is more elegant, but I believe this is slightly better. + +9/23/98 + +Fixed a bug that didn't allow trailing backslashes in parameters for +the -save option. + +9/12/98 + +DETH can now be put in the path and work anywhere. The DETH.INI in +the local directory is still required - but can now load the pwads, +so typing DETH in a directory can open the wad developed there +automatically (along with any resource wads it requires). This makes +creating shortcuts to wad sessions far simpler - just set the working +directory on a shortcut to DETH.EXE, and set the mode to full screen. + +CMAPTOOL now generates a BMP consisting of an array of squares of +color not a spectrum of vertical lines, making editing the palette by +hand easier. It also supports +V and -V for only modifying the invuln +colormap or not modifying the invuln colormap. + +9/11/98 + +Thanks to Rand's analysis of the underwater fireball medusa problem +-- tracking it down to there being far more sprites active than there +should have been, was able to trace the problem to a mistaken +parameter to R_AddSprites in R_Subsector in R_BSP. The temporary +sector used to fake the heights underwater was being passed and +validcount was not working to stop the sprites from being added +once per subsector instead of once per sector. + +Fixed a bug in R_SEG's R_PointToDist that allowed division by zero if +the player was exactly on a vertex, and the node builder worked a +certain way, causing segviol on startup. Fixed the sole call to it to +avoid doing so when division by zero would result. + +9/8/98 + +Removed 1S wall escape. Was causing problems when the player was +moved by monster attacks and was not sufficient to solve line-line +teleporter problem. + +9/6/98 + +Added a logical console output routine that all console output is directed +thru. Each physical output is tagged with by a class identifer from: + +LO_INFO informational header - no new information present +LO_CONFIRM informational - but outputs information that confirms a setting +LO_WARN an error, but not too serious - execution continues +LO_ERROR an error, may be serious enough to abort - execution continues +LO_FATAL an error, BOOM will exit +LO_DEBUG used for outputs that are for debugging +LO_ALWAYS used to tag outputs that should always be shown, like build date + +Which outputs are allowed to pass to standard output, and which are +sent to the console when standard output is redirected is +controllable by two masks. These masks can be set by command line +switches -cout and -cerr, each followed by a string of letters from +ICWEFDA to indicate which classes pass to output and error console +resp. + +Added files LPRINTF.C and LPRINTF.H. Modified G_GAME.C, HU_STUFF.C, +AM_MAP.C, D_DEH.C, D_NET.C, I_SOUND.C, I_SYSTEM.C, M_MENU.C, +MMUS2MID.C, I_MAIN.C, S_SOUND.C, W_WAD.C, WI_STUFF.C, R_MAIN.C, +R_DATA.C, M_MISC.C, D_MAIN.C, MAKEFILE. + +Modified BOOM.TXT to change "No Limits" to "No Static Limits". + +8/28/98 + +Added right shift to "into/outof wall" calculation to avoid overflow +in FixedMul. This was causing 1S walls to be walkable thru on +occasion. Also added compatibility flag to change. All in P_MAP.C. + +8/14/98 + +Restricted escape from 1S walls to players until I can figure out +why it allows monsters to embed themselves in walls while walking around. + +Fixed IDCLEV to not accept 33 or 34 in DOOM2. Leads to crash if +allowed. Affected M_CHEAT.C + +Fixed "Raise to shortest texture linedefs". Now the regular linedef +triggers raise to actual texture height, not min(64,textureheight) +unless compatibility mode is set. Generalized linedefs always raise +to actual texture height now. Problem was caused by missing textures +being represented by texture 0, AASHITTY, which had height 64. +Affects P_SPEC.C and P_FLOOR.C. + +8/13/98 + +Fixed tendency of monsters to get stuck in doorways, flagged by +compatibility global. P_ENEMY.C affected. + +8/9/98 + +Imported ZDoom's fix to the openings limit removal to R_SEGS.C + +8/8/98 + +Changed behavior of being stuck in a 1S wall so that motion out of +the wall is still allowed. This "fixes" the line-line teleport problem +and the DM start embedding problem. P_MAP.C affected. + +Added the Flicker special to P_SAVEG, where it was left out when +the special was added to DOOM II. P_SAVEG.C and P_SPEC.H affected. + +Added better initialization of scrolling message display to +HU_STUFF.C + +8/7/98 + +Fixed update of HUD so it occurs on every refresh to avoid problems +caused by lag on slower systems. HU_STUFF.C affected + +7/14/98 + +Corrected padding size in G_GAME.C to allow for 128 bytes in v200 +demos and 64 bytes in v201 and later demos. + +Fixed EV_BuildStairs routine in p_floor.c to use the buggy code order +in compatibility mode, and the new order otherwise. This fixes some +problems with existing wads that depended on the old buggy order. + +Fixed the comment for MIDItoMidi in MMUS2MID.C + +6/19/98 + +Fixed rising stairs so that the step height does not increase twice +as much when redirected by a moving step. + +6/3/98 + +Fixed misspelling in chat string variable in M_MISC.C. + +6/1/98 + +Fixed bug in switches caused by inadvertant deletion of sidedness +check, in P_SWITCH.C + +5/24/98 + +Added documentation on predefined lumps to BOOMREF.TXT + +5/23/98 + +Fixed a bug in the numeric model texture changers where the loop +variable was being modified in the loop thru adjacent sectors. This +could cause crashes and missed changes. + +5/20/98 + +Removed conditional from net testing code to make sources completely +done outside bugs discovered after this. D_NET.C, D_NET.H, M_MISC.C. + +5/17/98 + +Fixed a bug in lights to max neighbor that would cause it to set all +tagged sectors to the maximum lighting near the first sector +searched. + +5/16/98 + +Added temporary config variable, "oldnetcode" to M_MISC.C to select +between Lee and Stan's version of net code so both can be tested at +once. Removed LEESFIXES from makefile. Formatted D_NET.C and I_NET.C. + +Fixed "may change without notice" paragraph about generalized +linedefs in BOOMREF.TXT. + +5/12/98 + +Finished source formatting/documenting for: + +p_floor.c am_map.h hu_lib.c +p_switch.c am_map.c hu_lib.h +p_genlin.c hu_stuff.c +p_plats.c mmus2mid.c hu_stuff.h +p_ceilng.c mmus2mid.h st_lib.c +p_doors.c st_lib.h +p_lights.c + +Moved wind/thing controller from 4001/2 to 5001/2 and made +corresponding change to documentation and utilties. + +Added new ENDBOOM with new URL, and made change in text files. + +Fixed a bug of uninitialized delay in generalized close/delay/open +doors affecting P_DOORS.C. + +Fixed a possible crash due to dereferencing a sector backside that +didn't exist in stair building in P_FLOOR.C. + +Fixed an error in donuts allowing an already active pool to have +another thinker started on it in P_FLOOR.C. + +Added Rich Nagel's DIGMID instructions to SNDDRVR.TXT + +5/3/98 + +Formatted P_SPEC.C and P_SPEC.H. Fixed a bug in getNextSector that +returned the same sector as passed when a line referenced to that +sector on both sides existed. + +4/29/98 + +Added new ENDBOOM lump by Ty to INFO.C + +4/28/98 + +Fixed bug in message review display that caused overwritten characters +and incomplete erasure of lines when screen not fullsize. + +Files affected: HU_LIB.H HU_LIB.C HU_STUFF.C + +4/26/98 + +Fixed bug in status bar display when New Game started after a DM demo +in which spy mode had been used. G_GAME.C affected. + +Re-re-removed IDK cheat from ST_STUFF.C as it was causing a compiler +error and no justification had been made for it. + +4/25/98 + +Fixed bug Ty spotted in WI_STUFF.C that was preventing animated +backgrounds in non-DOOM II versions. + +4/24/98 + +Added DOOM support to MUSPUT.EXE. + +Fixed a bug in secret exits for non-commercial games. The wolf level +check was incorrectly being applied to them, and was preventing their +use. + +Files affected G_GAME.C + +Fix a bug in the sprite loading that caused the presence of an A0 +lump to clear the rotate flag on the sprite definition, even when +it wasn't used because the rotations were already defined. + +Files affected R_THINGS.C + +Make the text color translation tables predefined lumps to support palette +changes in TCs better. + +Files affected: V_VIDEO.C V_VIDEO.H INFO.C D_MAIN.C + +4/23/98 + +Add exit color line to automap, default not shown. Affects M_MENU.C, +M_MISC.C, AM_MAP.C + +Add endian macros, SHORT, LONG to BMP screenshot routine in M_MISC.C + +4/22/98 + +Fixed a lockout problem in HU_STUFF.C, when the Setup changed the +number of messages to 1 when the message review was displayed. This +would prevent any messages from being displayed. Now if hud_msg_lines +is 1 or less, message_list is cleared to false, preventing this. + +4/21/98 + +Added "-dumplumps file" switch to BOOM command line that writes the +predefined lumps out as a wad, where authors can extract them to +lumps for modification or understanding them enough to replace them + +File affected: INFO.H INFO.C D_MAIN.C BOOM.TXT + +4/20/98 + +BOOM.TXT updated for -iwad parameter changes. + +Fixed printout of IWAD found: with blank string when IWAD not found. + +Files affected: D_MAIN.C + +Added two digit printout to support v2.01 rather than v2.1 when +version was 201 in VERSION.H + +Files affected: D_MAIN.C + +Upped BOOM version to 201 in VERSION.H + +4/19/98 + +Rewrote the IWAD search to be more flexible and to eliminate some +bugs still present in it. The -iwad parm on the command line can now +be one of three things. The full pathname of the IWAD (.WAD optional), the +directory in which a standard IWAD is to be found, or the filename of a +standard or custom IWAD that is to be loaded (.WAD optional). The +environment variables DOOMWADDIR and HOME can also now specify a full +IWAD pathname if desired. If a filename for a custom or standard IWAD +is specified thru -iwad, then it replaces any filename in DOOMWADDIR +or HOME during the search. Examples: + +BOOM +Searches current dir, exe dir, DOOMWADDIR dir or path, HOME dir or path +for a standard iwad or one fully specified in DOOMWADDIR or HOME + +BOOM -iwad doom +Tries to locate doom.wad in current dir, exe dir, DOOMWADDIR dir or HOME dir + +BOOM -iwad c:\doom2 +Looks for any standard iwad in c:\doom2, reports not found if none + +BOOM -iwad c:\doom_se\doom +Reports not found unless c:\doom_se\doom.wad exists + +Once the IWAD file is located it is checked for an IWAD tag in the +header, and the retail, registered, shareware, or commercial nature +of the IWAD is determined from which levels are present. All levels +corresponding to the mode must be present for detection, though the +search allows Map31 and Map32 to be missing in the commercial version +for the german edition. The french language version is detected from +the IWAD filename doom2f.wad. + +4/16/98 + +Updated BOOM.TXT, BOOMDEH.TXT + +Updated DOOM17.DAT with new teleporters + +Added release ENDBOOM to INFO.C + +Fixed leak in IdentifyVersion in D_MAIN.C + +Removed call to AM_clearMarks in AM_levelInit, and put it in +G_InitNew, so that it is not cleared on map_key press whenever the +level has changed, even if the save loaded contains marks. + +4/14/98 + +Added 8 teleport types to P_SPEC.H and P_SPEC.C. Monster only silent +variants and line-line reversing teleports. The reversing teleports +have problems, but the regular ones share them. + +4/12/98 + +Cleared markpointnum in G_DoWorldDone to avoid carrying over marks +from one level to the next. + +4/11/98 + +Fixed IDMUS00 to not crash + +4/10/98 + +Fixed string/int check in M_MISC.C by adding a field to the default +structure to specify this, rather than relying on the default value's +size to determine which. + +4/7/98 + +Skipped MF_NOBLOCKMAP things in P_CheckSector, as the original +routine didn't see these - they weren't in the blocklinks lists. This +brings the bullet puffs back in Map06. + +Fixed elevators so if floor or ceiling is blocked, other doesn't move + +4/6/98 + +Removed conditional LEESFIXES from P_SPEC.C and P_MAP.C + +Fixed background color of automap to default to 247, not 0 + +4/5/98 + +Fixed failure of crushers to change switch on second activation in +P_CEILNG.C P_GENLIN.C and P_SPEC.H + +Added STCFN096(`) as predefined lump in INFO.C , enabled it in HU_STUFF.C + +Changed P_CheckSector to always call P_ChangeSector until segviol +problem understood + +4/3/98 + +Switched automap back to disabling features on color 0, not -1 in +AM_MAP.C + +Added generalized keyed doors to automap display + +Fixed lower ranges for automap in M_MISC.C + +Removed upper limits on mouse sensitivities in M_MISC.C and clamped +display of thermometer in M_MENU.C + +Fixed breaking of list in P_CheckSector in P_MAP.C by keeping track +of two nodes after current instead of just one. + +4/2/98 + +Made corrections to BOOM.TXT + +Made additions and corrections to LINEDEFS.TXT, renamed to +BOOMREF.TXT + +4/1/98 + +Added pre-release ENDOOM to INFO.C, used it in I_SYSTEM.C + +Added last few things to BOOM.TXT + +Fixed Seg Viol in P_CheckSector caused by passing NULL thing pointer +to PIT_ChangeSector. Not sure why this pointer is NULL, but I'm not +passing any more that are. P_MAP.C affected. + +Fixed problem with keyed doors giving away their type when shot, even +when they weren't keyed doors. Fixed corresponding problem for +walkove doors. P_SPEC.C affected. + +3/31/98 + +Fixed problem with stair builders, normal and generalized, namely +they never set the type field in the thinker and could fall into the +texture change cases of T_MoveFloor. P_FLOOR.C P_GENLIN.C P_SPEC.H +affected. + +3/30/98 + +Added option to make screenshots in .BMP format to account for +inability of MSPaint to display .PCX correctly. New config variable +screenshot_pcx (1 by default) controls which. M_MISC.C affected. + +Made some revisions to LINEDEFS.TXT and BOOM.TXT. Added BOOM.TXT to +CVS system. + +Added support for "not-deathmatch" and "not-coop" thing flags in +P_MOBJ.C. + +3/29/98 + +Fixed use of 2S flag rather than two-sidedness in EV_DoDonut in P_SPEC.C + +Fixed glitch in new crusher check routine in P_MAP.C that was using +the next pointer from a node after its removal from touching_thinglist. + +Fixed lack of sound and switch change on second activation of instant +toggle linedefs in P_PLATS.C + +3/27/98 + +Fixed skies in Ultimate DOOM, so they wouldn't all be SKY1. The Linux +port had confused pack_tnt and pack_plut with gamemodes, which were +matching the gamemode retail. They also forgot to account for DOOM +and Ultimate DOOM completely in G_DoLoadLevel. Also removed the +redundant sky setting code in G_InitNew. + +Files affected G_GAME.C + +3/26/98 + +Changed escape character in hud messages strings for color changes +from \ to actual escape \x1b, in order not to mess \ in path strings +printed out with messages. + +Files affected HU_LIB.C HU_STUFF.C + +3/25/98 + +Fixed problem that duplicated IWAD search in . in D_MAIN.C + +Fixed bad value for defaultskill default in M_MISC.C + +3/24/98 + +Fixed "looking for iwad files in..." message to read "looking for +IWAD in...". + +Added config file param default_skill 1-5 for setting your skill +preference once and for all. If -skill is used it overrides the +setting temporarily. If you set skill with the menu, default_skill +remembers the setting. + +Files affected: D_MAIN.C G_GAME.C M_MENU.C M_MISC.C DOOMDEF.H + +Added parms -iwad and -save to the command line. -iwad is tried +before all other choices if present, otherwise the order remains the +same. The -save parm is check for existence and being a dir. If +either fails, or -save is not present the iwad directory is used. + +Files affected D_MAIN.C + +Moved the switchlist and animation table into predefined lumps, +SWITCHES, and ANIMATED that can be replaced by wad authors. Created a +utility SWANTBLS.EXE that will turn a text file into two .LMP files +suitable for insertion in a PWAD. Created the default text file +source DEFSWANI.DAT. Text file format: + +# +# This file is input for SWANTBLS.EXE, it specifies the switchnames +# and animated textures and flats usable with BOOM. The output of +# SWANTBLS is two lumps, SWITCHES.LMP and ANIMATED.LMP that should +# be inserted in the PWAD as lumps. +# +#switches usable with each IWAD, 1=SW, 2=registered DOOM, 3=DOOM2 +[SWITCHES] +#epi texture1 texture2 +1 SW1BRCOM SW2BRCOM +1 SW1BRN1 SW2BRN1 +1 SW1BRN2 SW2BRN2 +1 SW1BRNGN SW2BRNGN +1 SW1BROWN SW2BROWN +1 SW1COMM SW2COMM +... + +#animated flats, spd is number of frames between changes +[FLATS] +#spd last first +8 NUKAGE3 NUKAGE1 +8 FWATER4 FWATER1 +8 SWATER4 SWATER1 +8 LAVA4 LAVA1 +... + +#animated textures, spd is number of frames between changes +[TEXTURES] +#spd last first +8 BLODGR4 BLODGR1 +8 SLADRIP3 SLADRIP1 + +Files affected: P_SPEC.H P_SPEC.C P_SWITCH.C + + +3/22/98 + +Added new linedef flag, ML_PASSUSE, bit 9, value 512 that enables a +push action to pass thru the line, allowing several linedef actions to take +place from one push. + +Fixed crash in DETH on inserting vertex or thing before anything +else. + +Files affected: DOOMDATA.H P_MAP.C + +3/21/98 + +Made cheats individually disabled for netgame/demorecord so that +IDMUS can still be used in those conditions. + +Files affected: ST_STUFF.C + + +3/20/98 + +Made ceilings more orthogonal by using shortest UPPER texture around +in the move by shortest texture type. + +Files affected: P_SPEC.H P_SPEC.C P_GENLIN.C + + +3/19/98 + +Changed DETH to reflect combination of sludge and ice, removed +wind thing flags (too early - sorry!) fixed crash clicking outside a +menu, increased limits on rectangle size and curved stair angle. + +Used new mobj list structures to improve crusher code + +Changed p_spec.h to reflect combination of ice and sludge effects. + +Fixed indirection error in d_deh.c causing exception in MS-DOS. + +3/18/98 + +Fixed bug in idmusnum handling. Restoral from idmusnum=-1 as a byte in +savegame was incorrectly converted to 255 as an integer, causing an abort +when S_ChangeMusic tried to load it (it checks for -1). + +Fixed hang in I_Init and incorrect key shift/LED handling. Was a bug +in Allegro, a failure to disable interrupts around a low level +call to a keyboard io routine - causing 2E6 retries, hence the hang, +and the lack of function when it didn't succeed. Faster systems (like +Lee's) would not see this or be intermittent due to less time spent +in interrupts. + +Files affected: + +G_GAME.C I_SYSTEM.C in Allegro: KEYBOARD.C + + +3/17/98 + +Added FRG line in place of KEY line in HUD when deathmatch true. +Display shows the top four frag counts with highest at left, each +number in the player's color. + +Fixed failure to restore IDMUS selected music. MUSIC reverts to +original on end of level or IDCLEV, otherwise IDMUS selection remains +in force. + +Fixed crash from space after IDMUS cheat. + +Files affected: ST_STUFF.C HU_STUFF.C G_GAME.C D_MAIN.C S_SOUND.C + +3/15/98 + +Added 2 more save/load slots for 8 total. + +Added pure texture change type, trigger model, on 215-218 types. +Added pure texture change type, numeric model, on 78,239-241 types. + +Files affected: P_SPEC.H P_SPEC.C P_SWITCH.C P_FLOOR.C COMMON.CFG +DOOM17.DAT DOOM19.DAT P_GENLIN.C M_MENU.C + +3/14/98 + +Made the 1 and 8 in the HUD weapons display show green when in +possession of berserk power-up. + +Added oldspecial type to floormove_t and ceilng_t so that texture +changes copy both the old and new special fields, thereby avoiding +bugs in the automap display and possibly other places. + +Added generalized sector types. Limited lighting types to looking at +lower 5 bits, added damage and secret detection from generalized +bits. Fixed automap to recognize new secret bits. Created masks for +new damage, secret, ice, sludge and wind bits. + +sector type bit assignments: +Bit 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 + wnd slg ice sec damage lighting + +Added instant toggle floor linedef type between floor and ceiling height to +support scrolling changers for Lee. Also can be used for building +binary combination locks. + +Files affected: P_SPEC.C P_SPEC.H P_SWITCH.C P_PLATS.C COMMON.CFG +DOOM17.DAT DOOM19.DAT P_LIGHTS.C AM_MAP.C P_CEILNG.C HU_STUFF.C + +3/13/98 + +Found and fixed problem with delta-time accumulation in MMUS2MID.C, +probable cause of "scrambled tracks" reports. + +Did more numeric overflow protection concerning shortest texture +surrounding in the case of no surrounding textures. + +Files affected: P_SPEC.C P_FLOOR.C P_GENLIN.C + + +3/12/98 + +Provisionally removed linedef #s 211-218 and 223-226 as no longer +being needed to support floor height based scrolling. These are +intended to allow more room for vector based effects within DCKs +range of 0-255 for linedef types. + +Changed MININT and MAXINT limits in P_SPEC.C in highest and lowest +surrounding floor/ceiling searches to 32000*FRACUNIT or +-32000*FRACUNIT to avoid wrapping heights around during floor/ceiling +motion. + +Files affected: P_SPEC.C P_SWITCH.C P_GENLIN.C P_FLOOR.C COMMON.CFG +DOOM17.DAT DOOM19.DAT + +3/9/98 + +Lights in tagged sector to max neighbor on fully open and to min +neighbor on fully closed extended to generalized manual doors. + +Added map_secret_after option to hide secrets on the automap until +after they are found. + +Fixed glitch in cycling HUD where the medium display would flash in +lower left corner while switching to scattered display. + +Files affected HU_STUFF.C + +3/8/98 + +Fixed length of local string variables for ammo etc in HUD drawer that were +no longer adequate post-DEH. + +Allowed -1 for disabling in mouse bindings and automap colors in +config file. + +Wrote program to output config file keycode, when key is struck. + +Added generalized substitution syntax to CLED. Supports changing old +lindef types to new and any other level object fields as well. + +Modified Allegro to not use floating point in AWE32 midi driver +interrupt. Other option is to remove all floating point from our +code, now and in future. + +Fixed bug in HUD that caused removed keys to remain in display. + +Revised DETH to 4.08, now includes thing flags for WIND type, plus +not-single, not-DM, and not-coop flags (not implemented in engine +yet). + +Files affected HU_STUFF.C, M_MENU.C, M_MISC.C + +3/7/98 + +Switched HUD keys display to use status bar graphics for keys. + +Allowed room for 2 more digits in automap coordinate display. + +File affected: HU_STUFF.C + +3/6/98 + +Renumbered linedefs 300,301 to 248,249 and linedefs 310-315 to +250-255 so that DCK can use them and save them. + +Fixed erroneous range for gamma correction. + +Files affected P_SPEC.C, M_MISC.C + + +3/5/98 + +Fixed inability of monsters to use new teleporters + +Affected P_SPEC.C, P_SWITCH.C + +Added some more text to SNDDRVR.TXT to try to clarify what needs to +be done. + +Affected SNDDRVR.TXT + +Fixed some problems in initialization of mus to midi converter, no +change in behavior detected here though. + +Affected MMUS2MID.C + +3/4/98 + +1) Checking range of boom.cfg variables, and OPTIONALLY outputting a +help string for each. The help strings can be disabled thru the new +variable config_help. When you add a new variable you can assign its +minvalue and maxvalue fields in the structure, right after the +defaultvalue, and place a help string after those. The symbol UL as a +limit will allow the range not to be checked for either minvalue or +maxvalue or both. + +Affected: m_misc.c + +2) Fixing a bug in HUD that made it not react to F5 in full screen + +Affected: m_menu.c + +3) Redo of coordinate display in automap to stack X,Y,Z over each +other in upper right of screen, using old font. + +Affected: hu_stuff.c + +4) Addition of TRAN50 and TRAN66 lumps to info.c, they are not +called, just implemented as predefined lumps. + +Affected: info.c + +5) Fixing the stairs bug Jou pointed out, multiple tagged sectors +wouldn't always rise do to corruption of loop variable thru tagged +sectors. + +Affected: p_floor.c, p_genlin.c + +6) After reading sound docs in Allegro again last night have put code +in I_SOUND.C to first detect each device, and then reserving voices +for it according to the number of voices returned by each call, THEN +calling install sound. Music is slightly improved on my system, +hoping this will affect others similarly, and get rid of the +install_sound errors which Allegro says can be caused by calling +install_sound when the default number of voices is greater than the +card can provide. The sound volume is somewhat down from before, but +I still want to try this experiment. The variable detect_voices in +BOOM.CFG allows you to return to old setup by setting it to 0. 1 is +default. + +Affected: i_sound.c + +7) Made some experimental changes to HUD. Distributed the display +over the screen as part of the F5 cycle, removed the readyweapon +brackets, added weapon 1, and reduced the update lag. + +Affected: m_menu.c m_misc.c hu_stuff.c + +8) detect_midi_device and detect_digi_device turn out not to work +with the autodetect code. Fixed the install of sound so that the +detect_voices only happens in the case that specific values are input +for music_card and sound_card. + +Affected: i_sound.c + + +3/3/98 + +Added ENDBETA as predefined lump in INFO.C and displayed it place of +ENDOOM in I_SYSTEM.C + +3/2/98 + +Added Rand's static help screen as a predefined lump in INFO.C and +loaded and displayed it in M_MENU.C. + +Fixed a misplacement of the zero-tag trigger checks for generalized +linedefs in P_SPEC.C and P_SWITCH.C. + +Fixed a failure to initialize the sector used to search for a model +for numeric model changes in P_SPEC.C + +Removed #ifdef LEESFIXES in ST_STUFF.C, all changes were good. + +Added Lee's new scrolling types to COMMON.CFG + + +2/27/98 + +Fixed a bug in generalized stair builders. They would retrigger +before completing the build causing crazy stair configurations to +arise. Added link fields to next and prev step in sector_t, and a +lock flag, stairlock. During build the links between stairs are set +and stairlock is set to -2 for each step. As each thinker completes +its stairlock is set to -1 and the chain of steps is checked for any +still at -2. If none are, all locks are cleared to 0. The stair builder +will not start again until the initial step has a stairlock of 0. +Indices rather than pointers were used in the link fields so the +savegame need not be modified. p_setup.c initializes all sector links +to -1, and all stairlocks to 0 or no next or previous step, unlocked, +though this is not relied upon by the stair building code. This +affects both P_GENLIN.C and P_FLOOR.C + +Fixed a bug in the original stair builders, namely the crush field +was never initialized. Set it to false for build8 stairs and true for +build16 stairs, as that is what DMSPEC claims. P_FLOOR.C affected. + +Fixed COMMON.CFG again to remove the 303 and 302 types I had gotten +carried away and added. There are no switch types for silent line +teleporters. + +Added STTMINUS as a predefined lump in INFO.C to allow v1.2 to work +with BOOM if anyone ever fixes demo format incompatibility. + +Prevented non-manual 0 tag triggers of floor moving or ceiling moving variety +from operating in !demo_compatibility. manual types, lighting, exits, +non-line teleporters, and scrolling specials may have 0 tag. Affects +P_SPEC.H, P_SPEC.C and P_SWITCH.C + +Added range checks and adjustments to M_MISC.C for variables I added where +out-of-range conditions could cause an exception or serious +misoperation. + +Added CR_LIMIT at end of color range enum in V_VIDEO.H for range +checks above. + + +2/26/98 + +Added previous messages display to HUD. If not in chat mode, +key_enter causes the last hud_msg_lines to be displayed in screen +upper left, and to scroll as new messages come in, latest at top. The +color of text is determined by hudcolor_list. A solid window +background can be enabled with hud_list_bgon. When in message list +display mode, chat entry is locked out. Files affected were HU_LIB.C, +HU_LIB.H, HU_STUFF.C. Background graphics added to INFO.C. Options +added to M_MISC.C. + +Also fixed the comment about keys[NUMCARDS+3] in ST_STUFF.C and +updated common.cfg for Lee's silent teleporter. + + +2/24/98 + +Added double keys to status bar display. You can now see that you +possess both card and skull of a given color. + + +2/23/98 + +HUD functions fixed according to consensus, mostly, anyway they +compile. Fixed a merge error in p_plats.c where some changes I made +got wiped. Changed default of sts_pct_always_gray to 1. + +Added P_ActiveSector to P_SPEC.C used to test if a sector is +available for a special action. If demo_compatibility is true, +returns true if ANY special is active, else returns true only if the +same type of special inquired about is active. This prevents demos +losing sync thru inadvertantly starting multiple specials on the same +sector. This finishes the multiple thinker support for elevators. + +Tuned the HUD font some. Made the drop shadow black for all +characters. Reduced the ragged diagonals in some characters. +Lightened the blue range for better visibility. + + +2/22/98 + +Moved HUD control to F5 (default key, set key_detail in DEFAULT.CFG). +hud_active in DEFAULT.CFG now has three states 0,1,2. 0 disables HUD +display, 1 shows a small HUD (no keys or kills/secrets status) and 2 +shows the full HUD. Pressing F5 cycles between these states. If the +hud_active state becomes 1 from 0, the screen is expanded to show the +small HUD, expanded to full HUD on next F5, and then restored to previous +screensize on next F5, allowing those using small screensize to check +the HUD without readjusting screensize. The secrets line can still be +disabled with hud_nosecrets=1, for those that prefer not to see this +information. Making screensize max with = will show the current HUD state, +none, small, or full. + +Added z coordinate to automap coordinate display. + +Removed active ceiling limits and changed savegame accordingly. + +Fixed two bugs in the general crusher - a failure to take ceilings in +stasis out of stasis in EV_DoGenCrusher in P_GENLIN.C, and failure to reverse +crusher direction on bottom of stroke in P_CEILNG.C, caused by +another bugfix last week. + +Replaced specialdata field in sector_t with floordata, ceilingdata, +lightingdata to allow independent thinkers to operate simultaneously. +Fixed savegame correspondingly. There is an issue with compatibility +flagging here, since savegames under one mode cannot be restored +under another. Left unflagged for now, CRUSHER.LMP remains in sync. + +Weakened compatibility flags on detection of floor or ceiling moving +thru the other to demo_compatibility. + +Added elevator linedef specials, for up to next floor, down to next +floor, and move to floor in front of activating switch. Added these +to common.cfg as well. + + + +2/21/98 + +Fixed difference between initialized HUD line titles and caculated +HUD string titles. Removed colons from display, shrunk spacing. + +2/20/98 + +Removed a temporary fix from M_MISC.C that was obviated by the bugfix +of 2/18. Fixed a bug in the divide down of string creation for HUD in +HU_STUFF.C. Added a new lighter font for HUD to HU_STUFF.C and +INFO.C. This font only has :/[], upper alphas, and numbers, +currently, you'll get the char from the older font otherwise. + +2/19/98 + +Optimized V_DrawPatchTranslated to avoid so much of a performance hit +from HUD. Added several variables to make it more configurable. +hud_active can now be set to -1 to avoid hud completely. +hud_nosecrets can be set non-zero to suppress display of the top line +showing kills/items/secretes. sts_always_red may be set non-zero to +suppress use of color in status numerals. + + +2/18/98 + +Fixed bug in HU_Erase that was causing the status bar to be +overwritten when the HUD was erased. Also added hud_active +to DEFAULT.CFG in M_MISC.C so hud is displayed on start of +level if it was in previous level or game. Finally added a +condition to hud activation in M_MENU.C so that the code +wouldn't screw up on + key with reduced screen. + +2/15-17/98 + +Fixed bug in automap where secret sectors were not shown as secret +after you entered them once. The engine clears the sector type after +you enter a secret sector. Added oldspecial field to sector_t in +R_DEFS.H and initialized it from the special field in P_SETUP.C, and +used this field in the automap in AM_MAP.C to fix this. + +Added a new routine, V_DrawPatchTranslated, in V_VIDEO.C to support +color translation of patches and graphics, as required in the HUD to +write non-red text. Added some range tables as well to define color +ranges usable as source or destination of the translation. Added +declarations for the new routine and ranges to V_VIDEO.H. The ranges +avaiable to translation are: + +CR_BRICK, //0 +CR_TAN, //1 +CR_GRAY, //2 +CR_GREEN, //3 +CR_BROWN, //4 +CR_GOLD, //5 +CR_RED, //6 +CR_BLUE, //7 +CR_ORANGE, //8 +CR_YELLOW, //9 + +These may be used as index to colrngs to produce a point to a +colrng_t type, or the same number can be used in a text string output +by the HUD or messager to change its color, syntax "\\nText" writes +Text in color range n instead of red. + +Added ammo_red,ammo_yellow, armor_red, armor_yellow, armor_green, +health_red, health_yellow, health_green variables to DEFAULT.CFG in +M_MISC.C to set points at which status and hud displays change +color. Also added hudcolor_titl for color of automap title, and +hudcolor_xyco for color of coordinate display. Added hudcolor_mesg +and hudcolor_chat to set the colors of message and chat text. + +Changed ST_STUFF.C ST_LIB.C and ST_LIB.H so that the large numerals on +the status bar would change color according to the range variables +added to M_MISC.C above. + +Added support to HU_*.C for a true heads-up display that shows six +lines of information. The top line shows kills/total, items/total, +and secrets/total. The next line shows which of the six keys you +have. The third line displays which weapons you have, the current +weapon in brackets and the ammo available to each roughly indicated +by the number's color as determined by ammo_red and ammo_yellow. If a +weapon doesn't use ammo it displays in gray. The chainsaw displays as +8 and the super shotgun as 9. The fourth line shows ready weapon ammo +as a bar graph and ammo/fullammo. The color of the line indicates how +close to running out you are as usual. The fifth line shows health +with bargraph and number, and its color also indicates the health +status according to the default variables. The bargraph saturates at +100 health to provide more resolution of low health amounts, but the +number does not. The sixth line is like the fifth except the variable +displayed is current armor. Files affected HU_LIB.C, HU_LIB.H, +HU_STUFF.C, HU_STUFF.H. + +To support the HUD bargraphs, five new characters were created and +defined as predefined lumps in INFO.C. Each is a set of vertical +lines from 4 of them to 0 for bargraph construction. + +Finally, added code to M_MENU.C to turn the HUD off and on when the +zoom keys (+/-) are used when screen is at maximum. DOOMSTAT.H was +also changed to make hud_active global. + +Work still remains to make the message window variable line scrolling +and to make the hud repositionable. + + +2/14/98 + +Fixed bug in automap. Erroneously mistook FB for a color when it was +an index into the frame buffers. Files affected: AM_MAP.C M_MISC.C. + +2/12/98 + +Fixed an inadvertent change to crusher ceilings that was causing loss +of demo sync in CRUSHER.LMP. P_CEILNG.C affected. + +Fixed all W1 and G1 regular linedefs to check the result of the line +function before clearing the special. Added int returns to the line +functions that didn't have them. + +Fixed some cosmetic errors in the general linedefs. + +2/09/98 + +Made generalized stairs retrigger in opposite direction each time, +fixed failure to initialize floor->crush there. + +2/08/98 + +Added native midi lump support to BOOM. I_SOUND.C tries to convert +from midi first, and if the correct header is not found, tries mus. + +Files affected : MMUS2MID.H, MMUS2MID.C, and I_SOUND.C + +2/04-07/98 + +Added bit field linedef types that allow any combinattion of parameters for +each type. There are types for Floors, Ceilings, Doors, Locked Doors, Lifts, +Stairs, and Crushers. The allocation of linedef type field numbers is +according to the following table: + +Type Start Length (Dec) +----------------------------------------------------------------- +Floors 0x6000 0x2000 (8192) +Ceilings 0x4000 0x2000 (8192) +Doors 0x3c00 0x0400 (1024) +Locked Doors 0x3800 0x0400 (1024) +Lifts 0x3400 0x0400 (1024) +Stairs 0x3000 0x0400 (1024) +Crushers 0x2F80 0x0080 (128) +----------------------------------------------------------------- +Totals: 0x2f80-0x7fff 0x5080 (20568) + +The following define the placement and meaning of the bit fields within +each linedef category. Fields in the description are listed in increasing +numeric order. + +------------------------------------------------------------------ +generalized floors (8192 types) + +field description NBits Mask Shift +------------------------------------------------------------------ + +trigger W1/WR/S1/SR/G1/GR/D1/DR 3 0x0007 0 +speed slow/normal/fast/turbo 2 0x0018 3 +model trig/numeric -or- nomonst/monst 1 0x0020 5 +direct down/up 1 0x0040 6 +target HnF/LnF/NnF/LnC/C/sT/24/32 3 0x0380 7 +change nochg/zero/txtonly/type 2 0x0c00 10 +crush no/yes 1 0x1000 12 + +Notes: + +1) When change is nochg, model is 1 when monsters can activate trigger + otherwise monsters cannot activate it. +2) The change fields mean the following: + nochg - means no texture change or type change + zero - means sector type is zeroed, texture copied from model + txtonly - means sector type unchanged, texture copied from model + type - means sector type and floor texture are copied from model +3) down/up specifies the "normal" direction for moving. If the + target specifies motion in the opposite direction, motion is instant. + Otherwise it occurs at speed specified by speed field. +4) Speed is 1/2/4/8 units per tic +5) If change is nonzero then model determines which sector is copied. + If model is 0 its the sector on the first side of the trigger. + if model is 1 (numeric) then the model sector is the sector at + destination height on the opposite side of the lowest numbered + two sided linedef around the tagged sector. If it doesn't exist + no change occurs. + +------------------------------------------------------------------ +generalized ceilings (8192 types) + +field description NBits Mask Shift +------------------------------------------------------------------ + +trigger W1/WR/S1/SR/G1/GR/D1/DR 3 0x0007 0 +speed slow/normal/fast/turbo 2 0x0018 3 +model trig/numeric -or- nomonst/monst 1 0x0020 5 +direct down/up 1 0x0040 6 +target HnC/LnC/NnC/HnF/F/sT/24/32 3 0x0380 7 +change nochg/zero/txtonly/type 2 0x0c00 10 +crush no/yes 1 0x1000 12 + +Notes: + +1) When change is nochg, model is 1 when monsters can activate trigger + otherwise monsters cannot activate it. +2) The change fields mean the following: + nochg - means no texture change or type change + zero - means sector type is zeroed, texture copied from model + txtonly - means sector type unchanged, texture copied from model + type - means sector type and ceiling texture are copied from model +3) down/up specifies the "normal" direction for moving. If the + target specifies motion in the opposite direction, motion is instant. + Otherwise it occurs at speed specified by speed field. +4) Speed is 1/2/4/8 units per tic +5) If change is nonzero then model determines which sector is copied. + If model is 0 its the sector on the first side of the trigger. + if model is 1 (numeric) then the model sector is the sector at + destination height on the opposite side of the lowest numbered + two sided linedef around the tagged sector. If it doesn't exist + no change occurs. + +------------------------------------------------------------------ +generalized doors (1024 types) + +field description NBits Mask Shift +------------------------------------------------------------------ + +trigger W1/WR/S1/SR/G1/GR/D1/DR 3 0x0007 0 +speed slow/normal/fast/turbo 2 0x0018 3 +kind odc/o/cdo/c 2 0x0060 5 +monster n/y 1 0x0070 7 +delay 1/4/9/30 (secs) 2 0x0300 8 + +Notes: + +1) The odc (Open, Delay, Close) and cdo (Close, Delay, Open) kinds use + the delay field. The o (Open and Stay) and c (Close and Stay) kinds + do not. +2) The precise delay timings in gametics are: 35/150/300/1050 +3) Speed is 2/4/8/16 units per tic + +------------------------------------------------------------------ +generalized locked doors (1024 types) + +field description NBits Mask Shift +------------------------------------------------------------------ + +trigger W1/WR/S1/SR/G1/GR/D1/DR 3 0x0007 0 +speed slow/normal/fast/turbo 2 0x0018 3 +kind odc/o 1 0x0020 5 +lock any/rc/yc/bc/rs/bs/ys/all 3 0x01c0 6 +sk=ck n/y 1 0x0200 9 + +Notes: + +1) Delay for odc kind is constant at 150 gametics or about 4.333 secs +2) The lock field allows any key to open a door, or a specific key to + open a door, or all keys to open a door. +3) If the sk=ck field is 1 (y) skull and cards are different keys, + otherwise they are treated identically. Hence an "all" type door + requires 3 keys if sk=ck is 1, and 6 keys if sk=ck is 0. +4) Speed is 2/4/8/16 units per tic + +------------------------------------------------------------------- +generalized lifts (1024 types) + +field description NBits Mask Shift +------------------------------------------------------------------- + +trigger W1/WR/S1/SR/G1/GR/D1/DR 3 0x0007 0 +speed slow/normal/fast/turbo 2 0x0018 3 +monster n/y 1 0x0020 5 +delay 1/3/5/10 (secs) 2 0x00c0 6 +target LnF/NnF/LnC/LnF<->HnF(perp.) 2 0x0300 8 + +Notes: + +1) The precise delay timings in gametics are: 35/105/165/350 +2) Speed is 1/2/4/8 units per tic +3) If the target specified is above starting floor height, or does not + exist the lift does not move when triggered. NnF is Next Lowest + Neighbor Floor. +4) Starting a perpetual lift between lowest and highest neighboring floors + locks out all other actions on the sector, even if it is stopped with + the non-extended stop perpetual floor function. + +------------------------------------------------------------------- +generalized stairs (1024 types) + +field description NBits Mask Shift +------------------------------------------------------------------- + +trigger W1/WR/S1/SR/G1/GR/D1/DR 3 0x0007 0 +speed slow/normal/fast/turbo 2 0x0018 3 +monster n/y 1 0x0020 5 +step 4/8/16/24 2 0x00c0 6 +dir dn/up 1 0x0100 8 +igntxt n/y 1 0x0200 9 + +Notes: + +1) Speed is .25/.5/2/4 units per tic +2) If igntxt is 1, then the staircase will not stop building when + a step does not have the same texture as the previous. + +------------------------------------------------------------------- +generalized crushers (128 types) + +field description NBits Mask Shift +------------------------------------------------------------------- + +trigger W1/WR/S1/SR/G1/GR/D1/DR 3 0x0007 0 +speed slow/normal/fast/turbo 2 0x0018 3 +monster n/y 1 0x0020 5 +silent n/y 1 0x0040 6 + +Notes: + +1) Speed is 1/2/4/8 units per second, faster means slower damage as usual. +2) If silent is 1, the crusher is totally quiet, no start/stop sounds + +------------------------------------------------------------------- + +Added these generalized linedefs to DETH linedef menu, creating arrays +of buttons for each type to set the parameters. Readback is currently +primitive, only the general class is reported. + +Created a DOS command line tool TRIGCALC to calculate the value of a +given generalized linedef type based on answers to questions about its +properties. + +Exercised each field of each type with small test wads. + +Also fixed the W1 Teleport bug, where it was used up being crossed in the +wrong direction. + +Files affected: P_SPEC.H, P_SPEC.C, P_SWITCH.C, P_FLOOR.C, P_CEILNG.C, +P_PLATS.C, P_DOORS.C, and a new file P_GENLIN.C was added. + +2/03/98 + +Added functionality to manual doors, so that their tag specifies a sector +or sectors that will go to max neighbor light level on the door completely +opening, and to min neighbor light level on the door completely closing. +Changes to P_DOORS.C P_SPEC.H P_SAVEG.C. + +Added TNTEM cheat code that will kill all monsters now alive. Simply borrowed +the code from Chi's .046 port, as it works and looks fine. Unless you develop +wads you may not appreciate how useful this code can be :). Changes to +ST_STUFF.C. + +Relabelled Lee's WR Silent Teleport to 208, with W1 on 207, S1 on 209, and SR +on 210, as 203 was already being used by a ceiling function. Changes to +P_SPEC.C, P_SWITCH.C, and COMMON.CFG. + +Fixed an automap bug that was showing secret doors. Change to AM_MAP.C. + +Added P_FindNextLowestFloor routine to support downward linedef functions. +Simply borrowed Lee's P_FindNextHighestFloor and reversed some inequalities. + +New linedefs: + +211-214 Lower Floor 24 +215-218 Lower Floor 32 Fast +219-222 Lower Floor to Next Lower +223-226 Raise Floor 32 Fast + +Changes to P_SPEC.C, P_SPEC.H, P_SWITCH.C, and P_FLOOR.C + + +1/30/98 + +Fixed the "monster squished - no floor lower" bug in P_FLOOR.C. Floors moving +down were being halted if a monster on the periphery of the sector had +insufficient headroom, this did not make sense, a bug. Reformatted P_CEILNG.C, +P_FLOOR.C, and P_PLATS.C as part of their documenting (so I could read them!). + +Added 85 linedef type to make right scrolling animated walls. + +Added new linedef functions for ceiling to lowest neighbor ceiling, and ceiling +to maximum neighbor floor. + +Added new gun exit linedefs, normal and secret. + +1/29/98 + +Filled out the linedef specials to include SR, S1, WR, and W1 varieties +for all functions it makes sense for. Created new file COMMON.CFG which +documents the new linedef types and provides new menus for DETH so that +they may be entered normally with that editor. + +1/26/98 + +Fixed a problem in P_PLATS.C where a raiseAndChange plat type would +bounce, and go down but not be removed, disallowing any future access +to it. + +Fixed another problem in P_PLATS.C where the same raiseAndChange type +of plat would bounce, without the low height of the plat ever being +initialized. This could cause unpredictable behavior and plats that +lowered forever. + +Fixed the twoSided routine in P_SPEC.C so that it returns whether a +line has two sides, not whether it is marked 2S (means "can be +transparent"). + +Fixed getNextSector routine in P_SPEC.C to ignore 2S flag and actually +use whether a line has two sides. + +Fixed P_FindHighestFloorSurrounding routine in P_SPEC.C to use MININT +as it initialization for the highest search rather than the arbitrary +-500 units it did. + +Fixed P_FindHighestCeilingSurrounding routine in P_SPEC.C to use MININT +as it initialization for the highest search rather than the arbitrary +0 units it did. + +Fixed EV_DoDonut in P_SPEC.C to not dereference NULL if the lowest numbered +line in the donut sector was one-sided. + +1/25/98 + +Fixed the floor crusher bug. It was not resetting the floor position +when it encountered a monster blockage, allowing the monster to live if the +floor reached its destination before the monster died from crushing. + +1/24/98 + +Added new variables for nomonsters, respawnparm, and fastparm to store their +command line invocation value. Change code in G_GAME.C to use these values +to initialize the old variables in level start, so they persist thru demo +play and IDCLEV changes. + +Fixed a failure to initialize the floor move special field in lower and change +texture type actions (triggers 37 and 84). This would cause an illegal texture +change to create an invalid sector type if the model sector was not found. The +change is in P_FLOOR.C, EV_DoFloor. + +Removed I_Error exit from P_PlayerInSpecialSector routine in P_SPEC.C and +just output a player message with dprintf instead. Can't find any reason +this should cause a crash or problems. + +1/23/98 + +Added W_CoalesceMarkedResource routine to W_WAD.C to organize directory +entries for sprites and flats into a single marked block, allowing them +to be read from PWADS. Commented out several error checks in +R_InstallSpriteLump in R_THINGS.C that were no longer appropriate and +rewrote to use the last loaded rotation definition for sprite frames. +Reversed the order of lumps searched in R_InstallSprite. + +Added automap support for setting color to -2 to disable the line +drawing at all, and setting color to -1 to suppress new automap +features. Removed some code that would have displayed secret walls, +but was disabled already by using the normal color for them. + +Rewrote MMUS2MID nearly entirely to be self contained and to provide +a routine for full MIDI conversion for future ports. Also fixed a bug +that would fail to zero out tracks not used in the next music piece that +were used in the previous one. + +1/22/98 + +Added command line parms for -nosfx, -nomusic, and -nosound to allow +disabling sound from the command line. Added returns in S_SOUND.C to +skip sound functions when disabled. Also added code in I_SOUND.C to +suppress music thru nosfxparm and nomusicparm when Allegro returns an +error from install_sound. Made sure I_ShutdownSound did not register +with atexit if sound was never installed. + +1/21/98 + +Removed I_Error exit on error loading MUS lump into Allegro in +I_SOUND.C, used dprintf to show a player message in its place. Moved +the music sound volume routine down to the music API. Stopped using +destroy_midi, just reallocate track structure on new music load, and +stop_midi when done. + +1/18/98 + +Added variables sound_card and music_card to DEFAULT.CFG to support +manually setting the sound card and music card type for Allegro when +autodetect fails. Change in M_MISC.C and I_SOUND.C. Tweaked music volume +for maximum volume possible. + +1/17/98 + +Brought up the music volume setting routines in I_SOUND.C. + +1/16/98 + +Added basic mus to midi memory converter module in MMUS2MID.C, brought +up music calls in I_SOUND.C. + + +1/14/98 + +Removed old color defines from AM_MAP.C, no longer needed, supplanted by +variables added to DEFAULT.CFG. + +1/10/98 + +Added support for secret sector boundaries being displayed on automap. Also +enabled code to show teleporter lines. + + +1/7/98 + +Added variables to DEFAULT.CFG to support automap color configuration. + + +1/5/98 + +Added initial support in automap for showing keyed doors, opening doors, and +with double IDDT, keys. + +12/28/98 + +Fixed 0-index confusion in ST_STUFF.C that was not allowing IDCLEV to work +in the Linux port. + + diff --git a/prboom/TXTS/BOOM/LOG_LEE.TXT b/prboom/TXTS/BOOM/LOG_LEE.TXT new file mode 100644 index 000000000..2d3d919fb --- /dev/null +++ b/prboom/TXTS/BOOM/LOG_LEE.TXT @@ -0,0 +1,3706 @@ +Log of changes to Boom Engine + +Lee Killough +killough@rsn.hp.com +http://classicgaming.com/doom/ +http://www.trailerpark.com/tequila/killough/ + +--------------------------------------------------------------------------- + +6/3/98 (post-source-code release): + +Fixed problems with v2.00 demo headers being a different size from v2.01 +headers, causing game lockups when playing back v2.00 demos. + +5/27/98 (post-source-code release): + +Fixed problem with End Game and Load Game during demo recordings, and Load +Game during demo playbacks. + +5/27/98: + +Investigated problem where monsters awaken when carried by conveyors to +another sector (perhaps through teleporter): Problem is that in Doom, player +gunfire sounds are transmitted throughout sectors and stored in the form of +'soundtargets' for each sector. Each sector that can hear a player's gunshot +gets that player as its soundtarget, and then anytime a monster goes in that +sector, they can "hear" that soundtarget even if the sound is long-dead. +This wasn't an issue in Doom because monsters didn't move from one sector to +another unless they were already awake. + +In Boom you can carry them when they are asleep, and then old sounds left +over in sectors' soundtargets can awaken them for no apparent reason. + +5/25/98: + +Fixed drift caused by roundoff error in wall scroller delta calcluations. +The R_PointToAngle2() function is not accurate enough for wall scrollers, +so instead of using it, I use a different dot product formula that always +preserves orthogonality (the only roundoff error is in the speed now -- if +either the true value of the x or y components of scrolling are exactly 0, +then that resulting component will be exactly 0, something not always +preserved before). + +5/15/98: + +Fixed bug in which savegame consistency check failure message was applied +inconsistently :) Now it appears no matter where you load the savegame from, +and it's friendlier because it stays on the screen as long as it waits for +you to answer whether to load the savegame anyway. -loadgame also works +better now -- instead of aborting with an error message, it starts the game +anyway, with the main title sequence overlayed with a consistency warning +allowing you to force it to be loaded. + +iwads are also listed now, so that if you try to load a Doom 2 savegame +while running the Doom 1 iwad, for example, it will tell you the savegame +uses Doom 2 because the doom2.wad's path used when the game was saved, is +shown. + +Changes in g_game.c, g_game.h, m_menu.c, m_menu.h, d_main.c + +5/14/98 + +Found that Doom bug in thinker deletion algorithm could be fixed without +sacrificing demo sync in most cases, if we use two different methods for +finding the 'next' pointer, depending on whether the node is being deleted +next. For undeleted nodes we wait until after processing the function; for +deleted nodes we load the 'next' pointer first. Not 100% Doom compatible, +but good enough for demo sync, and 100% safe. + +5/13/98 + +Fixed bug in status bar when the consoleplayer in a netgame demo isn't green. + +Restored v1.9 demo sync some more, but only at a price: we must go back to +using that Doom bug (using linked list's "next" pointer after the node has +been freed, in p_tick.c) in order to restore demo sync!!! One wonders how +Doom even ran!!! Such demos are detected and flagged appropriately -- if +Boom crashes during a Doom demo, it knows whether it used unsafe methods to +preserve demo sync, and tells the user. + +5/12/98 + +Fixed silent teleporters, yet again :) Had to fix z-coordinate of thing at +exit. + +Had to exclude voodoo dolls from evironmental bobbing influences, in order +to prevent hiccups from occurring in silent teleporters on conveyors. + +Previously if a voodoo doll was on a conveyor which carried them across a +teleporter linedef or over a ledge, the teleportation or dropoff would cause +the real player to experience bobbing. Now the real player's bobbing is +unaffected by voodoo dolls. This was not an big issue in Doom, since the +only way to move a voodoo doll was to shoot them, and so rarely did they +walk up steps or teleport and thus cause the real player to experience +bobbing. + +Investigated GODLESS3.WAD but could not reproduce any problems other than +demo sync problems, which are not unexpected in at least some wads. + +5/10/98 + +Improved Boom performance around 20 fps by, reluctantly :), adding inlined +assembly code for abs(), FixedMul() and FixedDiv(). The inlined assembly is +#ifdef'ed to only be used when DJGPP is the compiler. The code is used +everywhere and so if there were any problems with it, they would show up +immediately. The code is also small (1-10 lines per function). + +Restored v1.9 demo sync during intermission screens with messages. + +5/9/98 + +Fixed silent teleporter bugs, by taking player viewheight into account +during silent teleportation and by more intelligently choosing where to exit +(the infinitesimal exit position must be carefully made to land on a certain +side of the exit linedef). Tested thoroughly with every combination of +sector heights and relative linedef angles. + +Silent l2l teleporter code was tripled in size, in order to fix the problems :) + +Studied Cacodemon desync problem, but could not identify root cause. No Boom +code whatsoever, which is unique to floating monsters, can be replaced with +the real thing and fix v1.9 demo desync. It's not frames, height code, or +anything like that. Just as the previous major desync was a roundoff error +difference in a monster sight calculation, this desync's cause may be just +as subtle and unrelated to its symptoms. The desync must either be in some +code which is not uniquely related to floating monsters, or the real thing +is not v1.9 demo- compatible. + +5/7/98: + +Fixed exit position of reversed line-to-line teleporters. + +Switched ammo 3 and 4 in TNTAMMO cheat so that ordering follows status bar. + +Fixed Doom bug in which RNG was called in a way that depended on compiler's +order of evaluation, which is unspecified (I'm talking about where it uses +P_Random()-P_Random() to generate random values around 0). + +To prevent confusion, made translucency lumps get ignored unless they are +exactly 64K. TRANMAP.DAT no longer will work without error. + +Made monsters blind if they are directly tangent to a water surface (their +head is right on the water), and the player is on the other side. + +Fixed bug (no symptoms noticable, though) in which -1 pointer hack wasn't +completely removed by me. I had replaced the -1 pointer hack with the +address of a real function, but missed it in a couple of places. p_mobj.c +and p_tick.c are concerned with this -1 pointer hack, which indicates a +thinker is about to be deleted. + +Investigated Cacodemon and PE demo desyncing, sometimes cutting and pasting +part of the real thing into Boom, but could not get v1.9 demos with lots of +Caco or PE action to stay in sync. Replacing every function which uses +MF_FLOAT or MF_NOGRAVITY did not help -- it appears to be something more +fundamental, like roundoff in arithmetic calculations. + +Reformatted my parts of p_spec.c. + +5/2/98-5/3/98: + +Finished work on all my files, except for the shared ones Jim and Ty have +first. + +MASSIVE reorg of headers and files. On files that were not assigned to me, +usually only the top few #include lines were affected, so merging should +not be hard, since 95%+ of those files were untouched by me. + +Every header file has been corrected w.r.t. global functions and data +and headers it depends on, and every file has had its set of #includes +minimized. The makefile dependencies have been regenerated. + +You now get almost as few unnecessary rebuilds as possible. + +p_local.h and r_local.h have been eliminated. p_map.h and p_maputl.h +added. global declarations in g_game.c and m_misc.c have been moved to +proper headers. + +Fixed bug in networking code which didn't take compatibility flag into +account (will cause network inconsistencies if players have different +orig_doom_compatibility options). Needs testing, but it's #ifdef'ed with +LEESFIXES in d_net.*. + +5/1/98: + +Refixed weapons switch bug: original fix was incomplete and prevented '0' +from working all the time. Found another unrelated weapons switch bug: the +'1' and '3' keys (chainsaw/fist and shotgun/SSG) would not reflect player +preferences immediately if changed in the setup screen, because original +algorithm relied on a cached table which was only initialized once per +game. Fixed it by adding P_WeaponPreferred() to p_pspr.c, which tests +whether player prefers one weapon over another, and which always reflects +the latest player preferences instead of just a snapshot at startup. + +Reformatted files. No functional (semantic) changes unless otherwise +mentioned, but some structural (syntax) changes were made sometimes, to +beautify code. Most significantly affected was g_game.c, due to its +initial messiness. Lots of prototypes and declarations in g_game.c were +moved to header files instead. + +The general paradigm is that most variables or functions defined externally +in a .c file should be declared in the corresponding .h file, and the .h +file should be #included instead of redeclaring the variables or functions +inside each of the .c files which use them. + +Lots of commented out dead code was removed. + +4/29/98: + +Fixed bug in which game would pause and not pause backwards according to +whether a demo is playing. File: p_tick.c + +Fixed "TNTAMO10" bug. Bug has existed since March, and was due to +prematurely setting the pending weapon in a weapons switch to "no_change". +If the current weapon was the fist, and no other weapons had ammo, then +'0' (weapons toggle) would crash game, because the code would enter an +infinite loop -- it would keep setting the pending weapon to the fist +(the only valid choice), but then, since it's also the current weapon, +the code would switch the weapon selection back to "nochange". Sort of +like getting your ear bitten :) The loop's terminating condition was that +the pending weapon was something other than "nochange", so it would enter +an infinite loop if the current weapon was the only allowed weapon. Fix +was to stop setting the pending weapon to "nochange" inside the loop. + +4/28/98: + +Improved texture error message display to show all bad textures (textures +containing columns without a patch, or missing patches) before aborting. + +4/26/98: + +Fixed the bug which caused rare crash. Problem was that sometimes a mobj's +target was left pointing to a deleted mobj. In demo which caught this, the +crash occurs right as a barrel explodes and hurts a dying lost soul. Somehow +the barrel is not able to finish inflicting damage, before the lost soul has +died and is removed completely. The fix is to delay the deletion of thinkers +generally, by using a multi-staged lazy approach, and when a mobj thinker is +processed, check its tracer field to see if it points to a target about to +be deleted. If so, delay the deletion of that object. I tried the simpler +approach of setting the target field to NULL when the target is about to be +deleted, but that breaks demo sync, while this fix doesn't. + +Fixed an intermission screen bug which was also caused by using data after +it was freed. Problem was data pointed to by "lnames" was used after it was +freed in wi_stuff.c. + +4/25/98: + +Fixed major bug in P_RunThinkers() in which data was used after it was +freed, after adding code to z_zone.c which intentionally scrambles data +right before freeing it (to amplify the ill-effects of using it after it's +freed). Found another bug with this freed memory debugging trick, a segviol +when a player is attacked under rare conditions, but did not have time to +isolate and fix it, and since it almost never happens unless the freed +memory is erased, I left it standing. + +Fixed item pickup sounds to keep them from stopping weapons sounds. Problem +was that every sound needs an origin to work consistently with spy mode +(F12) (sometimes a NULL origin was used in Doom, which made the console +player hear it at full volume, but it also made other players hear it full +volume too). But only one sound was allowed per origin at a time. Since the +item being picked up disappears, it cannot be the origin for the pickup +sound, so the player has to be the origin. But the player is also the origin +of weapons fire. Current fix is kludgy and will likely be redesigned in +Phase 2: item pickup sounds have their sound number masked with a large +bitmask, and the sound routine does not stop sounds based on origin unless +they both have this bitmask set or cleared. Affected files: s_sound.c, +s_sound.h, p_inter.c + +Commented and reformatted these files: + +s_sound.c, s_sound.h, r_plane.c, r_plane.h, r_defs.h, r_data.c, z_zone.h, +w_wad.c, w_wad.h, r_segs.c, r_segs.h, m_fixed.h + +Added gcc's __attribute__ extension, under #ifdef __GNUC__, to make gcc +catch programmer mistakes in printf formats passed to dprintf() and +I_Error(). Files affected: doomdef.h, g_game.h, i_system.h. + +Found bug in r_things.c using new check (long versus int in an I_Error() +format string in r_things.c). + +Fixed cr_gold declaration error in info.c -- it must be static in info.c if +it is not to conflict with the global cr_gold pointer defined in v_video.c. + +Added #ifdef __GNUC__ around m_fixed.h's gcc extensions. + +Added STBAR, M_NMARE, WIMINUS, and DSGETPOW lumps to info.c for Doom v1.1. + +4/23/98: + +Fixed two cheat bugs affecting demos: prevented most cheats from being +activated during demo playback (previously only demo recordings had them +excluded), and cleared player cheats such as IDDQD and IDCLIP when starting +demos (previously cheats could mess up internal demos played after End +Game). + +4/20/98: + +Fixed monster sight code so that monsters cannot see player when totally +separated by water or fake ceilings. Leads to interesting effects -- +monsters tend to pop their head out from under the water and attack the +player!!! May need to be made optional and/or turned back off when +translucent flats are added in Phase II. + +Also found bug which caused some demo sync problems: monster sight code had +slight roundoff error due to point/line query optimization. Now all 4 demos +in Ultimate Doom stay in sync, and other v1.9 demos are expected to have +better success now too. + +4/18/98: + +Fixed bug in screenshot code (data could be freed before it was finished +being used). + +Consolidated cheat code into one table. Now deh-specific stuff is +included as part of the cheat table and will not break if table order +is modified. Cheats can be individually disabled during DM, coop, demo +recordings, -deh, and while menu is active. idk added back, but disabled +during -deh. + +Fixed boss brain savegame bug. Landings were not properly reinitialized after +saved game was loaded, causing saved landing targets to become NULL. + +Fixed namespace errors in 5 places: flats animation, intermissions background, +small screen size background, help screen background, and registered game +check. Exhaustively searched every source file for lump name lookups. Found +no more cases. Namespace code works now and should go out in the next release +after a week of internal testing. + +4/17/98: + +Updated DCK configuration files for new linedef types. + +Added traditional_menu option since there appears to be a mutual +disagreement over the order the main menu items should be in. + +Improved silent teleporter response time by adding P_FindLineFromTag() to +find linedefs matching tags quickly. + +Fixed problem with linedef types 213, 261 not causing new light levels to be +drawn if they were the only thing making the sector different. + +Fixed namespace problem with flats, patches, colormaps and sprites. Now the +lumps are all tagged internally, and are searched by specific tags. Sprites, +flats, and colormaps are in their own lump namespace now (apart from their +markers). However, if a texture patch cannot be found in the global +namespace, it will be searched for in the sprite namespace, since apparently +some wads use sprite patches for wall patches too (INVASIO2 did). If other +non-wall graphics patches need to be able to use the sprite patches, then +sprites may have to be put under the global namespace instead of a separate +one. + +INVASIO2 seems to be the more perverted wad when it comes to name collision :) + +4/15/98: + +Fixed blazing door double-closing sound (something I had been meaning to add +to our list earlier). This change is compatibility-optioned. Blazing doors +making double-closing sounds has been a complaint, and it does sound odd. + +Fixed generalized door opening sounds. Generalized doors being opened were +always making the blazing door closing sound, instead of a regular opening +sound or blazing opening sound (depending on speed). + +Fixed silent line->line teleporter bug, by nudging exit coordinates by 1 +part in 2^16 if they are on top of the exit line. Now regular silent +teleporters, and the reversing ones Jim just added for me, work without +"hiccups" like double-teleportation. + +Apparently when I used floating-point back in January for point-line +queries, it was more accurate, and teleporters didn't have this problem. +Now that I'm back to using Doom's method (in light of disappearing E3 +imps etc.), I seem to have inherited this problem with landing on lines. + +Fixed 2s normal textures from bleeding underwater or over fake ceilings. +Does not affect Doom wads which do this effect intentionally, and does +not prevent a determined author like Jim from doing it with outside +sector references. + +Fixed bug mentioned in the NGs, in which cheats like IDCLEV work while +inside thermometer menus -- I simply disabled cheats from working while +the menu is active. + +4/14/98: + +Investigated silent teleporters -- Jack was right, there is a problem :( +They don't work anymore. The player gets stuck because they are considered +on the "wrong side" of the teleporter line. I can't get any of my effects +with it to work right. This is a showstopper, IMO. Silent teleporters "work" +as far as moving the player and other objects, but if you try special tricks +like rooms-over-rooms, you have to either make the player come out facing +the wrong way, or you end up with "sticky teleporters" where the player's +momentum carries them back and forth between two teleporters constantly, or +where they can't get out of one side of the teleporter because as soon as +they teleport from A to B, B's line carries them right back to A. + +Problem seems to be in considering which side of a linedef the player is on. +When the player exits a line-line teleporter, they are always supposed to be +on the first side of the linedef, and the teleporter code, which has been +stable for over a month, ensures that this is true. But sometimes, depsite +this assurance, Boom currently will teleport a player right back as soon as +they walk across that line, even though they are supposed to be walking out +of the first side. Something in the line-crossing logic is bad. + +Also, I used a silent teleporter wad someone wrote a while back, and it +crashes the current version of Boom in P_SetThingPosition(), before Boom +even switches into graphics mode. The wad worked around a month ago. [Nodes +were unbuilt] + +Fixed a bug with 2s normal textures not having correct lighting when under +water or over fake ceilings. The control sector's lighting wasn't being used +when it should. Another bug currently not fixed, which is not a showstopper, +is that 2s normals are not correctly clipped against water or fake ceilings, +and hence they bleed. Some might like that as an effect, and they can still +do that, but that's not what I designed 242 for. Fixing this has nothing to +do, by the way, with fixing it generally -- wads that use it as a special +effect continue to work, as the special clipping only comes into play when +242 is used. + +Note: the sector heights are always taken from the real sector when +displaying 2s normals, because otherwise 'anomolies' may arise which cannot +be solved with sidedef offsets. Thus 2s normals are always "anchored" to the +real ceiling, not a fake one which can change based on player position. + +Fixed another ?bad merge? in r_data.c, causing seg faults (invasio2.wad). +Problem was 'x1' was being used when 'x' should have been used, and if x1<0 +this could cause seg faults (the code already made sure x >= max(0,x1)). +Looks like another simple typo I made, or something like that :) + +Changed adaptive_gametics option to realtic_clock_rate option. Now user can +set speedup rate as a percentage in realtic_clock_rate, and it does not +change during the game (no "molasses" effect). By default it's 100% which is +normal speed. Removed -DADAPTIVE_GAMETIC from the makefile, as obsolete. + +4/13/98: + +Fixed ?bad merge? in r_data.c causing seg faults. + +Added -DADAPTIVE_GAMETIC to makefile to enable adaptive speedup (attempts +to make Boom run at 35 fps on slow systems by scaling up the gametic clock). + +4/12/98: + +Fixed sprite clipping problem under fake ceilings. + +Fixed problem drawing underwater sectors' ceilings while the player is +over fake ceiling. + +Updated dckboom.txt, added watermap.wad to allow DCK users to enter WATERMAP +as a texture name. + +4/11/98: + +Made 242 linedef smarter, by ignoring missing or bad colormap names that are +valid textures. If you use a texture name on a 242 linedef, the texture, not +the colormap, definition applies. Some wads, such as DFA's (Dark King), had +HOM because they used ordinary walls in the room for 242 linedefs. This is +okay now, since ordinary COLORMAP is used and the textures are drawn +normally now. Only if a valid colormap name is given for a 242 linedef's +first side's textures, do those textures get replaced with "-" now. + +Made no-clipping objects (e.g. player) not block objects moving on a conveyor +(it might mess up some conveyors if a player cheats and things start piling +up because the player blocks them but isn't moved by the conveyor). Objects +pass right through player in no-clipping mode if they are MF_SOLID objects +otherwise blocked by the player. This does not affect projectiles, e.g. +rockets hitting the player. + +Added linedef type 261 to set ceiling light level, since there was already +one to set the floor light level, but not ceiling. With this linedef type, +you can now set the walls, things, floor, and ceiling light levels all +independently (well, all but one wall, I think :) + +Added linedef types 262-264 to carry objects hanging from ceilings, just +like normal conveyors. For Phase 1 the code is commented out since it +doesn't work correctly yet. Doom is apparently not prepared to handle moving +ceiling-hanging things. But 262-264 have been reserved for this function, +which mimicks the behavior of conveyors for floors. + +Added support for translucent 2s normals. Most of the support was already +present -- the same routine that is used to draw sprites, is used to draw 2s +normals. With Medusa 100% out of the way now, enhanced 2s normals seemed +appropriate. + +No new flags are added to linedefs, patches, or textures -- like most of my +other linedefs, translucent textures work under a "property transfer" model, +where one linedef affects one or more objects, in this case 2s normal +textures on linedefs. + +Linedef type 260 causes the linedef itself to be translucent with the +TRANMAP lump if the tag==0, while if the tag!=0, linedef type 260 causes +all tagged lines to be translucent, and the filter used is either the +one specified by the first sidedef's normal texture (which means each +translucent linedef can have its own translucency filter), or TRANMAP if +the first sidedef's normal texture isn't a valid translucency map filter +lump name. + +I very much prefer the property transfer approach to the flags approach: + +1) No wad format changes. + +2) No new editor or utility support required, as long as it groks + overloaded texture names and new linedef types. + +3) Can be applied to more than one object, by using tags. + +4) Allows effects to be independent of the definitions of the objects they + affect -- for example, linedef 260's use of the property transfer model + means that any 2s normal textures can be made translucent, not just new + textures constructed with new special flags. + +5) Can apply other information, such as from overloaded sidedefs and their + sectors -- allows the transfer of dynamic properties (e.g. displacement + and accelerative scrollers react to moving sectors). + +There was talk at some time in TeamTNT about translucent textures and/or +patches being defined by new flags. Considering the ease of implementing +linedef 260, against the difficulty of making textures or patches always +translucent by definition, 260 seemed the only reasonable way. Disadvantages +of the flags approach: + +1) Requires wad format changes unless some flags found unused in Doom are used. + +2) Requires special editor / utility support to recognize and modify the new + flags. + +3) If individual patches are allowed to be translucent, they take special + handling to merge when making multipatched textures. This would basically + require rewriting the code which fixed Medusa, and it would be more than + 3x as complicated since it would have to actually "draw" translucently + to form multipatched textures -- very ugly code. + +4) Makes specifying translucency filter much harder. With this property- + transferring approach, an arbitrary filter can be part of the effect. + If textures or patches were made translucent by definition, they would + either be restricted to one filter, or another significant wad format + change would be needed to allow translucency filters to be specified + individually for each patch or texture. + +The amount of coding needed to add 2s normal translucency to what we had +already, took me only around 90 minutes to implement, and since there's such +a big demand for it, and it doesn't require wad format changes or any editor +changes other than a new linedef type, it seemed right. It will certainly +make more people happy. ~90 minutes is all it took, so it's not a big +change. + +Much more time, over 8 hours, was spent making sure water worked as +expected under all kinds of conditions. + +Unless linedef 260 is actually used in wads, the risk of this change is +almost zero. No new code was added to actually do the translucent drawing -- +all I had to do, was enable the use of the R_DrawTLColumn() instead of +R_DrawColumn() when a translucent 2s normal was being drawn, and to transfer +the translucency property to the linedef, similar to how linedef 242 already +transferered properties to sectors (just one more 'case' in a switch). + +Fixed deep water to work properly with lots of varying underwater floor and +ceiling height and texture changes. Prevented HOM, bleeding, disappearing +textures, and inconsistent sprite clipping. Tested it with a strange water +floor height pattern like this: + + ----- ----- + | | | | + ----- ----- ----- ----- ------- + | | | | | | + | ----- ----- | + -- --- ---- | + | | | | | | + ------ --------------- ------------------- + +All the water levels displayed correctly with no bleeding or HOM, both under +and over water. The correct halves of sprites were displayed, and they did +not disappear suddenly. + +Translucent flats is all that remains to do for water. It's not as trivial +as translucent 2s normals, because unlike translucent 2s normals, +translucent flats requires that we do something never done before in Doom: +divide space into two at the water level. If the player is under water, +everything above the water level must be drawn first, then the water must be +drawn translucent, and then everything underwater must be drawn. If the +player is over water, the opposite order must be done. It's basically like +adding a 3-d component to Boom's BSP (Binary space partition). Also, while +the current water allows water height changes to occur, and fill them with +upper and lower textures, those textures are not translucent, nor is it +probably ever going to be practical to make them so. So if and when +translucent flats are done, existing water won't be able to be fully +translucent unless it's very simple (one water level). Translucent flats +must be applied with the same care and consistency as these others effects +I've added, so it's is a Phase II item. Sorry, no MAP30 -16 hacks :) + +4/10/98: + +Added adpative gametic option if -DADAPTIVE_GAMETIC is used. This may help +game fps on slower machines, but I cannot test it, since I get 35fps whether +I use it or not. It's an option turned off by default even if it's compiled +into Boom, so its risk is extremely low. Need others to test it on slow +systems, or anyone who is getting lower fps performance with Boom compared +to Doom. + +Fixed -fast idclev bug (a Doom bug too, BTW). Now the state of fastparm is +remembered and the state tics are never doubled or halved twice. No state +cycles occur in MAP16 anymore, but even if they were to, they would not hang +Boom. + +4/9/98: + +Added state cycle detection algorithm. MAP16 still has the problem it had +before with -fast and idclev16, but now instead of locking up Boom, a +message appears: "Warning: State Cycle Detected", and except for the +Spectres remaining asleep because their wakeup frames have a cycle that +cannot be exited in any defined state, the game continues as usual. This +means Boom is now idiot-proof against state transition table cycles that +lock up the game. No significant performance impact. + +4/8/98: + +Analyzed MAP16 -fast bug, determining it was a state cycle -- when a Spectre +near the red key or in the "cave" wakes up upon seeing the player near the +nukage, the game hangs in an infinite state-loop, because the tics are 0. +One problem, for sure, is that the tic counts are halved more than once when +idclev is used. When a frame state tic count is 0, the next state is handled +immediately, so at least one non-zero tic state must eventually be reached +or there will be a cycle which will hang Boom (this is a Doom bug too, BTW). + +Fixed Medusa bug for 2s transparent normals. Now Medusa is 100% fixed. + +Fixed Icarus MAP02 problem, which was a texture column offset overflow. +Doom only used 16-bit offsets for multipatched texture column offsets, +which was insufficient for Icarus. Adding 5 bytes per column to Boom's +multipatched columns, to fix Medusa, made the 64K limit get exceeded in +Boom when it didn't in Boom. Fix was simple -- use 32-bit offsets. + +4/7/98: + +Simplified the P_CheckSector() traversal algorithm to use simple markers +instead of complicated counters. The only advantage the counters have is +that they avoid having to initializations each step, but we have to do that +anyway, I think, to be safe. + +Fixed the problem with the disappearing things, happening on CASLOTR and +probably other wads as well. Problem was an incorrect BSP optimization, +sometimes missing the drawing of things. One of my hunches was right :) + +Fixed the problem with HOM in beginning of earth.wad MAP05 -- it's using +AASHITTY alright, but apparently, the sky effect works anyway despite this, +so long as a certain clipping decision is made (it's sort of like the +difference between a closed door and a 1s linedef -- what do you draw in +such a case if it's a 2s linedef that has AASHITTY as an upper texture, but +has F_SKY1 ceiling on both sides?). Anyway, I removed a very minor change +which I made eariler which "bailed out" in certain 1s line cases, so now, +earth.wad, despite having AASHITTY textures, displays sky background +correctly on MAP05. Second hunch right :) + +Also took the time to do a minor optimization trick. + +Files affected: r_bsp.c r_segs.c + +Analyzed the MAP06 bullet puff problem and determined it's actually due to +P_CheckSector(). If you use the old code you get bullet puffs on the way +down the elevator, but if you use the new code you don't. Someone else needs +to look more at this -- I don't have the time right now. The disappearing +bullet puffs seem to have something to do with how the sectors_thinglist +itself is updated or used. The problem only happens when the elevator is +actually moving, which is why it involves P_CheckSector(). + +4/5/98 + +Found that significant performance regression was being caused by recent +changes to d_main.c, which unconditionally redraw the status bar. Makes +the status bar get drawn every frame, lowering the game's effective fps. + +Fixed problem by reinstating code which intelligently avoids redrawing the +status bar, and by fixing the drawing problem by setting inhelpscreens=true +when the setup menus are entered. The inhelpscreens variable was designed +just for this purpose -- to redraw the status bar when a full screen was +entered. Future setup screens need to set this variable as well. + +Gives a 10-20% performance boost to Boom overall fps. + +Also moved SETUP to be a sub-option of OPTIONS (only a two-line change -- +see comments below). + +4/4/98 + +Updated boom.txt and boomref.txt with colormap and demo_insurance +information. + +Note: I strongly suggest "SETUP" be moved to a sub-menu of "OPTIONS". The +menu is stretching the limits of its height now with the extra entry (it's +bleeding into the status bar), and having "SETUP" and "OPTIONS" in the same +main menu sounds redundant and/or vague -- sort of like having "options", +"configure", "parameters", "setup", etc. all in the same place. At the +highest menu level, I think there should be only one entry having to do with +"options". The other can be made a sub-part of it. I prefer SETUP to be a +sub-part of "OPTIONS". + +Current, wind and friction should also be allowed for non-players, IMO. +Conveyors, and my version of currents, certainly are. + +Fixed problem with sector_thinglist and CheckSector(), by rescanning the +list every time a new thing is processed, thus avoiding any problems if +nodes are inserted or deleted in arbitrary fashion during their +processing. Nodes are marked "valid" after they are processed, using a +scheme similar to Doom's existing validcount scheme. The list is scanned for +the first "invalid" thing, which is marked "valid" and processed, and then +the list is scanned again from the start for another "invalid" thing, etc., +until no more "invalid" things exist to process. This scheme is used in some +OS protocols, and is tightly robust. + +Fixed doubled messages in the menu selections. ("Press Y or N. Press Y or +N.", "Press a key to continue. Press a key to continue."). The PRESS* +messages were appended to the main messages in d_deh.c, even though they +apparently didn't need to be. Nightmare Skill, End Game, and several other +options had queries that came up twice. + +Detected a 40 fps slowdown since last week, due to some unknown change. +(-fastdemo crusher went down from 580 to 540 fps on my machine). This is a +significant performance hit, and so Rez isn't imagining things :) + +It could just be due to cache alignment -- info.c gets updated with new data +often, and so it may affect the alignment of code and/or data in the cache, +affecting performance by even this much. djgpp doesn't have very good cache +alignment options, though. The rewritten z_zone memory allocator, BTW, +always allocates memory on cache boundaries, but it's code that's probably +involved here -- tight renderer loops might be spanning two cache lines when +they only need one, thus lowering prefetch bandwidth. + +Tried changing code alignment and could not detect performance improvement. +Problem is hard to isolate, but definitely occurred sometime last week after +my changes of Tuesday. Performance hit is probably 10%+ on low-end machines. +It is measured with crusher.lmp using demo_compatibility=true, so it +probably isn't any changes involving sector_thinglists. + +Added more support for dynamic colormaps. Colormaps can be defined between +C_START and C_END (COLORMAP is predefined regardless of whether it appears +between C_START and C_END, for compatibility reasons). Linedef type 242 can +specify colormaps for when the player is below the fake floor, above the +fake ceiling, and in normal space, based on the names of the lower, upper, +and normal textures of the 242 linedef's first sidedef. + +A C_START / C_END delimited list was more practical than a totally dynamic +solution (arbitrary lump names being allowed in sidedefs), because there is +a lot of colormap processing that must be performed at game startup and is +not performed again during level startup, and we need to know the names of +the colormaps ahead of time, which is not available without the level's +references, or some other list. C_START / C_END seemed appropriate and it +works just like F_START / F_END and S_START / S_END. + +The colormaps are referenced internally by every sector, and might later be +made to change in real-time. + +Right now the dynamic colormaps alter everything the viewer sees -- they do +not simply change things seen from a particular sector. Doing sector-by- +sector colormaps which are viewer-independent, is harder and should wait +until Phase II. Doom's colormap was for light goggles, invulerability, +etc., and so it was viewer-centered. + +Note: editors may need to be modified to allow undefined textures to be +entered. Overloading sidedefs with names other than texture names, is a +practical method which doesn't require drastically new editor support. Some +editors, such as DCK, may be fooled into accepting the colormap names as +textures, by creating and loading fake TEXTURE1 lumps, without real textures +or patches in them. + +Fixed deep water / fake ceiling effect (242) to allow player to see steps +underwater, and to draw it more consistently. + +Modified carriers to carry no-gravity things at any height, if under water +(so lost souls etc. get carried by currents just like other things on +floors). + +Fixed minor bugs in d_deh.c which could cause seg faults. Undefined pointer +comparisons were being done -- it's undefined to compare two C pointers for +their relative order, unless they point to elements INSIDE the same array, +or they point to one element past the right END of the array. If, say, a +pointer used in a loop, decrements one element BEFORE the beginning of the +array, then its comparison with the array's address is undefined, and the +loop might not terminate correctly. BTW: Another of these bugs, which did +cause crashes, was also in Doom, in the renderer code which draws 2s +normals, but that was fixed by me in January. + +4/2/98 + +Fixed weapons switching problem which prevented selecting a weapon w/o +any ammo. + +Analyzed and (hopefully) fixed DM spawn problem, caused by changes to +PIT_CheckThing to allow non-solid objects to pass through solid ones. + +Fixed problem with netgame sync caused by not properly initializing RNG +(the -net command-line parameter should have been tested instead of +netgame, which isn't set early enough). + +3/31/98 + +Fixed bug in deep water sprite clipping which caused the wrong half of the +sprite to be clipped sometimes. + +3/30/98 + +Addressed RNG concerns by giving the user the choice. By default nothing +special is done, but if they want to, they can take out a Boom demo +insurance policy :) demo_insurance is the config file option. Whatever +they use, it's part of WriteOptions()/ReadOptions() and hence must be +saved in demos and savegames, as well as netgames. + +Could not get perfect blockmap algorithm finished, due to health and other +factors :( Hacked in a very slow algorithm though (the same one used in BSP, +in fact). Takes 5 seconds or so on large E3 levels, on my fast machine, so +it's not as fast as one might expect :( + +I don't like this hack, but I don't like the pressure to fix the blockmap +limit for phase 1, so I did this hack just to get it over with. It needs a +real fix, which this isn't. A real fix takes a long time (perhaps 3 weekends +full-time work), designing the equations and testing the blockmap builder. +Almost every Doom node builder has used the algorithm mentioned in the UDS, +which is slow. I have a much better algorithm in mind, but it doesn't work +yet and I have to carefully design it, which takes lots of R&D time with +few quick results in the interim. + +I was right -- I did double the blockmap limit earlier -- but from 64K to +128K. Doom was limited to a 64K blockmap, but the wad format allowed +128K. And yes, Doom was considering the offsets as signed, but they were +offsets in words, not in bytes, so they were divided by two implicitly. It +certainly explains why one of my test wads works with Boom but crashes both +Doom and with Boom before my changes last time, which increased it to 128K +(instead of 64K as I had first thought). + +Fixed seg fault when starting a new game in the middle of a demo. Stan's +change last time fixed DM spawning, but broke games started after DM demo +playback. We MUST set deathmatch and netgame to 0 when starting a new game. + +Aparently, the problem was that the G_ReloadDefaults() call in d_main.c +comes AFTER the DM parameters are set according to the command-line -- if +the call to G_ReloadDefaults() came before the DM parameters were set, we'd +be okay. So I've taken every call to G_ReloadDefaults() except the one in +d_main.c, and added deathmatch=0 and netgame=0 after each one. Those are +required in every other place. Remember, this is a "Reload" of the defaults, +something normally done at the beginning of a new game started by the user. +Netgames can't normally be interrupted like that by a user anyway, but demos +can. + +G_ReloadDefaults() must come after M_LoadDefaults() is called, and after +some other parameters are set -- Boom will stop working if you move it up +too early. + +Improved random number generator to be more random. + +3/29/98: + +Fixed incorrect order of quit message (s_DOSY was put in the wrong order). + +Updated linedefs.txt, correcting some errors in the scrollers/underwater +linedef specs. + +For some reason I was sick (allergies). + +3/28/98: + +Made intermission teletype start off at normal speed, accelerating only when +the use/fire keys are used. Rand's time delays for Doom 1 are still used, +in that if you press use/fire once, you get the faster speed and then the +longer wait. But you can accelerate the wait too, to move on immediately. +It's just like the kills/items/secrets screen now. Doom 2 had to be +considered also, but it always waits for the user to press a key before it +moves on to the next level anyway -- now, it allows the intermission text +to be accelerated with one use/fire, and then the next level is entered +with the next use/fire. + +Fixed deep water sprite clipping. Now things are properly clipped both under +and over water, and also across fake ceilings. Took an unusually long time +to do, and seemed much harder than it really was, simply because of a +compiler bug which caused mysterious seg fault crashes -- three hours were +spent trying to fix a bug that wasn't mine, and it looked so bad under a +debugger: entire structs being clobbered, but no routine but my own, which +simply sets a tiny field, was being detected as writing to the structs after +startup. I tried something slightly different but semantically the same, and +the problem went away immediately and I got almost perfect sprite clipping +on my first try -- so it seemed it was a compiler bug, though I'm not going +to try and track it down any more (that's what I spend a lot of my regular +work doing, BTW ). + +3/27/98: + +Changed the IDDT cheat to work more like in Doom. + +Prevented weapon recoil from affecting player in no-clipping mode, since all +other external motion is already disabled in no-clipping mode, and many +times no-clipping is used to keep the player from moving, even when firing +weapons. + +Fixed conveyor bug in which conveyors would carry objects hanging over ledges, +but not touching the conveyor. + +Fixed bug in new sector/thing lists, in which a linedef's 2s flag was being +used to test for two-sidedness. Tested second sidedef instead of the 2s +flag. Original implementation prevented conveyors and other movers from +working on objects which are touching moving sectors, but whose centers are +on the non-moving sides of non-2s two-sided linedefs. 2s implies two-sided, +but two-sided does not imply 2s. + +For some things like lost soul spawning, the 2s flag is still used as the +test, for compatibility reasons. But since this sector/thing list is new, we +should do it right the first time, and take the linedef's two-sidedness into +account rather than the 2s flag. Jim has already done this for the floor +changers, among other things. + +3/26/98: + +Fixed weapon switch bug, in which the player had to be firing their weapon +in order for it to switch properly when it ran out of ammo. + +Improved random number generator. Demos now save RNG seed (4 bytes long), +and every new game scrambles the seed based on the system clock and other +fairly random variables. + +Fixed spawnfrag bug. Only in god mode (not merely an invulnerability orb), and +only if compatibility mode is turned off, are spawnfrags disabled. + +Discovered savegame crash bug in MAP30 (and all other boss spawn levels), +was actually a Doom bug which previously caused all icon landings to be +forgotten across savegames. Since they were forgotten, and since we made +them dynamic in Boom to remove any limit, the list of icon landings was +pointed by a NULL pointer, causing seg faults. Solution is to initialize the +icon landings during level startup, instead of during boss wake-up. Doom +worked only by accident because it also put the boss to sleep during +savegames. Since we don't put monsters to sleep across savegames anymore in +Boom, the brain was trying to spawn a monster into a NULL-pointed-to list of +landings, hence the seg fault. Fix also required saving the boss brain's +state in the savegame, such as which icon landing it was last targeting when +the game was saved. + +3/22/98: + +Fixed the problem Rez noticed with demos such as "g:caslotr", in which no +leading (back)slash appears before a filename, but only a drive letter. + +Fixed what looked like another Allegro bug (not sure), which was preventing +the right shift key from working with the new keyboard interrupt handler. +Sometimes the arrow keys generate extended scancodes which, un-extended, +look like releases of the shift keys. Previously, you had to "pump" the +right shift key to get to work, because the section of Allegro code which +filtered out useless extended scancodes (such as this fake release of the +right shift key), did not consider this case. Now it does. + +Historical note: Our problems with Allegro are not unique in gaming. Recall +how the right shift key had to be "pumped" in one of the alpha versions of +Doom, too. Also recall that sometimes on exit, the shift state was reversed. +Finally, recall how the sound code, in particular GUS, was such a problem. +If anyone can come up with a perfect game library that works on every major +sound card and has no keyboard hassles, they can make a lot of money :) + +Looked at weapons switching and determined that for demos, weapons switches +which were involuntary in Doom, e.g. always switching to SSG first if you +had it and you selected the shotgun, or switching to another weapon when +you run out of ammo, are NOT broadcast across networks or demos, just as I +had originally suspected. + +Fixed weapons switching problem by moving all the weapons-switching code +from p_user.c and p_pspr.c into g_game.c's G_BuildTiccmd() function. In +demo_compatibility mode the old method is still used. There may be some +slight differences or "gotchas" that I missed, such as different response +times or different weapon switching behavior, but that's a small price paid +for having consistency across demos and networks. I'm sure it can be fine- +tuned to be more like original Doom if someone finds something odd with it. +I played a few levels of Doom 1 with it, losing ammo several times, and I +did not notice anything unusual. + +Now demos and netgames can have different player weapons preferences without +it causing sync problems, because the weapons changes are stored in the +demos or broadcast across the network, instead of being a part of the +thinker code. + +The thinker code was used in Doom to change the weapons when the player +ran out of ammo or chose a shotgun or fist, when a SSG or chainsaw was +available. These changes were governed by an arbitrary, yet fixed, set +of preferences. They were "involuntary" weapons switches, in that sense. + +Think of the thinker code as the involuntary weapons changes, while the +G_BuildTiccmd code is the voluntary weapons changes. With variations now +possible in involuntary weapons changes (across different players and demo +recordings), we must treat them as variables just like voluntary weapons +changes, and record them as such. + +I was able to record a demo under one set of preferences, and then change +the preferences and play the same demo back just okay, something that was +not possible in 0316's build. Files: p_pspr.c, p_user.c, g_game.c +significantly changed. + +Now this needs real testing across network. It needs to be tested with +players having very different weapons preferences, and with them running +out of those weapon's ammo during firing, and also of using the '3' and +'1' keys often. + +3/21/98: + +Fixed savegame crash Paul Schmidt was experiencing. Problem was that +savegame buffer could be reallocated, but a local copy of save_p in +P_ArchiveWorld() would still use an old value of save_p. If a reallocation +occurred, save_p would become invalid and memory would be overwritten, +causing unpredictable results. + +Changed Makefile so that modified Allegro sources are built as a part of +Boom. Object files which are linked as a part of Boom will always be linked +in and take precedence over the buggy liballeg.a objects they are supposed +to replace. Thus linking in Boom's keyboard.o causes liballeg.a's +keyboard.o to be ignored. + +Added interrupt-driven keyboard IO. No longer is Allegro's key[] array +polled, so performance on low-end systems should improve significantly, +and response should be faster overall. Allegro is still used to maintain +keyboard sanity and handle LEDs etc., but there's a new callback mechanism +added to Allegro, which allows scancodes to be passed directly to Boom or +any other program. Boom stores these scancodes in a FIFO queue and does not +process them any more than it needs to in the interrupt routine. + +As a side benefit of rewriting the keyboard routine, autorepeat works again +in the savegame menu and other places. + +Comment: Many Allegro routines look like they were written by non-systems +programmers, because interrupts often have lots of code in them that they +shouldn't -- for example, it's better to just queue raw data in an interrupt +handler and process it later in a non-interrupt handler, instead of doing +all sorts of operations or conversions on the data in the interrupt handler +itself -- Allegro's keyboard interrupt handler has a loop in it that counts +an index from 1 to 128, looking for matching table entries. Also, interrupt +masks are applied inconsistently in Allegro and may cause problems such as +that "keyboard starvation" problem which set_leds(-1) caused by not properly +masking interrupts. Also, the AWE32 midi driver's use of floating point +registers inside an interrupt handler without saving and restoring the FP +state properly, is another blatant example. One gets the impression that +Allegro's authors have never programmed interrupts, device drivers, or any +kind of programming that depends on understanding multitasking issues. + +Fixed idclip bug. Original bug was caused by following the bad advice of one +of the comments (a "fixme" comment which actually breaks the idclip cheat). + +Added bin2c program, for adding predefined lumps and such. + +Added new colormap for underwater effect. WATERMAP is the same format as +COLORMAP except it's used when the player is underwater. Took a little work +rearranging the colormap-handling code so that more than one colormap could +be used. Now the structure is in place for an arbitrary number of colormaps. +Right now the colormap used is not the best -- if anyone can come up with a +better default I'll welcome it. + +Discovered problem with savegame checksum was that garbage was being left in +the length fields of the F_START/F_END/S_START/S_END markers. Doesn't usually +matter since these are markers, but it affected checksum. For robustness, I +forced them to length 0 in the merge routine. + +3/20/98: + +Fixed problem with weapons pickup not being heard in spy mode. Fixed a lot +of Doom hacks that were scattered around id's sound-generating code, such as +fixing the origins of sounds to be the player doing the action rather than +NULL (which is generally heard throughout the entire level by everyone). + +Worked around loadgame checksum bug. Apparently the sizes of the lumps +loaded from wads are not consistent from run to run. This calls for more +investigation, and may point to the cause of other crashes. + +Fixed -loadgame bug, the cause of which was being masked by the checksum +failure. The -loadgame bug was simply the result of finishing the loadgame +code without loading a full game (due to a checksum error), and then +proceeding to play anyway. + +Changed carrying floor thinker to use new sector thing lists, and to carry +objects if they are under water, yet above real floor level. + +3/18/98: + +Worked with Jim in tracking down YAAB (Yet Another Allegro Bug ). Allegro +keyboard code did not properly mask interrupts during low-level keyboard IO. + +Fixed tiny bug in currently-unused linedef/thing intersection routine -- the +radius used in a calculation was off by a factor of 2. + +3/15/98: + +Improved sound effects when listening from another player's view in spy mode. + +Added user-friendly savegame check. Savegame checksum is weak, simply taking +the lump names and sizes into account. If Boom detects a checksum mismatch, a +message is printed and any pwads which were loaded when the game was saved, +are listed. The user can override the warning by loading the same slot twice. + +NOTE: found a -loadgame bug which happens most with "-loadgame 0" after memory +has been used by another big process -- seems to indicate something's uninit, +specifically, the player's mobj. "-loadgame 0" sometimes segfaults. Need more +time to isolate and fix, but am willing to entertain others looking at it :) + +Since some interest in having lava always bright was expressed in the betatest +group, I added another linedef type which can be used to set the light level +of a sector's floor independently. Thus a sector with light 255 can be used +to set the floor light level of a sector containing lava to be always 255. + +Fixed the bug Len Pitre mentioned regarding the conveyors, where corpses were +unable to move through solid objects including monsters, depsite monsters being +able to move through corpses. Problem was an asymmetry in the thing<->thing +collision checks. + +Optimized thing/linedef intersection query algorithm. Added it to p_maputl.c +for possible future use. Algorithm never requires division, and requires four +multiplications maximum, zero multiplications if the thing is outside the +linedef's bounding box. C code is small, and assembly output verified to be +nearly optimal (no register spills and very few redundant register copies). + +3/14/98: + +Investigated bleeding ceilings and concluded that without major changes to +the renderer, Paul Schmitz's bridges cannot be done with linedef type 242 as +hoped. + +Improved underwater effects to support different light levels and textures +underwater. + +Added accelerative scrollers. Five new linedef types have the same functions +as the constant scrollers and the scrollers which move in response to sector +height changes, except that the five new ones are accelerative. With the +addition of a floor or ceiling height changer which alternates between two +heights, an on/off scroller is possible (the heights don't matter and it +doesn't matter whether the floor or ceiling changes). + +In response to complaints about scrolling floors not being able to push things +over ledges, added ability for monsters and other things to be pushed off of +tall ledges in non-compatibility mode. Monsters cannot jump off of tall ledges +voluntarily, but projectiles, conveyors (constant pushers), and player gunfire +can push monsters off of ledges. + +Currently this is not a separate option and simply goes under "compatibility," +because the gameplay is not too much different -- most monsters (and barrels) +that a player can push over a ledge, do not have much strength to begin with +and die before they can be pushed over the ledge. Stronger monsters are more +massive and thus harder to push over a ledge. While playing a few Doom 2 +levels with lots of structures, such as MAP11-15, I did not notice too much +difference -- only every once and a while did a monster get knocked over a +ledge by my gunfire without dying. + +If it is ever made into a separate option, it MUST be stored in G_SaveOptions / +G_LoadOptions in g_game.c or else Boom demos will not stay in sync. + +This option to knock objects over ledges took very little work to implement, +since it was simply a matter of conditionally disabling a check in P_TryMove() +when the movement was not monster AI but was due to outside forces. + +3/8/98: + +Updated common.cfg and doom17.dat with the new linedef types. + +Fixed missing DPMI lock in the sound code. Two locks were needed -- I had +only locked one of them. + +Added even more generalized scrollers. Now any sector's floor or ceiling +motion can be converted into wall, floor, or ceiling scroll motion, or +object motion. + +A Doom vending machine is possible now, among other things :) + +Vectors are represented by linedefs to give the designer maximum +flexibility. + +The only thing not completed is the ability to turn continuous scrolling on +and off. + +Renumbered linedef types for silent teleporters so that 5 new scroller +linedef types could be made consecutive with the 5 constant-speed +scrollers. There are now 10 generalized scrolling linedef types: ceiling +tex, floor tex, floor object carrying, floor tex & floor object carrying, +and wall tex. + +Added explicit deep water / invisible platform support. A sector's floor or +ceiling texture height can now be set independently of its actual height, by +tagging it to another sector with a special linedef type (242). A linedef +type #242 causes all tagged sectors to get their flats drawn at the heights +of the sector on the 242 linedef's first side. This avoids having to use +special sidedef sector references to get deep water, and allows deep water +to span concave polygons (previously if a polygon was concave, deep water +would be messed up easily and was exteremely dependent on the nodes). + +Added VERY primitive underwater support as part of linedef type +#242. Whenever the player is below the height of the floor indicated by +#242, the floor is drawn all around them and above them. As a special case, +if all lowers are missing in a sector underneath the water, a "cloudy" water +effect appears. This change allows water to go much deeper than it could +under Doom. + +3/7/98: + +Fixed messed up help screen sequences again, this time with the new help +screens. Help screens must be tested on Doom 1 Registered, Doom 2, and +Ultimate Doom, at a minimum, and the "Read This" main menu option should +also be tested. The new help screens were appearing twice or in the wrong +places some times. #ifdef LEESFIXES is around these changes. + +Fixed disappearing imp bug on E3 MAP02. Bug existed since Jan. 1 version and +was caused by roundoff error in a point/line query. I'm not sure it's really +a Boom bug, since the wad and/or nodes seem very suspicious when the imp's +visibility is so sensitive to a point/line query's roundoff error, but for +compatibility this is being fixed. + +Based on disappearing imp bug on E3 MAP02, and a re-analysis of the performance +impact of quick dot-product checks, I decided to bring back the old functions +for point/line queries rather than use new inline macros which use floating +point. For some low-end users the old functions may be faster; the new method +requires at least 48 bytes of RAM extra per linedef, probably more; tiny +roundoff differences cause problems like the disappearing imp bug on E3 MAP02, +and the performance impact of switching between the old and new methods is +negligible on my system and probably other higher-end systems. + +Fixed spy mode so that the status bar and HUD reflect the player being watched. +I could only test it with multiplayer demos, so I need someone to test it +some more under real co-op play. Sound is also heard from the other player's +location, but the support for it is not perfect right now -- some minor +differences exist between what a player hears in spy mode and what they would +hear if they actually were that player, such as weapons fire. This is due to +the fact that Doom made a lot of assumptions and took shortcuts that only work +with the console player, such as using NULL pointers to represent the origins +of sounds coming from the console player. + +3/6/98: + +Added translucency map caching, because the range of tastes is too broad +to only include 50% and 66% in the exe. Translucency map cache automatically +detects changes in filter percentage or even the PLAYPAL lump it's based on. +"tranmap.dat" is written in Boom's executable directory. If there are any +errors attempting to create the cache file, Boom simply recomputes the +translucency map. More initialization dots, and a progress indicator, were +added to show the progress when a cache miss occurs, since it may take up to +10 seconds on slow machines. + +Fixed problems with CapsLock and related keys, using, of all things, Allegro :) +(there is no need to mess with the BIOS data area directly as Allegro has +functions / variables to do this -- I think someone quoted me an outdated +article which said Allegro didn't allow you to do that stuff -- might have +been true in the past :). + +Added two new config file variables: + +1. autorun, which remembers the autorun state from the last time you ran Boom, +so that you don't have to turn autorun mode on each time. + +2. leds_always_off, which tells Boom to keep the keyboard LEDs off while +a game is playing -- allows you to use CapsLock and other keys for Boom +functions without having their LEDs turn on. + +Allowed CTRL-C to be used to abort Boom during startup init. + +Fixed bug with revenant tracers being too random, while preserving demo sync. + +3/5/98: + +Fixed TNTEM cheat, once again, to get rid of every last lost soul :) +Sometimes requires killing PEs even after they are "dead". + +Looked into DCK support -- DCK versions later than 2.2-f cannot handle +linedef types >= 256. + +3/4/98: + +Fixed infinite loop caused by two or more floor-carrying linedefs tagging the +same sector. + +Fixed problem with config file defaults not being loaded during demos or +deathmatch. + +Fixed problem with last pixel in translucent column not being drawn as +translucent. + +3/2/98: + +Isolated and fixed problem which was causing MAP19 crash in Eternal with v1.9 +and all other versions -- the problem was that a 2s normal texture with large +magnitude y-offsets was being drawn incorrectly because an overflow occurred +in a texturemapping calculation. The overflow was not the symptom (this is +not an overflow exception or anything like that), but was the indirect cause. + +Anytime an already-medium-to-large y-offset was scaled even larger due to the +proximity of the player to the texture, an overflow might occur. Doom simply +truncated the result to the 16.16 fixed-point precision of all its fixed-point +numbers, and relied on floor/ceiling clip ranges to clip 2s normals which were +out of range. But if the overflow occurred, the result could be the wrong sign +or worse, and so sometimes invariants Doom assumed were violated, causing it +to draw where it shouldn't and creating seg faults. The solution is simple: +perform the scaling in double-precision, but compare the double-precision +results to overflow first, and clip the entire column if it's out of range. +This amounts to testing whether the bottom end of the texture column is above +the top of the framebuffer, or whether the top end of the texture column is +below the bottom of the framebuffer. + +MAP19 created the overflow because the player was near a tall column with a +2s normal (probably the flame animation) way up above. The height/distance +ratio is so huge (practically 90 degree tangent) that it causes the overflow. +But for the overflow to create a crash, means that holes in Doom's clipping +checks must be found, which is why it was nontrivial to reproduce. + +There is less chance of this happening with sprites, and with the failsafes +I've added to the drawing routine it shouldn't happen anymore for 2s normals +or sprites. + +Fixed v1.9 demo sync problem accidentally caused by new friction code -- added +demo_compatibility check under #ifdef LEESFIXES to compensate. Demo sync +problem did not show up in crusher.lmp or demo1,2,3, but occurs about midway +in a 100+ frag DM demo I use in my testing (it's the +10 units angle adjustment +used when hitting walls -- it breaks demo sync sometimes). + +Added scrolling walls. One type of scrolling wall is programmed and +synchronized just like the scrolling floors, so that a player standing on a +horizontally scrolling floor which has been programmed with a linedef having +the same length and direction as the linedef programming a wall, will see +the wall standing still. This scrolling linedef type has constant speed, but +it can be arbitrary in direction and speed, so vertical scrolling is also +possible. This one is special, in that it's another linedef->linedef effect +(where one linedef operates on another linedef with the same tag), just like +the silent linedef->linedef teleporter. + +Another scrolling linedef type, much simpler for the wad author to use, +sacrifices the use of the x- and y-offsets of the sidedef, and uses them as +the scrolling speeds. The loss of the offsets is not really a problem unless +you need to line it up with another scrolling linedef, or you need to line +it up horizontally or vertically when it scrolls in the orthogonal +direction, but in that case, you can be sure that all of the linedefs of +this type scrolling at the same speed have the same implicit x- and +y-offsets. For maximum freedom use the more complicated linedef type above. + +There are so many options for scrolling, that it's probably best left to +scripting, but until then, wad authors will be wanting more options than +they have had in the past, so I've tried to make the options available far +and wide. + +Supporting variable-rate or on/off scrolling, both for walls and for flats, +was too much work for me to do this weekend given the other changes. I spent +more time getting the scrolling flats and their mobj-carrying properties +working, than I did improving the scrolling walls, since I thought scrolling +flats would be more in demand since there's nothing like it before. + +Supporting a sector controlling a texture's (or even a flat's) scroll speed +is possible, but it's more work -- the current code is nice and small +because the scroll speed is known to be constant. If we start supporting +variable scroll speeds, more fields will need to be added to the (internal) +linedef and/or sector structs if we are to have an efficient scrolling +algorithm, because instead of simply relying on a global scroll offset +counter which is scaled appropriately to each line's or flat's needs, we'd +have to modify the individual line's or flat's offsets during each gametic +based on the sector heights of the control sector at the moment, and to do +this without scanning all of the linedefs for specials during every gametic, +requires setting up a list of scrolling linedefs. In short, it's more work, +but it's possible. + +Scrolling type 48 still works as before, as does Jim's reversed type 85. + +Unless there are more serious bugs to fix, I guess I'll work on improving +the scrollers next weekend, perhaps by making it possible to turn them on +and off, have variable speed, etc. + +3/1/98: + +Changed automatic TRANMAP generator to only be called when translucency is +requested. If translucency is off, the startup delay will not happen. If the +cheat is then used, there will be a delay in the middle of the game while it +generates the table. + +Cleaned up handling of game options (e.g. smart monsters, head bopping, +etc). Added new function G_ReloadOptions() in g_game.c, which should be +used to reload any options with their runtime defaults so that games play +consistently. G_ReadOptions() and G_WriteOptions() are used to load and +save the options from savegames and demos, without messing up the defaults +in the config file. G_ReloadOptions() is therefore needed when starting a +new game, since a loaded savegame or demo might change the options from +their defaults. Moved Jim's command-line resetting (-nomonsters fix) to this +new function since it falls under the same usage. + +Doubled blockmap limit. The previous blockmap limit was actually 32K, not +64K, because the blockmap offsets were being treated as signed instead of +unsigned. The special marker -1 still needs to be sign-extended into -1, +but all other 16-bit values can be zero extended. Verified with a test wad +left over from my visplane research days -- it crashes both Doom and older +versions of Boom when a bullet is shot in a room surrounded by hundreds of +linedefs (not even in the same room), but with this new version of Boom, it +doesn't crash anymore. + +Changed internal blockmap data structures to use 32-bit offsets everywhere. +Blockmap limitation is still a wad limitation, and I have ideas on how to +fix it (on-the-fly blockmap generation at runtime, or new a blockmap lump), +but those will have to wait. For now, enjoy the 64K limit instead of 32K +. + +Added generalized "options" block to both demos and savegames, to support +saving and loading options which significantly affect demos and which we may +want to be restored during savegames, such as player bobbing. Right now 256 +bytes are reserved for this block, which can expand to up to 256 bytes +without requiring demo format changes. + +Cloned variables into default_ and loaded and saved from +the savegames and demos, using default_ only for new games. These are +the options for over/under, bobbing, recoil, etc. The defaults should be +made separate from the actuals used, so that demos and savegames can load +values different from the user's own preferences, or turn the options off +completely in compatibility mode, without messing up their preferences, and +so that cheats can be used to change these flags at runtime without changing +the defaults. + +Padded demo and savegame formats to include room for up to 32 players. +This way, in case the number of players supported increases later, demo and +savegame compatibility won't be a problem. Right now the last 28 bytes are +always stored as 0 and are ignored when read. + +2/28/98: + +Added support for generalized scrolling floors. Floors and ceilings can be +scrolled at any direction and speed, and floors can carry objects on top of +them. A flowing river, or a conveyor belt, are both possible now. Four +linedef types were added to support it: + +1) Ceiling scroller 2) Floor scroller 3) Floor "carrier" (carries all +objects on the sector's floor) 4) A combination of 2) and 3) in the same +speed and direction + +No special sector types are necessary -- a tagged linedef controls the +effect. The scrolling is in the same direction and magnitude as the +linedef, so usually one of the linedefs making up the edge of the sector +simply needs to be split and adjusted to the proper length to make the +scrolling flow neatly along the sector's edges. + +The effects are cumulative, so with two or more linedefs tagged to the same +sector, any combination of floor, ceiling, and object-carrying effects can +be formed. The speed of a carrying floor does not even have to move at the +same speed as the floor. The fourth linedef type is equivalent to the sum of +the second and third, but is included for convenience, since I expect many +will want the floor to scroll and carry things at the same time and in the +same direction. + +Tested with a conveyor belt, ala duke3d, and scrolling ceilings. Tuned it so +that momenta displacements are precisely equivalent to texture scrolling (1 +pixel = 3/32 momenta). Works independently of Rand's pusher/friction +changes, but may be combined since the momenta are cumulative. Affects all +things which aren't floating, not just players. For objects such as trees +and pillars, which may not want to be carried (say, in a river), the wad +author can put a small sector in the middle of a larger scrolling one, and +lay the thing on top of it to avoid it being swept away by the currents. + +The only problem right now is that slow scrolling floors +sometimes "slip underneath" things which are on top of them (I don't know if +this is a bug or a feature ). If the scrolling speed is increased past a +certain point, or if the thing moves in the slightest, then the carrying +floor "catches" it and starts to carry it. + +Note: as part of adding this scrolling flats effect, general intrastructure +support was added to the visplane code, to support arbitrary (x,y) offsets +in flats. In the future, this can be used to support (x,y) offsets applied +statically to flats, such as for aligning them when the 64x64 grid +limitation is removed. + +Added config option to use traditional keys in the Doom status bar. Default +is off, so that the new "doubled" keys are shown, but if you should prefer +going back to the Doom keys, there's now a config switch to do so :) + +Fixed the savegame bugs Rand had already analyzed: loadgames always coming +up in automap, and players getting stuck in walls. Tested stuck wall fix. +Added automap gridline status to the savegame. All that's left now as far as +automap status not being saved, is the zoom-in position and scale, but that +will take me too much time to do right now since it's not as simple to save +as the rest of the automap state, due to how it's implemented in am_map.c. + +Added demo compatibility support for versions of Doom prior to v1.4, since +there appears to be a demand for it. However, to support versions of +Doom prior to v1.4, will require lots of gamemode and/or other checks to be +added, since the STMINUS mentioned is only one of many such lumps missing in +pre-v1.4 and refererenced in post-v1.4. I think a lumpdiff is in order +(i.e. compare the lump directories of old and new versions and account for +all the differences). I have neither the time nor the inclination to pursue +this now. + +As much as I like old versions of Doom (see my web page), I do not feel the +need to support them in Boom. Pre-v1.4 demos are almost certain to have sync +problems. Demos prior to version 1.2 are not even compatible with later demo +versions, even after the header is accounted for, because player movement +deltas are scaled differently (v1.1 demos play back on later versions, as +though the player is in turbo). I was able to play a demo from v1.2, and the +demo support for pre-v1.4 versions seems to work, since there are no seg +fault crashes or complete demo sync problems anymore, and the demo starts +off just fine, but there are all kinds of missing lumps which prevented the +demo from completing: STMINUS, WIMINUS (another intermission screen lump), +and probably many others. I fixed the problem with DSGETPOW sound lump not +being found, by simply muting out sound effects with missing lumps. If this +is too silent for y'all's tastes, and you want a message of some kind that a +sound lump is missing instead of no sound at all, I can either back out this +change or improve it to print a non-fatal error message. For now though, +missing sound lumps are simply not played back. + +Fixed minor problem with ENDOOM -- the bug was simply that it was being +printed when it shouldn't. The backspace which caused the message to begin +in column 79 was intentional, because without this backspace, ENDOOM scrolls +one line off the screen. djgpp's DOS extender seems to print an extra +newline when the program finishes, so we have to backspace to hack around +this. Now ENDOOM is printed iff there is no exit message (such as a +-timedemo report or an error message). + +2/26/98: + +Fixed problem which caused linux version (and all DOS ports based on it) to +crash on Eternal MAP25 -- Thing type #0 was not being handled as a no-op, +and so memory was being corrupted. The symptoms were delayed, and bore +little relation to the cause (something common in these types of bugs ). + +2/22/98: + +Allow spy mode (F12) even during deathmatch demo playback, to allow you to +watch DM demos from any player's perspective. + +Some minor tuning of the assembly routines. + +2/21/98: + +Judged that, with the new automatic TRANMAP filter generator mixing at 66%, +translucency looks good enough to be turned on for some sprites: monster +fireballs, BFG, and spherical items (especially the invisibility orb and +soul sphere -- brings new meaning to that 'eyeball' ). I turned it off +for the imp because the spheres are good enough examples now. + +Added ENDOOM support (color text printed when game ends). + +Stopped par times from being printed during modified games (pwads). If ever +DEH support for setting par times is added, this can be turned back on, +preferably turned on somehow in the DEH specification. + +Commented out id copyright banners from startup screen ("modified game", "DO +NOT DISTRIBUTE", "Call the SPA", etc.) + +Added key_screenshot customizable key, to allow screenshots in non-devparm +mode. Currently the best default I could think of to use was '*', which is +the * on the numeric keypad (I've heard of problems with using PrintScreen +since it's often already reserved as a hotkey by some OSes -- I believe +DOSDoom tried this and had to retract it later). Screenshots in non-devparm +mode are desirable for bug reporting since many people don't use devparm +when they need it, and savegames might not be good enough (the bug might go +away or might interfere with savegames). + +Added general infrastructure for monster AI improvement flags, and +implemented first use of it with the recent monster memory improvent. + +A monster_ai flag is loaded and saved across demos and savegames. An enum +list can be updated in one of the header files if additional flags need to +be added. + +If any new monster AI features are to be added, they should be turned on/off +with bits in this new variable, to allow better customization of monster AI +options, and to ensure uniform results across demos and savegames. At some +point it might be something settable from pwads. No new config variables +need to be added if all that is needed is a monster-affecting on/off +flag. If the default needs to be changed, the default value of monster_ai in +m_misc.c should be formed based on bitwise OR-ing of the bitmask enums which +are to be turned on by default. + +Digression... + +Even if demo sync with v1.9 is not seen as being important, the issues are +almost the same with future versions of Boom as they are with preserving +demo compatibility with past versions of Doom, because the causes of desync +are the same and extra care must be taken. It is extremely important to save +compatibility-type switches in demos and savegames, because otherwise sync +problems WILL occur and we'll get lots of bug reports we'd rather not have. + +As for the precedence of various options, I think any conflicts should be +resolved according to this precedence list: + +Demo Savegame Command-line Pwad Iwad Config file + +The command-line should not be overriden by a wad; the user should be able +to "exercise exceptions" on the command-line. However, a wad can override +the config file's defaults. A savegame being loaded is a different matter -- +it may override the command-line since it's restoring an almost complete +state. A demo may also override it, because a demo may need something for +it to stay in sync at all. The precedence list above is designed so that +exceptions are minimized, while giving wad author, user, etc. control, and +ensuring that the state of the game is preserved as much as possible, +barring explicit requests for exceptions. + +I feel as strongly about the above list of precedences, as some do about +searching for wad files in the current working directory first :) + +... End of digression. + +Improved -timedemo and -fastdemo accuracy by preloading levels before timing +starts, and by sampling the clock as late as possible during the +initialization sequence. Verified with two consecutive runs of -fastdemo +crusher, which both returned the same "realtics" count. + +Fixed secret percentage in intermission screens to indicate 100% if there +are no secrets. No more wondering why you got no secrets when there were +none. "Computer Game Proves 0/0 = 1. Proof: Boom. QED." + +Relaxed compatibility switch on blockmap iterator change, to become +demo_compatibility. It's probably just a random number generator call count +issue (some line collision calcluations involve random number generation to +simulate friction). + +On the subject of random number generators, I added a new pr_class for the +revenant tracers. Previously, the revenant tracers (tracking/non-tracking +missiles) were randomized based on the global gametics counter, being +tracking only 1/4 of the time on average. Since gametics could start out at +almost any value (mod 4) for internal demos, this is why revenants messed up +internal demos. If demo_compatibility is on, the old method is still used, +except that the global gametics counter is adjusted at the start of the demo +to make sure it has a canonical value of 0 mod 4. If demo_compatibility is +turned off, then the new pr_class and its associated random number generator +is used instead. + +Made savegame version string to become proprietary: "version 200" becomes +"Boomver 200". This is just a way to prevent crashes in case someone else +calls theirs version 200 and someone loads their savegames. + +Fixed internal demo sync problems (e.g. DEMO1 disappearing imp). Problem +seemed to be that demo_compatibility wasn't turned on early enough. Now +demo_compatibility is turned on at demo load time: when a Pre-2.0 demo is +detected, both the compatibility and demo_compatibility flags are forced on. +Otherwise, demo_compatibility is turned off, and the less strict +compatibility option is set to the user's default, and is saved and restored +in v2.0+ demos and savegames (it can still be changed during the game with a +cheat). + +Now, demos recorded by the new engine are always recorded as v2.0 or higher, +and are not recorded with demo_compatibility turned on, because if they +were, they would lose the benefits of the new localized random number +generators which reduce the chances of demo sync failure, by making RNG +seeds local to each RNG caller. + +v1.9 demo compatibility is much better now, although it's not 100% and I +don't expect it to ever be. Some v1.9 demos work perfectly now. + +Removed limit on automap marks. Now more than 10 marks can be drawn. + +Added automap information to savegame. Whether the automap is active, +whether follow mode is turned on, and the current state of the automap +marks, are all saved in savegames now. + +Fixed help screen menu sequences. Previously the help, credit, and "ordering +info" screens were drawn in the wrong order w.r.t. F1 and "READ THIS". Also, +the skull icon was in the wrong place and covered some of the help screen's +text. Now the help menus emulate Registered Doom, Ultimate Doom, and Doom 2 +as much as possible. Ultimate Doom needed the most work, since its help +screen (F1) turned up the credits screen instead. + +Renamed "default.cfg" to "boom.cfg". + +Converted R_DrawTLColumn to assembly language, #ifdef'ing out the C code. +Verified sufficient speedup. + +Fixed badly behaving HUD display -- the HUD would turn on or off in +seemingly random ways when the screen sizes were changed. Now, the HUD +maintains its own "on/off" switch independently, although the HUD is never +displayed except on a full screen. When you go to full-screen, hud_active +determines whether the HUD is displayed, and can be toggled by pressing '=' +(going "past" full screen). hud_active remembers its status, so if you're +one who likes HUD, you can turn it on once and switch back and forth between +full-screen and the status bar, getting the HUD each time you're in full +screen; if you dislike HUD, you can turn it off and then it won't come back +just by switching to full screen. In either case, you can toggle HUD, while +in full screen mode, by using '='. If you really hate HUD, you can stick a +-1 for hud_active in the config file and it will never come up no matter +what you type. + +Fixed bug in status bar which was causing armor (and perhaps health) percent +signs to not be updated during color changes (this was related to the +all-gray percent sign "bug", but the cause was different). + +Fixed "bug" in V_DrawPatchTranslated which was drawing patches twice in the +case of their being red. Option to make status bar all red is still in +place, but V_DrawPatchTranslated and V_DrawPatch are both much faster now -- +the all- red option is unecessary to get the same performance as before the +status bar changes were made. + +Made god mode cheat work everywhere (E1M8 exit, MAP30 spawnspots, telefrags, +etc.) when compatibility mode is turned off. Previously only MAP30 +spawnspots were being handled. + +Wrote routine to automatically generate TRANMAP. TRANMAP is now generated as +part of game initialization, based dynamically on PLAYPAL. However, you can +always override it with your own lump. There is no need to store any data in +the .exe or load tranmap.wad anymore, since a fast algorithm exists to +compute TRANMAP at game startup, and it will adjust itself to a different +PLAYPAL. + +Evaluated translucency effect. A (symmetric) 50/50 translucency filter leads +to a bad color distribution in most Doom sprites. A 66/33 filter has better +results, such as a near-perfect-looking translucent blue soul sphere (the +50/50 filter makes the soul sphere have dark spots). This may just be due to +the low color resolution. + +The filter percentage used by the automatic TRANMAP setter can be set in the +config file, for minor tweaking and/or experimentation. This filter +percentage does not affect external TRANMAPs if they are loaded, since it +only affects the automatically-generated TRANMAP. + +Fixed problem with health and armor percent signs not being colored the same +as the numbers -- it felt odd, having 100 health -- 100 what? . Not sure +whether this was a bug, so made it optional: sts_pct_always_gray makes +percent signs not get drawn in the color of the numbers they are next to -- +it makes them just get drawn gray. Similar to sts_num_always_red, but for +gray percent signs. + +Enabled variable-pitched sounds (ala v1.1), turned on either by config file, +or by TNTPITCH cheat. These variable pitched sounds do not have a pwad +developer interface -- they are just random or approximate pitch bends +applied in the original code, such as making chaingun shots have random +variations (the reason I say this, is that I thought I heard someone say +that they wanted to make a wad just to use variable pitched sounds. But you +can't control the pitch yourself in the wad, not yet, anyway :) [BTW, Sample +rate, which you CAN control in wads, is a totally different beast and I'm +not talking about that here]). + +Added config file option and TNTSMART cheat to toggle last week's monster IQ +improvement (remembering former enemies, including players out of sight). +All monster IQ improvements will be switched under this as well. + +Made player cheats stay preserved across non-exit level changes +(i.e. idclev). For example, god mode stays around even after idclev. So +many times when testing stuff I typed idclev.. iddqd, that I got tired of +it. However, player powers (e.g. invisibility, rad suit) are still cleared +when changing levels. + +Added TNTAMO, TNTRAN cheats as aliases for TNTAMMO and TNTTRAN, since typing +them is less stressful (fewer repeated letters). I'm a mild RSI sufferer and +this makes certain cheat codes harder to type :( + +2/20/98: + +Changed "." to be the first iwad directory searched, instead of the exe's +dir. + +Added warning comments about savegames (modifications to mobj_s structure +may cause savegame crashes unless special measures are taken in p_saveg.c). + +Reenabled "green is turbo" message during demo playbacks as well as +netgames. + +2/16/98 killough + +Designed a much more stable random number generator process, to guard +against demo sync problems. Every basic block now has a unique random number +generator assigned to it, so that two blocks cannot interfere. There's also +a development process in place for adding new random number generator calls +without breaking demo sync, something which was not possible earlier. + +One of the reasons demo sync, such as in crusher.lmp, is so sensitive to +changes, is because a single pseudorandom number generator is used. In Jim's +example last week, where he changed a crushing ceiling and it made the +player go crazy in crusher.lmp, this could have just been because the +crushing ceiling uses a RNG call, and so if Jim (unintentionally ) +changed it so that it called the RNG a different number of times, then when +some other code called the RNG, it got totally different numbers than before +Jim's change. + +The new method makes sure that this won't happen as often, by assigning a +key (a C enum) to each P_Random() call, with at least one key per basic +block. Now the damage than can be done is limited to within each basic +block, e.g., no demo sync problems involving, say, random gunfire, can be +caused by changing the number of times the crushing ceiling code calls its +random number generator. + +This desyncing due to the RNG was what was happening with the bullet-puff +fix -- the random number generator used to generate the puffs, interfered +with the same RNG being used for everything else in Doom, so we had to +preserve the lack of bullet puffs in demo_compatibility mode. I suspect the +same is true of Rand's blockmap iterator change. + +In demo_compatibility mode, the old sequence must still be returned, in +order to preserve old demos working even remotely. They still suffer from +this problem, that changes in one part of Doom can affect the sync in +another part of Doom. The new localized RNG method only benefits demo sync +when compatibility mode is turned off, but if we use the new method to +prevent different blocks from desyncing each other, we should have fewer +problems in the future. + +Added TNTKEY[RYB][SC] cheat codes. TNTKEY followed by R,Y,B, then by S,C, +toggles the red, yellow, blue skull and card keys. A tiny change had to be +made to the status bar widget display code, to allow keys to display +properly after being removed. IDK* cheat codes are left unchanged except +that IDK adds all 6 keys in the middle of typing IDKFA, so you can stop +typing IDKFA early to get just the keys, or type it fully to get everything. + +Added TNTAMO[1-4B] ammo cheat code. TNTAMO followed by 1-4 toggles the +respective ammo (bullet, shell, cell, rocket), and TNTAMOB toggles the +backpack. TNTAMMO (two M's) felt awkward to type, so I used TNTAMO. + +Added TNTWEAP[1-9] weapon cheat code. TNTWEAP1 is the same as IDBEHOLDS +(toggles berserker fist), while TNTWEAP followed by '2' through '9' toggles +the weapon's presence (you can even remove the pistol). 9 is the SSG and 8 +is the chainsaw, in case you forgot :) The cheat is independent of custom +weapon key maps. + +All of these cheats have interactive messages, similar to IDBEHOLD, to help +guide lost souls. :) + +Added silent teleporter functions. Old silent teleporter linedef types still +work, including the switch types, but they have been changed to use a +function more like the original Doom teleporter. The linedef->linedef +teleporter which preserves almost every aspect of the player's movement, +only makes sense with walk linedef types, and its function and linedef +numbers have been renamed. + +Silent teleporter now has two forms: line->line, and line->thing. Both are +silent and try to preserve as many properties as possible, but the +line->thing type of teleporter cannot preserve player position since there +is only one point of exit. However, the line->thing silent teleporter can be +used with switches. + +2/15/98 killough + +Removed savegame-compatibility-preserving code, since it's too hard to +maintain and fix savegame bugs at the same time. Savegames from v1.9 cannot +be loaded into Boom, and of course, Boom savegames cannot be loaded into +v1.9. Fixing this is hard because some of the actual underlying data +structures have been modified and so it's not as simple as a runtime +compatibility switch. Since Doom never supported savegames across different +versions, why should we? Past demo version support is more important, even +if its not fully attainable. + +Fixed problem with monsters going to sleep after killing other monsters, +when players are out of sight. Problem was, of course, that only one +"target" was remembered at a time by the monster. Although there is a +"lastlook" field which remembers the last player being targeted, the code +does not make the monsters go after such a player unless it is visible by +line-of-sight. This is probably because the original code tried to look for +more than one player and made monsters go after the first player seen, +rather than the original target necessarily (if one player is visible, why +not go after it instead of searching for a former enemy?). Problem was, if +no players were seen, it just went back to sleep. + +Also, only up to 2 players still in the game were being searched for, in +round-robin fashion starting with the "lastlook" one, and the code used a +hard-coded "&3" instead of being based on MAXPLAYERS (only the first 4 +players could ever be seen by monsters). No more than 2 players were +searched, so if, say, player 1 was the last one looked at, and player 1 and +player 2 were both still in the game but out of the monster's sight, player +3 would not be seen even if it should be, so the monster would be put to +sleep, until a short time later when it wakes up again seeing 3. This would +cause the reaction time and sound effects to vary depending on the number of +the player first seen, as compared to number of the player last looked at. + +Now the code searches all active players starting with the last one looked +at. If none are visible, it goes after a former enemy, which could either be +a player or monster (it would be the last enemy the monster was attacking +before being forced to change his plans ). It goes after the last enemy, +regardless of whether it's visible or not, and most of the time will be a +player, two main exceptions being: 1) when a monster is ressurected by an AV +and cannot see any players, it goes after the last monster who killed it, if +a monster killed it and is still alive; 2) when a monster is being attacked +by more than one other monster, the monster remembers both of them, and +switches between them during every melee attack it receives, or when one of +them dies, unless a player is spotted during the switchover point in which +case the monster goes after the player until another melee attack by a +monster is received. + +Now, if you make a Cyberdemon or Baron get into a fight with another +monster, you can't simply get out of his view, wait for him to kill the +other monster, and sneak behind his back while he's asleep, because he +remembers you and will come after you as soon as he's finished the other +monster. The same rule applies to all monsters. + +All of this is demo_compatibility optioned, of course. If anyone has any +objections and feels the stronger compatibility option needs to be used, +because wads or players rely on monsters going to sleep after fighting other +monsters, I can change it, but I'd hate to have to get everything else +gained by turing off compatibility, just to get this. + +Ideally a stack of enemies should be used -- whenever you need a new enemy, +pop one off the stack; whenever you need to change enemies, push any current +one on the stack. However, this is overkill, given Doom's current monster AI +-- remembering one enemy is enough, and takes much less coding than a +general enemy stack. + +2/14/98 killough + +Converted R_DrawColumn to assembly and tuned it. Only a small performance +increase on a PPro, but maybe better results can be found on a Pentium or +486. AGI stalls are likely to limit the benefit which can be gained from it +on a Pentium. The inherent problem with R_DrawColumn is its serialism, since +a source pixel's offset is computed, then the source pixel is loaded, then +it is color-mapped, and finally it is written. Each of these operations must +wait for the previous to finish. To get better instruction level parallelism +requires doing two or more pixels at once, something which requires either +more CPU registers to work with, or which requires spilling registers to +memory (using mem, which is slower, to hold variables instead of registers). +There is no simple answer to this problem. A Pentium Pro / PII processor +offsets the problem by renaming registers and executing instructions out of +order (there are no AGI stalls associated with the PPro, so the serialism in +R_DrawColumn is not a problem, and so fewer registers are needed in the +source without requiring spillage). + +Some have expressed concern about scripting being too slow in Phase 3, but I +don't share this concern, since I know it's the renderer, not the rest of +Boom, which is slow right now. Try using "boom -nodraw -fastdemo crusher" +and see what I mean. It gets nearly 4000 frames per second on my machine if +you turn off the drawing. + +It's the entire renderer, not any one particular part of it. I've done case- +by-case analysis of each function, seeing how much speedup there would be if +a function such as R_DrawColumn, R_DrawSpan, etc. were replaced by no-ops, +and the speedup is not too great proportional-wise; only a 33% or so +increase speed is gained by disabling any single one of these functions -- +tuning them perfect can therefore only get so much benefit. So the work +which is taking all the time, is pretty much spread throughout the renderer, +which is good in a way, since it means there's no single bottleneck, +although it's bad since it's harder to know what to tune next. Of course, +I'm basing all this on what I've observed; it's conceivable that on a +Pentium system all this means nothing and there's clearly a single +bottleneck function. A Pentium requires much more care in instruction +scheduling than a PPro or a 486 does. It is unique among x86 processors, in +that never before or after the Pentium, has an x86 implementation had such +dependence on instruction scheduling. The 486 and below had some cases of +stalls, such as using an index register in indexed addressing, but these +stalls were usually on the order of 1-2 clocks, when the instruction already +required 4 or more, and these stalls did not occur very often. + +Thw DOS/linux version of R_DrawColumn was not used since it is not directly +usable without losing the TFE bug fix. There was a small difference in the +instruction scheduling in the DOS/linux version's inner loop, a difference +which may reduce AGI stalls and allow better pairing on the Pentium, but to +schedule the instructions in this way, requires either spilling registers +(using memory instead of registers for some variables), or writing self- +modifying code (which is what the DOS/linux code did, but which we can't do +in protected mode without a lot of trouble). It is not clear to me whether +the additional pairing opportunity can offset the register spills. + +Ported R_DrawSpan routine from readme.asm, which came with the linux source. +Required changing from Intel to AT&T syntax; replacing self-modifying code; +and removing the depedence on colormaps being aligned at 256-byte addresses. +No significant performance increase compared to the C code on a PPro; +perhaps there are improvements from this change on a Pentium or a 486. + +Made default.cfg file always get loaded/saved from the same directory as the +executable, so that executable and config are always a bundled pair. Does +not change IWAD search method -- the IWAD path is still searched in this +order: executable's directory, current directory, $DOOMWADDIR, $HOME. If +this is a problem (many people may have different iwad search preferences), +I might be able to add an IWADPATH variable to the config file (one more +reason to keep the config file bundled with the .exe instead of the iwad, so +that it can be used to set the iwad search method -- however, we'd be +changing when the default.cfg is loaded, which may have unforseen problems). + +Added "basesavegame" variable to allow global setting of savegame directory +path. Currently set to the same directory as the iwad which is loaded, so +that savegames are iwad-specific (allows the same boom.exe to run different +iwads and have separate savegames in each). + +Commented out audible HOM alarm call for now, since detection method does +not catch every instance of HOM. However, flashing red HOM indicator still +works with TNTHOM. Bright red flashing light indicates a HOM area when +TNTHOM is toggled on. + +Removed "green is turbo" message from non-net turbo games. Message still +gets printed in netgames. + +Fixed savegame plat original height bug -- the problem was that platforms in +stasis were not being saved at all. A typical symptom was that if a platform +was last moving up, but it was stopped by the player (put in stasis), then +saving the game would lose the target height it was moving up to. This is +why MAP13's yellow key platform in v1.9 Doom 2 did not always return to its +original height: if you walked out of the room while it was going up, saved +a game, and later reloaded it, the height it was at when you left the room +was the highest it could ever reach after that. + +Fix was to do what was already being done with active ceilings in stasis -- +look for active plats which match a given thinker, and save them. + +Fixed savegame crashes which were caused by not properly saving "target" and +"tracer" fields of thinkers, among other pointers inside objects. Pointers +(i.e. absolute memory addresses) were being stored in the savegame instead +of ordinals (relative positions in a linked list). Doom sets some of these +to NULL to work around this bug, but we've all seen the result: monsters are +asleep, when you load the game, etc. + +Added user-friendly message to tell the player when a different savegame +version is being loaded -- previously, when a savegame had the wrong +version, nothing happened. Now a message is printed. + + +2/8/98 killough + +Added user-configurable weapon preferences: any permutation of the 9 weapons +can be specified and the first one available is used (minor exception: if +you choose the fist over the chainsaw, it only applies to berserker fist). + +However, user preferences are disabled in network games, for network sync +and DM fairness reasons, and user preferences are also disabled when +demo_compatibility is turned on. Also, there may be some sync problems with +demos even under the new engine, unless the preferences are saved as part of +the demo. It's easy to add the preferences to the demo, if we can design a +demo format which works on old and new (in other words, two formats which +the new engine can distinguish between -- maybe version id's are enough). +I'll think on this and work on it next week. + +Regardless of whether it's a networked game, however, unless +demo_compatiblity is turned on, all players can now choose the SSG with '9', +and all players can choose a non-berserker fist even if they have a +chainsaw, by pressing '1' after the chainsaw is selected. + +The user preferences govern the order in which weapons are chosen when one +runs out of ammo, and the order in which the SSG and chainsaw are given +priority over the shotgun and fist, respectively. + +Fixed problem with SSG and BFG not being switched to when another weapon +runs out and the BFG or SSG has room for exactly one shot. I think a big +deal was made about the BFG in the newsgroups. The BFG worked just fine if +you selected it yourself, but Doom would not select it to replace another +weapon running out of ammo, even if there was 40 units of cells +available. >40 versus >=40. The SSG had a similar problem when only 2 +shells were available. + +There are three unresolved problems I noticed this weekend: + +1. Sometimes on Doom 1 E2M3 (and perhaps other levels), light levels are at +full brightness. It happened when I used -warp 2 4 and then idclev23, but +it's random and I cannot reproduce it now. I did not use idbeholdl, but the +effect was the same. It might have just been a bug in the initial coding of +the new cheat code detector. + +2. There's a "stuck note" problem of a different kind, in MAP09's music. +This occurs under DOS 6.xx, with a SBPro 2 card, and without any special +sound drivers loaded, with "Adlib" music selected (type 1). (i.e. it's a +basic non-windoze 8-bit SB system). Sound is almost perfect, but music is +not. + +3. When hundreds of monster death sounds are kicked off at once, sound stops +working until player has moved around a bit. I know what causes this +problem, but I don't have a fix right now since there's no simple way I know +of to query allegro about whether a non-looped sample has finished playing +or not. If there's a way to do this, I know how to fix the "sound overload" +problem. Try using TNTEM on MAP16 and then try the door of the first room. + +Fixed bug in TNTEM cheat, which was leaving behind lost souls when pain +elementals were killed by it. Problem was that the lost souls were spawned +several tics after the PE died, so the fix was to accelerate the spawning of +the lost souls to happen immediately during the TNTEM cheat, so that they +could be killed during the same cheat. Verified fix using MAP20. + +Make dead player sprite limit variable, in the config file. If you set it to +a negative value, there will be no limit to the number of player corpses (it +will make you Knee Deep in the Dead ). A non-negative value sets the +limit to that value. The default limit is 32, just as in Doom. + +Removed switch limit. There's still a static table which lists the switches, +but if it's expanded, or if later a lump is added to control switch +animations, the new code will be able to expand to any number of switches. + +Changed SCREENWIDTH, SCREENHEIGHT to MAX_SCREENWIDTH, MAX_SCREENHEIGHT in +many places, to allow high-res video to be easier to implement later. + +Added IDK cheat, which adds the keys. It works in the middle of IDKFA as +well, so you can type IDK and get the keys, and then if you type FA, you get +ammo as well. This allows you to add keys without ammo, without having to +remember a totally new cheat code (it's just the first part of an existing +cheat code). + +Added TNTHOM cheat to toggle HOM autodetection, instead of relying on +-devparm. HOM detector doesn't work 100% yet, but since it's just a +debugging feature anyway, I'm not going to spend much time on it until I +have more free time, or I see the solution right in front of me. Boom can't +take the place of level authors . + +2/7/98 killough + +Added wait for vertical sync, to prevent breaks in screen during +blit. Screen is much smoother now. Although page flipping is more +attractive, it is not supported by all video cards without using planar +pixels, which would slow Doom down, since we'd need to convert from Doom 8 +bpp packed pixels to planar pixels during every frame. Therefore I've +decided not to use page flipping for 320x200 mode. When higher resolutions +are also supported, this issue can be reconsidered. + +In the rare case that vsync messes up your system or slows it down too much, +you can turn it off in default.cfg. + +Changed PPro blit routine to copy forwards instead of backwards, to take +advantage of vertical sync fix. + +Fixed problem with ExM8 endings not working correctly -- the code was okay +to start off with gamemode!=commercial is necessary and sufficient. The +TNT wads set gamemode==commercial. The E2M8 ending was not working right. + +Completely rewrote cheat code detector, in anticipation of people adding +more cheats. Cheats are now governed by a simple table with 2-3 entries per +cheat code: An unencrypted string of the cheat code; a function to handle it +when it's detected; and an optional argument, either a non-negative integer +to be passed to the function, or a negative integer which indicates special +things like the idclev and idmus arguments. Cheat-handling code runs faster +and is easier to read now. Note: only the last 12 characters of a cheat code +are significant now, but this allows a clever trick using shift registers to +be used to speed up the cheat detector and make the code smaller. + +Removing the scrambling from the cheat codes was only one of the reasons for +the rewrite -- mainly, it was changed to make the C code more readable, and +to make adding new cheat codes easier. The complicated cheat structures that +were in Doom, and the overhead Doom had to maintain them during every event, +were replaced with a much simpler table-driven approach. A long long shift +register remembers up to 12 characters typed, and the cheat codes are +matched using the bottom bits of the shift register. + +As expected, the blockmap limit is a wad limitation, not an engine +limitation per se. Fixing the 64K blockmap limit requires changing the wad +definition. The blockmap limit is inherent, in that pwads use 2-byte +integers to express offsets in the blockmap. + +There are two alternatives I can think of: + +1. Add a new lump, an "extended blockmap". I would then enhance the BSP node +builder to generate it. Boom would operate the same as it does now if this +expanded blockmap is not present, otherwise, it would use the new one +instead. I'd choose to call the new blockmap "XBLOCMAP" or something like +that. + +2. On-the-fly blockmap generation. In BSP, blockmap building is the fastest +operation, and it would probably not be too slow for Boom to do it +on-the-fly as well -- it takes under a second on most levels. This would +prevent any need for an external pwad spec change, but it would mess up wads +which use blockmap special effects (know of any wads which intentionally +leave out linedefs from blocklists?), since it would be ignoring their +blockmap. It could be made contingent on the compatibility flag, but I do +not like the sound of this. + +I like #1 much better, because it means people will have to use BSP :) (just +kidding -- I think #1 is better because it doesn't break compatibility!) + +Did a systematic search for all static limits in Doom, by egrep'ing for: + +([^r]int|unsigned|long|short|double|float|char|_t).*[[]([0-9]+|[A-Z_]+)[]] + +(i.e. almost every fixed-size array declaration in Doom.) + +Found and removed limit of 32 for icon landings -- so that's why my wad +crashed!!! I was trying a special effect almost a year ago that did not work +when I had too many landings. The limit used to be 32, and no checks were +made by Doom to see whether it had been exceeded (it might therefore have +caused mysterious crashes), but now the icon landings are unlimited. + +Added DPMI lock to sound samples, to prevent swapping out of the sound +sample memory by virtual memory system. + +2/01/98 killough + +Corrected Ultimate Doom detection -- you no longer have to use doomu.wad. +doom.wad will be treated as registered or retail (ultimate) based on E4Mx +lump presence. + +Fixed music looping problem -- the music is looping when it shouldn't in +some cases -- this means that if you want to turn looping on, you need to do +it somewhere else instead of S_StartMusic. It looks like that code was right +to begin with, since many things started looping (such as the Bunny scroller +music in Doom 1/UD) which don't loop in the original Doom. + +Added version.c and version.h, to automatically record compilation date +without intervention. Right now all it does is print the date at startup, +although we can do other stuff with it. The important thing is to keep all +version-related info in version.* If you have more ideas please contact me. + +Added HOM autodetection, which beeps and displays a message in -devparm +mode. Normal mode is unaffected, since this would probably annoy regular +users of wads. Perhaps other non-fatal error messages should be switched +with -devparm too, to avoid confusing wad players who don't understand +technical issues. + +It's also possible to fill in the areas left by the HOM, say with a bright +red color, so that the HOM effect is replaced with a solid color, but this +is not done right now. + +The check for HOM is trivial and there is no negative performance impact. + +More performance tuning, by replacing some macros with inlined functions -- +apparently djgpp's codegen generates better code when functions are inlined +than when the same code is inlined using macros -- perhaps some additional +optimization phases are run when functions are inlined (not uncommon -- HP's +compilers do this). Also manually unrolled some loops in critical drawing +routines. + +Fixed opening bug -- too little space was being allocated for openings, +causing seg faults. Changed z_zone.c, so that when compiled debug, it +records where each block is allocated. With this change, z_zone.c +immediately found the bug of not allocating enough space for openings -- +source, line, and file. If you ever have problems (memory, crashes), build +debug since it gives you more info (it is much slower though, since it now +checks the zone heap for consistency during every allocation). + +Enabled -nodraw and -noblit options for -fastdemo (previously only -timedemo +allowed them). + +1/31/98 killough + +Improved sector tag search time by hashing sector tags. Algorithm reduces +the average number of sectors searched for matching tags, to usually less +than 2 per search. Old average was > 30 for original Doom levels, bigger for +larger wads like Eternal. No significant speedup for original Doom-sized +levels was detectable by me, though, probably because the original levels +have so few sectors that merely searching them from front-to-back is +probably just as fast. But for large wads with > 100 sectors I expect a +significant speedup. + +Minor performance enhancement gained by clipping a front BSP node's bounding +box against the current view. Previously only the back BSP nodes were +checked. + +Made some changes to the lump hashing algorithm again, this time, mainly to +improve program robustness, decrease memory overhead, and speed up hash +table initialization. Gameplay speed was not significantly changed, since +the hash table is already at its peak efficiency. Somewhere else in Boom has +to be attacked now as being the major bottleneck -- it looks like the +renderer, since turning off rendering lets Boom get over 3400 fps now on my +machine!!! "I know, I'll get it up for you somehow. So far we're using all +we can, just to keep up with them." -- Geordi LaForge + +Some minor code shuffling/rearrangement to improve self-documentation and/or +allow compiler inlining. + +Commented out "reload" hack, a feature which was the whole reason behind +-wart. It has no use for us now (it was an id development option), and +anyway, it does not work with the new hashing algorithms unless they are +changed some more (reloading a level might invalidate some lump entries and +the hash table would need to be recomputed). The reload hack was explicitly +called a hack in the original sources, and uses ~ (tilde) characters in +front of internal wad filenames to indicate it's in effect. It's used in +conjunction with -wart, which expects id's own set of development +subdirectories and wad files corresponding to each map under +development. (-wart still works, by the way, but it only does the same as +-warp now -- something most of us probably thought it only did all along, +since we did not have id's development subdirectories on our hard drive!!!) + +Added silent teleporter effect. Right now it's just linedef type 203 and it +is a walk repeated linedef type like 97. I'll let Jim do the linedef type +numbering assignments, as well as add the W1, S1, and SR varieties. It's +better for one person to coordinate linedef assignments, than for everyone +to simply pick the "smallest type not currently used in checked-out file". +Even though Jim will tell me there are many linedef types available , I +want him to do the assignments. + +The silent teleporter works well, even when the player is falling in +mid-air. The player's height above floor is preserved during teleport, as +are the player's momentum and angle. The teleporter is constructed with two +linedefs of type 203 having the same sector tag. Walking into one walks out +the other, and the player's position along the linedef is preserved during +teleport by interpolation. + +Rotation is also possible, as the player's momentum and angle are adjusted +according to the difference in the linedefs. If the angle and/or momentum +were set 180 degrees backwards, the player would get stuck in the +teleporter, as long as they were moving. By setting up a series of silent +teleporters back-to-back, it's possible to make a player's own momentum +carry them several places in a short period, even in mid-air. + +Fixed demo sync problems -- the change to stop using the first blockmap +entry caused all demos which were working before, to stop working. As long +as demo compatibility can be preserved as much as possible, I think it's the +correct goal, but please do not confuse means or goals with ends. If a demo +sync problem is easily preventable, it should be prevented. The blockmap +change is now qualified with "compatibility", though I'd be willing to use +the weaker "demo_compatibility" later if we're sure it's not going to change +gameplay (it caused crusher.lmp to look totally different than before, as +though certain collisions were being missed -- so perhaps the 0 entry has a +purpose). + +Looked at other changes made this week and noticed that in some cases, +"compatibility" was being used even though I think it should have been +"demo_compatibility", such as in bug fixes which don't affect gameplay much +(such as bugs which haven't been turned into effects). I'm talking about +things like the lost soul bug -- apart from making you curious about hearing +a noise behind a wall, did the lost soul bug change gameplay much? Did you +turn it into an effect in one of your levels? I doubt it. So I think the fix +for it should be turned on unless demo_compatibility is true. + +BTW, the floor height and 2s line bug fixes which Jim qualified with +"compatibility," are still under "compatibility" since many wads used those +bugs as features. + +demo_compatibility is true iff compatibility is true and a demo is being +played back or recorded. demo_compatibility is false if you are playing the +game interactively, even if compatibility mode is turned on. By using +demo_compatibility instead of compatibility for bug fixes, TNTCOMP needs to +be used less often. + +demo_compatibility is the switch used to turn on the bullet puff and rocket- +absorbing wall bugs, for example. The bullet buff can affect monster +behavior, so its absorbtion by walls is critical for demos, but the +difference is so subtle that it only affects demos significantly -- is your +gameplay going to be adversely affected by seeing bullet puffs where you +didn't before? The same might be true of the blockmap linedef 0 fix, if it's +indeed a fix. + +If in doubt, use "compatibility" and consult with me; if it does not break +demos such as crusher.lmp, demo1, demo2, demo3, and does not change gameplay +much except that it fixes a bug or does the "right" thing, then you can turn +it on all the time. If it breaks demos which are otherwise currently working +(I'm not implying all v1.9 demos must work), but it does not change gameplay +-- something like the bullet puff fix, or the level ending text's print +speed, or the arithmetic method used to answer point/line queries -- then +use "demo_compatibility". If it can affect gameplay significantly, and +without user intervention (pwads taking advantage of the new engine), then +use "compatibility". + +New linedef types, for instance, should go under "demo_compatibility" since +it takes either user intervention, or a previously bad wad, to make the new +linedef types have any effect. Even whether "demo_compatibility" is required +for new linedef types, is questionable to me -- did bad linedef types appear +often in wads, and do we want to preserve them being no-ops in compatibility +mode? If we feel the need to have the new linedef types optionally +suppressed, then I suggest a new switch, separate and apart from +compatibility, to suppress the new linedef types. The new linedef types are +almost orthogonal to the gameplay compatibility issue. + +Added mouse sensitivity menu bars, by adding support for "predefined lumps". +Now in info.c, you can define lumps which you want to be defined at load +time, and whose data is in the exe. These lumps can, of course be modified +by iwads and pwads, but they provide data in case the iwads or pwads don't +supply any. The two mouse sensitivity menu bar lumps were a tiny amount of +data, so they were converted to C code and the predefined lump idea was +generalized to support them. + +Did some minor cosmetic work on some sources, such as getting rid of some +tab characters, replacing them with their equivalents in spaces, in +accordance with the original author's comments. Re-baselining the sources is +probably not acceptable to some people right now because of disk space +reasons, but the next time it comes up, I think tab characters and trailing +whitespace at the end of lines needs to be treated too -- i.e. tab +characters, which usually stop at multiples of 8, but for which some people +have set to other sizes, should be replaced with spaces prior to checkin +unless we agree on a uniform tab stop size, which for some is not +adjustable; and, lines with blanks at the end but before newlines, should be +stripped of trailing blanks so that there are no other blanks before a +newline. + +Split compatibility variable into compatibility and +default_compatibility. Now TNTCOMP only affects compatibility, not +default_compatibility -- i.e. using the TNTCOMP cheat does not affect the +default loaded at startup. + +1/26/98 killough + +Figured out that problem with random pink tutti-frutti was unique to PPro- +specific blit routine. Since FP numbers are 80 bits on x86 machines, storing +64-bit FP values may involve loss of precision or overflow. Even though +these 64-bit FP values were only being used to load and store data, there +was an implied conversion taking place which sometimes, though rarely, +caused pink debris to show up on the walls. + +Fixed this "pink bug" by rewriting PPro blit routine in assembly instead of +C, and by using 64-bit integer loads/stores instead of 64-bit FP +loads/stores (it still uses the FPU though, and using it this way is not +possible in C with djgpp right now). Also tuned the new routine and got it +up from 510 to 525 fps. + +1/25/98 killough + +Found much simpler solution to the Medusa bug -- the Medusa bug can be fixed +if multipatched columns are constructed with the proper column headers and +footers. Previously, only the raw image data was constructed for each +column, and Doom assumed all masked columns (2s middle textures and sprites) +came from a source that contained the normal column headers, runs of posts, +etc. + +However, this fix still does not allow multipatched columns with transparent +posts. That would require changing the code which draws mulitple patches in +memory to form a texture, to be much more general, and to be able to +generate an arbitrary series of posts as output. + +Also removed arbitrary 64K limit on composite texture size -- a limit which +I suppose was there originally because of a 64K limit to segments in real +mode. This was apparently a throwback to Wolf3d. + +Tuned R_DrawSpan() by using the unrolled code that was present in the linux +port but commented out. Verified another 10-20 fps speed increase with +-fastdemo. + +Looked at djgpp's memcpy() implementation and determined that it was optimal +for Pentiums and earlier, because it uses REP MOVSD when possible. For PPros +and IIs it's faster to use a simple loop than to use REP MOVSD, but for the +important cases such as the screen blit, we already make a decision based on +the processor detected. + +Looked at current vissprite sorting implementation and determined that the +impact was negligible on "normal" wads -- only when hordes of monsters +appear, or any other situation where many sprites are visible, does the +sorting make any significant difference in fps. For 0-30 visible sprites +it's negligible. + +Tuned lump hash function by choosing a different multiplier for one of the +characters in the name. Verified ~ 1 fps increase in speed. + +Attempted to tune texture cache loads (the place where Doom pauses in the +middle of the dotted progress indicator), but determined that bottleneck was +totally disk-IO-bound. Attempted to change the order in which textures or +their patches are cached, to reduce hard drive seeks (elevator problem), but +without having more details on the mapping from file position to drive +cylinder, the benefit of trying to reduce seeks by reading the file's +patches in the order they appear in the wad, was insignificant. + +Improved sprite initialization routine to search and find sprites more +quickly, by hashing them. New algorithm probes less than 5% as many sprite +lumps, looking for matches, as the old algorithm did, based on doom2.wad. + +Rewrote sprite/flat lump merging routine to use faster and simpler +algorithm. + +Added support for tab stops in dprintf(), and increased maximum buffer size +to allow a full screen of text, in the heads up display library. Improved +z_zone memory allocator statistics to use new tab support and print stats in +real-time. + +Fixed bugs in zone memory allocator causing fragmentation and/or memory +loss. Improved support of virtual memory when physical memory goes +away. Tested it using Covers on a "7 MB virtual machine". Tuned parameters +to reduce fragmentation and improve memory usage, while maintaining +performance. Corrected some minor miscalculations of real-time statistics +for debug mode. + +1/22/98 killough + +Fixed SSG reload sound effect and pwad sound effects, by properly +considering the sampling frequency stored in the lump when constructing +allegro samples. + +Improved worst-case performance of lump hash table, by using coalesced +chaining instead of linear probing. Verified average probes/search to be +under 2 during practically all Doom playing, by watching hash statistics in +real time. + +1/19/98 killough + +Looked at hash table performance some more, and improved it by adding +redundancy to the table size to prevent "buildup". Now -fastdemo crusher +gets 500 fps on my system!!! Doom was spending too much damn time doing +linear searches. :) This version is definitely faster now than Doom 2 +v1.9. But I will not stop until it's perfect :) + +Fixed Medusa bug -- sorta. It's going to take a lot of work probably to ever +get support for transparent 2s normal textures with multiple patches, simply +because of how Doom separates rendering sprites and 2s normals, with +everything else. It would probably be easiest in that case to just write a +front-end in Doom which takes the patches and creates the composites, not +how Doom creates composites, but in the same form as the original +patches. That's the simplest way to go -- write a function which, perhaps +when loading the sprite or texture, recognizes multiple patches and merges +them into a single patch at runtime, so that the renderer does not have to +deal with multiple patches. + +However, as a compromise, I thought it might be easy to just detect if the +2s normal was multipatched, and if so, draw it as a non-transparent region +(i.e. no transparent 'posts' which can be seen through). After around 2 +hours of experimenting, and working around HOM, floor slime lines, and other +problems, I finally got it working. MEDUSA.WAD is included as a +demonstration. The only thing left to do with it is to fix any bugs found in +it. + +As for making multi-patched SEE-THROUGH 2s normals -- that's probably too +hard without major changes (but maybe not after a few more months of +studying the renderer) -- it would like supporting sprites with +multi-patched frames. That's another whole project. At least for now, you +will be able to display non-transparent multipatched textures in 2s normals, +although they will have HOM if they have see-through regions. The casual +interchanging of the words "transparent" and "singly-patched", or +"non-transparent" and "multi-patched", in Doom editing circles, is not +arbitrary, you see. + +Note: it took adding around 50 lines of code to the renderer, to fix Medusa. +That's big, considering most bug fixes in the renderer have been one-liners. + +Added support for multi-line messages, mainly for use in conjunction with +dprintf(). Newlines now are handled properly. Need to make sure this doesn't +interfere with anything else, but I don't expect so, since the affected +"heads-up" routine never supported multiple lines, and unless it sees a +newline character, it works the same as it did before. + +Commented out some some printf()s in v_video.c which showed up as noise on +the screen while drawing patches out of range. Text is nearly unreadable +while Doom is playing and flickers. If the error message was fatal enough, +then I_Error() should have been used. There may be other cases where printfs +are giving diagnostic messages, which flicker on a 320x200 screen. + +Some minor comment changes (my previous comments) and code shuffling -- +nothing of consequence. + +1/18/98 + +Figured out why some demos were getting out of sync -- the bullet puff fix +affects demos, and must not be used while demo_compatibility is turned on. +-playdemo demo1 and -playdemo demo2 work again now. However, demos are still +not 100% in sync with v1.9, nor will they probably ever be -- take a look at +DEMO1 for an example. If you play DEMO1 with -playdemo it works okay, but if +you wait for the internal demo, it gets out of sync and the imp on the ledge +that the player turns around to shoot, disappears suddenly right before the +player shoots -- very strange effect!!! Only happens in the internal +(deferred) playback, not -playdemo demo1, so I suspect it's similar to the +revenant bug, for which I have a possible fix (not ready net) commented out +in g_game.c (it does not fix DEMO1, and it's too risky to turn it on right +now). + +The demo recording method, based on player movements, is elegant, but has +sync problems as its major drawback. Doom is highly incremental, so the +slightest error magnifies itself with time -- there is nothing built-in to +self-correct errors of this sort, be it rounding errors in wall calculations +leading to a player bouncing slightly differently off of a wall, or the +distance calculations leading to a collision or miss. + +The only way these demo sync problems can be fixed, and I think the only way +VCR demos will work too, is to store information frame-by-frame, like all of +the object's positions and status. This takes a lot of memory, probably too +much. Doom is incremental, everything being expressed in terms of +deltas/tics (similar to /\x / /\ t). Also, backwards play is probably +impossible because there is no "unique inverse" of Doom. Only by recording +it fully and then playing back samples of frames can you approximate the +inverse -- you can't start at the end and go back. For that kind of +simulation, play with my toy billiard ball program which is reversible, up +to a point. + +Added dprintf() function to make it simpler to print messages to the screen. +It works just like printf(), sprintf(), fprintf(), etc., except that it +prints Doom messages on the player 1 console. Mainly used for debugging, +such as printing memory usage statistics in real-time. + +Changed default gamma correction to 3 (only affects people with a missing +default.cfg -- I hope there are no objections -- it's just I hate having to +turn up gamma correction everytime I start with a fresh default.cfg). + +Used DSRADIO sound effect to acknowledge screenshots (Ty's idea). + +Performed Rand's changes on the sources (changing the CVS logs). + +Fixed makefile, adding "debug" and "release" targets, and adding correct +source file dependencies. Now if you change a header 'make' will rebuild +Doom correctly. Separate directories OBJ and OBJDEBUG are used now instead +of DOS, so that you can separately build debug and release targets without +one of them erasing the other. Suppressed warning about deleting all files +during clean. + +Ran tests on the new engine with many special effects wads, such as Jens' +collection (SPECIAL2.ZIP or whatever). Did not notice any new regressions. +Also ran tests using Eternal 3, and some of my wads. + +Commented out my sparkles fix for now, since it causes a new kind of rarer +sparkles, which is more noticable when it happens (usually only visible when +player is running, and occurs at the bottom of textures and sprites). Will +get back to it later. + +Discovered new bug in DOOM 2 -- or in the nodes in MAP30 -- I can't believe +I never saw this before -- there's a big slime trail on the wall to the left +of the Boss' brain and it looks like the problem extends directly back to +the skull switch on the other side of the map. At first I thought this was +a new bug in Boom, but it seems not, since I can reproduce it with Doom 2 +v1.9. I hope my iwad isn't corrupted. Has everyone else seen this slime +trail but me, on the boss brain wall of MAP30? It makes a vertical line go +all the way up the wall and it can be seen solidly even if you're in +no-clipping mode and walk in-between the walls. + +Fixed funny-looking slashes in paths printed out during loading (Ty's +suggestion). However, if you type -file \waddir\thiswad.wad you will still +get the backslashes printed, though it's much more consistent now (it either +reprints what you've typed in, or uses /'s). Fixing it everywhere would take +more work. + +Renamed I_Add_Default_Extension to AddDefaultExtension and moved it from +i_system.c to w_wad.c (it did not seem right having it in i_system.c). + +Added empty stub functions for performing saves and restores of plat height +info in savegames. I will finish the functions later, when I have more time. + +Added random number generator info to the savegame, and started a very +simple extension protocol for savegames which allows new engine to accept +old or new savegames automatically. (See the source for more details -- I +think this will work to support both old and new savegames, although you +have to think hard about forward compatibility [whether any decisions we +make now prevent us from doing something in the future, etc.]). + +Changed random number generator algorithm to use longer-period LCG +generator, instead of simply a mod lookup table, although the old method is +still used if compatibility mode is selected and a demo is played +back. Tested random number generator by literally listening to it with the +sound code -- it sounds white enough. The old RNG sounded like bells and +whistles -- hardly random. + +Finished the dstrings.c changes, going so far as to make the list variable +in size (you can now add messages or remove messages and Doom will adjust +automatically to your changes -- with this change it would even have +adjusted to the missing comma bug, and displayed the concatenated messages +correctly). + +Replaced main lump searching routine with hash table scheme, just like I did +on the R_TexNumForName() routine a couple of weeks ago. Immediately got +10-15 fps improvement from this change alone -- now I get 309 fps on PPro +200, MGA graphics card, with -fastdemo crusher. With -timedemo crusher I get +101 fps. + +There are so many places in Doom where linear searching or other slow +algorithms were used: + +1. Visplanes (one rumor I once heard was that the limit was imposed BECAUSE +of the slow search -- but this is not a valid excuse, since hash tables +exist :) Right now the algorithm enjoys an average of just under 1 visplane +comparison per lookup, instead of n comparisons per lookup in the old +algorithm if there were n visplanes. + +2. Texture and lump name table lookup, when looking up a lump or tetxure by +name -- this is where a lot of Doom v1.9's time is spent while preloading +between huge levels like Eternal -- it's spending most of its time just +searching for the names. But now this has been fixed, and no matter how many +lumps or textures there are, the search is still O(1) average-case since it +uses a linear probing hash table, with n slots preallocated for n known +items. + +3. O(n^2) sorting algorithm in R_SortVisSprites -- the main reason why Doom +slowed to a crawl sometimes on levels with many monsters in view, and +probably why there was a limit imposed on the number of visible +sprites. Let's just be glad they didn't use a bubble sort :) + +4. Scroll effect linedef updates -- old algorithm updated every sidedef +which was animated, once per frame, so if there were 1000 animated linedefs, +that would be 1000x as much work per frame. New algorithm uses global +counter which is all that needs updating each frame, and then the sidedefs +are drawn with the appropriate offsets, which are only computed when the +sidedefs are visible. O(n) setup cost, O(1) overhead per frame, O(1) +overhead per visible sidedef, compared to old method's O(n) setup cost, O(n) +overhead per frame. + +5. Others? + +1/17/98 + +Refined PPro/PII blit routine optimization: when PII or PPro CPU is +detected, some optimized inlined C code is used instead of memcpy, giving +another 10-15% performance boost on those CPUs. Wrote a separate routine so +it's more readable and reusable now. + +Completely redesigned and rewrote memory wrappers and lump caching system. +Threw away dalloc.c as being too incongruous with z_zone.c, which is +essential. This means every file had to be changed which #included +"dalloc.h". New memory manager seems to work much better. Verified +memory behavior by printing statistics such as the percentage of +fragmentation, in real-time. Tuned many parameters for maximum performance +without significant fragmentation, such as the chunk size. + +The problems with memory seen earlier seem to have been aggrevated by +fragmentation. The Doom lumps tend to be very large, but very varied, in +size, and many classical methods, such as the one probably used in gcc's +libc (probably the 'buddy system'), are not prepared to deal with Doom's +widely varying sizes. Therefore the previous enhancements I did, while good +in theory, did not work well because they were built on top of libc +malloc(), free() etc. and the libc free() routine in gcc does not to +coalesce blocks often when they are freed, causing fragmentation, and making +a wad like Covers seem like it needs 100 MB to run (no, really). + +So I'm afraid our own memory pool is needed -- we have to write our own +low-level malloc, not just a wrapper (well, we can call malloc() once to +allocate the pool -- we don't need to get involved with sbrk()). + +All files were changed to use z_zone. You MUST #include "z_zone.h" if you +use malloc, free, etc. in any future code, unless it's totally +self-contained w.r.t. heap allocation, such as a library which only uses it +internally (if you set globals that other files read, or you return +malloc'ed space, etc., you need to use the wrappers defined in +z_zone.h). Contact me for more details. Usually you just need to put +#include "z_zone.h" at the top of your code, and the rest is automatic. + +Changed mmus2mid.c to follow indentation and comment style more in line with +the rest of the code, and added 'static' to internal functions and +variables, to prevent namespace pollution and to allow total +inlining. Commented out some unused functions to reduce executable's size +and/or prevent warnings. + +Added music volume support, although it's weak. On my system right now, +Allegro seems to make the volume of sounds and music much softer than usual, +and no allegro commands I've tried, such as set_volume, fix it, and both my +sound card's analog amplifier and built-in mixer are set to maximum volume. +Allegro just deafens the sound. But let's not forget, Allegro is tradeware. + +Fixed music problem on SBPro -- not sure why it doesn't work on SBPro yet +unless ADLIB is selected -- the same thing happens if the "digital sfx" midi +is used, perhaps because required samples are missing. We should probably +force ADLIB if it's available, which is what happens now (see i_sound.c). + +Still, however, the music quality is poor -- there's no "bass" to it. +Some of the notes are slightly off (it sounds like it's an octave or half +too high), and the instruments are poor. It's not my sound card or driver +which is intrinsically the problem -- music can be played back quite well +with many MUS and MID players and Doom v1.9's music player, all on my +system. It's just the current allegro & mmus2mid setup is not quite right +yet. Others can tackle this. + +I had to decrease the tempo slightly, because all songs were going by just a +little too fast. I don't know the exact figure which should be used. + +Added R_DoorClosed function for my earlier automap closed door bug -- +previously the expression used in my fix for the automap rendering bug was +in two places, but since it's a big expression, I decided a separate +function was appropriate. Also removed the exceptional case of two sky +floors, since it was not really correct (only two sky ceilings cause uppers +to be ignored -- there's no analogy with lowers for sky floors, as my logic +previously was using). + +1/16/98 + +Integrated Jim's changes to the automap and music. + +Added missing sentinel at the end of sprite list in info.c, as per Jim's +suggestion. + +Tuned the visplane hash function for better performance (simplified the +arithmetic needed to compute the hash function, as well as chose a hash +function which leads to very few visplane comparisons on several real wads). + +1/15/98 + +Fixed missing commas in dstrings.c found by Steve McCrea. + +Fixed memory thrashing by changing z_zone's purge_replacement() algorithm. + +1/11/98 -- killough + +Slightly improved keyboard routine, by adding allegro_init() to d_main.c and +by slightly tuning keyboard routine's inner loop. + +Increased default of numChannels to try to avoid confusion over sounds. +Three channels is not enough, because "3 channels" means only 3 sounds are +allowed. This was why some people experienced doors not working in my last +version -- their numChannels parameter was too low. The reason it did not +have this problem in the DOSDoom port is that it did not correctly implement +sound-stopping (which is why rockets and chainsaws sounded funny), and so +Doom's own code which stops sounds automatically based on priority, and +limited by the numChannels parameter, was not stopping them. My fix last +time made the numChannels parameter suddenly become important. + +Fixed automap bug (closed doors can be seen through) -- the bug was that +Doom did not consider a 2s linedef totally blocked (essentially 1s), if the +ceiling touched the floor on either side of the line. It DID consider the +line blocked if the ceiling on one side touched the floor on the OTHER side, +but not the SAME side, which explains why dropoffs on the other side of a +closed secret door made it consider the linedef as unblocked. Now the +automap does not show you the lines until you open the door, and the +renderer does less work anyway (previously it would draw what's behind the +door and then what's in front of it -- now it only draws the door and what's +in front of it). + +There's another place in the renderer (in the flats drawing area) which has +this same bug (incorrect determination of whether openings exist), but +changing it may make some special effects like deep water and bridges not +work anymore. Paul Schmitz's comment about "fake 3d bridges" being able to +get away with not bleeding their floor textures on ONE side, may have to do +with this anomaly in the way openings are considered, because a new floor +will be drawn if it considers the opening closed, but since we know already +how to fool it by making dropoffs, we may be able to have a "closed" area +(like a closed door) that does not have the floor redrawn in front of it. +Since all that will be gained by changing this one too, is less rendering +work (since it considers it blocked more often) or a more consistent way of +considering openings, I'm not going to change it now, since the risk is too +great it will mess up subtle special effects like bridges. + +I discovered that my original fix for automap bug made Doom start visibly +drawing some sprites which were behind closed doors. The reason is that the +automap fix creates a clipped post, and Doom somehow takes this as meaning +that a sprite cannot possibly be blocked by it. Fixed it by changing the way +that sprite clip ranges are set up, by creating sprite clip ranges when back +sectors are closed doors. Now automap and sprites seem to work right behind +closed doors, but thorough testing is required. + +In order to support sky effects and transparent doors and lifts, special- +case code had to be added to automatically recognize these cases, and to not +execute the new automap-correcting code when the linedef was part of a +transparent door or lift, or joined two sky sectors. In these cases the old +behavior still rules. + +4. Fixed span limit problem -- this was apparently the bug which was +affecting Lisa's wad, and it has probably been in every version of Doom. + +When scan lines (rows) are drawn, there are spans along the x-axis which are +simply intervals (x1,x2) which have been drawn already. When Doom draws a +texture, it clips it against previously established spans, and if the +texture is non-transparent, adds it to the list by computing the union of +the previous set of intervals and the interval of the new texture. (For more +on this rendering method, see the paper "front-to-back display of BSP trees" +on my page: http://classicgaming.com/doom/scholar/.) + +The bug was that Doom only allocated 32 elements in an array for the spans. +On a complicated wad like Lisa's, where a large outdoor scene has many +"posts" which consist of alternating transparent and non-transparent regions +(like the pilliars in her wad), the limit can add up. Doom never kept track +of the limit or whether it was even exceeded, so if it was exceeded, it +simply overwrote memory and the result was usually a venentian blinds crash, +or a seg fault in this version. + +I tried a linked-list approach, but Doom performance dropped 20%. This is +understandable, since linked-lists have more overhead than arrays and they +also do not have as much spatial locality, so cache performance +suffers. This is an example where dynamic linked lists are worse than arrays +for performance, with one module decreasing Doom's performance by 20% +overall if linked lists are used inside it instead of arrays. + +Since the number of posts is limited to approximately half of the screen +width (imagine nothing but alternating one-pixel strips), I decided to +simply increase the static limit to the theoretical maximum instead of +adding the overhead of linked lists. Only if the screen width goes up does +the static limit now go up -- it is now expressed in terms of the +SCREENWIDTH global macro. If the static limit should ever be replaced with +a dynamic one, it should use array-doubling instead of linked data +structures, since the overhead of linked lists in that one module, decreases +overall Doom performance by 20% which means it is a critical module (I need +to look at it some more and possibly tune it). I am talking about r_bsp.c. + +Removed static limits on animated flats, deathmatch starts, and intercepts +(walk linedef activations). The only static limits left that I know of, and +which can be exceeded by a pwad, are the number of crushing ceilings, and +the number of switches, activated or animated. They are the hardest static +limits to remove, based on how they are implemented right now. All other +limits, are limits which are bounded by other, more basic limits, such as +the screen resolution or the OS's limit on command-line +arguments. Increasing or eliminating these limits is not very useful right +now. + +Added const to some function parameters, and made some variables and +functions static. Besides aiding documentation, and catching programmer +mistakes, const, when applied to pointer parameters of functions, prevents +"address exposure" and aids global optimization. By knowing that a function +parameter is a pointer to a const, the compiler knows that any address +passed via that datapath cannot be modified during the call, which allows +more optimization. + +Fixed the level 8/9 special handling, at the suggestion of Stan Gula. + +Reduced the sparkles bug problem (bottom parts of middle textures have +transparent sparkles which appear randomly when the player moves -- this was +used as a hint for a secret in Monster Mansion -- if anyone objects to my +removing the sparkles bug, which is a rounding error bug, I can make it +dependent on the compatibility flag, but I don't seriously think anyone +minds). I've tested several levels, but if anyone notices strange effects at +the top or bottom of middle textures or sprites as a result of this change, +please let me know. I have not been able yet to fix the sparkles problem +completely, without there being negative side effects, so right now, the fix +is very conservative -- it only reduces the effect in half or so. When I +tried to make the fix which corrected the problem totally, I got a new kind +of dark sparkles, but it was only noticable only on 2s middle textures which +were in "mid-air", such as "true 3d" bridges. + +Fixed the scrolling wall multiple-reference special effect, by adding a +scrolling effect amount in the basic sidedef structure. Now this amount is +multiplied by the global counter and added as the offset. Right now the +amount is equal to the number of type 48 linedefs which reference the +sidedef on their right sides. + +Changed sky texture renderer to allow sky textures higher than 128. +However, all columns in Doom are still limited to being 254 units high. + +Fixed problem with playing back demo1, demo2, demo3 (fatal exit for missing +file was relaxed). Now only missing pwads cause immediate exit. + +Turned on demo_compatibility during recordings as well as playback, if +compatibility mode turned on. + +Added memory-allocation wrappers to detect out-of-memory condition when +NOWRAPPERS is defined and the smart memory allocation wrappers are +disabled. NULL return values for malloc(), realloc(), calloc(), and strdup() +are detected and handled through Doom I_Error handler. + +Tuned gcc optimization flags for maximum Doom fps performance. Currently +getting around 272 frames/second on a PPro 200, Matrox Millenium card. + +1/10/98 -- killough + +Fixed memory hogging problem without performance loss, by writing an +intelligent Z_Zone memory manager. Now a "working set" is established and +maintained by the memory manager. Initially a working set of 1.5 MB is +allowed for Z_Zone memory allocation (but allocated on demand). When this +limit is exceeded, purgable blocks are purged according to a priority queue +sorted on their frequency of allocation. If purging would cause thrashing, +which is what happens during Medusa (it's apparently a memory allocation +bug, although I don't have the exact cause yet), then the working set is +increased. + +Watched working set statistics while playing regular Doom 2 levels and +Eternal 3 MAP31. Regular Doom levels take around 2.0 MB, while Mansion takes +around a 5.5 MB working set. No fixed pool is allocated for Zone +memory. Previously, a 6 MB pool was preallocated in the Linux port. In my +previous change, no pool was allocated but nothing was freed either until +all memory was gone. This latest version attempts to allocate as little +memory as possible and still not have to reload buffers from disk. If it +notices that a block is being allocated and freed repeatedly, it will stop +freeing it and might increase the working set to a higher value. This is +similar to how real operating systems manage memory through paging. + +01/05/98 -- killough + +Added compatibility option to config file. Now you can set a user preference +in the cfg file for whether you want compatibility mode, although I support +changing this in a wad in the future (a config lump perhaps?). The command- +line should have the last word, though. Note: compatibility mode does not +necessarily imply demo sync, although when you are in compatibility mode and +play back a demo, extra measures are taken to make sure it's "really" +compatible -- these extra steps are not user-visible nor are they humanly +perceptible in gameplay except when watching demos. See below for more. + +Fixed config file loads/saves. Now you can use old DOS Doom cfg files and +they will work, except that you will need to re-adjust mouse sensitivity +most probably. It will load and save after one adjustment, though. The new +mouse sensitivity allows much more sensitivity in Doom's menu option, and +although I could never reproduce the "crash" Jim reported, I don't think it +will happen much anymore. The new range for the mouse sensitivities is 0-23 +-- I don't know how that translates into the old numbers but if you divide +the old number by 4 you should get a good approximation. + +Looked at DOSDoom3's keyboard handling, looked at Allegro docs, and +implemented my own keyboard handler similar (but better ). DOSDoom's old +keyboard handler was a hack and was part of the reason behind default.chi +and so many of the dpmi/go32 function calls. Now the only non-allegro +low-level hardware calls are the graphics ones. + +Implemented separate mouse sensitivities (horizontal and vertical). New menu +option has both horizontal and vertical, but I need a graphic artist or +someone willing to write an entire Doom font generator, to put the words on +it. Right now it just says "mouse sensitivity" 3 times: the header, +horizontal, and vertical. You can still use it, though. Current engine +design prevented me from easily adding "horizontal" and "vertical" menu +bars, since they are graphic lumps in wads. + +Changed i_system.c to use allegro timer interrupt setup routines, for better +Doom realtime clock resolution. + +Fixed a bug found recently in DOSDoom (yet another insufficient malloc size +bug in the routine which identifies Doom versions). + +01/04/98 -- killough + +Added -deh switch to turn on enhancements (thus turning off compatibility +mode). It's trivial to change the name to whatever we want, but I think it +should be made a configuration file option as well. We probably need a +-nodeh switch also, since I think the command-line should always be allowed +to override. The order should be: command-line, wad file, config file. + +In non-compatibility mode, monsters on MAP30 can no longer telefrag the +player. + +Change IDK[F]A cheats to give backpack as well as full ammo (not for +cheating's sake but for testing and benchmarking Doom with hundreds of +Things coming at you all at once!!!) Thought about making the ammo unlimited +but didn't have the time to make the status bar changes (numbers would look +funny unless I did that). I can live with typing idfa every once and a +while, just half as often now. + +Added memory allocation wrappers which were written for Jim Flynn's Patcher. +Immediately caught and fixed one bad free() which I introduced last time, +but which does not seem to be the cause of the problem in Lisa's wad, or any +other major problem. To avoid using the wrappers, which have a minor +performance hit, compile Doom with -DNOWRAPPERS, as shown in the makefile. + +Fixed compiler warning messages about possibly uninitialized variables, +usually just by adding default cases to switches. + +Improved -timedemo flag -- now it displays the FPS, and it also works even +on multilevel demos (previously it would give wrong timings if there were +multiple levels in the demo). + +Tried MAP30 with -fastdemo in god mode (interrupt a fastdemo and start a new +game, just like -timedemo, to see it) -- instead of once every 4 seconds, +the icon throws a cube around three times a second or more (more than 10x +speedup). Left Doom running this way while I was sleeping, and came back to +it when I woke up -- it was still running just fine, and there was only a +small slowdown on my PPro 200, which is about as much as Eternal or any big +wad like that gets on a 486. Previously, due to the Vissprites bug, Doom +would slow to a crawl when the number of things grew on MAP30 -- it would +stop drawing them after the limit was exceeded, but it was still slow. Now +it's not so slow. + +Added -fastdemo switch to allow you to play back demos at the fastest speed +possible -- even faster than -timedemo. What this does is turn the clock +into a counter which increments as fast as Doom can read it. Crusher.lmp is +included as an example of what "-fastdemo" means -- it's a demo I recorded +on Doom 2 v1.9 which still stays in sync (unlike a lot of demos, +unfortunately). Run it under -fastdemo and see it play back as fast as your +computer can play it back. Nothing is skipped (otherwise it would go out of +sync), except possibly the screen updates. + +Added demo_compatibility global flag, to indicate whether or not strict +compatibility is required. If you want to know whether you should use +"demo_compatibility" or just "compatibility" when making a change, ask +me. demo_compatibility is only turned on when both the compatibility +flag is set AND the user is playing back a demo -- just having compatibility +mode turned on does not necessarily enable demo_compatibilty, but +demo_compatibility implies regular compatibility. The idea is that you can +turn compatibility mode on or off with a single global flag, and then Doom +decides how strict to interpret it based on whether you are playing back a +demo or not. This is friendlier to the player than having to worry about two +compatibility flags or more than just two compatibility settings. + +Looked into demo sync problems caused by my recent changes, and found that +it was the optimization of PointOnLineSide() and PointOnSide(), to use +floating- point arithmetic instead of fixed-point arithmetic, which caused +the most demo sync problems, so I've switched those optimizations on or off +with the demo compatibility switch, improving many demos' sync problems, but +not all of them. I don't think we can expect all demos to work, but I still +like to use it as a goal to work towards with demo_compatibility. It's the +process of trying to reach demo sync, not the actual result of a demo that +works, that I'm trying to promote. + +Included documentation on MUS files (MUS_FORM.DOC) for anyone interested in +doing the music. For those interested, I suggest you also look at the +allegro documentation, which has a section on its built-in midi player. + +Sound effects have been fixed completely -- the minor problem still left +with the rockets was because a different SAMPLE must be used for each sound +or else Allegro kills all sounds of a particular SAMPLE when any one of them +is killed. Now the sound effects are indistinguisable in quality from id's +Doom. + +Lisa's problem (Doom seg faulting or other crash in her latest wad) is even +worse in DOSDoom 3 -- in DOSDoom 3, the rendering looks like it suffered a +"meltdown" and even the player's weapon does not display right. In this TNT +version of Doom, based on DOSDoom 2 but signficantly improved w.r.t. engine +limits and memory allocation, the crash occurs only when looking in a +certain direction in the wad. It is not, IMO, another engine limit, but a +bug in the current engine or on my changes to it. Engine limits are checked +for and are caught by Doom when RANGECHECK is defined. + +01/01/98 -- killough + +Note: the hi/low detail option, which was never fully implemented, has been +removed entirely by me -- there is no option anymore for low detail, and it +does not show up in the menu. This is better IMO than having a menu option +that doesn't do anything useful. The dead source code having to do with low +detail rendering has also been commented out. + +Also, screenshots have been improved so that there is no longer a 100-file +limit (although the first 100 are still named DOOM00.pcx through DOOM99.pcx, +DOOM100.pcx and above are also allowed). Gamma correction is now saved as a +part of the screenshot, and no "screenshot" message appears. (Messages can +of course be turned off, but why turn off all messages just to turn off the +screenshot acknowledgement? It messes up further screenshots unless you wait +for it to go off, or you turn off all messages completely.) + +Oh, and the "oof" sound which the player makes when trying to activate a 1s +linedef, now also works on 2s linedefs which block the player's movement. +I'm sorry if this hurts a secret (has anyone used this lack of player sounds +as a secret indicator?), but I think it's more consistent this way -- when +the player is blocked, if they try to activate it, they get the "oof" or +"noway" sound. + +>This is what we have for engine goals to date. Comments and suggestions are +>welcome as always: +> +>TNT Engine goals +>----------------- +> +>Limits +>------ +> +>+vp limit removal + +Done -- Using chained hash table search instead of linear search on a static +array. + +Array doubling was not used to solve visplane limits, but that's because +visplanes are essentially a caching problem, and caching is best done with +hash tables. + +>+2S HOM removal + +Done -- A array-doubling technique. I noticed another bug in the process -- +bad pointer comparisions in a loop -- the old code was comparing a pointer +that was one element before the beginning of an array -- ANSI-C only +requires that a pointer pointing to one element after the END of the array, +need to be considered valid for comparison, and that comparing any other +pointer values outside of the array's bounds is undefined (except for +comparision of equality with NULL). End of computer language legaleze. + +>+savegame limit removal (or at least doubling it for now) + +Done -- the savegame buffer is resized automatically when it needs room for +more data. Needs to be fully tested though, on some large wads. + +>-too many plats removal + +Done -- the original structure was a fixed array of pointers, which was +searched by probing to find active plats. Now active plats are dynamically +added to a linked list which can grow without limit. Revenge (the dead +falling player demo wad I made) was used to test it, setting off several +dozen plats simultaneously and watching them rise back in sequence in the +distance, like a rollercoaster ride. + +>-animated linedef limit removal + +Removed. The sidedefs are offset at rendering time using a global offset +counter which increases each gametic, instead of updating each sidedef +individually, and being limited to 20 animated walls. + +>Bugs +>---- +> +>-problems in DEFAULT.CHI/CFG (from the DOS port) + +Will probably take a little work. Need to decide on a config file format +(ASCII? Scancodes?). I'd prefer compatible with existing format if possible, +but if necessary we can have our own format, in which case a migration +utility would be nice. + +>-page fault on exit (from the DOS port) + +Happens randomly for me now, although it's stablized now (no more loud +sound card noises or being left in graphics mode). Same with Venetian +blind crash -- it's intercepted and things are cleaned up before exiting. + +>-fixing the inability to diagonally run (from the Linux port) +> +>+fixing IDCLEV to work (from the Linux port) +> +>-nomonsters bug fix +> +>-making illegal texture changes a nop rather than a crash +> +>-manual door triggers on 1-sided lines shouldn't cause problems. + +Done. As part of this change, the "Ummp" sound is now heard whenever a +player tries to open a door on a 1s linedef, or whenver the player tries +to activate a 2s linedef which they are blocked by due to linedef flags +or sector heights (I always hated the inconsistent "umps" along walls, +depending on their structure!!!). + +>-fixing the floor crusher problem (only kills minor monsters - can +> block player when it doesn't work) + +The AV bug is another one to include in this category (again, we should +preserve current behavior with a switch since many wads use the AV bug +as an effect). I have not looked at the AV bug yet since other things +are higher priority. + +>-trapping 0 tag trigger activation and noping them + +I disagree with this change for compatibilty reasons. + +[It's compatibility optioned in final release] + +I know some wads where this is used intentionally, like a trap to turn out +all the lights in the level. The "no more plats" crash should no longer +occur, but that was a different problem altogether. As long as it does not +crash the game, I think tag 0 triggers should still work the same way. + +>-savegame restoral fixes (failure to save original height of plats primarily) + +Working on it. Need to integrate this with my "no more plats" fix, which may +or may not require slight changes to the active plats data structure. + +>-correcting bullet/rocket/plasma absorption + +Done. Problem was in an incomplete implementation of a "sky hack" which +prevents projectiles from exploding on sky walls (which would look as +ridiculous as the absorbtion). The implementation did not take the +projectile's z-coordinate into account fully, missing cases where there are +sky textures on ceilings, but they do not affect the collision, such as when +a lower is the blocker. Required trivial tests of z coordinates to be added +to the bullet and projectile cases. + +Sky floors do not suck up fire the way sky ceilings do -- this is +potentially another thing to be fixed -- the whole thing with the walls +sucking up was due to the idea someone had that sky walls should not have +impact frames, because it would look strange to see a rocket explode in "mid +air" towards a sky. But the implementation was incomplete or just plain +wrong, not taking into account at what height the impact occurs and whether +sky exists at this height. + +>-automatic hidden line setting to reduce spiderwebs in automap. +> +>-correct display of normal textures on 2-sided lines that now extend +> into the floor or ceiling + +This is a special effect I think some people have used -- bleeding textures. +I started working on it but there were other things in my way. It's sorta +like Medusa -- messing with the 2s middle texture code, which is messy in +itself. + +[Released source doesn't have fix, for compatibility reasons, although +new 242 effect properly clips 2s linedefs which go across fake floors or +ceilings.] + +>-tutti-frutti removal + +Done. Problem was that the DrawColumn only tiled columns mod 128 -- if the +drawn column was higher than the texture, but less than 128, then it drew +whatever garbage was past the end of the texture's data (because it did not +wrap around until 128). New code allows arbitrary texture height info to be +passed to DrawColumn, and the code figures out whether to use a faster +algorithm similar to the old one, based on power-of-2 mods using ANDing, or +a more general algorithm which uses repeated subtraction but allows +arbitrary tiling on any height textures. Verified on some test wads -- +textures tile correctly now regardless of height. + +Might want to extend this item, to allow aribitrary-height textures. +[Already works!!! But column posts are still limited to height 254.] + +>-remove Venetian blind crash + +Done. Installed signal handlers and atexit handlers to catch abnormal exits +and execute cleanup code, such as restoring text screen, stopping sounds and +music, and reporting the signal if it was a segmentation violation or +illegal instruction, etc. + +>-general stabilization +> +>User Interface +>-------------- +> +>-default cmdline file extensions, always allow paths for file parameters + +Done. Any extensions can be used and missing ones are supplied defaults. +You can use extensions and arbitrary paths for demos, and you don't need +to supply .wad extensions for -file parameters. + +Also, the IWAD file determining game mode is intelligently searched for +now, in several search paths (Doom.EXE's directory, current directory, +$DOOMWADDIR directory, $HOME directory). So you can run DOOM.EXE from +anywhere now, and if an iwad file exists in the same dir as the .exe, it +is used; otherwise an iwad in the current directory is used; or one in the +$DOOMWADDIR location, etc. The precedences of each directory and each game +mode can be changed if we want. + +>-allowing demos from any version wad to be loaded and run + +Done. The version check is simply ignored now. Do we want a stronger test, +say one that prints a warning and waits for the user to press ENTER, if the +versions don't match? + +>-extending MAPs allowed to Map00-Map99, and E0-9M0-9 +> +>-permanent lights on full cheat + +Done. + +idbehold[lvri] are all infinite duration now. They stay that way until you +type the cheat again to toggle them off. + +idbehold[as] also toggle properly now -- you can remove berserker strength, +and you can add it back, with full health, at any time. The computer map +can be taken away and added back too. + +>-unattended demo completion (exit pressed) detection + +Multilevel demos may pose a problem here. Do you want a report listing all +levels which were completed, like, say, a report of the level name followed +by the duration it ran, with one level per line in the order the levels were +played? + +I propose a log file, either specified on the command-line (-logfile ?), a +default one that always gets appended to, or some combination thereof, with +a line printed for each level completed, perhaps also with the date and time +it occurred and the time elapsed in the level. + +[Never got around to it in Phase I] + +>-showing keyed door colors and possibly (with cheats) keys in automap + +I don't care, since I don't use the automap, although you must remember that +yellow and red are already used for something, and this would be confusing +to those who already use the automap. + +This argues for better customization options, such as more pull-down +menus. Right now the menu text bars are graphics in the wad, while it would +be nice if there was an automatic generator which could print arbitrary menu +text. Lots of things such as compatibility mode and automap colors would be +"user preferences" that I don't want to type on the command line (and I +don't think many people will want to). More powerful menu and configuration +options is what this boils down to. [And they were implemented!!!] + +>-allow use of caps lock as an assignable key for autorun. + +We also need to fix Right CTRL for fire, and be sure to clean up the +keyboard state before exiting (perhaps by writing to the BIOS area), +so that keys stuck in CAPS until one or both shifts are pressed, won't +happen. + +>-remove crash when menu is accessed and mouse speed is greater than 30. +>-possibly increase mouse speed maximum +>-have serarate horizontal and vertical mouse sensitivity settings. + +Not a mouser so don't know or really care -- someone more appreciative +needs to do this. + +>-3 digit frag counter. +>-frag counter for all players in the game. + +Don't care about DM, so someone more appreciative should work on it. + +>+doing all-at-once text display instead of char by char +> +>Optimization +>------------ +> +>-initial performance optimization - the obvious stuff + +Working on it -- fixed z_zone.c medusa-like slowdowns, among other things +(yes, a form of slowdown similar to Medusa in symptoms is apparently a +memory allocation problem). Tuned DrawColumn. Macroized and in some cases +hand-inlined small commonly used functions like FixedMul. Changed point / +line query functions to be macros which do intermediate floating-point +arithmetic instead of long complicated functions which must avoid fixed- +point overflow and still come up with the correct answer to where a +point is relative to a line -- only on some platforms would fixed point +arithmetic be preferable. I think we can assume a target machine of 486 +or better, so using floating point operations for faster speed, is okay. + +BTW, despite the "array doubling" coming up in our discussions before +the source was released, it has only been a good solution for around +half of the limit problems so far. + +I've used these data structures/algorithms/optimizations so far: + +1. Array doubling (dynamic array that's realloced everytime it gets too small) +2. Linear probing hash table with number of elements known a priori +3. Chained hash table (array of pointers, each to a dynamic linked list) +4. Remove the array and the requirement for it completely (wall scroll effect) +5. Singly-linked list +6. Doubly-linked list +7. Inlining small functions by changing them into macros +8. Replace fixed-point integer arithmetic with simpler FP arithmetic +9. Loop invariant code motion (precompute constant expressions out of loops) +10. Replacing the selection sort of a linked list with the quicksort of a + pointer indirection array, and removing the setup cost of the linked list +11. Giving hints to the compiler about common subexpressions, by putting them + in separate local temp variables that are used often. +12. Limiting the scope of local variables to reduce aliasing and promote GRA +13. Cache frequent search keys with small numerical values in a lookup table +14. Runtime dynamic selection of division methods based on divisor +15. Hand-unroll loops and rearrange order of operations after unrolling + +>Networking +>---------- +> +>-IP networking and modem to current capabilites at least + +I'll let Stan worry about this since I don't know diddly about networking +or its protocols, nor do I have the required test equipment. + +>Sounds and Music +>---------------- +> +>-improve sound quality as much as possible + +Fixed. DOSDoom code was unnecessarily complicated and buggy. + +>-bringing up music from .MUS lumps + +Don't have the time right now, although I could do it later. If no-one else +wants to do it, I can, but it will take research into .MID and .MUS which +I'm not very familiar with. It seems like music would be as simple as sound +with allegro -- the biggest problem would be converting the .MUS into .MID, +which for backward compatibility would need to be done by Doom at +runtime. .MID lumps in the wad is another option, but it should not done +exlusively of .MUS. + +>-check for stuck note problem - allow midi reset or force them +> +>Wad Structure +>------------- +> +>-rough specification of extended wad structure plan + +We can discuss this, but I can't overemphasize the importance of backward +compatibility. + +I've though about the idea of using a "higher-level specification" lump, +to tell more about the lower-level details of the rest of the lumps, sorta +like a configuration lump but it determines the language of the rest of the +wad. + +>Limits +>------ +> +>-pain elemental head spawn limit made variable or optional + +Done, but qualified with a switch, since it breaks compatibility. + +>-too many sprites in view limit + +Done. + +Main problem was sorting algorithm, which was O(n^2), and was unnecessarily +complicated -- it set up a linked list among the vissprites, which were, +ironically, first held in a static fixed-sized array, and then it used a +selection sort on the linked list, rotating items around a doubly-linked +list. All that was needed was to sort the original array in-place, but since +that would involve a lot of data movement because of large data items, a +separate array of pointers (a redirection list) was added by me to avoid too +much data movement, and it was sorted using qsort. A test with 500 monsters +showed no appreciable slowdown compared to an empty room, and all were +drawn. The new algorithm places no limits on the number of sprites in view, +and uses a fast sorting algorithm. After several hours of running MAP30 in +no-clipping god mode on a PPro 200, Doom still runs just fine even though +hundreds of dead monsters are there, and the player can still move around, +though a bit more slowly. + +>Bugs +>---- +> +>-medusa fix + +Working on it, although right now the slowdown is negligible compared to +what it was in the original Doom. Making multi-patched columns work on 2s +middle textures may require significant work (or it may not -- more deep +study of the code is needed). [Problem was columns were not set up right.] + +>User Interface +>-------------- +>-in-game secrets/monsters progress indicators +>-heads-up health and ammo indicators +>-allowing combination of -loadgame and -record/-playdemo +>-allow reassignment of weapons keys +>-possibly have a separate "use" and respawn key. +> +>Sounds and Music +>---------------- +> +>-replacing music with ambient sound or redbook audio as an option + +Mod (soundtracker) music would be my first choice for background music, +since it can be included in the wad structure. There are already lots of MOD +players on the net, plus thousands of .MOD files. Briefly, .MOD files are +(usually 4-channel) music files which can use any arbitrary sound sample for +instruments. They tend to be much smaller than raw digital recordings, since +the samples only need to be stored once in the file. Since arbitrary sounds +are possible, lyrics are often used. + +It should not be too hard to incorporate a .MOD player into Doom, given +Allergo's versatility, and I know of some good .MOD sounds that could be +used as background music for Doom. + +>Wad Structure +>------------- +> +>-DEH lump for wad-specified engine feature/initialization control +>-wad lump to specify switches, animations, and skies +> +>##################################################### +>LATER (not to be done earlier than the second phase): +>##################################################### +> +>Limits +>------ +> +>Bugs +>---- +> +>User Interface +>-------------- +> +>-game based menus (select skill by linedef e.g.) +>-console for game control +>-VCR style demos (very hard I think) + +One thing I think we should use to prevent sync problems is to periodically, +or perhaps every so many tics, store the player's position in the lmp so +that even if the player "bumps his head" he will get "back on track". But +monsters' positions are important too for sync purposes, and it may be too +much to save all of them. [Too much work, it turns out] + +>Optimization +>------------ +> +>-full optimization + +Working. + +(BTW, don't call it "full" optimization. Just say "more" optimization. +I'm big with qualifiers. Usually many most sometimes maybe, but never +always fully forever.) + +>Sounds and Music +>---------------- +> +>Networking +>---------- +> +>-peer-to-peer networking, joinable games + +Stan-area. + +>Wad Structure +>------------- +> +>-formal extended wad specification +>-utilities to work with new features and structures +> +>Engine Enhancement +>------------------ +> +>-generalized scripting (including an event-based engine) + +Very hard to do until current engine is modified to not use tic-based +events. + +Current engine uses "thinkers", and goes though an entire list of them +during every frame. If a "thinker" does not have anything useful to do, it +simply decreases a counter or something like that and returns. No priority +queue or the like is used. + +It's like a synchronous system as opposed to an asynchronous one. What I was +proposing was asynchronous -- an event could fire at any time and would be +handled when reached the top of the queue, unless it was cancelled earlier. + +Doom's tick-based events are handled somewhat like polling-based IO, since +the tic counter itself is polled, even across networks, to keep the game in +sync with a clock. What I was proposing with event-driven simulation would +be more like using interrupts, and the synchronization would just be another +event -- it would wait until the next gametic occurs, and then the game +would move on to processing more events. The synchronization event would be +tied in with, or would be kept close to, the screen update, so that screen +updates occur at a regular rate. + +>-extended resolution +>-sprite height +>-extended autoaiming + +Easy to change the autoaiming behavior, but this should be qualified by a +compatibility switch. + +>-look up/down, mlook +>-move up/down (jump, crouch, fly) + +None of these should be the default, IMO. + +>-gravity, friction, wind/current +>-BSP extensions - horizontal wall motion, rotation +>-sector based 3D +>-enhanced monster AI +>-inventory (view, get, drop, throw, give) and possibly "use X on Y" +>-more realistic definition of "wake up sound" + +e.g. door openings, chainsaw idle, moving platforms, etc. + +>-translucency +> +>################################################################# +>NEVER (Not forseen that we will do this til much later, if ever): +>################################################################# +> +>Engine Enhancement +>------------------ +>-light sourcing +>-mirrors +>-3dfx/GL support + +There will already be people doing this in other projects. + +>-MMX support + +MMX support, if you mean Pentium MMX, is too platform-specific IMO. Time is +better spent improving algorithms and doing optimizations which cut across +processor implementations. + +I'm for 100% compatibility unless indicated otherwise in the wad, in an +environmental variable, or on the command-line. Visual or auditory defects +such as visplanes and other engine limits can be fixed without affecting +compatibility, but changing the behavior of the engine so that certain wads +don't work anymore, is unacceptable to me, even if a command-line flag like +-compat is used to turn it on. + +I think Doom 1 testing needs to be emphasized. I'm a Doom 1'er, and use it +as often as Doom 2. Losing Doom 1 compatibility would be unacceptable to me. + +---------------------------------------------------------------------------- + +[END of Log of changes to Boom Engine] + +Lee Killough +killough@rsn.hp.com +http://classicgaming.com/doom/ +http://www.trailerpark.com/tequila/killough/ + +---------------------------------------------------------------------------- +# +# $Id: LOG_LEE.TXT,v 1.1 2000/04/09 17:55:00 proff_fs Exp $ +# +# $Log: LOG_LEE.TXT,v $ +# Revision 1.1 2000/04/09 17:55:00 proff_fs +# Initial revision +# +# Revision 1.43 1998/06/03 20:23:20 killough +# fix v2.00 demos +# +# Revision 1.42 1998/05/28 06:04:20 killough +# cleanup for public release, update +# +# Revision 1.41 1998/05/26 10:51:54 killough +# Add address at top +# +# Revision 1.40 1998/05/25 10:40:18 killough +# Fix wall scrolling bug +# +# Revision 1.39 1998/05/16 09:17:24 killough +# Make loadgame checksum friendlier +# +# Revision 1.38 1998/05/15 00:34:30 killough +# update +# +# Revision 1.37 1998/05/13 22:58:37 killough +# update +# +# Revision 1.35 1998/05/11 00:40:39 killough +# update +# +# Revision 1.34 1998/05/10 23:43:40 killough +# update +# +# Revision 1.33 1998/05/07 06:54:45 killough +# corrections +# +# Revision 1.32 1998/05/07 01:09:59 killough +# update +# +# Revision 1.31 1998/05/07 01:09:01 killough +# update +# +# Revision 1.30 1998/05/07 01:06:01 killough +# update +# +# Revision 1.29 1998/05/03 23:41:15 killough +# update +# +# Revision 1.28 1998/04/29 16:28:37 killough +# update +# +# Revision 1.27 1998/04/29 10:03:01 killough +# update +# +# Revision 1.26 1998/04/27 02:16:09 killough +# update +# +# Revision 1.25 1998/04/20 11:14:04 killough +# update +# +# Revision 1.23 1998/04/17 10:41:51 killough +# update +# +# Revision 1.22 1998/04/16 06:15:28 killough +# update +# +# Revision 1.20 1998/04/13 13:08:11 killough +# update +# +# Revision 1.19 1998/04/13 09:54:22 killough +# update +# +# Revision 1.18 1998/04/12 02:04:28 killough +# update +# +# Revision 1.17 1998/04/10 06:27:56 killough +# update +# +# Revision 1.16 1998/04/07 07:05:42 killough +# update +# +# Revision 1.15 1998/04/07 07:03:33 killough +# update +# +# Revision 1.14 1998/04/07 06:58:06 killough +# update +# +# Revision 1.13 1998/04/06 04:55:42 killough +# update +# +# Revision 1.11 1998/04/02 18:23:20 killough +# update +# +# Revision 1.10 1998/04/01 16:07:23 killough +# update +# +# Revision 1.9 1998/03/31 16:13:26 killough +# comment +# +# Revision 1.8 1998/03/28 17:47:59 killough +# update +# +# Revision 1.7 1998/03/23 03:19:37 killough +# update +# +# Revision 1.6 1998/03/16 12:25:56 killough +# update +# +# Revision 1.5 1998/03/09 07:34:13 killough +# update +# +# Revision 1.4 1998/03/02 11:33:56 killough +# update +# +# Revision 1.3 1998/02/23 04:31:50 killough +# update +# +# Revision 1.2 1998/02/17 06:35:36 killough +# update +# +# Revision 1.1 1998/02/17 06:30:17 killough +# new name +# +# Revision 1.6 1998/02/11 13:58:59 killough +# update +# +# Revision 1.5 1998/02/09 03:24:19 killough +# update +# +# Revision 1.4 1998/02/02 13:17:26 killough +# update +# +# Revision 1.3 1998/01/26 19:30:03 phares +# First rev w/o ^Ms +# +# Revision 1.2 1998/01/26 05:46:44 killough +# update +# +# + diff --git a/prboom/TXTS/BOOM/LOG_RSP.TXT b/prboom/TXTS/BOOM/LOG_RSP.TXT new file mode 100644 index 000000000..33000e1e2 --- /dev/null +++ b/prboom/TXTS/BOOM/LOG_RSP.TXT @@ -0,0 +1,1217 @@ +Here are the things I've changed/added: + +11/20/98 + +1. Re-fixed Firelines +--------------------- + +It was discovered after the release of version 2.02 that hoover.wad's +graphics were screwed up. This was due to some nasty line-splitting in a +particular part of hoover.wad that was upsetting the Fireline fix. + +Further study showed that firelines could be fixed by simply setting the +seg angles and seg offsets according to the rounded seg vertex coords. You +didn't have to try to reset the seg vertices back to the parent line, as +the previous fix attempted to do. + +Introduced the -noadjust command-line flag. If this appears on the command +line, no seg adjusting occurs. If absent, seg adjusting occurs. + +For saved games and demos, the state of seg adjusting (doing it, not doing it) +is saved in the headers and restored upon read. Any games saved, or demos +recorded, with BOOM versions less than 2.03 are NEVER adjusted when played +with BOOM versions >= 2.03 (this version). + +Files affected: p_setup.c, g_game.c, version.h, d_main.c, boom.txt + + +10/5/98 + +1. Fixed Firelines +------------------ + +Firelines are another form of slime-trail. They occur when the rounding of +coordinates for lineseg vertices on very short linesegs introduces errors +in the calculation of texture scaling and span painting. Firelines typically +are shown as floor spans being painted up to the middle of the screen, and +ceiling spans being painted down to the middle of the screen. They're named +after the original sighting of fire textures in the wrong places. + +The correction is to adjust 'bad' lineseg vertices that are 'off' of their +parent lines (from which they were split). Move them back 'on' to the parent +line, or at least as close as you can get. By using the length of the short +lineseg and the original angle of the parent line, you can get closer than +the rounded-off coordinates that you get out of the wad. These changes are +done during map setup when the segs are read in, so there's no affect on +gameplay. + +Files affected: p_setup.c, r_segs.c, r_bsp.c + + +09/16/98 + +1. Fixed sound propogation across savegames +------------------------------------------- + +Allowed sector_t.soundtarget to be saved across savegames. This field is a +pointer to a thinker that caused a sound to be propogated through the +sector. Monsters can then target this thinker. The field was getting cleared. + +Solution was to serialize the thinkers a little bit earlier and allow the +sector-saving code to store the index of the soundtarget thinker. After +the saved game is loaded, the index is used to locate the actual address of +the new target thinker. + +Files affected: p_saveg.*,g_game.c + + +09/10/98 + +1. Fixed "Stuck in DM Start" bug and re-fixed ice-bobbing bug +------------------------------------------------------------- + +The code that reduced your bobbing while stuck against a wall and on ice +caused you not to be able to free yourself from a wall when mildly stuck. +A DM Start in TNT Pursuit, Map 25 is too close to the wall and exhibits +this problem. Id's code allowed for extra momentum buildup that would +eventually free you if you weren't too far embedded in a wall. + +I backed out the original ice-bobbing code and replaced it with code that +still fixes the ice-bobbing problem, and still leaves you enough momentum +to free yourself when you're mildly stuck in a wall. + +Part of the original ice-bobbing problem (which I did not know at the +time) was that you could build up so much forward momentum pressed against +the wall that when you went to back away from the wall, it took about 2 +seconds to free yourself before you started to back up. The new code gets +rid of this problem as well. + +These changes are NOT compatibility-wrapped because they key off of new +friction values which only exist in BOOM. + +Files affected: p_map.c, p_user.c, p_mobj,c + +2. Earlier self-check +--------------------- + +While p_map.c was open for #1, I moved the self-checks in the +PIT_StompThing and PIT_CheckThing routines to the beginning of those +routines. The player is always checked against himself, and there was no +point to the other checks that preceded the self-check because eventually +the routines would have bailed out at the self-check. There were no side +effects prior to the self-check (i.e. global variables being set) so this +appears safe. + +File affected: p_map.c + + +08/11/98 + +1. Fixed DM Weapon Pickup Bug +----------------------------- + +Corrected the (new) corpse queue management code so it wouldn't leave +corpses from one map in the corpse queue when a new map was started. +When a new map begins, the mobj_t's of existing corpses are freed, but +the pointers to them in the corpse queue were left around. This affected +picking up a weapon (or any object, actually) when the queue thought a +corpse was in the same block as that weapon. When a player dies, and the +queue-management code wants to re-use a queue slot to make room for the +player's corpse, it frees the mobj_t of the previous corpse in that slot +and removes the corpse from the block links. In this case, since the corpse +doesn't exist, the weapon was removed from the block instead. Since the +weapon's mobj_t is still in the game, you can still see the weapon, but +you can't pick it up since it's no longer in the block. + +The fix is to clear the corpse queue at the beginning of each map so +the pointers to the (already freed) corpse mobj_t's no longer exist. + +Files affected: p_setup.c, g_game.c, doomstat.h + + +05/16/98 + +1. Unknown Things +----------------- + +Changed handling of unknown thing types from an abort with an error msg. +to a continuation with a warning msg posted to the screen. + +File affected: p_mobj.c + + +05/14/98 + +1. New Player Starts +-------------------- + +Added Player Starts 5-8 using doomednums of 4001-4004. This complies +with DosDoom and other ports. These starts are ignored when spawning +Things, so 8-player support is NOT implemented. + +Files affected: p_mobj.c, doomdef.h + + + +05/12/98 + +1. MT_PUSH/MT_PULL +------------------ + +Modified OVER/UNDER height/radius table in info.c for the +change of numbers from 4001->5001 and 4002->5002. + +2. OVER/UNDER +------------- + +Removed OVER/UNDER code for final Phase I source release. +Here is a list of the files changed, with their rev numbers +just prior to the change. + +1.9 d_net.c +1.4 doomstat.c +1.54 g_game.c +1.43 info.c +1.6 m_cheat.c +1.56 m_misc.c +1.21 p_enemy.c +1.34 p_map.c +1.22 p_mobj.c +1.13 p_user.c +1.12 doomstat.h +1.9 info.h +1.33 makefile + + +05/05/98 + +1. Documentation and Reformatting +--------------------------------- + +Added documentation to these files and reformatted them: + + doomdef.h + m_menu.c + p_map.c + p_mobj.c + p_user.c + m_misc.* + m_bbox.* + d_event.h + +2. Removed RECOIL and OPT_BOBBING defines +----------------------------------------- + +Removed these from all the files where they appeared. + + +05/04/98 + +1. Player Bobbing +----------------- + +Fixed problem where the player is pressed against a wall while on ice and +he's still trying to move forward with no success. The momentum code is +used to drive the bobbing effect, and--though no movement was occurring-- +momentum was still present, causing bobbing to occur. The fix was to kill +momentum. Compatibility-optioned. + +File affected: p_map.c + + +04/22/98 + +1. HU_Start +----------- + +Added a call to HU_Start() when leaving the Setup Screens to pick up any +message changes that were made. Now you don't have to wait until the +next level to see the changes. + + +2. Reset to Defaults +-------------------- + +Added a button item on each of the Setup screens to allow you to reset values +to the default values. Also collapsed more of the code. + +From the boom.txt file: + +"8) Reset to Default Values + + A "Reset to Default Values" button appears in the upper-right-hand + corner of each Setup screen (and on the first screen where there are + multiple screens). When selected, this button blinks. + + This button allows you to reset all options on this Setup screen (or + set of screens) to their default values. This is useful if you've + made a number of changes that don't seem to work together, and you'd + like to get back to a baseline. + + Pressing Enter will give you a dialogue box that asks you whether you + 'really' want to reset to the default values. Pressing 'N' exits the + dialogue without resetting. Pressing 'Y' resets all values. + +Note: Each screen has its own reset button. There is no single reset + button that covers _all_ options that appear in all Setup screens. If + you want to reset _all_ options to their default values, you'll need + to activate each button separately." + +Files affected: info.c, m_menu.c + + +04/14/98 + +1. Recoil, Bobbing, and Monster Remember +---------------------------------------- + +These items now take immediate effect when toggled from the Setup screens, +except if a demo is playing or being recorded, or a net game is taking place. +In those cases, the effect will occur later. + +File affected: m_menu.c + + +2. #if PUSHER +------------- + +Found this wrapped around an 'allow_pushers = true' in g_game.c. Since +there's no -DPUSHER in makefile, and all push code is now enabled, I removed +the wrapper. + +File affected: g_game.c + + + +04/13/98 + +1. ESC and F1 +------------- + +Cemented ESC to the MENU action and F1 to the HELP screen action when +in normal game play. This ensures that a player can always bring up +the Main Menu and HELP screens if they get themselves into a key binding +bind. + +Neither ESC nor F1 can be bound to another action that is available at +the same time as MENU and HELP. (I.e you can't rebind F1 to SAVE GAME.) + +Files affected: g_game.c, m_misc.c, m_menu.c + + +04/12/98 + +1. New Setup Screens +-------------------- + +Added these screens: + + Enemies + + At the moment, this only has the 'remember' option. This is where + any AI options should be placed in the future. + + Messages + + Options related to HUD messages (mainly colors). + + Chat Strings + + Provides the ability to change chat strings. String width is + limited to what will display on this screen. DEL, left and right + cursor movement, shifted keys, and overstrike are allowed. + + +2. Setup/Help Screen Mods +------------------------- + +Flopped the "SETTING|ACTION" description on all screens to be +"ACTION|SETTING". Most noticeable on the HELP screen, where groups had to +be rearranged to accomodate the flop. The Chat Strings caused this change, +since they look more natural the new way, especially when editing them. + +Also consolidated the Setup Screen keystroke handling code and tables +so that common code paths and table structure could be used. Trimmed 600+ +lines of code. Needed to see all the Setup screen possibilities before +doing this. + +Files affected for #1,#2: m_menu.c, m_misc.c, info.c, d_main.c + + + +04/04/98 + +1. Joystick Support +------------------- + +Added support for joysticks. Calibration needs to be done using ASETUP so +that the joystick information is available in allegro.cfg. Support is for +up to 4 buttons. Used a CH Flightstick Pro, so will watch for any incoming +problems from different types of joysticks. + +Verified rebinding of joystick buttons 1-4, and use of joystick to navigate +the menu screens. + +Files affected: i_system.c, i_video.c, m_misc.c, g_game.c, m_menu.c + + +2. Main Menu Order +------------------ + +Per user suggestion, rearranged ordering of Main Menu to place more often-used +items at the top. + +Tested with Doom shareware, Doom, Ultimate Doom, and Doom2. + +File affected: m_menu.c + + +04/03/98 + +1. Placed a border around the outside of the color palette in the Automap +setup screen. + +Added a "don't show" symbol (X) in slot 0 of the palette. When this is +chosen, the color is set to zero, which the Automap code interprets as +"don't show". + +Allowed slot 247 to be active again (it was CYAN) and to represent pure +BLACK, since that color is no longer available in slot zero. + +Files affected: m_menu.c, info.c + + +04/01/98 + +1. Fixed two Seg Violations caused by dereferencing NULL pointers in the +Setup menus. These are only seen when running in DOS Mode. Running in +a Win95 DOS window does not show the problem. + +2. Added Automap screen to the Setup menus. Now you can set automap colors +using a color palette rather than changing the numbers in BOOM.CFG. + +Files affected: m_menu.c, info.c + + +03/30/98 + +1. Extended HELP Screens +------------------------ + +Added user-defined HELP screens. + +If you press ENTER while on BOOM's dynamic HELP screen, and HELP01 has +been defined in a PWAD, HELP01 is displayed. From there, repeated ENTERs +will display HELP02, HELP03, ... to an upper limit of HELP99. + +File affected: m_menu.c + + +2. Setup Menus +-------------- + +Added the first few of several Setup Menus. They can be reached via the +"Setup" item on the Main Menu. + +When on a Setup screen, these actions are allowed: + + Up Arrow and Down Arrow move you from one item to the next. + + ENTER highlights an item and lets you change it. Any item that gets + changed is immediately in effect. + + Left Arrow brings up the previous screen if present. + + Right Arrow brings up the next screen if present. + + Backspace leaves this Setup screen and brings up the Setup menu. + + ESC leaves Menus entirely. + +(Of course, if you rebind the keys used with menus, you can perform the +above actions with the new keys...) + + +The Setup Menu now contains + + Key Bindings + + All bindable actions are represented in groups. + + If a key is bound to an action, and that key was previously bound + to another action that could be performed in the same input 'mode' + then the two bindings are swapped. I.e. if F1 brings up HELP and F2 + brings up SAVEGAME, and you bind F2 to HELP, F1 will move over and + be bound to F2. + + (Binding multiple keys to the same action should be possible in + Phase 2.) + + You can bind mouse buttons in the same manner as keys, but in + Phase 1, you're limited to the run, strafe, use, and forward actions. + Phase 2 should expand these to _any_ action. + + Joysticks aren't supported at the moment, but are represented... + + + Weapons + + This is mainly where you can define your weapon preferences. As in + Key Bindings, if you plug a weapon into a slot, whatever was there + moves over to where the new setting came from. + + + Status Bar / HUD + + Nothing unusual here. + + +Files affected: m_menu.c, info.c, d_main.c. (D_main.c was changed to support +taller menu graphics by redrawing the status bar more often.) + + +03/25/98 + +Fixed headsecnode use that was misusing memory. Required +setting it to NULL when a level started. + +File affected: g_game.c + + +03/21/98 + + +1. Pushers +---------- +Changed all pusher code to use controlling linedefs. Removed all the old +code that was using constant values based on sector special types. + +The effects have been expanded, and are controlled by new linedef types +and an on/off switch in the sector type. + +Constant pushers +---------------- +Two types of constant pushers are available, wind and current. Depending +on whether you are above, on, or below (special water sectors) the ground +level, the amount of force varies. + +The length of the linedef defines the 'full' magnitude of the force, and +the linedef's angle defines the direction. + + line type above on under + --------- ----- -- ----- + wind 224 full half none +current 225 none full full + +The linedef should be tagged to the sector where you want the effect. The +special type of the sector should have bit 9 set (0x200). If this bit +is turned off, the effect goes away. For example, a fan creating a wind +could be turned off, and the wind dies, by changing the sector type and +clearing that bit. + +Constant pushers can be combined with scrolling effects and point pushers. + +Point pushers +------------- +Two types of point pushers are available, push and pull. + +The previous implementation of these was SECTOR-SPECIFIC. The new +implementation ignores sector boundaries and provides the effect in a +circular area whose center is defined by a Thing of type 4001 (push) +or 4002 (pull). The effect will not occur if there is no line-of-sight +from a 'candidate' Thing to the center point. + +You now also don't have to set any option flags on these Things. A new +linedef type of 226 is used to control the effect, and this line should be +tagged to the sector with the 4001/4002 Thing. + +The length of the linedef defines the 'full' magnitude of the force, and +the force is inversely proportional to distance from the point source. If +the length of the controlling linedef is L, then the force is reduced to +zero at a distance of 2L. + +The angle of the controlling linedef is not used. + +The sector where the 4001/4002 Things reside must have bit 9 set (0x200) +in its type. If this is turned off, the effect goes away. + +Point pushers can be combined with scrolling effects and constant pushers. + +Affected files: p_map.c, p_spec.c, makefile, st_stuff.c, g_game.c, +m_misc.c, p_mobj.c, p_user.c, p_spec.h, doomdef.h, info.c, info.h, +p_mobj.h, p_saveg.c. + + +2. Msecnode Freelist +-------------------- +Nodes that are used to populate the touching_sectorlist and +touching_thinglist lists are now retrieved from and returned to a freelist +of nodes. When a node request is made and no nodes are available, a new +one is Z_Malloc'ed. Nodes are never Z_Free'd until the level is finished. +This should improve performance, but probably won't be noticeable. + + +3. Resurrected Monsters Sticking Together +----------------------------------------- +The Archvile resurrection code checked to see if the candidate corpse would +fit in the space around it. Corpses are considered non-solid (so you can +pass through them) so they would always fit, even if they ended up sharing +space with a neighbor after resurrection. + +This bug is fixed. + +File affected: p_enemy.c + + +03/20/98 + +1. Friction +----------- +Changed all friction (ice/sludge) code to use controlling linedefs. +Removed all the old code that was using constant values based on sector +special types. All features prior to this build have been carried over +(bouncing off walls, overcoming inertia from a dead stop, proper effect +when hanging out over ledges, etc.). + +Now, to use increased or decreased friction, a new linedef type (223) is +available. The length of the linedef controls the type and magnitude of +the friction variance. Lengths from 1->99 are used for sludge-like sectors. +(A length of 67 is equivalent to the sludge effect in prior builds.) +A length of 100 gives you normal friction. Lengths from 101->200 will +give you icy floors. (A length of 189 is equivalent to the icy effect in +prior builds.) + +The controlling linedef should be tagged to the sector(s) where you want +the effect. The special types of the sectors should have their FRICTION_MASK +bit turned on. (ox100) See log_jff.txt for details on generalized sector +types. One quick way to turn off the effect is to have a switch that +changes the sector type in a way that turns that bit off. You could +then have a 'change floor texture and type' switch that 'melts the ice' in a +sector, and turns it from icy to normal. Or a 'change floor texture and type' +switch that 'freezes' the floor, creating ice. + +If there is more than one controlling linedef for a sector, the one with +the most friction will prevail. (Sludge beats ice.) + +Details on a new structure needed for all this to work +------------------------------------------------------ +Sector_t has a thinglist that is a linked list of every object whose +center point is in a sector. + +I'm interested in knowing the complete list of objects that either are +partially in a sector or are entirely in a sector. This would be a +superset of 'thinglist'. + +Thinglist works nicely because the links run through the mobj_t's of the +objects, so it's easy to add and delete objects from the world by playing +with these links. + +In converting friction and pushers from Thing control to linedef control, +I've found that I can't rely on 'thinglist' to handle all the cases that +will arise as moving Things cross sector boundaries. For example, assume +sector A and sector B share a linedef, and A's floor is higher than B's +floor. A player perched on the linedef could have his center point in B, +but his feet on A's floor. A search through A's thinglist won't find him, +so any sector A effect won't be applied. + +To deal with this problem, I've created a new structure + +typedef struct msecnode_s + { + sector_t* m_sector; // a sector containing this object + struct mobj_s* m_thing; // this object + struct msecnode_s* m_tprev; // prev msecnode_t for this thing + struct msecnode_s* m_tnext; // next msecnode_t for this thing + struct msecnode_s* m_sprev; // prev msecnode_t for this sector + struct msecnode_s* m_snext; // next msecnode_t for this sector + } msecnode_t; + +We create a new 'thinglist' called 'touching_thinglist' that links together +a set of these nodes, each node representing a Thing that encroaches on a +sector. (Whether its center point is in the sector or not.) 'thinglist' +then becomes a subset of 'touching_thinglist'. + +We also create a second set of links through these nodes, call it +'touching_sectorlist', and add it to each Thing's mobj_t structure. As a +Thing is spawned and moves through the world, this set of links is used +to identify all the sectors the Thing encroaches upon. + +In the following diagram, Thing N encroaches on sectors M and M+1. +Thing N+1 encroaches on sectors M and M+2. + + + Thing N Thing N+1 + (touching_thinglist) (touching_thinglist) + | | + = | = | + | | | | + | V | V + -------- -------- + | | | | + Sector M ||-- | | <------ | | <------ + | node | | node | +(touching_sectorlist) ------> | | ------> | | ------> + | | | | + -------- -------- + ^ | ^ | + | | | | + | | | | + | V | | + -------- | | + | | | | + Sector M+1 ||-- | | <----------------------- + | node | | | +(touching_sectorlist) ------> | | -----------------------> + | | | | + -------- | | + | | | + | | | + | | | + = | V + -------- + | | + Sector M+2 ||-- | | <------ + | node | +(touching_sectorlist) -----------------------> | | ------> + | | + -------- + | + | + = + +When a Thing is spawned, a node gets created for each sector the Thing +appears in, and the node is linked into the lists. + +When a Thing vacates a sector, a node is unlinked and deleted. + +When a Thing enters a sector, a node is created and linked in. + +When a Thing is in a sector both before and after a move, no nodes are +deleted or added. + +When a Thing is removed, its nodes are unlinked and deleted. + +Since movement is handled at the 'Thing' level, mobj_t->touching_sectorlist +allows quick access to all nodes belonging to the Thing. + +Since sector effects are handled by Thinkers, and applied across all +Things in a sector, sector_t->touching_thinglist allows quick access to all +nodes of affected Things. + +FUTURE WORK: Keep a free list of nodes. When a node is deleted, put it on +the list. When a node is needed, take it from the list. Only go to the +memory management routines when the free list is NULL. + + +03/12/98 + +1. Checked in a friction fix that should better deal with the fact that +player speed seems to affect how friction is determined. In a +constant-friction world, this doesn't matter, but when friction is +expected to change exactly at a sector boundary, it presents a problem. +This should fix Jonathan's problem of jumping over a high-friction area +but 10% of the time picking up high friction when landing on the other +(normal) side. + +2. Adjusted the 'getting started' movement in a high-friction sector +to simulate a slow start but gaining your footing after about 2 seconds. +Suggested by Paul. + +3. Set friction to the original value if the IDCLIP cheat is on, reported +by Gary. + +4. Turned off any pusher effects if the IDCLIP cheat is on. + + +03/10/98 + +Checked in the following: + +a) A friction bug fix similar to the previous one (neighboring sectors). + +b) new cheat codes for friction (TNTICE), pushers (TNTPUSH), and over/under (TNTOVER). The global variables are still present, but commented out of the configuration code. I did not touch any of the savegame or demo code, so Lee can adjust the use of the globals to his liking. + +c) a version of m_menu.c with the #defines removed from around the HELP code. This code now behaves in the manner described by LEESFIXES. + +Here's the behavior at this point: + + ID Shareware [Read This]->ad [Enter key]->old help +BOOM Shareware [Read This]->ad [Enter key]->new help + ID Shareware [F1]->ad [Enter key]->old help +BOOM Shareware [F1]->new help [Enter key]->menu + + ID DOOM [Read This]->ad [Enter key]->old help +BOOM DOOM [Read This]->ad [Enter key]->new help + ID DOOM [F1]->ad [Enter key]->old help +BOOM DOOM [F1]->new help [Enter key]->menu + + ID Ult DOOM [Read This]->old help [Enter key]->menu +BOOM Ult DOOM [Read This]->credits [Enter key]->new help + ID Ult DOOM [F1]->old help [Enter key]->menu +BOOM Ult DOOM [F1]->new help [Enter key]->menu + + ID DOOM2 [F1]->old help [Enter key]->menu +BOOM DOOM2 [F1]->new help [Enter key]->menu + + +03/09/98 + +1. Fixed Bug in FRICTION Code +----------------------------- + +Fixed a bug in the FRICTION code where you could pick up the friction value +of a lower sector if hanging out over the edge of an upper one. (Nasty +bugger to fix!) + +Had to add a 'friction' field to mobj_t, so any savegames prior to this +are NG. + +Modules affected: p_user.c, p_map.c, p_mobj.c, p_local.h, p_maputl.c, +p_mobj.h, doomdef.h + + +2. Seperately Bound Menu and Automap Keys +----------------------------------------- + +Allowed menu, movement, and automap keys to be separately bound. + +Modules affected: m_menu.c, m_misc.c, g_game.c, am_map.c + + +3. Invisible Sprite +------------------- + +Added code--courtesy of Ty and Jim--to make the MT_PUSH Thing invisible. +(Prior to this it was a candle.) Gave MT_PUSH some height, width, and mass +to avoid possible math problems. + +Modules affected: info.c, info.h + + +03/04/98 + +1. Dynamic BOOMHELP Screen +-------------------------- + +Shareware, DOOM1, and DOOM2 help screen are now dynamic. The key bindings +shown are what's current. The screen has been rearranged to group keys by +action. The plasma rifle, bfg, and ssg are not shown in shawareware. The ssg is +not shown in DOOM1. + +This is wrapped by #define NEW_HELP_SCREENS. + +Modules affected: m_menu.c, doomdef.h, makefile + + +02/27/98 + +1. Player Bobbing is now optional +--------------------------------- + +Player bobbing can now be controlled by the player_bobbing config option. + +This is wrapped by #define OPT_BOBBING. + +Modules affected: m_misc.c, p_user.c, makefile + + +2. Weapon Selection +------------------- + +Put gamemode wrappers around SSG, plasma, and BFG at selection time +so that selecting these in registered DOOM or shareware DOOM will not +cause a Segment Violation. + +Module affected: g_game.c + + +3. Weapon Ownership +------------------- + +Changed the IDFA cheat so you can't own weapons that aren't in the version +of the game you're playing. Shareware status bar was showing plasma rifle +and BFG after IDFA. + +Module affected: st_stuff.c + + + +02/24/98 + +1. Added key_hud +---------------- + +Changed the name of the key_define config variable to key_hud since the +F5 key brings up the HUD now. + + +2. Weapon recoil +---------------- + +Added weapon recoil, including recoil during refire, which is when you +hold down the fire key. There are different recoil values for each +weapon, determined by experiment. The recoil is applied at the point +where the 'muzzle blast' appears rather than at the point where the key +is pressed, due to the slight delay when firing the BFG. + +This is wrapped by #define RECOIL, as well as a weapon_recoil config switch. + + +3. Varying friction +------------------- + +A certain amount of friction is applied to player movement so he slows +down in a realistic way. By decreasing the friction applied, we can +simulate an icy floor. By increasing it, we can simulate mud or sludge +or magnetic floors. Two new 'special sector' values, 18 and 19 are used; +18 for less friction, 19 for more. When the player enters such a sector, +the friction value changes. In all other sectors, the old friction value +is used. Friction is not applied when the player is in the air. Friction +_is_ applied if the player is walking across other Things when that is +allowed. + +On both types of floors, 'getting started' is slowed down slightly, to +simulate getting your footing. + +Future: apply varying friction to monster movement. + +This is wrapped by #define FRICTION, as well as a variable_friction +config switch. + + +4. Wall bouncing +---------------- + +On an icy floor, the player can bounce off of walls if the angle of +approach is less than 45 degrees from the wall's normal. If greater than +45 degrees, the player will slide along the wall. Some momentum is lost +during the bounce, and you'll get the 'ooof' sound. + +Future: if the player's speed is large enough, some damage is possible. + +This is wrapped by #define FRICTION, as well as a variable_friction +config switch. + + +5. Push +------- + +A new 'special sector' 20 allows for a 'water current' or 'wind' effect. +This is applied whether the player is on the ground or in the air. + +There are two types of push that can be applied: + + a) constant push across the sector + + b) push emanating from a point in the sector, or drawing the player + toward a point in the sector + +A new Thing, MT_PUSH, has been created. Place one in a sector 20 and the +code looks at the MT_PUSH's flags (options) to determine which type of +push is being applied. Bits 8->10 give the push magnitude, (values 0->7). +If bit 11 is set, then it's a type b) push, otherwise it's type a). For a +type a) push, the Thing's angle gives the push direction. For a type b) push, +if bit 12 is set, the player is pulled toward the push point, otherwise +he's pushed away. + +Type a) push force is constant across the sector. + +Type b) push force diminishes linearly as you get farther from the point +source. + +This effect can be used to create wind tunnels or water currents, ala Quake. + +Future: apply push to monsters. + +Future: if the floor is a liquid, don't apply push when the player is off +the ground. (No water current in the air, eh?) + +Future: Type b) push force could diminish exponentially. + +This is wrapped by #define PUSHERS, as well as a allow_pushers config switch. + + +6. Sprite Height +---------------- + +THIS FEATURE IS A PHASE II ITEM. IT'S DISABLED FOR PHASW I BETA! + +a) Added the ability to jump over a blocking Thing if your feet are above the +top of the Thing. + +You can now stop while above a Thing, which means that you're standing +on top of it. This allows for using Things as stepping stones, or sitting +on the head of a monster. Walking across Things takes on the same +height-checking that takes place when moving up or down steps. Friction is +also applied, as if you were on the ground. + +Special sector damage (i.e. lava) doesn't happen when you're perched atop a +Thing sitting in the sector. A push force in your sector may affect you. + +Allowing this meant that the Thing heights needed to be corrected. In +ID's code, Thing heights weren't always right, but it didn't matter much. +Now, whenever the code initializes height for a spawned Thing, it will either +use the old value (in compatibility mode) or a new value (in non-compatibility +mode). + +Added two new fields to mobj_t: above_thing, which points to the mobj_t +of the thing you're above, and below_thing, which points to the mobj_t +of the thing you're below. + +Added special 'saving/loading game' code for these new fields following +Lee's example. + +b) Added the ability to move under a blocking Thing if your head is below the +bottom of the Thing. + +Everything is wrapped by #define OVER_UNDER, as well as an over_under +config switch. + +WARNING: THIS FEATURE IS INCOMPLETE! IT HAS BUGS! IT IS HERE FOR OTHERS +TO EXAMINE. + + +02/21/98 + +1. Screen clear + +Minor change: added screen clear and color band at startup. This is +commented out until after beta. + +Addendum (2/24) : this might have been overwritten on purpose by Lee. Have to +see where to put it back in. + + +02/20/98 + +1. Initial sprite translucency + +Added preliminary ability to draw translucent sprites. This requires +the presence of tranmap.wad. This has one lump, TRANMAP, which +contains tranmap[256][256], where + + tranmap[i][j] = index of best matching color for Rk,Gk,Bk where + + Rk = (Ri + Rj)/2 + Gk = (Gi + Gj)/2 + Bk = (Bi + Bj)/2 + +This means the painted color is the average of the existing color +and the new color. Averaging RGB values simulates translucency. + +I copied R_DrawColumn, changed the copy's name to R_DrawTLColumn, and added the +changes at the point where the pixels are drawn. This keeps the +decision-making about translucency at a higher level, so as not to impact +performance more than necessary. + +I wrote a program tranfilt.exe to create TRANMAP. It's in the +boomutil directory under my home directory on the server. Use its output +with WinTex to create the lump. + +I added a config-file option "translucency". There's been some talk about +being able to turn this on/off generally for performance reasons. If we +decide not to have any default translucent Things (see below) we can remove +this later. + +I added a TNTTRAN cheat code to turn translucency on or off for testing. I added +an MF_TRANSLUCENT bit to the p_mobj.h file to indicate that a sprite is +translucent, and modified several Thing definitions in info.c to make them +translucent. (I.e. imp, smoke, BFG blast, etc.) Look for MF_TRANSLUCENT. +These should be modified later when we decide which Things _should be_ +translucent by default, if any (i.e. not imps). For Things that can be +seen during a level-editing session (i.e. imps) we'll need a way to turn +translucency on/off. + +This work is preliminary, and does not handle translucent textures. The +solution there may be slightly different, and is a Phase II or III project. + + +02/14/98 + +1. User-defined keys (bindings) + +ALL KEYS that trigger some action can now be defined in the config file. +Running BOOM with no config file will give you the key_* strings that can +be remapped. You're going to need a SETUP program though unless you +learned key codes in 4th grade. Now you can map your roommate's weapon +keys to garbage while he's asleep. + +Here are all the keys that can be remapped. If you can think of any I +missed, let me know. (A few of these were already there.) + + default.cfg key pressed + ----------- ----------- + key_right RIGHT ARROW + key_left LEFT ARROW + key_up UP ARROW + key_down DOWN ARROW + key_strafeleft ',' + key_straferight '.' + key_strafe ALT + key_speed SHIFT + key_autorun CAPSLOCK + key_fire CTRL + key_use ' ' + key_escape ESCAPE + key_help F1 + key_savegame F2 + key_loadgame F3 + key_soundvolume F4 + key_detail F5 + key_quicksave F6 + key_endgame F7 + key_messages F8 + key_quickload F9 + key_quit F10 + key_gamma F11 + key_spy F12 + key_pause PAUSE + key_backspace BACKSPACE + key_enter ENTER + key_map TAB + key_mapgobig '0' (zero) + key_mapfollow 'f' + key_mapmark 'm' + key_mapclear 'c' + key_mapgrid 'g' + key_reverse '/' + key_zoomin '=' + key_zoomout '-' + key_chat 't' + key_chatplayer1 'g' + key_chatplayer2 'b' + key_chatplayer3 'i' + key_chatplayer4 'r' Will need to add more for players > 4 + key_weapontoggle '0' (zero) + key_weapon1 '1' + key_weapon2 '2' + key_weapon3 '3' + key_weapon4 '4' + key_weapon5 '5' + key_weapon6 '6' + key_weapon7 '7' + key_weapon8 '8' + key_weapon9 '9' + +2. New weapon toggle key + +The 0 (zero) key can be used to toggle between your most preferred +weapons that still have ammo. The key always chooses 'the most preferred +weapon other than the one that's showing, that still has ammo'. Don't +like my key choice? See #1 above. + +3. SSG + +The SSG now _really_ comes up when you hit the '9' key. I had to extend +BT_WEAPONMASK from 3 bits to 4 to enable this. + +4. New Quick Reverse key + +The '/' key will give you that quick 180-degree turn like mouse players +can execute. + +5. Caps Lock is now Autorun + +The Caps Lock key toggles you in and out of Autorun. As Jim told me, it's +like hiring someone to hold down the SHIFT key while you play. Good way +to put it. + + +01/30/98 + +1. Faster end-mission display text +---------------------------------- + +In compatibility mode, the end-mission text is displayed in its normal, slow +manner. In non-compatibility mode, the text comes up all at once. + +2. Delimiter 0 bug in P_BlockLinesIterator in p_maputl.c +-------------------------------------------------------- + +The lines list carried in each block of the blockmap always starts with +a 0 and ends with a -1. These are the delimiters, and the linedef values +of lines that appear in a block are inserted between the 0 and the -1. +I.e. 0,330,332,-1 means that linedefs 330 and 332 appear in this block. +The code in P_BlockLinesIterator was treating the delimiting starting 0 +as linedef 0 and applying whatever function was passed to it to this line. +I bumped the 'list' pointer ahead of time to get past the 0 delimiter +before applying the function. BTW, a block with linedef 0 in it looks like +0,0,n,...,-1. + +(Later on, Lee wrapped it in the compatibility flag because it threw +the crusher demo out of sync. Go figure.) + + +01/28/98 + +1. Pain Elemental fires Lost Souls through blocking lines. +---------------------------------------------------------- + +A Pain Elemental can fire Lost Souls through impassable, monsters can't +cross, and one-sided lines. This is the cause of Lost Souls who are found +wandering outside the map. + +I included a check of the trajectory intersecting these kinds of lines, and +disallow the Lost Soul spawn if the trajectory is blocked. + +Also added a check to make sure the Lost Soul actually appears in a +legal space, i.e. isn't being spawned above the ceiling or below the +floor of its new sector. + +Though this is a bug, it might break demos, so it has the +compatibility flag wrapped around it. + +2. Pain Elemental can't shoot Lost Souls if >20 already present +--------------------------------------------------------------- + +Lee already removed this limit, but I extended the compatibility wrapper to +include the counting process. + +3. Archvile creates ghosts +-------------------------- + +These are those nasty, can't kill w/o a rocket bounce guys that walk through +walls after Archie resurrects their door-crushed remains. + +I suggest 3 options: + +a. no change (compatibility mode) +b. resurrected monsters are killable and cannot walk through walls + (bug fixed) +c. Archie ignores crushed monsters + +Details: + +When a monster dies, his new height is 1/4 his old height. + +When a dead monster is crushed, he's turned into a GIB and given zero +height and zero radius. + +When a monster is resurrected by Archie, Id multiplies the 'dead' height by +4 to restore it to normal. But if Archie's resurrecting a GIB, 4 times zero +is still zero. Id was also not restoring his radius. + +So a ghost is a point-monster of zero height and width. He isn't killable +because you're always shooting over his head. Nearby rocket blasts killed +him because the blast radius code probably doesn't check height, just +existence w/in the radius. + +To fix the bug, I restored the monster's height and radius at +resurrection time. + +Everything else about him was ok. I also had to fix a check that Id had to +make sure the sector was tall enough to accept the resurrected monster. +This was done before the actual resurrection, and was using the GIB's zero +height, which always fit. + + +4. Added the TNTCOMP cheat code +------------------------------- + +This toggles the compatibility flag on/off, for run-time checking of +compatibility-flag-wrapped code. + + + + + diff --git a/prboom/TXTS/BOOM/LOG_TY.TXT b/prboom/TXTS/BOOM/LOG_TY.TXT new file mode 100644 index 000000000..467621f99 --- /dev/null +++ b/prboom/TXTS/BOOM/LOG_TY.TXT @@ -0,0 +1,365 @@ +Ty Halderman - change log and diary + +10/04/98 + +If -warp without a level number was used without having specified a +PWAD, it would correctly warp to the first map in the IWAD but would +report to the screen that it was warping to the highest map number +(typically MAP32). Discovered and fixed a potential out of range +subscript while fixing that message. + +9/13/98 + +Fixed looping bug in new -warp routine that would print the wrong +map name to the console, though it would still warp correctly. Only +occurred with DOOM 1 or Ultimate DOOM. + +Updated documentation in BOOMDEH.TXT to match actual Thing bit +mnemonics for unused bits 27-30 as "UNUSED1...UNUSED4" + +8/29/98 + +Added the ability to put files on the command line and have them +understood without the -file, -deh and -playdemo switches, so long +as they come before the first -switch on the line. A file with no +extension is assumed a .wad file. .bex and .deh files are handled +as if they were preceded by -deh, and .lmp files are handled as if +they were preceded by -loadfile + +Added functionality to the -warp parameter. If -warp does not have +any map number after it, then the game will automatically warp to +the first map of all files loaded at the command line. This allows a +pwad to be run without concern for where the actual maps start. + +Added a new element to the lumpinfo_t structure: source +This is set to an enum of source_iwad, source_pwad, source_lmp +or source_pre (that latter indicates a predefined lump in the EXE, and +the others should be obvious). Anywhere that the source of a lump needs +to be determined, just use lumpinfo[i].source. This is used in the +-warp functionality above, to allow searching for the first pwad-loaded +map. + +Affected: W_WAD.C, W_WAD.H, D_MAIN.C, D_MAIN.H. Note many object files +became obsolete with these .H changes and had to be recompiled. + +Changed BOOM.TXT to describe the above functionality with sections +marked *New: + +8/28/98 + +Fixed map names and intermission texts to properly display for Final +DOOM episodes The Plutonia Experiment and TNT:Evilution. This also fixes +the title display during startup. + +Added a new mnemonic feature to BEX to allow characteristics of a Thing +to be set by real words and not just a huge "bits" number. Full list of +default Thing bits included, along with documentation on the mnemonics, +in BOOMDEH.TXT. + +Affected: BOOMDEH.TXT, D_DEH.C, HU_STUFF.C, F_FINALE.C + +7/11/98 + +Fixed par times parsing and assignment problems. Had overcompensated for +non-zero based arrays, and other general confusion. Now supports +MAP[01-32] and E[1-3]M[1-9]. Note Ultimate DOOM never did have par times +and so E4xx is not supported. + +Also corrected multi-line comments in D_DEH.H (thanks to Florian Schultze) + +6/01/98 + +Altered a pointer assignment statement for compatibility with GCC v2.8.1 + +5/17/98 + +Fixed a bug that would process the last line of each deh/bex file twice. + +5/16/98 + +Added a NULL entry to the code pointer mnemonics to allow an already +existing code pointer to be cleared with BEX codepointers. Also fixed +a bad looping logic in that area that would have caused segv's if it +had encountered invalid BEX Codepointer entries in a file. +Affected: D_DEH.C, BOOMDEH.TXT + +5/4/98 + +Completed reformatting and commenting of my assigned files, except for some +that are shared that I'm the last one in line for. + +Added support in BEX strings for the savegamename prefix (default boomsav) +so that TC's can have their own savegames (and people can have sets of +them without having to make subdirs if desired). +Affected: G_GAME.C, D_DEH.C, D_DEH.H, DSTRINGS.H, BOOMDEH.TXT + +4/26/98 + +Added mnemonic support for code pointer changing in BEX files. This will +allow anyone to plug any of the code pointers in by a readable name, not +only into the existing frames where pointers are used, but into any of the +frames. BOOMDEH.TXT expanded considerably with a full table of all existing +default code pointers in the engine. +Affected: D_DEH.C, BOOMDEH.TXT, BOOM.TXT + +4/24/98 + +Fixed a bug in multiple string reading from a .BEX file if the continuation +strings started with a blank. This was advertised to be able to work, +with leading blanks removed during string concatenation, but it was +broken. +Affected: D_DEH.C + +Put strings back to deh-modifiable for GAMMALVL0-4, which were removed +sometime around 3/23 during a merge. +Affected: M_MENU.C + +Re-removed IDK cheat. +Affected: ST_STUFF.C + +Removed some "draft" comments from BOOMDEH.TXT +Affected: BOOMDEH.TXT + +Updated DEEP97 information and some of the Dehacked support info in the +BOOM.TXT file. Updated the date at the top to 4/24/98. +Affected: BOOM.TXT + +4/11/98 + +Changes based on sources as of 9:32AM 11 Apr + +Fixed Par times entry [PARS] for bex format, documented it in BOOMDEH. +Corrected logic in WI_STUFF.C to show pars unless there is a pwad but +no deh pars patch. Found silly problem due to zero-based arrays for +DOOM2, 1-based for DOOM. +Affected: WI_STUFF.C, D_DEH.C + +Removed IDK cheat and replaced it with TNTKA to give all keys. cheat_k() +is still used, but no longer displays its own message, and IDK can't invoke +it separately. Per email earlier: +People were having problems with this because of dehacked patches that +expected to be able to change the IDKFA cheat but IDK would trigger first. +Affected: ST_STUFF.C + +Added the ability to load consecutive DEH/BEX files at the command line. +Each one is still given a default extension of BEX, then DEH if not +specified on the command line. Changed the point at which the DEHOUT.TXT +file is erased so it'll hold all of one session's entries. Added a +line to that log file, identifying the file path being loaded. +Affected: D_MAIN.C + +Added INCLUDE capability in BEX files, no nesting, with the optional +parameter NOTEXT. The notext flag says to ignore any DEH-style text blocks, +since they've probably been redone in BEX and we just want the other +stuff. Note that text changes are cumulative other than sprite names and +such. If you change X to Y and then try to change X to Z, it won't +find X any more because it's now Y. +Affected: D_DEH.C + +Note that comments about BEX design down around 3/20 in this file are not +the way it was implemented after all. + +Documented use of INCLUDE, PARS and the new banner strings STARTUPn. +Affected: BOOMDEH.TXT + +4/7/98 + +Added the logic to go searching through the default strings for text changes, +if found in the old DEH style. This should be a stopgap fix to handle lots +of text changes, so long as they are supported as valid things to change in +BOOM. Should be transparent to the users--text hacks will just start working. +Also fixed par times settings, new in BOOM. More docs coming later. + +3/30/98 + +Fixed up the text change stuff using the [STRINGS] block separator. There is +now a big descriptive file BOOMDEH.TXT that contains information on all 300+ +strings that can be changed. + +Found a bug where the included \n in a string read in wasn't being changed +to a real linefeed, so entries which were supposed to split lines wouldn't. + +Added new entries in the [STRINGS] area to change the background tiled flat +textures for behind the intermission texts. + +3/27/98 + +Finally got the deh changes in that I think are needed to complete this +monster. The usual DEH files seem to work ok, and I've got the arrays built +to be able to implement the externalized text strings, etc (see 3/20 specs). +The main goal of this run is to merge the changes so far, so we're all caught +up. More work tomorrow on making the functions work right and creating several +test deh files. + +Files changed: + + D_DEH C + WI_STUFF C + M_MENU C + HU_STUFF C + AM_MAP C + ST_STUFF C + P_DOORS C + P_SPEC C + P_INTER C + G_GAME C + D_DEH H + + +3/20/98 + +Designed bex format for new text and extension entries (this will go in a +separate doc later): + +1. Replacement level names in the automap: + + [LEVELS] + ExMx = text + MAPxx = text + +2. Replacement sprite names + + [SPRITES] + TROO = IMPY + # 4-character sprite names can be replaced by another 4-character name + # Only a full 4-character name will be accepted for key or value, and + # it is the _original_ entry that will be checked for replacement. There + # won't be any cascading effect, so you could successfully use: + TROO = POSS + POSS = SPOS + SPOS = TROO + # and not have any problems with it. + +3. Replacement sound names + + [SOUNDS] + PSTOP = platwhoa + PSTART = platgo + BSPWLK = tread1 + BAREXP = Zowie + # The key must be the name of a sound entry in DOOM, without the + # leading "S_" (ignored if present). "P_" PC sounds aren't supported + # at this time. + +4. Replacement music names + + [MUSICS] + E1M1 = mymusic + BUNNY = rabbitsong + MAP04 = fred + # Valid keys for DOOM2 music can be either the actual names + # used there, such as THE_DA and DDTBLU, or the relative names + # for the levels they go with, MAP06 and MAP08 in this example. + # Various non-level names must be entered based on the name of + # the entry in DOOM. The leading "D_" is optional and will be + # ignored if present. + +5. Replacement messages + + [MESSAGES] + # Several kinds of these, used at the various logical places + # Initially they will only replace the existing ones--with scripting + # we will be able to add new entries, and call them in the script. + # This message will appear between MAP06 and MAP07. Perhaps if there's + # time a more logical name can be used--for now it's what DOOM uses + # in the code. + C1TEXT = "The end has arrived.\n\nThis is the biggest \" + "thing you have ever seen\n\n\n\n...and you're scared." + # Note \n is used to force a linefeed, and a trailing backslash + # on a line will concatenate the next line after stripping leading + # whitespace. If you want a blank between the parts of a line, use + # a space before the backslash, as shown above with "biggest \" + GOTREDCARD = "Got a maroon computer thingy" + PD_BLUEO = "You need that blue gadget or you can't use this" + GAMMALVL4 = "This is way bright now" + QSPROMPT = "quicksave over your game named\n\n'%s'?\n\nHit Y or N." + +6. Par times + + [PARS] + +7. Cheats + + [CHEATS] + GODMODE = IDdqdWasSilly + +8. Monster Roster (cast) names + [CAST] + CC_BARON = "Harvey Wallbanger" + +9. Code Pointers, alternative + [CODEPOINTER] + Frame 245 = scream + 332 = explode + # "Frame" is optional. The name in the value is the name of the function + # that is actually called (list provided, no guessing ). Future additions + # of new code pointer routines can be handled here as well. + + +3/18/98 + +Adding text support for level names and end messages. Currently requires +a change to the format of the file, but there will be a utility written to +handle a one-way modification to a .deh file to make it work with the new +system. Either a .deh or new .bex file extension can be used. Boom EXtensions +are allowed in either one, but it's easier for the author to tell which is a +"pure" dehacked patch. + + Modules affected: D_DEH.C, D_MAIN.C + +Initial new deh extension logic inserted--unfinished merge + +Added par time modification, usage explained in sample.bex + + Modules affected: D_DEH.C + +Modified WI_STUFF.C to allow a dehacked par time patch to turn par times back +on (they are normally off when a pwad is loaded) + +Modified WI_STUFF.C to allow frag counts up to +/- 999 + +Modified P_SPEC.C to handle -frags nn counter, default 10 frags if not otherwise +specified. + +Note to self: there are switch name pairs in P_SWITCH.C + + +3/15/98 + +Fixed The Big Bug where the Thing number was off by one relative to its index in +the structures. A pox on base 1 programming in a base 0 language! + + +3/9/98 + +Added dehacked file support. Added new module D_DEH.C. + +Usage: -deh filename[.deh] + +The file is assumed to be a patch version 6 dehacked file for +DOOM version 1.9. No validation is done of that. Caveat haquor. + + - New link made to recognize the -deh command-line parameter. + + Modules affected: D_MAIN.C + + - The Misc entries were direct hacks into several places in + the code where hardcoded entries were used. To change these + required adding global ints and in some cases changing + #defines to use ints instead (MAXHEALTH, BFGCELLS). The + uppercase values have been #define'd to the variables. + + Modules affected: + P_PSPR.C for BFGCELLS, + ST_STUFF.C for things that are given for cheat codes, + P_INTER.C for the rest of them. + + - Moved MAXHEALTH out of P_LOCAL.H into P_INTER.C and made it a + variable + + - Added d_deh.c stuff to makefile + +Limitations on text substitution have forced a rethink of that--it won't be in +the 3/9/98 build. + +/// end of file diff --git a/prboom/TXTS/BOOM/SNDDRVR.TXT b/prboom/TXTS/BOOM/SNDDRVR.TXT new file mode 100644 index 000000000..db6c48dbe --- /dev/null +++ b/prboom/TXTS/BOOM/SNDDRVR.TXT @@ -0,0 +1,208 @@ +// This file contains information for setting BOOM up with sound and +// midi devices. Tables below give the numbers used with BOOM to +// select the sound card and music card. Usually setting both to -1 +// is all you need to do. If not... + +// a good plan is to run asetup.exe (Allegro setup) and configure +// your sound and music.Then after exiting and saving changes look in +// the ALLEGRO.CFG generated and copy the digi_card setting there to +// BOOM.CFG's sound_card variable and the midi_card setting to BOOM's +// music_card setting. Leave ALLEGRO.CFG in place, it won't hurt and +// may help if you have non-standard irq, dma, or port assignments. +// It also supports flipping left and right channel with flip_pan. + +// if both of music_card and sound_card are set to numbers other than +// -1, then the detect_voices option will be used if 1. This will +// detect the number of voices available on each device and set it +// accordingly. This may help if autodetection of number of voices fails. + +//---------------------------------------------------------------- +// available sound drivers in Allegro +// in BOOM.CFG set sound_card to the number in the middle below + +AUTODETECT -1 - let Allegro pick a digital sound driver +NONE 0 - no digital sound +SB 1 - Sound Blaster (autodetect type) +SB10 2 - SB 1.0 (8 bit mono single shot dma) +SB15 3 - SB 1.5 (8 bit mono single shot dma) +SB20 4 - SB 2.0 (8 bit mono auto-initialised dma) +SBPRO 5 - SB Pro (8 bit stereo) +SB16 6 - SB16 (16 bit stereo) +GUS 7 - Gravis Ultrasound (not written yet) + +//---------------------------------------------------------------- +//available midi drivers in Allegro +//in BOOM.CFG set music_card to the number in the middle below + +AUTODETECT -1 - let Allegro pick a MIDI sound driver +NONE 0 - no MIDI sound +ADLIB 1 - Adlib or SB FM synth (autodetect type) +OPL2 2 - OPL2 synth (mono, used in Adlib and SB) +2XOPL2 3 - dual OPL2 synths (stereo, used in SB Pro-I) +OPL3 4 - OPL3 synth (stereo, SB Pro-II and above) +SB_OUT 5 - SB MIDI interface +MPU 6 - MPU-401 MIDI interface +GUS 7 - Gravis Ultrasound (not written yet) +DIGMID 8 - sample-based software wavetable player +AWE32 9 - AWE32 (EMU8000 chip) + + +//---------------------------------------------------------------- +// +//Creative Labs documentation: +// + +Some instructions from Creative Labs for setting up under Win'95's +MS-DOS mode: + +Please follow these steps for setting up your sound card in Win95 MS-DOS +MODE + +First, *if you have a Plug and Play (PnP) sound card*, put the 3.5" +Plug and Play (PnP) Configuration Manager disk that came with your +sound card in your floppy drive. If you don't have the PnP disk, you +can get CTCMBBS.EXE/Library 15 Miscellaneous Files for CompuServe +customers or from ftp://ftp.creaf.com/pub/creative/patches. + +Run the CTCMBBS file in a TEMP directory. Go into Windows Explorer and +view the files in the TEMP directory, or on the 3.5" floppy disk. You +should see a file called CTCM.INF. RIGHT CLICK on CTCM.INF and then +LEFT CLICK on INSTALL. This will install the PnP drivers in +DOSSTART.BAT so when you restart your computer in MS-DOS mode, it will +load your sound card drivers and settings EXACTLY as they are in Windows 95. + +If you want to add the typical lines to the autoexec.bat (none are +needed in the config.sys), here they are: + + SET SOUND=C:\Progra~1\Creative\CTSND (or your path to SB files) + SET BLASTER=A220 I5 D1 H5 P330 T6 (see Note 1) + SET MIDI=SYNTH:1 MAP:G + + In the DOSSTART.BAT, for a PnP card, you should have a CTCM line. + +Example: + +C:\WINDOWS\CTCM + +You should also have these lines: + + C:\[path]\DIAGNOSE.EXE /S (see Note 2) + C:\[path]\MIXERSET /P /Q (Optional/see Note 3) + C:\[path}\AWEUTIL /S (Only with SB32,AWE32,AWE64,AWE64Gold) + +Note 1 - These are the defaults. Change as necessary: + + A = I/O address of the card + I = IRQ of the card + D = Low DMA channel + H = High DMA channel + P = MIDI port address + T = Card identifier - 6 means SB16/SB32/AWE32 + +Additional Note: + E = EMU8000 address for AWE32 cards - must be present for Allegro + to autodetect an AWE32 card. + +Note 2 - Diagnose is installed when the DOS/Win3.1x software is +installed. You can get another copy of it (without installing +all of the other software) under the file name of 95DOSAPP.EXE +at LIB 5 or from our internet site, ftp.creaf.com, located in +/pub/creative/drivers/sb16awe. To install it, you need to +follow the instructions in the README.TXT file that came with +95DOSAPP.EXE. + +Note 3 - MIXERSET is a program that controls your volume in DOS. To +install it, you need to follow the instructions in the +README.TXT file that came with 95DOSAPP.EXE. After the +software is installed, make sure that the MIXERSET line is in +your DOSSTART.BAT file. Run the MIXERSET program to set your +volume settings in DOS. + +---------------------------------------------------------------------- + +Some help with the DIGMID driver from Rich Nagel: + +---------------------------------------------------------------------- +Setting Up the Software Wavetable Synthesis "Digital MIDI" (DIGMID) +Music Driver with BOOM +========================================================================= + +The Allegro library that is used for sound, music, and graphics in +the BOOM engine supports "Software Wavetable Synthesis" (the "DIGMID" +driver) as a type of music device. Software Wavetable Synthesis uses +digital sound samples (Gravis .PAT patch files) or an AWE32 sound +bank (.SF2 file that has been converted to an Allegro compatable .DAT +file) that are stored on your hard drive. The sound samples (which +are recorded from real instruments) are played back at the proper +time, duration, and pitch generating much more realisitic sounding +music than standard FM OPL3 synthesis (such as a regular SBPro or an +SB16). In order to setup BOOM using Software Wavetable Synthesis for +your music, you will first will need to obtain a set of Gravis +Patches (.PAT files) or an AWE32 sound bank (.SF2 file). + +The stock Gravis Patches (about 5 mb zipped) can be found at: + +ftp://ftp.cdrom.com/.25/FreeBSD/distfiles/dgguspat.zip + +A freeware 8 megabyte AWE32 sound bank (about 7.4 mb zipped) can be +found at: + +ftp://ftp.lysator.liu.se/pub/awe32/soundfonts/8RealGS20.zip + +*NOTE: 8RealGS20.zip contains the file 8RealGS20.SF2 which is a +Windows 95 long filename. You will need to unzip this using PKUNZIP +for DOS. The short extracted filename will be 8REALGS2.SF2. + +There are also many links to freeware Gravis Patches and AWE32 +soundbanks at: + +http://www.talula.demon.co.uk/allegro/digmid.html + +If you use the stock Gravis Patches, unzip them to a directory of +your choice on your hard drive. There should be a DEFAULT.CFG file in +DGGUSPAT.ZIP, it also must be in this same directory that contains +the Gravis Patches. + +If you use the AWE32 SF2 sound bank (which I recommend, it sounds +much better than the Gravis Patches) you will need to convert it to +an Allegro compatable .DAT sound bank file using the utility that +ships with Allegro "PAT2DAT.EXE" (PAT2DAT.EXE is located in the +\ALLEGRO\TOOLS subdirectory if you have previously installed +Allegro). Simply copy 8REALGS2.SF2 and PAT2DAT.EXE to the same +directory and then type "PAT2DAT PATCHES.DAT 8REALGS2.SF2" from the +DOS prompt. This will create the file PATCHES.DAT (about 22 mb) which +is an Allegro compatable sound bank .DAT file. Copy this PATCHES.DAT +file to a directory of your choice. + +You will then need to obtain the SETUP.EXE utility that ships with +Allegro (SETUP.EXE is located in the \ALLEGRO\SETUP subdirectory if +you have previously installed Allegro). Copy the SETUP.EXE and +SETUP.DAT files to your \BOOM directory. Run SETUP.EXE and select the +proper "Digital Driver" for your sound card. Click on "Midi Driver" +and select the "Digital MIDI" option. Then click on "Patches" and +navigate around your hard drive and select the DEFAULT.CFG file that +is contained in the directory that you unzipped the Gravis Patches to +(if you are using the Gravis Patches) or the PATCHES.DAT file that +you created with PAT2DAT.EXE (if you are using the AWE32 sound bank). + +Back at the main Setup menu, click on "Test" to test out your Digital +Driver and Midi Driver selections. SETUP.EXE will create the file +ALLEGRO.CFG with your saved settings (this file must be located in +your \BOOM directory). + +That's about all there is to it. Keep in mind, the freeware 8 +megabyte SF2 and the Gravis Patches don't sound quite as good as an +AWE32 with a commercial 8 mb sound bank (such as EMU Technologies +8MBGM.SF2) loaded into 8 mb of on board AWE32 ram, but your BOOM +music will now sound about 100 times better than stock FM Synth :)) +Hey, not bad for a freebie, huh ? + +One side note: The resulting music generated using the Digital Midi +driver is "dry as a desert", there is NO "reverb" or "chorus" effects +that are normally supported by wavetable and MIDI hardware. + +If anyone needs the PAT2DAT.EXE, SETUP.EXE, or SETUP.DAT files, or +needs any help with this, send me an email. BTW, all of these +utilities including the latest BOOM build) use CWSDPMI.EXE. + +"Richard F. Nagel" diff --git a/prboom/TXTS/COMPILE.TXT b/prboom/TXTS/COMPILE.TXT new file mode 100644 index 000000000..9c890ed14 --- /dev/null +++ b/prboom/TXTS/COMPILE.TXT @@ -0,0 +1,58 @@ +Win32-Version with Visual C 5.0 +The sources compile under Visual C 5.0, available from Microsoft +For some Assembler-routines NASM is needed, available at: +http://www.cryogen.com/Nasm + +Win32-Version with Cygnus Win 32 +The sources compile under CYGWIN32, available at: +http://www.cygnus.com +Compile with this command in the prboom directory: +"make -f makfiles/makefile.c32" +if you want to make the debug version add "mode=debug" to the command +Currently with this compiler there is no sound and fullscreen-mode, because +I have no working DirectX port, and I have no assembler functions. + +Win32-Version with Minimalist GNU Win32 +The sources compile under MINGW32, available at: +there is a link on http://www.cygnus.com +Compile with this command in the prboom directory: +"make -f makfiles/makefile.m32" +if you want to make the debug version add "mode=debug" to the command +Currently with this compiler there is no sound and fullscreen-mode, because +I have no working DirectX port, and I have no assembler functions. + +DOS-Version +The sources compile under DJGPP v2, available at: +http://www.delorie.com/ +Compile with this command in the prboom directory: +"make -f makfiles/makefile.dos" +if you want to make the debug version add "mode=debug" to the command + +If you use the sources in whole or part you are bound by the software +license agreement DOOMLIC.TXT. + +Description of some #define's: + +DIRECTX + Use DirectX (only Visual C) + +NOASM + Don't use assembler functions (only Visual C) + +INSTRUMENTED +CHECKHEAP +ZONEIDCHECK + See Z_ZONE.C + +RANGECHECK + Some additional checkings for crash-security + +CEILCARRY + unknown + +RANGECHECKING + Checks the range of the episode, level and player numbers + +SNDSERV + +SNDINTR diff --git a/prboom/TXTS/COPYING b/prboom/TXTS/COPYING new file mode 100644 index 000000000..a43ea2126 --- /dev/null +++ b/prboom/TXTS/COPYING @@ -0,0 +1,339 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 675 Mass Ave, Cambridge, MA 02139, USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + Appendix: How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) 19yy + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) 19yy name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/prboom/TXTS/DOOM/ChangeLog b/prboom/TXTS/DOOM/ChangeLog new file mode 100644 index 000000000..717db2ea9 --- /dev/null +++ b/prboom/TXTS/DOOM/ChangeLog @@ -0,0 +1,922 @@ + + + + * TODO: see below, and in the "TODO" file. Enjoy! + +Mon Dec 22 20:29:16 1997 + + * CVS logs and other obsolete stuff removed. Anybody + who wants to keep some revision control now has a + clean slate to start with. + +Mon Dec 22 19:53:34 1997 + + + * i_sound.c: enabled SNDSERV, as SNDINTR for + some reason just gives ghastly results e.g. + on E4M2. Frankly, I am at a loss. SNDSERV is + now default, until the internal sound driver + is a bit more reliable. + Note that the current redundancy means that + changes like the one below will have to + be propagated manually to the soundserver + sources. + + * m_menu.c: the 4th episode is now removed with + the original doom.wad. You need to rename the + Ultimate DOOM/Special Edition retail IWAD to + doomu.wad now, or you won't see the 4th episode + in the menu. The compile time SPECIAL define + is thus gone. + +Mon Dec 22 17:08:33 1997 + + * v_video.c (V_DrawPatch): another last minute hack. + While shareware, retail, commercial, and plutonia + (being a full DOOM2 IWAD) seem to work okay now, + TNT gives an error on finishing the first mission: + "Patch at -35, -5 exceeds LFB". + I changed the error abort into a simple return, + thus the patch is ignored. The intermission screen + seems to come up okay. + * TODO: check which patch, and whether it is an IWAD + problem. + + * i_sound.c: the sound table is hardwired in + sounds.h/sounds.c. As our current crude + sound handling simply loads *all* sounds at + startup, we are going to miss some with DOOM1 + WAD files. I could skip them, but decided to + load a placeholder instead (dspistol). It might + be good to use a distinct default sound for + WAD debug purposes. A zero length sound lump + would work, but would not be noticeable. + Anyway, shareware and retail work now. + * TODO: implement proper handling for missing + lumps, sound and otherwise. + Perhaps move sound table into WAD? + + * g_game.c (G_DoPlayDemo): finally removed the + annoying "Demo is from a different game version" + abort. It now simply declines to playback the + demo, and waits for user input on some + do_nothing screen. + + * doomdef.h&Cie.: Lesson of the day - do not + replace a bunch of booleans with an enum and + use the same identifiers. Point in case: + "if ( commercial )" will not give an error, + and will always be true as long as the enum + value is greater than zero. + I found that the DOOM2 vs. DOOM differences + are everywhere (weapons, monsters, doors). + Number of episodes varies from shareware/commercial + to registered to retail, while commercial has + a unique set (two of them, counting the german + edition) of maps in one episode. Plus, TNT and + Plutonia add some TITLE strings to the mixture. + + Well, Plutonia and TNT are treated as DOOM2 for + now, so you will miss the startup message. + + * wi_stuff.h (NUMEPISODES): removed SPECIAL switch. + It is no 4 times 9 for wi_stuff.c internal + static arrays - doesn't matter. + * TODO: unified handling with DOOM 2 - dynamic + allocation of arrays. + + * i_sound.c (I_UpdateSound): okay, I separated + the mixing, now done synchonously, along with + a flag signalling the timer that the mixing buffer + has been updated. The handler is now very short, + and I tried several intervals down to 50usecs, + w/o complaints. Now the man page says: + "system timer resolution currently 10ms". Odd. + Anyway, while the double shotgun/plasma rapid + fire problem seems to be a bit less disturbing + at higher refresh, it's still there. I set the + interval to 500usec, which is sufficient for + avoiding any buffer update misses. + Conclusion after just two days of experimentation: + yep, sound driver code isn't fun at all. + + As for the bug - well, Dave Taylor suggested + close distance getting into a divide-by-near-zero + situation, screwing up the volume. I can't figure + why latency of an external sound driver or screen + size affect this, but I am running out of ideas. + + * i_sound.c: + Some more experimentation with the timer driven + sound. It doesn't work well using an intervall + of less then 30 msecs - there will be artifacts + with say 50 msecs. This is pretty obvious with + a target frame rate of at least 30fps, methinks. + Using the REAL/SIGALRM timer with 30msec gets + rid of the artifacts, it seems - at the expense + of slowing down things on a P133 to a noticeable + jerkiness. Bah. + +Mon Dec 22 00:36:54 1997 + + * info.c: and i_video.c and i_sound.c - don't ask + me why some Linux header files are different with + gcc vs. g++, or what the complaint about the g++ + complaint info.c state table is all about: + "initializer element for `states[..].action.acp1' + is not constant" + Undid some changes, compiled with gcc, playtested, + seems okay. Done for today... yesterday. + + * i_net.c (ntohl): okay, htons/htonl, ntohs,ntohl + are back to haunt me. Copied the macros that + on my box aren't used for whatever reason directly + into the source. Got rid of all other multiple and + undefined references. CC=g++ now compiles (still + many warnings) and links, but the binary dumps a + core after Init PlayLoop. So be it. + +Sun Dec 21 12:38:08 1997 + + * p_enemy.c (P_NewChaseDir): changed tdir to int, + removed the LUTs - spurious locks were due to + endless loops created by boneheaded predecessor + map. Has to be a better way to do enum dirtype_t + anyway. Problem seems to be fixed. + + * CC=gcc again, this time loads of #includes to + fix "implicit declarations, and one or two + unused variables. DOOM now compiles without + any -Wall warnings left, as C. + + * Bug: compiled the reworked code with gcc. Within a + solid while of testing and blasting away, it + locked once. Got a core, which gdb doesn't grok. + Bah. + + * TODO: okay, linkage of g++ build modules give loads + of errors, because we have many implicits, plus + missing #pragma implementation causing multiple + definitions. Yet, this is the very first time DOOM + was compiled as C++ without a parsing error. So there. + + * sounds.c: included doomtype.h and removed yet another + enum { false, true } definition. + + * p_saveg.c (misc): several. + * p_mobj.c (P_SpawnMobj): (actionf_p1)P_MobjThinker + * p_spec.c (EV_DoDonut): (action_p1) T_MoveFloor (twice). + * p_plats.c (EV_DoPlat): (actionf_p1) T_PlatRaise. + * p_plats.c (EV_StopPlat): (actionf_v)NULL. + * p_plats.c (P_ActivateInStasis): same + * p_lights.c (P_SpawnGlowingLight): (actionf_p1) T_Glow. + * p_lights.c (P_SpawnStrobeFlash): (actionf_p1) T_StrobeFlash. + * p_lights.c (P_SpawnLightFlash): (actionf_p1) T_LightFlash. + * p_lights.c (P_SpawnFireFlicker): (actionf_p1) T_FireFlicker. + * p_floor.c (EV_DoFloor): (actionf_p1) T_MoveFloor. + * p_floor.c (EV_BuildStairs): same (twice). + * p_doors.c (EV_VerticalDoor): (actionf_p1)T_VerticalDoor. + * p_doors.c (P_SpawnDoorCloseIn30): same + * p_doors.c (P_SpawnDoorRaiseIn5Mins): same + * p_doors.c (EV_DoDoor): same + * p_ceilng.c (EV_CeilingCrushStop): (actionf_v)NULL. + * p_ceilng.c (EV_DoCeiling): (actionf_p1)T_MoveCeiling. + * p_ceilng.c (P_ActivateInStasisCeiling): same. + These gave g++ errors, but have been ignored by gcc. + + * r_data.c (R_PrecacheLevel): (actionf_p1)P_MobjThinker. + + * p_saveg.c: conversions (actionf_p1)T_Whatever. + + * p_tick.c: cast (actionf_v)(-1). + + * p_telept.c: yet another (actionf_p1)P_MobjThinker. + + * p_mobj.c (P_MobjThinker): cast (actionf_v)(-1). + * TODO: decent NOP/NULL/Nil function pointer. + I'd introduce a global A_NOP() function that + chokes up an error message. + Why -1 instead of NULL? + + * p_enemy.c: conversions (actionf_p1)P_MobjThinker. + + * d_think.h/info.h: think_t is essentially + the same action function pointer stuff. + I moved the definitions from info.h to + d_think.h, and aliased them with a typedef. + Now more changes needed. + + * p_enemy.c (successor, predecessor): new LUT, + to provide increments/decrements for enum + dirtype_t, as g++ complaints: + "no post-increment/decrement operator for type" + + * Makefile (CC): okay, tried "g++" once more. + A few errors (above). Plus shitloads of warnings + (obviously, better "unused" checking with C++, + lots of the usual int2enum suspects, implicit + declarations, the works). + + + * p_mobj.c: action.acp1 used accordingly. + * p_pspr.c: action.acp2 used accordingly. + * TODO: info.c:144 warning + "missing braces around initializer for `states[0].action'" + + * info.h/info.c: some experimental stuff on + action function pointers. + + * TODO: still some sound glitches at startup. + * i_sound.c: few more cleanups. Made mixing use + channel loop instead of unroll, set mixbuffer + to zero ot start. + Removed some more DOS leftovers (8bit), + kept some as comment. + + * hu_stuff.c (HU_Start): + More gamemode changes. As in d_main.c, I + decided to use DOOM2 as default whenever + one needed - it was sold most, and had the + superset of items, enemies and monsters. + + * TODO: the handling of WAD specific messages + like HU_TITLE, HU_TITLE2, HU_TITLEP etc. + should definitely be removed. + + * d_main.c (CheckBetaTest): + Removed outdated, DOS specific BETATEST stuff. + d_main.c (IdentifyVersion): + Numerous changes to gamemode handling. + + * TODO: currently, french language is enabled by + detecting an doom2f.wad - yet it needs FRENCH + define at compile time. I removed most language + stuff, and propose handling that at runtime, + using a switch in the config file. Well, + mission specific texts won't work outside the + WAD anyway. + + * TODO: along the same lines: I suggest removing + the misc. devparm switches as well - lots of + redundancy not needed anymore. + + * Makefile: finally added a doomstat.c for all + the global state variables listing internal + engine configuration. Right now, these are + scattered everywhere. Declaration to be found + in doomstat.h header. + + * f_finale.c (F_StartFinale): + Reworked the entire finale handling based on + game mode enum. + + * doomstat.h: + Global variables for game mode and language. + Removed old booleans. + + * doomdef.h: GameMode_t and Language_t enum added. + Boolean for language was kinda limiting to 2 + alternatives (french, english), and five boolean + plus #define SPECIAL for game version is just ugly. + + * wi_stuff.h: SPECIAL switch compiles two + different EXE's, one for 3 episodes of 9 maps + each (DOOM 1 registered), one for 4 episodes + of 9 maps each (DOOM 1 retail/FinalDOOM). + Implicitely, the DOOM2 config (one episode, + 34 missions) is handled. How is the german + edition (32 missions only) done? + Frankly, this is a mess. The problem is that + intermission (animated as in DOOM 1, simple + backdrop as in DOOM2) as well as certain + items (double shotgun) as well as certain + rendering stuff (sky texture) depend on this. + + Plus, it ties into runtime flags as "commercial" + as well. Yuck. + + Each change will change the game. Postponed. + + * d_net.c,m_misc.c: removed last two NeXT remains. + + * d_englsh.h,d_french.h,d_main.c,m_misc.c,r_draw.c,v_video.c: + more WATCOM remains removed. Kept some stuff that + handeld the blocky mode/detailshift in DOS, which + is n.a. in Linux - but probably not worth fixing. + +Sat Dec 20 15:16:51 1997 + + * Bug: core dump when using doom.wad or doom1.wad + without a "-file UNUSED/doom2.wad". Version + dependend handling of stuff (double shotgun) + comes to mind. + + * doomdef.h: + SNDSERV enables external sound server + support. SNDINTR enables internal sound + output with timer (asynchronous). Default + is internal, synchronous. + + * i_sound.c (I_HandleSoundTimer): + Okay, the plasma/double shotgun sound bug + (crapyy sund when firing nose-to-wall) is + obviously a problem with blocking at + refresh - smaller screen size makes it go + away. + I won't do threads w/o a proper gdb, and + I can't do whatever Dave Taylor did with + LinuxQuake w/o the sources, thus I broke + down and implemented a timer based solution. + Seems to work fine, given the fact that + this is the first time ever I implemented + sound handling. + +Fri Dec 19 10:02:48 1997 + + * m_menu.c/i_sound.c/s_sound.c: + Removed a few more inconsistencies due to + old internal sound handling (DOS), + external (Linux sndserver), and + new internal (the unfinished merge of + both the former). + The Options/Sound/Music volume menu is + accessible now. It was due to an internal + scaling of the menu (effective range 0-15), + up to 0..120, by multiply with 8 scattered + all over the place, that we got a + v_video.c: I_Error ("Bad V_DrawPatch") + Now I am using the menu resolution + everywhere, and scaling should only be done + in the actual mixing/output. + + * OK, obviously this hasn't been updated in months. + This is because: a) most of the time nothing + happened, and b) when something got done, it was + too much to keep track of it by CVS and/or ChangeLog. + + Basically, what happened in the meantime is that + I did not find a publisher who believed that the book + sales would be worth doing it. Within the limited + amount of time that I could dedicate to a project + that will not generate any revenue whatsoever, + I spent some time on cleaning up the Linux code + base which works, essentially. I might or might not + be able to participate in a Mesa+Voodoo+Glide based + GLDOOM port for Linux. I won't waste a minute on + Win32 without getting paid for it. + + Because of the legal issues involved with the + DMX sound library id licensed for DOS DOOM, Linuxdoom + is the only code base that has sound support at all. + Other UNIX ports (SGI, Sun) could probably be revived + and integrated w/o too many problems. There is no + Win32 port - I never had access to WinDOOM or + Jim Dose's GLDOOM sources. There is no Linux + OpenGL (read: Mesa) support yet - that'd involve + internal changes which will best be done after a + public source release. + + John Carmack opted for a release of the Linux code. + I have removed all DMX references I could get a + hold of, but preserved some of the original + sound handling within DOOM that interfaced + with DMX. Linuxdoom (like previous UNIX ports) + used a separate sound server binary. I did some + work on putting the sound server module back into + the engine. It works, but shutdown (pending sounds), + and sound output parallel to refresh (blocking) + is crappy, and there is a problem with double + shotgun and plasma at close distance (as well as + with lots of other noises going on). As the + mixing code is identical to the separate + soundserver, and as it doesn't seem to be a + blocking issue, I am currently at a loss - I + wonder whether the IPC communication with the + soundserver process introduced a delay that + changed behaviour, or whether I simply overlooked + a bug. I am currently lacking the time to track + this down, so I am keeping both internal and + soundserver source. + + I did remove DOS and Watcom specifics. I did also + remove the texture mapping and fixed point assembly. + From my experience, it isn't worth the trouble + to ue GCC inline assembler, as performance of + the same loop written in C is perfectly sufficient. + On demand I will put both assembly modules into some + documentation, as they are probably of historic + interest. + + There is no Sun DGA, Irix, or other non-Linux stuff + in this code base (at least, not intentionally). + They will be back when ports to other UNIX + environments will be merged back (I can't do + testing, and the modules were separate and not + consistent, so I refrained from wasting time on + this prior to a public release). + + While I made only minor changes to the actual code + (some fixes, some cleaning up of SHM and audio), + I did a huge amount of shuffling around. I + introduced many more header files and modules, + some of them laughably small (doing these changes + is bound to screw up CVS, so no CVS record anymore + for the time being). I would introduce even more + separation if I had the time. Splitting the + animation/AI/behaviour code that defines + "DOOM - The Game" into a separate game.so (like + Quake2 does) should definitely be done. Separating + a ref_soft.so aka "DOOM - The Engine", and defining + a clean interface prior to introducing a ref_gl.so + is recommended as well. + + I am going to purge some more leftovers, remove + the obsolete CVS history except for comments, + and try to clean up the last "implicit declaration" + and "unused variable" warnings. Except for enabling + cheats in nightmare (to have more fun while testing), + I did not change the game mechanics at all. I would + strongly advise against doing so w/o the proper + separations suggested above. I will not waste time + on fixing detail and blocky mode, lack of resize, + or other stuff that it better addressed by a proper + GLDOOM port. + + +Sat Aug 16 08:07:16 1997 + + * p_pspr.c: + Moved the sprite animation stuff from doomdef.h here. + + * info.h: + Added #ifndef __INFO__ for multiple inclusion. I am + not going to deal with multigen, or changing the + original DOOM monster animation anyway. + + * p_spec.h/c: + Moved anim_t etc., locally used only. There is + another anim_t in wi_stuff.h/c, now local as well, + so collisions on header inclusion should not occur. + #include "doomdef.h" + #include "doomstat.h" + these should now be topmost includes. + + * doomstat.h, doomdef.h, wi_stuff.h, d_player.h: + I moved wbstartstruct_t to d_player.h, and wminfo + to doomstat.h. Basically, I will try to move all + global state related stuff into doomstat.h, and + all data structures defined for state variables + into doomdef.h - this will be kinda greek tragedy, + and never finished, but a body can try. + + * wi_stuff.h/c, wi_data.h: + Removed wi_data.h, put all local stuff blah... see + below. + I have found several unused global variables, + started outcommenting them with //U, will remove + them later. It might be Watcom/PC stuff, or + somebody put the actual numbers into the implementation + instead of using STARDIST, ANIMPERIOD & Cie. + + * st_stuff.h/c: from doomdef.h, local stuff moved + into st_stuff.c, etc. + In the current revisions, I am tolerating warnings + of the "implicit declaration" kind - the linker + resolves the stuff, and it will be handy in + unmangling the modules once the headers contain + only the globally visible stuff. + + * am_map.h/c, am_data.h: + Removed am_data.h, put all local stuff into + am_map.c, moved globally needed headers from + doomdef.h into am_map.h. + + * p_saveg.h, p_setup.h, p_tick.h: + created, stuff from doomde.h moved there + + * d_main.c, d_net.c, doomdef.h: + Decided to dump mprintf, as only needed for + Watcom support which is not going to happen. + + * doomdef.h: + Moved function prototypes to appropriate headers: + d_main.h, d_net.h. + +Fri Aug 15 16:38:53 1997 + + * doomstat.h: + added a few more comments, regrouped some of the + state variables. + + * doomdata.h: added a few more comments. + +Thu Aug 14 10:38:37 1997 + + * g_game.c (G_DoLoadLevel): + copied the skyflatnum determination here, from + the R_InitSkyMap - once should be sufficient. + + * Makefile, r_sky.h/c: + added r_sky module. The sky handling was scattered + over r_bsp, r_main, r_plane, doomstat.h... + + * r_bsp.c, r_main.c, r_segs.c: + Removed RD_* calls from R_debug.m, NeXT switches. + + * r_local.h: + Removed the R_debug.m NeXT specific debugging + code headers. Removed "drawbsp" flag from + here, and r_main.c, too. + + * r_data.c: + Started to remove NORMALUNIX switches, using + LINUX instead. Basically, different UNIX + platforms using the same code should simply + be ANDed in the #ifdef switches. + + * r_draw.c: + Removed some more, but not all WATCOMC support. + There is an unresolved problem with the fuzzy + blitting in the lowres (blocky) modes - either + the "detailshift" flag triggered lowres mode + will be removed, or the bug has to be fixed. + + * r_bsp.h, r_draw.h, r_things.h, r_data.h, + r_segs.h, r_main.h, r_plane.h: + Created from r_local.h. + + * Back to work. + Till March 22nd, a lot of source shuffling and addition + of new header files, separating stuff, and creating + new, smaller modules. Some Watcom/PC/DMX/NeXT etc. + related stuff got removed, but not all (yet). None of + this ended up in the Log (sorry) or the revision control + (CVS is not well suited while number of files and + respective names change a lot, especially if stuff gets + deleted and/or re-introduced). + Major change: part of the sound code got copied from the + separate Linux sndserver sources to the linuxdoom source. + Re-integration and removal of sndserver pending. + Nothing of importance happend since then (priorities). + +Mon Feb 3 16:41:05 1997 + + * m_misc.c: + Created m_argv, m_random and m_bbox, kept remains in m_misc + for the time being. Misc. files changed to include only + necessary modules. Moved bbox definitions from doomdata.h. + + * m_menu.h: + Created from doomdef.h. Misc. changes in dependend modules. + I am not going to list every affected file from now on. + See Log entries within each file. + + * dstrings.h: + Now handles multi-language support and switches. + So far, only english (default) and french are available. + + * d_englsh.h: + Created from dstrings.h. + + * g_game.h: + Created, from doomdef.h. + + * am_map.c, st_stuff.c, wi_stuff.c: + * Makefile: + Added m_cheat, removed dutils. Doubly linked list stuff unused. + + * m_cheat.h, m_cheat.c: + Created, basci cheat string scrambling and check, from dutils.h + and dutils.c. + + * doomdef.h + Moved screen declaration to v_video.h. + + * dutils.h, dutils.c + Remode code for f_wipe.h and f_wipe.c. + + * Makefile + * d_main.c, + Added f_wipe files. + + * f_wipe.h, f_wipe.c: + Created, screen wipe/melt at mission begin, from dutils.h + and dutils.c. + + * d_textur.h: + Created from doomdata.h. Separates all the patch/texture + defintions. Needed for v_video module. + + * r_local.h, wi_stuff.h, st_lib.h, hu_lib.h: + * i_x.c, d_main.c, m_menu.c, m_misc.c: + Added v_video.h. + + * v_video.h: + Created. Using headers from doomdef.h. Forward of patch_t. + Moved bool and byte to doomtype.h. + +Thu Jan 30 20:50:16 1997 + + * doomtype.h: + Created, for fixed_t. Should add angle_t here, too. + + * tables.c: + Added SlopeDiv from r_main.c, added all defines and typedefs + related to basic trig table use here, removed it. + Currently "tables.h" is included in doomdef.h and + r_local.h, too. This is not too cleanly separated, but + we have to start somewhere, right? + + * tables.h: + Created from doomdef.h. + Note that tables.c had fixed size tables, while doomdef.h + calculated from the value of FINEANGLES. In addition, + entries were given as either "int" or "fixed_t". Bad boys. + + * z_zone.c: + * s_sound.c: + * hu_stuff.c: + * st_lib.c, st_stuff.c: + * wi_stuff.c: + * w_wad.c: + * r_things.c, r_plane.c, r_draw.c, r_data.c: + * p_tick.c, p_mobj.c, p_spec.c, p_setup.c, p_lights.c, + p_plats.c, p_floor.c, p_doors.c, p_ceilng.c: + * am_map.c: + * m_misc.c, m_menu.c: + * g_game.c: + * d_main.c: + * f_finale.c: + Added #include "z_zone.h". + + * z_zone.h: + Created, from stuff in doomdef.h + + * CVS checkin. Reformatting run, last one. + Took a week to go through all the sources, w/o even + looking to closely. + + * st_stuff.c (ST_Responder): + Removed a first tiny bit of redundancy (NO_CLIP checks). + Should remove idspispod completely, later. + +Wed Jan 29 19:53:43 1997 + + * Another one, while we are on it. All S (Sound) files. + + * CVS checkin. Reformatting run, all R (Refresh) files. + + * r_draw.c (R_DrawSpanLow): + The non-Watcom, non-asm lowres mode was just a copy + of the default mode. As detailshift was used to scale + the image down, lowres mode just filled the left half + of the buffer. + * r_draw.c (R_DrawColumnLow): + Tried the same hack for walls, horribly broken. + Postponed. + +Tue Jan 28 19:32:48 1997 + + * CVS checkin. Another reformatting run. Did all P files. + + * p_spec.c: P_FindNextHighestFloor + The number of adjoining sectors is limited to 20, because + of a temporary LUT needed for determining lowest height + in adjacent sectors. No overflow checking is done. + +Sun Jan 26 08:41:21 1997 + + * Another CVS checkin of a formatting run. + D,F,G,HU,I,M have been changed. + + * Note: in initial and current release, + linuxxdoom -3 -file plutonia.wad, idclev 12 + produces a Segmentation fault. + +Wed Jan 22 14:03:00 1997 + + * m_menu.c: + initializer-string for array of chars is too long (skullName) + warning: unused parameter `int choice' (a couple of times) + + * Attempt to compile as C++. Loads of warnings, a couple of errors. + p_enemy.c (P_Move): + r_things.c (R_ProjectSprite) + `catch', `throw', and `try' are all C++ reserved words, + thus changed "try" to "try_ok". Fixed. + p_pspr.c: In function `void P_SetPsprite(struct player_s *, ... )': + too many arguments to function + No convenient fix - state->action is declared void action(), + but called w/o, with one, or with two parameters. + There are more like this. Going to be a tough one. + Union of pointers? + Postponed. + + r_plane.c: In function `void R_DrawPlanes()': + s_sound.c: In function `int S_AdjustSoundParams(struct mobj_s *, .. )': + p_map.c: In function `bool PIT_StompThing(struct mobj_s *)': + p_maputl.c: In function `int P_AproxDistance(int, int)': + r_main.c: In function `int R_PointToDist(int, int)': + p_enemy.c: In function `void P_NewChaseDir(struct mobj_s *)': + warning: implicit declaration of function `int abs(...)' + +Wed Jan 22 12:15:00 1997 + + * CVS checkin of purification run. Sources now compile + without any "-Wall" warnings. + + * Note: with -file "tnt.wad", we get an "Error: Bad V_DrawPatch" + abort each time we enter an exit. Invalid or missing + intermission screen? + + * Makefile (CFLAGS): added -Wall, first purification run. + + d_main.c: In function `D_DoomMain': + warning: implicit declaration of function `mkdir' + + i_unix.c: In function `I_StartSound': + warning: control reaches end of non-void function + i_unix.c: In function `I_InitNetwork': + warning: implicit declaration of function `inet_addr' + i_unix.c: At top level: + warning: `endianness' defined but not used + + i_x.c: In function `I_Error': + warning: unused variable `string' + i_x.c: In function `I_GetEvent': + warning: suggest parentheses around arithmetic in operand of | + i_x.c: In function `I_FinishUpdate': + warning: unused variable `bigscreen' + i_x.c: In function `grabsharedmemory': + warning: implicit declaration of function `getuid' + warning: unused variable `done' + i_x.c: In function `I_InitGraphics': + warning: suggest parentheses around assignment used as truth value + warning: char format, different type arg (arg 3) + warning: char format, different type arg (arg 5) + warning: implicit declaration of function `XShmGetEventBase' + i_x.c: In function `InitExpand2': + warning: unused variable `jexp' + warning: unused variable `iexp' + + m_menu.c: In function `M_ReadSaveStrings': + warning: implicit declaration of function `read' + warning: implicit declaration of function `close' + + m_misc.c: In function `M_WriteFile': + warning: implicit declaration of function `write' + warning: implicit declaration of function `close' + m_misc.c: In function `M_ReadFile': + warning: implicit declaration of function `read' + m_misc.c: In function `M_ScreenShot': + warning: implicit declaration of function `access' + + p_pspr.c: In function `P_MovePsprites': + suggest parentheses around assignment used as truth value + + p_spec.c: In function `P_SpawnSpecials': + warning: implicit declaration of function `atoi' + + w_wad.c: In function `strupr': + warning: implicit declaration of function `toupper' + w_wad.c: In function `W_AddFile': + warning: implicit declaration of function `read' + warning: implicit declaration of function `lseek' + warning: implicit declaration of function `close' + + wi_stuff.c: In function `WI_loadData': + warning: unused variable `pic' + wi_stuff.c: At top level: + warning: `background' defined but not used + +Tue Jan 21 22:00:00 1997 + + * doomdata.h (__BYTEBOOL__): + Use builtin ANSI C++ bool. + + * d_main.c (IdentifyVersion): + Bug fix: insufficient malloc created errors in malloc/realloc + calls later on. Welcome to the risks of Copy'n'paste. + +Tue Jan 21 13:20:05 1997 + + * First formatting checkin. + A word of explanation: prior to making any changes to the + source, a couple of formatting runs will be made, followed + by some purification runs. + For this run, the Emacs mode selection line has been changed + to use C++ style indenting (cc-mode.el). Each file has + been automatically reformatted using Emacs indent-region. + A few files have been changed manually already (i.e., + comments, use of tabs). + Warning: using "diff" to compare files of different states + during the reformatting will not give useful results. + + * hu_stuff.c: + fixed "assignment discard const", the last remaining error + message with default compilation. + + +Sun Jan 19 14:27:06 1997 + + * Makefile: + Minor fix for sndserver target, removed linuxsdoom target + for the time being, added CVS header (kind of). + + * Initial CVS checkin. + + * soundsrv/irix/linux/sun.c: + Changed includes (irix.h removed, soundsrv.h included). + + * i_svga.c: + Changed to DOS 8+3. + + * soundsrv.h/c: + Changed to DOS 8+3, included irix.h in soundsrv.h. + + * r_local.h: + Same for PI, include math.h with Linux. + + * doomdef.h: + Got rid of multiply defined warnings for Linux, + included values.h. + + * FILES2: + created a commented list of all files, removed a few + more files (sndserver test, NeXT leftovers, DMX header). + Identified the following main modules (see FILES2): + AM, HU, M, P, R, S, ST, W, WI. Some stuff is separate + (Z, F), some not clearly separable (G, D). System specific + interfaces are in I. Some of the latter replace i_main.c + (i.e. the void/int main(argc,argv) call), e.g. SVGA, + others (X11, SHM, DGA) don't. There is a certain amount + of overlap, and the largest module (with possibly most + overlap) is P - playing, i.e. all the games state and + animation handling. + Dithering is currently not used. + +Sat Jan 18 15:14:41 1997 + + * r_draw.c: + fixed !defined(USEASM) lines for R_DrawColumn/Span. + Removed fpfunc.o/S from Makefile, now compiling + X11 w/o any assembler. + Got a running linuxxdoom again. We are in business. + This source is going to be used for the initial CVS + check in. + + * Tried a quick hack compiling it as COFF a.out instead + of ELF, with "gcc -b i486-linuxaout". Same linker + errors. + Tried removing -DUSE_ASM. Still using fpfunc.S. + + + * Tried linuxxdoom. + Compile run: some warnings (redefinition of MAX/MIN + SHORT/INT/LONG) in doomdef.h and (PI redefined) + r_local.h. + Link run: crashed, undefined references in + d_main.c: undefined reference to `FixedDiv2' + am_map.c: undefined reference to `FixedMul' + r_main.c: undefined reference to `R_DrawColumn' + r_main.c: undefined reference to `R_DrawSpan' + r_plane.c: undefined reference to `FixedMul' + + This stuff is defined in fpfunc.S (Fixed point) and + in r_draw.c (assembler in tmap.S not used). + However, "nm," shows that r_draw.o does not include + the drawing functions (see below - USE_ASM). + Furthermore, the global symbols in fpfunc.S begin + with an underscore, "_FixedMul" and "_FixedDiv2". + + More problems within fpfunc.o: undefined references to + + `_dc_yl' `_dc_yh' + `_ylookup' + `_centery' + `_dc_x' + `_columnofs' + `_dc_iscale' + `_dc_texturemid' + `_dc_source' + `_dc_colormap' + + `_ds_y' `_ds_x1' `_ds_x2' + `_ds_xfrac' `_ds_yfrac' + `_ds_xstep' `_ds_ystep' + `_ds_colormap' + `_ds_source' + + Again, underscore problem. + Note: tmap.S currently obsolete, as somebody pasted all + the texture mapping assembly into fpfunc.S. Gotta clean + that up. + + * Created initial release from CD sources, created ChangeLog. + Let the games begin. + + + ************************************************************** + DOOM source code ChangeLog file + ************************************************************** + diff --git a/prboom/TXTS/DOOM/Files b/prboom/TXTS/DOOM/Files new file mode 100644 index 000000000..33af95dec --- /dev/null +++ b/prboom/TXTS/DOOM/Files @@ -0,0 +1,98 @@ +total 1258 +-rw-r--r-- 1 b1 prog 0 Jan 18 15:08 FILES +-rw-r--r-- 1 b1 prog 5799 Jan 18 15:07 Makefile +-rw-r--r-- 1 b1 prog 1943 Jan 18 15:07 am_data.h +-rw-r--r-- 1 b1 prog 20263 Jan 18 15:07 am_map.c +-rw-r--r-- 1 b1 prog 2494 Jan 18 15:07 am_map.h +-rw-r--r-- 1 b1 prog 1499 Jan 18 15:07 am_oids.c +-rw-r--r-- 1 b1 prog 338 Jan 18 15:07 am_oids.h +-rw-r--r-- 1 b1 prog 14005 Jan 18 15:07 d_french.h +-rw-r--r-- 1 b1 prog 25287 Jan 18 15:07 d_main.c +-rw-r--r-- 1 b1 prog 15586 Jan 18 15:07 d_net.c +-rw-r--r-- 1 b1 prog 744 Jan 18 15:07 defs.inc +-rw-r--r-- 1 b1 prog 3569 Jan 18 15:07 dither.c +-rw-r--r-- 1 b1 prog 355 Jan 18 15:07 dither.h +-rw-r--r-- 1 b1 prog 4234 Jan 18 15:07 doomdata.h +-rw-r--r-- 1 b1 prog 32779 Jan 18 15:07 doomdef.h +-rw-r--r-- 1 b1 prog 192 Jan 18 15:07 drcoord.h +-rw-r--r-- 1 b1 prog 22377 Jan 18 15:07 dstrings.h +-rw-r--r-- 1 b1 prog 6582 Jan 18 15:07 dutils.c +-rw-r--r-- 1 b1 prog 1821 Jan 18 15:07 dutils.h +-rw-r--r-- 1 b1 prog 14072 Jan 18 15:07 f_finale.c +-rw-r--r-- 1 b1 prog 7357 Jan 18 15:07 fpfunc.S +-rw-r--r-- 1 b1 prog 34770 Jan 18 15:07 g_game.c +-rw-r--r-- 1 b1 prog 5394 Jan 18 15:07 hu_lib.c +-rw-r--r-- 1 b1 prog 2878 Jan 18 15:07 hu_lib.h +-rw-r--r-- 1 b1 prog 12040 Jan 18 15:07 hu_stuff.c +-rw-r--r-- 1 b1 prog 934 Jan 18 15:07 hu_stuff.h +-rw-r--r-- 1 b1 prog 6238 Jan 18 15:07 i_cyber.c +-rw-r--r-- 1 b1 prog 18324 Jan 18 15:07 i_dga.c +-rw-r--r-- 1 b1 prog 2499 Jan 18 15:07 i_header.h +-rw-r--r-- 1 b1 prog 32815 Jan 18 15:07 i_ibm.c +-rw-r--r-- 1 b1 prog 1867 Jan 18 15:07 i_ibm_a.asm +-rw-r--r-- 1 b1 prog 121 Jan 18 15:07 i_main.c +-rw-r--r-- 1 b1 prog 8251 Jan 18 15:07 i_pcnet.c +-rw-r--r-- 1 b1 prog 8561 Jan 18 15:07 i_sound.c +-rw-r--r-- 1 b1 prog 439 Jan 18 15:07 i_sound.h +-rw-r--r-- 1 b1 prog 9537 Jan 18 15:07 i_svgalib.c +-rw-r--r-- 1 b1 prog 10886 Jan 18 15:07 i_unix.c +-rw-r--r-- 1 b1 prog 20891 Jan 18 15:07 i_x.c +-rw-r--r-- 1 b1 prog 128797 Jan 18 15:07 info.c +-rw-r--r-- 1 b1 prog 15840 Jan 18 15:07 info.h +-rw-r--r-- 1 b1 prog 3477 Jan 18 15:07 irix.c +-rw-r--r-- 1 b1 prog 240 Jan 18 15:07 irix.h +-rw-r--r-- 1 b1 prog 1363 Jan 18 15:07 linux.c +-rw-r--r-- 1 b1 prog 34628 Jan 18 15:07 m_menu.c +-rw-r--r-- 1 b1 prog 13741 Jan 18 15:07 m_misc.c +-rw-r--r-- 1 b1 prog 6117 Jan 18 15:07 p_ceilng.c +-rw-r--r-- 1 b1 prog 15062 Jan 18 15:07 p_doors.c +-rw-r--r-- 1 b1 prog 33758 Jan 18 15:07 p_enemy.c +-rw-r--r-- 1 b1 prog 11409 Jan 18 15:07 p_floor.c +-rw-r--r-- 1 b1 prog 16265 Jan 18 15:07 p_inter.c +-rw-r--r-- 1 b1 prog 7592 Jan 18 15:07 p_lights.c +-rw-r--r-- 1 b1 prog 6447 Jan 18 15:07 p_local.h +-rw-r--r-- 1 b1 prog 30138 Jan 18 15:07 p_map.c +-rw-r--r-- 1 b1 prog 14672 Jan 18 15:07 p_maputl.c +-rw-r--r-- 1 b1 prog 17276 Jan 18 15:07 p_mobj.c +-rw-r--r-- 1 b1 prog 5940 Jan 18 15:07 p_plats.c +-rw-r--r-- 1 b1 prog 17084 Jan 18 15:07 p_pspr.c +-rw-r--r-- 1 b1 prog 12828 Jan 18 15:07 p_setup.c +-rw-r--r-- 1 b1 prog 5962 Jan 18 15:07 p_sight.c +-rw-r--r-- 1 b1 prog 23846 Jan 18 15:07 p_spec.c +-rw-r--r-- 1 b1 prog 11140 Jan 18 15:07 p_spec.h +-rw-r--r-- 1 b1 prog 14229 Jan 18 15:07 p_switch.c +-rw-r--r-- 1 b1 prog 1910 Jan 18 15:07 p_telept.c +-rw-r--r-- 1 b1 prog 14075 Jan 18 15:07 p_tick.c +-rw-r--r-- 1 b1 prog 7044 Jan 18 15:07 p_user.c +-rw-r--r-- 1 b1 prog 13013 Jan 18 15:07 planar.asm +-rw-r--r-- 1 b1 prog 9811 Jan 18 15:07 r_bsp.c +-rw-r--r-- 1 b1 prog 14619 Jan 18 15:07 r_data.c +-rw-r--r-- 1 b1 prog 13591 Jan 18 15:07 r_draw.c +-rw-r--r-- 1 b1 prog 11378 Jan 18 15:07 r_local.h +-rw-r--r-- 1 b1 prog 14868 Jan 18 15:07 r_main.c +-rw-r--r-- 1 b1 prog 7108 Jan 18 15:07 r_plane.c +-rw-r--r-- 1 b1 prog 15420 Jan 18 15:07 r_segs.c +-rw-r--r-- 1 b1 prog 18969 Jan 18 15:07 r_things.c +-rw-r--r-- 1 b1 prog 12274 Jan 18 15:07 s_sound.c +-rw-r--r-- 1 b1 prog 12812 Jan 18 15:07 sndserver.c +-rw-r--r-- 1 b1 prog 141 Jan 18 15:07 sndserver.h +-rw-r--r-- 1 b1 prog 5811 Jan 18 15:07 sounds.c +-rw-r--r-- 1 b1 prog 2674 Jan 18 15:07 sounds.h +-rw-r--r-- 1 b1 prog 3975 Jan 18 15:07 soundst.h +-rw-r--r-- 1 b1 prog 3461 Jan 18 15:07 st_lib.c +-rw-r--r-- 1 b1 prog 2254 Jan 18 15:07 st_lib.h +-rw-r--r-- 1 b1 prog 22769 Jan 18 15:07 st_stuff.c +-rw-r--r-- 1 b1 prog 4685 Jan 18 15:07 st_stuff.h +-rw-r--r-- 1 b1 prog 1725 Jan 18 15:07 sun.c +-rw-r--r-- 1 b1 prog 75 Jan 18 15:07 t.c +-rw-r--r-- 1 b1 prog 114621 Jan 18 15:07 tables.c +-rw-r--r-- 1 b1 prog 5485 Jan 18 15:07 tmap.S +-rw-r--r-- 1 b1 prog 10904 Jan 18 15:07 v_video.c +-rw-r--r-- 1 b1 prog 268 Jan 18 15:07 vgaview.h +-rw-r--r-- 1 b1 prog 9920 Jan 18 15:07 w_wad.c +-rw-r--r-- 1 b1 prog 3629 Jan 18 15:07 wadread.c +-rw-r--r-- 1 b1 prog 551 Jan 18 15:07 wadread.h +-rw-r--r-- 1 b1 prog 3583 Jan 18 15:07 wi_data.h +-rw-r--r-- 1 b1 prog 25608 Jan 18 15:07 wi_stuff.c +-rw-r--r-- 1 b1 prog 1544 Jan 18 15:07 wi_stuff.h +-rw-r--r-- 1 b1 prog 8501 Jan 18 15:07 z_zone.c diff --git a/prboom/TXTS/DOOM/Files2 b/prboom/TXTS/DOOM/Files2 new file mode 100644 index 000000000..066a4ef1d --- /dev/null +++ b/prboom/TXTS/DOOM/Files2 @@ -0,0 +1,221 @@ +ChangeLog +FILES +FILES2 +Makefile + +----------------------------------------------------------------------- +Global and misc. stuff +----------------------------------------------------------------------- +doomdata.h - external data definitions (WAD file structure) +doomdef.h - internal data definitions (game structs) +dstrings.h - printed strings for translation, english +d_french.h - printed strings for translation + +info.h +info.c - LUT's for Thing TAB, Frame TAB, + generated by multigen utility +dutils.h +dutils.c - Dave's utilities + including doubly-linked lists & simple state machines. + Used in WI, ST, AM, and d_main.c + +------------------------------------------------------------------------ +DOOM game loop and top level stuff +------------------------------------------------------------------------ +g_game.c - Game loop functions, event handling etc. + + boolean G_CheckDemoStatus (void); + void G_ReadDemoTiccmd (ticcmd_t *cmd); + void G_WriteDemoTiccmd (ticcmd_t *cmd); + void G_PlayerReborn (int player); + void G_InitNew (skill_t skill, int episode, int map); + + void G_DoReborn (int playernum); + + void G_DoLoadLevel (void); + void G_DoNewGame (void); + void G_DoLoadGame (void); + void G_DoPlayDemo (void); + void G_DoCompleted (void); + void G_DoVictory (void); + void G_DoWorldDone (void); + void G_DoSaveGame (void); + +d_main.c - event handling, D_DoomMain() and other functions + NOT int main() + +d_net.c - high level networking protocol code + +------------------------------------------------------------------ +I Interfaces, system specifics +------------------------------------------------------------------ +i_main.c - main(), calls D_DoomMain(). +i_svgalib.c - Linux SVGAlib code, including main(), + replaces i_main.c + +i_x.c - X11 with SHM code, use with i_main.c +i_dga.c - X11 DGA code, use with i_main.c +i_unix.c - fixed point, networking, and display stuff for UNIX + +i_ibm.c - IBM DOS VGA graphics and key/mouse/joystick, + use with i_main.c +i_pcnet.c - IPX networking, DOS + +fpfunc.S - fixed point assembly and (currently) duplicate of +tmap.S - texture mapping assembly (currently unused) + +------------------------------------------------------------------ +AM AutoMap +------------------------------------------------------------------ +am_data.h - vector graphics for the automap + +am_map.h +am_map.c - automap code + +------------------------------------------------------------------ +HU Heads Up +------------------------------------------------------------------ +hu_lib.h +hu_lib.c - heads-up text and input code + +hu_stuff.h +hu_stuff.c - Heads-up displays + + +------------------------------------------------------------------- +M Menu +------------------------------------------------------------------- +m_menu.c - DOOM options code and leaving messages + +m_misc.c - misc. HUD text display, input checks, and + random table, file I/O + + +------------------------------------------------------------------- +P Play??? +------------------------------------------------------------------- +p_local.h - header for all play modules + +p_spec.h - specials, lighting, doors, plats, texture animation +p_spec.c - specials, texture animation + +p_doors.c - door code +p_plats.c - platform raising/lowering code +p_ceilng.c - active (e.g. crushing) ceilings +p_floor.c - active (e.g. raising) floors +p_lights.c - dynamic (e.g. flickering) lighting +p_switch.c - button switches and animation + +p_enemy.c - enemy AI and animation +p_inter.c - object/object interaction? +p_map.c - movement objects, handling of collisions +p_maputl.c - distance, position etc. utilities for movement +p_mobj.c - mobile objects handling, spawn etc. +p_user.c - more movement, bobbing etc. + +p_telept.c - teleportation code + +p_sight.c - LOS checks, REJECT + + +p_pspr.c - weapon overlays, bobbing, raising, sprite tables, + firing, ammo bookkeeping + +p_setup.c - load map from WAF file, setup code + + +p_tick.c - savegame function (archive/unarchive), + thinker list handling, allocation, + game tick execution (updates) + + +------------------------------------------------------------------- +R Rendering +------------------------------------------------------------------- +r_local.h - header for all rendering modules, + internal map data structure definitions + +r_bsp.c - BSP seg's clipping + +r_data.c - texture column caching, patch assembly, + flats, colormaps, sprites, + lookup by name + +r_draw.c - access to framebuffer API, drawing C functions + + +r_main.c - geometry functions, trigonometry lookups, + R_RenderPlayerView + +r_plane.c - floor/ceiling visplanes, sky + +r_segs.c - drawing segs, marking hslices for floors/ceilings + +r_things.c - sprite and sprite frame/rotation handling, drawing + + +tables.c - trigonometry lookup tables, static + +v_video.c - gamma correction lookup, patch drawing to rectangle + +------------------------------------------------------------------- +S Sound +------------------------------------------------------------------- +s_sound.c - more sound and music handling + +soundst.h - sound and music data structures +sounds.h +sounds.c - sound and music lump LUT's (manually maintained) + +sndserver.h +sndserver.c - (Irix) sndserver code + +irix.h +irix.c - SGI Irix sound/sndserver support code + +linux.c - Linux voxware sound/sndserver support code, + replaces irix.c, uses irix.h +sun.c - SUN replacement for irix.c + + +i_sound.h +i_sound.c - DOS DMX music and sound interface + +------------------------------------------------------------------- +ST STatus bar +------------------------------------------------------------------- +st_lib.h +st_lib.c - status bar widget code + +st_stuff.c +st_stuff.h - status bar code + + +------------------------------------------------------------------- +W Wad file I/O +------------------------------------------------------------------- +w_wad.c - lump based functions +wadread.h +wadread.c - lump I/O, get SFX + +------------------------------------------------------------------- +WI WIn / level end screens +------------------------------------------------------------------- +wi_data.h - lookups for intermission screens, patch positions + +wi_stuff.h +wi_stuff.c - intermission animation patchwork + +------------------------------------------------------------------- +Z Zone memory allocation +------------------------------------------------------------------- +z_zone.c + +------------------------------------------------------------------- +F Final screen animation +------------------------------------------------------------------- +f_finale.c - DOOM mission end screens? (bunny) + + + +------------------------------------------------------------------- diff --git a/prboom/TXTS/DOOM/Makefile b/prboom/TXTS/DOOM/Makefile new file mode 100644 index 000000000..2a9e9350e --- /dev/null +++ b/prboom/TXTS/DOOM/Makefile @@ -0,0 +1,98 @@ +################################################################ +# +# $Id: Makefile,v 1.1 2000/04/09 17:53:11 proff_fs Exp $ +# +# $Log: Makefile,v $ +# Revision 1.1 2000/04/09 17:53:11 proff_fs +# Initial revision +# +# +CC= gcc # gcc or g++ + +CFLAGS=-g -Wall -DNORMALUNIX -DLINUX # -DUSEASM +LDFLAGS=-L/usr/X11R6/lib +LIBS=-lXext -lX11 -lnsl -lm + +# subdirectory for objects +O=linux + +# not too sophisticated dependency +OBJS= \ + $(O)/doomdef.o \ + $(O)/doomstat.o \ + $(O)/dstrings.o \ + $(O)/i_system.o \ + $(O)/i_sound.o \ + $(O)/i_video.o \ + $(O)/i_net.o \ + $(O)/tables.o \ + $(O)/f_finale.o \ + $(O)/f_wipe.o \ + $(O)/d_main.o \ + $(O)/d_net.o \ + $(O)/d_items.o \ + $(O)/g_game.o \ + $(O)/m_menu.o \ + $(O)/m_misc.o \ + $(O)/m_argv.o \ + $(O)/m_bbox.o \ + $(O)/m_fixed.o \ + $(O)/m_swap.o \ + $(O)/m_cheat.o \ + $(O)/m_random.o \ + $(O)/am_map.o \ + $(O)/p_ceilng.o \ + $(O)/p_doors.o \ + $(O)/p_enemy.o \ + $(O)/p_floor.o \ + $(O)/p_inter.o \ + $(O)/p_lights.o \ + $(O)/p_map.o \ + $(O)/p_maputl.o \ + $(O)/p_plats.o \ + $(O)/p_pspr.o \ + $(O)/p_setup.o \ + $(O)/p_sight.o \ + $(O)/p_spec.o \ + $(O)/p_switch.o \ + $(O)/p_mobj.o \ + $(O)/p_telept.o \ + $(O)/p_tick.o \ + $(O)/p_saveg.o \ + $(O)/p_user.o \ + $(O)/r_bsp.o \ + $(O)/r_data.o \ + $(O)/r_draw.o \ + $(O)/r_main.o \ + $(O)/r_plane.o \ + $(O)/r_segs.o \ + $(O)/r_sky.o \ + $(O)/r_things.o \ + $(O)/w_wad.o \ + $(O)/wi_stuff.o \ + $(O)/v_video.o \ + $(O)/st_lib.o \ + $(O)/st_stuff.o \ + $(O)/hu_stuff.o \ + $(O)/hu_lib.o \ + $(O)/s_sound.o \ + $(O)/z_zone.o \ + $(O)/info.o \ + $(O)/sounds.o + +all: $(O)/linuxxdoom + +clean: + rm -f *.o *~ *.flc + rm -f linux/* + +$(O)/linuxxdoom: $(OBJS) $(O)/i_main.o + $(CC) $(CFLAGS) $(LDFLAGS) $(OBJS) $(O)/i_main.o \ + -o $(O)/linuxxdoom $(LIBS) + +$(O)/%.o: %.c + $(CC) $(CFLAGS) -c $< -o $@ + +############################################################# +# +############################################################# \ No newline at end of file diff --git a/prboom/TXTS/DOOM/README.ASM b/prboom/TXTS/DOOM/README.ASM new file mode 100644 index 000000000..89629769a --- /dev/null +++ b/prboom/TXTS/DOOM/README.ASM @@ -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 + diff --git a/prboom/TXTS/DOOM/README.B b/prboom/TXTS/DOOM/README.B new file mode 100644 index 000000000..3d2fa2ff9 --- /dev/null +++ b/prboom/TXTS/DOOM/README.B @@ -0,0 +1,140 @@ + +README for Linux DOOM Source distribution +========================================= + + +DISCLAIMER +---------- +This is not "The DOOM Source Code" dump for a bunch +of reasons. It is based on a DOOM development directory +snapshot as of January 10th, but has been stripped and +changed. Thus it is the DOOM source, but there are many +minor differences to the source as last used by id +Software. + +Note that thus neither John Carmack nor Dave Taylor nor +anybody else at id is responsible for the contents of +this archive, or the changes introduced to the original +source. + +If there are any questions, contact me at bk@gamers.org, +or preferably post to the mailing list at + + doom-editing@gamers.org + +(send mail to majordomo@gamers.org, content just +a single "info doom-editing"). I will post any updates +or notifcation of corrections there. I will probably +put some stuff at + + http://www.gamers.org/dEngine/doom/ + +as well. Look there for the "Unofficial DOOM Specs" as +minimal recommended documentation. + + + +REMARKS +------- +I made a few minor bug fixes, added some experimental sound +code, and, and changed the handling of IWAD dependend game +modes. Most of the changes though have been shuffling +around sources in a sometimes futile attempt to separate +modules more cleanly, and make certain parts easier +to locate and modify. There is still much left to do, but +I hope that the current source is a good base to start +with, especially with a cooperative effort in mind. Those +so inclined will find the source prepared for CVS. + +There is a list of changes and fixes I did not get around +to in TODO, and an incomplete worklog in ChangeLog, that +also includes some minor ToDo statements scattered throughout +the log. + + +a) Linux SVGA +There is no SVGA support. For development and debug +purposes, the X11 version seems to be more handy. + +b) Sound - see README.sound, + and the sndserver.tgz archive. + +c) GLDOOM - see README.gl + +d) Win32 +There was no Win32 support in the original dump. + +e) DOS +Original DOS support (including the texture +mapping and fixed point assembler) has been +removed, mainly because of the lack of sound +support. + +f) DoomEd +The NeXTStep DoomEd sources in the dump were +garbled (filenames - prolly an issue of ISO9660 +with or w/o extensions). Somehow Bear never got +around to send me a list of the correct filenames, +and I won't bother guessing without a NeXT box +at hand. + +There is a plethora of useful editors +for DOOM. I suggest using DEU for X11. + +g) BSP Tools +The BSP builder and other tools have +been released by John Carmack long ago, +and since improved/replaced by others. +Again, I recommend taking a pick among +the tools available for Linux. + +h) DOOM game tools +There are a number of tools that have +not been released, namely those which +compiled the Things and State Tables, +the frame animation LUT's, sound tables +etc. Basically, they compile similarly +complex LUT's to generate C files. The +tools are omitted from this distribution. + +There are some files in the +distribution (info.h/c, sounds.h/c) +that are essentially the output of these +tools. This is the data that defines +DOOM (as a game) for all practical +purposes. + +I recommend keeping them, as they are +part of the source. In the long run, +handling them as well as the action/ +animation functions as a separate game.so +library (as with Quake2) seems to be a +good idea. + +i) Artwork +Neither the original artwork nor the +misc. WAD files are included in this +archive. You will at least need the +shareware WAD file to run the executable, +but it shouldn't be to difficult to get +a hold of that. + +Note that the mechanism to detect the +presence of a registered or commercial +version is still in the source, and +homebrew maps are still disabled. This +is easily removed now, but as FinalDOOM, +Ultimate DOOM and DOOM 2 are still in +the shops, it is probably polite not +to distribute a source or binary without +that mechanism. + +This version of Linuxdoom supports Plutonia +and TNT WAD from FinalDOOM as well. No +guarantees, though. + + +Enjoy! + + + b. 97/12/22 diff --git a/prboom/TXTS/DOOM/README.GL b/prboom/TXTS/DOOM/README.GL new file mode 100644 index 000000000..df443a9fb --- /dev/null +++ b/prboom/TXTS/DOOM/README.GL @@ -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)? diff --git a/prboom/TXTS/DOOM/README.book b/prboom/TXTS/DOOM/README.book new file mode 100644 index 000000000..0fe594986 --- /dev/null +++ b/prboom/TXTS/DOOM/README.book @@ -0,0 +1,57 @@ + +The DOOM Book + +Shortly after the Wolfenstein 3D source release, +I sent a mail to Jay Wilbur suggesting a book +about the DOOM engine. I anticipated a similar +release of the DOOM sources within a year or +two, and the obvious problems with the Wolfenstein +sources (lack of accompanying artwork, a code +base not maintained for quite some time) seemed +to demand a better approach. I talked to some +publishing company reps at the Book Fair in 1995, +and while they were cautiously interested, id was +not. + +In the last weeks of 1996, following a visit at +id Software two months earlier, and after the +departure of Jay Wilbur, John Carmack asked me +whether I was still interested in doing the book. +I was, Bear sent me a code dump, and Todd +Hollenshead set out to address the legal concerns +(of which were many). + +Unfortunately, what might have worked in 1995 +turned out to be a doomed attempt in 1997. I won't +go into the details - let's just say that my +leaving university and going back to full time +writing for a living repeatedly forced me to +change priorities on what looked more and more +like a project unlikely to generate any revenue. + +By mid of the year, when the legal issues had +finally been settled, it didn't look like I was +going to find a publisher at all. Following the +Book Fair in 1997 and some more discussions +(with about a dozen publishers, total), I gritted +my teeth and decided to abandon the project. + +Note that the book project as such wasn't supposed +to hold up the source release to the public. +However, given the legal concerns relating to +the third party sound code in DOS DOOM, and the +lack of Win32 support as well as the advantages of +an OpenGL based release, the idea was to put +together a consistent, stable code base prior to +public release - most of which was supposed to be +an offspring of my reformatting and modifying the +code for the book. + +None of this worked out as intended. However, I +hope that, at long last, this distribution +will finally provide a good point to start for +any cooperative effort to extend the already +impressive lifespan of DOOM into the age of +multiplayer servers and hardware-accelerated +clients. + diff --git a/prboom/TXTS/DOOM/README.sound b/prboom/TXTS/DOOM/README.sound new file mode 100644 index 000000000..79541b4f5 --- /dev/null +++ b/prboom/TXTS/DOOM/README.sound @@ -0,0 +1,110 @@ + +README: sound in DOOM + + +1) DOS/Win32 sound + +id licensed a third party sound library called +DMX for DOS DOOM. The situation exhibited +many symptons of serious NIH "Not Invented Here"), +and one of the consequences is that the original +DOOM sound code does not work without DMX. As +DMX is not publicly available, the original DOOM +sound support is removed. + +Win32 was not supported in the source dump I got. +I have no knowledge how the WinDOOM port did the +sound handling. A Win32 port should probaly rely on +DirectSound. So far, the Win32 glDOOM port Jim Dose +is working on has no sound support. + +In consequence, the only target with a working sound +code is UNIX, which I could only verify with Linux +on Intel586. + +2) Linux sound + +DOOM for Linux used a separate process, sndserver. + +Quoting Dave Taylor: + +"Sound drivers should be an asychronous model, either +a seperate thread or a seperate process. This is +because sound should always be fed to the card without +interruption or else you get pops and with low latency +or else you get angry players. + +Now it turns out that this kind of code isn't too fun +to write. In the days of Linux Doom, threads were not a +happnin thing in Linux. In fact, they still largely +aren't. You can use them these days if you have gnu's +libc installed, but you still can't debug them because +gdb doesn't support them properly yet. I believe the +original seperate process had a bad latency delay +because of the time it took for commands to be flushed +through the pipe used to communicate with the seperate +process. I should have looked into this more thoroughly. + +In Quake, I discovered that I could feed multiple +acknowledgements to a SoundBlaster or compatible without +any side-effects such as pops or other malfunctions. +This discovery led me to switch to a completely synchronous +model, much much easier to debug and understand, so I +think this was fairly intelligent. Although we had to +populate the game with calls in the right places to keep +the sound buffers fed, and although it wasn't gauranteed to +be always fed, well over 99% of the time, it was fed, and +your the latency was never worse than the frequency of your +refills (several times per frame) plus a small lead time +(40th of a second?)." + +The separate sndserver code base introduced some redundancy +(WAD access for sound lumps) for each UNIX target (Sun, SGI, +Linux) and more differences between DOS and UNIX version. +However, I kept the IPC based parts in the source, and +separated the sndserver target in another directory to avoid +further redundancy. There seem to be a few bug-like things +going on in the sndserver that do not receive penalty as +the program has to do only a simple task. One example would +be a libc realloc mixed with zone memory allocation. + +Ungraceful and untimely demise of Linuxdoom (core instead +of I_Error) will leave idle sndserver processes in your +system, blocking /dev/bsp. Kill them manually. + +I put the non-redundant parts of the sndserver program +into the i_sound module of doom, and with the SND_SERV +compiler switch you can choose to use the internal sound +support. However, there is a problem with e.g. the +double shotgun and the plasma gun - walk up to a wall, +face it straight, and fire. The sound output is crappy. +This vanishes with decreasing screen size. A similar +problem occurs with trimer driven asynchronous output +enabled by SNDINTR. + +I agree with Dave that threads would be preferable. +With respect to Linux ports of John Carmack's next +Trinity engine, this one will rely on Win32 +multithreading e.g. for input sampling. So the Linux +community will have to sort out threads anyway :-). + +To improve the current sound server, other means of +IPC should take care of the latency. The mixing +buffer/command buffer as shared memory comes to mind. + + + +3) Music support + +There is, and was, no music support in Linuxdoom. Fine with +me - I wouldn't give a bat's tail feathers for DOOM music. +Your mileage may vary. There are a few leftovers of the DOS +music support also interfacing DMX, so there is a place +to start. However, in the age of CDROM based music, I +recommend getting e.g. Workman to cooperate with DOOM +(currently, DOOM accessing the soundcard SpekerOut +interferes with Workman controlling the CD drives +SpeakerOut), so musci could be chosen and run completely +independend of the game. You could try Linuxdoom with +Q2 music that way. + diff --git a/prboom/TXTS/DOOM/Readme.txt b/prboom/TXTS/DOOM/Readme.txt new file mode 100644 index 000000000..c67f7b740 --- /dev/null +++ b/prboom/TXTS/DOOM/Readme.txt @@ -0,0 +1,78 @@ + +Here it is, at long last. The DOOM source code is released for your +non-profit use. You still need real DOOM data to work with this code. +If you don't actually own a real copy of one of the DOOMs, you should +still be able to find them at software stores. + +Many thanks to Bernd Kreimeier for taking the time to clean up the +project and make sure that it actually works. Projects tends to rot if +you leave it alone for a few years, and it takes effort for someone to +deal with it again. + +The bad news: this code only compiles and runs on linux. We couldn't +release the dos code because of a copyrighted sound library we used +(wow, was that a mistake -- I write my own sound code now), and I +honestly don't even know what happened to the port that microsoft did +to windows. + +Still, the code is quite portable, and it should be straightforward to +bring it up on just about any platform. + +I wrote this code a long, long time ago, and there are plenty of things +that seem downright silly in retrospect (using polar coordinates for +clipping comes to mind), but overall it should still be a usefull base +to experiment and build on. + +The basic rendering concept -- horizontal and vertical lines of constant +Z with fixed light shading per band was dead-on, but the implementation +could be improved dramatically from the original code if it were +revisited. The way the rendering proceded from walls to floors to +sprites could be collapsed into a single front-to-back walk of the bsp +tree to collect information, then draw all the contents of a subsector +on the way back up the tree. It requires treating floors and ceilings +as polygons, rather than just the gaps between walls, and it requires +clipping sprite billboards into subsector fragments, but it would be +The Right Thing. + +The movement and line of sight checking against the lines is one of the +bigger misses that I look back on. It is messy code that had some +failure cases, and there was a vastly simpler (and faster) solution +sitting in front of my face. I used the BSP tree for rendering things, +but I didn't realize at the time that it could also be used for +environment testing. Replacing the line of sight test with a bsp line +clip would be pretty easy. Sweeping volumes for movement gets a bit +tougher, and touches on many of the challenges faced in quake / quake2 +with edge bevels on polyhedrons. + +Some project ideas: + +Port it to your favorite operating system. + +Add some rendering features -- transparency, look up / down, slopes, +etc. + +Add some game features -- weapons, jumping, ducking, flying, etc. + +Create a packet server based internet game. + +Create a client / server based internet game. + +Do a 3D accelerated version. On modern hardware (fast pentium + 3DFX) +you probably wouldn't even need to be clever -- you could just draw the +entire level and get reasonable speed. With a touch of effort, it should +easily lock at 60 fps (well, there are some issues with DOOM's 35 hz +timebase...). The biggest issues would probably be the non-power of two +texture sizes and the walls composed of multiple textures. + + +I don't have a real good guess at how many people are going to be +playing with this, but if significant projects are undertaken, it would +be cool to see a level of community cooperation. I know that most early +projects are going to be rough hacks done in isolation, but I would be +very pleased to see a coordinated 'net release of an improved, backwards +compatable version of DOOM on multiple platforms next year. + +Have fun. + +John Carmack +12-23-97 diff --git a/prboom/TXTS/DOOM/Todo b/prboom/TXTS/DOOM/Todo new file mode 100644 index 000000000..89529c9fd --- /dev/null +++ b/prboom/TXTS/DOOM/Todo @@ -0,0 +1,123 @@ + +- create Web repository for sources, patches, + news, and pointer to doom-editing mailing + list. + +- get DOOM Public License from id + +----------------------------------------------- + +- remove m_fixed, switch to floating point + More stable, and prolly even faster. + +- make SCREENWIDTH/HEIGHT work at startup? + Well, the HUD/STBar stuff is tied to the + scales implied by the graphics. Rather do + GLDOOM and use texture mapping. + +- fix aspect ratio? + 320x200 is nothing viable nowadays. + A 320x240 base (4:3) would be a lot better. + See above on width/height. + +- limited look up/down by y-shearing? + Prolly not worth it, rather switch to GLDOOM. + +- switch to C++? + The action function pointers have varying + argument lists (no parameter, one, etc.). + C++ doesn't like that much. A major rewrite. + +- switch to doommain.c plus libdoom? Have + libref, libgame etc.? + Another major rewrite. + +- use XFree86 DGA, prolly not that much faster + than MIT SHM, but allows for directly sampled + mouse (and even freelook). Recommended for + GLDOOM. + +- put together an accompanying developer toolkit + source distribution: DEU, RMB, BSP for Linux/X. + +- move info.h, info.c, sounds.h, sounds.c and + other data to a separate lump in the WAD, + or into a libgame.so, to separate the + generic stuff (refresh, I/O) from the + DOOM specifics. + +- decide whether precaching all sounds is + better than retrieving and releasing + every so often. DOOM seems to do that + frequently (8bit stuff, originally for + DOS), and the Linux sound is 16bit + (conversion in the mixing, requires + some padding) - we prolly got the memory + to spare. + +- 16bpp CLUT. The lightmaps and the + framebuffer could be changed to switch + to 64K colors. Prolly better to do + GLDOOM right away. + +- remove checks for commercial etc., in + non-essential issues (enabling PWAD's). + +- change (simplify) determination of + sky texture (done by game version). + Explicit? + +- remove all game version checks + +- different handling of Demo - don't + exit on "different game version" + +- how about shareware/retail "You are here" + intermission animation? Wasn't in + commercial (DOOM 2). + +- double shotgun in DOOM1, all weapons with + shareware + +- checks for required lumps. We need fallbacks + for lumps that are not present, that is, + default sounds etc. to be used instead, + or removing THINGS w/o sprites etc. + +- client/server? I'd suggest ripping off some stuff + from the abandoned IBM WebView project + +- Blockmap + The BLOCKMAP lump might be (partly) redundant, + as the BSP allows for clipping (except certain + LineDefs that will not spawn Segs). + +- LOS + REJECT and intersection based LOS checking could be + done using the BSP. In case of REJECT, certain + monster AI special effects would be lost, though. + +- correct handling of height in collision. This is + not done, and the checks are scattered around in + many places. It does require handling of "player + on top of monster" situations, too - we have to + make sure the players falls off far enough to + avoid getting "stuck in monster". + +- remove obsolete menus (Detail. Music Volume?) + +- clip explosion range damage (and sprites) using + REJECT? That is, if one Sector/SSector not + visible from the other, do not apply damage, + not render sprite if player in other sector. + Hmmm - explosion behind small pillar might not be + visible at all, but do we care? + + +- Ungraceful and untimely demise of Linuxdoom (core + instead of I_Error) will leave idle sndserver + processes in your system, blocking /dev/bsp. + A timeout on lack of input for "sndserver"? + +- threaded sndserver? SHM mixing buffer? + Or internal, timer-based? diff --git a/prboom/TXTS/Log_pr.txt b/prboom/TXTS/Log_pr.txt new file mode 100644 index 000000000..7ecfbaf2e --- /dev/null +++ b/prboom/TXTS/Log_pr.txt @@ -0,0 +1,659 @@ +Log of changes to my Boom Engine-Port to Windows 95/98/NT 4.0 (+SP3) + +Florian 'Proff' Schulze + +--------------------------------------------------------------------------- +12/08/98 + +D_MAIN.C : Fixed two rsp file related bugs: + 1. If the rsp file was empty it caused a SEGV. + 2. If there was a empty line in the rsp file, DoLooseFiles tried + to add '.wad' which couldn't be found. + +I_SOUND.C : Added midiUnprepareHeader to BlockOut(). + +12/06/98 + +HU_STUFF.C : Changed the positions of the HUD so it can be scaled. + +V_VIDEO.C : Tweaked the scaling functions again. + +HU_LIB.C +HU_STUFF.C : The message line is now scaled. + +INFO.C +M_MENU.C : Removed nearly all calls to V_DrawBlock, because they could not + be scaled. Affected were the drawing of the colorchips for the + automap, here I use hardcoded patches now. Also affected was the + drawing of the backgroundbox for verifing the reset to default, + this patch (M_VBOX) is now in info.c and can be changed with a PWAD. + The drawing of the cursor for chatstrings is changed for hi-res. + +12/05/98 + +D_MAIN.C +G_GAME.C +P_SETUP.C +P_SETUP.C +P_TELEPT.C +VERSION.H +WINSTUFF.C : Added changes from Boom 2.03 and updated version number. + +WINSTUFF.C : Added usejoystick to the joystick functions. + +M_MISC.C +I_SOUND.C : Added 'snd_dsounddevice' and 'snd_mididevice' to cfg, they are the + same as '-dsounddevice' and '-mididevice'. + +I_VIDEO.H +M_MISC.C +WINSTUFF.C : Removed '-nomodesenum' and moved it to the cfg-file 'vid_nomodesenum'. + Added 'vid_directdrawdevice' to cfg, it's the same as '-ddrawdevice'. + +I_MAIN.C : Added D_DoomExeDir to location of 'disp.txt' and 'error.txt'. + +I_SOUND.C : Added D_DoomExeDir to location of 'prboom.mid'. + +D_MAIN.C : Added searching for response file in the exe directory to FindResponseFile. + +M_MENU.C : The mousebutton for moving backward is now drawn. This feature is + now ready for the public. + +12/02/98 + +D_MAIN.C +I_MAIN.C +M_MISC.C +WINSTUFF.C : Changed the video handling so the video options can be saved in + the cfg-file. + +11/27/98 + +D_MAIN.C : Removed bug in position of PAUSE patch. + +P_ENEMY.C +P_MOBJ.C +M_MISC.C : Added translucency to exploding missiles and ressurected enemys. + Can be toggled with missile_explode_trans and vile_ressurect_trans + in the cfg-file. + +WINSTUFF.C : Added "-nomodesenum" to disable mode enumeration but still try + to set the searched mode. + +11/24/98 + +I_VIDEO.H +M_MISC.C +WINSTUFF.C : Added vidNoFlip option to allow deactivation of surface flipping. + On some computers this speeds things up without visual quality loss. + On my computer I get 5 more fps at 640x400 and 93(!) at 320x200. + +WINSTUFF.C : Changed some things in the DirectDraw code. + Removed bug were the framebuffer was cleared every frame, this speeds + things on my computer at 640x400 up by 8(!) frames per second. + +VSCALE.NAS : Removed some BIG bugs. + +D_DEH.C +G_GAME.C +INFO.* +M_RANDOM.H +P_ENEMY.* +P_INTER.C +P_MOBJ.H +P_SIGHT.C +R_THINGS.C : Added #ifdef STEALTH to Andy Baker's stealth monsters changes, because the + savegames aren't compatible to Boom with them. So stealth monsters must be + activated in the code before they work. + +11/22/98 + +D_DEH.C +G_GAME.C +INFO.* +M_RANDOM.H +P_ENEMY.* +P_INTER.C +P_MOBJ.H +P_SIGHT.C +R_THINGS.C : Added Andy Baker's stealth monsters. + +V_VIDEO.C : Changed the stretching functions a little bit, now the stretching + looks better. + +WINSTUFF.C : Added joystick support. + +D_MAIN.C : Added '-viewangle X' where X is a value between 0 and 7 which + sets the viewangle in 45 Degree steps. + +D_MAIN.C : Removed uneccessery check in D_ProcessEvents. + +11/21/98 + +I_SOUND.C : Added selection of Midi devices. You can select one with + '-mididevice X' where X is the number of the device. + The default is the MIDI-Mapper. + +I_SOUND.C : Added selection of DirectSound devices. You can select one with + '-dsounddevice X' where X is the number of the device. + The default is the primary device. + +WINSTUFF.C : Added selection of DirectDraw devices. You can select one with + '-ddrawdevice X' where X is the number of the device. + The default is the primary device. + +R_DATA.C : Redone R_InitTranMap. It's seperated to R_CheckTranMap and + R_GenerateTranMap. + There are now 3 cachefiles for the tranmaps: + tran25.dat this is for the new 25% map + tranmap.dat this is the standard 66% map like in Boom + tran75.dat this is for the new 75% map + The filter values are all configureable in the cfg-file with: + tran_filter_pct25 this is for the new 25% map + tran_filter_pct this is the standard 66% map + tran_filter_pct75 this is for the new 75% map + The tranmaps can be stored in a wad-file with the following lumps: + TRAN25 the 25% map + TRANMAP the 66% map + TRAN75 the 75% map + +11/19/98 + +M_MISC.C +R_DRAW.C +R_MAIN.H +R_SEGS.C +R_THINGS.C : Added support for 3 different tranmaps. + +R_DATA.C : Modified R_InitTranMap to support 3 tranmaps. + Seperated calculation of tranmaps to R_GenerateTranMap. + +P_MOBJ.H : Added MF_STEALTH and MF_TRANSLUCXX to the mobjflag_t enum. + MF_STEALTH is not used yet. + +D_DEH.C : Changed the UNUSED1-4 mnemonics to TRANSLATION2, STEALTH, + TRANSLUC25 and TRANSLUC50. + +11/18/98 + +HU_STUFF.C +M_MENU.C +M_MISC.C : First changes for a new configureable HUD. +HU_CONF.* : Added for new configureable HUD. + +R_DRAW.C : Added faster R_DrawSpan. + +Released version 2.02 on 11/15/98 + +11/14/98 + +*.TXT : Updated the most textfiles. + +11/13/98 + +WINSTUFF.C : Changed handling of DirectDraw. +I_SOUND.C : Slightly changed the sound-handling. +LPRINTF.C : Fixed small bug where everything was written to the console, not + only the masked priorities. + +11/09/98 + +README.TXT : Updated and made more detailed. + +WINSTUFF.C : Added code to center the console window on the screen. + +11/08/98 + +I_SYSTEM.C : Removed the last newline in I_EndDoom because it does not work + like in DOS. + +11/06/98 + +WINSTUFF.C : Added setting of the console title. + +M_FIXED.H : Changed FixedDiv slightly. + +11/05/98 + +I_SYSTEM.C : Changed handling of console-colors for I_EndDoom. +WINSTUFF.C : Fixed mouse buttons getting stuck. Fixed ALT getting stuck when + ALT-TABing away (I hope). + +11/03/98 + +D_NET.C : In D_ArbitraryNetStart I changed netbuffer->numtics from 2 to 4. + I hope this helps with networking. + +I_MAIN.C +I_SYSTEM.C +LPRINTF.C +WINSTUFF.* : Replaced the old Console with a new Window based one. + (Inspired by ZDoom) + +11/01/98 + +D_MAIN.C +I_SYSTEM.C : Fixed some compatibility problems with mingw32 and cygwin32. + +10/31/98 + +I_SOUND.C : Changed sound-code a little bit. + +I_SYSTEM.* : Changed and fixed the time functions. Added function I_GetTrueTime which + returns the highest accurate time possible (Used in I_SOUND). + +I_SOUND.C +M_MISC.C +TI*.* : Removed all DigiMid (Timid) stuff, because it does not work completly. + +10/30/98 + +Some Files : Added latest changes from Boom 2.02 release. + +10/06/98 + +WINSTUFF.C : Removed setting of clip-range when moving the window, this removes the problem + that the window slides down the screen when moved with the titlebar. + +09/30/98 + +Some Files : Removed nearly every typecast, now it runs a bit more stable but not perfect. + +09/24/98 + +R_MAIN.C : Changed R_ExecuteViewSize a little bit to fix a bug in 400x300. + +WINSTUFF.C : Added resolutions 800x600,1024x768 and 1280x1024. + +I_SYSTEM.C : Changed I_GetTime_RealTime to use realtic. + In I_EndDoom I now use _cprintf instead of putchar. + +09/21/98 + +F_FINALE.C : Added stretching to BunnyScroller. + +V_VIDEO.* : Tweaked the stretching functions. + +09/20/98 + +Many Files : Substituted V_DrawPatchDirect with V_DrawPatchStretched. + +V_VIDEO.* : Added functions for stretching patches to fullscreen for high-res. + Thanks to Nicolas Kalkhof. + +09/17/98 + +I_NET.C : Removed obsolete debugging stuff. + +D_MAIN.C : Removed the hack in D_DoomExeDir from 08/15/98 and simply removed the + first backslash before prboom.cfg. + +Many Files : Added latest changes from Boom 2.02f and removed c_out.*, because they + are substituded by lprintf.*. + +08/18/98 + +D_MAIN.C +DOOMDEF.H +F_FINALE.C +M_MENU.C +R_MAIN.C +R_THINGS.C +ST_STUFF.C +ST_STUFF.H +WINSTUFF.C : Added some more support for high-res, now the statusbar and the weapon + are drawed correctly. If you have an aspectratio different from 0.625 + the sky will NOT be drawed correctly. The menus and intermissionscreens + are not scaled. Added commandline switches '-width' and '-height', they + are currently limited from 320x200 to 640x480. + +WINSTUFF.C : Mainly in WndProc I changed the following things: + Now the pause-key works. (Inspired by ZDoom) + If you switch to another application the priority-class is set to idle, + you can turn this off with '-noidle'. (Taken from ZDoom) + Removed sensless DefWindowProc. + +08/17/98 + +D_MAIN.C +DOOMDEF.C +DOOMDEF.H +F_FINALE.C +M_MENU.C +R_DRAW.C +R_MAIN.C +WINSTUFF.C : Added very crude high-res support. Currently it's still hardcoded. + +G_GAME.C +M_MENU.C +M_MISC.C : Added mousebbackward for my mouse config (left key -> forward, + right key -> backward). But does not fully work, in the keybindings + it's not displayed and sometimes the button hangs. + +I_SOUND.C +M_MISC.C : Reworked the music-code, now you can switch with mus_card in the + cfg-file between three different midi-players: + -1 Autoselect + 0 No Music + 1 MCI-Midi, this uses the mci-interface and needs a temporary + file called prboom.mid + 2 Stream-Midi, this uses the streaming midi-interface and needs + no more temp-file, but it seems to chrash sometimes. + Not fully tested. + 3 Timidity, this uses gus-patches like allegro in DOS-Boom. + Currently it does not loop and its very slow, but it works. + It only works when DirectX is available and the sfx are enabled. + +TI_*.* : These are the files from Timidity. + +WINSTUFF.C : Removed '-nomouse', because there allready was use_mouse in the + cfg-file which I use now. + +08/15/98 + +I_SYSTEM.C : In I_GetTime_RealTime I now use QueryPerformanceCounter when evailable, + because it's more accurate in NT. + +WINSTUFF.C : Made '-grabmouse' default, because without it's stupid. + Removed the command-line option. + +Most : Converted all tabs to two spaces. Started to indent correctly. + +M_MENU.C : I changed the message printing in M_Drawer a bit, because when it + should write: + 'INCOMPATIBLE SAVEGAME!!! + ' + 'WADS EXPECTED: + ' + './PLUTONIA.WAD + ' + 'ARE YOU SURE? + it wrotes: + 'INCOMPATIBLE SAVEGAME!!! + ' + 'WADS EXPECTED: + ' + ' + 'ARE YOU SURE? + +D_MAIN.C : I'm removing the last (back)slash in the ExeDir in D_DoomExeDir, + because you got directorys like 'c:\doom\/prboom.cfg' and NT + doesn't like those. + +07/29/98 + +WINSTUFF.C : I added WM_CLOSE to the WndProc switch. Now you can't close the + window and the game-screen is not blitted wildly over the screen. + Thanks to Willem Rothe. + +I_SYSTEM.C : In I_Quit I changed the title of the MessageBox from + "PrBoom - Error !!!" to "PrBoom", because on some messages it's + stupid, i.e. if a demo ends its not a error. Thanks to Willem Rothe. + +C_OUT.C : In C_fprintf I added #ifdef _DEBUG to output messages on stderr + to the console when compiled in DEBUG-Mode. + +07/26/98 after version 1.03 release + +I_SOUND.C : Added volume check in I_StartSound and I_UpdateSoundParams. + Now the sound is really off when volume is 0. Thanks to + Willem Rothe, who noticed it. + +Released version 1.03 on 07/23/98 to ftp://ftp.cdrom.com/pub/doom/incoming + +07/22/98 + +WINSTUFF.C : Added two new commandline options: + -fullscr Forces fullscreen-mode at startup if it's available + -nofullscr Forces window-mode at startup + +D_DEH.C : Added the last source changes from original BOOM. + +07/14/98 + +I_SOUND.C : In I_SoundIsPlaying I forgot to check noDSound, this caused a + SEGV if DirectSound was not initialized. + +07/10/98 + +I_SOUND.C : Again ;) + I had many problems: + 1. The chainsaw stuttered. + 2. Some sounds were stoped were they shouldn't. + 3. Some sounds were overwritten by others. + + One major change since yesterday was the addition of the endtime + of every sound, it is used in I_SoundIsPlaying. Now it really + seems to work as I wanted it. + +07/09/98 + +S_SOUND.C : After the start of a sound I change the purge-level of the + sound data to PU_CACHE, before that change the sounds were + not freed before the game terminates. + +I_SOUND.C : I have changed the handling of Sound again. Added a return when + DirectSound failed to initialize, before this it caused a SEGV. + Added macros for calculation of VOL, SEP and PITCH. + +WINSTUFF.C : Added set of palette when switching from fullscreen to window-mode. + +07/08/98 + +I_SOUND.C : I have totally changed the handling of Sound and Music. Now the + chainsaw stutters far less than before, and the music behaves + better. + +07/05/98 after version 1.02 release + +D_DEH.C : In deh_procStringSub where the function writes to dehout.txt I + added spaces before and after the "=" sign, because I have + written a small perlscript to extract the bex format of the + string replacement from dehout.txt. + +Released version 1.02 on 07/05/98 to ftp://ftp.cdrom.com/pub/doom/incoming + +07/05/98 + +README.TXT +COMPILE.TXT : Rewritten. + +07/04/98 + +README.TXT : Updated. Changed version-number for prboom from 2.01 to 1.02 because + this is the real-version. + +WINSTUFF.C : Updated version-number for prboom to 1.02 + +C_OUT.C +D_MAIN.C +DOOMTYPE.H +G_GAME.C +G_GAME.H +I_MAIN.C +I_SOUND.C +I_SYSTEM.C +M_MENU.C +M_SWAP.H +W_WAD.C +WINSTUFF.C +Z_ZONE.H : Added and changed some things for compatibility to CYGWIN32 and MINGW32 + +07/02/98 + +WINSTUFF.C : Added inputhandling for the console-window. This is for pressing + ESC in net-startup. You can't really play, because it stutters. + +07/01/98 + +I_SOUND.C : Changed the filename of the temporary midifile to prboom.mid. + Added I_InitMusic to I_InitSound. Added I_StopSong to + I_UnRegisterSong and I_RegisterSong. + +D_MAIN.C +F_FINALE.C +HU_STUFF.C : Added check for TNT.WAD and PLUTONIA.WAD with set of gamemission. + Now levelnames and endtexts are correct. + +06/30/98 after first release + +WINSTUFF.C : I changed every constant wich has to do with screensizes to their + defined name (SCREENWIDTH and SCREENHEIGHT). WARNING: In the + assembler functions the values are still hardcoded. + +R_DRAW.C : I forgot NOASM in the ifdefined statement before R_DrawColumn. + +WINSTUFF.C : I have changed V_EndFrame a little bit, the DirectDraw handling was stupid. + After the changes it's even a bit faster. + +WINSTUFF.C : I have removed the fFullscreen variable and now use only the + vidFullScreen variable. Now, when you switch from fullscreen to + windowed-mode it will be saved in the config-file, not only when + you switched to fullscreen. + +I_SYSTEM.C : I changed the calculation of the delaytime in I_WaitVBL. + In I_Quit I'm using I_WaitVBL instead of Sleep and I increased the delaytime. + +INFO.C : I changed almost every 'static const char' to 'static const unsigned char' to + avoid warning messages in Visual C. +AM_MAP.C +D_DEH.C +DOOMTYPE.H +F_FINALE.C +G_GAME.C +I_SYSTEM.C +INFO.C +M_MENU.C +MMUS2MID.C +MMUS2MID.H +R_BSP.C +R_DATA.C +R_MAIN.C +R_PLANE.C +R_SEGS.C +R_THINGS.C +W_WAD.C +WINSTUFF.C : I added some typecasts and a few other things to avoid warning messages in Visual C. + +Released on midday the 06/30/98 to ftp://ftp.cdrom.com/pub/doom/incoming + +06/29/98 + +After I got the mail from Ty Halderman I did the following changes: + +1. I commented everything I changed. +2. I removed the display of the key-scancodes (this was a leftover from debugging). +3. I changed the name of the config-file to 'prboom.cfg'. +4. I included the textfiles from Boom. + +06/28/98 +HU_STUFF.C : In HU_Responder I added three typecasts. +F_FINALE.C : In F_BunnyScroll I change the tags for PFUB1 and PFUB2 to PU_CACHE. +I_VIDEO.C : In I_ScanCode2DoomCode the parameter 'a' was sometimes + out of range. Added rangecheck. +MMUS2MID.C : In mmus2mid I changed the definition of two arrays, + which were too small. +M_MISC.C : Changed a few defaults and added vid_fullscreen in the config-file. + +I think the change in I_VIDEO.C or in MMUS2MID.C or in both has fixed the bug which +changed the keys sometimes. I have tested it 10 times or so, and the keys didn't change. + +06/01/98 - 06/22/98 + +On 06/22/98 I included all source changes by TeamTNT till 06/16/98 + +added WINSTUFF.H and WINSTUFF.C +I_MAIN.C +I_SYSTEM.H +I_SYSTEM.C +I_VIDEO.C : Changed most functions to work with Windows and DirectDraw. +I_NET.C : Changed most functions to work with Windows and TCP/IP. +I_SOUND.H +I_SOUND.C : Changed most functions to work with Windows, MCI and DirectSound. +S_SOUND.C : In S_StartSoundAtVolume the sfx-data is given to I_StartSound. +MMUS2MID.H : added struct MIDI for compiling in VC. +MMUS2MID.C : removed . Moved #ifdef STANDALONE to use MIDItoMidi in WIN32. + +DOOMTYPE.H : Added the missing MIN/MAX definitions, because VC has no . + +M_BBOX.H : Included "doomtype.h" instead of . + +D_THINK.H : in the typedef of actionf_t I swapped actionf_v from Pos 2 to Pos 1 because + it produced warnings. + +D_DEH.H : Corrected the multiline comments. + +M_CHEAT.C +M_CHEAT.H +M_FIXED.H +R_SEGS.C : Changed "long long" to "__int64". + +D_MAIN.C +INFO.C +M_MENU.C +M_MISC.C +W_WAD.C : Included instead of . + +P_GENLIN.C : Changed the Evaluate Expression in EV_DoGenCeiling + from "Dirn? ceiling->topheight : ceiling->bottomheight = targheight;" + to "(Dirn) ? (ceiling->topheight=targheight) : (ceiling->bottomheight=targheight);". + +ST_STUFF.C : Changed the assignment in ST_doPaletteStuff + form "pal = W_CacheLumpNum(lu_palette, PU_CACHE)+palette*768;" + to "pal = (char *) W_CacheLumpNum(lu_palette, PU_CACHE)+palette*768;". + +M_ARGV.C +P_SETUP.C +R_DATA.C +W_WAD.C : Added definition for strncasecmp = _strnicmp and strcasecmp = _stricmp. + +W_WAD.C : Removed filelength function. Changed call of open + function in WritePredefinedLumpWad. + +D_MAIN.C : Included and changed the mkdir call. + +G_GAME.C : Set rndseed with timeGetTime. + +M_SWAP.H : defined SHORT and LONG as no op. + +P_SPEC.C +P_SPEC.H : added pragmas for byte-alignment. + +M_MISC.C : removed "#ifdef NORMALUNIX". + +added DRAWASM.NAS +R_DRAW.C : I added #ifndef _WIN32 before R_DrawColumn, because its in DRAWASM.NAS. + It seems that the functions R_DrawTLColumn and R_DrawSpan are optimized better + by the compiler than the ASM functions in DRAWASM.NAS. + +added VSCALE.NAS +WINSTUFF.C : Added the function V_ScaleBy2 (C only) and V_ScaleBy2a (ASM in VSCALE.NAS) to scale + the output myself, because in NT the function StretchDIBits is horrobly slow. + +M_FIXED.H : Converted FixedMul and FixedDiv to ASM. + +P_ENEMY.C +P_MAP.C +P_MAPUTL.C +P_SETUP.C +P_SPEC.C +P_TELEPT.C +R_MAIN.C +R_PLANE.C +R_SEGS.C +R_THINGS.C +S_SOUND.C +M_FIXED.H : Converted abs to ASM. I had to change the name of abs to D_abs. + +added C_OUT.H and C_OUT.C +AM_MAP.C +D_DEH.C +D_MAIN.C +D_NET.C +M_MENU.C +M_MISC.C +R_DATA.C +R_MAIN.C +S_SOUND.C +WI_STUFF.C : Now all text-output is redirected to the console and to the files + disp.txt and error.txt. diff --git a/prboom/TXTS/Readme.txt b/prboom/TXTS/Readme.txt new file mode 100644 index 000000000..9a318f3d8 --- /dev/null +++ b/prboom/TXTS/Readme.txt @@ -0,0 +1,313 @@ +===================================================================== + README.TXT 04/09/2000 + currently not up to date +===================================================================== + +PRBOOM v2.03 --- an port to WIN32 of the released BOOM source +GLBOOM v2.03 --- an port to OpenGL of the released BOOM source + +-This port is based upon BOOM v2.02 and MBF +-This port was written by Florian "Proff" Schulze, member of TeamTNT + http://www.teamtnt.com +-DOOM is copyright ID software (www.idsoftware.com) +-This port is not endorsed by id software, so don't bug them about it +-I am not responsible for any damage that may be done by this program + +===================================================================== + +Contents + +Section 1. Installing PRBOOM +Section 2. Configuring PRBOOM +Section 3. Playing PRBOOM in Single Player mode +Section 4. Playing PRBOOM in Serial/Network mode +Section 5. Editing for PRBOOM +Section 6. Differences between PRBOOM and BOOM +Section 7. Files and Directories in the PRBOOM Distribution +Section 8. How to report bugs in PRBOOM +Section 9. Appendix + +===================================================================== +----------------------------- +Section 1. Installing PRBOOM +----------------------------- + +Requirements: +------------- + +PRBOOM requires a minimum of a 486DX/33 with 16M of RAM running +Windows 95 / 98 / Windows NT 4.0 (+SP3 or better). + +PRBOOM requires a copy of DOOM, DOOM II, Ultimate DOOM, or Final DOOM already + installed on your system. In the installation instructions below we use + C:\DOOM2 to denote the directory it is installed in. Substitute the + path to DOOM on your system wherever that appears. + +PRBOOM requires a sound card, it will not play sounds over the PC speaker. If +you do not have a sound card you should run it with the -nosound option on the +command line. It requires DirectX 2.0 or better if you want to use sound and +fullscreen-drawing. + +If you want to run PRBOOM in a window you need 32768 (15 bit) or more to get a +playable view. + +To run it fullscreen you need 256 colors. No other color-modes are supported. + +Suggested installation procedure: +--------------------------------- + +1) Unzip the download archive in a new directory, which we will call \PRBOOM. + +2) Type PRBOOM -iwad C:\DOOM2, the game will start as usual. To avoid having + to type -iwad C:\DOOM2, add the line below to your AUTOEXEC.BAT and + reboot: + + SET DOOMWADDIR=C:\DOOM2 + + Alternately you can unzip the PRBOOM archive in your DOOM directory and + avoid needing -iwad or the change to your AUTOEXEC.BAT file. + + You can also simply copy DOOM1.WAD, DOOM.WAD, or DOOM2.WAD to the PRBOOM + directory. + +3) PRBOOM provides support for mouse, but in the current release the mouse + is sometimes choppy if you use it in the window-mode, I had no problems + in fullscreen-mode. + + If you don`t use the mouse you should set use_mouse to 0 in the CFG-File, + because the game runs a little bit faster. + +4) PRBOOM supports different ways to play music. You can choose it with + the mus_card variable in the cfg-file. You have the following options: + 0 No Music + 1 MCI-Midi, this uses the mci-interface and needs a temporary + file called prboom.mid + 2 Stream-Midi, this uses the streaming midi-interface and needs + no more temp-file, but it could make problems. + Stream-Midi is used by default. + + You can't set the volume of the Midi-Music with the option in the game, with + it you can only turn the music on and off. You have to set the volume of the + Midi-Music with the windows-mixer. + + I had some problems with my PCI-Soundcard. I have solved them by setting + the hardware acceleration to one tick lower than 100%. I have found this + setting in the control panel under multimedia settings. + + Under Windows 98 I had to install the newest driver for my PCI-Soundcard + to get MIDI-Music. + + You can change the sampling parameters in the CFG-File. + snd_channels : This is the number of sound-channels used. A higher value + means you can hear more sounds at once, but it also uses + more CPU-Power. + snd_frequency: The sampling-rate, useful values are 11025, + 22050 and 44100. + snd_bits : The bitdepth, allowed values are 8 and 16. + snd_stereo : If you have a mono-soundcard you can set this to 0. + + If you have problems with the midi-music like crashes, you should try to set + "mus_card 1" to select MCI-Midi. The Stream-Midi functions seem to have a bug. + +5) If sound and music sound ok, and the mouse behaves properly, you're done! + +------------------------------ +Section 2. Configuring PRBOOM +------------------------------ + +It's the same as in original BOOM, see boom.txt in the txts/boom directory. + +------------------------------------------------ +Section 3. Playing PRBOOM in Single Player mode +------------------------------------------------ + +It's the same as in original BOOM, see boom.txt in the txts/boom directory. + +In the game 'ALT-ENTER' switches to fullscreen-mode and all window-keys like +'ALT-TAB' work the same way as in any other windows-program. + +Command line parameters +------------------------ + +*Configuration Options + +I have added the following command line parameters: + +-condump + This dumps the output to the files disp.txt and error.txt + +-2 + In window mode: + The gamescreen is stretched by 2 with StretchDIBits + In fullscreen mode: + If your display driver is only able to display 640x480 like in the most + NT drivers, you can use this option to stretch it up to fullscreen. + +-m2 + In window mode: + The gamescreen is stretched by 2 with my own routine (this + is normally faster on NT) + In fullscreen mode: + If your display driver is only able to display 640x480 like in most + NT drivers, you can use this option to stretch it up to fullscreen. + +-fullscr + Forces fullscreen-mode at startup if it's available + +-nofullscr + Forces window-mode at startup + +-width +-height + Specifies the resolution for the display. The maximum is 1600x1200. + Usefull values are: + + width x height + -------------------- + 320 x 200 + 320 x 240 + 400 x 300 + 512 x 384 + 640 x 400 + 640 x 480 + 800 x 600 + 960 x 720 + 1024 x 768 + 1280 x 1024 + 1600 x 1200 + + Default is 320x200. If you go higher than 640x480 the game will be + much slower on most Systems, this has to do with the size of the + L1-Cache and the L2-Cache. + +-noddraw + Don't use DirectDraw. You will not be able to use fullscreen with + this option. + +------------------------------------------------- +Section 4. Playing PRBOOM in Serial/Network mode +------------------------------------------------- + +This is completely different to the original BOOM version, but its +similar to the Linux version of DOOM. + +The following command line parameters are for use in netgames: + +-net + After this comes the player number of the machine. Then comes a list + of host addresses or IP addresses. If you use IP addresses they have to + begin with a ".". If one of the other machines has another portnumber, + you can add " :PORTNUMBER" after the address (note that there MUST be + a blank between the address and the colon). + +-port + If you want to use another port for a machine you can specify it with + this command. + +Here are some samples: + +2 Players: + 1. Machine: -net 1 .192.168.1.2 + 2. Machine: -net 2 .192.168.1.1 + +3 Players with changed port on the 2. Machine: + 1. Machine: -net 1 .192.168.1.2 :26001 .192.168.1.3 + 2. Machine: -net 2 .192.168.1.1 .192.168.1.3 -port 26001 + 3. Machine: -net 3 .192.168.1.1 .192.168.1.2 :26001 + +The -port command is also useful if you want to run a net game on ONE machine: +2 Players: + 1. Command: -net 1 .192.168.1.1 :26001 -port 26000 + 2. Command: -net 2 .192.168.1.1 :26000 -port 26001 + +*Multiplayer Options + +It's the same as in original BOOM, see boom.txt in the txts/boom directory. + +------------------------------ +Section 5. Editing for PRBOOM +------------------------------ + +It's the same as in original BOOM, see boom.txt in the txts/boom directory. + +----------------------------------------------- +Section 6. Differences between PRBOOM and BOOM +----------------------------------------------- + +Whats implemented: + -mouse + -keyboard + -graphics (using StretchDIBits and DirectDraw) + -sound fx (using DirectSound) + -music (using Windows-MIDI-Functions) + -networking (using TCP/IP) + +Whats not implemented: + -joystick + +Whats new: + High-resolutions + +----------------------------------------------------------- +Section 7. Files and Directories in the PRBOOM Distribution +----------------------------------------------------------- + +PRBOOM executable archive PRBOOM202.ZIP + +prboom.exe The executable for Windows 95 / 98 / NT 4.0 +txts Docs and infos +txts/boom Docs and infos of the original BOOM distribution +prbstuff Progs for the Win32-Version. These are from me + +PRBOOM source archive PRBOOM202S.ZIP + +prboom.dsp VC50 Project File +prboom.dsw VC50 Workspace File +src All the source files +txts Docs and infos +txts/boom Docs and infos of the original BOOM distribution +txts/doom Docs and infos of the original DOOM source distribution +makfiles/makefile.dos The DJGPP makefile +makfiles/makefile.c32 The CYGWIN32 makefile +makfiles/makefile.m32 The MINGW32 makefile +boomstuf Progs for the DOS-Version. These are from BOOM + +---------------------------------------- +Section 8. How to report bugs in PRBOOM +---------------------------------------- + +If you find a bug in PRBOOM you should visit + +http://prboom.sourceforge.net + +and follow the directions there for reporting it. + +For more information on reporting a bug, see boom.txt in the same section. + +-------------------- +Section 9. Appendix +-------------------- + +You can get the PRBOOM source at: +http://prboom.sourceforge.net + +You can get the original linux-doom source at: +ftp://ftp.idsoftware.com/source/doomsrc.zip + +You can get the BOOM source at: +http://www.teamtnt.com + +Thanks go to (in no particular order): + ID Software for the release of LinuxDOOM + + TeamTNT for BOOM + + Andy Bay for ATBDOOM + + The DOSDOOM-Team for DOSDOOM + + Randy Heit for ZDOOM + + Ryan Haksi for Dynamic OpenGL Loading (opengl.*) + +------------------------------------------------------------------------- diff --git a/prboom/TXTS/WHATSNEW.TXT b/prboom/TXTS/WHATSNEW.TXT new file mode 100644 index 000000000..8e480a5b9 --- /dev/null +++ b/prboom/TXTS/WHATSNEW.TXT @@ -0,0 +1,109 @@ + BETA release notes: + I might have missed somthing in here, so you should look into my log (log_pr.txt). + The readme.txt isn't up to date. + +Changes since 2.02 + I have include the file 'prboom.inf'. If you right click on it and choose install, + it registeres the '.rsp' files to prboom and installs some icons into the startmenu. + You have to start the installation in the final directory. + + I have include some icons in the exe. + + Response files can be called recursive. A sample is included. + + Fixed some high-res bugs. + + The HUD and the message line is scaled. + + You can set a mouse button for moving backward. I use this for my mouse + config (left key -> forward, right key -> backward). + + New option '-viewangle' to set the angle at which the playerview is drawn, + ranges from 0-7 in 45 Deg steps. + + Video options like width, height, multiply, useflip and fullscreen are saved + into the cfg-file. + + There is a new options for video handling: + vid_noflip 0=use flipping, 1=don't use flipping + This may speed up the drawing. + + Found some bugs in video handling, it should be faster now. + + You can select the devices for DirectDraw, DirectSound and StreamMidi. + This is usefull if you have more than one soundcard or videocard. + + For developers of TC's I have added Andy Baker's stealth monsters. They are + disabled in this release because they mess up compatibility. + + Joystick support. + + Missile explosions and ressurected enemys are now translucent. This can be + changed in the cfg-file (missile_explode_trans and vile_ressurect_trans). + + Support for three different translucency maps. Defaults are 25%, 66% and 75%. + You can use this in dehacked patches. + +Changes since 1.03 + New commandline option '-noddraw' if you don't want to use DirectDraw. + + More detailed README.TXT, read it thorougly. + + Fixed ALT getting stuck when ALT-TABing away. + + Fixed problem where mousebuttons get stuck. + + I have replaced the old DOS-Box console with a new Window based one. + (Inspired by ZDoom) + + I have tweaked the sound-functions a little bit. + + The window moving bug is fixed. + + Removed -grabmouse, because -grabmouse is now default. + Removed -nomouse, because you can use use_mouse in the cfg-file. + + There are now two ways to play the music. You can choose them with mus_card: + 1 MCI-Midi functions, that's like in PrBoom 1.03 with the temporary mid-file. + 2 Stream-Midi functions, that's without the mid-file but still with Windows-functions. + Bye default Stream-Midi is used. + + Now the pause-key works. (Inspired by ZDoom) + + If you switch to another application the priority-class is set to idle, + you can turn this off with '-noidle'. (Taken from ZDoom) + + HIGH-RES !!!!!!! + Added commandline switches '-width' and '-height', they are limited + from 320x200 to 1600x1200. + + All changes from Boom 2.02 are included. + +Changes since 1.02 + I have added two new commandline options: + -fullscr Forces fullscreen-mode at startup if it's available + -nofullscr Forces window-mode at startup + + The latest source change in D_DEH.C is included. + + When switching from fullscreen to window-mode the palette is now + set. + + I have rewritten the soundcode 5 or more times, now it seems to + work as I wanted it. + + I have included a small perl-script to extract the strings changes + in BEX-format out of the dehout.txt file. + +Changes since 1.01 + Support for TNT.WAD and PLUTONIA.WAD from Final DOOM. Now the + correct level names and end texts are displayed. + + If you switched from window-mode to fullscreen-mode, it was saved + in the config file. If you switched from fullscree-mode to + window-mode it was not saved in the config file. + + I changed a few things, so now Visual C prints no warning messages + if it compiles. + + The temporary midifile is now called "prboom.mid" instead of "boom.mid". \ No newline at end of file