diff options
author | Alexey Dokuchaev <danfe@FreeBSD.org> | 2006-03-16 19:02:02 +0000 |
---|---|---|
committer | Alexey Dokuchaev <danfe@FreeBSD.org> | 2006-03-16 19:02:02 +0000 |
commit | bb78562a8b8e05f2435052cf8faa815e9385190a (patch) | |
tree | e1af16abcad3b6a3e1dca168e1f5b11a96bf9687 /games/lmpc | |
parent | 9185067ee1726f471aceed707e7e14246010735d (diff) | |
download | ports-bb78562a8b8e05f2435052cf8faa815e9385190a.tar.gz ports-bb78562a8b8e05f2435052cf8faa815e9385190a.zip |
Notes
Diffstat (limited to 'games/lmpc')
-rw-r--r-- | games/lmpc/Makefile | 52 | ||||
-rw-r--r-- | games/lmpc/distinfo | 3 | ||||
-rw-r--r-- | games/lmpc/files/lmpc.html | 7893 | ||||
-rw-r--r-- | games/lmpc/files/patch-src+quake3+code+game+q_shared.h | 75 | ||||
-rw-r--r-- | games/lmpc/pkg-descr | 9 |
5 files changed, 8032 insertions, 0 deletions
diff --git a/games/lmpc/Makefile b/games/lmpc/Makefile new file mode 100644 index 000000000000..1c508c6c190c --- /dev/null +++ b/games/lmpc/Makefile @@ -0,0 +1,52 @@ +# New ports collection makefile for: Litte Movie Processing Centre +# Date created: 16 Mar 2006 +# Whom: Alexey Dokuchaev <danfe@FreeBSD.org> +# +# $FreeBSD$ +# + +PORTNAME= lmpc +PORTVERSION= 3.4.1 +CATEGORIES= games +MASTER_SITES= ${MASTER_SITE_SOURCEFORGE} +MASTER_SITE_SUBDIR= ${PORTNAME} + +MAINTAINER= danfe@FreeBSD.org +COMMENT= A tool to manipulate games demo recordings + +GNU_CONFIGURE= yes +USE_GMAKE= yes + +SCRIPTS= dema dm2cat procdm2.pl +PROGRAMS= dbs demcut lmpc +PORTDOCS= README lmpc.html +PLIST_FILES= ${SCRIPTS:S/^/bin\//} ${PROGRAMS:S/^/bin\//} + +.include <bsd.port.pre.mk> + +.if ${ARCH} != "i386" +IGNORE= assumes sizeof(long) == 4 +.endif + +pre-patch: .SILENT + ${REINPLACE_CMD} -e 's,bin doc src spec,bin src,' ${WRKSRC}/Makefile.in + # Include <sys/types.h> before <sys/shm.h>, at least alpha needs it + ( ${ECHO_CMD} 37t33 ; ${ECHO_CMD} 38d ; ${ECHO_CMD} wq ) | \ + ${ED} -s ${WRKSRC}/src/dbs.c + +do-install: +.for s in ${SCRIPTS} + ${INSTALL_SCRIPT} ${WRKSRC}/bin/${s} ${PREFIX}/bin +.endfor +.for p in ${PROGRAMS} + ${INSTALL_PROGRAM} ${WRKSRC}/src/${p} ${PREFIX}/bin +.endfor +.if !defined(NOPORTDOCS) + @${MKDIR} ${DOCSDIR} + ${INSTALL_DATA} ${WRKSRC}/README ${DOCSDIR} + ${INSTALL_DATA} ${FILESDIR}/lmpc.html ${DOCSDIR} +.endif + +ED?= /bin/ed + +.include <bsd.port.post.mk> diff --git a/games/lmpc/distinfo b/games/lmpc/distinfo new file mode 100644 index 000000000000..4f7b0ed9acc8 --- /dev/null +++ b/games/lmpc/distinfo @@ -0,0 +1,3 @@ +MD5 (lmpc-3.4.1.tar.gz) = c2abe875c5052f0b0b5f9a7cf4d270bb +SHA256 (lmpc-3.4.1.tar.gz) = 3e34b719641dbf69f1e2010ac9068b792817d10878104af9416d577cb65b6c20 +SIZE (lmpc-3.4.1.tar.gz) = 486358 diff --git a/games/lmpc/files/lmpc.html b/games/lmpc/files/lmpc.html new file mode 100644 index 000000000000..802561ba4e88 --- /dev/null +++ b/games/lmpc/files/lmpc.html @@ -0,0 +1,7893 @@ +<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> +<HTML +><HEAD +><TITLE +>The Little Movie Processing Centre</TITLE +><META +NAME="GENERATOR" +CONTENT="Modular DocBook HTML Stylesheet Version 1.79"></HEAD +><BODY +CLASS="ARTICLE" +BGCOLOR="#FFFFFF" +TEXT="#000000" +LINK="#0000FF" +VLINK="#840084" +ALINK="#0000FF" +><DIV +CLASS="ARTICLE" +><DIV +CLASS="TITLEPAGE" +><H1 +CLASS="TITLE" +><A +NAME="AEN2" +>The Little Movie Processing Centre</A +></H1 +><H3 +CLASS="AUTHOR" +><A +NAME="AEN4" +>Uwe Girlich,</A +></H3 +><DIV +CLASS="AFFILIATION" +><DIV +CLASS="ADDRESS" +><P +CLASS="ADDRESS" +><CODE +CLASS="EMAIL" +><<A +HREF="mailto:uwe@planetquake.com" +>uwe@planetquake.com</A +>></CODE +></P +></DIV +></DIV +><P +CLASS="PUBDATE" +>v3.4.1, 3/4/2006, (alpha test release)<BR></P +><DIV +><DIV +CLASS="ABSTRACT" +><P +></P +><A +NAME="AEN10" +></A +><P +>This document is the user's guide of The Little Movie Processing Centre +(LMPC). LMPC is a utility to handle DOOM, DOOM ][, HERETIC, HEXEN and +STRIFE LMP files. There is a rudimentary support for Duke Nukem 3D and Redneck +Rampage DMO files. Quake DEM files, QuakeWorld QWD files, Quake II DM2 files +(client recorded, server recorded, relay files), and Quake III Arena DM3 files +are supported too. The DEM file cutter tool (DEMcut), The DEM Text File +Analyser (DEMA), The Demo Broadcasting Server (DBS) and The DM2 file +concatenator (DM2cat) are part of this package as well.</P +><P +></P +></DIV +></DIV +><HR></DIV +><DIV +CLASS="TOC" +><DL +><DT +><B +>Table of Contents</B +></DT +><DT +>1. <A +HREF="#AEN12" +>Introduction</A +></DT +><DT +>2. <A +HREF="#AEN27" +>LMPC, The Little Movie Processing Centre</A +></DT +><DD +><DL +><DT +>2.1. <A +HREF="#AEN29" +>Introduction</A +></DT +><DT +>2.2. <A +HREF="#AEN38" +>Command line parameters</A +></DT +><DD +><DL +><DT +>2.2.1. <A +HREF="#AEN48" +>Syntax description</A +></DT +><DT +>2.2.2. <A +HREF="#AEN62" +>Information about a LMP, DMO, DEM, QWD, DM2 or DM3 file</A +></DT +><DT +>2.2.3. <A +HREF="#AEN89" +>LMP/DMO/DEM/QWD/DM2/DM3 text converter (decompiler)</A +></DT +><DT +>2.2.4. <A +HREF="#AEN142" +>LMP/DEM/QWD/DM2/MD3 binary converter (compiler)</A +></DT +><DT +>2.2.5. <A +HREF="#AEN170" +>LMP file version change</A +></DT +><DT +>2.2.6. <A +HREF="#AEN199" +>LMP file player's view change</A +></DT +><DT +>2.2.7. <A +HREF="#AEN227" +>LMP file ``Wait'' (<TT +CLASS="LITERAL" +>WT</TT +>) tics addition</A +></DT +><DT +>2.2.8. <A +HREF="#AEN264" +>LMP file clean-up: ``Pause'' (<TT +CLASS="LITERAL" +>PS</TT +>, <TT +CLASS="LITERAL" +>PE</TT +>) tics</A +></DT +><DT +>2.2.9. <A +HREF="#AEN305" +>LMP file clean-up: ``Save Game'' (<TT +CLASS="LITERAL" +>SG</TT +>) tics</A +></DT +><DT +>2.2.10. <A +HREF="#AEN336" +>DEM/DM2 file repair: multi-level files</A +></DT +><DT +>2.2.11. <A +HREF="#AEN369" +>Game type determination</A +></DT +></DL +></DD +><DT +>2.3. <A +HREF="#AEN415" +>Bugs and limitations</A +></DT +></DL +></DD +><DT +>3. <A +HREF="#DEMA" +>DEMA, The DEM Text File Analyser</A +></DT +><DT +>4. <A +HREF="#DEMCUT" +>DEMcut, The DEM file cutter tool</A +></DT +><DD +><DL +><DT +>4.1. <A +HREF="#AEN444" +>Introduction</A +></DT +><DT +>4.2. <A +HREF="#AEN449" +>Batch usage</A +></DT +><DT +>4.3. <A +HREF="#AEN454" +>Interactive usage</A +></DT +><DT +>4.4. <A +HREF="#AEN471" +>Commands</A +></DT +><DD +><DL +><DT +>4.4.1. <A +HREF="#AEN476" +>Help</A +></DT +><DT +>4.4.2. <A +HREF="#AEN491" +>Output file</A +></DT +><DT +>4.4.3. <A +HREF="#AEN518" +>DEM file</A +></DT +><DT +>4.4.4. <A +HREF="#AEN548" +>Speed</A +></DT +><DT +>4.4.5. <A +HREF="#AEN581" +>Time</A +></DT +><DT +>4.4.6. <A +HREF="#AEN612" +>Loop</A +></DT +><DT +>4.4.7. <A +HREF="#AEN644" +>CD track</A +></DT +><DT +>4.4.8. <A +HREF="#AEN670" +>Frame</A +></DT +><DT +>4.4.9. <A +HREF="#AEN702" +>Range</A +></DT +><DT +>4.4.10. <A +HREF="#DEMCUTM" +>Multi-player preparing</A +></DT +><DT +>4.4.11. <A +HREF="#AEN776" +>Interactive mode</A +></DT +><DT +>4.4.12. <A +HREF="#AEN810" +>Quit</A +></DT +></DL +></DD +><DT +>4.5. <A +HREF="#AEN823" +>Example</A +></DT +><DT +>4.6. <A +HREF="#AEN832" +>Problems, ideas and everything</A +></DT +></DL +></DD +><DT +>5. <A +HREF="#AEN841" +>DBS, The Demo Broadcasting Server</A +></DT +><DD +><DL +><DT +>5.1. <A +HREF="#AEN843" +>Introduction</A +></DT +><DT +>5.2. <A +HREF="#AEN847" +>Command line parameters</A +></DT +><DD +><DL +><DT +>5.2.1. <A +HREF="#AEN852" +>Syntax description</A +></DT +><DT +>5.2.2. <A +HREF="#AEN866" +>Version</A +></DT +><DT +>5.2.3. <A +HREF="#AEN879" +>Port</A +></DT +><DT +>5.2.4. <A +HREF="#AEN892" +>Maximum number of players</A +></DT +></DL +></DD +><DT +>5.3. <A +HREF="#AEN906" +>What DBS does</A +></DT +></DL +></DD +><DT +>6. <A +HREF="#DM2CAT" +>DM2cat, The DM2 file concatenator</A +></DT +><DT +>7. <A +HREF="#LMPSOURCE" +>LS format</A +></DT +><DD +><DL +><DT +>7.1. <A +HREF="#AEN924" +>Introduction</A +></DT +><DT +>7.2. <A +HREF="#AEN955" +>Header Area</A +></DT +><DT +>7.3. <A +HREF="#AEN1093" +>Data Area</A +></DT +><DD +><DL +><DT +>7.3.1. <A +HREF="#AEN1101" +>Movements</A +></DT +><DT +>7.3.2. <A +HREF="#AEN1198" +>Use (LMP only)</A +></DT +><DT +>7.3.3. <A +HREF="#AEN1241" +>Fly and Look (HERETIC and HEXEN only)</A +></DT +><DT +>7.3.4. <A +HREF="#AEN1282" +>Use Artifact (HERETIC and HEXEN only)</A +></DT +><DT +>7.3.5. <A +HREF="#AEN1415" +>STRIFE Artifacts</A +></DT +><DT +>7.3.6. <A +HREF="#AEN1479" +>Jump (HEXEN and STRIFE only)</A +></DT +><DT +>7.3.7. <A +HREF="#AEN1492" +>STRIFE actions</A +></DT +><DT +>7.3.8. <A +HREF="#AEN1533" +>Use (DMO only)</A +></DT +><DT +>7.3.9. <A +HREF="#AEN1660" +>Special Codes</A +></DT +></DL +></DD +></DL +></DD +><DT +>8. <A +HREF="#DEMSOURCE" +>DEM source format</A +></DT +><DT +>9. <A +HREF="#QWDSOURCE" +>QWD source format</A +></DT +><DT +>10. <A +HREF="#DM2SOURCE" +>DM2 source format</A +></DT +><DT +>11. <A +HREF="#DM3SOURCE" +>DM3 source format</A +></DT +><DT +>12. <A +HREF="#AEN1703" +>Some links and further information</A +></DT +><DT +>13. <A +HREF="#AEN1729" +>History and future of LMPC</A +></DT +></DL +></DIV +><DIV +CLASS="SECT1" +><H2 +CLASS="SECT1" +><A +NAME="AEN12" +>1. Introduction</A +></H2 +><P +>LMPC is the name of the complete package and the name of the biggest +parts in it: The Little Movie Processing Centre.</P +><P +>LMPC is a collection of utilities to handle old (<=1.4) and new DOOM, +DOOM ][, HERETIC, HEXEN and STRIFE LMP files. There is support for +Duke Nukem 3D and Redneck Rampage DMO files, Quake DEM files, +QuakeWorld QWD files, Quake II DM2 files (client recorded, server +recorded, and relay files), and Quake III Arena DM3 files too. For Quake II +relay files, read the home page of the Quake II Relay project by Conor Davis +(<A +HREF="mailto:cedavis@planetquake.com" +TARGET="_top" +>cedavis@planetquake.com</A +>) +<A +HREF="http://www.planetquake.com/relay/" +TARGET="_top" +>http://www.planetquake.com/relay/</A +></P +><P +>You can download the package from my +<A +HREF="http://www.planetquake.com/demospecs" +TARGET="_top" +>Demo Specs page</A +>.</P +><P +>It is based upon the information in the +<A +HREF="http://www.planetquake.com/demospecs/lmp" +TARGET="_top" +>Unofficial LMP format description</A +>, the +<A +HREF="http://www.planetquake.com/demospecs/dmo" +TARGET="_top" +>Unofficial DMO format description</A +>, the +<A +HREF="http://www.planetquake.com/demospecs/dem" +TARGET="_top" +>Unofficial DEM format description</A +>, the +<A +HREF="http://www.planetquake.com/demospecs/qwd" +TARGET="_top" +>Unofficial QWD format description</A +> and the +<A +HREF="http://www.planetquake.com/demospecs/dm2" +TARGET="_top" +>Unofficial DM2 format description</A +>.</P +><P +>Read the apropriate document to find out the exact version numbers +supported by LMPC. I write the format description and the program at the same +time; so if it is described in the specs document, it is in general supported +by the LMPC program.</P +></DIV +><DIV +CLASS="SECT1" +><HR><H2 +CLASS="SECT1" +><A +NAME="AEN27" +>2. LMPC, The Little Movie Processing Centre</A +></H2 +><DIV +CLASS="SECT2" +><H3 +CLASS="SECT2" +><A +NAME="AEN29" +>2.1. Introduction</A +></H3 +><P +>With LMPC you can get information about a LMP, DMO, DEM, QWD, DM2, or DM3 +file, change the version +and viewing player's number, add some wait tics at the end, remove the +pause tics, clear the ``Save Game'' tics in LMP files +and (this is the main part) you can compile and +decompile a LMP, DMO, DEM, QWD, DM2, or DM3 from and to a LS file. LS stands +for ``<SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>L</I +></SPAN +>MP <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>S</I +></SPAN +>ource''. +To reduce the amount of new abbreviations I call the ``DMO Source'' LS too. +The language is similar and will be treated in the same way. +The real LS language is documented at full +length in the section <A +HREF="#LMPSOURCE" +>Section 7</A +>. +The ``DEM Source'' (see section <A +HREF="#DEMSOURCE" +>Section 8</A +>) +and all the more the ``QWD Source'' (see section <A +HREF="#QWDSOURCE" +>Section 9</A +>) is totally different but I call it LS anyway. +The same holds for Quake II DM2 (see section <A +HREF="#DM2SOURCE" +>Section 10</A +>) and +Quake III Areana DM3 files.</P +></DIV +><DIV +CLASS="SECT2" +><HR><H3 +CLASS="SECT2" +><A +NAME="AEN38" +>2.2. Command line parameters</A +></H3 +><P +>LMPC is a command line oriented program. It uses the +<TT +CLASS="LITERAL" +>getopt_long()</TT +> function for the command line parsing. </P +><P +>The LMP file convert options +(<TT +CLASS="LITERAL" +>--change-version</TT +>, <TT +CLASS="LITERAL" +>--change-player</TT +>, +<TT +CLASS="LITERAL" +>--add-WT</TT +>, <TT +CLASS="LITERAL" +>--remove-pause</TT +> and <TT +CLASS="LITERAL" +>--clear-save</TT +>) can be +used together.</P +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN48" +>2.2.1. Syntax description</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>lmpc</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>If you start LMPC without any command line parameters you +receive the following syntax message: + +<PRE +CLASS="SCREEN" +>Little Movie Processing Centre +LMPC (c) U. Girlich, 1994-2006, Release 3.4.1 3/4/2006 (alpha test release) +lmpc [option ...] filename [filename ...] +-h, --help display this help and exit. +-V, --version output version information and exit. +-i, --info prints out information about the LMP-files. +-s, --to-txt binary/text to text conversion. +-l, --to-bin binary/text, ... to binary conversion. +-v, --change-version VERSION changes the version of a LMP-file to VERSION + (0 means old DOOM). +-p, --change-player PLAYER changes the recording player of a LMP-file to + PLAYER (0..3). +-w, --add-WT SECONDS adds SECONDS (int) WT game tics to the LMP file +-r, --remove-pause removes the game tics between PS and PE. +-c, --clear-save clears SG tics. +-f, --fix-multi fixes multi-level DEM and DM2 files. +-t, --tic FROM(,|:)TO converts only a part of the LMP-file + (in connection with -s only). +-g, --game GAME forces game (GAME=DOOM,DOOM2,HERETIC,HEXEN,STRIFE + DUKE,REDNECK,QUAKE,QUAKEWORLD,QUAKE2,QUAKE3) + short: D2HXSNRQWqA (only with -(i|s|v|p|w|r|c)). +-m, --mark-step STEP marks every STEPth tic in the LS file (-s only) + STEP=0 doesn't mark any game tic; default: STEP=1.</PRE +> </P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN62" +>2.2.2. Information about a LMP, DMO, DEM, QWD, DM2 or DM3 file</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>lmpc [--info|-i] infile [infile ...]</TT +></P +></DD +><DT +>Input File:</DT +><DD +><P +><TT +CLASS="LITERAL" +>infile</TT +>s</P +></DD +><DT +>Description:</DT +><DD +><P +>LMPC reads each <TT +CLASS="LITERAL" +>infile</TT +> and prints out some information +like game, version number, episode, map, skill, +number of players, deathmatch/altdeath, nomonsters etc. +Please note: in the old DOOM format there is no version +information, so if you check e.g. a 1.2 LMP file you receive +only the vague information v<1.4 instead of v1.2. +LMPC doesn't report any version for HERETIC and HEXEN LMP files.</P +><P +>This option works for DMO files too. They will be detected automatically +but you can use the <TT +CLASS="LITERAL" +>--game DUKE</TT +> option as well.</P +><P +>This option works for DEM, QWD, DM2 and DM3 files too. They will be +detected automatically +but you can use the <TT +CLASS="LITERAL" +>--game QUAKE</TT +>, +<TT +CLASS="LITERAL" +>--game QUAKEWORLD</TT +>, +<TT +CLASS="LITERAL" +>--game QUAKE2</TT +>, and +<TT +CLASS="LITERAL" +>--game QUAKE3</TT +>, +option as well. The information +on DEM, QWD, DM2, and DM3 files nearly zero beside the information that it is +actually a DEM, QWD, DM2, or DM3 file and the number of frames in binary DEM, +QWD, DM2, or DM3 files.</P +><P +>To get more information of a DEM file convert it into a text file and use +DEMA, The DEM Text File Analyser.</P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN89" +>2.2.3. LMP/DMO/DEM/QWD/DM2/DM3 text converter (decompiler)</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>lmpc (--to-txt|-s) [(--tic|-t) FROM(,|:)TO] [(--mark-step|-m) STEP] infile txtfile</TT +></P +></DD +><DT +>Input File:</DT +><DD +><P +><TT +CLASS="LITERAL" +>infile</TT +></P +></DD +><DT +>Output File:</DT +><DD +><P +><TT +CLASS="LITERAL" +>txtfile</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>LMPC reads the file <TT +CLASS="LITERAL" +>infile</TT +>, converts it to +the corresponding text format and stores the result in the text file +<TT +CLASS="LITERAL" +>txtfile</TT +>. <TT +CLASS="LITERAL" +>infile</TT +> may +be a LMP binary, DMO binary, DEM binary, DEM text, QWD binary, QWD text, +DM2 binary, DM2 text, DM3 binary or DM3 text file. Most of the additional +options do work with binary LMP files only.</P +><P +>If the <TT +CLASS="LITERAL" +>--tic</TT +> option is used, only the part between gametic +<TT +CLASS="LITERAL" +>FROM</TT +> and <TT +CLASS="LITERAL" +>TO</TT +> (inclusive) will be stored in the LS file. +A missing <TT +CLASS="LITERAL" +>FROM</TT +> means the start of the LMP file and +a missing <TT +CLASS="LITERAL" +>TO</TT +> means the end of the LMP file. +<TT +CLASS="LITERAL" +>FROM</TT +> and <TT +CLASS="LITERAL" +>TO</TT +> are separated by a comma (<TT +CLASS="LITERAL" +>,</TT +>) +or a colon (<TT +CLASS="LITERAL" +>:</TT +>). The MS-DOS version may have difficulties with comma +as a separator because <TT +CLASS="LITERAL" +>COMMAND.COM</TT +> (<TT +CLASS="LITERAL" +>4dos</TT +> as well) +splits a command line at spaces and commas. The <TT +CLASS="LITERAL" +>TO</TT +> part will +become a different argument and might be interpreted as a file name. </P +><P +>LMPC appends at the end of the LS file some useful additional +information. For each player there is a statistics about his +favourite movement codes and the portion of <TT +CLASS="LITERAL" +>WT</TT +>. Since you can +achieve with keyboard/joystick only a few special movement codes, +is is very easy to detect, if the player used a keyboard or a +mouse. Some newbies don't use strafe, so LMPC shows also this +handicap. The statistic takes in account always the full LMP file.</P +><P +>From the favourite movement codes you can easily deduce the +number behind a prospective <TT +CLASS="LITERAL" +>-turbo</TT +> parameter.</P +><P +>If the <TT +CLASS="LITERAL" +>--mark-step</TT +> option is used LMPC will mark every +<TT +CLASS="LITERAL" +>STEP</TT +>th +game tic with the tic-number and the current time. The default <TT +CLASS="LITERAL" +>STEP</TT +> +value is 1. If <TT +CLASS="LITERAL" +>STEP</TT +>=0 no marks are printed at all.</P +><P +>Any <TT +CLASS="LITERAL" +>--mark-step</TT +> option in conjunction with a binary DEM, QWD and +DM2 files is a +special debug-option. It includes in the text file the frame number and the +starting address of all messages. +This option may be removed or changed in future releases.</P +><P +>The <TT +CLASS="LITERAL" +>--fix-multi</TT +> option can be used together with <TT +CLASS="LITERAL" +>--to-txt</TT +> +to repair the broken multi-level DEM and DM2 files.</P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN142" +>2.2.4. LMP/DEM/QWD/DM2/MD3 binary converter (compiler)</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>lmpc (--to-bin|-l) infile [infile ...] binfile</TT +></P +></DD +><DT +>Input File:</DT +><DD +><P +><TT +CLASS="LITERAL" +>infile</TT +>s</P +></DD +><DT +>Output File:</DT +><DD +><P +><TT +CLASS="LITERAL" +>binfile</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>LMPC reads the first file, determines the game type and compiles a +binary file out of all the files on the command line. The binary (destination) +file is always the last argument. </P +><P +>This option works with LMP text files, DEM text, DEM binary, QWD text, +QWD binary, DM2 text, DM2 binary, DM3 text, and DM3 binary files as +input files only. LMPC can handle more than 1 input file with LMP text files +only.</P +><P +>For combination of DEM files use DEMcut.</P +><P +>The <TT +CLASS="LITERAL" +>--fix-multi</TT +> option can be used together with <TT +CLASS="LITERAL" +>--to-bin</TT +> +to repair the broken multi-level DEM and DM2 files.</P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN170" +>2.2.5. LMP file version change</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>lmpc (--change-version|-v) VERSION lmpfile1 [lmpfile2]</TT +></P +></DD +><DT +>Input File:</DT +><DD +><P +><TT +CLASS="LITERAL" +>lmpfile1</TT +></P +></DD +><DT +>Output File:</DT +><DD +><P +><TT +CLASS="LITERAL" +>lmpfile1</TT +> or <TT +CLASS="LITERAL" +>[lmpfile2]</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>LMPC reads the binary LMP file <TT +CLASS="LITERAL" +>lmpfile1</TT +>, changes the version number +byte in <TT +CLASS="LITERAL" +>lmpfile1</TT +> to the appropriate value or stores the result +in <TT +CLASS="LITERAL" +>lmpfile2</TT +>.</P +><P +>The VERSION can be the version byte itself (0 for the old LMP files) +or anything like 1.4beta, 1.9 or whatever.</P +><P +>There is no guarantee for a special LMP file to work with the new version!!</P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN199" +>2.2.6. LMP file player's view change</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>lmpc (--change-player|-p) PLAYER lmpfile1 [lmpfile2]</TT +></P +></DD +><DT +>Input File:</DT +><DD +><P +><TT +CLASS="LITERAL" +>lmpfile1</TT +></P +></DD +><DT +>Output File:</DT +><DD +><P +><TT +CLASS="LITERAL" +>lmpfile1</TT +> or <TT +CLASS="LITERAL" +>[lmpfile2]</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>LMPC reads the LMP file <TT +CLASS="LITERAL" +>lmpfile1</TT +>, changes the number of the +player (0..3: new DOOM, DOOM ][; 0..7: STRIFE) +with the main view (status bar, sound) in <TT +CLASS="LITERAL" +>lmpfile1</TT +> +or stores the result in <TT +CLASS="LITERAL" +>lmpfile2</TT +>.</P +><P +>To change only the main player byte works only with new LMP files, since old +ones are always recorded from the view of the first player (no. 0) and there +is no information about this in the header.</P +></DD +></DL +></DIV +> </P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN227" +>2.2.7. LMP file ``Wait'' (<TT +CLASS="LITERAL" +>WT</TT +>) tics addition</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>lmpc (--add-WT|-w) SECONDS lmpfile1 [lmpfile2]</TT +></P +></DD +><DT +>Input File:</DT +><DD +><P +><TT +CLASS="LITERAL" +>lmpfile1</TT +></P +></DD +><DT +>Output File:</DT +><DD +><P +><TT +CLASS="LITERAL" +>lmpfile1</TT +> or <TT +CLASS="LITERAL" +>[lmpfile2]</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>LMPC reads the <TT +CLASS="LITERAL" +>lmpfile1</TT +> and adds at the end</P +><P +> <PRE +CLASS="SCREEN" +><TT +CLASS="LITERAL" +>SECONDS</TT +> * 35 * player number</PRE +> </P +><P +>empty (<TT +CLASS="LITERAL" +>WT</TT +>) game tics. +This results in a <TT +CLASS="LITERAL" +>SECONDS</TT +> seconds longer LMP file.</P +><P +>With <TT +CLASS="LITERAL" +>lmpfile2</TT +> the result +will be written in <TT +CLASS="LITERAL" +>lmpfile2</TT +>. Without this parameter, +<TT +CLASS="LITERAL" +>lmpfile1</TT +> will be changed.</P +><P +>This option is very useful for contest LMP files with a long visible summary +screen.</P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN264" +>2.2.8. LMP file clean-up: ``Pause'' (<TT +CLASS="LITERAL" +>PS</TT +>, <TT +CLASS="LITERAL" +>PE</TT +>) tics</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>lmpc (--remove-pause|-r) lmpfile1 [lmpfile2]</TT +></P +></DD +><DT +>Input File:</DT +><DD +><P +><TT +CLASS="LITERAL" +>lmpfile1</TT +></P +></DD +><DT +>Output File:</DT +><DD +><P +><TT +CLASS="LITERAL" +>[lmpfile2]</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>LMPC reads the <TT +CLASS="LITERAL" +>lmpfile1</TT +> and copies all game tics to +<TT +CLASS="LITERAL" +>lmpfile2</TT +>. During the copy process LMPC scans the contents +for Pause Start game tics (<TT +CLASS="LITERAL" +>PS</TT +>) and Pause End game tics +(<TT +CLASS="LITERAL" +>PE</TT +>).</P +><P +>The <TT +CLASS="LITERAL" +>PS</TT +> game tic will be copied to <TT +CLASS="LITERAL" +>lmpfile2</TT +> but +with an empty ``use byte''; the game tics between <TT +CLASS="LITERAL" +>PS</TT +> and +<TT +CLASS="LITERAL" +>PE</TT +> (inclusive <TT +CLASS="LITERAL" +>PE</TT +>) wont be copied.</P +><P +>Without the second filename LMPC will write to a temporary file and replaces +at the end <TT +CLASS="LITERAL" +>lmpfile1</TT +>.</P +><P +>The game tic numbers of <TT +CLASS="LITERAL" +>PS</TT +> and <TT +CLASS="LITERAL" +>PE</TT +> are +printed during the conversion. </P +><P +>You may have difficulties with the play back of such a patched LMP file. +This is the case if you patch a LMP file of a level with a revenant +(skeleton). The revenant uses a random number generator to choose between a +self controlled rocket and a normal rocket. The input of this generator are the +last two bits of the game tic number. This means you have to make sure that +you cut a number of game tics divisible by 4. In general this is impossible +so do not use pause in levels with a revenant. An arch vile makes similar +difficulties but I don't even know how to prevent it.</P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN305" +>2.2.9. LMP file clean-up: ``Save Game'' (<TT +CLASS="LITERAL" +>SG</TT +>) tics</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>lmpc (--clear-save|-c) lmpfile1 [lmpfile2]</TT +></P +></DD +><DT +>Input File:</DT +><DD +><P +><TT +CLASS="LITERAL" +>lmpfile1</TT +></P +></DD +><DT +>Output File:</DT +><DD +><P +><TT +CLASS="LITERAL" +>[lmpfile2]</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>LMPC reads the <TT +CLASS="LITERAL" +>lmpfile1</TT +> and copies all game tics to +<TT +CLASS="LITERAL" +>lmpfile2</TT +>. During the copy process LMPC scans the contents +for Save Game game tics (<TT +CLASS="LITERAL" +>SG</TT +>). Every <TT +CLASS="LITERAL" +>SG</TT +> command will be +cleared. +With <TT +CLASS="LITERAL" +>lmpfile2</TT +> the result +will be written in <TT +CLASS="LITERAL" +>lmpfile2</TT +>. Without this parameter, +<TT +CLASS="LITERAL" +>lmpfile1</TT +> will be changed.</P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN336" +>2.2.10. DEM/DM2 file repair: multi-level files</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>lmpc (--fix-multi|-f) demofile</TT +></P +></DD +><DT +>Input File:</DT +><DD +><P +><TT +CLASS="LITERAL" +>demofile</TT +></P +></DD +><DT +>Output File:</DT +><DD +><P +><TT +CLASS="LITERAL" +>demofile</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>Quake and Quake II have problems with the playback of multi-level recordings. +They usually stopp at the first level change.</P +><P +>Read more about the background in the <A +HREF="http://www.planetquake.com/demospecs/faq/faq-2.html#ss2.1" +TARGET="_top" +>recording FAQ</A +>.</P +><P +>If the <TT +CLASS="LITERAL" +>--fix-multi</TT +> parameter comes without any conversion option on +the command-line, LMPC repairs the demo file in question "in-place". This +means LMPC overwrites the bad commands with <TT +CLASS="LITERAL" +>nop</TT +> or <TT +CLASS="LITERAL" +>print</TT +>.</P +><P +>The <TT +CLASS="LITERAL" +>--fix-multi</TT +> option can be used together with <TT +CLASS="LITERAL" +>--to-bin</TT +> +and <TT +CLASS="LITERAL" +>--to-txt</TT +>. LMPC removes the offending commands in this case.</P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN369" +>2.2.11. Game type determination</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +> <PRE +CLASS="SCREEN" +>lmpc (--info| + --change-version| + --change-player| + --to-txt| + --add-WT| + --remove-pause) (--game|-g) GAME binfile [filename ...]</PRE +> </P +></DD +><DT +>Input File:</DT +><DD +><P +><TT +CLASS="LITERAL" +>binfile</TT +></P +></DD +><DT +>Output File:</DT +><DD +><P +>action dependent</P +></DD +><DT +>Description:</DT +><DD +><P +>LMPC determines the game type of a LMP (binary), DMO (binary), DEM +(text and binary), QWD (text and binary), DM2 (text and binary), +or DM3 (text and binary) file very good. But it can't good +distinguish between HERETIC/HEXEN and old DOOM LMP files. Moreover it +can't distinguish at all between DOOM ][ Map 1-9 and new DOOM +Episode 1 +LMP files. The latter case is not very important but the first is more +severe. To force LMPC to use a particular game type use <TT +CLASS="LITERAL" +>--game</TT +>. +<TT +CLASS="LITERAL" +>GAME</TT +> can be <TT +CLASS="LITERAL" +>DOOM</TT +>, <TT +CLASS="LITERAL" +>DOOM2</TT +>, +<TT +CLASS="LITERAL" +>HERETIC</TT +>, <TT +CLASS="LITERAL" +>HEXEN</TT +>, <TT +CLASS="LITERAL" +>STRIFE</TT +>, <TT +CLASS="LITERAL" +>DUKE</TT +>, +<TT +CLASS="LITERAL" +>REDNECK</TT +>, <TT +CLASS="LITERAL" +>QUAKE</TT +>, +<TT +CLASS="LITERAL" +>QUAKEWORLD</TT +>, +<TT +CLASS="LITERAL" +>QUAKE2</TT +> or +<TT +CLASS="LITERAL" +>QUAKE3</TT +> +or the short form <TT +CLASS="LITERAL" +>D</TT +>, <TT +CLASS="LITERAL" +>2</TT +>, <TT +CLASS="LITERAL" +>H</TT +>, <TT +CLASS="LITERAL" +>X</TT +>, <TT +CLASS="LITERAL" +>S</TT +>, +<TT +CLASS="LITERAL" +>N</TT +>, <TT +CLASS="LITERAL" +>R</TT +>, <TT +CLASS="LITERAL" +>Q</TT +>, <TT +CLASS="LITERAL" +>W</TT +>, +<TT +CLASS="LITERAL" +>q</TT +>, or +<TT +CLASS="LITERAL" +>A</TT +>.</P +></DD +></DL +></DIV +></P +></DIV +></DIV +><DIV +CLASS="SECT2" +><HR><H3 +CLASS="SECT2" +><A +NAME="AEN415" +>2.3. Bugs and limitations</A +></H3 +><P +>To distinguish between old DOOM, HERETIC and HEXEN LMP files I use a simple +turn-byte-average algorithm. This fails, if the LMP file is too short or you +turn +always in the same direction and never go forward. Due to the header +change in HEXEN 1.1, it is nearly impossible to distinguish fast between +HERETIC and HEXEN 1.1 LMP files. LMPC looks then at the file date and treats +files +with an creation year >=1996 as HEXEN and all others as HERETIC files. This +is totally stupid but what else can I do?</P +><P +>LMPC supports client side recorded DM2 files, DM2 files recorded by the +console command <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>serverrecord</I +></SPAN +> (working from Quake II version 3.15) +and the RLA file used by the Quake II Relay project. +One single DM2 file can even contain parts from all these sides. +Quake II may only playback client side recordings.</P +><P +>If you produced a good recording file (at least some minutes and with +some action) and LMPC can not detect the game type, please send it to me. +Up to a corrected version make sure to use the <TT +CLASS="LITERAL" +>--game</TT +> option. +Some hints to solve the problem are welcome as well.</P +><P +>The <TT +CLASS="LITERAL" +>*number</TT +> repeat code in LS files really repeats this line +<TT +CLASS="LITERAL" +>number</TT +> times and does not care about multi player-game tics.</P +><P +>The MS-DOS binary of LMPC converts all file names to lower case to simplify +the name +handling. The <TT +CLASS="LITERAL" +>tolower</TT +> C-function doesn't converts any kind of +special characters like ö or è. This can cause some severe +data lost.</P +><P +>I use a redundancy in DEM files to detect Quake +cheaters. My simple check will +fail if the player gets hit and he gets a medikit at the very same time. +This can happen, if a player is standing over a medikit, when the hit +comes.</P +><P +>Some versions of Quake use a slightly different DEM format. LMPC/DEMcut +can read this ``new'' format but they write the old 1.06 format. +SQuake 1.07 for Linux behaves similar: it writes the old format but can play +back the old and the new format.</P +><P +>Keygrip 2 writes DM2 files with non-conform bit mask values in +<SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>sound</I +></SPAN +>, <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>spawnbaseline</I +></SPAN +> and <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>packetentities</I +></SPAN +> +messages. LMPC tries its best to decompile even such bad files too but +it may well be, that some other messages with bit masks have the same +problem.</P +><P +>Quake III Arena uses bit fields for all its game messages. A +server-to-client-message (or a block in a DM3 file) uses always full bytes. It +follows, that some bits in the last byte are not used by the game. LMPC set +these bits always to zero but Quake III Arena does not. Therefore it is +impossible for LMPC to reproduce a totally identical DM3 file. The file from +LMPC will behave the same as the original but some bits are zero.</P +><P +>The DM3 text parser is really a joke. I implemented it in about two hours. +It cannot cope with non-ordered entries in any block. Thus be sure not to +shuffle the entries! If this happens, the program will certainly crash or at +least not work as expected. If this is a problem, I can always extend the old +parser to parse DM3 texts too but this would take at least a week of hard +work.</P +></DIV +></DIV +><DIV +CLASS="SECT1" +><HR><H2 +CLASS="SECT1" +><A +NAME="DEMA" +>3. DEMA, The DEM Text File Analyser</A +></H2 +><P +>To analyse a DEM file convert it into a text file and use DEMA. DEMA is a +very simple Perl script, which may give you the time per level, the level name +and the average frame time (client update time).</P +><P +>This Perl script is total incomplete but it may be helpful yet. There are +no command line switches. You have to edit the script to change the summary.</P +><P +>I wrote DEMA in Perl, which is very good at pattern matching and extraction. +I will <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>never</I +></SPAN +> write a C version, so write one yourself or install Perl.</P +><P +>The main aim of DEMA is to show a sample framework for any kind of +DEM text analysing.</P +></DIV +><DIV +CLASS="SECT1" +><HR><H2 +CLASS="SECT1" +><A +NAME="DEMCUT" +>4. DEMcut, The DEM file cutter tool</A +></H2 +><DIV +CLASS="SECT2" +><H3 +CLASS="SECT2" +><A +NAME="AEN444" +>4.1. Introduction</A +></H3 +><P +>DEMcut is the DEM file cutter tool. I don't know anything about movie cutting +whatsoever but DEMcut should help you a lot cutting parts out of a DEM file, +putting different DEM files together or using some special effects like +slow-motion or backward moving of particular scenes. </P +><P +>DEMcut does all this and much more in a very easy way: +It gets the names of all DEM files to be processed from the command +line and reads from ``Standard In'' commands to manipulate them. +During the manipulation DEMcut writes one or more DEM files. </P +><P +>A good knowledge of DEM files is required to use DEMcut. DEMcut doesn't do +any checks to prevent you from creating non-working files.</P +></DIV +><DIV +CLASS="SECT2" +><HR><H3 +CLASS="SECT2" +><A +NAME="AEN449" +>4.2. Batch usage</A +></H3 +><P +>The easiest way to use DEMcut is with a cutting list batch file. This +file should contain all commands to be processed and can even have some +comments why you did something like you did it. Use any text editor for this +and start DEMcut with an input redirection. + +<PRE +CLASS="SCREEN" +>demcut demfile1.dem demfile2.dem < commands.txt</PRE +> + +DEMcut starts, reads in all DEM files from the command line and reads the +commands from the command file. All messages (every command produces a +message after completion) from DEMcut go to the screen or may be redirected +to a logging file as well. + +<PRE +CLASS="SCREEN" +>demcut demfile1.dem demfile2.dem < commands.txt > output.log</PRE +> </P +></DIV +><DIV +CLASS="SECT2" +><HR><H3 +CLASS="SECT2" +><A +NAME="AEN454" +>4.3. Interactive usage</A +></H3 +><P +>One of the best feature of DEMcut is the possibility to do an interactive +analysis of DEM files. The interactive mode is not compiled in on systems +without support for named pipes. It runs with Unix and Linux but not +on MS-DOS, Win32 etc.</P +><P +>I will describe now the Linux use. +First you have to create a named pipe in the directory where your Quake copy +reads its DEM files from. + +<PRE +CLASS="SCREEN" +>mkfifo fifo.dem</PRE +> + +Now start Quake (make sure to use <TT +CLASS="LITERAL" +>xquake</TT +> and and not +<TT +CLASS="LITERAL" +>xf86quake</TT +>) in a window +as usual and playdemo this named pipe. + +<PRE +CLASS="SCREEN" +>playdemo fifo</PRE +> + +Quake tries now to read a demo out of <TT +CLASS="LITERAL" +>fifo.dem</TT +> but there is nothing +to read in: it stops.</P +><P +>Now comes the appearance of DEMcut. Open a new window and start DEMcut with the +DEM file of your interest. + +<PRE +CLASS="SCREEN" +>demcut mydem.dem</PRE +> + +DEMcut reads in <TT +CLASS="LITERAL" +>mydem.dem</TT +>, does some preprocessing and waits for +input. The first thing to do is to direct all output to the named pipe. + +<PRE +CLASS="SCREEN" +>o fifo.dem</PRE +> + +Now create the start of a normal DEM file with CD track and level +initialisation. + +<PRE +CLASS="SCREEN" +>c -1\n +r 0 2</PRE +> + +It's unbelievable but Quake starts now the level and waits for further +actions. Now play around with different ranges, speed tests or backward +movements. Don't forget to put the disconnect frame at the end. Quake will +usually play immediately what you intend but the Quake client time stands still +after playing, so all the active sound patches will be repeated over and over +and the Quake doesn't redraw its window.</P +><P +>This is the point where the ``interactive mode'' comes in: +DEMcut changes its behaviour with the command + +<PRE +CLASS="SCREEN" +>i 1</PRE +> + +This repeats the last frame sent to Quake but with an ongoing time. +The interactive mode allows you to type in new commands during a range +command.</P +><P +>Now you can fast forward wind and rewind to find out all the frame numbers of +interest. In another window you can now edit your cutting list batch file +and run this file for cutting the final product.</P +></DIV +><DIV +CLASS="SECT2" +><HR><H3 +CLASS="SECT2" +><A +NAME="AEN471" +>4.4. Commands</A +></H3 +><P +>There are not too many commands but they are very powerful. +The command language is line oriented: one line means one command. Comments +start with `<TT +CLASS="LITERAL" +>#</TT +>', empty lines or lines with wrong commands will be +ignored as well. DEMcut prints a short response after finishing a command +to <TT +CLASS="LITERAL" +>stdout</TT +>.</P +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN476" +>4.4.1. Help</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>h</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>DEMcut prints a <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>very</I +></SPAN +> short online help. If `<TT +CLASS="LITERAL" +>i</TT +>' +(interactive mode) isn't listed, your operating system doesn't support named +pipes and the interactive mode is left out.</P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN491" +>4.4.2. Output file</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>o filename</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>Writes further output to this file. The old output file (if there was one) +will be closed. If the output file can't be written (permission denied), +DEMcut bombs back to the OS shell without any warning. I may do a check in +the future.</P +></DD +><DT +>Query syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>o</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>Prints the current output file name.</P +></DD +><DT +>Default value:</DT +><DD +><P +><TT +CLASS="LITERAL" +>demcut.dem</TT +></P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN518" +>4.4.3. DEM file</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>d filename</TT +></P +></DD +><DT +>Description</DT +><DD +><P +>Selects this DEM file as source.</P +></DD +><DT +>Query syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>d</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>Prints the current input DEM file name.</P +></DD +><DT +>Value range:</DT +><DD +><P +>Any DEM file name. DEMcut generates an error, if the file is not a good DEM +file.</P +></DD +><DT +>Default value:</DT +><DD +><P +>First DEM file from the command line. If there was no valid DEM file on the +command line the d query command generates an error.</P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN548" +>4.4.4. Speed</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>s speed</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>Speeds up all further output by this factor. <TT +CLASS="LITERAL" +>speed</TT +>>1 increases +the play-back speed, <TT +CLASS="LITERAL" +>speed</TT +><1 slows the play-back down. </P +></DD +><DT +>Value range:</DT +><DD +><P +><TT +CLASS="LITERAL" +>speed</TT +> may be any positive float value.</P +></DD +><DT +>Query syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>s</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>Prints the current speed.</P +></DD +><DT +>Default value:</DT +><DD +><P +>1.0</P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN581" +>4.4.5. Time</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>t time</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>Sets the current time. </P +></DD +><DT +>Value range:</DT +><DD +><P +><TT +CLASS="LITERAL" +>time</TT +> may be any positive float value.</P +></DD +><DT +>Query syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>t</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>Prints the current time.</P +></DD +><DT +>Default value:</DT +><DD +><P +>0.0</P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN612" +>4.4.6. Loop</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>l loop-count</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>Sets the loop count. Every further frame will be written <TT +CLASS="LITERAL" +>loop-count</TT +> +times to the output. The time goes forward as usual. </P +></DD +><DT +>Value range:</DT +><DD +><P +><TT +CLASS="LITERAL" +>loop-count</TT +> may be any positive integer value.</P +></DD +><DT +>Query syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>l</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>Prints the current loop count.</P +></DD +><DT +>Default value:</DT +><DD +><P +>1</P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN644" +>4.4.7. CD track</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>c track</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>Write the CD track string to the current output. If the CD track +string doesn't end with whitespace (`\t', `\r', `\n', +`\f'), an `\n' will be silently appended. Don't forget this +command at the beginning of every DEM file (like it happened with +finesc5.dem of the Eschaton movie).</P +></DD +><DT +>Query syntax</DT +><DD +><P +><TT +CLASS="LITERAL" +>c</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>Prints the current CD track string.</P +></DD +><DT +>Default value:</DT +><DD +><P +>-1\n</P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN670" +>4.4.8. Frame</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>f frame-number</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>Writes the selected frame to the output. This frame gets the current time. +The time will be increased afterwards by the frame duration divided by the +current speed. The whole process will be repeated as much as the current loop +count states. </P +><P +>The frame command stops in interactive mode a running range command.</P +></DD +><DT +>Value range:</DT +><DD +><P +><TT +CLASS="LITERAL" +>frame-number</TT +> can be any integer number between 0 +and the maximum frame number in the currently selected DEM input file.</P +></DD +><DT +>Query syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>f</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>Prints the current frame number.</P +></DD +><DT +>Default value:</DT +><DD +><P +>0</P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN702" +>4.4.9. Range</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>r range-start range-end</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>Writes the selected range of frames to the output. Every frame gets the current +time. The time will be increased after each frame by the frame duration +divided by the current speed. Every frame will be repeated as much as the +current loop count states. In interactive mode you can use any commands +during a running range command (i.e. speed change). The range command can be +stopped in interactive mode by a new range command or a frame command.</P +></DD +><DT +>Value Range:</DT +><DD +><P +><TT +CLASS="LITERAL" +>range-start</TT +> and <TT +CLASS="LITERAL" +>range-end</TT +> may +be any integer number between 0 and the maximum frame number in the currently +selected DEM input file. <TT +CLASS="LITERAL" +>range-end</TT +> may even be smaller than +<TT +CLASS="LITERAL" +>range-start</TT +>. If they are equal the result is the same as with the +frame command.</P +></DD +><DT +>Query syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>r</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>Prints the current range.</P +></DD +><DT +>Default value:</DT +><DD +><P +>0, last frame number of the first DEM file from the command line.</P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="DEMCUTM" +>4.4.10. Multi-player preparing</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>m multi-start multi-end</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>Grabs out of the defined frame range all <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>updatename</I +></SPAN +> and +<SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>updatecolors</I +></SPAN +> +messages and writes all these messages together with the camera angles of the +last written frame to the output. It doesn't write anything if there +was no <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>updatename</I +></SPAN +> or <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>updatecolors</I +></SPAN +> message in the defined +frame range.</P +><P +>Everyone, who ever tried to concatenate different multi-player DEM files +knows the problem: The ``actors'' log in to the server in a different +order and so they get every time different player numbers. If one tries to +assemble all these files together one will end up with the wrong colour scheme +because all players stick to the colour, number and name from the very first +recording. The only solution is to insert the right name and colour definition +of each part in the final product. And this does the ``<TT +CLASS="LITERAL" +>m</TT +>'' command.</P +></DD +><DT +>Value Range:</DT +><DD +><P +><TT +CLASS="LITERAL" +>multi-start</TT +> and <TT +CLASS="LITERAL" +>multi-end</TT +> may +be any integer number between 0 and the maximum frame number in the currently +selected DEM input file. <TT +CLASS="LITERAL" +>multi-end</TT +> may even be smaller than +<TT +CLASS="LITERAL" +>multi-start</TT +>. </P +></DD +><DT +>Query syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>m</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>Prints the current multi-player range.</P +></DD +><DT +>Default value:</DT +><DD +><P +>0, last frame number of the first DEM file from the command line.</P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN776" +>4.4.11. Interactive mode</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>i inter</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>Toggles the interactive mode. The frame and the range command will be affected +by the interactive mode. This command is not implemented on all systems. +Use the help command (`h') to find it out.</P +><P +>DEMcut continues to write (under certain conditions) the last written frame +with an ongoing time. +This feature is useful for an interactive use only (as the command name +suggests). DEMcut remembers the (real) time, when the last frame written to +Quake is +finished. If up to this time came no new command (this is the normal case in +interactive use) and the interactive mode is on, DEMcut writes the last frame +again. +But the time stamp of this frame goes on and on. So Quake gets always new +frames and doesn't stop. This is extremely important for users with many +overlapping windows (like me): Quake refreshes its window in an normal working +state only. It is very interesting to see what happens in the Quake window, +if it gets always the same frame but the time goes on. This shows us the +different sources of movement: particles (blood traces) are totally moved by +the client (they continue to move ), gibs are frozen in the air (they are +real entities) and the weapon moves up and down as usual (client driven). +DEMcut does not allow to repeat frames which change the <TT +CLASS="LITERAL" +>signon</TT +> number +(frame 0, 1 or 2 of a normal DEM file). Neither does it repeat the +<SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>disconnect</I +></SPAN +> frame. </P +><P +>The range command may be interrupted by other commands. You need this for +looking at the current frame number (frame command without new frame number), +for changing the current playback-speed etc. A new frame or range output +command stops the running range command. </P +></DD +><DT +>Value Range:</DT +><DD +><P +>0 (interactive mode off) or 1 (interactive mode on).</P +></DD +><DT +>Query syntax</DT +><DD +><P +><TT +CLASS="LITERAL" +>i</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>Prints the current interactive mode.</P +></DD +><DT +>Default value:</DT +><DD +><P +>0</P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN810" +>4.4.12. Quit</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>q</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>Closes the output file and quits DEMcut.</P +></DD +></DL +></DIV +></P +></DIV +></DIV +><DIV +CLASS="SECT2" +><HR><H3 +CLASS="SECT2" +><A +NAME="AEN823" +>4.5. Example</A +></H3 +><P +>A very easy task is to create a DEM file, which shows with double speed the +reversed actions of the well-known demo ``Ranger Gone Bad ][: +The Assault'' (created by United Rangers Films).</P +><P +>To do this start DEMcut with + +<PRE +CLASS="SCREEN" +>demcut rgb2.dem</PRE +> + +and type in (or much simpler use a text file and redirection)</P +><P +><TT +CLASS="LITERAL" +># this is a comment, I love comments + +# select the output + +o rgb2rev.dem + +# select the input (not really necessary) + +d rgb2.dem + +# speed things up + +s 2 + +# write the CD track + +c -1\n + +# write the starting frames (level init is in 0,1 and 2) + +r 0 2 + +# write all frames in reversed order (actions are in 3..7330) + +r 7330 3 + +# write the disconnect frame (is the last one) + +f 7331 + +# quit + +q</TT +></P +><P +>This creates the new DEM file <TT +CLASS="LITERAL" +>rgb2rev.dem</TT +> with the desired content.</P +></DIV +><DIV +CLASS="SECT2" +><HR><H3 +CLASS="SECT2" +><A +NAME="AEN832" +>4.6. Problems, ideas and everything</A +></H3 +><P +>The current implementation of DEMcut is full of deficiencies but anyway, it +works. + +<P +></P +><UL +><LI +><P +>The synchronisation between DEM output and the ``real'' time in the +interactive mode is made using polling technique. It should be +<TT +CLASS="LITERAL" +>alarm(2)</TT +> controlled.</P +></LI +><LI +><P +>I'm thinking about the possibility to incorporate the fake Quake +server of DBS in DEMcut to remove the FIFO dependency. +Interactive work could then mean: fiddling at this server and +a Quake client of any architecture serves as a monitoring screen (after +connect to this server at the same or any other machine).</P +></LI +></UL +> </P +></DIV +></DIV +><DIV +CLASS="SECT1" +><HR><H2 +CLASS="SECT1" +><A +NAME="AEN841" +>5. DBS, The Demo Broadcasting Server</A +></H2 +><DIV +CLASS="SECT2" +><H3 +CLASS="SECT2" +><A +NAME="AEN843" +>5.1. Introduction</A +></H3 +><P +>DBS is a fake Quake server, which shows every connected client a DEM file. +This server is absolute alpha code. +It prints a hell of debug messages and doesn't know the full Quake +network protocol. I think the name is crap and I will change it. +Please send me ideas.</P +><P +>The source of DBS relies on some low-level Unix network routines. +I may get it to work in Win32 some day with the Cygwin API but don't expect +a plain Win32 version.</P +></DIV +><DIV +CLASS="SECT2" +><HR><H3 +CLASS="SECT2" +><A +NAME="AEN847" +>5.2. Command line parameters</A +></H3 +><P +>DBS is a command line oriented program. It uses the <TT +CLASS="LITERAL" +>getopt_long</TT +> +library for the command line parsing. DBS doesn't stop for itself. Use +<TT +CLASS="LITERAL" +>Control+C</TT +> to stop it.</P +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN852" +>5.2.1. Syntax description</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>dbs [--help|-h]</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>If you start DBS without any command line parameters or the help +parameters you receive the following syntax message: + +<PRE +CLASS="SCREEN" +>Demo Broadcasting Server +DBS (c) U. Girlich, 1997-98, Release 3.4.1 3/4/2006 (alpha test release) +dbs [option ...] demfile +-h, --help display this help and exit. +-v, --version output version information and exit. +-p, --port defines an UDP port for the server. +-m, --max-player defines the max. number of players.</PRE +> </P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN866" +>5.2.2. Version</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>dbs (--version|-v)</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>DBS prints a version message and quits.</P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN879" +>5.2.3. Port</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>dbs (--port|-p) PORT ...</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>DBS uses by default the UDP port 26000 for the communication. +This value can be overwritten with this option.</P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN892" +>5.2.4. Maximum number of players</A +></H4 +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Syntax:</DT +><DD +><P +><TT +CLASS="LITERAL" +>dbs (--max-players|-m) MAX_PLAYERS ...</TT +></P +></DD +><DT +>Description:</DT +><DD +><P +>DBS allows by default 16 players to connect and view the DEM file. +This value can be overwritten with this option. The internal limit +for the number of players is 255 because the Quake Network protocol +reserves only an <TT +CLASS="LITERAL" +>unsigned char</TT +> for the number of players.</P +></DD +></DL +></DIV +></P +></DIV +></DIV +><DIV +CLASS="SECT2" +><HR><H3 +CLASS="SECT2" +><A +NAME="AEN906" +>5.3. What DBS does</A +></H3 +><P +>Nowadays are so many fake clients out there but not a single fake server. +A proxy is not a real server because it is a client for another server. +So I decided to analyse the network protocol, learnt something about +UDP programming and wrote my own server. I hope to include some parts of +this server into DEMcut, a feature which lacks some GUI DEM file editors up to +now.</P +><P +>DBS mimics the behaviour of a normal Quake server. This means you can +check the server with your favourite spy tool. The next step is to log in. +This works as usual (you get your private UDP port and so on) but DBS ignores +all client movement packets and sends to the client only the converted DEM +packets of a prepared DEM file.</P +><P +>A small problem are the <TT +CLASS="LITERAL" +>camera</TT +> messages in the DEM packets. +They come into the DEM file at the client side and not from +the server over the network. Therefore I included in every packet an +additional <TT +CLASS="LITERAL" +>setangle</TT +> message with the current camera angles.</P +><P +>This means, that you can't get the original DEM file by client (or +proxy) recording.</P +><P +>I hope to stabilise the server much more and think of a selection menu +at the beginning where a client may select the DEM file (``channel'') of +interest. I call it DoD (Demo on Demand).</P +></DIV +></DIV +><DIV +CLASS="SECT1" +><HR><H2 +CLASS="SECT1" +><A +NAME="DM2CAT" +>6. DM2cat, The DM2 file concatenator</A +></H2 +><P +>DM2cat is a simple Perl script to concat multiple binary DM2 files +together to a single multi-level DM2 file.</P +><P +>It does this by simpy removing the last 4 bytes (the <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>endblock</I +></SPAN +>) +from each DM2 file.</P +><P +>The main aim of DM2cat is to show a sample framework for any kind of +binary DM2 file manipulation.</P +></DIV +><DIV +CLASS="SECT1" +><HR><H2 +CLASS="SECT1" +><A +NAME="LMPSOURCE" +>7. LS format</A +></H2 +><P +>This chapter describes the ASCII text based source of a LMP or DMO file. +I created this language for myself. This means neither id Software nor +3D Realms use this for game development or the like. It is simply a way +to show what is in these miraculous recording files.</P +><DIV +CLASS="SECT2" +><HR><H3 +CLASS="SECT2" +><A +NAME="AEN924" +>7.1. Introduction</A +></H3 +><P +>The LMP Source format (LS) is a (ASCII text based) readable description of +the contents of a (binary) LMP or DMO file.</P +><P +>LMPC produces (with <TT +CLASS="LITERAL" +>--to-txt</TT +>) a well formatted LS file. So +you can learn by example. +I hope, that the text parser in LMPC (with <TT +CLASS="LITERAL" +>--to-bin</TT +>) can +parse most LMP source. It can't parse DMO source files. + +<P +></P +><UL +><LI +><P +>The LS language is a line oriented language.</P +></LI +><LI +><P +>Empty lines are ignored.</P +></LI +><LI +><P +>The keywords aren't case sensitive.</P +></LI +><LI +><P +>The characters between <TT +CLASS="LITERAL" +>#</TT +> and ``new line'' will be ignored.</P +></LI +><LI +><P +>``new line'' can be 0x0A or 0x0D0A.</P +></LI +></UL +> </P +><P +>At the very beginning of a LS file (produced by <TT +CLASS="LITERAL" +>lmpc --to-txt</TT +>) +there are some comment lines with derived information: +<P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>LMP</DT +><DD +><P +> <PRE +CLASS="SCREEN" +>DOOM (][) LMP file: filename of the LMP file +Number of players: derived from the number of used colours +Total play time: derived from the number of game tics +Number of game tics: derived from the file length</PRE +> </P +></DD +><DT +>DMO</DT +><DD +><P +> <PRE +CLASS="SCREEN" +>Duke Nukem 3D DMO file: filename of the DMO file +Total play time: derived from the number of game tics +Number of game tics: taken from the header, it stays better in a comment</PRE +> </P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT2" +><HR><H3 +CLASS="SECT2" +><A +NAME="AEN955" +>7.2. Header Area</A +></H3 +><P +>The Header Area starts with the keyword <TT +CLASS="LITERAL" +>HeaderStart</TT +> and ends with +the keyword <TT +CLASS="LITERAL" +>HeaderEnd</TT +>.</P +><P +>Between <TT +CLASS="LITERAL" +>HeaderStart</TT +> and <TT +CLASS="LITERAL" +>HeaderEnd</TT +> there are lines +with general information about the LMP or DMO file: +<P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Game:</DT +><DD +><P +>game type (DOOM, DOOM ][, HERETIC, HEXEN, STRIFE, Duke Nukem 3D, +Redneck Rampage)</P +></DD +><DT +>Version:</DT +><DD +><P +>version number or version byte (new DOOM/DOOM ][, STRIFE) +or 0 (old DOOM/HERETIC/HEXEN), the real version for Duke Nukem 3D and Redneck +Rampage</P +></DD +><DT +>Skill:</DT +><DD +><P +>player skill (LMP: 1-5, DMO: 1-4)</P +></DD +><DT +>Episode:</DT +><DD +><P +>episode (DOOM/HERETIC/Duke Nukem 3D: 1-4, DOOM ][/HEXEN: 1, +not in STRIFE), Redneck Rampage: 1 (I don't know it better yet, should be 1-4)</P +></DD +><DT +>Map:</DT +><DD +><P +>starting map (DOOM/HERETIC/Duke Nukem 3D: 1-9, DOOM ][: 1-32, +HEXEN 1-40, STRIFE: 32-??), Redneck Rampage: 1-11 </P +></DD +></DL +></DIV +> +In multi-player LMP files comes now a table with the colours (0-3) +of the players (0-3) (0-7 in STRIFE and HEXEN 1.1) + +<PRE +CLASS="SCREEN" +>Player0: Colour of player 0 +Player1: Colour of Player 1</PRE +> + +etc. +<P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>Player:</DT +><DD +><P +>Number of players (does exist in DMO source only)</P +></DD +></DL +></DIV +></P +><P +>The following lines are special for new DOOM, DOOM ][ and STRIFE LMP +files. +<P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>MultiRule:</DT +><DD +><P +>Multi-Player Playing Rule (Cooperative, DeathMatch or Altdeath)</P +></DD +><DT +>Respawn:</DT +><DD +><P +>number (This line appears only if the LMP was recorded +with <TT +CLASS="LITERAL" +>-respawn</TT +>. The number is the number of the +command line parameter <TT +CLASS="LITERAL" +>-respawn</TT +>.)</P +></DD +><DT +>Fast:</DT +><DD +><P +>number (This line appears only if the LMP was recorded +with <TT +CLASS="LITERAL" +>-fast</TT +>. The number is the number of the +command line parameter <TT +CLASS="LITERAL" +>-fast</TT +>.)</P +></DD +><DT +>NoMonsters:</DT +><DD +><P +>number (This line appears only if the LMP was recorded +with <TT +CLASS="LITERAL" +>-nomonsters</TT +>. The number is the number of the +command line parameter <TT +CLASS="LITERAL" +>-nomonsters</TT +>.)</P +></DD +><DT +>ViewOfPlayer:</DT +><DD +><P +>colour (The LMP is recorded from the view of the player +with this colour, (0<=colour<=3))</P +></DD +></DL +></DIV +> +The following lines are special for new Duke Nukem 3D and Redneck Rampage DMO +files. +<P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>MultiRule:</DT +><DD +><P +>Multi-Player Playing Rule (DukeMatch (RedneckMatch) (with spawn), Coop, +Dukematch (Redneckmatch) (without spawn))</P +></DD +><DT +>Respawn Monsters:</DT +><DD +><P +>number (This line appears only if the DMO file was recorded +with <TT +CLASS="LITERAL" +>/t1</TT +>.) </P +></DD +><DT +>Respawn Items:</DT +><DD +><P +>number (This line appears only if the DMO file was recorded +with <TT +CLASS="LITERAL" +>/t2</TT +>.) </P +></DD +><DT +>Respawn Inventory:</DT +><DD +><P +>number (This line appears only if the DMO file was recorded +with <TT +CLASS="LITERAL" +>/t3</TT +>.) </P +></DD +><DT +>NoMonsters:</DT +><DD +><P +>number (This line appears only if the DMO file was recorded +with <TT +CLASS="LITERAL" +>/m</TT +>.)</P +></DD +></DL +></DIV +> +The following lines are special for Redneck Rampage DMO files. +<P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>FakePlayerAI:</DT +><DD +><P +>number (This line appears only if the DMO was recorded +with <TT +CLASS="LITERAL" +>/a</TT +>.) </P +></DD +><DT +>Name:</DT +><DD +><P +>"string" (The standard name is "LEONARD" but it can be changed with the +<TT +CLASS="LITERAL" +>-name</TT +> option.)</P +></DD +></DL +></DIV +></P +><P +>Sometimes <TT +CLASS="LITERAL" +>lmpc --to-txt</TT +> can't distinguish between new +DOOM and DOOM ][ LMP files: +In the Game line appears ``DOOM or DOOM ][''.</P +><P +>The version byte can easily be derived from the game version. + +<DIV +CLASS="TABLE" +><A +NAME="AEN1057" +></A +><P +><B +>Table 1. LMP version bytes</B +></P +><TABLE +BORDER="1" +CLASS="CALSTABLE" +><COL +WIDTH="1*" +ALIGN="RIGHT"><COL +WIDTH="1*" +ALIGN="LEFT"><TBODY +><TR +><TD +>0 : </TD +><TD +>DOOM 1.1, 1.2</TD +></TR +><TR +><TD +>101: </TD +><TD +>STRIFE 1.0, 1.1</TD +></TR +><TR +><TD +>104: </TD +><TD +>DOOM 1.4beta</TD +></TR +><TR +><TD +>105: </TD +><TD +>DOOM 1.5beta</TD +></TR +><TR +><TD +>106: </TD +><TD +>DOOM 1.6beta, DOOM 1.666, DOOM ][ 1.666</TD +></TR +><TR +><TD +>107: </TD +><TD +>DOOM ][ 1.7, DOOM ][ 1.7a</TD +></TR +><TR +><TD +>108: </TD +><TD +>DOOM 1.8, DOOM ][ 1.8</TD +></TR +><TR +><TD +>109: </TD +><TD +>(Ultimate) DOOM 1.9, DOOM ][ 1.9</TD +></TR +><TR +><TD +>110: </TD +><TD +>published source code</TD +></TR +></TBODY +></TABLE +></DIV +> </P +><P +>In HEXEN LMP files appears the player class (0: fighter, 1: cleric, 2: mage) +too: + +<PRE +CLASS="SCREEN" +>Class: single player class (0-2)</PRE +> + +or in multi-player LMP files: + +<PRE +CLASS="SCREEN" +>Class0: player 0 class +Class1: player 1 class</PRE +> + +etc.</P +></DIV +><DIV +CLASS="SECT2" +><HR><H3 +CLASS="SECT2" +><A +NAME="AEN1093" +>7.3. Data Area</A +></H3 +><P +>The Data Area starts with the keyword <TT +CLASS="LITERAL" +>DataStart</TT +> and ends with +the keyword <TT +CLASS="LITERAL" +>DataEnd</TT +>.</P +><P +>All actions of one game tic have to be in one text line. In a multi-player +LMP there is one line for each player per game tic. </P +><P +>LMPC may append (with the <TT +CLASS="LITERAL" +>--mark-step</TT +> option) a comment with the +game tic and the time passed until this game tic at the line of the first +player.</P +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN1101" +>7.3.1. Movements</A +></H4 +><P +>A movement consists of a 2 letter word and an amount <TT +CLASS="LITERAL" +>n</TT +>. + +<DIV +CLASS="TABLE" +><A +NAME="AEN1105" +></A +><P +><B +>Table 2. Movement commands</B +></P +><TABLE +BORDER="1" +CLASS="CALSTABLE" +><COL +WIDTH="1*" +ALIGN="LEFT"><COL +WIDTH="1*" +ALIGN="LEFT"><COL +WIDTH="1*" +ALIGN="LEFT"><COL +WIDTH="1*" +ALIGN="LEFT"><TBODY +><TR +><TD +>code </TD +><TD +>action </TD +><TD +> game </TD +><TD +> range </TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>GFn</TT +> </TD +><TD +>Go Forward <TT +CLASS="LITERAL" +>n</TT +> </TD +><TD +>LMP </TD +><TD +>1<=<TT +CLASS="LITERAL" +>n</TT +><=127</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>GBn</TT +> </TD +><TD +>Go Backward <TT +CLASS="LITERAL" +>n</TT +> </TD +><TD +>LMP </TD +><TD +>1<=<TT +CLASS="LITERAL" +>n</TT +><=127</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>SLn</TT +> </TD +><TD +>Strafe Left <TT +CLASS="LITERAL" +>n</TT +> </TD +><TD +>LMP </TD +><TD +>1<=<TT +CLASS="LITERAL" +>n</TT +><=127</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>SRn</TT +> </TD +><TD +>Strafe Right <TT +CLASS="LITERAL" +>n</TT +> </TD +><TD +>LMP </TD +><TD +>1<=<TT +CLASS="LITERAL" +>n</TT +><=127</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>GXn</TT +> </TD +><TD +>Go X-direction <TT +CLASS="LITERAL" +>n</TT +> </TD +><TD +>DMO </TD +><TD +>-32768<=<TT +CLASS="LITERAL" +>n</TT +><=32767</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>GYn</TT +> </TD +><TD +>Go Y-direction <TT +CLASS="LITERAL" +>n</TT +> </TD +><TD +>DMO </TD +><TD +>-32768<=<TT +CLASS="LITERAL" +>n</TT +><=32767</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>TLn</TT +> </TD +><TD +>Turn Left <TT +CLASS="LITERAL" +>n</TT +> </TD +><TD +>LMP </TD +><TD +>1<=<TT +CLASS="LITERAL" +>n</TT +><=127</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>TLn</TT +> </TD +><TD +>Turn Left <TT +CLASS="LITERAL" +>n</TT +> </TD +><TD +>DMO </TD +><TD +>1<=<TT +CLASS="LITERAL" +>n</TT +><=32767</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>TRn</TT +> </TD +><TD +>Turn Right <TT +CLASS="LITERAL" +>n</TT +> </TD +><TD +>LMP </TD +><TD +>1<=<TT +CLASS="LITERAL" +>n</TT +><=127</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>TRn</TT +> </TD +><TD +>Turn Right <TT +CLASS="LITERAL" +>n</TT +> </TD +><TD +>DMO </TD +><TD +>1<=<TT +CLASS="LITERAL" +>n</TT +><=32767</TD +></TR +></TBODY +></TABLE +></DIV +> </P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN1198" +>7.3.2. Use (LMP only)</A +></H4 +><P +> <DIV +CLASS="TABLE" +><A +NAME="AEN1201" +></A +><P +><B +>Table 3. Use commands</B +></P +><TABLE +BORDER="1" +CLASS="CALSTABLE" +><COL +WIDTH="1*" +ALIGN="LEFT"><COL +WIDTH="1*" +ALIGN="LEFT"><TBODY +><TR +><TD +><TT +CLASS="LITERAL" +>UT</TT +> </TD +><TD +>Use Thing (press button, open door etc.)</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>NWn</TT +> </TD +><TD +>New Weapon (1<=<TT +CLASS="LITERAL" +>n</TT +><=8) (change the weapon manually)</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>FW</TT +> </TD +><TD +>Fire Weapon</TD +></TR +><TR +><TD +> </TD +><TD +> </TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>PS</TT +> </TD +><TD +>Pause Start</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>PE</TT +> </TD +><TD +>Pause End</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>SGn</TT +> </TD +><TD +>Save Game in slot n (0<=n<=7)</TD +></TR +></TBODY +></TABLE +></DIV +> </P +><P +>You can not combine <TT +CLASS="LITERAL" +>PS</TT +>, <TT +CLASS="LITERAL" +>PE</TT +> and <TT +CLASS="LITERAL" +>SG</TT +> with +other Use commands. But you can combine +the other Use commands (for instance <TT +CLASS="LITERAL" +>UT</TT +> and <TT +CLASS="LITERAL" +>FW</TT +> at the +same time).</P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN1241" +>7.3.3. Fly and Look (HERETIC and HEXEN only)</A +></H4 +><P +>A fly and look command consists of a 2 letter word and an amount +(1<=<TT +CLASS="LITERAL" +>n</TT +><=15) + +<DIV +CLASS="TABLE" +><A +NAME="AEN1245" +></A +><P +><B +>Table 4. Fly and Look commands</B +></P +><TABLE +BORDER="1" +CLASS="CALSTABLE" +><COL +WIDTH="1*" +ALIGN="LEFT"><COL +WIDTH="1*" +ALIGN="LEFT"><TBODY +><TR +><TD +><TT +CLASS="LITERAL" +>FUn</TT +> </TD +><TD +>Fly Up <TT +CLASS="LITERAL" +>n</TT +></TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>FDn</TT +> </TD +><TD +>Fly Down <TT +CLASS="LITERAL" +>n</TT +></TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>LUn</TT +> </TD +><TD +>Look Up <TT +CLASS="LITERAL" +>n</TT +></TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>LDn</TT +> </TD +><TD +>Look Down <TT +CLASS="LITERAL" +>n</TT +></TD +></TR +><TR +><TD +> </TD +><TD +> </TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>FC</TT +> </TD +><TD +>Fly Centre (landing, drop)</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>LC</TT +> </TD +><TD +>Look Centre (look forward)</TD +></TR +></TBODY +></TABLE +></DIV +> </P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN1282" +>7.3.4. Use Artifact (HERETIC and HEXEN only)</A +></H4 +><P +>The Use Artifact command consist of the code <TT +CLASS="LITERAL" +>AT</TT +> and a letter +(<TT +CLASS="LITERAL" +>a</TT +>..<TT +CLASS="LITERAL" +>j</TT +>) +equivalent to the <TT +CLASS="LITERAL" +>gimme</TT +>-cheat of HERETIC. In HEXEN such a cheat code +does not exist but the command remains the same:</P +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>HERETIC:</DT +><DD +><P +> <DIV +CLASS="TABLE" +><A +NAME="AEN1295" +></A +><P +><B +>Table 5. HERETIC artifacts</B +></P +><TABLE +BORDER="1" +CLASS="CALSTABLE" +><COL +WIDTH="1*" +ALIGN="LEFT"><COL +WIDTH="1*" +ALIGN="LEFT"><TBODY +><TR +><TD +><TT +CLASS="LITERAL" +>ATa</TT +> </TD +><TD +>ring of invincibility</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATb</TT +> </TD +><TD +>shadowsphere</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATc</TT +> </TD +><TD +>quartz flask</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATd</TT +> </TD +><TD +>chaos device</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATe</TT +> </TD +><TD +>tome of power</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATf</TT +> </TD +><TD +>torch</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATg</TT +> </TD +><TD +>time bomb of the ancients</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATh</TT +> </TD +><TD +>morph ovum</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATi</TT +> </TD +><TD +>wings of wrath</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATj</TT +> </TD +><TD +>mystic urn</TD +></TR +></TBODY +></TABLE +></DIV +> </P +></DD +><DT +>HEXEN:</DT +><DD +><P +> <DIV +CLASS="TABLE" +><A +NAME="AEN1345" +></A +><P +><B +>Table 6. HEXEN artifacts</B +></P +><TABLE +BORDER="1" +CLASS="CALSTABLE" +><COL +WIDTH="1*" +ALIGN="LEFT"><COL +WIDTH="1*" +ALIGN="LEFT"><TBODY +><TR +><TD +><TT +CLASS="LITERAL" +>ATa</TT +> </TD +><TD +>icon of the defender</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATb</TT +> </TD +><TD +>quartz flask</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATc</TT +> </TD +><TD +>mystic urn</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATd</TT +> </TD +><TD +>clerical healing key</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATe</TT +> </TD +><TD +>dark servant</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATf</TT +> </TD +><TD +>torch</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATg</TT +> </TD +><TD +>porkalator</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATh</TT +> </TD +><TD +>wings of wrath</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATi</TT +> </TD +><TD +>chaos device</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATj</TT +> </TD +><TD +>flechette</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATk</TT +> </TD +><TD +>banishment device</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATl</TT +> </TD +><TD +>boots of speed</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATm</TT +> </TD +><TD +>krater of might</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATn</TT +> </TD +><TD +>dragonskin bracers</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>ATo</TT +> </TD +><TD +>disc of repulsion</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>UA</TT +> </TD +><TD +>use all (panic button)</TD +></TR +></TBODY +></TABLE +></DIV +> </P +></DD +></DL +></DIV +></P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN1415" +>7.3.5. STRIFE Artifacts</A +></H4 +><P +>You can only the use STRIFE artifacts with the <TT +CLASS="LITERAL" +>IN</TT +> or <TT +CLASS="LITERAL" +>DR</TT +> +actions. </P +><P +>The Use Artifact command consist of the code <TT +CLASS="LITERAL" +>A</TT +> and an +artifact number. Up to now I know only 12 artifacts. + +<DIV +CLASS="TABLE" +><A +NAME="AEN1422" +></A +><P +><B +>Table 7. STRIFE artifacts</B +></P +><TABLE +BORDER="1" +CLASS="CALSTABLE" +><COL +WIDTH="1*" +ALIGN="LEFT"><COL +WIDTH="1*" +ALIGN="LEFT"><TBODY +><TR +><TD +>code </TD +><TD +>name</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>0x74</TT +> </TD +><TD +>toughness</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>0x75</TT +> </TD +><TD +>accuracy</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>0x76</TT +> </TD +><TD +>full health</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>0x7B</TT +> </TD +><TD +>teleportor beacon</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>0x7C</TT +> </TD +><TD +>metal armor</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>0x7D</TT +> </TD +><TD +>leather armor</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>0xA1</TT +> </TD +><TD +>med patch</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>0xA2</TT +> </TD +><TD +>medical kit</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>0xA3</TT +> </TD +><TD +>coin</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>0xA7</TT +> </TD +><TD +>shadow armor</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>0xA8</TT +> </TD +><TD +>environmental suit</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>0xB7</TT +> </TD +><TD +>offering chalice</TD +></TR +></TBODY +></TABLE +></DIV +> </P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN1479" +>7.3.6. Jump (HEXEN and STRIFE only)</A +></H4 +><P +>In HEXEN and STRIFE you can jump up. + +<DIV +CLASS="TABLE" +><A +NAME="AEN1482" +></A +><P +><B +>Table 8. Jump command</B +></P +><TABLE +BORDER="1" +CLASS="CALSTABLE" +><COL +WIDTH="1*" +ALIGN="LEFT"><COL +WIDTH="1*" +ALIGN="LEFT"><TBODY +><TR +><TD +><TT +CLASS="LITERAL" +>JU</TT +> </TD +><TD +>jump</TD +></TR +></TBODY +></TABLE +></DIV +> </P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN1492" +>7.3.7. STRIFE actions</A +></H4 +><P +>There are some more STRIFE actions. Remember: no talks are stored in the LMP +file. + +<DIV +CLASS="TABLE" +><A +NAME="AEN1495" +></A +><P +><B +>Table 9. STRIFE actions</B +></P +><TABLE +BORDER="1" +CLASS="CALSTABLE" +><COL +WIDTH="1*" +ALIGN="LEFT"><COL +WIDTH="1*" +ALIGN="LEFT"><TBODY +><TR +><TD +><TT +CLASS="LITERAL" +>LU</TT +> </TD +><TD +>Look Up</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>LD</TT +> </TD +><TD +>Look Down</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>RU</TT +> </TD +><TD +>Run </TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>IN</TT +> </TD +><TD +>Use Inventory</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>DR</TT +> </TD +><TD +>Drop Inventory</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>JU</TT +> </TD +><TD +>Jump Up</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>U6</TT +> </TD +><TD +>Unknown Action Number 6</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>HE</TT +> </TD +><TD +>Use Health</TD +></TR +></TBODY +></TABLE +></DIV +> </P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN1533" +>7.3.8. Use (DMO only)</A +></H4 +><P +>There are 28 actions in DMO files (and 4 bits for weapon change). +As far as it works I use the same codes for the same or similar thing as in +LMP sources. To describe the actions I use the terms for key definitions +in <TT +CLASS="LITERAL" +>DUKE3D.CFG</TT +>. + +<DIV +CLASS="TABLE" +><A +NAME="AEN1537" +></A +><P +><B +>Table 10. DMO actions</B +></P +><TABLE +BORDER="1" +CLASS="CALSTABLE" +><COL +WIDTH="1*" +ALIGN="LEFT"><COL +WIDTH="1*" +ALIGN="LEFT"><TBODY +><TR +><TD +><TT +CLASS="LITERAL" +>JU</TT +> </TD +><TD +>Jump</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>CR</TT +> </TD +><TD +>Crouch</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>FW</TT +> </TD +><TD +>Fire</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>AU</TT +> </TD +><TD +>Aim_Up</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>AD</TT +> </TD +><TD +>Aim_Down</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>RU</TT +> </TD +><TD +>Run</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>LU</TT +> </TD +><TD +>Look_Up</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>LD</TT +> </TD +><TD +>Look_Down</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>VI</TT +> </TD +><TD +>NightVision</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>MK</TT +> </TD +><TD +>MedKit</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>AR</TT +> </TD +><TD +>AutoRun</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>LC</TT +> </TD +><TD +>Center_View</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>HW</TT +> </TD +><TD +>Holster_Weapon</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>IL</TT +> </TD +><TD +>Inventory_Left</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>HD</TT +> </TD +><TD +>Holo_Duke</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>JP</TT +> </TD +><TD +>Jetpack</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>IR</TT +> </TD +><TD +>Inventory_Right</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>TA</TT +> </TD +><TD +>TurnAround</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>UT</TT +> </TD +><TD +>Open</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>IN</TT +> </TD +><TD +>Inventory</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>AC6</TT +> </TD +><TD +>??</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>AC7</TT +> </TD +><TD +>??</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>AC12</TT +> </TD +><TD +>??</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>PA</TT +> </TD +><TD +>Pause</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>AC22</TT +> </TD +><TD +>??</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>AC23</TT +> </TD +><TD +>??</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>AC26</TT +> </TD +><TD +>??</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>AC31</TT +> </TD +><TD +>??</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>NWn</TT +> </TD +><TD +>New Weapon (1<=<TT +CLASS="LITERAL" +>n</TT +><=10) (change the weapon manually)</TD +></TR +></TBODY +></TABLE +></DIV +> </P +></DIV +><DIV +CLASS="SECT3" +><HR><H4 +CLASS="SECT3" +><A +NAME="AEN1660" +>7.3.9. Special Codes</A +></H4 +><P +> <DIV +CLASS="TABLE" +><A +NAME="AEN1663" +></A +><P +><B +>Table 11. Special commands</B +></P +><TABLE +BORDER="1" +CLASS="CALSTABLE" +><COL +WIDTH="1*" +ALIGN="LEFT"><COL +WIDTH="1*" +ALIGN="LEFT"><TBODY +><TR +><TD +><TT +CLASS="LITERAL" +>WT</TT +> </TD +><TD +>Wait a Tic</TD +></TR +><TR +><TD +><TT +CLASS="LITERAL" +>*n</TT +> </TD +><TD +>Repeats the current line <TT +CLASS="LITERAL" +>n</TT +> times</TD +></TR +></TBODY +></TABLE +></DIV +> </P +></DIV +></DIV +></DIV +><DIV +CLASS="SECT1" +><HR><H2 +CLASS="SECT1" +><A +NAME="DEMSOURCE" +>8. DEM source format</A +></H2 +><P +>The DEM format is very complicated. Therefore I don't include a documentation +of the text format here. Please look in the ``Unofficial DEM format +description''. +The current version is available at <A +HREF="http://www.planetquake.com/demospecs/dem" +TARGET="_top" +>http://www.planetquake.com/demospecs/dem</A +>.</P +><P +>You will understand my textual representation of the DEM format +by inspecting a sample file and reading a bit about the structure in the +mentioned document. </P +><P +>If someone is willing to write a documentation of my DEM text format please +inform me and your document will be included right here. For the die-hard +hacker: the lex file <TT +CLASS="LITERAL" +>udeml.l</TT +> and the yacc file <TT +CLASS="LITERAL" +>udemy.y</TT +> +contain the complete language grammar documentation.</P +></DIV +><DIV +CLASS="SECT1" +><HR><H2 +CLASS="SECT1" +><A +NAME="QWDSOURCE" +>9. QWD source format</A +></H2 +><P +>The QWD format is even harder to understand than the DEM format. +Please look in the ``Unofficial QWD format description''. +The current version is +<A +HREF="http://www.planetquake.com/demospecs/qwd" +TARGET="_top" +>http://www.planetquake.com/demospecs/qwd</A +>.</P +><P +>You will understand my textual representation of the QWD format +by inspecting a sample file and reading a bit about the structure in the +mentioned document.</P +><P +>If someone is willing to write a documentation of my QWD text format please +inform me and your document will be included right here. </P +></DIV +><DIV +CLASS="SECT1" +><HR><H2 +CLASS="SECT1" +><A +NAME="DM2SOURCE" +>10. DM2 source format</A +></H2 +><P +>The DM2 format is a nice and compact file format. +Please look in the ``Unofficial DM2 format description''. +The current version is +<A +HREF="http://www.planetquake.com/demospecs/dm2" +TARGET="_top" +>http://www.planetquake.com/demospecs/dm2</A +>.</P +><P +>You will understand my textual representation of the DM2 format +by inspecting a sample file and reading a bit about the structure in the +mentioned document.</P +><P +>If someone is willing to write a documentation of my DM2 text format please +inform me and your document will be included right here. </P +></DIV +><DIV +CLASS="SECT1" +><HR><H2 +CLASS="SECT1" +><A +NAME="DM3SOURCE" +>11. DM3 source format</A +></H2 +><P +>The DM3 format is very sophisticated file format to save every thinkable +bit. It was developed for internet multiplayer action at a time, when highspeed +internet access was rare. There is (not yet) an ``Unofficial DM3 format +description'' but you can easily learn it by looking through the Quake III Arena source code or the LMPC source code.</P +><P +>You will understand my textual representation of the DM3 format +by inspecting a sample file</P +><P +>If someone is willing to write a documentation of my DM3 text format please +inform me and your document will be included right here. </P +></DIV +><DIV +CLASS="SECT1" +><HR><H2 +CLASS="SECT1" +><A +NAME="AEN1703" +>12. Some links and further information</A +></H2 +><P +>For further information on LMP files look in the ``Unofficial LMP format +description''. The current version is +<A +HREF="http://www.planetquake.com/demospecs/lmp" +TARGET="_top" +>http://www.planetquake.com/demospecs/lmp</A +>.</P +><P +>For a huge collection of some great LMP files, look at the +COMPET-N home page +<A +HREF="http://www.hszk.bme.hu/~ha211/compet-n/" +TARGET="_top" +>http://www.hszk.bme.hu/~ha211/compet-n/</A +>.</P +><P +>For further information on DMO files look in the ``Unofficial DMO format +description''. The current version is +<A +HREF="http://www.planetquake.com/demospecs/dmo" +TARGET="_top" +>http://www.planetquake.com/demospecs/dmo</A +>.</P +><P +>For a small collection of DMO files, look at the +<A +HREF="http://www.acs.oakland.edu/~klmatero/duke3d/demos.html" +TARGET="_top" +>http://www.acs.oakland.edu/~klmatero/duke3d/demos.html</A +>.</P +><P +>For further information on DEM files look in the ``Unofficial DEM format +description''. The current version is +<A +HREF="http://www.planetquake.com/demospecs/dem" +TARGET="_top" +>http://www.planetquake.com/demospecs/dem</A +>.</P +><P +>All info you'll ever need on DEM files can be found in the published +Quake source at +<A +HREF="ftp://ftp.idsoftware.com/idstuff/source/q1source.zip" +TARGET="_top" +>ftp://ftp.idsoftware.com/idstuff/source/q1source.zip</A +></P +><P +>A simple DEM file editing guide can be found at +<A +HREF="http://www.Z-Studios.com/archives/filmat11.html" +TARGET="_top" +>http://www.Z-Studios.com/archives/filmat11.html</A +>.</P +><P +>For further information on QWD files look in the ``Unofficial QWD format +description''. The current version is +<A +HREF="http://www.planetquake.com/demospecs/qwd" +TARGET="_top" +>http://www.planetquake.com/demospecs/qwd</A +>.</P +><P +>All info you'll ever need on QWD files can be found in the published +QuakeWorld source at +<A +HREF="ftp://ftp.idsoftware.com/idstuff/source/q1source.zip" +TARGET="_top" +>ftp://ftp.idsoftware.com/idstuff/source/q1source.zip</A +></P +><P +>For further information on DM2 files look in the ``Unofficial DM2 format +description''. The current version is +<A +HREF="http://www.planetquake.com/demospecs/dm2" +TARGET="_top" +>http://www.planetquake.com/demospecs/dm2</A +>.</P +><P +>DM2 file editing tutorials can be found at +<A +HREF="http://www.Z-Studios.com/tutorials/dm2/tut_demo.html" +TARGET="_top" +>http://www.Z-Studios.com/tutorials/dm2/tut_demo.html</A +>.</P +><P +>For further information on Quake II Relay project look at +<A +HREF="http://www.planetquake.com/relay/" +TARGET="_top" +>http://www.planetquake.com/relay/</A +>.</P +></DIV +><DIV +CLASS="SECT1" +><HR><H2 +CLASS="SECT1" +><A +NAME="AEN1729" +>13. History and future of LMPC</A +></H2 +><P +>LMPC started in the good old DOOM days as a very small Turbo Pascal 6.0 +program to show me what's in these LMP files. It is now a ``fat'' C +application and has way too many command-line switches. +DEMcut is not as widely used as LMPC but it started +the DEM editing hype. DBS (I really have to change this name) +gave the Keygrip authors +(<A +HREF="http://www.planetquake.com/keygrip" +TARGET="_top" +>http://www.planetquake.com/keygrip</A +>) the starting point for their +internal fake Quake server.</P +><P +><P +></P +><DIV +CLASS="VARIABLELIST" +><DL +><DT +>1.0 (8/30/1994) <TT +CLASS="LITERAL" +>lmpc10.zip</TT +> (8/31/1994 posted in +<A +HREF="news:alt.binaries.doom" +TARGET="_top" +>alt.binaries.doom</A +>, +<A +HREF="news:alt.games.doom" +TARGET="_top" +>alt.games.doom</A +>)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>General: first public version.</P +></LI +></UL +> </P +></DD +><DT +>1.01 (8/31/1994) <TT +CLASS="LITERAL" +>lmpc101.arj</TT +> (9/1/1994 posted in +<A +HREF="news:alt.binaries.doom" +TARGET="_top" +>alt.binaries.doom</A +>, +<A +HREF="news:alt.games.doom" +TARGET="_top" +>alt.games.doom</A +>)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>LMP: bug fixed in <TT +CLASS="LITERAL" +>WT</TT +> statistics.</P +></LI +><LI +><P +>Docu: LS description / LMPC program reference splitted in +LS.DOC / LMPC.DOC.</P +></LI +><LI +><P +>LMP: New heuristic algorithm to discover former version changes.</P +></LI +><LI +><P +>Docu: History added in LMPC.DOC.</P +></LI +><LI +><P +>General: +Terry (<A +HREF="mailto:terry@usis.com" +TARGET="_top" +>terry@usis.com</A +>) +wrote also a DOOM utility (I don't know it) +with the archive name <TT +CLASS="LITERAL" +>lmpc10.zip</TT +>. Therefore I changed to the ARJ +archive.</P +></LI +></UL +> </P +></DD +><DT +>2.0 (10/11/1994) <TT +CLASS="LITERAL" +>lmpc20.arj</TT +> (internal beta test release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>LMP: the LMP compiler is ready after all!</P +></LI +></UL +> </P +></DD +><DT +>2.01 (10/12/1994) <TT +CLASS="LITERAL" +>lmpc201.arj</TT +> (internal beta test release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>LMP: decompiler bug fixed (<TT +CLASS="LITERAL" +>UT</TT +>/<TT +CLASS="LITERAL" +>FW</TT +> and <TT +CLASS="LITERAL" +>NW</TT +> +in the same game tic).</P +></LI +><LI +><P +>LMP: compiler parser improved (token length test).</P +></LI +><LI +><P +>LMP: <TT +CLASS="LITERAL" +>NW8</TT +> (8 gives you the chain saw directly) added.</P +></LI +></UL +> </P +></DD +><DT +>2.1 (10/24/1994) <TT +CLASS="LITERAL" +>lmpc21.arj</TT +> (10/25/1994 posted in +<A +HREF="news:alt.binaries.doom" +TARGET="_top" +>alt.binaries.doom</A +>)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>General: after a error free beta test phase nothing changed, new public +version.</P +></LI +></UL +> </P +></DD +><DT +>2.20 ... 2.26 (never published)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>General: rewritten from scratch (Turbo Pascal 6.0 -> ANSI C).</P +></LI +></UL +> </P +></DD +><DT +>2.27 (2/25/1995) <TT +CLASS="LITERAL" +>lmpc-2.27.tar.gz</TT +> (internal beta test release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>LMP: LS format improved (new HERETIC movements).</P +></LI +><LI +><P +>LMP: can handle DOOM ][ and HERETIC LMP files.</P +></LI +><LI +><P +>LMP: <TT +CLASS="LITERAL" +>GAME</TT +>-token in the LS Header.</P +></LI +><LI +><P +>LMP: version change expects now the real version byte.</P +></LI +><LI +><P +>LMP: 1.5 times faster (2.27/2.1, checked with a >300K LMP).</P +></LI +><LI +><P +>General: includes now an executable for MS-DOS and Linux.</P +></LI +></UL +> </P +></DD +><DT +>2.3 (4/29/1995) <TT +CLASS="LITERAL" +>lmpc-2.3.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc23.zip</TT +></DT +><DD +><P +> <P +></P +><UL +><LI +><P +>General: full source code included.</P +></LI +><LI +><P +>LMP: version change expects a real version string or the version byte.</P +></LI +><LI +><P +>General: zip and tar.gz release.</P +></LI +><LI +><P +>General: includes now go32.exe and stub.exe too.</P +></LI +></UL +> </P +></DD +><DT +>2.4 (8/7/1995) <TT +CLASS="LITERAL" +>lmpc-2.4.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc24.zip</TT +> +(public release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>General: MS-DOS binary cross compiled with go32crs.</P +></LI +><LI +><P +>Docu: documentation in HTML and plain text (created with Mosaic from the +HTML version).</P +></LI +><LI +><P +>LMP: Ultimate DOOM with 4th episode tested (nothing changed).</P +></LI +></UL +> </P +></DD +><DT +>2.5 (8/23/1995) <TT +CLASS="LITERAL" +>lmpc-2.5.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc25.zip</TT +> +(internal beta test release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>General: command line parsing now with <TT +CLASS="LITERAL" +>getopt_long</TT +> and long +option names are allowed too.</P +></LI +><LI +><P +>General: to compile lmpc.exe (MS-DOS binary) I included the +getopt-package +from the GNU C library (my copy of djgpp doesn't include getopt).</P +></LI +><LI +><P +>General: <TT +CLASS="LITERAL" +>--info</TT +> can handle many files on the command line.</P +></LI +><LI +><P +>LMP: <TT +CLASS="LITERAL" +>--lmp-to-ls</TT +> can decompile a specific part of the LMP file +(the new <TT +CLASS="LITERAL" +>--tic</TT +> option).</P +></LI +><LI +><P +>LMP: the buggy version number string function repaired.</P +></LI +><LI +><P +>LMP: the new option <TT +CLASS="LITERAL" +>--game</TT +> to force the game type of the LMP +file.</P +></LI +></UL +> </P +></DD +><DT +>2.6 (8/26/1995) <TT +CLASS="LITERAL" +>lmpc-2.6.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc26.zip</TT +> +(internal beta test release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>LMP: <TT +CLASS="LITERAL" +>--ls-to-lmp</TT +> converts now several LS files to a LMP file.</P +></LI +><LI +><P +>LMP: new option <TT +CLASS="LITERAL" +>--add-WT</TT +> to add <TT +CLASS="LITERAL" +>WT</TT +> at the end of a +LMP file. </P +></LI +></UL +> </P +></DD +><DT +>2.6.1 (8/28/1995) <TT +CLASS="LITERAL" +>lmpc-2.6.1.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc261.zip</TT +> +(internal beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>General: 3 parts of the version number.</P +></LI +><LI +><P +>LMP: <TT +CLASS="LITERAL" +>--gametic FROM(,|:)TO</TT +>: colon is allowed as a separator too.</P +></LI +><LI +><P +>LMP: <TT +CLASS="LITERAL" +>--ls-to-lmp</TT +> keeps track of <TT +CLASS="LITERAL" +>PS</TT +> and <TT +CLASS="LITERAL" +>PE</TT +>.</P +></LI +><LI +><P +>LMP: <TT +CLASS="LITERAL" +>--remove-pause</TT +> to remove the Pause game tics.</P +></LI +></UL +> </P +></DD +><DT +>2.7.0 (9/3/1995) <TT +CLASS="LITERAL" +>lmpc-2.7.0.tar.gz</TT +> (internal alpha release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>LMP: <TT +CLASS="LITERAL" +>--gametic</TT +> changed to <TT +CLASS="LITERAL" +>--tic</TT +></P +></LI +><LI +><P +>LMP: total new code to convert LMP files (all in one).</P +></LI +><LI +><P +>LMP: do multiple LMP file changes at the same time.</P +></LI +><LI +><P +>LMP: convert LMP files with the help of a temporary file (if necessary).</P +></LI +></UL +> </P +></DD +><DT +>2.7.1 (9/5/1995) <TT +CLASS="LITERAL" +>lmpc-2.7.1.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc271.zip</TT +> +(internal beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>LMP: small bug fixes in the new code.</P +></LI +><LI +><P +>LMP: MS-DOS binary converts now all filenames to lower case.</P +></LI +></UL +> </P +></DD +><DT +>2.7.2 (9/6/1995) <TT +CLASS="LITERAL" +>lmpc-2.7.2.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc272.zip</TT +> +(internal beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>LMP: small bug in the MS-DOS binary corrected.</P +></LI +></UL +> </P +></DD +><DT +>2.8.0 (10/5/1995) <TT +CLASS="LITERAL" +>lmpc-2.8.0.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc280.zip</TT +> +(public release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>General: Nothing important changed after one month of intensive beta +testing. The code is stable. </P +></LI +></UL +> </P +></DD +><DT +>2.9.1 (10/9/1995) <TT +CLASS="LITERAL" +>lmpc-2.9.1.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc291.zip</TT +> +(internal beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>General: from now on I use a version number scheme similar to Linux: +second number odd means test.</P +></LI +><LI +><P +>LMP: HEXEN support (rudimentary).</P +></LI +></UL +> </P +></DD +><DT +>2.9.2 (10/9/1995) <TT +CLASS="LITERAL" +>lmpc-2.9.2.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc292.zip</TT +> +(internal beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>LMP: correct names of all HEXEN artifacts.</P +></LI +></UL +> </P +></DD +><DT +>2.9.3 (11/19/1995) <TT +CLASS="LITERAL" +>lmpc-2.9.3.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc293.zip</TT +> +(internal beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>LMP: new option <TT +CLASS="LITERAL" +>--clear-save</TT +> to clear the <TT +CLASS="LITERAL" +>SG</TT +> tics.</P +></LI +><LI +><P +>Docu: documentation in Linux-SGML.</P +></LI +><LI +><P +>LMP: small multi-player bug corrected, thanks to Rob McCartney +(<A +HREF="mailto:argon@netcom.com" +TARGET="_top" +>argon@netcom.com</A +>) +for his bug report.</P +></LI +></UL +> </P +></DD +><DT +>2.9.4 (12/6/1995) <TT +CLASS="LITERAL" +>lmpc-2.9.4.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc294.zip</TT +> +(internal beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>new option <TT +CLASS="LITERAL" +>--mark-step</TT +> to mark only every <TT +CLASS="LITERAL" +>STEP</TT +>th +game tic</P +></LI +><LI +><P +>General: MS-DOS version uses <TT +CLASS="LITERAL" +>CR/LF</TT +> instead of <TT +CLASS="LITERAL" +>LF</TT +> +for LS files.</P +></LI +></UL +> </P +></DD +><DT +>2.9.5 (2/10/1996) <TT +CLASS="LITERAL" +>lmpc-2.9.5.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc295.zip</TT +> +(internal alpha release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DMO: rudimentary support for Duke Nukem 3D DMO files (alpha code!). </P +></LI +></UL +> </P +></DD +><DT +>2.9.6 (2/12/1996) <TT +CLASS="LITERAL" +>lmpc-2.9.6.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc296.zip</TT +> +(internal alpha release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DMO: reliable version of <TT +CLASS="LITERAL" +>lzw.c</TT +>/<TT +CLASS="LITERAL" +>unlzw.c</TT +> included.</P +></LI +><LI +><P +>DMO: all DMO header bytes decoded.</P +></LI +><LI +><P +>General: new WWW directory structure.</P +></LI +></UL +> </P +></DD +><DT +>2.9.7 (2/13/1996) <TT +CLASS="LITERAL" +>lmpc-2.9.7.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc297.zip</TT +> +(internal beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DMO: version 1.1 of <TT +CLASS="LITERAL" +>lzw.c</TT +>/<TT +CLASS="LITERAL" +>unlzw.c</TT +> included.</P +></LI +><LI +><P +>DMO: DMO support in <TT +CLASS="LITERAL" +>-s</TT +> and <TT +CLASS="LITERAL" +>-i</TT +>.</P +></LI +><LI +><P +>Docu: documentation structure changed.</P +></LI +></UL +> </P +></DD +><DT +>2.9.8 (2/19/1996) <TT +CLASS="LITERAL" +>lmpc-2.9.8.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc298.zip</TT +> +(internal beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DMO: Chunk header removed from DS format.</P +></LI +><LI +><P +>DMO: multi-player size/tics/time corrected.</P +></LI +><LI +><P +>DMO: Pause is AC21.</P +></LI +></UL +> </P +></DD +><DT +>2.9.9 (3/6/1996) <TT +CLASS="LITERAL" +>lmpc-2.9.9.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc299.zip</TT +> +(internal beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>LMP: STRIFE support included.</P +></LI +></UL +> </P +></DD +><DT +>2.9.10 (4/7/1996) <TT +CLASS="LITERAL" +>lmpc-2.9.10.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc2910.zip</TT +> +(internal beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>LMP: HEXEN 1.1 (8 player) support included.</P +></LI +><LI +><P +>LMP: considerable changes in the <TT +CLASS="LITERAL" +>-g</TT +> code.</P +></LI +></UL +> </P +></DD +><DT +>2.9.11 (4/14/1996) <TT +CLASS="LITERAL" +>lmpc-2.9.11.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc2911.zip</TT +> +(internal bug fix release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>LMP: version string scan routine improved (buggy since 2.9.9).</P +></LI +><LI +><P +>LMP: game type determine routine corrected (buggy since 2.9.10).</P +></LI +><LI +><P +>LMP: HEXEN version change (1.0 <-> 1.1) now possible.</P +></LI +></UL +> </P +></DD +><DT +>2.9.12 (4/21/1996) <TT +CLASS="LITERAL" +>lmpc-2.9.12.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc2912.zip</TT +> +(internal beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DMO: macro-block error fixed.</P +></LI +><LI +><P +>LMP: STRIFE player colour names included.</P +></LI +></UL +> </P +></DD +><DT +>2.9.13 (7/1/1996), never released +(internal incomplete alpha release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DEM: coding started for Quake DEM files, nothing completed.</P +></LI +></UL +> </P +></DD +><DT +>2.9.14 (7/2/1996), never released +(internal incomplete alpha release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>Quake DEM files: coding continued, something completed.</P +></LI +></UL +> </P +></DD +><DT +>2.9.15 (7/3/1996), never released +(internal incomplete alpha release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DEM: coding continued, structure mostly completed.</P +></LI +><LI +><P +>General: new recursive Makefiles, MS-DOS compiling not supported anymore.</P +></LI +><LI +><P +>General: new Linuxdoc-SGML 1.5 options.</P +></LI +><LI +><P +>General: Linux binary is ELF finally.</P +></LI +><LI +><P +>General: MS-DOS binary is djgpp V2.0 compatible (and runs in dosemu).</P +></LI +></UL +> </P +></DD +><DT +>2.9.16 (7/4/1996), never released +(internal incomplete alpha release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DEM: CD track identified.</P +></LI +><LI +><P +>DEM: player movement identified.</P +></LI +></UL +> </P +></DD +><DT +>2.9.17 (7/7/1996), <TT +CLASS="LITERAL" +>lmpc-2.9.17.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc2917.zip</TT +> +(beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DEM: cross reference to DEM specs.</P +></LI +><LI +><P +>DEM: clientdata with more information.</P +></LI +><LI +><P +>DEM: entities: ModNum with reference to the model names.</P +></LI +></UL +> </P +></DD +><DT +>2.9.18 (7/8/1996), <TT +CLASS="LITERAL" +>lmpc-2.9.18.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc2918.zip</TT +> +(beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DEM: stupid spawnstatic error corrected.</P +></LI +><LI +><P +>DEM: code beautified.</P +></LI +></UL +> </P +></DD +><DT +>2.9.19 (7/14/1996), <TT +CLASS="LITERAL" +>lmpc-2.9.19.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc2919.zip</TT +> +(beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DEM: many new values explained.</P +></LI +><LI +><P +>DEM: strings can contain unprintable characters. </P +></LI +></UL +> </P +></DD +><DT +>2.9.20 (7/17/1996), <TT +CLASS="LITERAL" +>lmpc-2.9.20.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc2920.zip</TT +> +(beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DEM: some new values explained.</P +></LI +><LI +><P +>DEM: code rearranged.</P +></LI +><LI +><P +>DEM: corresponds (more or less) to dem-0.0.5.</P +></LI +></UL +> </P +></DD +><DT +>2.9.21 (7/23/1996), <TT +CLASS="LITERAL" +>lmpc-2.9.21.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc2921.zip</TT +> +(beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DEM: some new values explained.</P +></LI +><LI +><P +>DEM: massive code rearrangements.</P +></LI +></UL +> </P +></DD +><DT +>2.9.22 (8/7/1996), <TT +CLASS="LITERAL" +>lmpc-2.9.22.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc2922.zip</TT +> +(beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DEM: almost all explained.</P +></LI +><LI +><P +>DEM: text file parser is ready (lex, yacc), first check.</P +></LI +><LI +><P +>DEM: -s may now decompile a DEM txt file to a DEM txt file.</P +></LI +><LI +><P +>DEM: massive code rearrangements.</P +></LI +></UL +> </P +></DD +><DT +>2.9.23 (8/14/1996), <TT +CLASS="LITERAL" +>lmpc-2.9.23.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc2923.zip</TT +> +(beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DEM: the ``to bin converter'' is ready. Not very stable.</P +></LI +><LI +><P +>General: all messages (not getopt) go to stderr.</P +></LI +><LI +><P +>DEM: write to - means stdout.</P +></LI +><LI +><P +>General: new command line options: <TT +CLASS="LITERAL" +>--to-txt</TT +> and <TT +CLASS="LITERAL" +>--to-bin</TT +></P +></LI +><LI +><P +>Docu: some terms changed.</P +></LI +></UL +> </P +></DD +><DT +>2.9.24 (10/6/1996), <TT +CLASS="LITERAL" +>lmpc-2.9.24.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc2924.zip</TT +> +(beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DEM: all float output (time inclusive) with g-format (9 digits).</P +></LI +><LI +><P +>DEM: more internal errors corrected.</P +></LI +></UL +> </P +></DD +><DT +>2.9.25 (10/13/1996), <TT +CLASS="LITERAL" +>lmpc-2.9.25.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc2925.zip</TT +> +(beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DEM: memory problem solved: LMPC needs now only 400-500K RAM.</P +></LI +><LI +><P +>Docu: version table reorganised, README, INSTALL slightly changed.</P +></LI +><LI +><P +>Makefiles: new targets, easier to make packages and my web-page.</P +></LI +><LI +><P +>DEMA: first working version.</P +></LI +></UL +> </P +></DD +><DT +>2.9.26 (11/17/1996), <TT +CLASS="LITERAL" +>lmpc-2.9.26.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc2926.zip</TT +> +(bug fix release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DEM: MS-DOS binary can read in DEM text files.</P +></LI +><LI +><P +>DEM: <TT +CLASS="LITERAL" +>attack_state</TT +>-><TT +CLASS="LITERAL" +>effects</TT +>, +<TT +CLASS="LITERAL" +>ang_ofs_1</TT +>-><TT +CLASS="LITERAL" +>punchangle_x</TT +>.</P +></LI +><LI +><P +>LMP: MS-DOS binary prints now the correct statistics.</P +></LI +><LI +><P +>General: new E-mail address.</P +></LI +></UL +> </P +></DD +><DT +>2.9.27 (11/20/1996), <TT +CLASS="LITERAL" +>lmpc-2.9.27.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc2927.zip</TT +> +(public beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>General: many thanks to +Eric Gordon Fowler +(<A +HREF="mailto:efowler@jove.acs.unt.edu" +TARGET="_top" +>efowler@jove.acs.unt.edu</A +>) and +Paolo Perrotta +(<A +HREF="mailto:nan0744@iperbole.bologna.it" +TARGET="_top" +>nan0744@iperbole.bologna.it</A +>) +for all their bug reports.</P +></LI +><LI +><P +>DEM: string in and out handles special characters better (not perfect).</P +></LI +><LI +><P +>DEM: text parser allows digits after an octal escape sequence.</P +></LI +><LI +><P +>DEM: \n, \r, \\ and \" are allowed +character escape sequences in DEM text files.</P +></LI +><LI +><P +>DEM: binary file read is byte-order independent (unchecked).</P +></LI +><LI +><P +>DEM: binary file write is byte-order independent (unchecked).</P +></LI +><LI +><P +>DEM: float numbers may contain exponents.</P +></LI +><LI +><P +>DEM: <TT +CLASS="LITERAL" +>updateentity</TT +> with an entity > 255 works.</P +></LI +><LI +><P +>General: my code survives <TT +CLASS="LITERAL" +>-Wall</TT +> <TT +CLASS="LITERAL" +>-pedantic</TT +> without +warnings.</P +></LI +><LI +><P +>Docu: Old LMPC history a bit reformatted.</P +></LI +></UL +> </P +></DD +><DT +>2.9.28 (11/30/1996), <TT +CLASS="LITERAL" +>lmpc-2.9.28.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc2928.zip</TT +> +(public beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DEM: put an <TT +CLASS="LITERAL" +>items</TT +> entry in binary DEM files even if it is 0. +This modification enables an error-free decompile/compile of CAMPER3.DEM by +``United Rangers Films'' after all.</P +></LI +></UL +> </P +></DD +><DT +>2.9.29 (12/15/1996), <TT +CLASS="LITERAL" +>lmpc-2.9.29.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc2929.zip</TT +> +(public beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DEM: <TT +CLASS="LITERAL" +>--info</TT +> detects DEM text files.</P +></LI +><LI +><P +>DEM: binary file read reorganised (coding just started).</P +></LI +><LI +><P +>DEMcut: coding started. First working version.</P +></LI +></UL +> </P +></DD +><DT +>2.9.30 (1/5/1997), <TT +CLASS="LITERAL" +>lmpc-2.9.30.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc2930.zip</TT +> +(alpha test release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DEM: binary file read totally rewritten. I use now for binary files the +same internal node tree representation as for text files. The text output part +is a bit slower now but the whole project is much easier to maintain. </P +></LI +><LI +><P +>DEM: <TT +CLASS="LITERAL" +>--to-bin</TT +> can handle binary DEM files too. It should create +an identically copy of the input file (if I didn't make any mistakes).</P +></LI +><LI +><P +>DEM: binary write: last (I hope so) endian-dependence removed.</P +></LI +><LI +><P +>DEM: binary write: suppresses ``camera only'' blocks.</P +></LI +><LI +><P +>DEM: text write: suppresses ``camera only'' blocks.</P +></LI +><LI +><P +>DEM: text write: stops at file write errors (e.g. device full).</P +></LI +><LI +><P +>DEMcut: almost all new coded. The interface remains identical. +I can now include very easy new commands. </P +></LI +><LI +><P +>DEMcut: the time message can be anywhere in a block.</P +></LI +><LI +><P +>DEMcut: new ``m'' command to prepare multi-player DEM file +concatenations.</P +></LI +><LI +><P +>DEMcut: new ``i'' command to improve the interactive work: range may +be interrupted, output is time-synchronised. </P +></LI +><LI +><P +>Docu: Formatted with SGML-Tools 0.99.0.</P +></LI +><LI +><P +>General: Orthographical check with <TT +CLASS="LITERAL" +>ispell</TT +> (British English). </P +></LI +></UL +> </P +></DD +><DT +>2.9.31 (1/7/1997), <TT +CLASS="LITERAL" +>lmpc-2.9.31.tar.gz</TT +>/<TT +CLASS="LITERAL" +>lmpc2931.zip</TT +> +(bug fix release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DEM: text write: CD track was never printed: totally stupid bug.</P +></LI +></UL +> </P +></DD +><DT +>2.9.32 (2/9/1997) (alpha test release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DEMcut: more info on running ranges in interactive mode.</P +></LI +><LI +><P +>DEMcut: ``d'' command don't need files from the command line.</P +></LI +><LI +><P +>General: includes executables for Win32 (untested).</P +></LI +><LI +><P +>General: new packaging system.</P +></LI +><LI +><P +>General: all messages go to stderr.</P +></LI +></UL +> </P +></DD +><DT +>2.9.33 (2/16/1997) (alpha test release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DMO: Redneck Rampage support started. Info works, decompression not.</P +></LI +><LI +><P +>DMO: Duke Nukem 3D 1.3D DMO files supported. This incompatible version +exists since April 1996 but nobody said it to me.</P +></LI +><LI +><P +>DMO: endian-dependence should be removed. Never checked this.</P +></LI +></UL +> </P +></DD +><DT +>2.9.34 (3/23/1997) (beta test release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DEM: <TT +CLASS="LITERAL" +>--info</TT +> prints the number of game tics (or frames) +for binary DEM files.</P +></LI +><LI +><P +>DEM: new option <TT +CLASS="LITERAL" +>--fix-multi</TT +> for in-place editing.</P +></LI +><LI +><P +>DEM: new option <TT +CLASS="LITERAL" +>--fix-multi</TT +> as additional option for +<TT +CLASS="LITERAL" +>--to-bin</TT +> and <TT +CLASS="LITERAL" +>--to-txt</TT +>.</P +></LI +><LI +><P +>DEM: bin read: type check was endian-dependent (no longer).</P +></LI +><LI +><P +>DEM: bin read: CD track at the beginning can be anything, that Quake +itself likes. Read the DEM specs (>=1.0.4) for details. The full CD track +string will be included in a DEM text file but LMPC can cope with the old +format as well.</P +></LI +><LI +><P +>DEMcut: CD track commands expects the `\n' character as well. +The old syntax continues to work.</P +></LI +><LI +><P +>Docu: Demolition and DemoStat mentioned.</P +></LI +></UL +> </P +></DD +><DT +>3.0.0 (3/31/1997) (public beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DEM: text read: hours in time stamps didn't work (bug report by +James Stephenson (<A +HREF="mailto:james@BETAus.com" +TARGET="_top" +>james@BETAus.com</A +>)).</P +></LI +><LI +><P +>DEMcut: CD track command works now correctly.</P +></LI +><LI +><P +><TT +CLASS="LITERAL" +>--game</TT +> option repaired.</P +></LI +><LI +><P +>Docu: general clean-up.</P +></LI +></UL +> </P +></DD +><DT +>3.0.1 (5/15/1997) (public release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>General: text write: Win32 versions make MS-DOS style +line breaks (hint by +David Wright (<A +HREF="mailto:wgwright@mnsinc.com" +TARGET="_top" +>wgwright@mnsinc.com</A +>)).</P +></LI +><LI +><P +>General: Minimalist GNU Win32 (Mingw32) version ready (untested).</P +></LI +><LI +><P +>Win32: The <TT +CLASS="LITERAL" +>syserror</TT +> function was always broken. Why didn't +somebody give me a hint?</P +></LI +><LI +><P +>DEM: bin read: `new' (version > 1.06) DEM format.</P +></LI +><LI +><P +>DEM: bin write: stupid error in <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>clientdata</I +></SPAN +> removed. +It was there since 2.9.23 (hint by +Yonatan Donner (<A +HREF="mailto:ruthd@post.tau.ac.il" +TARGET="_top" +>ruthd@post.tau.ac.il</A +>)).</P +></LI +><LI +><P +>DEM: entry clientdata->weapon may contain invalid values +(more than 1 bit set). </P +></LI +><LI +><P +>Packaging: Win32 versions with standard file names. Only the `MS-DOS +Binary Package' use the short 8.3 name scheme.</P +></LI +></UL +> </P +></DD +><DT +>3.1.1 (7/20/1997) (internal alpha test release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>QWD: bin read: coding started. Nothing completed. </P +></LI +><LI +><P +>Docu: all tables now floating in TeX.</P +></LI +><LI +><P +>Conf: all is now Autoconf configured.</P +></LI +></UL +> </P +></DD +><DT +>3.1.2 (7/28/1997) (alpha test release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DEMcut: interactive mode is removed in systems without named pipes.</P +></LI +><LI +><P +>DBS: alpha code.</P +></LI +><LI +><P +>Conf: Autoconf rules newly written. Really everything is Autoconf +configured.</P +></LI +><LI +><P +>Docu: DBS mentioned.</P +></LI +><LI +><P +>Docu: rename INSTALL in COMPILE.</P +></LI +><LI +><P +>Docu: new file: Autoconf generic INSTALL.</P +></LI +></UL +> </P +></DD +><DT +>3.1.3 (8/17/1997) (alpha test release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>General: package renamed: LMP/DMO/DEM/QWD Control Centre -> +Little Movie Processing Centre</P +></LI +><LI +><P +>QWD: QuakeWorld 2.00 support included.</P +></LI +><LI +><P +>Docu: back again to SGML-Tools 0.99.0.</P +></LI +><LI +><P +>Docu: chapters restructured.</P +></LI +></UL +> </P +></DD +><DT +>3.1.4 (12/29/1997) (alpha test release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>Conf: <TT +CLASS="LITERAL" +>Makefile.in</TT +> created from <TT +CLASS="LITERAL" +>Makefile.am</TT +> by +GNU Automake. Much easier to maintain! </P +></LI +><LI +><P +>General: Hexen II support just started. Not complete. Can't even +decompile correctly a single file.</P +></LI +><LI +><P +>Compile: some general routines in a library.</P +></LI +><LI +><P +>General: Quake II support just started. Not complete. Can't even +decompile deltapacketentities.</P +></LI +></UL +> </P +></DD +><DT +>3.1.5 (1/1/1998) (alpha test release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DM2: text output: many comments included.</P +></LI +><LI +><P +>Docu: SGML-Tools 1.0.2 ready after all.</P +></LI +><LI +><P +>Conf: Automake 1.2 compliant. Some yacc/lex changes were needed.</P +></LI +></UL +> </P +></DD +><DT +>3.1.6 (3/12/1998) (alpha test release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DM2: binary read: nasty malloc/free bug removed.</P +></LI +><LI +><P +>DM2: some new commands got better names.</P +></LI +><LI +><P +>DEM: binary read: CD track totally rewritten.</P +></LI +><LI +><P +>LMP: can handle -v1.10 (for the released DOOM source code distribution)</P +></LI +><LI +><P +>Web: PlanetQuake is the new home.</P +></LI +><LI +><P +>Docu: SGML-Tools 1.0.5 used.</P +></LI +></UL +> </P +></DD +><DT +>3.1.7 (6/17/1998) (alpha test release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DBS: subtle sync problem solved. Thanks to Paul Baker +(<A +HREF="mailto:pbaker@idle.com" +TARGET="_top" +>pbaker@idle.com</A +>) for his bug +report.</P +></LI +><LI +><P +>DM2: text in: parser implemented.</P +></LI +><LI +><P +>DM2: some command names changed.</P +></LI +><LI +><P +>DM2: binary out: implementation started.</P +></LI +></UL +> </P +></DD +><DT +>3.1.8 (7/15/1998) (intermediate beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DM2: server record files implemented.</P +></LI +><LI +><P +>Conf: dist target for source package is working now.</P +></LI +><LI +><P +>Conf: more checks for more platforms.</P +></LI +><LI +><P +>Docu: SGML-Tools 1.0.7 used.</P +></LI +><LI +><P +>QWD: binary in: up to QuakeWorld 2.29BETA.</P +></LI +></UL +> </P +></DD +><DT +>3.1.9 (8/16/1998) (beta release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>QWD: text in: written.</P +></LI +><LI +><P +>QWD: binary out: written. Due to the ongoing demand by many users +I implemented now the QWD binary write routine. This gives together with the +text read routine the first really working QWD editor.</P +></LI +><LI +><P +>DM2: Visual Weapon (VWep) support.</P +></LI +><LI +><P +>DM2: some really bad errors corrected.</P +></LI +><LI +><P +>Conf: After many fights with the Automake system, `make distcheck' +works finally without problems.</P +></LI +></UL +> </P +></DD +><DT +>3.2.0 (9/6/1998) (stable release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DM2: binary read and binary write: long vwep corrected. Now works +<TT +CLASS="LITERAL" +>massive1.dm2</TT +>.</P +></LI +><LI +><P +>DM2: binary write: <TT +CLASS="LITERAL" +>timeofs</TT +> in <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>sound</I +></SPAN +> wasn't even +implemented.</P +></LI +><LI +><P +>DM2: text read: allows now empty <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>packetentities</I +></SPAN +>. Many users +reported this problem in reease 3.1.9. Thanks to all of you.</P +></LI +><LI +><P +>QWD: text read: allows now empty <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>packetentities</I +></SPAN +> like in DM2 +text read.</P +></LI +><LI +><P +>text read: useless terminals removed.</P +></LI +><LI +><P +>DM2: unused bits in bit mask (<SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>sound</I +></SPAN +>, <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>spawnbaseline</I +></SPAN +>, +<SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>packetentities</I +></SPAN +>) detected. It's a real mess that Keygrip 2 set unused +bits in DM2 files but I implemeted an easy way to cope with it. +Now works <TT +CLASS="LITERAL" +>latenite.dm2</TT +>.</P +></LI +><LI +><P +>DM2: text read: allows now empty <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>playerinfo</I +></SPAN +>. Now works +<TT +CLASS="LITERAL" +>grenbfg.dm2</TT +>.</P +></LI +><LI +><P +>DEM: Hexen II support (it was always only a small subset) totally +removed.</P +></LI +></UL +> </P +></DD +><DT +>3.2.1 (9/8/1998) (stable release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DEM: text write: didn't write the CD track. A stupid integration +error. I know, I actually have to make a software quality test with all my +test demos before the upload.</P +></LI +><LI +><P +>DEM: to text: problems with <TT +CLASS="LITERAL" +>--game QUAKE</TT +> switch. Not really +solved. Just a kludge inserted, which even slows the program down a bit.</P +></LI +></UL +> </P +></DD +><DT +>3.2.2 (1/9/1999) (public release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>QWD: bin read: protocol version 27 (game version 2.29BETA and up) +corrected.</P +></LI +><LI +><P +>QWD: read text: many small but important parsing problems +removed. This was possible because Joel Baxter +(<A +HREF="mailto:jbaxter@lemur.stanford.edu" +TARGET="_top" +>jbaxter@lemur.stanford.edu</A +>) +provided me with a problematic QWD file (recorded with game version 2.21) and +many good hints.</P +></LI +><LI +><P +>QWD: <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>updatepl</I +></SPAN +> better.</P +></LI +><LI +><P +>DM2: updated up to game version 3.20.</P +></LI +><LI +><P +>DM2: bin read: <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>temp_entity</I +></SPAN +> parse code directly +calculated from the DM2 specs.</P +></LI +><LI +><P +>Docu: SGML-Tools 1.0.9 used.</P +></LI +><LI +><P +>Compile: Cygwin and Mingw32 binaries are cross-compiled with the +Cygwin toolset version B20.1.</P +></LI +><LI +><P +>DM2cat: The DM2 file concatenator included.</P +></LI +></UL +> </P +></DD +><DT +>3.2.3 (1/12/1999) (public release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>Compile: udm2-te[123].c are created directly in the source +directory.</P +></LI +><LI +><P +>Package: udm2-te[123].c are included in the source and full +package. +I forgot them in the last release. Thanks to Stefan Schwoon (<A +HREF="mailto:schwoon@informatik.tu-muenchen.de" +TARGET="_top" +>schwoon@informatik.tu-muenchen.de</A +>) for mention this error.</P +></LI +><LI +><P +>The script to extract the C-Source out of the specs file is included +too.</P +></LI +><LI +><P +>WWW: upload script uploads now the packages to the right place to +deliver them to all <A +HREF="http://www.cdrom.com" +TARGET="_top" +>http://www.cdrom.com</A +> mirrors. In the last +release this was totally wrong.</P +></LI +></UL +> </P +></DD +><DT +>3.2.4 (1/19/1999) (public release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>QWD: bin read: new <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>serverinfo</I +></SPAN +> message wrong handled. +Thanks to Michale Hofele (<A +HREF="mailto:michael@i603.hadiko.de" +TARGET="_top" +>michael@i603.hadiko.de</A +>) for the bug-report.</P +></LI +></UL +> </P +></DD +><DT +>3.2.5 (4/6/1999) (public release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>Conf: Autoconf 2.13 and Automake 1.4 used.</P +></LI +><LI +><P +>DEMcut: interactive mode corrected. Thanks to Vasily Kuznetsov +(<A +HREF="mailto:VKuznetsov@microtest.ru" +TARGET="_top" +>VKuznetsov@microtest.ru</A +>) for the bug-report and patch.</P +></LI +><LI +><P +>QWD: bin read: <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>setpause</I +></SPAN +> corrected. +Thanks to Christer Sandin (<A +HREF="mailto:czsuch@ocag.ch" +TARGET="_top" +>czsuch@ocag.ch</A +>) for his bug report.</P +></LI +><LI +><P +>DM2: multi-level repair corrected. Thanks to Zerox +(<A +HREF="mailto:zerox@prism.ne.mediaone.net" +TARGET="_top" +>zerox@prism.ne.mediaone.net</A +>) for the bug-report and a short demo +file.</P +></LI +></UL +> </P +></DD +><DT +>3.2.6 (4/30/1999) (public release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>QWD: bin read: initialization of the precache lists for game version +2.20 and higher corrected.</P +></LI +><LI +><P +>QWD: <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>maxspeed</I +></SPAN +> and <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>entgravity</I +></SPAN +> corrected.</P +></LI +><LI +><P +>Thanks to R. Quaak (<A +HREF="mailto:jaqua00@direct.a2000.nl" +TARGET="_top" +>jaqua00@direct.a2000.nl</A +>) for the <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>useful</I +></SPAN +> bug report and a +short demo file. +Remember: with a good bug report and a short demo file, I can correct a bug +really fast.</P +></LI +></UL +> </P +></DD +><DT +>3.2.7 (5/24/1999) (bug fix release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>Compile: source can be compiled with C++ compilers too. No C++ +specific feature used up to now. Many new C++ related warnings corrected.</P +></LI +><LI +><P +>General: severe buffer overflow problems corrected. +Thanks to Nathan Whitaker (<A +HREF="mailto:naif@3dcoder.freeserve.co.uk" +TARGET="_top" +>naif@3dcoder.freeserve.co.uk</A +>) for the bug report and a demo file.</P +></LI +><LI +><P +>Compile: Linux binaries are glibc finally. I updated my main development +system from SuSE Linux 4.2 (about 4 years old) to SuSE Linux 6.1 to do +this.</P +></LI +></UL +> </P +></DD +><DT +>3.2.8 (6/3/1999) (bug fix release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>QWD: <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>modellist</I +></SPAN +> and <SPAN +CLASS="emphasis" +><I +CLASS="EMPHASIS" +>soundlist</I +></SPAN +> corrected. +Thanks to Hoffy +(<A +HREF="mailto:ripple@powerup.com.au" +TARGET="_top" +>ripple@powerup.com.au</A +>) +for the bug report and a demo file.</P +></LI +></UL +> </P +></DD +><DT +>3.2.9 (8/18/1999) (public release)</DT +><DD +><P +> <P +></P +><UL +><LI +><P +>DM2: multi-level repair method improved. +Thanks to Mike Dowell +(<A +HREF="mailto:mdowell@Mike-D.com" +TARGET="_top" +>mdowell@Mike-D.com</A +>) +for the bug report and a demo file.</P +></LI +><LI +><P +>DM3: some code fragments prepared but nothing compiled in.</P +></LI +><LI +><P +>Compile: MS-DOS binaries cross-compiled with egcs-2.91.66.</P +></LI +></UL +></P +></DD +><DT +>3.3.0 (1/23/2000) (public release)</DT +><DD +><P +><P +></P +><UL +><LI +><P +>DM2: RLA (Quake II Relay) support.</P +></LI +><LI +><P +>Docu: Some links updated.</P +></LI +></UL +></P +></DD +><DT +>3.4.0 (8/29/2004) (alpha test release)</DT +><DD +><P +><P +></P +><UL +><LI +><P +>Compile: Compiled everything on a current platform.</P +></LI +><LI +><P +>Docu: Used new tools to generate the documentation.</P +></LI +></UL +></P +></DD +><DT +>3.4.1 (3/4/2006) (alpha test release)</DT +><DD +><P +><P +></P +><UL +><LI +><P +>DM3: Support added.</P +></LI +><LI +><P +>Docu: DM3 mentioned.</P +></LI +><LI +><P +>Compile: Compiled everything on SuSE Linux 10.0.</P +></LI +></UL +></P +></DD +></DL +></DIV +></P +><P +>Plan for 4.0.0 in order of importance + +<P +></P +><OL +TYPE="1" +><LI +><P +>Block-oriented rewrite of the text parse routines.</P +></LI +><LI +><P +>Object-oriented demo handling. This is really necesary for further recording +formats.</P +></LI +><LI +><P +>More code generation out of the XML specs source.</P +></LI +><LI +><P +>Strict separation of the different recording types and the main program. +Maybe something like <TT +CLASS="LITERAL" +>librecord.so</TT +>.</P +></LI +><LI +><P +><TT +CLASS="LITERAL" +>--split-multi</TT +> option to split multi-level recordings.</P +></LI +><LI +><P +>Half-Life (DEM), Heretic II (DM2) and Sin (DM2) support.</P +></LI +><LI +><P +>DEMcut and DBS with QWD and DM2 support.</P +></LI +><LI +><P +>File-IO from <TT +CLASS="LITERAL" +>stdin</TT +> and to <TT +CLASS="LITERAL" +>stdout</TT +>, really difficult is the +file type detection. </P +></LI +><LI +><P +>Redneck Rampage decompression.</P +></LI +></OL +> </P +><P +>Ideas finally dropped out: + +<P +></P +><OL +TYPE="1" +><LI +><P +>Hexen II and HexenWorld support.</P +></LI +></OL +> </P +><P +>Open problems + +<P +></P +><OL +TYPE="1" +><LI +><P +>Does someone know the difference between the Redneck Rampage compression +algorithm and the one used in Duke Nukem 3D?</P +></LI +></OL +> </P +><P +>A new regular version of LMPC (like 3.5.0) will be announced on +<A +HREF="http://www.bluesnews.com" +TARGET="_top" +>BluesNews</A +> and on +<A +HREF="http://www.planetquake.com" +TARGET="_top" +>PlanetQuake</A +>.</P +><P +>You can download LMPC from my <A +HREF="http://www.planetquake.com/demospecs" +TARGET="_top" +>Demo Specs page</A +>.</P +><P +>There you will find always the latest release with new features +and brand new bugs.</P +></DIV +></DIV +></BODY +></HTML +>
\ No newline at end of file diff --git a/games/lmpc/files/patch-src+quake3+code+game+q_shared.h b/games/lmpc/files/patch-src+quake3+code+game+q_shared.h new file mode 100644 index 000000000000..a13bc8a0e259 --- /dev/null +++ b/games/lmpc/files/patch-src+quake3+code+game+q_shared.h @@ -0,0 +1,75 @@ +--- src/quake3/code/game/q_shared.h.orig Fri Mar 3 18:24:45 2006 ++++ src/quake3/code/game/q_shared.h Thu Mar 16 22:20:37 2006 +@@ -122,9 +122,42 @@ + + #define QDECL + +-short ShortSwap (short l); +-int LongSwap (int l); +-float FloatSwap (const float *f); ++typedef unsigned char byte; ++ ++static short ShortSwap (short l) ++{ ++ byte b1, b2; ++ ++ b1 = l & 255; ++ b2 = (l >> 8) & 255; ++ return ((b1 << 8) + b2); ++} ++ ++static int LongSwap (int l) ++{ ++ byte b1, b2, b3, b4; ++ ++ b1 = l & 255; ++ b2 = (l >> 8) & 255; ++ b3 = (l >> 16) & 255; ++ b4 = (l >> 24) & 255; ++ return (((int)b1 << 24) + ((int)b2 << 16) + ((int)b3 << 8) + b4); ++} ++ ++typedef union { ++ float f; ++ unsigned int i; ++} _FloatByteUnion; ++ ++static float FloatSwap (const float *f) ++{ ++ const _FloatByteUnion *in; ++ _FloatByteUnion out; ++ ++ in = (_FloatByteUnion *)f; ++ out.i = LongSwap(in->i); ++ return (out.f); ++} + + /*======================= WIN32 DEFINES ================================= */ + +@@ -308,12 +341,14 @@ + + /* bk010116 - omitted Q3STATIC (see Linux above), broken target */ + +-#if !idppc ++#include <machine/endian.h> ++ ++#if BYTE_ORDER == LITTLE_ENDIAN + static short BigShort( short l) { return ShortSwap(l); } + #define LittleShort +-static int BigLong(int l) { LongSwap(l); } ++static int BigLong(int l) { return LongSwap(l); } + #define LittleLong +-static float BigFloat(const float *l) { FloatSwap(l); } ++static float BigFloat(const float *l) { return FloatSwap(l); } + #define LittleFloat + #else + #define BigShort +@@ -423,8 +458,6 @@ + #endif + + /*============================================================= */ +- +-typedef unsigned char byte; + + typedef enum {qfalse, qtrue} qboolean; + diff --git a/games/lmpc/pkg-descr b/games/lmpc/pkg-descr new file mode 100644 index 000000000000..bdc11b93697e --- /dev/null +++ b/games/lmpc/pkg-descr @@ -0,0 +1,9 @@ +LMPC is a tool to manipulate games recordings (demos). Supported games are +DOOM, DOOM II, Heretic, Hexen, Strife (LMP files), Duke Nukem 3D, Redneck +Rampage (DMO files), Quake (DEM), QuakeWorld (QWD), Quake II (DM2, client +recorded, server recorded, relay files), and Quake III Arena (DM3 files, or +dm_68 more precisely). It also includes DEM file cutter tool (DEMcut), DEM +text file analyser (DEMA), demo broadcasting server (DBS), and DM2 file +concatenator (DM2cat). + +WWW: http://www.planetquake.com/demospecs/lmpc-alpha/ |