diff --git a/COPYING b/COPYING new file mode 100644 index 00000000..a43ea212 --- /dev/null +++ b/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/Makefile.am b/Makefile.am index 48355123..da1d607d 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1 +1,13 @@ -SUBDIRS = Source +dist_doc_DATA = COPYING + +dist_pkgdata_DATA = \ + betagrph.wad \ + betalevl.wad \ + watermap.wad + +SUBDIRS = \ + configs \ + docs \ + examples \ + Source \ + toolsrc diff --git a/betagrph.wad b/betagrph.wad new file mode 100644 index 00000000..3a40252e Binary files /dev/null and b/betagrph.wad differ diff --git a/betalevl.wad b/betalevl.wad new file mode 100644 index 00000000..7df9a122 Binary files /dev/null and b/betalevl.wad differ diff --git a/configs/Makefile.am b/configs/Makefile.am new file mode 100644 index 00000000..f0c2fcb1 --- /dev/null +++ b/configs/Makefile.am @@ -0,0 +1,4 @@ +EXTRA_DIST = \ + common.cfg \ + doom17.dat \ + doom19.dat diff --git a/configs/common.cfg b/configs/common.cfg new file mode 100644 index 00000000..1c77fdea --- /dev/null +++ b/configs/common.cfg @@ -0,0 +1,595 @@ +#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]" +271, ".. Transfer Sky", ".. Set Tagged Sectors' Skies to 1st Side's Upper Texture [271]" +272, ".. Transfer Sky (flip)", ".. Set Tagged Sectors' Skies to 1st Side's Upper Texture, Flipped [272]" +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" + +"-" + \ No newline at end of file diff --git a/configs/doom17.dat b/configs/doom17.dat new file mode 100644 index 00000000..3f7579d3 --- /dev/null +++ b/configs/doom17.dat @@ -0,0 +1,480 @@ +# Linetypes for MBF engine +# +# 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 +Set Tagged Skies' Texture (271); 271 +Set Tagged Skies' Texture, Flipped (272); 272 +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: 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 + +[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 + +[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 +Friction; 256 +Pusher; 512 + +[Angles] +North; 90 +South; 270 +East; 0 +West; 180 +Northeast; 45 +Northwest; 135 +Southeast; 315 +Southwest; 225 + +[Things: Miscellaneous] +Color; Brown +Push Controller; 5001; +Pull Controller; 5002; +Color; Green +Dog; 888; + +[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 +888; 12; 28; 1 +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 + +[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.18 1998/05/12 06:15:25 killough Exp $ +# +# $Log: doom17.dat,v $ +# 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/configs/doom19.dat b/configs/doom19.dat new file mode 100644 index 00000000..ce17a185 --- /dev/null +++ b/configs/doom19.dat @@ -0,0 +1,478 @@ +# 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.17 1998/05/12 06:15:26 killough Exp $ +# +# $Log: doom19.dat,v $ +# 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/configure.ac b/configure.ac index 87f865a6..c29568b2 100644 --- a/configure.ac +++ b/configure.ac @@ -53,5 +53,5 @@ AS_IF([test "x$enable_beta" != "xno"], [AC_DEFINE([BETA], [1], [Support for beta AC_ARG_ENABLE([werror], AS_HELP_STRING([--enable-werror], [Treat warnings as errors])) AS_IF([test "x$enable_werror" = "xyes"], [CFLAGS="$CFLAGS -Werror"]) -AC_CONFIG_FILES([Makefile Source/Makefile]) +AC_CONFIG_FILES([Makefile configs/Makefile docs/Makefile examples/Makefile Source/Makefile toolsrc/Makefile]) AC_OUTPUT diff --git a/docs/Makefile.am b/docs/Makefile.am new file mode 100644 index 00000000..5717bf26 --- /dev/null +++ b/docs/Makefile.am @@ -0,0 +1,12 @@ +dist_doc_DATA = \ + boom.txt \ + boomdeh.txt \ + boomref.txt \ + dckboom.txt \ + mbf.txt \ + mbfedit.txt \ + mbffaq.txt \ + options.txt \ + winmbf02.txt + +EXTRA_DIST = winmbf02s.txt diff --git a/docs/boom.txt b/docs/boom.txt new file mode 100644 index 00000000..c6c11e69 --- /dev/null +++ b/docs/boom.txt @@ -0,0 +1,1242 @@ +===================================================================== + README.TXT 05/25/98 +===================================================================== + +BOOM v2.01 --- a modified port of the released DOOM source + +Phase 1 Release + +By TeamTNT + +Programmers: + +Lee Killough, Jim Flynn, Rand Phares, Ty Halderman, and Stan Gula + + +DoomSource Members: + +Andre Majorel Paul Schmitz +Bob Evans (odessa) Richard Nagel (*Weeds*) +Chris Couleur Steve McCrea +Lisa Moore (pup) William.D.Whitaker +Adam Landefeld Dave Brachman +Dave Armstrong Jeremy Wagner + + +Demo Wads: + +Gary Gosson (Dawning), Paul Fleschute (Rage) + +===================================================================== + +Contents + +Section 1. Installing BOOM +Section 2. Configuring BOOM +Section 3. Playing BOOM in Single Player mode +Section 4. Playing BOOM in Serial/Network mode +Section 5. Editing for BOOM +Section 6. Differences between BOOM and DOOM +Section 7. Files in the BOOM Distribution +Section 8. How to report bugs in BOOM +Section 9. Acknowledgements + +===================================================================== +--------------------------- +Section 1. Installing BOOM +--------------------------- + +Requirements: +------------- + +BOOM requires a minimum of a 486DX/33 with 8M of RAM running DOS. BOOM will +run under Win'95 in a DOS Window, but 16M RAM is recommended. + +Recommended minimum specs are 486DX/66 with 16M or Win'95 with 32M + +BOOM 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. + +BOOM requires a sound card, it will not play sounds over the PC speaker. If +you do not have a sound card you MUST run it with the -nosound option on the +command line. + +Suggested installation procedure: +--------------------------------- + +1) Unzip the download archive in a new directory, which we will call \BOOM. + +2) Type BOOM -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 BOOM 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 BOOM + directory. + +3) BOOM provides support for joysticks. With the current release, your + joystick must be calibrated using the Allegro setup utility ASETUP.EXE. + + 3a) run the Allegro setup utility ASETUP.EXE + 3b) press the Joystick button + 3c) follow the on-screen instructions to calibrate your joystick + 3d) when finished, exit, saving configuration + +4) If sound and music sound ok, and the mouse and joystick behave properly, + you're done! + +Sound/Music Troubleshooting +--------------------------- + +5) Make sure there is a BLASTER= line in your environment (type SET to see +the environment in a DOS session or window). If this is missing, consult +your sound card documentation or technical support. There is a brief +description of the line and its parameters in SNDDRVR.TXT. + +6) If you have a plug and play sound card and are running under DOS, you +need to make sure you install plug and play support in DOS; see SNDDRVR.TXT. + +7) If your AWE32 does not produce music or sound under DOS make sure you +have an E parameter in your BLASTER= line. E620 is the default. + +8) Run the Allegro setup utility ASETUP.EXE + 8a) press the Autodetect button. + 8b) press the Test button. + 8c) if the test pieces all sound correct exit, saving configuration, else + 8c1) go back to the main menu and press digi_driver to configure sound + effects, or midi_driver to configure music. + 8c2) in the menu of device drivers shown, the ones checked are + possibles. Try them in bottom to top order, running the Test + screen after each until the best results are obtained. Exit, + saving configuration. + 8d) open ALLEGRO.CFG with a text editor like Notepad and note the + settings for digi_card and midi_card. Close it and open + BOOM.CFG. Transfer the digi_card setting to sound_card and the + midi_card setting to music_card in BOOM.CFG. Exit. + +9) In the ASETUP.EXE program's sound test screen, the left and right buttons +are reversed relative to some sound cards. If the sounds in DOOM seem to be +reversed to you, then change the flip_pan setting in ALLEGRO.CFG from 0 to 1 +or vice-versa. + +Mouse Troubleshooting +--------------------- + +10) If the mouse fails to work, left motion seems to wait until a button is +clicked, change the line mouse=logitech in ALLEGRO.CFG to mouse=ms, or add +the line mouse=ms at the top. + + +---------------------------- +Section 2. Configuring BOOM +---------------------------- + +Using the Setup Menus +--------------------- + +BOOM provides Setup Menus in the game itself to ease the task of setting +configuration options. From the Main Menu, select 'Setup' and you'll see the +following menu: + + Key Bindings + Weapons + Status Bar / HUD + Automap + Enemies + Messages + Chat Strings + +Selecting a menu item will present a screen or set of screens from which +you can set many of the BOOM options. + +Note: In general, and by default, the cursor movement keys are used to + navigate the menu screens. Exceptions will be noted where appropriate + below. If you bind 'menu navigation' keys (i.e. 'down arrow') to + something other than the default settings, you'll need to think 'new key' + when reading 'default key' in the following text. + + The mouse and joystick may also be used to navigate the menus. + +Note: If a joystick is connected, it's possible that the system may receive + false left or right movements when the joystick is idle. This can affect + any Setup menus that have multiple screens. If this occurs (sudden switch + to previous or next menu) you'll need to recalibrate the joystick, which + will make the problem go away. Refer to the calibration instructions in + Section 1. + +1) Key Bindings + +*Multiple Screens* + +There are four Key Binding screens. You can move among them using the left +and right arrow keys. If "NEXT->" appears in the bottom right corner, +there's another screen. + +*Menu Items & Binding* + +Each menu item shows the action on the left and the key bound to it on the +right. If you want to bind an action to a different key, move the 'cursor' +(where the action is ORANGE) to that action. Press ENTER, the action turns +WHITE, and you're ready to rebind that action. + +Pressing ANY KEY will IMMEDIATELY bind that key to the selected action. + +CAVEAT: + +Be careful when rebinding keys you use to navigate the menus. If you were to +change the 'next item' key from 'DOWN ARROW' to 'Z' then you'll need to use +the 'Z' key from that point on to move to the next menu item. + +*Binding Multiple Keys to an Action* + +In this release of BOOM, only one key can be bound to an action. In a future +release, you will be able to bind multiple keys to an action. + +*Binding a Key to Multiple Actions* + +Under certain circumstances, you can bind a key to several actions. All +actions are grouped according to game state, which can be 'normal play', +'in the menu screens', 'in chat mode', and 'looking at the automap'. + +If two actions are in the same group, they can't have the same key binding. +If two actions are in different groups, they can. + +For example, you can't bind F1 to both the 'HELP' and 'SAVE GAME' actions +because both are available during normal play. If F1 is bound to 'HELP' and +you rebind it to 'SAVE GAME', then whatever key was bound to 'SAVE GAME' +will move over and be bound to 'HELP'. + +As another example, you can bind the 'H' key to 'HELP' for use in normal +play, and to 'GRID' for use when you have the automap up. Some +experimentation will show you where you can bind the same key to various +actions. + +*Mouse Buttons* + +Where an action shows a Mouse Button setting (MB1,MB2,MB3), that action can +be bound to a Mouse Button. When the action is selected for rebinding, +pressing the desired Mouse Button will bind the action to that button. + +A future release of BOOM will allow you to set Mouse Buttons to any action. + +*Joystick Buttons* + +Where an action shows a Joystick Button setting (JSB1,JSB2,JSB3,JSB4), +that action can be bound to a Joystick Button. When the action is selected +for rebinding, pressing the desired Joystick Button will bind the action +to that button. + +A future release of BOOM will allow you to set Joystick Buttons to any action. + + +2) Weapons + +*Weapon Recoil* + +When ON, your weapon will provide you with a little 'kick'. Great fun when +on an icy floor. When OFF, there is no recoil. Move the cursor to this item +and press ENTER twice to change it. At the moment, you must start a new +level in order for this change to take effect. + +*Player Bobbing* + +When ON, your weapon will bob back and forth, up and down, according to your +movement. When OFF, there's no movement. Move the cursor to this item and +press ENTER twice to change it. At the moment, you must start a new level in +order for this change to take effect. + +*Weapon Preferences* + +In BOOM, you can declare which weapon you want to grab when you run out of +ammo for your current one. To change the ordering, move to an item, select +it with ENTER, then press a number between 1 and 9, where + + 1 = FIST + 2 = PISTOL + 3 = SHOTGUN + 4 = CHAINGUN + 5 = ROCKET LAUNCHER + 6 = PLASMA RIFLE + 7 = BFG + 8 = CHAINSAW + 9 = SUPER SHOTGUN + +You can select only those weapons that are available in the version of the +DOOM IWAD that you're using. Unavailable weapons will not be shown. + +Note this behavior: If Weapon 2 is in the '1st CHOICE WEAPON' slot and +Weapon 5 is in the '4th CHOICE WEAPON' slot, and you select and change +'1st CHOICE WEAPON' to Weapon 5, then Weapon 2 moves down to '4th CHOICE +WEAPON'. In short, they swap places. + + +3) Status Bar / HUD + +*Red Numbers* + +When ON, the AMMO, HEALTH, and ARMOR numbers on the Status Bar will all be +red. When OFF, these numbers will display in red, yellow, green, and blue, +depending on their values. + +*% Always Gray* + +When ON, the percent signs for HEALTH and ARMOR will always be gray. When +OFF, the percent signs will be the same color as the HEALTH and ARMOR +values. + +*SINGLE KEYS* + +When ON, you'll only see a single key on the Status Bar even if you have the +same color key from both the card and skull sets. When OFF, you'll see two +key icons when you have both keys of the same color. + +*HIDE SECRETS* + +One feature of the new Heads-Up Display is the ability to show your +KILLS/ITEMS/SECRETS stats as you play, instead of waiting until the level is +over. If HIDE SECRETS is YES, these are hidden from you. If NO, they'll be +shown. + +*MESSAGE BACKGROUND* + +When multiple messages are displayed, if MESSAGE BACKGROUND is ON, there is +a solid background behind the messages. If OFF, the messages are overlayed +on whatever action is taking place behind them. + +*# MESSAGE LINES* + +You can set the number of lines for your overall message display from 1 to +16. Move the cursor to this item and press ENTER. Now you can enter a number +w/in the range. If you attempt to enter something outside the range, the key +that would put you outside is ignored. I.e. If you wanted to set this item +to '20', you'd start with a '2', but the following '0' would be ignored. +Press ENTER again to show you're done entering the value. If you don't like +what you entered ("Hey, 2 is not right!"), then re-enter the correct value. + +*HEALTH LOW/OK* + +If you're using red/yellow/green/blue colors for your stats, they indicate +LOW/OK/GOOD/EXTRA AMMO, HEALTH, and ARMOR. 'HEALTH LOW/OK' lets you set +where yellow changes to red (or where OK changes to LOW). + +This value can range between 0 and 200. + +*HEALTH OK/GOOD* + +Similar to the previous item, but this is where green changes to yellow (or +where GOOD changes to OK). + +*HEALTH GOOD/EXTRA* + +Similar to the previous item, but this is where blue changes to green (or +where EXTRA changes to GOOD). + +*ARMOR LOW/OK* +*ARMOR OK/GOOD* +*ARMOR GOOD/EXTRA* + +Same as the "HEALTH" set, but pertains to ARMOR. + +*AMMO LOW/OK* +*AMMO OK/GOOD* + +Similar to the "HEALTH" and "ARMOR" sets, but there's no EXTRA setting, and +the values should be in the range 0 to 100. + + +4) Automap + +This is a collection of color settings for the items that are drawn on the +Automap (background, lines, Things, etc.). + +Each item's color can be changed as follows: + + a) Move the cursor to the item and press ENTER. + + b) A color palette will come up, with a highlight box around the item's + current color. Using the menu movement keys (or mouse), move to the new + color and press ENTER (or click MB1). + + c) The new color is assigned to that item. + + d) Setting a new feature to the first color, the one at upper left in the + array of colors, disables the feature, in case you don't want the extra + information. If you actually want to set the color black for a new + feature use the black in the middle of the bottom row of colors, color + 247. + +5) Enemies + + Includes config options that have to do with enemies. + + +6) Messages + + Includes config options that have to do with messages. + + For items denoting string color, the value will display in the + appropriate color. + + +7) Chat Strings + + You can change the chat strings using this screen. + + To change a chat string, select it and press Enter. You can edit the + string using overstrike, DEL, backspace, and you can position the + cursor (black underline) using the left and right arrow keys. + + The length of the chat string is limited to what can be shown on this + screen, to prevent overflow. + + When you're finished editing, press Enter again. + + +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. + + + +Editing the BOOM.CFG file +-------------------------- + +You can also set BOOM options by editing the BOOM.CFG file with a text +editor like Notepad. You should not use a word processor like Word or +WordPerfect. + +By default each setting is preceeded by a comment that shows the possible +range of the parameter and its default value, as well as text briefly +describing its function. If you do not have these comments, set the +config_help parameter to value 1 and they will appear after the next +time you run BOOM. Conversely, to disable them, set config_help to 0. + +You can only modify the value on each line, not the comment, nor the +variable's name. If you mess up, you can always delete BOOM.CFG and it +will be rewritten with all default values the next time BOOM is run. + +Alternate BOOM.CFG file +----------------------- + +You can keep several BOOM.CFG files on your system, named as you please, +for example MYBOOM.CFG, and select the one you want with the command line +option: -config MYBOOM.CFG. If several users share the same setup, this can +be handy. + +---------------------------------------------- +Section 3. Playing BOOM in Single Player mode +---------------------------------------------- + +BOOM play features +------------------- + +*No Limits* + +While wad authors are the ones most interested in BOOM's lack of limits, +players will also benefit by never getting a "Visplane Overflow" or "Too +Many Plats" message followed by a crash. There will be no 2S HOM's even in +terrifically detailed areas, and there is no savegame limit. Other less +commonly known limits have also been removed. + +*Heads Up Display* + +There is now an in-game heads-up-display (HUD) (Press F5, and keep pressing +it until you like the display). This shows kills/items/secrets counts just +like the end-level screen, either keys or frags depending on if you're +single-play or deathmatch, and weapons, ammo, armor and health. The HUD +only displays when in full screen view. Press + in full screen to toggle it +on and off. + +The past N messages can be reviewed by pressing Enter. By default N is 1, +set hud_msg_lines to a number between 2 and 16 to enable the feature. Set +hud_list_bgon to 1 for a solid background for the list of past messages, to +0 for a transparent display. Pressing Enter again returns the display to +showing the last message only. + +The display of kills/secrets/items can be suppressed by setting hud_nosecrets +to 1, if you prefer the suspense. For both the HUD and the status bar, colors +are used to indicate transitions to low levels of ammo, health, and armor. +The levels at which transitions occur can be customized thru the health_green, +health_yellow, health_red, armor_green, armor_yellow, armor_red, ammo_yellow, +and ammo_red variables. Note that the weapons line on the hud shows the ammo +level of each weapon possessed thru its color. If you are berserk the fist +and chainsaw show in green, not white. If you prefer red numbers only on the +status bar, set the sts_always_red variable to 1. If you don't like seeing +doubled keys on the status bar when you have both card and skull set +sts_traditional_keys to 1. + +*Better Key Support* + +The F1 screen has been redone to show the new key features (among which are +/ for 180 turns by keyboarders, and capslock for autorun) and it shows the +currently CONFIGURED key settings, not just the defaults. + +Nearly every key recognized by BOOM is reconfigurable thru the BOOM.CFG +file, not just some. A utility KEYCODE is provided to determine the config +file codes for keys. + +*Enhanced Automap* + +The automap has been enhanced. You can now see secrets, teleporters, +closed/open doors, keyed doors, and can suppress shadow lines and triggers +when in IDDT if you wish. All features can be configured off thru setting +them to -1 in the BOOM.CFG file. In addition the players current x,y,z +coordinates are available at screen upper right for being exact in those +playtest reports. + +*Weapon Preferences* + +Full control thru the config file of the order in which weapons are selected +when automatically switching from one to another. + +*Save Games* + +Two more save slots, no such thing as "Save game overflow", game state +completely restored, saves redirectable to directory of your choice from +the command line. + +*More Cheats* + +TNTCOMP to toggle DOOM v1.9 compatibility on or off + +TNTKEYxy to add or subtract a specific key, xy=BC BS RC RS YC YS + +TNTAMMOx to add or subtract a particular kind of ammo. Abbrev.: TNTAMO + +TNTWEAPx to add or subtract a particular weapon + +TNTEM to massacre all living monsters + +TNTTRAN to toggle translucency enable + +TNTFAST to toggle -fast mode + +TNTICE to toggle ice/mud effects on or off + +TNTPUSH to toggle wind effects on or off + +TNTSMART to toggle whether monsters remember their last enemy (you) + +TNTPITCH to toggle variable pitched sound effects on or off + +TNTHOM to highlight areas containing HOM + +TNTKA obtains all keys without adding ammo + +*Better Cheats* + +IDBEHOLDx to turn on light-amps, radsuits, invisibility, etc. until toggled +off + +IDMUSx now works across netgames and is remembered by savegame + +ID[K]FA now includes backpack + +*Fewer Bugs* + +Archviles don't resurrect ghosts or glue resurrected enemies together + +Pain elementals don't spawn heads thru walls and across monster blockers + +Players do not get stuck falling off a ledge when restoring + +Monsters don't fall asleep after a restore + +Floor crushers work + +Trigger once functions don't vanish forever if they fail to activate at first + +Texture changers and donut functions don't crash the game if not set up right + +Using 1s doors or 0 tag triggers doesn't crash game + +Multiple tagged rising stairs work properly + +Tutti-frutti error has been eliminated -- short textures tile properly + +Medusa errors no longer slow the game to a crawl, and it is legal to have +multipatched textures on 2s normals + +If levels have no secrets, 100% secrets is displayed + +Par times removed if -file parameter is used, unless .deh modified + +Plats remember their heights across savegames correctly + +Sprites and flats load from the PWAD + +No crash on menu with large mouse sensitivity + +Screenshots can go past DOOM99.PCX and no longer display "Screenshot" + +Lower textures do not absorb bullets or rockets + +IDCLEV is disallowed when in the menus + +Crashes left staying in graphics mode are no longer possible + +Exclusive linedef functions like floor->highest neighbor floor and +doors can contain lines referenced to the tagged sector on both sides. + +Lights to max neighbor now works properly. + + +Command line parameters +------------------------ + +*Configuration Options + +-iwad + + If a full path is specified it must exist, and be a valid IWAD, and + becomes the one used. + + If a directory is specified, it is searched for each of DOOM2F.WAD, + DOOM2.WAD, PLUTONIA.WAD, TNT.WAD, DOOM.WAD, or DOOM1.WAD, in that order if + multiple IWADs exist there. + + If just an iwad name like DOOM2, DOOM.WAD, PLUTONIA, TNT.WAD, etc is + specified, or a custom iwad name is specified, then the current dir, + the BOOM exe's dir, the dir specfified by the environment variable + DOOMWADDIR, and the dir specified by the environment variable HOME + are searched in that order for a file by that name. The file located + must have an IWAD tag in the header or an error occurs. Game mode + (Shareware DOOM, Registered DOOM, Ultimate DOOM, or DOOM II) is + determined by the levels present in the file, and all appropriate to + the mode must be present for correct identification, though. A DOOM II + IWAD may be missing Map31 and Map32, to support the German version. + + If -iwad is not specified or an IWAD is not found there, the current + directory followed by the directory that BOOM.EXE was found in, then the + directory pointed to by the environment variable DOOMWADDIR, and finally + the directory pointed to by the environment variable HOME are searched, + for any of the standard IWADs. + + This option is new to BOOM, it was not available in DOOM. + +-save + + If exists, and is a directory, it becomes the path where save + games are stored, and loaded from. If -save is not specified or the + directory does not exist, then the current directory is used. The + parameter -cdrom overrides -save. The -save option is new to BOOM, it was + not available in DOOM. + +-cdrom + + When this parameter is specified, a directory named c:\doomdata is created + (if it doesn't exist) and is used to read and write both the configuration + file and savegames. It is not very useful with BOOM because BOOM does not + exist on any CDROMs, making this usually unnecessary. It can be used to + temporarily switch to a different configuration and savegame set however, + and is supported for that reason. Note demos are still recorded and played + back from the path you specify, and if none, that is the current directory, + even if you are running from a cdrom. + +-nosound + + This parameter disables both music and sound during play. + +-nomusic + + This parameter just disables music while playing. + +-nosfx + + This parameter only disables sound effects when playing. + +-config + + The -config parameter allows you to use a different configuration file than + BOOM.CFG for the DOOM session being started. If -cdrom is specified -config + will be ignored. Its primary use is to support different BOOM setups from a + single directory, when different people use the same installation and have + different preferences. If the configfile specified does not exist it will + be created with all default values. + +*Play Options + +-nomonsters + + This option allows you to eliminate any monsters from the level you are + playing, just to check it out first, or during deathmatch where monsters + may be a bother. Unlike DOOM -nomonsters will remain in effect after you + IDCLEV to another level. This switch will not affect demo playback or + savegames you load however, if they had monsters when recorded, they still + will. + +-respawn + + This option, only for the seriously deranged , causes monsters to come + back to life (i.e. respawn) 8 seconds after you kill them. + +-fast + + The -fast option gives you the nastier monsters of nightmare skill level + without the nasty habit of coming back to life 8 seconds after you kill + them. In combination with UV skill, this is another higher skill level, + sometimes called "grandmaster" skill. + +-turbo + + The -turbo option allows you to control the speed of your player. The + number nn should be in the range 0 to 255, with 100 the default player + speed (100%). Use higher values for a speedier player, and smaller values + for a slower player. Values higher than 100 are cheating when recording + demos or playing deathmatch. + +-record + + The -record option allows you to make a recording of your play during a + DOOM session. The recording will continue thru level exits, you must quit + the DOOM session to end the recording. The 'Q' key, which used to terminate + demo recording, all too often accidentally, has been disabled. Unlike DOOM + you may specify a path to the recording, and the .LMP extension may be + specified if desired, though it is not necessary. + +-maxdemo + + In DOOM the demo buffer was by default 128k, the demo recording session + would exit on exceeding this amount (a little over 15 mins), and you could + extend it to larger fixed sizes with this parameter, which represents the + number of kilobytes allowed for it. This is no longer necessary, the demo + buffer will grow as needed during demo recording, as memory permits. You + might still want to specify this parameter, if only to avoid any slight + pauses at inconvenient moments, but really they should not be noticeable + in any case. + + +*Loading Options + +-file ... + + The -file parameter is followed by the names of the PWADs (DOOM levels + created by users rather than id) you want to load with the game. The .WAD + extension is optional (unlike DOOM). If any file is not found, BOOM will + exit, informing you of which was missing. You can specify paths as well as + filenames. The order you load PWADs can sometimes be important. Generally + speaking if two PWAD files both specify the same resource, the last one on + the line is used. Consult the PWAD's documentation for proper loading + order. + +-warp +-warp + + The -warp option allows you to "warp" directly to a level rather than going + thru the startup menus. In DOOM, two numbers are required, first the + episode number 1-4, then the mission number 1-9. In DOOM2 only a single + number is required, the Map or level number 1-32. + +-episode + + The -episode parameter is only useful with DOOM, not DOOM II, and it warps + you to the first level of the episode 1-4, that you specify. It is + equivalent to -warp 1. + +-skill + + The -skill parameter overrides the default_skill setting in BOOM.CFG if you + want to temporarily play at a different skill level. + +-deh + + The -deh parameter allows you to specify a DEHACKED patch to change default + engine behavior. You can specify a .DEH file, which is backward compatible + to DEHACKED v3.1 format (patch format 6) outside text changes, or a .BEX + file which allows BOOM extensions to DEHACKED. See DEH support in BOOM + below for more detail. Note the -deh option is new to BOOM, it did not + exist in DOOM. + +-playdemo + + The -playdemo option loads the demoname and starts it playing. An optional + path and .LMP extension can be specified. When the demo ends BOOM will + exit. If the demo was recorded with PWADs loaded, you need to load the same + PWADs during demo playback. Note that BOOM will play demos from any version + of DOOM or DOOM II starting with v1.2, but only demos recorded by + the current version of BOOM are guaranteed to work. BOOM will never exit + with the message "Demo recorded with wrong DOOM version" however. + +-timedemo + + The -timedemo option is like -playdemo except that the demo is played much + faster, and after the demo exits the video frame rate measured during demo + playback is output. + +-fastdemo + + The -fastdemo option is like -timedemo, except that it runs as fast as + possible. The -fastdemo option is new to BOOM -- it did not exist in DOOM. + +-loadgame + + The -loadgame option is used to load a savegame directly from the command + line, without using the menus or function keys. If the save was recorded + with PWADs loaded you need to load the same PWADs with -file when you use + -loadgame. If -loadgame is used you may not use -record or any of the demo + loading options at the same time. The loadgame parameter is 0-7, to load + the first thru eighth savegame slot respectively. Note DOOM only supported + 6 savegame slots. + +*Debug Options + +-devparm + + This option is used during development, or at least it was designed that + way. It does two things of interest. It causes dots to be displayed in the + lower left corner whose number is inversely proportional to frame rate. It + redefines the F1 key to take a screenshot instead of displaying the HELP + screen. + +-nodraw +-noblit + + The nodraw and noblit options are primarily used to isolate the video from + other processes when measuring BOOM's speed. They should be used with + caution, as nothing will display on the screen when they are used and + you'll need to exit BOOM "by feel" without the aid of menus. Press ESC, + Q, Enter to do this. The nodraw option suppresses all drawing, while the + noblit option simply suppresses the transfer of screen data from the + internal buffer to the screen. + +-dumplumps + + The dumplumps option causes the predefined lumps in the BOOM engine + to be written out as a .WAD. This is so wad authors can inspect + them, understand them, and replace them. BOOM exits after writing + the predefined lumps to the file. + +*Obsolete Options + +-shdev +-regdev +-comdev + + These three switches were used by id in their development to switch between + shareware, registered, and commercial versions. They do not work in any + other context and are not useful for end users. + +-wart + + In BOOM -wart is completely equivalent to -warp. In DOOM it was used to + support id's development and had many strange and not too useful properties + for the end user. + +-statcopy + + Not fully understood, has something to do with an external statistics + device whose interface must be linked into the program. Unless you have + one of those, suggest you leave it alone . + +----------------------------------------------- +Section 4. Playing BOOM in Serial/Network mode +----------------------------------------------- + +IPXBOOM and SERBOOM are provided with the BOOM distribution and provide +equivalent functions to IPXSETUP and SERSETUP except they recognize BOOM.EXE +by default. DM.EXE will also work if you change its DM.CFG file to point to +IPXBOOM.EXE or SERBOOM.EXE. + +*Multiplayer Options + +-deathmatch + + The -deathmatch parameter tells BOOM to start up in deathmatch mode as + opposed to cooperative mode when starting a multiplayer game. + +-altdeath + + The -altdeath parameter (must also use the -deathmatch parameter) specifies + that items other than invisibility and invulnerability will respawn after + being picked up. + +-timer + + The -timer parameter allows you to set a time limit on the length of a + deathmatch game. After nnn minutes have elapsed the level will end and the + frag scores will display. + +-frags + + The -frags option allows you to deathmatch until one player achieves nn + frags, at which time the level ends and scores are displayed. If is + not specified the match is to 10 frags. This option is new to BOOM and was + not available in DOOM. + +-avg + + The Austin Virtual Gaming mode is equivalent to -timer 20. Deathmatches + end after 20 minutes of play. + +-extratic + + This option sends an extra copy of the player movements across the network, + perhaps making play smoother by redundancy in favor of retransmission, + which is slower. + +-dup + + Like -extratic this option sends extra copies of the player movements + across the network, perhaps making play smoother by redundancy in favor of + retransmission, which is slower. This option allows you to specify the + number of extra packets sent however, from 1 to 9. If you specify less + you'll get 1, if you specify more you'll get 9. + +-debugfile + + When used outputs network debug information to debugN.txt where N is the + player number of the person who used -debugfile. + + +---------------------------- +Section 5. Editing for BOOM +---------------------------- + +Editors with full or partial support for BOOM +--------------------------------------------- + +DETH v4.14b (freeware) provides full BOOM support, and is available from the +same location you obtained BOOM: + +http://www.teamtnt.com. + +This program is in beta and should be used with caution. DETH runs under +DOS, Win'95's MS-DOS mode, or in a FULL SCREEN Win'95 Dos Window. + +DCK 2.2f (freeware) will support BOOM, and DOOM17.DAT is provided at the +TeamTNT site mentioned above. DCK 3.62 (shareware) will NOT work with +generalized linedef types, they are truncated to 255 on output of the +wad. Limited support is available thru the DOOM19.DAT file also provided at +the TeamTNT archive. DCK will only run under DOS, or Win'95s MS-DOS mode. + +DeeP '97 (shareware) provides full BOOM support. DeeP '97 runs in Win'95. +You may get DeeP '97 from ftp.cdrom.com or http://www.sbsoftware.com. + +WadAuthor (shareware) partially supports BOOM thru use of a custom BOOM.WCF +file, available at the site above for BOOM and DETH. We are working on +getting full support for BOOM in WadAuthor soon. + +DMapEdit has recently been improved to include some support for BOOM. It +basically supports direct numeric entry for the new features. The URL +for the beta version is: http://babtech.com/doom.html. + + +Wad extensions in BOOM phase I +------------------------------ + +BOOM has not changed the wad structure in any significant fashion, merely +made use of previously undefined bits and fields. Nearly any editor will +work, but not all will allow or support use of the advanced editing features +of BOOM. See BOOMREF.TXT in the EDTUTIL download for details. In brief, the +differences are: + +1) Linedef types filled out to values 0-269 +2) Generalized linedef types added in range 2F80H - 7FFFH +3) Generalized sector types using bits 5-11 of the sector type field +4) New things 5001, 5002 added to support point source wind effect +5) New thing flags, bit 6 "not in DM", and bit 7 "not in CO-OP" +6) New linedef flag, bit 9, PassThru, that allows one push to activate + several functions simultaneously. + +BOOM supports embedding MIDI directly in the WAD file instead of MUS thereby +eliminating length limitations and improving fidelity. + +BOOM recognizes two new lumps, SWITCHES, and ANIMATED. These allow the wad +designer to extend or replace the list of switches and animated textures and +flats recognized by the engine. A tool SWANTBLS.EXE is provided to turn a +simple text file into these lumps, along with the default text file +definition, DEFSWANI.DAT. + +BOOM also recognizes the lump TRANMAP so that authors can create their own +translucency lookup table for specialized effects. + +BOOM supports an arbitrary number of colormaps, defined between the C_START +and C_END markers, and predefines one called WATERMAP. Any of these colormaps, +as well as Doom's predefined COLORMAP, can be used with the 242 linedef to +change the lighting the player sees in normal space, below fake floors (water), +and above fake ceilings. + +BOOM supports replacing sprites and replacing and adding flats directly from +a PWAD. + + +Using CLED to supplement your editor +------------------------------------ + +If your editor will not support the features of BOOM, all may not be lost +if you are editing for DOOM II. If like DCK 3.x, it changes the fields it +doesn't understand, it won't be possible, but if like EdMap it ignores them, +the following will work. + +There is a command line DOOM II/BOOM editing tool called CLED, provided at +the TeamTNT site that can be used supplement your editor. It is used by +noting the number and kind of object you want to set a field for in your +regular editor, then after saving and exiting, using CLED to modify the +parameter your editor doesn't support. + +Example: Suppose in Map03 of MYWAD.WAD you want to set linedef #543 to type +20152. You would type: + +CLED MYWAD LINEDEF(3,543).TYPE=20152 + +CLED comes with documentation containing more examples. It can be used to +set any of the BOOM-extended fields mentioned above. + +TRIGCALC.EXE is also available and will output the generalized linedef type +number for a function you describe by answering questions. + + +DEH Support in BOOM +-------------------- + +The popular program DEHACKED.EXE has been used for some time now to change +things about the game that are hardcoded into the executable program. +Dehacked was created by reverse engineering what the internal structures +and behaviors are, and is a remarkable program for its intended purpose. + +Unfortunately, 100% compatibility with all dehacked files is impossible to +achieve due to the way dehacked works. In particular, text changes are done +in a manner that is dangerous and error prone. To make it easier to alter +text strings in DOOM (like the level names in the automap, intermissions, +etc.) a new format for text has been created for BOOM. The separate text +file BOOMDEH.TXT will go into considerably more detail about those items, +and shows what the current defaults are for all 300+ strings that are +changeable in BOOM. + +DEHACKED.EXE creates files with a .DEH extension, and those are supported +in BOOM, other than general text string changes. You also can use a new +extension, .BEX (Boom EXtended format), which can contain any of the regular +Dehacked items such as code pointers, frame wiring, etc. as well as the new +BOOM extended text format. Although you can put any valid DEH or BEX data +in a file with any extension (if you specify it on the command line, you can +use -deh myfile.zyx, if you like), the idea is that a .DEH file will contain +only items that Dehacked would understand (you can use the rather excellent +Dehacked interface to adjust those) and that a .BEX file would contain +string extensions as well. + +There is now an "include" directive available to allow a .BEX file to +include the contents of one or more other .DEH or .BEX files + +You can also change par times with .BEX files. + +You do need to use a Dehacked file from version 3.0 or 3.1 of DEHACKED.EXE, +which says in the .DEH file itself that it is a Patch format 6. We have +also had success with Patch format 5, though compatibility is not +guaranteed. + +** New: Code pointers may now be changed in a .BEX file by using mnemonic +(words) for the pointers, such as "Chase" and "Scream". Pointers may also +now be put into any frame, whether there was one there before or not, an +improvement over that limitation in Dehacked. Extensive information is +available in BOOMDEH.TXT for code pointers including a listing of the +original frame information for reference. + +See BOOMDEH.TXT for details. + +--------------------------------------------- +Section 6. Differences between BOOM and DOOM +--------------------------------------------- + +1) Savegames + +BOOM does not support compatibility with previous engine's saves at all. +Only savegames made by BOOM may be loaded in BOOM. If future versions of +BOOM are released usability of savegames will not be guaranteed. + +2) Demos + +BOOM supports demos made with previous engines in a limited fashion. +Some will go out of sync, though none will cause the engine to crash. This +is almost unavoidable due to the large number of changes made in the engine. +Internal demos may now contain revenants without losing sync. + +The demo_insurance option in BOOM.CFG allows one to make tradeoffs between +demo sync and game chaos. If demo_insurance=0, Boom demos stand a good chance +of losing sync on the next version of Boom, but the gameplay is more chaotic +because a single RNG is used for all events. If demo_insurance=1, Boom demos +stand a greater likelihood of staying in sync across Boom versions, but the +game is slightly less chaotic as a result. The two goals of demo sync across +different versions of the game, and chaos during the game, are somewhat +contradictory. If demo_insurance=2 (the default), then the special steps are +only taken when demos are being recorded -- normal gameplay is unaffected. + +demo_insurance does not affect the playback quality of Doom demos, which were +recorded without Boom's special sync-preserving measures. + +Even when demo_insurance is enabled, the games are fully randomized -- the only +difference is whether independent game events will use the same RNG and thus +interact, increasing the chance of demo desync if the slightest change occurs +in the game, or whether each game event will use its own independent RNG. + +3) Wads + +BOOM supports playing old wads fully. The only proviso is that those wads +must not contain serious errors, BOOM cannot play them if they do. Due to +the more sensitive nature of DPMI protected mode, BOOM is highly sensitive +to accessing arrays past limit and other illegal memory usages. The usual +result will be exit from BOOM with the message "Segment Violation". CWSDPMI +under DOS is more sensitive than Win'95s DPMI, so some wads that won't play +under DOS may still play under Win'95 in a DOS Window. On the positive side, +if you test your wads fully under DOS with CWSDPMI, they are very likely to +play without trouble after uploading. Its also very unlikely that your +system can be corrupted by BOOM. The config file, BOOM.CFG, contains a +variable named original_doom_compatibility that will insure that BOOM acts +as much like DOOM v1.9 as possible, even preserving some bugs in that +engine. + + +----------------------------------------- +Section 7. Files in the BOOM Distribution +----------------------------------------- + +BOOM executable archive BOOM201.ZIP + +BOOM.EXE..........Executable BOOM program +ASETUP.EXE........Allegro setup utility +BOOM.TXT..........This file +SNDDRVR.TXT.......Additional documentation on setting up sound/music in BOOM +BOOMDEH.TXT.......Description of BOOM's version of DEH +BOOMREF.TXT.......Reference for all extended wad features supported by BOOM +KEYCODE.EXE.......Tool to output keycodes for use in config file +COLHELP.BMP.......Chart of DOOM colors for use in config file +SERBOOM.EXE.......SERSETUP for BOOM +IPXBOOM.EXE.......IPXSETUP for BOOM +CSDPMI4B.ZIP......DJGPP v2 runtime support including docs and config util +CWSDPMI.EXE.......DJGPP v2 runtime support executable +GO32-V2.EXE.......DJGPP tool to provide info on DPMI setup +COPYING...........DJGPP copyright and distribution license +DOOMLIC.TXT.......Software license for DOOM sources and BOOM + +DETH for BOOM (optional) DETH415b.ZIP + +DETH.EXE..........v4.12 of the freeware editor DETH with full BOOM support +DETH.FNT..........Font used by DETH +DETH.INI..........Option and configuration file for DETH +COMMON.CFG........Options common to DOOM and DOOM II for DETH +DOOM2.CFG.........Options specific to DOOM II for DETH +DOOM1.CFG.........Options specific to DOOM for DETH +INSTALL.TXT.......Brief note on installation of DETH +KEYS.TXT..........Summary of key functions in DETH +TEXTURE.TXT.......Brief document on texture alignment +CHANGES.TXT.......DETH v4.12 release notes +CSDPMI4B.ZIP......DJGPP v2 runtime support including docs and config util +CWSDPMI.EXE.......DJGPP v2 runtime support executable +GO32-V2.EXE.......DJGPP tool to provide info on DPMI setup +COPYING...........DJGPP copyright and distribution license + +EDIT utilities for BOOM (optional) EDITUTIL.ZIP + +CLED.EXE..........Command line editor for extended fields in wads +CLED.TXT..........Documentation for CLED +TRIGCALC.EXE......Tool to output generalized linedef numbers by Q&A +MUSPUT.EXE........Tool to embed MIDI files in a wad +MUSPUT.TXT........Documentation for MUSPUT.EXE +BOOMREF.TXT.......Reference for all extended wad features supported by BOOM +CWSDPMI.EXE.......DJGPP v2 runtime support executable +SWANTBLS.EXE......Creates SWITCHED.LMP and ANIMATED.LMP from input text file +DEFSWANI.DAT......File for SWANTBLS.EXE containg default switches & animations +MAKTRLMP.EXE......Converts a TRANMAP.DAT file to a .LMP for wad inclusion +MAKTRLMP.TXT......Documentation for MAKTRLMP.EXE +CMAPTOOL.EXE......Tool for creating custom colormaps by editing a BMP +CMAPTOOL.TXT......Documentation for CMAPTOOL.EXE +DOOMCOLR.BMP......BMP containing all colors edited for use by CMAPTOOL.EXE +COLBMPS.ZIP.......Edited examples of DOOMCOLR.BMP +COLMAPS.ZIP.......Colormap lmps produced by CMAPTOOL from example BMPS +COLMAPS.WAD.......Add-on WAD containing example colormaps + +EDIT configuration for WadAuthor (optional) WACFG.ZIP +(thanks to Rick (Wildman) Clark and Jonathan (DfA) Campbell) +BOOM.WCF..........Extended linedef, thing types for WadAuthor + +EDIT configuration files for DCK (optional) DCKBOOM.ZIP + +DOOM17.DAT........Extended types configuration for DCK2.2f +DOOM19.DAT........Extended types configuration for DCK3.x +DCKBOOM.TXT.......Documentation on DCK configuration files +WATERMAP.WAD......File that allows DCK to insert WATERMAP texture + +DEMO wads + +DAWNING.ZIP.......BOOM demo wad by Gary Gosson +RAGE.ZIP..........BOOM demo wad by Paul Fleschute +BOOMEDIT.ZIP......BOOM editor's tutorial wad by Jim Flynn + +-------------------------------------- +Section 8. How to report bugs in BOOM +-------------------------------------- + +If you find a bug in BOOM you should visit + +http://www.teamtnt.com + +and follow the directions there for reporting it. There will be a bug report +form, and an e-mail link provided. Please examine the bug report form to see +what kind of information we are interested in, even if you report it by +e-mail. This information will help us duplicate the problem, which is an +important step in fixing it. + +Your help in making BOOM bug free is appreciated. + +---------------------------- +Section 9. Acknowledgements +---------------------------- + +We'd like to thank id Software for this incredible game, and especially John +Carmack for his release of the source and his encouragement of our efforts. + +Credit is due Chi Hoang who sped us on our way with his near instant port of +the Linux DOOM source to DOS. BOOM is based on v.20 of his port. + +Credit also to Steve Bacquet, whose QMUS2MID utility provided the insight we +needed to get a working MUS to MID converter running. + +Thanks to Shawn Hargreaves who wrote Allegro, and made this possible in far +less time. + +Thanks to all the folks who wrote our compiler, DJGPP v2, and who continue +to support free software. + +Thanks to the non-coding DoomSource project members who tested our early +attempts and made many suggestions to improve the product. + +Thanks to BOOM's BETA crew who beat on the engine mercilessly for long hours +and diligently filled our mailboxes with what they saw. + +Gaston (Mordeth) Lahaut Ky (Rez) Moffet Jan Van der Veken +Joachim (Jou) Otahal Len Pitre Doug Freeman +Chris (Case) Christenson Jonathan (DfA) Campbell Ingo Kirsch +Tom Robinson Rich Brennan Kurt Schulenberg +Justin Madigan Lorenzo Cricchio Peter Zahner + +Thanks to Rick (Wildman) Clark and Jonathan (DfA) Campbell for creating an +editor configuration file for WadAuthor. + +Thanks to Bruce (DOOMGuy) Benko for his work making DMapEdit work +with BOOM. + +And finally thanks to all the DOOMers still out there who have kept the +game alive so long, and who gave us many fine ideas thru the newsgroups +and mail. Keep on Doomin'! + diff --git a/docs/boomdeh.txt b/docs/boomdeh.txt new file mode 100644 index 00000000..73b30782 --- /dev/null +++ b/docs/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/docs/boomref.txt b/docs/boomref.txt new file mode 100644 index 00000000..b1c90b78 --- /dev/null +++ b/docs/boomref.txt @@ -0,0 +1,2434 @@ +>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<< +> < +> BOOM reference v1.3 4/12/98 < +> < +>>>>>>>>>>>>>>>>>>>>>>>><<<<<<<<<<<<<<<<<<<< + +====================================================================== + Part I Linedef Types +====================================================================== + +####################### +Section 0. Terminology +####################### + +In BOOM actions are caused to happen in the game thru linedef types. +BOOM has three kinds of linedef types: + +Regular - the linedef types that were already in DOOM II v1.9 + +Extended - linedef types not in DOOM II v1.9 but less than 8192 + in value + +Generalized - linedef types over 8192 in value that contain bit + fields that independently control the actions of the sector + affected. + +A linedef with non-zero linedef type is called a linedef trigger. A +linedef trigger is always activated in one of three ways - pushing on +the first sidedef of the linedef, walking over the linedef, or +shooting the linedef with an impact weapon (fists, chainsaw, pistol, +shotgun, double barreled, or chaingun). + +Linedefs activated by pushing on them come in two varieties. A manual +linedef affects the sector on the second sidedef of the line pushed. +A switched linedef affects all sectors that have the same tag field +as the linedef that was pushed. + +Nearly all switched, walkover, and gun linedefs operate on the sectors +with the same tag as that in the tag field of the linedef. + +Some linedefs are never activated per se, but simply create or control +an effect thru their existence and properties, usually affecting the +sectors sharing the linedef's tags. There are also a few special case +like line-line teleporters and exit linedefs that do not affect +sectors. + +Some linedefs are only triggerable once, others are triggerable as +many times as you like. + +Triggering types are denoted by the letters P, S, W, and G for +manual(push), switched, walkover, and gun. Their retriggerability is +denoted by a 1 or R following the letter. So the triggering types for +linedefs are: + +P1 PR S1 SR W1 WR G1 GR + +Often linedef actions depend on values in neighboring sectors. A +neighboring sector is one that shares a linedef in common, just +sharing a vertex is not sufficient. + +In DOOM only one action on a sector could occur at a time. BOOM +supports one floor action, one ceiling action, and one lighting +action simultaneously. + + +################ +Section 1. Doors +################ + +A door is a sector, usually placed between two rooms, whose ceiling +raises to open, and lowers to close. + +A door is fully closed when its ceiling height is equal to its floor +height. + +A door is fully open when its ceiling height is 4 less than the lowest +neighbor ceiling adjacent to it. + +A door may be set to an intermediate state initially, or thru the action +of a linedef trigger that affects ceilings or floors. The door is passable +to a player when its ceiling is at least 56 units higher than its floor. +In general the door is passable to a monster or a thing when its ceiling +is at least the monster or thing's height above the floor. + +If a door has a ceiling height ABOVE the fully open height, then an +open door action moves the ceiling to the fully open height +instantly. + +If a door has a ceiling height BELOW the fully closed height (that is +the ceiling of the door sector is lower than the floor of the door +sector) a close door action moves the ceiling to the fully closed +height instantly. + +-------------------------- +Section 1.1 Door functions +-------------------------- + +Open, Wait, Then Close + +On activation, door opens fully, waits a specified period, then +closes fully. + +Open and Stay Open + +On activation, door opens fully and remains there. + +Close and Stay Closed + +On activation, door closes fully, and remains there. + +Close, Wait, Then Open + +On activation, door closes fully, waits a specified period, then +opens fully. + +------------------------------ +Section 1.2 Varieties of doors +------------------------------ + +A door can be triggered by pushing on it, walking over or pressing a +linedef trigger tagged to it, or shooting a linedef tagged to it. +These are called manual, walkover, switched, or gun doors resp. + +Since a push door (P1/PR) has no use for its tag, BOOM has extended +the functionality to include changing any tagged sectors to maximum +neighbor lighting on fully opening, then to minimum neighbor lighting +on fully closing. This is true for regular, extended, and generalized +doors with push triggers. + +A door trigger can be locked. This means that the door function will only +operate if the player is in possession of the right key(s). Regular +and extended door triggers only care if the player has a key of the +right color, they do not care which. Generalized door triggers +can distinguish between skull and card keys, and can also require +any key, or all keys in order to activate. + +A door can have different speeds, slow, normal, fast or turbo. + +A door can wait for different amounts of time. + +A door may or may not be activatable by monsters. + +Any door function except Close and Stay Closed, when closing and +encountering a monster or player's head will bounce harmlessly off +that head and return to fully open. A Close and Stay Closed will rest +on the head until it leaves the door sector. + +------------------------------ +Section 1.3 Door linedef types +------------------------------ + +Regular and Extended Door Types +--------------------------------------------------------------- +# Class Trig Lock Speed Wait Monst Function + +1 Reg PR No Slow 4s Yes Open, Wait, Then Close +117 Reg PR No Fast 4s No Open, Wait, Then Close +63 Reg SR No Slow 4s No Open, Wait, Then Close +114 Reg SR No Fast 4s No Open, Wait, Then Close +29 Reg S1 No Slow 4s No Open, Wait, Then Close +111 Reg S1 No Fast 4s No Open, Wait, Then Close +90 Reg WR No Slow 4s No Open, Wait, Then Close +105 Reg WR No Fast 4s No Open, Wait, Then Close +4 Reg W1 No Slow 4s No Open, Wait, Then Close +108 Reg W1 No Fast 4s No Open, Wait, Then Close + +31 Reg P1 No Slow -- No Open and Stay Open +118 Reg P1 No Fast -- No Open and Stay Open +61 Reg SR No Slow -- No Open and Stay Open +115 Reg SR No Fast -- No Open and Stay Open +103 Reg S1 No Slow -- No Open and Stay Open +112 Reg S1 No Fast -- No Open and Stay Open +86 Reg WR No Slow -- No Open and Stay Open +106 Reg WR No Fast -- No Open and Stay Open +2 Reg W1 No Slow -- No Open and Stay Open +109 Reg W1 No Fast -- No Open and Stay Open +46 Reg GR No Slow -- No Open and Stay Open + +42 Reg SR No Slow -- No Close and Stay Closed +116 Reg SR No Fast -- No Close and Stay Closed +50 Reg S1 No Slow -- No Close and Stay Closed +113 Reg S1 No Fast -- No Close and Stay Closed +75 Reg WR No Slow -- No Close and Stay Closed +107 Reg WR No Fast -- No Close and Stay Closed +3 Reg W1 No Slow -- No Close and Stay Closed +110 Reg W1 No Fast -- No Close and Stay Closed + +196 Ext SR No Slow 30s No Close, Wait, Then Open +175 Ext S1 No Slow 30s No Close, Wait, Then Open +76 Reg WR No Slow 30s No Close, Wait, Then Open +16 Reg W1 No Slow 30s No Close, Wait, Then Open + +Regular and Extended Locked Door Types +--------------------------------------------------------------- +# Class Trig Lock Speed Wait Monst Function + +26 Reg PR Blue Slow 4s No Open, Wait, Then Close +28 Reg PR Red Slow 4s No Open, Wait, Then Close +27 Reg PR Yell Slow 4s No Open, Wait, Then Close + +32 Reg P1 Blue Slow -- No Open and Stay Open +33 Reg P1 Red Slow -- No Open and Stay Open +34 Reg P1 Yell Slow -- No Open and Stay Open +99 Reg SR Blue Fast -- No Open and Stay Open +134 Reg SR Red Fast -- No Open and Stay Open +136 Reg SR Yell Fast -- No Open and Stay Open +133 Reg S1 Blue Fast -- No Open and Stay Open +135 Reg S1 Red Fast -- No Open and Stay Open +137 Reg S1 Yell Fast -- No Open and Stay Open + + +There are two generalized door linedef types, Generalized Door, and +Generalized Locked Door. The following tables show the possibilities +for each parameter, any combination of parameters is allowed: + +Slow and Fast represent the same speeds as slow and fast regular doors. Normal +is twice as fast as slow, Fast is twice normal, Turbo is twice Fast. + +Generalized Door Types +--------------------------------------------------------------- +# Class Trig Lock Speed Wait Monst Function + +3C00H- Gen P1/PR No Slow 1s Yes Open, Wait, Then Close +4000H S1/SR Normal 4s No Open and Stay Open + W1/WR Fast 9s Close and Stay Closed + G1/GR Turbo 30s Close, Wait, Then Open + + +Generalized Locked Door Types +--------------------------------------------------------------- +# Class Trig Lock Speed Wait Monst Function + +3800H- Gen P1/PR Any Slow 1s No Open, Wait, Then Close +3C00H S1/SR Blue Normal 4s Open and Stay Open + W1/WR Red Fast 9s Close and Stay Closed + G1/GR Yell Turbo 30s Close, Wait, Then Open + BlueC + RedC + YellC + BlueS + RedS + YellS + All3 + All6 + +################# +Section 2. Floors +################# + +---------------------------- +Section 2.1 Floor targets +---------------------------- + +Lowest Neighbor Floor (LnF) + +This means that the floor moves to the height of the lowest +neighboring floor including the floor itself. If the floor +direction is up (only possible with generalized floors) motion is +instant, else at the floor's speed. + +Next Neighbor Floor (NnF) + +This means that the floor moves up to the height of the lowest +adjacent floor greater in height than the current, or down to the +height of the highest adjacent floor less in height than the current, +as determined by the floor's direction. Instant motion is not +possible in this case. If no such floor exists, the floor does not move. + +Lowest Neighbor Ceiling (LnC) + +This means that the floor height changes to the height of the lowest +ceiling possessed by any neighboring sector, including that floor's +ceiling. If the target height is in the opposite direction to floor +motion, motion is instant, otherwise at the floor action's speed. + +8 Under Lowest Neighbor Ceiling (8uLnC) + +This means that the floor height changes to 8 less than the height +of the lowest ceiling possessed by any neighboring sector, including +that floor's ceiling. If the target height is in the opposite +direction to floor motion, motion is instant, otherwise at the floor +action's speed. + +Highest Neighbor Floor (HnF) + +This means that the floor height changes to the height of the highest +neighboring floor, excluding the floor itself. If no neighbor floor +exists, the floor moves down to -32000. If the target height is in +the opposite direction to floor motion, the motion is instant, +otherwise it occurs at the floor action's speed. + +8 Above Highest Neighbor Floor (8aHnF) + +This means that the floor height changes to 8 above the height of +the highest neighboring floor, excluding the floor itself. If no +neighbor floor exists, the floor moves down to -31992. If the target +height is in the opposite direction to floor motion, the motion is +instant, otherwise it occurs at the floor action's speed. + +Ceiling + +The floor moves up until its at ceiling height, instantly if floor +direction is down (only available with generalized types), at the +floor speed if the direction is up. + +24 Units (24) + +The floor moves 24 units in the floor action's direction. Instant +motion is not possible with this linedef type. + +32 Units (32) + +The floor moves 32 units in the floor action's direction. Instant +motion is not possible with this linedef type. + +512 Units (512) + +The floor moves 512 units in the floor action's direction. Instant +motion is not possible with this linedef type. + +Shortest Lower Texture (SLT) + +The floor moves the height of the shortest lower texture on the +boundary of the sector, in the floor direction. Instant motion is not +possible with this type. In the case that there is no surrounding +texture the motion is to -32000 or +32000 depending on direction. + +None + +Some pure texture type changes are provided for changing the floor +texture and/or sector type without moving the floor. + +-------------------------------- +Section 2.2 Varieties of floors +-------------------------------- + +A floor can be activated by pushing on a linedef bounding it +(generalized types only), or by pushing on a switch with the same tag +as the floor sector, or by walking over a linedef with the same tag +as the floor, or by shooting a linedef with the same tag as the +floor with an impact weapon. + +A floor can move either Up or Down. + +A floor can move with speeds of Slow, Normal, Fast, or Turbo. If the +target height specified by the floor function (see Floor Targets +above) is in the opposite direction to the floor's motion, then +travel is instantaneous, otherwise its at the speed specified. + +A floor action can be a texture change type, in which case after the +action the floor texture of the affected floor, and possibly the +sector type of the affected floor are changed to those of a model +sector. The sector type may be zeroed instead of copied from the +model, or not changed at all. These change types are referred to +below as Tx (texture only), Tx0 (type zeroed), and TxTy (texture and +type changed). The model sector for the change may be the sector on +the first sidedef of the trigger (trigger model) or the sector with +floor at destination height across the lowest numbered two-sided +linedef surrounding the affected sector (numeric model). If no model +sector exists, no change occurs. If a change occurs, floor texture is +always affected, lighting is never affected, even that corresponding +to the sector's type, nor is any other sector property other than the +sector's type. + +Numeric model algorithm: + +1) Find all floors adjacent to the tagged floor at destination height +2) Find the lowest numbered linedef separating those floors from that tagged +3) The sector on the other side of that linedef is the model + +A floor action can have the crush property, in which case players and +monsters are crushed when the floor tries to move above the point +where they fit exactly underneath the ceiling. This means they take +damage until they die, leave the sector, or the floor action is stopped. +A floor action never reverses on encountering an obstacle, even if +the crush property is not true, the floor merely remains in the same +position until the obstacle is removed or dies, then continues. + +------------------------------- +Section 2.3 Floor linedef types +------------------------------- + +Regular and Extended Floor Types +------------------------------------------------------------------- +# Class Trig Dir Spd Chg Mdl Mon Crsh Target + +60 Reg SR Dn Slow None -- No No Lowest Neighbor Floor +23 Reg S1 Dn Slow None -- No No Lowest Neighbor Floor +82 Reg WR Dn Slow None -- No No Lowest Neighbor Floor +38 Reg W1 Dn Slow None -- No No Lowest Neighbor Floor + +177 Ext SR Dn Slow TxTy Num No No Lowest Neighbor Floor +159 Ext S1 Dn Slow TxTy Num No No Lowest Neighbor Floor +84 Reg WR Dn Slow TxTy Num No No Lowest Neighbor Floor +37 Reg W1 Dn Slow TxTy Num No No Lowest Neighbor Floor + +69 Reg SR Up Slow None -- No No Next Neighbor Floor +18 Reg S1 Up Slow None -- No No Next Neighbor Floor +128 Reg WR Up Slow None -- No No Next Neighbor Floor +119 Reg W1 Up Slow None -- No No Next Neighbor Floor + +132 Reg SR Up Fast None -- No No Next Neighbor Floor +131 Reg S1 Up Fast None -- No No Next Neighbor Floor +129 Reg WR Up Fast None -- No No Next Neighbor Floor +130 Reg W1 Up Fast None -- No No Next Neighbor Floor + +222 Ext SR Dn Slow None -- No No Next Neighbor Floor +221 Ext S1 Dn Slow None -- No No Next Neighbor Floor +220 Ext WR Dn Slow None -- No No Next Neighbor Floor +219 Ext W1 Dn Slow None -- No No Next Neighbor Floor + +64 Reg SR Up Slow None -- No No Lowest Neighbor Ceiling +101 Reg S1 Up Slow None -- No No Lowest Neighbor Ceiling +91 Reg WR Up Slow None -- No No Lowest Neighbor Ceiling +5 Reg W1 Up Slow None -- No No Lowest Neighbor Ceiling +24 Reg G1 Up Slow None -- No No Lowest Neighbor Ceiling + +65 Reg SR Up Slow None -- No Yes Lowest Neighbor Ceiling - 8 +55 Reg S1 Up Slow None -- No Yes Lowest Neighbor Ceiling - 8 +94 Reg WR Up Slow None -- No Yes Lowest Neighbor Ceiling - 8 +56 Reg W1 Up Slow None -- No Yes Lowest Neighbor Ceiling - 8 + +45 Reg SR Dn Slow None -- No No Highest Neighbor Floor +102 Reg S1 Dn Slow None -- No No Highest Neighbor Floor +83 Reg WR Dn Slow None -- No No Highest Neighbor Floor +19 Reg W1 Dn Slow None -- No No Highest Neighbor Floor + +70 Reg SR Dn Fast None -- No No Highest Neighbor Floor + 8 +71 Reg S1 Dn Fast None -- No No Highest Neighbor Floor + 8 +98 Reg WR Dn Fast None -- No No Highest Neighbor Floor + 8 +36 Reg W1 Dn Fast None -- No No Highest Neighbor Floor + 8 + +180 Ext SR Up Slow None -- No No Absolute 24 +161 Ext S1 Up Slow None -- No No Absolute 24 +92 Reg WR Up Slow None -- No No Absolute 24 +58 Reg W1 Up Slow None -- No No Absolute 24 + +179 Ext SR Up Slow TxTy Trg No No Absolute 24 +160 Ext S1 Up Slow TxTy Trg No No Absolute 24 +93 Reg WR Up Slow TxTy Trg No No Absolute 24 +59 Reg W1 Up Slow TxTy Trg No No Absolute 24 + +176 Ext SR Up Slow None -- No No Abs Shortest Lower Texture +158 Ext S1 Up Slow None -- No No Abs Shortest Lower Texture +96 Reg WR Up Slow None -- No No Abs Shortest Lower Texture +30 Reg W1 Up Slow None -- No No Abs Shortest Lower Texture + +178 Ext SR Up Slow None -- No No Absolute 512 +140 Reg S1 Up Slow None -- No No Absolute 512 +147 Ext WR Up Slow None -- No No Absolute 512 +142 Ext W1 Up Slow None -- No No Absolute 512 + +190 Ext SR -- ---- TxTy Trg No No None +189 Ext S1 -- ---- TxTy Trg No No None +154 Ext WR -- ---- TxTy Trg No No None +153 Ext W1 -- ---- TxTy Trg No No None + +78 Ext SR -- ---- TxTy Num No No None +241 Ext S1 -- ---- TxTy Num No No None +240 Ext WR -- ---- TxTy Num No No None +239 Ext W1 -- ---- TxTy Num No No None + +The following tables show the possibilities for generalized floor +linedef type parameters. Any combination of parameters is allowed: + +Slow and Fast represent the same speeds as slow and fast regular +floors. Normal is twice as fast as slow, Fast is twice normal, Turbo +is twice Fast. + +Generalized Floor Types +--------------------------------------------------------------------------- +# Class Trig Dir Spd *Chg *Mdl Mon Crsh Target + +6000H- Gen P1/PR Up Slow None Trg Yes Yes Lowest Neighbor Floor +7FFFH S1/SR Dn Normal Tx Num No No Next Neighbor Floor + W1/WR Fast Tx0 Lowest Neighbor Ceiling + G1/GR Turbo TxTy Highest Neighbor Floor + Ceiling + 24 + 32 +*Mon(ster) enabled must be No if Shortest Lower Texture +Chg field is not None + +Tx = Texture copied only Trg = Trigger Model +Tx0 = Texture copied and Type->0 Num = Numeric Model +TxTy = Texture and Type copied + + +#################### +Section 3. Ceilings +#################### + +---------------------------- +Section 3.1 Ceiling Targets +---------------------------- + +Highest Neighbor Ceiling (HnC) + +This means that the ceiling moves to the height of the highest +neighboring ceiling NOT including the ceiling itself. If the ceiling +direction is down (only possible with generalized ceilings) motion is +instant, else at the ceiling's speed. If no adjacent ceiling exists +the ceiling moves to -32000 units. + +Next Neighbor Ceiling (NnC) + +This means that the ceiling moves up to the height of the lowest +adjacent ceiling greater in height than the current, or to the +height of the highest adjacent ceiling less in height than the current, +as determined by the ceiling's direction. Instant motion is not +possible in this case. If no such ceiling exists, the ceiling does +not move. + +Lowest Neighbor Ceiling (LnC) + +This means that the ceiling height changes to the height of the lowest +ceiling possessed by any neighboring sector, NOT including itself. +If the target height is in the opposite direction to ceiling +motion, motion is instant, otherwise at the ceiling action's speed. +If no adjacent ceiling exists the ceiling moves to 32000 units. + +Highest Neighbor Floor (HnF) + +This means that the ceiling height changes to the height of the +highest neighboring floor, excluding the ceiling's floor itself. If +no neighbor floor exists, the ceiling moves down to -32000 or the +ceiling's floor, whichever is higher. If the target height is in the +opposite direction to ceiling motion, the motion is instant, +otherwise it occurs at the ceiling action's speed. + +Floor + +The ceiling moves down until its at floor height, instantly if +ceiling direction is up (only available with generalized types), at +the ceiling speed if the direction is down. + +8 Above Floor (8aF) + +This means that the ceiling height changes to 8 above the height of +the ceiling's floor. If the target height is in the opposite direction +to ceiling motion, the motion is instant, otherwise it occurs at the +ceiling action's speed. + +24 Units (24) + +The ceiling moves 24 units in the ceiling action's direction. Instant +motion is not possible with this linedef type. + +32 Units (32) + +The ceiling moves 32 units in the ceiling action's direction. Instant +motion is not possible with this linedef type. + +Shortest Upper Texture (SUT) + +The ceiling moves the height of the shortest upper texture on the +boundary of the sector, in the ceiling direction. Instant motion is not +possible with this type. In the case that there is no surrounding +texture the motion is to -32000 or +32000 depending on direction. + +---------------------------------- +Section 3.2 Varieties of ceilings +---------------------------------- + +A ceiling can be activated by pushing on a linedef bounding it +(generalized types only), or by pushing on a switch with the same tag +as the ceiling sector, or by walking over a linedef with the same tag +as the ceiling, or by shooting a linedef with the same tag as the +ceiling with an impact weapon (generalized types only). + +A ceiling can move either Up or Down. + +A ceiling can move with speeds of Slow, Normal, Fast, or Turbo. If the +target height specified by the ceiling function (see Ceiling Targets +above) is in the opposite direction to the ceiling's motion, then +travel is instantaneous, otherwise its at the speed specified. + +A ceiling action can be a texture change type, in which case after +the action the ceiling texture of the affected ceiling, and possibly +the sector type of the affected ceiling are changed to those of a +model sector. The sector type may be zeroed instead of copied from +the model, or not changed at all. These change types are referred to +below as Tx (texture only), Tx0 (type set to 0), and TxTy (texture +and type copied from model). The model sector for the change may be +the sector on the first sidedef of the trigger (trigger model) or the +sector with ceiling at destination height across the lowest numbered +two-sided linedef surrounding the affected sector (numeric model). If +no model sector exists, no change occurs. If a change occurs, ceiling +texture is always affected, lighting is never affected, even that +corresponding to the sector's type, nor is any other sector property +other than the sector's type. + +Numeric model algorithm: + +1) Find all ceilings adjacent to the tagged ceiling at destination height +2) Find the lowest numbered linedef separating those ceilings from that tagged +3) The sector on the other side of that linedef is the model + +A ceiling action can have the crush property (generalized types only), +in which case players and monsters are crushed when the ceiling tries +to move below the point where they fit exactly underneath the +ceiling. This means they take damage until they die, leave the +sector, or the ceiling action is stopped. A ceiling action never +reverses on encountering an obstacle, even if the crush property is +not true, the ceiling merely remains in the same position until the +obstacle is removed or dies, then continues. + +--------------------------------- +Section 3.3 Ceiling linedef types +--------------------------------- + +Regular and Extended Ceiling Types +------------------------------------------------------------------- +# Class Trig Dir Spd *Chg *Mdl Mon Crsh Target + +43 Reg SR Dn Fast None -- No No Floor +41 Reg S1 Dn Fast None -- No No Floor +152 Ext WR Dn Fast None -- No No Floor +145 Ext W1 Dn Fast None -- No No Floor + +186 Ext SR Up Slow None -- No No Highest Neighbor Ceiling +166 Ext S1 Up Slow None -- No No Highest Neighbor Ceiling +151 Ext WR Up Slow None -- No No Highest Neighbor Ceiling +40 Reg W1 Up Slow None -- No No Highest Neighbor Ceiling + +187 Ext SR Dn Slow None -- No No 8 Above Floor +167 Ext S1 Dn Slow None -- No No 8 Above Floor +72 Reg WR Dn Slow None -- No No 8 Above Floor +44 Reg W1 Dn Slow None -- No No 8 Above Floor + +205 Ext SR Dn Slow None -- No No Lowest Neighbor Ceiling +203 Ext S1 Dn Slow None -- No No Lowest Neighbor Ceiling +201 Ext WR Dn Slow None -- No No Lowest Neighbor Ceiling +199 Ext W1 Dn Slow None -- No No Lowest Neighbor Ceiling + +206 Ext SR Dn Slow None -- No No Highest Neighbor Floor +204 Ext S1 Dn Slow None -- No No Highest Neighbor Floor +202 Ext WR Dn Slow None -- No No Highest Neighbor Floor +200 Ext W1 Dn Slow None -- No No Highest Neighbor Floor + +Generalized Ceiling Types +--------------------------------------------------------------------------- +# Class Trig Dir Spd *Chg *Mdl Mon Crsh Target + +4000H- Gen P1/PR Up Slow None Trg Yes Yes Highest Neighbor Ceiling +5FFFH S1/SR Dn Normal Tx Num No No Next Neighbor Ceiling + W1/WR Fast Tx0 Lowest Neighbor Ceiling + G1/GR Turbo TxTy Highest Neighbor Floor + Floor + 24 + 32 +*Mon(ster) enabled must be No if Shortest Upper Texture +Chg field is not None + +Tx = Texture copied only Trg = Trigger Model +Tx0 = Texture copied and Type->0 Num = Numeric Model +TxTy = Texture and Type copied + + +############################ +Section 4. Platforms (Lifts) +############################ + +A platform is basically a floor action involving two heights. The +simple raise platform actions, for example, differ from the +corresponding floor actions in that if they encounter an obstacle, +they reverse direction and return to their former height. + +The most often used kind of platform is a lift which travels from its +current height to the target height, then waits a specified time and +returns to it former height. + +----------------------------- +Section 4.1 Platform Targets +----------------------------- + +Lowest Neighbor Floor + +This means that the platforms "low" height is the height of the +lowest surrounding floor, including the platform itself. The "high" +height is the original height of the floor. + +Next Lowest Neighbor Floor + +This means that the platforms "low" height is the height of the +highest surrounding floor lower than the floor itself. If no lower +floor exists, no motion occurs as the "low" and "high" heights are +then both equal to the floors current height. + +Lowest Neighbor Ceiling + +This means that the platforms "low" height is the height of the +lowest surrounding ceiling unless this is higher than the floor +itself. If no adjacent ceiling exists, or is higher than the floor no +motion occurs as the "low" and "high" heights are then both equal to +the floors current height. + +Lowest and Highest Floor + +This target sets the "low" height to the lowest neighboring floor, +including the floor itself, and the "high" height to the highest +neighboring floor, including the floor itself. When this target is +used the floor moves perpetually between the two heights. Once +triggered this type of linedef runs permanently, even if the motion +is temporarily suspended with a Stop type. No other floor action can +be commanded on the sector after this type is begun. + +Ceiling + +This target sets the "high" height to the ceiling of the sector and +the "low" height to the floor height of the sector and is only used in +the instant toggle type that switches the floor between the ceiling +and its original height on each activation. This is also the ONLY +instant platform type. + +Raise Next Floor + +This means that the "high" height is the lowest surrounding floor +higher than the platform. If no higher adjacent floor exists no +motion will occur. + +Raise 24 Units + +The "low" height is the original floor height, the "high" height is 24 +more. + +Raise 32 Units + +The "low" height is the original floor height, the "high" height is 32 +more. + +----------------------------------- +Section 4.2 Varieties of Platforms +----------------------------------- + +A platform can be activated by pushing on a linedef bounding it +(generalized types only), or by pushing on a switch with the same tag +as the platform sector, or by walking over a linedef with the same tag +as the platform, or by shooting a linedef with the same tag as the +platform with an impact weapon. + +A platform can move with speeds of Slow, Normal, Fast, or Turbo. +Only the instant toggle platform moves instantly, all others move at +the platform's speed. + +A platform can have a delay, in between when it reaches "high" height +and returns to "low" height, or at both ends of the motion in the +case of perpetual lifts. + +A platform action can be a texture change type, in which case after +the action the floor texture of the affected floor, and possibly the +sector type of the affected floor are changed to those of a model +sector. The sector type may be zeroed instead of copied from the +model, or not changed at all. These change types are referred to +below as Tx (texture only), Tx0 (type zeroed), and TxTy (texture and +type changed). The model sector for the change is always the sector +on the first sidedef of the trigger (trigger model). If a change +occurs, floor texture is always affected, lighting is never affected, +even that corresponding to the sector's type, nor is any other sector +property other than the sector's type. + +----------------------------------- +Section 4.3 Platform Linedef types +----------------------------------- + +Regular and Extended Platform Types +------------------------------------------------------------------- +# Class Trig Dly Spd Chg Mdl Mon Target + +66 Reg SR -- Slow Tx Trg No Raise 24 Units +15 Reg S1 -- Slow Tx Trg No Raise 24 Units +148 Ext WR -- Slow Tx Trg No Raise 24 Units +143 Ext W1 -- Slow Tx Trg No Raise 24 Units + +67 Reg SR -- Slow Tx0 Trg No Raise 32 Units +14 Reg S1 -- Slow Tx0 Trg No Raise 32 Units +149 Ext WR -- Slow Tx0 Trg No Raise 32 Units +144 Ext W1 -- Slow Tx0 Trg No Raise 32 Units + +68 Reg SR -- Slow Tx0 Trg No Raise Next Floor +20 Reg S1 -- Slow Tx0 Trg No Raise Next Floor +95 Reg WR -- Slow Tx0 Trg No Raise Next Floor +22 Reg W1 -- Slow Tx0 Trg No Raise Next Floor +47 Reg G1 -- Slow Tx0 Trg No Raise Next Floor + +181 Ext SR 3s Slow None -- No Lowest and Highest Floor (perpetual) +162 Ext S1 3s Slow None -- No Lowest and Highest Floor (perpetual) +87 Reg WR 3s Slow None -- No Lowest and Highest Floor (perpetual) +53 Reg W1 3s Slow None -- No Lowest and Highest Floor (perpetual) + +182 Ext SR -- ---- ---- -- -- Stop +163 Ext S1 -- ---- ---- -- -- Stop +89 Reg WR -- ---- ---- -- -- Stop +54 Reg W1 -- ---- ---- -- -- Stop + +62 Reg SR 3s Slow None -- No Lowest Neighbor Floor (lift) +21 Reg S1 3s Slow None -- No Lowest Neighbor Floor (lift) +88 Reg WR 3s Slow None -- No Lowest Neighbor Floor (lift) +10 Reg W1 3s Slow None -- No Lowest Neighbor Floor (lift) + +123 Reg SR 3s Fast None -- No Lowest Neighbor Floor (lift) +122 Reg S1 3s Fast None -- No Lowest Neighbor Floor (lift) +120 Reg WR 3s Fast None -- No Lowest Neighbor Floor (lift) +121 Reg W1 3s Fast None -- No Lowest Neighbor Floor (lift) + +211 Ext SR -- Inst None -- No Ceiling (toggle) +212 Ext WR -- Inst None -- No Ceiling (toggle) + +Generalized Lift Types +--------------------------------------------------------------------------- +# Class Trig Dly Spd Mon Target + +3400H- Gen P1/PR 1s Slow Yes Lowest Neighbor Floor +37FFH S1/SR 3s Normal No Next Lowest Neighbor Floor + W1/WR 5s Fast Lowest Neighbor Ceiling + G1/GR 10s Turbo Lowest and Highest Floor (perpetual) + +############################ +Section 5. Crusher Ceilings +############################ + +A crusher ceiling is a linedef type that causes the ceiling to cycle +between its starting height and 8 above the floor, damaging +monsters and players that happen to be in between. Barrels explode +when crushed. + +Once a crusher ceiling is started it remains running for the +remainder of the level even if temporarily suspended with a stop type. +No other ceiling action can be used in that sector thereafter. + +---------------------------------- +Section 5.1 Varieties of Crushers +---------------------------------- + +A crusher can be activated by pushing on a linedef bounding it +(generalized types only), or by pushing on a switch with the same tag +as the crusher sector, or by walking over a linedef with the same tag +as the crusher, or by shooting a linedef with the same tag as the +crusher with an impact weapon (generalized types only). + +A crusher has a speed: slow, normal, fast, or turbo. The slower the +speed, the more damage the crusher does when crushing, simply thru +being applied longer. When a slow or normal crusher is moving down +and encounters something to crush, it slows down even more, by a +factor of 8. This persists until it reaches bottom of stroke and +starts up again. Fast and turbo crushers do not slow down. + +A crusher can be silent. The regular silent crusher makes platform +stop and start noises at top and bottom of stroke. The generalized +silent crusher is completely quiet. + +A crusher linedef is provided to stop a crusher in its current +position. Care should be used that this doesn't lock the player out +of an area of the wad if the crusher is too low to pass. A crusher +can be restarted, but not changed, with any crusher linedef. + +---------------------------------- +Section 5.2 Crusher Linedef Types +---------------------------------- + +Regular and Extended Crusher Types +------------------------------------------------------------------- +# Class Trig Spd Mon Silent Action + +184 Ext SR Slow No No Start +49 Reg S1 Slow No No Start +73 Reg WR Slow No No Start +25 Reg W1 Slow No No Start + +183 Ext SR Fast No No Start +164 Ext S1 Fast No No Start +77 Reg WR Fast No No Start +6 Reg W1 Fast No No Start + +185 Ext SR Slow No Yes Start +165 Ext S1 Slow No Yes Start +150 Ext WR Slow No Yes Start +141 Reg W1 Slow No Yes Start + +188 Ext SR ---- -- -- Stop +168 Ext S1 ---- -- -- Stop +74, Reg WR ---- -- -- Stop +57, Reg W1 ---- -- -- Stop + +Generalized Crusher Types +--------------------------------------------------------------------------- +# Class Trig Spd Mon Silent + +2F80H- Gen P1/PR Slow Yes Yes +2FFFH S1/SR Normal No No + W1/WR Fast + G1/GR Turbo + +########################## +Section 6. Stair Builders +########################## + +A stair builder is a linedef type that sets a sequence of sectors +defined by a complex rule to an ascending or descending sequence of +heights. + +The rule for stair building is as follows: + +1) The first step to rise or fall is the tagged sector. It rises or +falls by the stair stepsize, at the stair speed. + +2) To find the next step (sector) affected examine all two-sided +linedefs with first sidedef facing into the previous step for the one +with lowest linedef number. The sector on the other side of this +linedef is the next step. If no such linedef exists, stair building +ceases. + +3) If the next step is already moving, or has already risen as part +of the stair, stair building ceases. Optionally if the floor texture +of the next step is different from the previous step's the stair +building stops. Otherwise the next step moves to the height of the +previous step plus or minus the stepsize depending on the direction +the stairs build, up or down. If the motion is in the same direction +as the stairs build, it occurs at stair build speed, otherwise it is +instant. + +4) Repeat from step 2 until stair building ceases. + +---------------------------------------- +Section 6.1 Varieties of Stair Builders +---------------------------------------- + +A stair can be activated by pushing on a linedef bounding it +(generalized types only), or by pushing on a switch with the same tag +as the stair sector, or by walking over a linedef with the same tag +as the stair, or by shooting a linedef with the same tag as the +stair with an impact weapon (generalized types only). + +Only extended and generalized stair types are retriggerable. The +extended retriggerable stairs are mostly useless, though triggering a +stair with stepsize 8 twice might be used. The generalized +retriggerable stairs alternate building up and down on each +activation which is much more useful. + +A stair can build up or down (generalized types only). + +A stair can have a step size of 4, 8, 16, or 24. Only generalized +types support stepsize of 4 or 24. + +A stair can have build speeds of slow, normal, fast or turbo. Only +generalized types support speeds of normal or turbo. + +A stair can stop on encountering a different texture or ignore +(generalized types only) different textures and continue. + +Only the regular build fast, stepsize 16 stair has the property that +monsters and players can be crushed by the motion, all others do not +crush. + +---------------------------------------------------- +Section 6.2 Regular and Extended Stair Builder Types +---------------------------------------------------- + +Regular and Extended Stairs Types +------------------------------------------------------------------- +# Class Trig Dir Spd Step Ignore Mon + +258 Ext SR Up Slow 8 No No +7 Reg S1 Up Slow 8 No No +256 Ext WR Up Slow 8 No No +8 Reg W1 Up Slow 8 No No + +259 Ext SR Up Fast 16 No No +127 Reg S1 Up Fast 16 No No +257 Ext WR Up Fast 16 No No +100 Reg W1 Up Fast 16 No No + +Generalized Stairs Types +--------------------------------------------------------------------------- +# Class Trig Dir Spd Step Ignore Mon + +3000H- Gen P1/PR Up Slow 4 Yes Yes +33FFH S1/SR Dn Normal 8 No No + W1/WR Fast 16 + G1/GR Turbo 24 + +#################### +Section 7 Elevators +#################### + +An elevator is a linedef type that moves both floor and ceiling +together. All elevator linedefs are extended, there are no regular or +generalized elevator types. Instant elevator motion is not possible, +and monsters cannot activate elevators. All elevator triggers are +either switched or walkover. + +----------------------------- +Section 7.1 Elevator Targets +----------------------------- + +Next Highest Floor + +The elevator floor moves to the lowest adjacent floor higher than the +elevator's floor, the ceiling staying the same height above the floor. +If there is no higher floor the elevator doesn't move. + +Next Lowest Floor + +The elevator floor moves to the highest adjacent floor lower than the +current floor, the ceiling staying the same height above the floor. If +there is no lower floor the elevator doesn't move. + +Current Floor + +The elevator floor moves to the height of the floor on the first +sidedef of the triggering line, the ceiling remaining the same height +above the elevator floor. + +----------------------------------- +Section 7.2 Elevator Linedef Types +----------------------------------- + +Extended Elevator types +------------------------------------------------------------------- +# Class Trig Spd Target + +230 Ext SR Fast Next Highest Floor +229 Ext S1 Fast Next Highest Floor +228 Ext WR Fast Next Highest Floor +227 Ext W1 Fast Next Highest Floor + +234 Ext SR Fast Next Lowest Floor +233 Ext S1 Fast Next Lowest Floor +232 Ext WR Fast Next Lowest Floor +231 Ext W1 Fast Next Lowest Floor + +238 Ext SR Fast Current Floor +237 Ext S1 Fast Current Floor +236 Ext WR Fast Current Floor +235 Ext W1 Fast Current Floor + +################### +Section 7 Lighting +################### + +The lighting linedef types change the lighting in the tagged sector. +All are regular or extended types, there are no generalized lighting +types. All are switched or walkovers. + +----------------------------- +Section 7.1 Lighting Targets +----------------------------- + +Lights to Minimum Neighbor + +Each tagged sector is set to the minimum light level found in any +adjacent sector. The tagged sectors are changed in numerical order, +and this may influence the result. + +Lights to Maximum Neighbor + +Each tagged sector is set to the maximum light level found in any +adjacent sector. The tagged sectors are changed in numerical order, +and this may influence the result. + +Blinking + +Each tagged sector begins blinking between two light levels. The +brighter level is the light level in the tagged sector. The darker +level is the minimum neighbor light level, or 0 if all neighbor +sectors have lighting greater than or equal to the sector's at the +time of activation. The blinking is non-synchronous, beginning 1-9 +gametics after activation, with a dark period of 1 sec (35 gametics) +and a bright period of 1/7 sec (5 gametics). + +35 Units + +Each tagged sector is set to a light level of 35 units. + +255 Units + +Each tagged sector is set to a light level of 255 units. + +----------------------------------- +Section 7.2 Lighting Linedef Types +----------------------------------- + +Regular and Extended Lighting types +------------------------------------------------------------------- +# Class Trig Target + +139 Reg SR 35 Units +170 Ext S1 35 Units +79 Reg WR 35 Units +35 Reg W1 35 Units + +138 Reg SR 255 Units +171 Ext S1 255 Units +81 Reg WR 255 Units +13 Reg W1 255 Units + +192 Ext SR Maximum Neighbor +169 Ext S1 Maximum Neighbor +80 Reg WR Maximum Neighbor +12 Reg W1 Maximum Neighbor + +194 Ext SR Minimum Neighbor +173 Ext S1 Minimum Neighbor +157 Ext WR Minimum Neighbor +104 Reg W1 Minimum Neighbor + +193 Ext SR Blinking +172 Ext S1 Blinking +156 Ext WR Blinking +17 Reg W1 Blinking + + +################ +Section 8 Exits +################ + +An exit linedef type ends the current level bringing up the +intermission screen with its report of kills/items/secrets or frags +in the case of deathmatch. Obviously, none are retriggerable, and +none require tags, since no sector is affected. + +--------------------------- +Section 8.1 Exit Varieties +--------------------------- + +An exit can be activated by pushing on a switch with the exit type +or by walking over a linedef with the exit type, or by shooting a +linedef with the exit type with an impact weapon. + +An exit can be normal or secret. The normal exit simply ends the +level and takes you to the next level via the intermission screen. A +secret exit only works in a special level depending on the IWAD being +played. In DOOM the secret exits can be on E1M3, E2M5, or E3M6. In +DOOM II they can be in levels 15 and 31. If a secret exit is used in +any other level, it brings you back to the start of the current +level. In DOOM the secret exits go from E1M3 to E1M9, E2M5 to E2M9, +and E3M6 to E3M9. In DOOM II they go from 15 to 31 and from 31 to 32. +In DOOM II a normal exit from 31 or 32 goes to level 16. + +----------------------------------- +Section 8.2 Exit Linedef Types +----------------------------------- + +Regular and Extended Exit types +------------------------------------------------------------------- +# Class Trig Type + +11 Reg S1 Normal +52 Reg W1 Normal +197 Ext G1 Normal + +51 Reg S1 Secret +124 Reg W1 Secret +198 Ext G1 Secret + +###################### +Section 9 Teleporters +###################### + +A teleporter is a linedef that when crossed or switched makes the +player or monster appear elsewhere in the level. There are only +regular and extended teleporters, no generalized teleporters exist +(yet). Teleporters are the only direction sensitive walkover +triggers in DOOM (to allow them to be exited without teleporting +again). They must be crossed from the first sidedef side in order to +work. + +The place that the player or monster appears is set in one of two +ways. The more common is by a teleport thing in the sector tagged to +the teleport line. The newer completely player preserving line-line +silent teleport makes the player appear relative to the exit line +(identified by having the same tag as the entry line) with the same +orientation, position, momentum and height that they had relative to +the entry line just before teleportation. A special kind of line-line +teleporter is also provided that reverses the player's orientation by +180 degrees. + +In the case of several lines tagged the same as the teleport line, or +several sectors tagged the same, or several teleport things in the +tagged sector, in all cases the lowest numbered one is used. + +In DOOM crossing a W1 teleport line in the wrong direction used it +up, and it was never activatable. In BOOM this is not the case, it +does not teleport but remains active until next crossed in the right +direction. + +If the exit of a teleporter is blocked a monster (or anything besides +a player) will not teleport thru it. However if the exit of teleporter +is blocked a player will, including into a down crusher, a monster, +or another player. In the latter two cases the monster/player +occupying the spot dies messily, and this is called a telefrag. + +------------------------------- +Section 9.1 Teleport Varieties +------------------------------- + +A teleporter can be walkover or switched, and retriggerable or not. + +A teleporter can have destination set by a teleport thing in the +tagged sector, or by a line tagged the same as the teleport line. +These are called thing teleporters and line teleporters resp. + +A teleporter can preserve orientation or set orientation from the +position, height, and angle of the teleport thing. Note a thing +destination teleporter always sets position, though it may preserve +orientation otherwise. + +A teleporter can produce green fog and a whoosh noise, or it can be +silent, in which case it does neither. + +A teleporter can transport monsters only, or both players and +monsters. + +----------------------------------- +Section 9.2 Teleport Linedef types +----------------------------------- + +Regular and Extended Teleport types +------------------------------------------------------------------- +# Class Trig Silent Mon Plyr Orient Dest + +195 Ext SR No Yes Yes Set TP thing in tagged sector +174 Ext S1 No Yes Yes Set TP thing in tagged sector +97 Reg WR No Yes Yes Set TP thing in tagged sector +39 Reg W1 No Yes Yes Set TP thing in tagged sector + +126 Reg WR No Yes No Set TP thing in tagged sector +125 Reg W1 No Yes No Set TP thing in tagged sector +269 Ext WR Yes Yes No Set TP thing in tagged sector +268 Ext W1 Yes Yes No Set TP thing in tagged sector + +210 Ext SR Yes Yes Yes Preserve TP thing in tagged sector +209 Ext S1 Yes Yes Yes Preserve TP thing in tagged sector +208 Ext WR Yes Yes Yes Preserve TP thing in tagged sector +207 Ext W1 Yes Yes Yes Preserve TP thing in tagged sector + +244 Ext WR Yes Yes Yes Preserve Line with same tag +243 Ext W1 Yes Yes Yes Preserve Line with same tag +263 Ext WR Yes Yes Yes Preserve Line with same tag (reversed) +262 Ext W1 Yes Yes Yes Preserve Line with same tag (reversed) + +267 Ext WR Yes Yes No Preserve Line with same tag +266 Ext W1 Yes Yes No Preserve Line with same tag +265 Ext WR Yes Yes No Preserve Line with same tag (reversed) +264 Ext W1 Yes Yes No Preserve Line with same tag (reversed) + +################## +Section 10 Donuts +################## + +A donut is a very specialized linedef type that lowers a pillar in a +surrounding pool, while raising the pool and changing its texture and +type. + +The tagged sector is the pillar, and its lowest numbered line must be +two-sided. The sector on the other side of that is the pool. The pool +must have a two-sided line whose second sidedef does not adjoin the +pillar, and the sector on the second side of the lowest numbered such +linedef is the model for the pool's texture change. The model sector +floor also provides the destination height both for lowering the +pillar and raising the pool. + +No generalized donut linedefs exist, and all are switched or +walkover. + +--------------------------------- +Section 10.1 Donut Linedef types +--------------------------------- + +Regular and Extended Donut types +------------------------------------------------------------------- +# Class Trig + +191 Ext SR +9 Reg S1 +155 Ext WR +146 Ext W1 + +############################# +Section 11 Property Transfer +############################# + +These linedefs are special purpose and are used to transfer +properties from the linedef itself or the sector on its first sidedef +to the tagged sector(s). None are triggered, they simply exist. + +Extended Property Transfer Linedefs +------------------------------------------------------------------- +# Class Trig Description + +213 Ext -- Set Tagged Floor Lighting to Lighting on 1st Sidedef's Sector + +Used to give the floor of a sector a different light level from the +remainder of the sector. For example bright lava in a dark room. + +261 Ext -- Set Tagged Ceiling Lighting to Lighting on 1st Sidedef's Sector + +Used to give the ceiling of a sector a different light level from the +remainder of the sector. + +260 Ext -- Make Tagged Lines (or this line if tag==0) Translucent + +Used to make 2s normal textures translucent. If tag==0, then this linedef's +normal texture is made translucent if it's 2s, and the default translucency +map TRANMAP is used as the filter. If tag!=0, then all similarly-tagged 2s +linedefs' normal textures are made translucent, and if this linedef's first +sidedef contains a valid lump name for its middle texture (as opposed to a +texture name), and the lump is 64K long, then that lump will be used as the +translucency filter instead of the default TRANMAP, allowing different +filters to be used in different parts of the same maps. If the first side's +normal texture is not a valid translucency filter lump name, it must be a +valid texture name, and will be displayed as such on this linedef. + +242 Ext -- Set Tagged Lighting, Flats Heights to 1st Sidedef's Sector, + and set colormap based on sidedef textures. + +This allows the tagged sector to have two levels -- an actual floor and +ceiling, and another floor or ceiling where more flats are rendered. Things +will stand on the actual floor or hang from the actual ceiling, while this +function provides another rendered floor and ceiling at the heights of the +sector on the first sidedef of the linedef. Typical use is "deep water" that +can be over the player's head. + + ---------------------------------- < real sector's ceiling height + | real ceiling | < control sector's ceiling texture + | | + | | < control sector's lightlevel + | A | + | | < upper texture as colormap + | | + | | < control sector's floor texture + ---------------------------------- < control sector's ceiling height + | fake ceiling | < real sector's ceiling texture + | | + | | < real sector's lightlevel + | B | + | | < normal texture as colormap + | | + | fake floor | < real sector's floor texture + ---------------------------------- < control sector's floor height + | | < control sector's ceiling texture + | | + | | < control sector's lightlevel + | C | + | | < lower texture as colormap + | | + | real floor | < control sector's floor texture + ---------------------------------- < real sector's floor height + +Boom sectors controlled by a 242 linedef are partitioned into 3 spaces. +The viewer's xyz coordinates uniquely determine which space they are in. + +If they are in space B (normal space), then the floor and ceiling textures +and lightlevel from the real sector are used, and the colormap from the 242 +linedef's first sidedef's normal texture is used (COLORMAP is used if it's +invalid or missing). The floor and ceiling are rendered at the control +sector's heights. + +If they are in space C ("underwater"), then the floor and ceiling textures +and lightlevel from the control sector are used, and the lower texture in +the 242 linedef's first sidedef is used as the colormap. + +If they are in space A ("head over ceiling"), then the floor and ceiling +textures and lightlevel from the control sector are used, and the upper +texture in the 242 linedef's first sidedef is used as the colormap. + +If only two of these adjacent partitions in z-space are used, such as +underwater and normal space, one has complete control over floor textures, +ceiling textures, light level, and colormaps, in each of the two partitions. +The control sector determines the textures and lighting in the more "unusual" +case (e.g. underwater). + +It's also possible for the fake floor to extend below the real floor, in +which case an invisible platform / stair effect is created. In that case, +the picture looks like this (barring any ceiling effects too): + + ---------------------------------- < real sector's ceiling texture + | real ceiling = fake ceiling | + | | + | | + | B | < real sector's lightlevel + | | < normal texture's colormap + | | + | real floor | + ---------------------------------- < invisible, no texture drawn + | | + | | + | | < real sector's lightlevel + | C | < normal texture's colormap + | | + | | + | fake floor | < real sector's floor texture + ---------------------------------- < fake sector's floor height + +In this case, since the viewer is always at or above the fake floor, no +colormap/lighting/texture changes occur -- the fake floor just gets drawn +at the control sector's height, but at the real sector's lighting and +texture, while objects stand on the higher height of the real floor. + +It's the viewer's position relative to the fake floor and/or fake ceiling, +which determines whether the control sector's lighting and textures should +be used, and which colormap should be used. If the viewer is always between +the fake floor and fake ceiling, then no colormap, lighting, or texture +changes occur, and the view just sees the real sector's textures and light +level drawn at possibly different heights. + +If the viewer is below the fake floor height set by the control sector, or is +above the fake ceiling height set by the control sector, then the corresponding +colormap is used (lower or upper texture name), and the textures and lighting +are taken from the control sector rather than the real sector. They are still +stacked vertically in standard order -- the control sector's ceiling is always +drawn above the viewer, and the control sector's floor is always drawn below +the viewer. + +The kaleidescope effect only occurs when F_SKY1 is used as the control sector's +floor or ceiling. If F_SKY1 is used as the control sector's ceiling texture, +then under water, only the control sector's floor appears, but it "envelops" +the viewer. Similarly, if F_SKY1 is used as the control sector's floor texture, +then when the player's head is over a fake ceiling, the control sector's +ceiling is used throughout. + +F_SKY1 causes HOM when used as a fake ceiling between the viewer and normal +space. Since there is no other good use for it, this kaleidescope is an +option turned on by F_SKY1. Note that this does not preclude the use of sky +REAL ceilings over deep water -- this is the control sector's ceiling, the +one displayed when the viewer is underwater, not the real one. + +A colormap has the same size and format as Doom's COLORMAP. Extra colormaps +may defined in Boom by adding them between C_START and C_END markers in wads. +Colormaps between C_START and C_END are automatically merged by Boom with any +previously defined colormaps. + +WATERMAP is a colormap predefined by Boom which can be used to provide a +blue-green tint while the player is under water. WATERMAP can be modified by +pwads. + +Ceiling bleeding may occur if required upper textures are not used. + +223 Ext -- Length Sets Friction in tagged Sector,Sludge<100, Ice>100 + +The length of the linedef with type 223 controls the amount of friction +experienced by the player in the tagged sector, when in contact with the +floor. Lengths less than 100 are sticker than normal, lengths greater than +100 are slipperier than normal. The effect is only present in the tagged +sector when its friction enable bit (bit 8) in the sector type is set. +This allows the flat to be changed in conjunction with turning the effect +on or off thru texture/type changes. + +271 Ext -- Transfer sky texture to tagged sectors +271 Ext -- Transfer sky texture to tagged sectors, flipped + +These linedefs transfer wall textures to skies. F_SKY1 must still be used as +the floor or ceiling texture in the sectors for which sky is desired, but the +presence of a 271 or 272 property-transfer linedef can change the sky texture +to something other than a level-based default. + +Every sector with F_SKY1 floor or ceiling which shares the same sector tag +as the 271 or 272 linedef will use a sky texture based on the upper texture +of the first sidedef in the 271 or 272 linedef. Sectors with F_SKY1 floors or +ceilings which are not tagged with 271 or 272 linedefs, behave just like Doom. + +Horizontal offsets or scrolling in the transferred texture, is converted into +rotation of the sky texture. Vertical offsets or scrolling is transferred as +well, allowing for precise adjustments of sky position. Unpegging in the sky +transfer linedef does not affect the sky texture. + +Horizontal scrolling of the transferred upper wall texture is converted into +rotation of the sky texture, but it occurs at a very slow speed relative to +the moving texture, allowing for long-period rotations (such as one complete +revolution per Doom real-time hour). + +Effects other than sky-transfer effects are not excluded from the affected +sector(s), and tags can be shared so long as the effects are unambiguous. +For example, a wall-scrolling linedef can share a sector tag with both its +affectee linedef (the one being scrolled), and with the sector that the +latter controls. There is no ambiguity because one effect (scrolling) applies +to a linedef, while the other effect (sky transfer) applies to a sector. + +If a sector underneath a special sky needs to be set up to have a different +purpose (for example, if it is a lift or a stairbuilder), then two tags will +need to be created, and the transfer linedef and any scrolling linedefs will +need to be duplicated as well, so that the same effect as far as the sky goes, +is duplicated in two separate sector tags. This will not affect sky appearance, +but it will allow a special sector which needs a unique tag, to sit under such +a sky. + +Animated textures may be transferred to skies as well. + +In Doom, skies were flipped horizontally. To maintain compatibility with this +practice, the 272 linedef flips the wall image horizontally. The 271 linedef +does not flip the wall image, and it is intended to make it easier to take +existing non-flipped wall textures and transfer them to skies. + +Sky textures which are different must be separated by non-sky textures, or +else the results are undefined. + +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. + +224 Ext -- Length/Direction Sets Wind Force in tagged Sectors + + +225 Ext -- Length/Direction Sets Current Force in tagged Sectors + +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 5001 (push) +or 5002 (pull). 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 5001/5002 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 5001/5002 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. + +226 Ext -- Length Sets Point Source Wind/Current Force in Tagged Sectors + +########################################### +Section 12 Scrolling Walls, Flats, Objects +########################################### + + +Static Scrollers + +The most basic kind of scrolling linedef causes some part of the tagged +sector or tagged wall to scroll, in proportion to the length of the +linedef the trigger is on, and according to the direction that trigger +linedef lies. For each 32 units of length of the trigger, the tagged +object scrolls 1 unit per frame. Since the length of a linedef doesn't +change during gameplay, these types are static, the scrolling effect +remains constant during gameplay. However, these effects can be combined +with, and/or canceled by, other scrollers. + + +250 -- Scroll Tagged Ceiling + +The ceiling of the tagged sector scrolls in the direction of the linedef +trigger, 1 unit per frame for each 32 units of linedef trigger length. +Objects attached to the ceiling do not move. + + +251 -- Scroll Tagged Floor + +The floor of the tagged sector scrolls in the direction of the linedef +trigger, 1 unit per frame for each 32 units of linedef trigger length. +Objects resting on the floor do not move. + + +252 -- Carry Objects on Tagged Floor + +Objects on the floor of the tagged sector move in the direction of the +linedef trigger, 1 unit per frame for each 32 units of linedef trigger +length. The floor itself does not scroll. + + +253 -- Scroll Tagged Floor, Carry Objects + +Both the floor of the tagged sector and objects resting on that floor +move in the direction of the linedef trigger, 1 unit per frame for each +32 units of linedef trigger length. + + +254 -- Scroll Tagged Wall, Same as Floor/Ceiling + +Walls with the same tag as the linedef trigger scroll at the same +rate as a floor or ceiling controlled by one of 250-253, allowing +their motion to be synchronized. When the linedef trigger is not +parallel to the wall, the component of the linedef in the direction +perpendicular to the wall causes the wall to scroll vertically. The +length of the component parallel to the wall sets the horizontal +scroll rate, the length of the component perpendicular to the wall +sets the vertical scroll rate. + + +Simple Static Scrollers + +For convenience three simpler static scroll functions are provided +for when you just need a wall to scroll and don't need to control its +rate and don't want to bother with proportionality. + +255 -- Scroll Wall Using Sidedef Offsets + +For simplicity, a static scroller is provided that scrolls the first +sidedef of a linedef, based on its x- and y- offsets. No tag is used. +The x offset controls the rate of horizontal scrolling, 1 unit per +frame per x offset, and the y offset controls the rate of vertical +scrolling, 1 unit per frame per y offset. + +48 -- Animated wall, Scrolls Left + +A linedef with this type scrolls its first sidedef left at a +constant rate of 1 unit per frame. + +85 -- Animated wall, Scrolls Right + +A linedef with this type scrolls its first sidedef right at a +constant rate of 1 unit per frame. + + + +Dynamic Scrolling + +To achieve dynamic scrolling effects, the position or rate of scrolling +is controlled by the relative position of the floor and ceiling of the +sector on the scrolling trigger's first sidedef. The direction of +scrolling remains controlled by the direction of the linedef trigger. +Either the floor or ceiling may move in the controlling sector, or +both. The control variable is the amount of change in the sum of the +floor and ceiling heights. + +All scroll effects are additive, and thus two or more effects may +reinforce and/or cancel each other. + +Displacement Scrollers + +In the first kind, displacement scrolling, the position of the scrolled +objects or walls changes proportionally to the motion of the floor or +ceiling in the sector on the first sidedef of the scrolling trigger. +The proportionality is set by the length of the linedef trigger. If it +is 32 units long, the wall, floor, ceiling, or object moves 1 unit for +each unit the floor or ceiling of the controlling sector moves. If it +is 64 long, they move 2 units per unit of relative floor/ceiling motion +in the controlling sector and so on. + +245 -- Scroll Tagged Ceiling w.r.t. 1st Side's Sector + +The tagged sector's ceiling texture scrolls in the direction of the +scrolling trigger line, when the sector on the trigger's first sidedef +changes height. The amount moved is the height change times the trigger +length, divided by 32. Objects attached to the ceiling do not move. + + +246 -- Scroll Tagged Floor w.r.t. 1st Side's Sector + +The tagged sector's floor texture scrolls in the direction of the +scrolling trigger line when the sector on the trigger's first sidedef +changes height. The amount moved is the height change times the trigger +length, divided by 32. Objects on the floor do not move. + + +247 -- Push Objects on Tagged Floor wrt 1st Side's Sector + +Objects on the tagged sector's floor move in the direction of the +scrolling trigger line when the sector on the trigger's first sidedef +changes height. The amount moved is the height change times the trigger +length, divided by 32. + + +248 -- Push Objects & Tagged Floor wrt 1st Side's Sector + +The tagged sector's floor texture, and objects on the floor, move in +the direction of the scrolling trigger line when the sector on the +trigger's first sidedef changes height. The amount moved is the height +change times the trigger length, divided by 32. + + +249 -- Scroll Tagged Wall w.r.t 1st Side's Sector + +Walls with the same tag as the linedef trigger scroll at the same +rate as a floor or ceiling controlled by one of 245-249, allowing +their motion to be synchronized. When the linedef trigger is not +parallel to the wall, the component of the linedef in the direction +perpendicular to the wall causes the wall to scroll vertically. The +length of the component parallel to the wall sets the horizontal +scroll displacement, the length of the component perpendicular to +the wall sets the vertical scroll displacement. The distance scrolled +is the controlling sector's height change times the trigger length, +divided by 32. + + +Accelerative Scrollers + +The second kind of dynamic scrollers, accelerative scrollers, also +react to height changes in the sector on the first sidedef of the +linedef trigger, but the RATE of scrolling changes, not the +displacement. That is, changing the controlling sector's height +speeds up or slows down the scrolling by the change in height +times the trigger's length, divided by 32. + +An on/off scroller can be made by using an accelerative scroller +and any linedef that changes the controlling sector's heights. +If a scroll effect which is initially on is desired, then the +accelerative scroller should be combined with a static one which +turns the scroll effect on initially. The accelerative scroller +would then need to be set up to cancel the static scroller's +effect when the controlling sector's height changes. + + +214 -- Accel Tagged Ceiling w.r.t. 1st Side's Sector + +The tagged sector's ceiling's rate of scroll changes in the direction +of the trigger linedef (use vector addition if already scrolling) by +the change in height of the sector on the trigger's first sidedef +times the length of the linedef trigger, divided by 32. For example, +if the ceiling is motionless originally, the linedef trigger is 32 +long, and the ceiling of the controlling sector moves 1 unit, the +tagged ceiling will start scrolling at 1 unit per frame. + + +215 -- Accel Tagged Floor w.r.t. 1st Side's Sector + +The tagged sector's floor's rate of scroll changes in the direction of +the trigger linedef (use vector addition if already scrolling) by the +change in height of the sector on the trigger's first sidedef times +the length of the linedef trigger, divided by 32. For example, if +the floor is motionless originally, the linedef trigger is 32 long, +and the ceiling of the controlling sector moves 1 unit, the tagged +floor will start scrolling at 1 unit per frame. + + +216 -- Accel Objects on Tagged Floor wrt 1st Side's Sector + +Objects on the tagged sector's floor's rate of motion changes in the +direction of the trigger linedef (use vector addition if already +moving) by the change in height of the sector on the trigger's first +sidedef times the length of the linedef trigger divided by 32. For +example, if the objects are motionless originally, the linedef trigger +is 32 long, and the ceiling of the controlling sector moves 1 unit, +the objects on the tagged floor will start moving at 1 unit per frame. + + +217 -- Accel Objects&Tagged Floor wrt 1st Side's Sector + +The tagged sector's floor, and objects on it, change its rate of +motion in the direction of the trigger linedef (use vector addition +if already moving) by the change in height of the sector on the +trigger's first sidedef times the length of the linedef trigger, divided +by 32. For example, if the floor and objects are motionless originally, +the linedef trigger is 32 long, and the ceiling of the controlling +sector moves 1 unit, the objects and the tagged floor will start moving +at 1 unit per frame. + + +218 -- Accel Tagged Wall w.r.t 1st Side's Sector + +Walls with the same tag as the linedef trigger increase their +scroll rate in sync with a floor or ceiling controlled by one of +214-217. When the linedef trigger is not parallel to the wall, the +component of the linedef in the direction perpendicular to the wall +causes the wall to increase its vertical scroll rate. The length of +the component parallel to the wall sets the change in horizontal +scroll rate, the length of the component perpendicular to the wall +sets the change in vertical scroll rate. The rate change is the height +change times the trigger length, divided by 32. + + +====================================================================== + +####################################################### +Section 13 Detailed Generalized Linedef Specification +####################################################### + + +BOOM has added generalized linedef types that permit the parameters +of linedef actions to be nearly independently chosen. + +To support these, DETH has been modified to support them via dialogs +for each generalized type; each dialog allows the parameters for +that type to be independently specified by choice from a array of +radio buttons. A parser has also been added to support reading back +the function of a generalized linedef from its type number. + +NOTE to wad authors: + +This requires a lot of type numbers, 20608 in all so far. Some +editors may object to the presence of these new types thru assuming +that a lookup table of size 256 suffices (or some other reason). For +those that must continue to use such an editor, it may be necessary +to stick to the old linedef types, which are still present. + +We are also providing command line tools to set these linedef types, +independent of which editor you happen to use, but they are a lot +less slick, and more difficult to use than DETH. See TRIGCALC.EXE and +CLED.EXE in the EDITUTIL.ZIP package of the BOOM distribution. + +== Generalized Linedef Ranges ======================================= + +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 (20608) + +====================================================================== + +The following sections define the placement and meaning of the bit +fields within each linedef category. Fields in the description are +listed in increasing numeric order. + +Some nomenclature: + +Target height designations: + +H means highest, L means lowest, N means next, F means floor, C means +ceiling, n means neighbor, Cr means crush, sT means shortest +lower texture. + +Texture change designations: + +c0n change texture, change sector type to 0, numeric model change +c0t change texture, change sector type to 0, trigger model change +cTn change texture only, numeric model change +cTt change texture only, trigger model change +cSn change texture and sector type to model's, numeric model change +cSt change texture and sector type to model's, trigger model change + +A trigger model change uses the sector on the first side of the +trigger for its model. A numeric model change looks at the sectors +adjoining the tagged sector at the target height, and chooses the one +across the lowest numbered two sided line for its model. If no model +exists, no change occurs. Note that in DOOM II v1.9, no model meant +an illegal sector type was generated. + + +------------------------------------------------------------------ +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 + +DETH Nomenclature: + +W1[m] F->HnF DnS [c0t] [Cr] +WR[m] F->LnF DnN [c0n] +S1[m] F->NnF DnF [cTt] +SR[m] F->LnC DnT [cTn] +G1[m] F->C UpS [cSt] +GR[m] FbysT UpN [cSn] +D1[m] Fby24 UpF +DR[m] Fby32 UpT + +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 + +DETH Nomenclature: + +W1[m] C->HnC DnS [Cr] [c0t] +WR[m] C->LnC DnN [c0n] +S1[m] C->NnC DnF [cTt] +SR[m] C->HnF DnT [cTn] +G1[m] C->F UpS [cSt] +GR[m] CbysT UpN [cSn] +D1[m] Cby24 UpF +DR[m] Cby32 UpT + +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 0x0080 7 +delay 1/4/9/30 (secs) 2 0x0300 8 + +DETH Nomenclature: + +W1[m] OpnD{1|4|9|30}Cls S +WR[m] Opn N +S1[m] ClsD{1|4|9|30}Opn F +SR[m] Cls T +G1[m] +GR[m] +D1[m] +DR[m] + +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 + +DETH Nomenclature: + +W1[m] OpnD{1|4|9|30}Cls S Any +WR[m] Opn N R{C|S|K} +S1[m] F B{C|S|K} +SR[m] T Y{C|S|K} +G1[m] All{3|6} +GR[m] +D1[m] +DR[m] + +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 0 (n) 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 + +DETH Nomenclature: + +W1[m] Lft F->LnFD{1|3|5|10} S +WR[m] F->NnFD{1|3|5|10} N +S1[m] F->LnCD{1|3|5|10} F +SR[m] HnF<->LnFD{1|3|5|10} T +G1[m] +GR[m] +D1[m] +DR[m] + +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 + +DETH Nomenclature: + +W1[m] Stair Dn s4 S [Ign] +WR[m] Up s8 N +S1[m] s16 F +SR[m] s24 T +G1[m] +GR[m] +D1[m] +DR[m] + +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. +3) A retriggerable stairs builds up and down alternately on each + trigger. + +------------------------------------------------------------------- +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 + +DETH Nomenclature: + +W1[m] Crusher S [Silent] +WR[m] N +S1[m] F +SR[m] T +G1[m] +GR[m] +D1[m] +DR[m] + +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 + + +====================================================================== + Part II Sector Types +====================================================================== + +BOOM is backward compatible with DOOM's sector types. All types 0-17 +have the same meaning they did under DOOM. Types 18-31 are reserved +for extended sector types, that work like DOOM's and share the +limitation that only one type can be active in a sector at once. No +extended sector types are implemented at this time. + +#################################### +Section 14. Regular Sector types +#################################### + +From Matt Fell's Unofficial DOOM Spec the DOOM sector types are: + +Dec Hex Class Description +------------------------------------------------------------------- + 0 00 - Normal, no special characteristic. + 1 01 Light random off + 2 02 Light blink 0.5 second + 3 03 Light blink 1.0 second + 4 04 Both -10/20% health AND light blink 0.5 second + 5 05 Damage -5/10% health + 7 07 Damage -2/5% health + 8 08 Light oscillates + 9 09 Secret a player must stand in this sector to get credit for + finding this secret. This is for the SECRETS ratio + on inter-level screens. +10 0a Door 30 seconds after level start, ceiling closes like a door. +11 0b End -10/20% health. If a player's health is lowered to less + than 11% while standing here, then the level ends! Play + proceeds to the next level. If it is a final level + (levels 8 in DOOM 1, level 30 in DOOM 2), the game ends! +12 0c Light blink 0.5 second, synchronized +13 0d Light blink 1.0 second, synchronized +14 0e Door 300 seconds after level start, ceiling opens like a door. +16 10 Damage -10/20% health + +17 11 Light flickers on and off randomly + +Note that BOOM will NEVER exit the game on an illegal sector type, as +was the case with DOOM. The sector type will merely be ignored. + +#################################### +Section 15. Generalized sector types +#################################### + +BOOM also provides generalized sector types, based on bit fields, +that allow several sector type properties to be independently +specified for a sector. Texture change linedefs can be used to switch +some or all of these properties dynamically, outside lighting. + +Bits 0 thru 4 specify the lighting type in the sector, the same codes +that DOOM used are employed: + +Dec Bits 4-0 Description +------------------------------------------------------------------- +0 00000 Normal lighting +1 00001 random off +2 00010 blink 0.5 second +3 00011 blink 1.0 second +4 00100 -10/20% health AND light blink 0.5 second +8 01000 oscillates +12 01100 blink 0.5 second, synchronized +13 01101 blink 1.0 second, synchronized +17 10001 flickers on and off randomly + +Bits 5 and 6 set the damage type of the sector, with the usual +5/10/20 damage units per second. + +Dec Bits 6-5 Description +------------------------------------------------------------------- +0 00 No damage +32 01 5 units damage per sec (halve damage in TYTD skill) +64 10 10 units damage per sec +96 11 20 units damage per sec + +Bit 7 makes the sector count towards the secrets total at game end + +Dec Bit 7 Description +------------------------------------------------------------------- +0 0 Sector is not secret +128 1 Sector is secret + +Bit 8 enables the ice/mud effect controlled by linedef 223 + +Dec Bit 8 Description +------------------------------------------------------------------- +0 0 Sector friction disabled +256 1 Sector friction enabled + +Bit 9 enables the wind effects controlled by linedefs 224-226 + +Dec Bit 9 Description +------------------------------------------------------------------- +0 0 Sector wind disabled +512 1 Sector wind enabled + +Bits 10 and 11 are not implemented yet, but are reserved for use in +sound control. Bit 10 will suppress all sounds within the sector, +while bit 11 will disable any sounds due to floor or ceiling motion +by the sector. + +====================================================================== + Part III Linedef Flags +====================================================================== + +Only one new linedef flag is implemented, called PassThru, which +allows a push or switch linedef trigger to pass the push action thru +it to ones within range behind it. In this way BOOM is capable of +setting off many actions with a single push. Note that the limitation +of one floor action, one ceiling action, and one lighting action per +sector affect still applies however. + +The new linedef flag is bit 9, value 512, in the linedef flags word. + +====================================================================== + Part IV Thing Flags +====================================================================== + +BOOM has implemented two new thing flags, "not in DM" and "not in +COOP", which in combination with the existing "not in Single" flag, +usually called "Multiplayer", allow complete control over a level's +inventory and monsters, in any game mode. + +If you want a thing to be only available in Single play, you set both +the "not in DM" and "not in COOP" flags. Other combinations are +similar. + +"not in DM" is bit 5, value 32, in the thing flags word. +"not in COOP" is bit 6, value 64, in the thing flags word. + +====================================================================== + Part V Thing Types +====================================================================== + +BOOM has implemented two new thing types as well, MT_PUSH (5001), and +MT_PULL(5002). These control the origin of the point source wind +effect controlled by linedef types 225 and 226, and set whether the +wind blows towards or away from the origin depending on which is +used. + +====================================================================== + Part VI BOOM Predefined Lumps +====================================================================== + +BOOM supports resources embedded in the .EXE that are loaded before +all other resources. They can be replaced by resources of the same +name in the IWAD or add-on PWADs. These resources can be extracted +into a wad thru use of the command: + +BOOM -dumplumps predef.wad + +You can then extract the resources from predef.wad to alter them for +replacement purposes. + +Menu text +--------- +M_HORSEN Mouse horizontal sensitivity menu +M_VERSEN Mouse vertical sensitivity menu +M_SETUP Setup menu entry in main menu +M_KEYBND Key Bindings entry in setup menu +M_AUTO Automap entry in setup menu +M_CHAT Chat string entry in setup menu +M_ENEM Enemies options entry in setup menu +M_STAT Status bar and Hud entry in setup menu +M_WEAP Weapons entry in setup menu +M_MESS Message option entry in setup menu +M_COLORS Palette color picker diagram +M_PALNO Xed-out symbol for unused automap features +M_BUTT1 Setup reset button off state +M_BUTT2 Setup reset button on state + +Font chars +---------- +STCFN096 ` character for standard DOOM font + +STBR123 HUD font bargraph char, full, 4 vertical bars +STBR124 HUD font bargraph char, partial, 3 vertical bars +STBR125 HUD font bargraph char, partial, 2 vertical bars +STBR126 HUD font bargraph char, partial, 1 vertical bars +STBR127 HUD font bargraph char, empty, 0 vertical bars + +DIG0 HUD font 0 char +DIG1 HUD font 1 char +DIG2 HUD font 2 char +DIG3 HUD font 3 char +DIG4 HUD font 4 char +DIG5 HUD font 5 char +DIG6 HUD font 6 char +DIG7 HUD font 7 char +DIG8 HUD font 8 char +DIG9 HUD font 9 char +DIGA HUD font A char +DIGB HUD font B char +DIGC HUD font C char +DIGD HUD font D char +DIGE HUD font E char +DIGF HUD font F char +DIGG HUD font G char +DIGH HUD font H char +DIGI HUD font I char +DIGJ HUD font J char +DIGK HUD font K char +DIGL HUD font L char +DIGM HUD font M char +DIGN HUD font N char +DIGO HUD font O char +DIGP HUD font P char +DIGQ HUD font Q char +DIGR HUD font R char +DIGS HUD font S char +DIGT HUD font T char +DIGU HUD font U char +DIGV HUD font V char +DIGW HUD font W char +DIGX HUD font X char +DIGY HUD font Y char +DIGZ HUD font Z char +DIG45 HUD font - char +DIG47 HUD font / char +DIG58 HUD font : char +DIG91 HUD font [ char +DIG93 HUD font ] char + +Status bar +---------- +STKEYS6 Both blue keys graphic +STKEYS7 Both yellow keys graphic +STKEYS8 Both red keys graphic + +Box chars +--------- +BOXUL Upper left corner of box +BOXUC Center of upper border of box +BOXUR Upper right corner of box +BOXCL Center of left border of box +BOXCC Center of box +BOXCR Center of right border of box +BOXLL Lower left corner of box +BOXLC Center of lower border of box +BOXLR Lower right corner of box + +Lumps missing in v1.1 +--------------------- +STTMINUS minus sign for neg frags in status bar +WIMINUS minus sign for neg frags on end screen +M_NMARE nightmare skill menu string +STBAR status bar background +DSGETPOW sound for obtaining power-up + +Text end screen +--------------- +ENDBOOM Text displayed at end of game, 80X25 with attributes + +Sprites +------- +TNT1A0 Invisible sprite for push/pull controller things + +Switches and Animations +----------------------- +SWITCHES Definition of switch textures recognized +ANIMATED Definition of animated textures and flats recognized + +SWITCHES format: + +The SWITCHES lump makes the names of the switch textures used in the +game known to the engine. It consists of a list of records each 20 +bytes long, terminated by an entry (not used) whose last 2 bytes are 0. + +9 bytes Null terminated string naming "off" state texture for switch +9 bytes Null terminated string naming "off" state texture for switch +2 bytes Short integer for the IWADs switch will work in + 1=shareware + 2=registered/retail DOOM or shareware + 3=DOOM II, registered/retail DOOM, or shareware + 0=terminates list of known switches + +ANIMATED format: + +The ANIMATED lump makes the names of the animated flats and textures +known to the engine. It consists of a list of records, each 23 bytes +long, terminated by a record (not used) whose first byte is -1 (255). + +1 byte -1 to terminate list, 0 if a flat, 1 if a texture +9 bytes Null terminated string naming last texture/flat in animation +9 bytes Null terminated string naming first texture/flat in animation +4 bytes Animation speed, number of frames between animation changes + +The utility package contains a program, SWANTBLS.EXE that will +generate both the SWITCHES and ANIMATED lumps from a text file. An +example is provided, DEFSWANI.DAT that generates the standard set of +switches and animations for DOOM. + +Colormaps +--------- +WATERMAP Custom greenish colormap for underwater use + +The WATERMAP lump has the same format as COLORMAP, 34 tables of 256 +bytes each, see the UDS for details. Note that colormaps you add to +a PWAD must be between C_START and C_END markers. + +The utility package contains a program, CMAPTOOL.EXE, that will +generate custom colormaps for use with BOOM. It also includes 7 +premade colormaps, and an add-on wad containing them. + + +Color translation tables +------------------------ +CRBRICK Translates red range to brick red +CRTAN Translates red range to tan +CRGRAY Translates red range to gray +CRGREEN Translates red range to green +CRBROWN Translates red range to brown +CRGOLD Translates red range to dark yellow +CRRED Translates red range to red range (no change) +CRBLUE Translates red range to light blue +CRBLUE2 Translates red range to dark blue (status bar numerals) +CRORANGE Translates red range to orange +CRYELLOW Translates red range to light yellow + +These tables are used to translate the red font characters to other +colors. They are made replaceable in order to support custom palettes +in TC's better. Note however that the font character graphics must +be defined using the palette indices for the standard red range of the +palette 176-191. + +-END OF DOCUMENT---------------------------------------------------------- diff --git a/docs/dckboom.txt b/docs/dckboom.txt new file mode 100644 index 00000000..ccdcc6e3 --- /dev/null +++ b/docs/dckboom.txt @@ -0,0 +1,43 @@ +Enhanced Boom support for DCK + +These copies of doom17.dat and doom19.dat replace the ones which come with +DCK2.2-f and DCK3.*, respectively, and they add most of the linedef, thing, +and sector types new to Boom, except for the "generalized" linedef types +(ones whose function is based on various bitfields in the linedef's type). + +DCK2.2-f and later versions have bugs which made it difficult to add support +for Boom's new linedef types: + +1) Both DCK2.2-f and DCK3.62 have a limit on the number of linedef types they +can handle at a time, which makes Boom have too many linedef types. Some of +the entries in doom17.dat and doom19.dat are thus commented out -- they were +chosen based on their expected usefulness. When there are too many linedef +types, DCK2.2-f says so, but DCK3.62 prints a cryptic exception traceback. + +2) All versions of DCK starting with 3.0, but not DCK2.2-f, have a bug where +the largest linedef type that DCK can process correctly is 255. Somewhere in +DCK3.0 and later, the linedef type is being truncated to a single byte and +thus it becomes reduced MOD 256 (256=0, 257=1, etc.). If you edit wads with +DCK3.0 or later, linedef types >= 256 will be ruined if the wad is saved. The +only workaround is to use DCK2.2-f, or to only use linedef types < 256. Boom +has tried to keep as many useful linedef types under 256 as possible, the +most notable exception being 260 (translucency). + +To make use of the new linedef, thing, and sector types available in Boom, +copy either doom17.dat or doom19.dat into your DCK directory, overwriting +the original (DCK2.2-f uses doom17.dat; later versions use doom19.dat). + +WATERMAP.WAD is included to allow you to enter WATERMAP as a texture name +for underwater colormap effects. Add WATERMAP.WAD to DCK's list of texture +resources, and WATERMAP will be allowed to be entered as a texture name. +Other colormap names, as well as translucency filter names (see boomref.txt), +may need to be added to a wad as fake texture names, if DCK is to allow you +to enter them in sidedefs. + +If you are unfamiliar with DCK2.2-f, it's the last freeware version of DCK, +and it is preferred over later versions by many wad authors including myself. +There is a copy of DCK2.2-f on my web page. + +Lee Killough +http://classicgaming.com/doom/ +http://www.teamtnt.com diff --git a/docs/mbf.txt b/docs/mbf.txt new file mode 100644 index 00000000..a291b615 --- /dev/null +++ b/docs/mbf.txt @@ -0,0 +1,366 @@ +Marine's Best Friend + +------------------------------------------------------------------------------- + +Programmer: Lee Killough + +Artist: Len Pitre + +PlayTesters: Ky (Rez) Moffet, Len Pitre, James (Quasar) Haley + +Canine Consulting: Longplain Kennels, Reg'd + +Sound Code: Shawn Hargreaves & Allegro Team + +Additional Credit: id Software, TeamTNT + +Special Thanks To: John Romero, Joel Murdoch + +------------------------------------------------------------------------------- + +Marine's Best Friend is a modification of the Doom source. + +Features + +* Friendly Monster AI + + Friends attack enemies like players + + Friendliness is a mobj property, like NOGRAVITY or SOLID + + Friendly single-player helpers (dogs) can fill in coop starts + + Friendliness is transferred by Arch-Vile, Pain Elemental, and Boss Spawner + + Player autoaiming avoids friends if enemies are in range + + Friends with missiles return one shot if shot by friends + + Friends stay a "comfortable distance" away from players + + Friends indicated by different color in automap + +* AI Improvements + + Avoid hazards (e.g. crushing ceilings) + + Stop what they're doing and rescue dying friends + + Follow enemies up lifts, instead of wandering off randomly + + Back away from nearby enemies if advantageous + + Avoid shooting friends who get in their way + + Infighting when provoked by own kind (i.e. Doom's behavior) made optional + + (Development) Code and data restructured to allow more efficient AI + +* Doom Pre-Beta ("Press Release") Version Emulation + + Classic BFG, Plasma Rifle, Chaingun, Rocket Launcher + + Classic BFG allowed in regular (non-emulation) mode + + Original Flaming Skulls + + The 3 demo levels, "remastered" + + Nightvision goggles, skullchests, demonic daggers, unholy bibles, etc. + + Other Press Release version behaviors (e.g. invisibility, invulnerability) + +* Improved Video Options + + + 640x400 high-detail mode, without bad side effects: + - Doom world scenes and automap are rendered in 640x400 for higher detail + - Doom's aspect ratio is preserved exactly (no elongated textures/sprites) + - Status bar, menus, text, intermission screens all remain full-sized + - Optional hardware page-flipping + + + Wait-free page-flipped 320x200 ModeX for smoother play on slow machines + + + Doom flashing disk icon reimplemented (was removed in linux port) + + + Video options can be changed in realtime in General menu + - Hires + - Page-flipping + - Wait for vertical retrace + - Translucency enable + - Translucency percentage + - PCX vs. BMP screenshots + - Doom flashing disk icon + - HOM cheat code optionally flashing or solid red + +* DEH/BEX files embedded inside of wads (DEHACKED lump) + +* OPTIONS lump for overriding config settings inside wads + + Allows wad authors to set game options inside wads + + Options are still editable by player, and are remembered on a per-wad basis + + Doesn't interfere with the player's own defaults when not playing the wad + +* Menu option to load up to two WAD and two DEH/BEX files at program startup + + -noload command-line override switch + +* Improved Menus + + + Informative warnings printed on menu screens when: + - changed option doesn't take effect until next new game or idclev + - changed option doesn't take effect until entire program is restarted + - option's current setting (e.g. loadgame) differs from its default setting + + + New "General" option menu, allows changing of many settings inside game + - Video + - Sound & Music + - Input Devices + - .WAD and .DEH/.BEX Files Preloaded at Startup + - Miscellaneous + + + New "Doom Compatibility" setup menu allows fine-control of all Doom + compatibility settings, instead of having only one "compatibility" + variable. + + + Numeric input improved + - Negative values are allowed + - Setup does not change game variables until input is "committed" + - Illegal or aborted input leaves game variables unchanged + - Backspace allowed during input + + + SSG weapon preferences allowed to be edited while playing Ultimate Doom + + + New hotkey for entering Setup Menu in one stroke during game + + + (Development) Filenames allowed to be entered + + + (Development) Menu items can span multiple lines on the screen + + + (Development) Action functions can be called after items are edited, + such as to change video mode in real-time + +* Shotgun and Fist may be selected without toggling with the SSG/Chainsaw + +* .lmp extension optional with -file if .wad file doesn't also exist + +* Improved Automap + + Option to display pointer coordinates instead of player coordinates + + Automap setup menu rearranged for easier use + +* Improved Demos + + Pause allowed during demo playback + + Single-player games can be saved during demo playback, to take snapshots + + -recordfrom option added back, allowing demos to start from a saved game + + Demos don't desync just because menu is accessed during recording + + During demo playback, automap and menu are easier to use + + No switching out of automap when player dies during demo playback + + (Development) demo_version global variable to help preserve demo sync + +* Improved Movement Clipping + + Players can get out of 1s or 2s walls when they are otherwise stuck + + Monsters do not get stuck hanging partially off of tall ledges + + Monsters can move up and down stairs more easily (compatibility-optioned) + +* More Realism (compatibility-optioned) + + Non-sentient objects fall down under their own weight when their balance + is upset and they are more than halfway off of a ledge + + Objects falling off tall ledges follow parabolic trajectory + + Live monsters may be pushed off ledges, and intelligently try to recover + +* New Bouncy Things (mobj) Flag + + Missiles bounce off of floors and ceilings, such as classic BFG fireballs + + Floating "bouncy" monsters bounce up and down if under gravity + + Solid objects bounce off of walls and roll up and down stairs + + DEH frames support bouncing grenades/pipebombs + +* Touchy Things (mobj) Flag + + Mines which detonate when touched or disturbed + + Monsters which die when touched + +* Doom Bugs Fixed (compatibility-optioned, where appropriate) + + Fireballs (especially Mancubus) going through walls + + Monsters stuck at doortracks or hanging over tall ledges + + Slime trails reduced (caused by WAD coordinate system's limited precision) + + Zombie players exiting levels, forever remaining zombies + + Sky is unaffected by invulnerability colormap + + On MAP30, any monster can telefrag anyone else + + Boss spawners can't telefrag on any levels except MAP30 + + Soundtargets not remembered across savegames + + Flickering light not remembered across savegames + + Fractional floor & ceiling heights and xy offsets not saved in savegames + + Revenant Tracers' tracking state not preserved across savegames + + Raise to shortest texture considers "-" == "AASHITTY" + + SSG shows reload frame while firing frame is still displayed + + SSG neck is not lit up correctly when SSG is fired in a dark room + + Demo desync if menu is accessed in the middle of recording a demo + + Illegal menu activities during demos (e.g. loadgame during recording) + + Arch-Vile hellfire spawned in wrong position + + Voodoo dolls push up against wall as long as the real player is moving + + Deleted thinkers referenced by monster targets/tracers, or soundtargets + + Top of pistol appears at the bottom of screen when game starts + + Monsters sometimes fire missiles back at wrong player when hit painfully + + Extra-hard player death sound not working in Registered / Ultimate Doom + +* Boom Bugs Fixed (Note: these are not TeamTNT fixes) + + + Doom incompatibilities fixed, with new option switches + - Stairbuilding + - Cheat code infinite duration + - God mode cheat is absolute + - Linedef effects with tag 0, e.g. all-lights-off effects + + + Bobbing / friction + - Bobbing based only on player-applied thrust, instead of total speed + - Friction algorithm made more efficient, and made sector-based + - Fixed bug which stopped all momentum when up against wall + - Friction (and wall-bouncing on ice) work on all objects, not just players + - Bobbing does not jerk when player moves in and out of icy sectors (v2.02) + - Sludge slowdown fixed + - Wall-running restored to Doom efficiency + + + Wind affects all sentient / shootable objects + + + Player corpse queue =traversal order= (caused weapon pickup problems in DM) + + + Fix opening limit removal + + + Response files + - Optional .rsp extension + - Correct error-handling (page faulted before) + + + Fix underwater slowdown + + + Fix sudden light changes over water sectors + + + Fix things disappearing over water sectors + + + Fix underwater sprite lighting (Two bugs: One in v2.01, another in v2.02) + + + Menu reset-to-defaults code made more robust, to prevent "false resets" + + + Monsters-stuck-on-doortracks have less turning (v2.02 bug) + + + Fixed message review w/ background messing up in smaller screen size + + + Aliasing of wall scrolling speeds > a certain speed, due to silent overflow + + + Fix new map thing flags' causing incompatibility with certain Doom wads + + + Fix filehandle leak in translucency code + + + Default skill level not remembered correctly across multiple games + + + Netgame inconsistencies if options are chosen differently (v2.02) + + + Referencing freed data pointed to by monsters' lastenemy field + + + Tagged DR doors' lighting effects made gradual, instead of totally on/off + + + Menu confirmation messages (yes/no) no longer limited to 40 characters + (Garbage at end of QuickLoad message fixed) + + + Sounds heard randomly in wrong locations (e.g. weapons fire, player death) + + + HUD counter update problem + + + Coop mode slowdown, a.k.a. Monster Medusa + + + Inconsistent use of stdout/stderr in output messages + + + SegViol if key_enter held down during program startup (message review) + + + Verbose "missing patch" error messages not printed unless -devparm used + + + Setup menu backspace + + + Indigo/Brown default chat keys reversed + + + Final Doom support + + + DEH + - Writing to dehout.txt replaced with -dehout option + - Fixed thing flag mnemonics bugs (TRANSLATION1/2, error detection) + - Hex allowed in numeric input (e.g. 0x1234abcd) + - Blank separation-line handling fixed + - Fixed memory leak + - Several SegViols fixed + - -bex may be used as a synonym of -deh + + + Screenshot, .cfg file, and savegame error-handling improved + - User-friendly messages printed when error occurs (e.g. "Disk Full") + - Original .cfg file left intact if new one cannot be written safely + + + Music + - Random noise heard in music (e.g. MM2 MAP23) + - MUS2MID programming errors (array size too small & undefined C behavior) + - Overall music quality improved + +* WAD error autocorrection, to prevent game crashes + + Clear 2s flag in one-sided linedefs + + Fill in missing right sidedefs with dummy sidedef + +* Improved Messages + + Message review list may scroll up or down + + Message review list may be temporary or permanent when activated + + Message review list and normal Doom messages toggled more intuitively + + Message timers are configurable (normal, review, chat) + +* Blockmap + + Blockmap generation algorithm rewritten (Note: this is not TeamTNT's) + + Improved dynamic blockmap list maintenance (more robust and faster) + +* Multiple -file and -deh options may be used on command-line / response file + +* User-comments allowed to be embedded inside of .cfg files, and are preserved + +* Performance Tuning + + Assembly blit routines tuned for machines above and below P6-class + + Monster target searches made faster by way of a multithreaded target list + + Fixed-point arithmetic made faster + + Sprite edge sorting made faster + + Tuned register allocation and other compiler optimization flags + + Sound FX code rewritten to be more efficient (in both memory and speed) + + Gameplay more responsive + +* Mobj pointer reference-counting added, to fix bugs and make game faster + +* New code pointers + + Variable-damage explosion + + Mushroom cloud explosion + + Linedef activation via code pointers + + Object spawning code pointer + +* New sky property-transfer linedef types (271-272) + + Arbitrary opaque wall textures can be transferred to skies + + Unlimited number of sky textures per level + + No external info lumps necessary, no "per-level" programming required + + Textures optionally flipped horizontally (as in Doom) + + Long-period rotating skies (e.g. moon's orbit, starfield) + + Animated skies + +* Removed all references to TeamTNT/Boom (except in source comments and docs) + + + TNT cheat code prefixes removed + - TNTEM replaced with KILLEM + - TNTKA replaced with IDK, without introducing .deh incompatibilities + + + "Boom" filename strings replaced (boomsav[0-7].dsg, boom.cfg, etc.) + + + ENDBOOM lump replaced with ENDOOM, restoring Doom behavior on end screens + +------------------------------------------------------------------------------- + +MBF Files + + File Description + + mbf.exe MBF executable +betagrph.wad Graphics for beta emulation +betalevl.wad The 3 Demo levels for beta emulation + mbfedit.txt Describes the WAD/DEH editing features new to MBF + options.txt Describes the command-line/setup menu options new to MBF + mbffaq.txt FAQ about MBF + mbf.txt This file + asetup.exe Allegro setup program + snddrvr.txt Notes concerning sound drivers (from Boom distribution) + doom17.dat DCK2.2-f configuration file for editing MBF wads + common.cfg DETH configuration file for editing MBF wads + cwsdpmi.exe CWS DPMI host +examples.zip Small demonstrations of MBF features + copying.dj DJ Delorie Copyleft stuff + copying GPL license stuff + +------------------------------------------------------------------------------- + +DISCLAIMERS + +MBF is unsupported software. There are no warranties as to its fitness for any +particular purpose. There are also no plans for future updates. + +MBF is a single-player game. Multiplayer games may or may not work (some people +say they do work). Support files for multiplayer games (e.g. sersetup.exe) are +not included, but might be available elsewhere. + +MBF is based on the Boom v2.02 source, but it is not supported by TeamTNT or +id Software. Don't ask them about MBF. + +------------------------------------------------------------------------------- +Lee Killough Last Updated 12/22/1998 + diff --git a/docs/mbfedit.txt b/docs/mbfedit.txt new file mode 100644 index 00000000..11cfd58e --- /dev/null +++ b/docs/mbfedit.txt @@ -0,0 +1,334 @@ +Marine's Best Friend Editing Features + +Contents + +1. New Linedef Types +2. New Thing Types / Flags +3. New Mobj Flags +4. DEH/BEX Mnemonic Names +5. DEH/BEX Code Pointers +6. DEHACKED lump +7. OPTIONS lump + +------------------------------------------------------------------------------- + +1. New Linedef Types + +271: Transfer first sidedef's upper texture to tagged sectors' skies +272: Same as 271, only flipped horizontally + +These linedefs transfer wall textures to skies. F_SKY1 must still be used as +the floor or ceiling texture in the sectors for which sky is desired, but the +presence of a 271 or 272 property-transfer linedef can change the sky texture +to something other than a level-based default. + +Every sector with F_SKY1 floor or ceiling which shares the same sector tag +as the 271 or 272 linedef will use a sky texture based on the upper texture +of the first sidedef in the 271 or 272 linedef. Sectors with F_SKY1 floors or +ceilings which are not tagged with 271 or 272 linedefs, behave just like Doom. + +Horizontal offsets or scrolling in the transferred texture, is converted into +rotation of the sky texture. Vertical offsets or scrolling is transferred as +well, allowing for precise adjustments of sky position. Unpegging in the sky +transfer linedef does not affect the sky texture. + +Horizontal scrolling of the transferred upper wall texture is converted into +rotation of the sky texture, but it occurs at a very slow speed relative to +the moving texture, allowing for long-period rotations (such as one complete +revolution per Doom real-time hour). + +Effects other than sky-transfer effects are not excluded from the affected +sector(s), and tags can be shared so long as the effects are unambiguous. +For example, a wall-scrolling linedef can share a sector tag with both its +affectee linedef (the one being scrolled), and with the sector that the +latter controls. There is no ambiguity because one effect (scrolling) applies +to a linedef, while the other effect (sky transfer) applies to a sector. + +If a sector underneath a special sky needs to be set up to have a different +purpose (for example, if it is a lift or a stairbuilder), then two tags will +need to be created, and the transfer linedef and any scrolling linedefs will +need to be duplicated as well, so that the same effect as far as the sky goes, +is duplicated in two separate sector tags. This will not affect sky appearance, +but it will allow a special sector which needs a unique tag, to sit under such +a sky. + +Animated textures may be transferred to skies as well. + +In Doom, skies were flipped horizontally. To maintain compatibility with this +practice, the 272 linedef flips the wall image horizontally. The 271 linedef +does not flip the wall image, and it is intended to make it easier to take +existing non-flipped wall textures and transfer them to skies. + +Sky textures which are different must be separated by non-sky textures, or +else the results are undefined. + +sky.wad is an illustration of the sky effect. + +------------------------------------------------------------------------------- + +2. New Thing Types / Flags + +There are a couple of new Thing types / flags: + A. Friendly monster flag + B. Reserved flag + C. Dogs + +2A. Friendly monster flag + +At level startup, every object in a level's map is spawned with the FRIEND +mobj flag set if bit 7 (mask 128) is set in the Thing's flag bits. This +allows two of the same species in a map to be marked as being of a different +persuasion. However, for various design reasons, if a thing is marked as being +friendly in its mobj definition, then it will always be friendly when spawned +as a map object, regardless of the Thing's flags. + +So far, editor support for this feature is weak, but if a value >= 128 can +be entered for a Thing's flags, then generally speaking, you only need to add +128 to the value to turn it into a friendly thing. Real players are always +considered friendly, regardless of their Thing flags. + +2B. Reserved bit + +The thing flag bit which is 8 positions left of the least significant bit, and +which has a bitmask value of 256, is reserved to be 0. If this bit is not 0, +then MBF will clear all bits which were unused by Doom, which effectively ANDs +the flags with the value 31. This is to accomodate Doom wads edited by such +editors as HellMaker, which put 1's inside bits that were unused in Doom. + +It is designed so that any thing flag bits added since Doom, should be cleared +in order to get Doom behavior. With over 90% of Doom editors out there, unused +(or simply unrecognized) thing flag bits are, by default, set to 0. But in +HellMaker and maybe a few other editors, 1's are used, and with wads developed +under these editors, we assume that the wad is strictly a Doom wad, and hence +none of the flags added to the engine, post-Doom, should be set to '1'. + +2C. Dogs + +Dogs, which are mobj #140, have Doomednum 888 (i.e. Thing Type #888). They +are not spawned as friendly dogs, unless explicitly marked as friendly by the +friendly thing flag, or unless the entire species (140) is marked friendly. +But this doesn't affect the normal spawning of dogs as friendly coop player +replacements -- players or their bot replacements are always friends. + +Dogs have these lumps embedded inside the .exe, which can be modified by wads: + +DOGS* sprites with frames A-I (0-8). + +SFX # Lump Description +-------------------------------- + 109 DSDGSIT Waking up bark + 110 DSDGATK Attacking bark + 111 DSDGACT Roaming bark + 112 DSDGDTH Death sound + 113 DSDGPAIN Pain sound + +------------------------------------------------------------------------------- + +3. New Mobj Flags + +There are three new Map Object (mobj) flags in MBF: + A. FRIEND (0x40000000) + B. BOUNCES (0x20000000) + C. TOUCHY (0x10000000) + +3A. FRIEND (0x40000000) Mobj Flag + +When the FRIEND mobj flag is set, a monster becomes the friend of the +player(s), and tries to help them. + +Friendliness is a Map Object flag, not merely a Thing flag, because a monster's +friendliness can change during the game. For example, Arch-Viles transfer their +good or evil intentions towards the player, to the victims they resurrect. A +friendly Arch-Vile turns corpses into new friends, no matter what their motives +were when they died, and an unfriendly Arch-Vile turns them into player +enemies. Boss Spawners spawn monsters with the same friendliness as themselves. +Pain Elementals spawn Lost Souls with the same motives. + +Friendly monsters with long-range missile capability (missilestates) fire back +only one shot each time they receive a painful hit from a friend such as the +player (monsters with automatic weapons fire back a short burst). Friendly +monsters without long-range missile capability do not retaliate when hit by +friendly fire. + +Friendly monsters return to a player if they cannot find any enemy targets, or +if they lack long-range firing capability and they cannot seem to attack any +opponent for a significant period of time. + +Player autoaiming does not fire at friends if there are any enemies within +autoaiming range. This avoids accidental shooting of friends by the player, +but does not rule out shooting friends if they are the only ones in sight +or they are the obvious target. + +3B. BOUNCES (0x20000000) Mobj Flag + +The BOUNCES mobj flag tells MBF that an object is "bouncy". What this means +exactly, depends on the rest of the flags: + +BOUNCES + MISSILE: + +With BOUNCES + MISSILE, the object behaves like a beta BFG fireball, exploding +on contact with walls and with non-inert objects, but bouncing off of floors +and ceilings. See the "Classic BFG" for an example of this flags combination. + +BOUNCES + NOGRAVITY: + +Unless it's a MISSILE too, the object generally bounces off of all surfaces +without loss of momentum. + +BOUNCES + FLOAT: + +Without NOGRAVITY, BOUNCES + FLOAT gives the ability for a monster to jump +when it needs to reach a high target, but to otherwise stay pretty low. See +dogfly.deh for an example of this flags combination. + +For non-sentient objects, BOUNCES + FLOAT simply creates a higher bounce back. + +BOUNCES + FLOAT + DROPOFF bounces back even higher than BOUNCES + FLOAT. + +BOUNCES: + +When BOUNCES isn't combined with MISSILE, it causes the object to simply bounce +off of floors and walls. If the object is under gravity (the NOGRAVITY flag is +not set), then its momentum is cut in half at each collision, in the component +of momentum which is perpendicular to the contacted surface. The object also +rolls up and down stairs, if under gravity. This flags combination is +illustrated in grenade.deh. + +3C. TOUCHY (0x10000000) Mobj Flag + +TOUCHY indicates that an object dies (or explodes) upon contact with a solid +object of a different species. It is used mainly to create mines which detonate +on contact (see mine.deh for an example). Other normal causes of death are not +ruled out, however, by the TOUCHY flag. + +Pain Elementals and Lost Souls are considered part of the same species for the +purposes of dying by touch (but Barons and Hell Knights are not), because if +this weren't true, PEs and LSes would die almost immediately. (Also, a touchy +PE guarded by a flock of LSes has a nice ring to it :) + +Different players are considered different species, so DM by touch is possible, +and suicide by touch is possible with voodoo dolls. + +------------------------------------------------------------------------------- + +4. DEH/BEX Mnemonic Names + +FRIEND, BOUNCES, and TOUCHY are allowed as DEH/BEX mnemonics for flags. In MBF, +the mnemonics may be arbitrarily separated by + (plus) | (vertical bar) or , +(comma), as well as optional whitespace. Values are ORed, which means listing +a flag multiple times is the same as listing it once. + +TRANSLATION1 and TRANSLATION2 are also allowed as DEH/BEX mnemonics, and are +suggested replacements for the Boom TRANSLATION mnemonic. TRANSLATION1 selects +the least significant bit of the color translation, while TRANSLATION2 selects +the most significant bit. MBF is bug-compatibile with Boom's TRANSLATION +mnemonic, interpreting TRANSLATION to mean the same as TRANSLATION1. + +------------------------------------------------------------------------------- + +5. DEH/BEX Code Pointers + +Several new code pointers have been added: + +A_Detonate is similar to A_Explode in that it generate a radius of explosion +damage. However, instead of a fixed radius of 128, the radius is set by +changing the "missile damage" of the object being exploded. This allows +explosion damage to be varied easily. + +A_Mushroom creates a mushroom-like explosion, throwing fireballs up in all +directions. There is primary damage from the explosion itself, and then +secondary damage from contact with the fireballs. The missile damage of the +spawning object controls how many fireballs are created. Optionally, the +misc1 ("Unknown 1") and misc2 ("Unknown 2") fields may be used to control +the angle and speed of the fireballs. These fields are fixed-point (16.16), +instead of whole numbers. + +A_Spawn spawns an object in the same position as the spawner. The misc1 and +misc2 fields of the code pointer's frame (indicated by "Unknown 1" and +"Unknown 2" in DeHackEd), determine the type and z-position of the spawned +object, respectively. Note that if the spawner and spawnee are both solid, +they might stick together. + +A_Turn rotates the object's angle by the number of degrees indicated by the +misc1 ("Unknown 1") field. + +A_Face sets the object's angle to number of degrees in the misc1 ("Unknown 1") +field. + +A_Scratch performs a melee (close-range) attack on the object's current target. +misc1 ("Unknown 1") indicates damage, while misc2 ("Unknown 2") indicates the +sound effect to use. + +A_PlaySound plays a sound effect. misc1 ("Unknown 1") is the sound effect +number, and misc2 ("Unknown 2"), if nonzero, makes the sound full-volume +(like boss wakeup sounds). + +A_RandomJump jumps randomly to the state in misc1 ("Unknown 1") with a +probability indicated by the misc2 ("Unknown 2") field (0-255). If the +jump doesn't occur, then it falls through to the next state. Note that +the frame's "tics" field must not be -1, for this to work correctly. + +A_LineEffect allows activation of remote linedef effects by objects. misc1 +("Unknown 1") indicates the linedef type, while misc2 ("Unknown 2") indicates +the sector tag. The tagged sector(s) are activated as though a player has +activated a linedef of the indicated type and tag. If the linedef is a S1 or +W1 type, then the effect blocks out all further A_LineEffect effects for the +object, no matter whether they are S1/W1 or SR/WR types. + +A_Die causes an object to kill itself (i.e. commit suicide). It is primarily +used to make countdown timers in grenades. + +------------------------------------------------------------------------------- + +6. DEHACKED lump + +The DEHACKED lump allows .deh/.bex files to be embedded inside of wads. If +there are multiple wads with DEHACKED lumps, or even multiple DEHACKED lumps +inside the same wad, then the last wad or lump which is read, has priority +where there is a conflict. However, the presence of a DEHACKED lump doesn't +completely invalidate previous DEHACKED lumps -- the effects are cumulative, +although later deh files can undo the effects of earlier ones. + +The order in which .deh/.bex files are read and interpreted is: + +1. .deh/.bex files listed on the command-line +2. .wad files listed on the command-line with DEHACKED lumps +3. Preincluded .wad files with DEHACKED lumps +4. Preincluded .deh/.bex files (in General menu) + +DEHACKED lumps should consist of ordinary .deh/.bex file text. + +Include directives are not allowed inside DEHACKED lumps, since the whole +purpose of DEHACKED lumps is to be entirely self-contained within a wad. + +------------------------------------------------------------------------------- + +7. OPTIONS lump + +The OPTIONS lump allows wads to set game options, such as Doom Compatibility +options, chat strings, and enemies options. + +The OPTIONS lump has the same format as mbf.cfg: A text file listing option +names and values, optionally separated by blank or comment lines. mbf.cfg +indicates options which are allowed to be set in wads, with asterisks (*). + +When OPTIONS are set from wads, they are skipped on the menu screens. + +Wad authors are urged to use these options responsibly, because they should +not be used to limit players, but to enhance the game. Many options such as +automap colors are allowed to be set from wads, but they should only be done +so if there are strong reasons to do so. + +Players who are offended by wads setting certain options for them, should ask +wad authors not to set them, or should consider playing other wads. As a last +resort, players can use Deutex/Wintex/NWT/etc. to remove or modify the OPTIONS +lump themselves. They can also create a dummy wad with its own OPTIONS lump, +which completely replaces any OPTIONS set in wads. An OPTIONS lump with nothing +but blanks or comments, can be used to effectively nullify earlier ones. + +Some options must be set in wads for compatibility reasons (otherwise the +wad may not work and the player might even get stuck in a level), while many +options are not necessary for compatibility. + +------------------------------------------------------------------------------- +Lee Killough Last Updated 12/21/1998 diff --git a/docs/mbffaq.txt b/docs/mbffaq.txt new file mode 100644 index 00000000..49d28ab6 --- /dev/null +++ b/docs/mbffaq.txt @@ -0,0 +1,148 @@ +Marine's Best Friend +Frequently Asked Questions + +------------------------------------------------------------------------------- + +Q: Why don't the friendly dogs retaliate when I shoot them? + +A1. The dog is a close-attack monster (no missiles), and therefore to attack, + it would need to stop whatever it was doing and return to the player, and + it might not be able to reach the player before being attacked again by + another enemy, which is its prime concern. Even if it could reach the + player, it would only bite the player once, since friendly monsters don't + turn around and become enemies simply because they are hit once -- they + instead use tit-for-tat, returning friendly fire once, for each time they + are hit. + +A2. This is normal behavior for real dogs, according to one dog expert. + +------------------------------------------------------------------------------- + +Q: Why do dogs readily go up steep or narrow stairs, but then sometimes won't + come back down? + +A: According to a canine behavioural expert, this is consistent with the + typical behaviour of real dogs. + +------------------------------------------------------------------------------- + +Q: Why don't I see any new levels with -beta? + +A: You must add -file betalevl to your command-line, to load the levels. The + levels in betalevl.wad are E1M2, E2M5, and E3M2, exactly as in the Press + Release Version of Doom. If you only use -beta, you will be enabling the + beta's features, but without the levels. + +------------------------------------------------------------------------------- + +Q: I get errors when I try to load betalevl.wad + +A: betalevl.wad requires Registered Doom I (or Ultimate Doom) as the iwad. + However, the -beta command-line option, which enables the graphics and + game changes, does not require Doom I to be used, and it can emulate beta + features under Doom II. + +------------------------------------------------------------------------------- + +Q: When using -beta, why is there no teleporter fog? Or, why does player + invisibility look like invulnerability? Why are there no palette changes + when the radsuit is used, and why doesn't it wear off with time? + +A: These behaviors are all consistent with the Press Release version of Doom, + alternatively called the "beta". See: + + ftp://ftp.cdrom.com/pub/doom/historic/ + +------------------------------------------------------------------------------- + +Q: Why is -beta a command-line option, and why must demos recorded with -beta + be played back with -beta? + +A: The betagrph.wad file must be loaded, and several internal data structures + must be modified, prior to game startup. Allowing -beta to be turned on and + off during the game would introduce a lot of complications. + +------------------------------------------------------------------------------- + +Q: Why is there a separate option for the Classic BFG, but not for all of the + other -beta features? + +A1. Not enough popular demand, given the complexity. Making individual beta + features optionable would require storing each one's selection status in + demos, savegames, etc., and it would require work to add them to the menus. + Probably only the Classic BFG is in enough demand to make a separate option + for it. + +A2. The features such as the beta plasma rifle and the beta lost souls, or + the green nightvision goggles, require a lot of wad data to be loaded, + which -beta does by loading the betagrph.wad file. The Classic BFG only + requires two extra fireball sprites, which do not take a lot of memory, + and thus can be unconditionally tucked away inside the .exe. + +------------------------------------------------------------------------------- + +Q: But doesn't the plasma rifle simply need to shoot the alternating fireballs + instead of blue plasma, making it no more difficult than the BFG? + +A: Actually, no. The plasma rifle sprites in Doom have some blue plasma + superimposed around the mouth of the plasma rifle. To remove this blue + plasma, new weapon sprites are needed. New weapon sprites are NOT needed + for the BFG, however. + +------------------------------------------------------------------------------- + +Q: Why can't the Unholy Cathedral beta level (E2M5 in betalevl.wad) be + finished, and why are some areas inaccessible? + +A: This is consistent with the original Press Release version's levels. + Wad errors were intentionally not fixed. + +------------------------------------------------------------------------------- + +Q: But there are some slime trails and HOM in the original levels, which don't + show up in betalevl.wad!!! + +A: Blatant rendering errors like HOM and slime trails were fixed. Even if they + weren't fixed, the slime trails would be hard to reproduce exactly because + they are inherently nondeterministic. + + The criteria used when making changes were: + + Rendering errors (e.g. HOM, slime trails): Fixed. + + Aesthetic errors (e.g. wall texture choices, texture alignment): Not Fixed. + + Level design errors (e.g. inaccessible areas of map): Not Fixed. + +------------------------------------------------------------------------------- + +Q: Why does the beta chaingun lower when I fire it in fullscreen mode? + +A: This is to workaround a problem with the Press Release version's chaingun + sprites. The sprites were pre-clipped with respect to the status bar, and + the status bar was always turned on in the Press Release version. With + the status bar turned on, the -beta chaingun looks like the original. In + fullscreen mode, however, it must be lowered while it is being fired, or + else parts of the chaingun will not be updated, and it will look funny. + +------------------------------------------------------------------------------- + +Q: Why is the music quality so bad? + +A1: You might have a file named default.cfg in the same directory as MBF.EXE. + Allegro considers this a music configuration file. Refer to Allegro docs. + +A2: MBF music on AdLib cards is not the same as Doom, because the FM instrument + definitions are different. You may be able to import .IBK files into + Allegro to improve the music's quality. See the Allegro docs. Also see + snddrvr.txt for other alternatives. + +------------------------------------------------------------------------------- + +Q: Where do the dogs come from? I don't see any wads!!! + +A: Dog sprites & sounds, like many other things, are embedded inside the .exe. + However, you can modify them with wads. See mbfedit.txt for details. + +------------------------------------------------------------------------------- +Lee Killough Last Updated 12/22/98 diff --git a/docs/options.txt b/docs/options.txt new file mode 100644 index 00000000..1bfa9b6a --- /dev/null +++ b/docs/options.txt @@ -0,0 +1,388 @@ +Marine's Best Friend Options + +This file describes in detail many of MBF's new options. + +Refer to mbfedit.txt for the OPTIONS lump, which allows wads to set these +options. + +1. Command-line Options +2. General Options +3. Doom Compatibility Options +4. Enemies Options + +------------------------------------------------------------------------------- + +1. Command-line Options + +-noload supresses the loading of the .wad and .deh/.bex files listed on the +second page of the General menu. + +-beta enables emulation of the "Press Release" version of Doom, also called +the beta version. It automatically loads betagrph.wad, which must be in the +same directory as mbf.exe. You may additionally use -file betalevl.wad to see +the 3 Press Release levels: E1M2, E2M5, E3M2 (this option requires Doom 1). + +-dogs Temporarily overrides the number of single-player helper dogs. + +-recordfrom records a demo starting from a saved game. It is +the same as -loadgame -record . -loadgame -playdemo +plays back the demo starting from the saved game. + +------------------------------------------------------------------------------- + +2. General Options + +These options are listed in the Options / General setup screen. + +* Hires + + This option enables 640x400 resolution. Using it requires a VBE2.0 driver + that supports 640x400x8bpp, such as SciTech's (UNIVBE). + +* Page-flipping + + This option enables page-flipping (sometimes called double-buffering). + + In 320x200 mode, this option enables triple buffering, which is the + graphics mode that the original Doom under DOS used. + + In 640x400 mode, this option enables hardware page-flipping between two + halves of a 640x800 virtual screen, and may improve performance. + +* Wait For Vertical Retrace + + If set to YES, this tells MBF to wait before performing page flips or + blitting, to avoid breaks in the screen. + +* Enable Translucency + + If this option is YES, translucency is enabled. When set to NO, all + translucency is disabled. + +* Translucency Percentage + + Controls the default translucency filter's foreground/background percentage + (Does not affect in-wad translucency maps which use linedef 260 to apply + them.) Warning: changing the translucency percentage may take several + seconds or even a minute on slow machines. + +* PCX Instead of BMP for Screenshots + + When set to YES, screenshots generate .PCX files. When set to NO, screenshots + generate .BMP files. + +* Flash Disk Icon During Disk IO + + This enables the Doom disk icon in the lower-right corner of the screen, + which flashes during disk IO. + +* Flashing HOM Indicator + + When this option is set to YES, the HOM cheat causes HOM to show up in + flashing red. When this option is set to NO, HOM is displayed as solid red. + +* Sound Card +* Music Card + + Allegro numbers for the sound cards used for SFX and Music, respectively. + -1 means autodetect, 0 means disabled, >0 is card-specific. Read snddrvr.txt + or consult the Allegro documentation for more details. + +* Autodetect Number of Voices + + Whether the number of voices divided between SFX and music should be detected + by a special algorithm which consults the Allegro SFX and music driver code. + +* Number of Sound Channels + + Number of distinct sound channels in Doom. This is the maximum number of + sounds Doom keeps track of at a time, whether or not a sound card is able + to play them all at once or not. This does not control the sound's mixer, + for example -- it simply limits how many distinct sounds Doom keeps track of. + +* Enable v1.1 Pitch Effects + + Whether the variable-pitch effect which was inside the original Doom source, + and which could be heard in v1.1 of Doom, should be enabled. This option + merely enables id's own variable-pitch effects -- it does not claim to be + very realistic, or claim that the variable-pitch effects are consistent. + +* Enable Mouse +* Enable Joystick +* Keyboard LEDs Always Off + + Self-explanatory. + +* Files Preloaded At Game Startup + + A list of up to 2 .wad and 2 .deh/.bex files to be loaded at game startup. + Intended only to be used for permanent game hacks, or long-term playing of + the same wad. Can be suppressed by using the -noload command-line option. + These .wad and .deh/.bex files are added last relative to all other .wad or + .deh/.bex files, so if there is a conflict among .wad file lumps, or among + .deh/.bex behaviors, these files win. + +* Maximum Number of Player Corpses + + The maximum number of player corpses which are kept around to see during + multiplayer games. + +* Game Speed, Percentage of Normal + + The speed of the game can be increased or decreased by changing this option, + the primary purpose of which is to fine-tune the game's responsiveness on a + slow system. + + (Note: Not to sound apologetic, but it is well-known that some may want to + use this option to cheat at demos. No attempt is made to detect or flag demo + cheating, and demo cheating isn't considered reason enough to disallow this + option, which has other purposes. Demos must be recorded and submitted with + the honors system, in the author's opinion, but that almost goes w/o saying.) + +------------------------------------------------------------------------------- + +3. Doom Compatibility Options + +Doom Compatibility options are options whose main purpose is to provide 100% +compatibility with some aspect of Doom. When these options are set to YES, +then MBF behaves the way Doom does for some aspect of the game. Most of these +options are set to NO by default. + +What follows is a list of the options and a brief description of each: + +* Any monster can telefrag on MAP30 + + When this option is set to YES, any monster can telefrag other monsters or + players on MAP30. When this option is set to NO, only Boss Spawners can + telefrag, and they can do this on all levels, not just MAP30. + +* Some objects never hang over tall ledges + + When this option is set to YES, most objects in Doom's universe without the + DROPOFF mobj flag set (which includes most non-floating objects except for + for players and corpses), cannot be pushed over tall ledges, no matter what + forces are applied to them, and regardless of whether it's voluntary. When + this option is set to NO, non-floating monsters (with the exception of dogs + in some cases) cannot voluntarily jump off of tall ledges, but they can be + pushed off of tall ledges by outside forces, such as gunfire, conveyors, or + wind. Setting this option to NO allows objects to be pushed off ledges by + outside forces. + +* Objects don't fall under their own weight + + When this option is set to YES, non-sentient objects that fall under gravity + stay seated at the highest height among all floors they contact. When this + option is set to NO, non-sentient objects that fall under gravity will tend + to fall off of ledges if their center of mass is off of it, as if by torque, + and will roll down stairs and ledges. + +* Monsters randomly walk off of moving lifts + + When this option is set to YES, monsters pay no special attention to lifts, + and may randomly walk on or off of them at any time. When this option is + set to NO, monsters stay on lifts if their targets are on them. This allows + monsters to more intelligently follow their targets on lifts, instead of + randomly leaving them behind. (This option might seem to go better with the + Enemies setup screen than Doom compatibility, but I consider this option a + nit, and I would probably never set it to YES myself. Lee) + +* Monsters get stuck on doortracks + + When this option is set to YES, monsters can get stuck trying to move at a + doortrack, just as in Doom. When this option is set to NO, monsters are able + to break free of doortracks, and their motions behave as though nothing + special had happened. + +* Monsters don't give up pursuit of targets + + When this option is set to YES, monsters do not give up pursuit of targets + in favor of closer targets, simply because their current targets have gone + out of sight (unless the target is a player and this is a multiplayer game). + When this option is set to NO, monsters will choose a visible target if their + current target is out of view. However, if they cannot immediately see a + closer target, they will always continue to pursue their original target. + +* Arch-Vile resurrects invincible ghosts + + When this option is set to YES, Arch-Viles are able to create nearly + invincible ghost monsters if they resurrect what's left of one under a + crusher or a door. When this option is set to NO, all resurrections will + be performed correctly and will avoid creating no-clipping monsters. + +* Pain Elemental limited to 20 lost souls + + When this option is set to YES, Pain Elementals will stop spawning Lost + Souls when there are 20 or more already in the level. + +* Lost souls get stuck behind walls + + When this option is set to YES, Lost Souls will be allowed to sometimes + get trapped behind walls. When this option is set to NO, special measures + are taken to make sure Lost Souls are not stuck behind walls. + +* Blazing doors make double closing sounds + + When this option is set to YES, blazing doors make a sound twice during + closing. When this option is set to NO, blazing doors make only one such + sound during closing. + +* Tagged doors don't trigger special lighting + + When this option is set to YES, DR door linedefs with non-zero tags do not + create any special lighting effects. When this option is set to NO, a Boom + lighting effect is enabled, in which opening and closing DR door linedefs + with non-zero tags, causes all tagged sectors' lighting to increase as the + door opens, and to decrease when it closes. + +* God mode isn't absolute + + When this option is set to YES, the iddqd cheat does not stop telefragging + or "Down to 11%" exit sectors from hurting the player. When this option is + set to NO, God mode is absolute, and protects the player from all harm. + +* Powerup cheats are not infinite duration + + When this option is set to YES, idbehold* powerup cheats behave as they do + in Doom, wearing off in time (except idbeholda, idbeholds). When this option + is set to NO, the cheats are infinite-duration and must be used again to + toggle them off. + +* Zombie players can exit levels + + When this option is set to YES, zombie players can exit levels. (Zombie + players are players with 0% health, but who are allowed to still play the + game because a "voodoo doll", or extra player start, keeps them alive.) When + a zombie player exits a level, they are unable to play the game anymore. When + this option is set to NO, zombie players are prevented from exiting levels + (except exits triggered by boss deaths, which are impractical to stop and + which end the level anyway). + +* Sky is unaffected by invulnerability + + When this option is set to YES, sky textures are always drawn using the + fullbright colormap, and are immune from the white invulnerability colormap. + When this option is set to NO, sky textures will use a fixed colormap such + as invulnerability when it's active, but otherwise use fullbright. + +* Use exactly Doom's stairbuilding method + + When this option is set to YES, stairs will be built using exactly Doom's + method. When this option is set to NO, Boom's method, which to some is more + intuitive, is used. + +* Use exactly Doom's floor motion behavior + + When this option is set to YES, floor motion clipping will be performed just + as in Doom, with respect to target heights and objects coming in contact + with the moving floors. When this option is set to NO, floor motion will use + Boom's method, which is simpler to understand, uses a faster algorithm, and + usually makes more sense. + +* Use exactly Doom's linedef trigger model + + This is a very obscure catch-all option, and should only need to be set to + YES in the most unusual cases. When this option is set to YES, linedef and + sector properties will be treated as in Doom with respect to the triggering + of Doom linedef effects. The order in which linedefs are processed, whether + a linedef is really "two-sided", and whether to use a true maximum/minimum + sector or texture height instead of an arbitrary formula that's usually the + maximum/minimum height, but sometimes isn't, are all governed by this flag. + When this option is set to NO, Boom's method, which is more consistent and + easy to understand, is used. + +* Linedef effects work with sector tag = 0 + + When this option is set to YES, linedefs which activate sectors sharing the + same sector tag work for all tags, including 0. When this option is set to + NO, these linedefs are ignored when sector tag = 0, which sometimes self- + corrects wad author's mistakes. + +* Use Doom's main menu ordering + + When this option is set to YES, Doom's main menu ordering is preserved, which + reads New Game / Options / Load Game / Save Game / [Read This!] / Quit Game. + When this option is set to NO, a different ordering is used: New Game / + Load Game / Save Game / Options / [Read This!] / Quit Game. + +------------------------------------------------------------------------------- + +4. Enemies Options + +The Enemies setup screen deals with enemy bot behavior. + +* Monster infighting when provoked + + When this option is set to YES, monsters will fight their own kind to the + death if provoked, just as in Doom. When this option is set to NO, monsters + stay more focused on their real enemies, and so it is harder for a player to + trick them into infighting. + +* Remember previous enemy + + When this option is set to YES, monsters remember past enemies, and are able + to return to them after becoming distracted on a new target. When this option + is set to NO, monsters must be able to see a new target immediately after + killing their current target, or they will fall asleep (this often happened + in Doom -- if a player was able to start infighting, they were often able to + put a monster to sleep by staying out of its view while it finished off the + other monster). + +* Monster backing out + + When this option is set to YES, monsters are able to back away from enemies + sometimes. (However, as of this writing, they only do so when it leads to an + "offensive" advantage over their opponent -- it is never used for retreating + from danger.) When this option is set to NO, monsters are not allowed to + back out. + +* Climb Steep Stairs + + When this option is set to YES, monsters may climb stairs just like players + can, as long as they don't move up more than 24 units. When this option is + set to NO, Doom clipping logic is used, which prevents monsters from walking + up steps that cause too big of a dropoff across its entire body (hence the + dependence on the monster's radius). Setting this option to YES also allows + monsters to more easily recover from hanging off tall ledges if they are + pushed off partway by gunfire or other forces. + +* Intelligently avoid hazards + + When this option is set to YES, monsters intelligently avoid hazards such as + crushing ceilings. When this option is set to NO, monsters are unintelligent + when it comes to avoiding hazards. + +* Affected by friction + + When this option is set to YES, monsters are affected by friction (ice, + sludge), similar to how the player is affected. When this option is set to + NO, monsters are immune from any friction-modifying influences such as ice + or sludge (as in Boom). + +* Rescue dying friends + + When this option is set to YES, monsters will attempt to rescue friends + within their line of sight who are under attack and who are dying. When + this option is set to NO, everyone is on their own. + +* Number of single-player helper dogs + + This option allows anywhere from 0 to 3 player starts to be filled with + friendly dogs in single-player games. These might be considered co-op bots, + although they cannot pick up items or operate keyed doors or the like. + +* Distance friends stay away + + This option sets a "comfort distance", which is the distance friends of the + player try to stay away from the player, to avoid getting in your feet. Under + reasonable circumstances, such as on a crowded lift, or if the friend is + attacking an enemy that's close by, this distance constraint will sometimes + be violated. + +* Allow dogs to jump down + + If this option is set to YES, dogs will jump down from taller ledges towards + their owner. If this option is set to NO, dogs cannot jump down from ledges + taller than 24 (unless deh-modified, perhaps). + +------------------------------------------------------------------------------- +Lee Killough Last Updated 12/21/1998 diff --git a/docs/winmbf02.txt b/docs/winmbf02.txt new file mode 100644 index 00000000..d7b0cbdb --- /dev/null +++ b/docs/winmbf02.txt @@ -0,0 +1,132 @@ +=============================================================================== +Title : WinMBF v2.03 Build 2 +Filename : winmbf02.zip +Author : Team Eternity +Email Address : haleyjd@hotmail.com +Release History : 01/19/05 -- v2.03 Build 2 + 08/10/04 -- v2.03 Build 1 (Original release) + +Programmers : James Haley + Steven McGranahan + Lee Killough (MBF) + +Artist : Len Pitre + +Play Testers : Ky (Rez) Moffet + Len Pitre + James Haley + +Canine Consulting : Longplain Kennels + +Additional Credit : id Software + TeamTNT + PrBoom Team + +Special Thanks To : John Romero + Joel Murdoch + + +* Description * + +This is the first, highly-requested port of the pure MBF source to Win32. It +uses system code from the Eternity Engine (http://doomworld.com/eternity) and +is therefore supported by the SDL library. + +What's New: +You can now select Nightmare mode from the main menu without crashing the game. + + +* Copyright / Permissions * + +Please see the file COPYING to read the license for this program and its source +code. It is covered under the terms of the GNU GPL, and no warranties are given +for this software. + + +* Misc. Information * + +This is unsupported software and will not be actively maintained. Expect a few +possible updates in the future, but they will not be frequent. Please do not +request any known MBF bugs in this port to be fixed, and do not submit feature +requests. If you want bug fixes and new features, please consider using the +Eternity Engine instead. + +That said, please feel free to use this port as a bed for Eternity Engine +regression testing. If behaviors differ between Eternity and WinMBF in ways +that you suspect are due to an error in Eternity, please contact us (you can +find Quasar's email address at the page mentioned above). + +Do not under any circumstances attempt to contact Lee Killough about this +version of MBF; he was not involved in its creation and will not provide any +support for it. Please do thank him for the wonderful gift that MBF was, +though :) + + +* Changes from MBF * + +New Command-line Options: + +* -heapsize: Specify a size between 8 and 255 MB; MBF will attempt to allocate + this amount of memory. The default heap size is 8 MB. The upper limit of + 255 MB is a Windows limitation. + +* -fullscreen: Enables fullscreen video mode support. This cannot currently be + toggled while the program is running. + + +New Configuration Options: + +* The joystick can be configured via the config file. You can specify the + device number (the first joystick on your system should be number 0), and + provide sensitivity values for either axis. + +* Wait at exit: toggle this on or off to give time for you to read any error + messages that may appear in WinMBF's console window. Default is on. + +* Force flip pan: you can force reversal of the stereo audio channels if they + are backwards on your machine. + + +Bug Fixes/Code Changes: + +* Massive portability adjustments. All GNU C extensions macroized or removed. + Visual C++ support, some warnings fixed (most not). + +* DOS code removed. This build is for SDL platforms only, and has only been + built under Windows. Use the original source or binaries if you need DOS + support. + +* DeHackEd support will not cause a crash by trying to close a NULL file + pointer (applies under Windows only). + +* Files will be written to the current working directory, not the root + directory, if the program is not started by the operating system with a full + path name (affects Windows XP). + +* M_InitExtendedHelp no longer writes into a string constant. + +* M_Drawer no longer writes into a string constant. Fixes crash when trying to + play in Nightmare mode, among other possible errors. + + +Known Problems: + +* No netcode yet. Should be much easier to put in than it will be for Eternity. + +* Spectre fuzz is still wrong. The MBF source online doesn't have this fixed, + so it's not fixed here either. I'll probably repair this in a future build. + +* Writing out the internal resources to a wad file is currently disabled. This + code uses the poorly supported open function and needs to be changed to use + the ANSI stdio functions. + +* Stability issues. Program has crashed with no error message, so expect some + problems. Save your game often. These are probably BOOM/MBF bugs and not + issues introduced during porting. + +* Print Screen key doesn't work for screenshots under Windows. You can change + this to another key code (they use ASCII codes) in the config file, or you + can use -devparm to enable screenshots using the F1 key. Numpad * key is + also currently disabled -- this may be fixed in a future build. + + \ No newline at end of file diff --git a/docs/winmbf02s.txt b/docs/winmbf02s.txt new file mode 100644 index 00000000..90f2ce78 --- /dev/null +++ b/docs/winmbf02s.txt @@ -0,0 +1,135 @@ +=============================================================================== +Title : WinMBF v2.03 Build 2 +Filename : winmbf02s.zip +Author : Team Eternity +Email Address : haleyjd@hotmail.com +Release History : 01/19/05 -- v2.03 Build 2 + 08/10/04 -- v2.03 Build 1 (Original release) + +Programmers : James Haley + Steven McGranahan + Lee Killough (MBF) + +Artist : Len Pitre + +Play Testers : Ky (Rez) Moffet + Len Pitre + James Haley + +Canine Consulting : Longplain Kennels + +Additional Credit : id Software + TeamTNT + PrBoom Team + +Special Thanks To : John Romero + Joel Murdoch + + +* Description * + +This is the first, highly-requested port of the pure MBF source to Win32. It +uses system code from the Eternity Engine (http://doomworld.com/eternity) and +is therefore supported by the SDL library. + +NOTE: This is the source distribution archive. To run the resulting executable, +you will also need the binary distribution in winmbf02.zip. You will need +Visual C++ 6.0 or later to use the project files included with this source +code, although it should be possible to port the source to other SDL platforms +with minimal effort. SDL 1.2.7 and SDL_mixer 1.2.5 or later are required. + + +* Copyright / Permissions * + +Please see the file COPYING to read the license for this program and its source +code. It is covered under the terms of the GNU GPL, and no warranties are given +for this software. + + +* Misc. Information * + +This is unsupported software and will not be actively maintained. Expect a few +possible updates in the future, but they will not be frequent. Please do not +request any known MBF bugs in this port to be fixed, and do not submit feature +requests. If you want bug fixes and new features, please consider using the +Eternity Engine instead. + +That said, please feel free to use this port as a bed for Eternity Engine +regression testing. If behaviors differ between Eternity and WinMBF in ways +that you suspect are due to an error in Eternity, please contact us (you can +find Quasar's email address at the page mentioned above). + +Do not under any circumstances attempt to contact Lee Killough about this +version of MBF; he was not involved in its creation and will not provide any +support for it. Please do thank him for the wonderful gift that MBF was, +though :) + + +* Changes from MBF * + +New Command-line Options: + +* -heapsize: Specify a size between 8 and 255 MB; MBF will attempt to allocate + this amount of memory. The default heap size is 8 MB. The upper limit of + 255 MB is a Windows limitation. + +* -fullscreen: Enables fullscreen video mode support. This cannot currently be + toggled while the program is running. + + +New Configuration Options: + +* The joystick can be configured via the config file. You can specify the + device number (the first joystick on your system should be number 0), and + provide sensitivity values for either axis. + +* Wait at exit: toggle this on or off to give time for you to read any error + messages that may appear in WinMBF's console window. Default is on. + +* Force flip pan: you can force reversal of the stereo audio channels if they + are backwards on your machine. + + +Bug Fixes/Code Changes: + +* Massive portability adjustments. All GNU C extensions macroized or removed. + Visual C++ support, some warnings fixed (most not). + +* DOS code removed. This build is for SDL platforms only, and has only been + built under Windows. Use the original source or binaries if you need DOS + support. + +* DeHackEd support will not cause a crash by trying to close a NULL file + pointer (applies under Windows only). + +* Files will be written to the current working directory, not the root + directory, if the program is not started by the operating system with a full + path name (affects Windows XP). + +* M_InitExtendedHelp no longer writes into a string constant. + +* M_Drawer no longer writes into a string constant. Fixes crash when trying to + play in Nightmare mode, among other possible error + + +Known Problems: + +* No netcode yet. Should be much easier to put in than it will be for Eternity. + +* Spectre fuzz is still wrong. The MBF source online doesn't have this fixed, + so it's not fixed here either. I'll probably repair this in a future build. + +* Writing out the internal resources to a wad file is currently disabled. This + code uses the poorly supported open function and needs to be changed to use + the ANSI stdio functions. + +* Stability issues. Program has crashed with no error message, so expect some + problems. Save your game often. These are probably BOOM/MBF bugs and not + issues introduced during porting. + +* Print Screen key doesn't work for screenshots under Windows. You can change + this to another key code (they use ASCII codes) in the config file, or you + can use -devparm to enable screenshots using the F1 key. Numpad * key is + also currently disabled -- this may be fixed in a future build. + + \ No newline at end of file diff --git a/examples/Makefile.am b/examples/Makefile.am new file mode 100644 index 00000000..016f8a80 --- /dev/null +++ b/examples/Makefile.am @@ -0,0 +1,20 @@ +exampledir = $(docdir)/examples + +dist_example_DATA = \ + battle.wad \ + dogfly.deh \ + donut.txt \ + donut.wad \ + fireplas.deh \ + fly.deh \ + friend.deh \ + grenade.deh \ + hockey.wad \ + mbfedit.txt \ + mbfedit.wad \ + mine.deh \ + mushroom.deh \ + playbud.deh \ + possbud.deh \ + sky.wad \ + touchy.deh diff --git a/examples/battle.wad b/examples/battle.wad new file mode 100644 index 00000000..640c32b3 Binary files /dev/null and b/examples/battle.wad differ diff --git a/examples/dogfly.deh b/examples/dogfly.deh new file mode 100644 index 00000000..92f15897 --- /dev/null +++ b/examples/dogfly.deh @@ -0,0 +1,6 @@ +# Makes dogs "fly" under gravity, in effect jumping. +# By Lee Killough + +Thing 140 +Bits = BOUNCES | SOLID | SHOOTABLE | FLOAT | COUNTKILL +Mass = 100 diff --git a/examples/donut.txt b/examples/donut.txt new file mode 100644 index 00000000..357de606 --- /dev/null +++ b/examples/donut.txt @@ -0,0 +1,46 @@ +========================================================================== +Title : Donut Demo for Marine's Best Friend +Filename : DONUT.WAD +Author : Ky "Rez" Moffet +Email Address : rez@eqcity.ktb.net +Misc. Author Info : 43-year old DOOM fanatic who can't tell + which end of a WAD editor is up + +Description : Watch the corpses ride the donuts! + +=========================================================================== +Additional Credits to : Khoi Pham, who could not find a way to make + a stone roll downhill ... will making a + corpse roll downhill do instead? :) +=========================================================================== + +* Play Information * + +Game : DOOM II +Requires : Marine's Best Friend + (modified DOOM engine by Lee Killough) + +Episode and Level # : level 1 +Single Player : As a feature demo level only +Cooperative 2-4 Player : Not hardly +Deathmatch 2-4 Player : Only if you like it really cramped +Difficulty Settings : If it's too hard, remove half the imps + +New Sounds : NO +New Graphics : NO +New Music : NO +Demos Replaced : NO + +* Construction * + +Base : INDYJONE.WAD by Khoi Pham +Time : 30 minutes +Editor(s) used : DCK 2.2f, BSP 2.3x +Known Bugs : No way to escape! + + +* Copyright / Permissions * + +You can do whatever you want with this wad, tho I don't recommend +eating it. + diff --git a/examples/donut.wad b/examples/donut.wad new file mode 100644 index 00000000..af80f474 Binary files /dev/null and b/examples/donut.wad differ diff --git a/examples/fireplas.deh b/examples/fireplas.deh new file mode 100644 index 00000000..8e9f3410 --- /dev/null +++ b/examples/fireplas.deh @@ -0,0 +1,13 @@ +Patch File for DeHackEd v3.0 + +# Note: Use the pound sign ('#') to start comment lines. + +Doom version = 21 +Patch format = 6 + + +Pointer 415 (Frame 738) +Codep Frame = 648 + +Pointer 417 (Frame 740) +Codep Frame = 648 diff --git a/examples/fly.deh b/examples/fly.deh new file mode 100644 index 00000000..a517a4dc --- /dev/null +++ b/examples/fly.deh @@ -0,0 +1,8 @@ +Patch File for DeHackEd v3.0 +Doom version = 19 +Patch format = 6 + +# to make the player fly :) + +Thing 01 +Bits = BOUNCES | FRIEND | NOTDMATCH | DROPOFF | PICKUP | SOLID | SHOOTABLE diff --git a/examples/friend.deh b/examples/friend.deh new file mode 100644 index 00000000..0c8f80da --- /dev/null +++ b/examples/friend.deh @@ -0,0 +1,18 @@ +Patch File for DeHackEd v3.0 +Doom version = 19 +Patch format = 6 + +# Make a monster friendly +# +# 2 = Trooper, 3 = Sergeant, 4 = Arch-Vile, 6 = Revenant, 9 = Mancubus +# 11 = Commando, 12 = Imp, 13 = Demon, 14 = Spectre, 15 = Cacodemon, +# 16 = Baron, 18 = Hell Knight, 19 = Lost Soul, 20 = Spider Mastermind, +# 21 = Arachnotron, 22 = Cyberdemon, 23 = Pain Elemental, 24 = SS Soldier, +# 25 = Keen, 27 = Boss Brain Spawner, 140 = Dog + +Thing 4 +Bits = FRIEND | COUNTKILL | SHOOTABLE | SOLID + +Thing 23 +Bits = FRIEND | COUNTKILL | SHOOTABLE | SOLID | DROPOFF | FLOAT | NOGRAVITY + diff --git a/examples/grenade.deh b/examples/grenade.deh new file mode 100644 index 00000000..dc2a51b6 --- /dev/null +++ b/examples/grenade.deh @@ -0,0 +1,18 @@ +# Turn a rocket launcher into a grenade launcher +# By Lee Killough +# Works only with MBF + +Thing 34 +Bits = BOUNCES | DROPOFF +Hit points = 10 +Initial frame = 968 +Death frame = 969 +Missile damage = 128 +Mass = 200 + +# Note: you can use the code pointer in frame 970 (A_Detonate) to explode +# based on the thing's actual damage, rather than by a constant amount. + +# Grenade timer delay +Frame 968 +Duration = 135 diff --git a/examples/hockey.wad b/examples/hockey.wad new file mode 100644 index 00000000..811f7002 Binary files /dev/null and b/examples/hockey.wad differ diff --git a/examples/mbfedit.txt b/examples/mbfedit.txt new file mode 100644 index 00000000..ea491c6e --- /dev/null +++ b/examples/mbfedit.txt @@ -0,0 +1,87 @@ +============================================================================= +Title : MBFEdit +Author : Len Pitre +Email Address : I_am_the_archon@hotmail.com +Description : As Boomedit was for Boom, MBFedit shall be for MBF. + : And it was good, and the people were happy. +Special Thanks to : Lee and Rez for their suggestions, it wouldn't be + : half the WAD it currently is without their input. +Additional Credits to : Rogue and Raven for not suing over the Strife and + Hexen stuff I stole. + : Rez for beta testing this mess.:) + : Lee Killough for the MBF engine. + : TeamTNT for the Boom engine. + : Id Software for the Doom engine. + : End of the line.:) +Command line : MBF -file mbfedit! or something similar. + : No other external stuff needed. +============================================================================= + +Get freaky! Get freaky! Everybody in the house get freaky! + +== Construction ============================================================= +Base : New level from scratch +Editor(s) used : DCK 3.62, DCK 2.2f, Wintex, Microsoft paint.... +Build Time : Several hundred repetitions of my music collection. +Known Bugs : You think I make bug-ridden WADs? Ha! I mock you! + +== Copyright / Permissions ================================================== +Authors MAY use this level as a base to build additional levels, if they +send me a nice e-mail or name their firstborn after me.:) + +You MAY distribute this WAD provided you include this file, with no +modifications. You MAY distribute this file in any electronic format +(BBS, Diskette, CD, etc.) as long as you include this file intact. I also +suggest that you let me know about it, or I'll send my goons after you. + +== Where to get this WAD ==================================================== +Dunno. Probably the same place you got the text file. Look around, it +should be real close to MBF. + +== Long Explanation for People Brave Enough to Read this Far ================ +Okay, finally, a UAC Base not completely taken over by Hellspawn! Just a +couple of Imps or Cyberdemons or mutant Commander Keens or something like +that, I can't remember. Look around, take a couple of lessons in MBF physics. +Read the signs carefully, and when you're done, nip out the back door to +finish the level. + +I'll give a short teaser on some of the rooms, in whatever order I feel like: + +Outside: Not really a room, but what the heck. Shows some high-friction nukage +and low-friction ice. These are a bit extreme examples of MBF friction, WAD +authors might want to use more middle-of-the-road settings. + +Note how the imps - and dogs, if you take them along - have fun trying to walk +around, as they're also affected. + +Grenade testing range: See Grenade fly. See Grenade bounce. See how Grenade +goes up stairs, over small barricades, and around corners. See Grenade blow +up and kill stupid marines who don't stand back. This room will give you a +better idea of how to use grenades, should you ever want to use GRENADE.DEH +(from EXAMPLES.ZIP) for spicing up regular levels, or for a WAD of yours. + +Physics 101: Hit the switch, watch torque make the dead imp fall from his +now unstable perch. + +Physics 201: Hit the switch, and enjoy slightly more advanced uses of torque. +No conveyors here, folks. + +Unstable reactor waste: Hit the switch, watch torque make the barrel fall +from its now unstable perch. But the torque isn't the big thing here, it's +the TOUCHY DeHackEd flag I put on the barrel. Watch and learn. + +Wind tunnel: Not only does friction now effect monsters, but the wind does too. + +Stained Glass storage: A bit of a steal from Boomedit, but with a smoother +twist. One side of the door is a fast (blazing) door trigger, one is a normal +trigger, so you can see the effect at different speeds. Watch the room's +lighting as the door moves. + +Reactor control room: My, my. Doesn't that little valve look harmless, an +easy kill. + +Suicide Counseling: No comment. We all need a bit of suspense in our lives.:) + +Len Pitre +January 1,1999 A.D. + diff --git a/examples/mbfedit.wad b/examples/mbfedit.wad new file mode 100644 index 00000000..ed1c51d2 Binary files /dev/null and b/examples/mbfedit.wad differ diff --git a/examples/mine.deh b/examples/mine.deh new file mode 100644 index 00000000..2ca48cc8 --- /dev/null +++ b/examples/mine.deh @@ -0,0 +1,9 @@ +# Turn a rocket launcher into a minelayer +# By Lee Killough +# Works only with MBF + +Thing 34 +Bits = BOUNCES | DROPOFF | TOUCHY +Death frame = 969 +Hit points = 10 +Missile damage = 128 diff --git a/examples/mushroom.deh b/examples/mushroom.deh new file mode 100644 index 00000000..868868b9 --- /dev/null +++ b/examples/mushroom.deh @@ -0,0 +1,21 @@ +# Turns explosions into mushroom clouds +# By Lee Killough + +Thing 34 +Missile Damage = 20 + +Frame 127 +Unknown 1 = 0x00000000 +Unknown 2 = 0x00000000 + +Pointer 0 (x 127) +Codep frame = 1075 + +Frame 969 +Unknown 1 = 0x00000000 +Unknown 2 = 0x00000000 + +Pointer 0 (x 969) +Codep frame = 1075 + + diff --git a/examples/playbud.deh b/examples/playbud.deh new file mode 100644 index 00000000..53eebcb4 --- /dev/null +++ b/examples/playbud.deh @@ -0,0 +1,169 @@ +Patch File for DeHackEd v3.0 + +# Note: Use the pound sign ('#') to start comment lines. + +Doom version = 21 +Patch format = 6 + + +Thing 24 (SS Nazi) +Alert sound = 36 +Death sound = 59 +Bits = 71303174 + +Thing 140 (Doggies) +Initial frame = 726 +First moving frame = 728 +Alert sound = 36 +Attack sound = 0 +Injury frame = 742 +Pain chance = 170 +Pain sound = 27 +Close attack frame = 0 +Far attack frame = 736 +Death frame = 744 +Exploding frame = 749 +Death sound = 59 +Width = 1310720 +Height = 3670016 +Mass = 100 +Action sound = 75 +Bits = 138412038 +Respawn frame = 758 + +Frame 726 +Sprite number = 28 + +Frame 727 +Sprite number = 28 + +Frame 728 +Sprite number = 28 + +Frame 729 +Sprite number = 28 + +Frame 730 +Sprite number = 28 + +Frame 731 +Sprite number = 28 + +Frame 732 +Sprite number = 28 + +Frame 733 +Sprite number = 28 + +Frame 734 +Sprite number = 28 + +Frame 735 +Sprite number = 28 + +Frame 736 +Sprite number = 28 + +Frame 737 +Sprite number = 28 +Sprite subnumber = 4 + +Frame 738 +Sprite number = 28 +Sprite subnumber = 32773 + +Frame 739 +Sprite number = 28 +Sprite subnumber = 4 + +Frame 740 +Sprite number = 28 +Sprite subnumber = 32773 + +Frame 741 +Sprite number = 28 +Sprite subnumber = 4 + +Frame 742 +Sprite number = 28 +Sprite subnumber = 6 + +Frame 743 +Sprite number = 28 +Sprite subnumber = 6 + +Frame 744 +Sprite number = 28 +Sprite subnumber = 7 + +Frame 745 +Sprite number = 28 +Sprite subnumber = 8 + +Frame 746 +Sprite number = 28 +Sprite subnumber = 9 + +Frame 747 +Sprite number = 28 +Sprite subnumber = 10 + +Frame 748 +Sprite number = 28 +Sprite subnumber = 13 + +Frame 749 +Sprite number = 28 +Sprite subnumber = 14 + +Frame 750 +Sprite number = 28 +Sprite subnumber = 15 + +Frame 751 +Sprite number = 28 +Sprite subnumber = 16 + +Frame 752 +Sprite number = 28 +Sprite subnumber = 17 + +Frame 753 +Sprite number = 28 +Sprite subnumber = 18 + +Frame 754 +Sprite number = 28 +Sprite subnumber = 19 + +Frame 755 +Sprite number = 28 +Sprite subnumber = 20 + +Frame 756 +Sprite number = 28 +Sprite subnumber = 21 + +Frame 757 +Sprite number = 28 +Sprite subnumber = 22 + +Frame 758 +Sprite number = 28 +Sprite subnumber = 11 + +Frame 759 +Sprite number = 28 +Sprite subnumber = 10 + +Frame 760 +Sprite number = 28 +Sprite subnumber = 9 + +Frame 761 +Sprite number = 28 +Sprite subnumber = 8 + +Frame 762 +Sprite number = 28 +Sprite subnumber = 7 diff --git a/examples/possbud.deh b/examples/possbud.deh new file mode 100644 index 00000000..ef0ac98a --- /dev/null +++ b/examples/possbud.deh @@ -0,0 +1,184 @@ +Patch File for DeHackEd v3.0 + +# Note: Use the pound sign ('#') to start comment lines. + +Doom version = 21 +Patch format = 6 + + +Thing 140 (Doggies) +Initial frame = 726 +First moving frame = 728 +Alert sound = 36 +Attack sound = 0 +Injury frame = 742 +Pain chance = 170 +Pain sound = 27 +Close attack frame = 0 +Far attack frame = 736 +Death frame = 744 +Exploding frame = 749 +Death sound = 59 +Width = 1310720 +Height = 3670016 +Mass = 100 +Action sound = 75 +Bits = 71303174 +Respawn frame = 758 + +Thing 24 (SS Nazi) +Attack sound = 0 +Initial frame = 726 +First moving frame = 728 +Alert sound = 36 +Injury frame = 742 +Pain chance = 170 +Pain sound = 27 +Close attack frame = 0 +Far attack frame = 736 +Death frame = 744 +Exploding frame = 749 +Death sound = 59 +Width = 1310720 +Height = 3670016 +Mass = 100 +Action sound = 75 +Respawn frame = 758 +Bits = 138412038 + +Frame 726 +Sprite number = 29 + +Frame 727 +Sprite number = 29 + +Frame 728 +Sprite number = 29 + +Frame 729 +Sprite number = 29 + +Frame 730 +Sprite number = 29 + +Frame 731 +Sprite number = 29 + +Frame 732 +Sprite number = 29 + +Frame 733 +Sprite number = 29 + +Frame 734 +Sprite number = 29 + +Frame 735 +Sprite number = 29 + +Frame 736 +Sprite number = 29 + +Frame 737 +Sprite number = 29 +Sprite subnumber = 4 + +Frame 738 +Sprite number = 29 +Sprite subnumber = 32773 + +Frame 739 +Sprite number = 29 +Sprite subnumber = 4 + +Frame 740 +Sprite number = 29 +Sprite subnumber = 32773 + +Frame 741 +Sprite number = 29 +Sprite subnumber = 4 + +Frame 742 +Sprite number = 29 +Sprite subnumber = 6 + +Frame 743 +Sprite number = 29 +Sprite subnumber = 6 + +Frame 744 +Sprite number = 29 +Sprite subnumber = 7 + +Frame 745 +Sprite number = 29 +Sprite subnumber = 8 + +Frame 746 +Sprite number = 29 +Sprite subnumber = 9 + +Frame 747 +Sprite number = 29 +Sprite subnumber = 10 + +Frame 748 +Sprite number = 29 +Sprite subnumber = 11 + +Frame 749 +Sprite number = 29 +Sprite subnumber = 12 + +Frame 750 +Sprite number = 29 +Sprite subnumber = 13 + +Frame 751 +Sprite number = 29 +Sprite subnumber = 14 + +Frame 752 +Sprite number = 29 +Sprite subnumber = 15 + +Frame 753 +Sprite number = 29 +Sprite subnumber = 16 + +Frame 754 +Sprite number = 29 +Sprite subnumber = 17 + +Frame 755 +Sprite number = 29 +Sprite subnumber = 18 + +Frame 756 +Sprite number = 29 +Sprite subnumber = 19 + +Frame 757 +Sprite number = 29 +Sprite subnumber = 20 + +Frame 758 +Sprite number = 29 +Sprite subnumber = 11 + +Frame 759 +Sprite number = 29 +Sprite subnumber = 10 + +Frame 760 +Sprite number = 29 +Sprite subnumber = 9 + +Frame 761 +Sprite number = 29 +Sprite subnumber = 8 + +Frame 762 +Sprite number = 29 +Sprite subnumber = 7 diff --git a/examples/sky.wad b/examples/sky.wad new file mode 100644 index 00000000..89d0d1a2 Binary files /dev/null and b/examples/sky.wad differ diff --git a/examples/touchy.deh b/examples/touchy.deh new file mode 100644 index 00000000..bfad36cb --- /dev/null +++ b/examples/touchy.deh @@ -0,0 +1,16 @@ +# Example of TOUCHY mobj flag +# +# Makes Pain Elementals die when touched by +# anyone except themselves or their offspring +# +# By Lee Killough +# Only works with MBF +# +# 2 = Trooper, 3 = Sergeant, 4 = Arch-Vile, 6 = Revenant, 9 = Mancubus +# 11 = Commando, 12 = Imp, 13 = Demon, 14 = Spectre, 15 = Cacodemon, +# 16 = Baron, 18 = Hell Knight, 19 = Lost Soul, 20 = Spider Mastermind, +# 21 = Arachnotron, 22 = Cyberdemon, 23 = Pain Elemental, 24 = SS Soldier, +# 25 = Keen, 27 = Boss Brain Spawner, 140 = Dog + +Thing 23 +Bits = COUNTKILL | SHOOTABLE | SOLID | DROPOFF | FLOAT | NOGRAVITY | TOUCHY diff --git a/toolsrc/Makefile.am b/toolsrc/Makefile.am new file mode 100644 index 00000000..6a06e547 --- /dev/null +++ b/toolsrc/Makefile.am @@ -0,0 +1,6 @@ +EXTRA_DIST = \ + bin2c.c \ + bmp2c.c \ + defswani.dat \ + fakedate.asm \ + swantbls.c diff --git a/toolsrc/bin2c.c b/toolsrc/bin2c.c new file mode 100644 index 00000000..d6b24241 --- /dev/null +++ b/toolsrc/bin2c.c @@ -0,0 +1,34 @@ +#include +#include +#include + +int main(int argc,char **argv) +{ + char buf[256],s[100]; + int c; + FILE *fp; + if (argc!=2) + { + fprintf(stderr,"Usage: %s file\n",*argv); + return 1; + } + if (!(fp = fopen(argv[1],"rb"))) + { + fputs("Cannot open ",stderr); + perror(argv[1]); + return 1; + } + puts("static unsigned char data[] = {"); + strcpy(buf," "); + while ((c=getc(fp))!=EOF) + { + sprintf(s,"%u,",(unsigned char) c); + if (strlen(s)+strlen(buf) >= 80) + puts(buf), strcpy(buf," "); + strcat(buf,s); + } + if (*buf) + strcat(buf,"\n"); + printf("%s};\n",buf); + return 0; +} diff --git a/toolsrc/bmp2c.c b/toolsrc/bmp2c.c new file mode 100644 index 00000000..db95add4 --- /dev/null +++ b/toolsrc/bmp2c.c @@ -0,0 +1,289 @@ +#include +#include +#include +#include + +#define XPARENT (0xf7) /* palette index representing transparent in BMP */ + +typedef struct stPicData +{ + short pwid; + short phgt; + short pxoff; + short pyoff; + + long *coloffs; + unsigned char *posts; + long postlen; +} PicData; + +#define BI_RGB 0L +#define BI_RLE8 1L +#define BI_RLE4 2L + +typedef unsigned short UINT; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef long LONG; +typedef unsigned char BYTE; +typedef unsigned char UBYTE; + +typedef struct tagBITMAPFILEHEADER +{ + UINT bfType; // 2 + DWORD bfSize; // 4 + UINT bfReserved1; // 2 + UINT bfReserved2; // 2 + DWORD bfOffBits; // 4 +} __attribute__ ((packed)) BITMAPFILEHEADER; // 14 + +typedef struct tagBITMAPINFOHEADER +{ + DWORD biSize; // 4 + LONG biWidth; // 4 + LONG biHeight; // 4 + WORD biPlanes; // 2 + WORD biBitCount; // 2 + DWORD biCompression; // 4 + DWORD biSizeImage; // 4 + LONG biXPelsPerMeter; // 4 + LONG biYPelsPerMeter; // 4 + DWORD biClrUsed; // 4 + DWORD biClrImportant; // 4 +} __attribute__ ((packed)) BITMAPINFOHEADER; // 40 + +typedef struct tagRGBQUAD +{ + UBYTE rgbBlue; + UBYTE rgbGreen; + UBYTE rgbRed; + UBYTE rgbReserved; +} __attribute__ ((packed)) RGBQUAD; + +// Convert a rectangular array of numbers to a DOOM format picture +// bytes 0-255 represent palette colors as usual, XPARENT is transparency. +// +// memory is allocated on p->coloffs and p->posts +// max: 256k+rwid actual: postlen+4*(1+rwid) + +void ConvertToPicture(BYTE *bytes,int logw,int rwid,int logh,PicData *p,int pf) +{ + int i,j,n; + int pixcnt; + int postlen; + + p->pwid = rwid; + p->phgt = logh; + p->pxoff = pf? rwid/2 - 1 : 0; + p->pyoff = pf? logh - 5 : 0; + + p->coloffs = (long *)malloc(logw*sizeof(int)); + p->posts = (unsigned char *)malloc(1024*256*sizeof(unsigned char)); + + n=postlen=0; + for (j=0;jcoloffs[j] = 4*sizeof(short) + p->pwid*sizeof(int) + postlen; + pixcnt = 0; + for (i=0;i0) + { + p->posts[postlen++]=0; // add fill byte at end + pixcnt=0; + } + } + else + { + if (pixcnt==0) // start a post + { + p->posts[postlen++] = i; + n = postlen++; + p->posts[n] = 1; + p->posts[postlen++] = 0; // add fill byte at start + } + else p->posts[n]++; + + // add pixel to current post + + p->posts[postlen++] = bytes[logw*i+j]; + pixcnt++; + } + } + if (pixcnt>0) // terminate last post + p->posts[postlen++]=0; + p->posts[postlen++]=255; // terminate column + } + p->posts = (unsigned char *)realloc(p->posts,postlen); + p->postlen = postlen; +} + +// Reads BMP file +// Header is read for real width, and logical height +// Logical width is next multiple of 4 greater than or equal to real width +// Bitmap is written to short array *out, allocated to fit +// *out is allocated and read as logical width by logical height +// +// memory is allocated on *out +// max: logw*logh*sizeof(short) + +void ReadBMP(BYTE **out,int *logw,int *realw,int *logh,char *bmpname) +{ + int i,n; + BITMAPFILEHEADER bmfh; + BITMAPINFOHEADER bmih; + FILE *st; + char *buffer=NULL; + char *p=NULL; + RGBQUAD pal[256]; + + *logw = *logh = *realw = 0; + st = fopen(bmpname,"rb"); + if (st!=NULL) + { + fread(&bmfh.bfType,sizeof(bmfh.bfType),1,st); + fread(&bmfh.bfSize,sizeof(bmfh.bfSize),1,st); + fread(&bmfh.bfReserved1,sizeof(bmfh.bfReserved1),1,st); + fread(&bmfh.bfReserved2,sizeof(bmfh.bfReserved2),1,st); + fread(&bmfh.bfOffBits,sizeof(bmfh.bfOffBits),1,st); + fread(&bmih.biSize,sizeof(bmih.biSize),1,st); + fread(&bmih.biWidth,sizeof(bmih.biWidth),1,st); + fread(&bmih.biHeight,sizeof(bmih.biHeight),1,st); + fread(&bmih.biPlanes,sizeof(bmih.biPlanes),1,st); + fread(&bmih.biBitCount,sizeof(bmih.biBitCount),1,st); + fread(&bmih.biCompression,sizeof(bmih.biCompression),1,st); + fread(&bmih.biSizeImage,sizeof(bmih.biSizeImage),1,st); + fread(&bmih.biXPelsPerMeter,sizeof(bmih.biXPelsPerMeter),1,st); + fread(&bmih.biYPelsPerMeter,sizeof(bmih.biYPelsPerMeter),1,st); + fread(&bmih.biClrUsed,sizeof(bmih.biClrUsed),1,st); + fread(&bmih.biClrImportant,sizeof(bmih.biClrImportant),1,st); + fread(pal,sizeof(RGBQUAD),256,st); + + *realw = bmih.biWidth; + *logw = 4*((bmih.biWidth+3)/4); + *logh = bmih.biHeight; + + n = (*logw)*(*logh); + + buffer = malloc(n); + fseek(st,bmfh.bfOffBits,SEEK_SET); + fread(buffer,n,1,st); + + *out = (BYTE *)malloc(n); + + for (i=(*logh)-1;i>=0;i--) + memmove((*out)+((*logh)-1-i)*(*logw),buffer+(*logw)*i,*logw); + fclose(st); + free(buffer); + } + else fprintf(stderr,"ERROR: bitmap file %s not found\n",bmpname); +} + +// Read a .BMP file and embed in a wad as a DOOM picture +// memory balanced except directory extension + +void WritePic(char *path,FILE *st,int pf) +{ + int n,t; + BYTE *out = NULL; + int logw=0,logh=0,rwid=0; + PicData pic; + char name[256],*p; + BYTE *q; + + if (path && *path) + { + ReadBMP(&out,&logw,&rwid,&logh,path); // allocs out + if (logw>0) + { + ConvertToPicture(out,logw,rwid,logh,&pic,pf); + + strcpy(name,path[1]==':'? path+2 : path); // strip drive, if any + p = strrchr(name,'\\'); // strip dirs, if any + if (p) strcpy(name,p+1); + p = strrchr(name,'.'); // strip ext, if any + if (p) *p='\0'; + + // code to write pic as C data here + + fprintf(st,"static const char %s[]=\n{\n\t",name); + + q = (BYTE *)&pic.pwid; + fprintf(st,"%3d,",*q++); + fprintf(st,"%3d,",*q++); + fprintf(st,"%3d,",*q++); + fprintf(st,"%3d,",*q++); + fprintf(st,"%3d,",*q++); + fprintf(st,"%3d,",*q++); + fprintf(st,"%3d,",*q++); + fprintf(st,"%3d,\n\t",*q++); + + q = (BYTE *)pic.coloffs; + t = pic.pwid*sizeof(long); + for (n=0;n +#include +#include +#include + +// trim spaces off left of string + +void LeftTrim(char *str) +{ + int k,n; + + k = strlen(str); + if (k) + { + n = strspn(str," \t"); + memmove(str,str+n, k-n+1); + } +} + +// trim spaces off right of string + +void RightTrim(char *str) +{ + int k,n; + + n = k = strlen(str); + if (k) + { + n--; + while (n>=0 && (str[n]==' ' || str[n]=='\t')) n--; + str[n+1]='\0'; + } +} + +// trim spaces off both ends of a string + +void Trim(char *str) +{ + RightTrim(str); + LeftTrim(str); +} + +// If the extension is missing, add the extension ext +// If the extension is present, leave it be + +void SupplyExt(char *str,char *ext) +{ + char *p,*q; + + if (!str || !*str) + return; + + p = strrchr(str,'\\'); // last backslash + q = strrchr(str,'.'); // last period + if (p && q && q