<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.eduke32.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Plugwash</id>
	<title>EDukeWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.eduke32.com/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Plugwash"/>
	<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/wiki/Special:Contributions/Plugwash"/>
	<updated>2026-04-28T09:16:50Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.47.0-alpha</generator>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Displayrand&amp;diff=10016</id>
		<title>Displayrand</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Displayrand&amp;diff=10016"/>
		<updated>2011-11-10T10:45:42Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;displayrand&#039;&#039;&#039; &amp;lt;gamevar&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
generates a random number between 0 and a system-specific maximum value and assigns it to &amp;lt;gamevar&amp;gt;. Specifically, the maximum values may differ between EDuke32 builds produced with the GCC and MSVC compilers, and/or operating systems. Use of this function is thus discouraged.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;displayrandvar&#039;&#039;&#039; &amp;lt;gamevar&amp;gt; &amp;lt;maxvalue_constant&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;displayrandvarvar&#039;&#039;&#039; &amp;lt;gamevar&amp;gt; &amp;lt;maxvalue_gamevar&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The &#039;&#039;&#039;displayrandvar&#039;&#039;&#039; commands limit the number to be between 0 and &amp;lt;maxvalue&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;displayrandvarvar&#039;&#039;&#039; takes a [[gamevar]] rather than a constant or a [[define]]d label for &amp;lt;maxvalue&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
This function must ONLY be used in unsynchronized code. Use in syncronized code is almost certain to cause desyncs.&lt;br /&gt;
&lt;br /&gt;
See [[randomseed]].&lt;br /&gt;
&lt;br /&gt;
[[Category:EDuke32 specific commands]]&lt;br /&gt;
[[Category:Gamevar manipulation]]&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Building_EDuke32_on_Windows&amp;diff=10015</id>
		<title>Building EDuke32 on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Building_EDuke32_on_Windows&amp;diff=10015"/>
		<updated>2011-11-10T10:42:50Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: /* Building on Windows with Microsoft command line compilers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Building on Windows with MinGW/GNU Make==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[http://sourceforge.net/downloads/mingw/ automated MinGW installer]&lt;br /&gt;
*&#039;&#039;&#039;[http://www.nasm.us/ NASM]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[http://alleg.sourceforge.net/files/dx70_mgw.zip DirectX 7 SDK for MinGW]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[http://alleg.sourceforge.net/files/dx80_mgw.zip DirectX 8 SDK for MinGW]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
First, install MinGW and MSYS using the automated MinGW installer. This should be relatively straightforward and will install MSYS (the shell and utility commands) and MinGW (the compiler suite). This guide assumes that they&#039;re installed in &#039;&#039;&#039;c:/MinGW&#039;&#039;&#039; and &#039;&#039;&#039;c:/MinGW/msys&#039;&#039;&#039; -- from the wording on their page, anything else is BAD.&lt;br /&gt;
&lt;br /&gt;
Next, download NASM and extract its contents to the MinGW/bin folder, so nasm.exe is located there.&lt;br /&gt;
&lt;br /&gt;
After that, download, extract, and run [[File:MinGW EDuke32 Setup Helper.zip]]. It will help ensure that everything is installed correctly.&lt;br /&gt;
&lt;br /&gt;
Finally, download the above DirectX SDKs and extract them to directories, such as &#039;&#039;&#039;c:/MinGW/sdks/dx70_mgw&#039;&#039;&#039; and &#039;&#039;&#039;c:/MinGW/sdks/dx80_mgw&#039;&#039;&#039;. If you don&#039;t want to take an additional step later on of configuring these directories, copy them (7 first, then 8) over &#039;&#039;&#039;c:/MinGW/&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====configuration====&lt;br /&gt;
If you opted to keep your compiler clean in the previous paragraph, you will need to tell EDuke32 where to find the SDK. The recommended way to do this is to append the definition the make command when building, like the following examples:&lt;br /&gt;
&lt;br /&gt;
 make DXROOT_OVERRIDE=c:/MinGW/sdks/dx80_mgw&lt;br /&gt;
 make RELEASE=0 DXROOT_OVERRIDE=c:/MinGW/sdks/dx80_mgw&lt;br /&gt;
&lt;br /&gt;
If your directory is different, change it to yours. Keep in mind the lowercase drive letter and the forward slashes instead of backslashes.&lt;br /&gt;
&lt;br /&gt;
The alternate method is to make some adaptations to the files describing the build process, the &#039;&#039;Makefile&#039;&#039;s. Usually, only two files need to be edited: &#039;&#039;&#039;Makefile&#039;&#039;&#039; and &#039;&#039;&#039;build/Makefile&#039;&#039;&#039;. For each of them, the line in question sets the path where the DirectX 8 SDK is located, like this:&lt;br /&gt;
 DXROOT=c:/MinGW/sdks/dx80_mgw&lt;br /&gt;
Simply change it to your DX SDK installation path.&lt;br /&gt;
&lt;br /&gt;
====compiling====&lt;br /&gt;
Now that we&#039;ve got everything together, go to the base directory containing the EDuke32 source code, type&lt;br /&gt;
 make&lt;br /&gt;
and cross your fingers: this will attempt to build EDuke32 and Mapster32. To compile only either the game or the editor, simply give &#039;&#039;make&#039;&#039; the name of the executable, like&lt;br /&gt;
 make eduke32.exe&lt;br /&gt;
To compile a version suitable for later debugging with GDB, append &#039;&#039;RELEASE=0&#039;&#039; to the command, like this:&lt;br /&gt;
 make RELEASE=0&lt;br /&gt;
To have more useful function names when doing a backtrace (see &#039;&#039;&#039;debugging&#039;&#039;&#039; below), it is also advisable to disable stack protectors, like this:&lt;br /&gt;
 make F_STACK_PROTECTOR_ALL=-fno-stack-protector RELEASE=0&lt;br /&gt;
Finally, if you are building on GCC 3, append &#039;&#039;GCC_MAJOR=3&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====troubleshooting====&lt;br /&gt;
If something doesn&#039;t go as planned, don&#039;t despair. Most issues are resolved rather quickly.&lt;br /&gt;
&lt;br /&gt;
* If you see a barrage of error messages saying that some symbols are not defined, check whether you have all necessary prerequisites like the DirectX SDK installed and that the paths in the Makefile point to the right location.&lt;br /&gt;
* If you get errors at the end of the build process (technically, at &#039;&#039;link time&#039;&#039;), there&#039;s usually a problem with the libraries -- the linker can&#039;t find one or more &#039;&#039;.a&#039;&#039; files &#039;&#039;[needs explanation]&#039;&#039;.&lt;br /&gt;
* Finally, if the executable starts but aborts shortly thereafter, a &#039;&#039;dynamic link library&#039;&#039; may be missing. Usually you&#039;ll get a helpful message with its name: check the MinGW download page then.&lt;br /&gt;
&lt;br /&gt;
====debugging====&lt;br /&gt;
The most insidious types of bugs are those that occur randomly and with no apparent pattern. To help the developers tracing down &#039;&#039;crashes&#039;&#039; happening this way, you could try running a debug version of the executable under the GNU debugger until the crash happens. To do this, start it like this (mapster32.exe being an example):&lt;br /&gt;
 gdb --args mapster32.exe &#039;&#039;[additional arguments...]&#039;&#039;&lt;br /&gt;
and enter the&lt;br /&gt;
 r&lt;br /&gt;
(run) command at the GDB prompt. When the program crashes, you will be taken back to the prompt. Enter&lt;br /&gt;
 bt&lt;br /&gt;
(backtrace) there. This will print out the location where the crash occurred and serve as a first diagnostic to the developers.&lt;br /&gt;
&lt;br /&gt;
==Building on Windows with Microsoft command line compilers==&lt;br /&gt;
Eduke32 can be built using freely downloadable MS tools. Unfortunately MS does not appear to offer a single package containing all the needed tools so it is nessacery to get them from serveral different places.&lt;br /&gt;
&lt;br /&gt;
download and install the windows SDK from http://www.microsoft.com/download/en/confirmation.aspx?id=11310 accept the defaults in the installer.&lt;br /&gt;
&lt;br /&gt;
download and install the WDK from http://www.microsoft.com/download/en/details.aspx?id=11800 select the &amp;quot;full development environment&amp;quot; option in the installer.&lt;br /&gt;
&lt;br /&gt;
download and install visual c++ 2008 express from http://www.microsoft.com/visualstudio/en-us/products/2008-editions/express&lt;br /&gt;
&lt;br /&gt;
Note that the following instructions assume the above programs were installed in the default locations on a 32-bit windows system. If they are installed in other locations then paths in later instructions will need to be adjusted.&lt;br /&gt;
&lt;br /&gt;
download http://www.vorbis.com/files/1.0.1/windows/OggVorbis-win32sdk-1.0.1.zip and extract it (These instructions assume it was extracted in c:\)&lt;br /&gt;
&lt;br /&gt;
copy lib.exe from C:\Program Files\Microsoft Visual Studio 9.0\VC\bin to C:\WinDDK\7600.16385.1\bin\x86&amp;lt;br&amp;gt;&lt;br /&gt;
copy mt.exe from C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin to C:\WinDDK\7600.16385.1\bin\x86&lt;br /&gt;
&lt;br /&gt;
start the &amp;quot;windows XP x86 free build environment&amp;quot; from the WDK&lt;br /&gt;
&lt;br /&gt;
set up paths etc&lt;br /&gt;
&lt;br /&gt;
 set Include=C:\WinDDK\7600.16385.1\inc\api;C:\WINDDK\7600.16385.1\inc\crt;C:\oggvorbis-win32sdk-1.0.1\include&lt;br /&gt;
 set Lib=C:\WinDDK\7600.16385.1\lib;C:\WINDDK\7600.16385.1\lib\wxp\i386;C:\WINDDK\7600.16385.1\lib\wlh\i386;C:\oggvorbis-win32sdk-1.0.1\lib;C:\WINDDK\7600.16385.1\lib\Crt\i386&lt;br /&gt;
 PATH=C:\WinDDK\7600.16385.1\tools\sdv\bin;C:\WinDDK\7600.16385.1\bin\x86\oacr;C:\WinDDK\7600.16385.1\tools\pfd\bin\bin\x86;C:\WinDDK\7600.16385.1\tools\tracing\i386;C:\WinDDK\7600.16385.1\bin\x86;C:\WinDDK\7600.16385.1\bin\x86\x86;C:\WinDDK\7600.16385.1\bin\SelfSign;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem&lt;br /&gt;
&lt;br /&gt;
change to the directory containg your eduke32 source tree and run&lt;br /&gt;
 nmake -f Makefile.msvc&lt;br /&gt;
&lt;br /&gt;
==Building on Windows with Microsoft Visual Studio 2008==&lt;br /&gt;
&lt;br /&gt;
To compile EDuke32 with VS08, you will need to install the following:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[http://www.vorbis.com/files/1.0.1/windows/OggVorbis-win32sdk-1.0.1.zip OggVorbis-win32sdk-1.0.1.zip]&#039;&#039;&#039; - Ogg Vorbis libraries&lt;br /&gt;
* Plus a &#039;&#039;&#039;DirectX SDK&#039;&#039;&#039; (note that you need the SDK- &#039;&#039;&#039;Source Development Kit&#039;&#039;&#039;, not the DDK- Driver Development Kit), DirectX March 2009 or a previous version, such as the &#039;&#039;&#039;DirectX 7&#039;&#039;&#039; SDK which is confirmed to work.&lt;br /&gt;
&lt;br /&gt;
Install each of these locally to somewhere where you can find them easily, such as the Program Files directory.&lt;br /&gt;
&lt;br /&gt;
===Using SVN===&lt;br /&gt;
&lt;br /&gt;
If you want to use an SVN to build the game read this section. If you already have the latest source files or don&#039;t want to use an SVN, skip to the next part.&lt;br /&gt;
&lt;br /&gt;
First, you need to download a free SVN plugin for Visual Studio, such as:&lt;br /&gt;
* &#039;&#039;&#039;[http://ankhsvn.open.collab.net/ AnkhSVN]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Install AnkhSVN, you can find help for installing it from it&#039;s website.&lt;br /&gt;
&lt;br /&gt;
# Launch Microsoft Visual Studio.&lt;br /&gt;
# Navigate through the menus: &#039;&#039;&#039;File &amp;amp;rarr; Subversion &amp;amp;rarr; Open from Subversion...&#039;&#039;&#039;&lt;br /&gt;
# Type in the URL of the EDuke32 SVN.&lt;br /&gt;
# Select the &#039;&#039;&#039;eduke32.vcproj&#039;&#039;&#039; file and click Open.&lt;br /&gt;
&lt;br /&gt;
AnkhSVN now asks you where to save the project locally.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT!&#039;&#039;&#039; EDuke32 is a makefile project, as such, it needs to be located in a directory with only [http://en.wikipedia.org/wiki/8.3_filename 8 characters] (for example &#039;&#039;&#039;C:\EDuke32\&#039;&#039;&#039; or &#039;&#039;&#039;D:\Source\EDuke32&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Choose the local directory, the &#039;&#039;&#039;Type&#039;&#039;&#039; drop-down menu should be set to &#039;&#039;&#039;Latest Version&#039;&#039;&#039;, click on OK to save the project on your hard drive. The program now downloads the latest files from the SVN.&lt;br /&gt;
&lt;br /&gt;
When done, EDuke32 is shown as your current solution, now you can continue onto either fiddling with the source or just compiling it.&lt;br /&gt;
&lt;br /&gt;
===Includes===&lt;br /&gt;
&lt;br /&gt;
As already mentioned before, EDuke32 is a makefile project so you cannot include OGGVorbis in the &#039;&#039;&#039;Project &amp;amp;rarr; Properties&#039;&#039;&#039; menu as usual, but you will need to add the includes in the global properties:&lt;br /&gt;
&lt;br /&gt;
# Navigate to &#039;&#039;&#039;Tools &amp;amp;rarr; Options&#039;&#039;&#039;.&lt;br /&gt;
# Click on &#039;&#039;&#039;Show all settings&#039;&#039;&#039; to show the settings we need to change.&lt;br /&gt;
# Open the &#039;&#039;&#039;Projets and Solutions&#039;&#039;&#039; category and choose &#039;&#039;&#039;VC++ Directories&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Now we need to link the Include directories.&lt;br /&gt;
&lt;br /&gt;
====General Include directories====&lt;br /&gt;
&lt;br /&gt;
Make sure the Platform is set to Win32 and select &#039;&#039;&#039;Include files&#039;&#039;&#039; from the &#039;&#039;&#039;Show directories for:&#039;&#039;&#039; -drop down menu.&lt;br /&gt;
&lt;br /&gt;
Click on an empty row and add the local directory names for OGGVorbis and DirectX SDK. For example:&lt;br /&gt;
* C:\Program Files\oggvorbis-win32sdk-1.0.1\include&lt;br /&gt;
* C:\Program Files\DirectX 7 SDK\include&lt;br /&gt;
&lt;br /&gt;
Notice how each directory has the include subdirectory chosen (&amp;quot;\include\&amp;quot;). If your version differs, try finding the correct directory for each or the program will not compile properly.&lt;br /&gt;
&lt;br /&gt;
The new linked directories are saved automatically so don&#039;t click on OK, it will only close the Options menu.&lt;br /&gt;
&lt;br /&gt;
Next up, we need to link the libaries.&lt;br /&gt;
&lt;br /&gt;
====Library directories====&lt;br /&gt;
&lt;br /&gt;
Next, Select &#039;&#039;&#039;Library files&#039;&#039;&#039; from the &#039;&#039;&#039;Show directories for:&#039;&#039;&#039; -drop down menu.&lt;br /&gt;
&lt;br /&gt;
Click on an empty row and add the local directory names for OGGVorbis and DirectX SDK. For example:&lt;br /&gt;
* C:\Program Files\oggvorbis-win32sdk-1.0.1\lib&lt;br /&gt;
* C:\Program Files\DirectX 7 SDK\lib&lt;br /&gt;
&lt;br /&gt;
Notice how each directory has the library subdirectory chosen (either &#039;&#039;&#039;lib&#039;&#039;&#039; or &#039;&#039;&#039;libs&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Now click on OK to exit the Options menu.&lt;br /&gt;
&lt;br /&gt;
===Compiling===&lt;br /&gt;
&lt;br /&gt;
Either click on the green play button, or navigate the menus to &#039;&#039;&#039;Build &amp;amp;rarr; Build eduke32&#039;&#039;&#039; and VS08 starts compiling the executables.&lt;br /&gt;
&lt;br /&gt;
You will probably see alot of warnings with wrong datatype conversions but these don&#039;t affect the outcome.&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Building_EDuke32_on_Windows&amp;diff=9999</id>
		<title>Building EDuke32 on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Building_EDuke32_on_Windows&amp;diff=9999"/>
		<updated>2011-10-30T18:48:42Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: /* Building on Windows with Microsoft Visual C++ */ update to work with the latest eduke32 source and with currently available downloads&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Building on Windows with MinGW/GNU Make==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;[http://sourceforge.net/downloads/mingw/ automated MinGW installer]&lt;br /&gt;
*&#039;&#039;&#039;[http://www.nasm.us/ NASM]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[http://alleg.sourceforge.net/files/dx70_mgw.zip DirectX 7 SDK for MinGW]&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;[http://alleg.sourceforge.net/files/dx80_mgw.zip DirectX 8 SDK for MinGW]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
First, install MinGW and MSYS using the automated MinGW installer. This should be relatively straightforward and will install MSYS (the shell and utility commands) and MinGW (the compiler suite). This guide assumes that they&#039;re installed in &#039;&#039;&#039;c:/MinGW&#039;&#039;&#039; and &#039;&#039;&#039;c:/MinGW/msys&#039;&#039;&#039; -- from the wording on their page, anything else is BAD.&lt;br /&gt;
&lt;br /&gt;
Next, download NASM and extract its contents to the MinGW/bin folder, so nasm.exe is located there.&lt;br /&gt;
&lt;br /&gt;
After that, download, extract, and run [[File:MinGW EDuke32 Setup Helper.zip]]. It will help ensure that everything is installed correctly.&lt;br /&gt;
&lt;br /&gt;
Finally, download the above DirectX SDKs and extract them to directories, such as &#039;&#039;&#039;c:/MinGW/sdks/dx70_mgw&#039;&#039;&#039; and &#039;&#039;&#039;c:/MinGW/sdks/dx80_mgw&#039;&#039;&#039;. If you don&#039;t want to take an additional step later on of configuring these directories, copy them (7 first, then 8) over &#039;&#039;&#039;c:/MinGW/&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====configuration====&lt;br /&gt;
If you opted to keep your compiler clean in the previous paragraph, you will need to tell EDuke32 where to find the SDK. The recommended way to do this is to append the definition the make command when building, like the following examples:&lt;br /&gt;
&lt;br /&gt;
 make DXROOT_OVERRIDE=c:/MinGW/sdks/dx80_mgw&lt;br /&gt;
 make RELEASE=0 DXROOT_OVERRIDE=c:/MinGW/sdks/dx80_mgw&lt;br /&gt;
&lt;br /&gt;
If your directory is different, change it to yours. Keep in mind the lowercase drive letter and the forward slashes instead of backslashes.&lt;br /&gt;
&lt;br /&gt;
The alternate method is to make some adaptations to the files describing the build process, the &#039;&#039;Makefile&#039;&#039;s. Usually, only two files need to be edited: &#039;&#039;&#039;Makefile&#039;&#039;&#039; and &#039;&#039;&#039;build/Makefile&#039;&#039;&#039;. For each of them, the line in question sets the path where the DirectX 8 SDK is located, like this:&lt;br /&gt;
 DXROOT=c:/MinGW/sdks/dx80_mgw&lt;br /&gt;
Simply change it to your DX SDK installation path.&lt;br /&gt;
&lt;br /&gt;
====compiling====&lt;br /&gt;
Now that we&#039;ve got everything together, go to the base directory containing the EDuke32 source code, type&lt;br /&gt;
 make&lt;br /&gt;
and cross your fingers: this will attempt to build EDuke32 and Mapster32. To compile only either the game or the editor, simply give &#039;&#039;make&#039;&#039; the name of the executable, like&lt;br /&gt;
 make eduke32.exe&lt;br /&gt;
To compile a version suitable for later debugging with GDB, append &#039;&#039;RELEASE=0&#039;&#039; to the command, like this:&lt;br /&gt;
 make RELEASE=0&lt;br /&gt;
To have more useful function names when doing a backtrace (see &#039;&#039;&#039;debugging&#039;&#039;&#039; below), it is also advisable to disable stack protectors, like this:&lt;br /&gt;
 make F_STACK_PROTECTOR_ALL=-fno-stack-protector RELEASE=0&lt;br /&gt;
Finally, if you are building on GCC 3, append &#039;&#039;GCC_MAJOR=3&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
====troubleshooting====&lt;br /&gt;
If something doesn&#039;t go as planned, don&#039;t despair. Most issues are resolved rather quickly.&lt;br /&gt;
&lt;br /&gt;
* If you see a barrage of error messages saying that some symbols are not defined, check whether you have all necessary prerequisites like the DirectX SDK installed and that the paths in the Makefile point to the right location.&lt;br /&gt;
* If you get errors at the end of the build process (technically, at &#039;&#039;link time&#039;&#039;), there&#039;s usually a problem with the libraries -- the linker can&#039;t find one or more &#039;&#039;.a&#039;&#039; files &#039;&#039;[needs explanation]&#039;&#039;.&lt;br /&gt;
* Finally, if the executable starts but aborts shortly thereafter, a &#039;&#039;dynamic link library&#039;&#039; may be missing. Usually you&#039;ll get a helpful message with its name: check the MinGW download page then.&lt;br /&gt;
&lt;br /&gt;
====debugging====&lt;br /&gt;
The most insidious types of bugs are those that occur randomly and with no apparent pattern. To help the developers tracing down &#039;&#039;crashes&#039;&#039; happening this way, you could try running a debug version of the executable under the GNU debugger until the crash happens. To do this, start it like this (mapster32.exe being an example):&lt;br /&gt;
 gdb --args mapster32.exe &#039;&#039;[additional arguments...]&#039;&#039;&lt;br /&gt;
and enter the&lt;br /&gt;
 r&lt;br /&gt;
(run) command at the GDB prompt. When the program crashes, you will be taken back to the prompt. Enter&lt;br /&gt;
 bt&lt;br /&gt;
(backtrace) there. This will print out the location where the crash occurred and serve as a first diagnostic to the developers.&lt;br /&gt;
&lt;br /&gt;
==Building on Windows with Microsoft command line compilers==&lt;br /&gt;
Eduke32 can be built using freely downloadable MS tools. Unfortunately MS does not appear to offer a single package containing all the needed tools so it is nessacery to get them from serveral different places.&lt;br /&gt;
&lt;br /&gt;
download and install the windows SDK from http://www.microsoft.com/download/en/confirmation.aspx?id=11310 accept the defaults in the installer.&lt;br /&gt;
&lt;br /&gt;
download and install the WDK from http://www.microsoft.com/download/en/details.aspx?id=11800 select the &amp;quot;full development environment&amp;quot; option in the installer.&lt;br /&gt;
&lt;br /&gt;
download and install visual c++ 2008 express from http://www.microsoft.com/visualstudio/en-us/products/2008-editions/express&lt;br /&gt;
&lt;br /&gt;
Note that the following instructions assume the above programs were installed in the default locations on a 32-bit windows system. If they are installed in other locations then paths in later instructions will need to be adjusted.&lt;br /&gt;
&lt;br /&gt;
download http://www.vorbis.com/files/1.0.1/windows/OggVorbis-win32sdk-1.0.1.zip and extract it (These instructions assume it was extracted in c:\)&lt;br /&gt;
&lt;br /&gt;
copy lib.exe from C:\Program Files\Microsoft Visual Studio 9.0\VC\bin to C:\WinDDK\7600.16385.1\bin\x86&lt;br /&gt;
copy mt.exe from C:\Program Files\Microsoft SDKs\Windows\v6.1\Bin to C:\WinDDK\7600.16385.1\bin\x86&lt;br /&gt;
&lt;br /&gt;
start the &amp;quot;windows XP x86 free build environment&amp;quot; from the WDK&lt;br /&gt;
&lt;br /&gt;
set up paths etc&lt;br /&gt;
&lt;br /&gt;
 set Include=C:\WinDDK\7600.16385.1\inc\api;C:\WINDDK\7600.16385.1\inc\crt;C:\oggvorbis-win32sdk-1.0.1\include&lt;br /&gt;
 set Lib=C:\WinDDK\7600.16385.1\lib;C:\WINDDK\7600.16385.1\lib\wxp\i386;C:\WINDDK\7600.16385.1\lib\wlh\i386;C:\oggvorbis-win32sdk-1.0.1\lib;C:\WINDDK\7600.16385.1\lib\Crt\i386&lt;br /&gt;
 PATH=C:\WinDDK\7600.16385.1\tools\sdv\bin;C:\WinDDK\7600.16385.1\bin\x86\oacr;C:\WinDDK\7600.16385.1\tools\pfd\bin\bin\x86;C:\WinDDK\7600.16385.1\tools\tracing\i386;C:\WinDDK\7600.16385.1\bin\x86;C:\WinDDK\7600.16385.1\bin\x86\x86;C:\WinDDK\7600.16385.1\bin\SelfSign;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
change to the directory containg your eduke32 source tree and run&lt;br /&gt;
 nmake -f Makefile.msvc&lt;br /&gt;
&lt;br /&gt;
==Building on Windows with Microsoft Visual Studio 2008==&lt;br /&gt;
&lt;br /&gt;
To compile EDuke32 with VS08, you will need to install the following:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;[http://www.vorbis.com/files/1.0.1/windows/OggVorbis-win32sdk-1.0.1.zip OggVorbis-win32sdk-1.0.1.zip]&#039;&#039;&#039; - Ogg Vorbis libraries&lt;br /&gt;
* Plus a &#039;&#039;&#039;DirectX SDK&#039;&#039;&#039; (note that you need the SDK- &#039;&#039;&#039;Source Development Kit&#039;&#039;&#039;, not the DDK- Driver Development Kit), DirectX March 2009 or a previous version, such as the &#039;&#039;&#039;DirectX 7&#039;&#039;&#039; SDK which is confirmed to work.&lt;br /&gt;
&lt;br /&gt;
Install each of these locally to somewhere where you can find them easily, such as the Program Files directory.&lt;br /&gt;
&lt;br /&gt;
===Using SVN===&lt;br /&gt;
&lt;br /&gt;
If you want to use an SVN to build the game read this section. If you already have the latest source files or don&#039;t want to use an SVN, skip to the next part.&lt;br /&gt;
&lt;br /&gt;
First, you need to download a free SVN plugin for Visual Studio, such as:&lt;br /&gt;
* &#039;&#039;&#039;[http://ankhsvn.open.collab.net/ AnkhSVN]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Install AnkhSVN, you can find help for installing it from it&#039;s website.&lt;br /&gt;
&lt;br /&gt;
# Launch Microsoft Visual Studio.&lt;br /&gt;
# Navigate through the menus: &#039;&#039;&#039;File &amp;amp;rarr; Subversion &amp;amp;rarr; Open from Subversion...&#039;&#039;&#039;&lt;br /&gt;
# Type in the URL of the EDuke32 SVN.&lt;br /&gt;
# Select the &#039;&#039;&#039;eduke32.vcproj&#039;&#039;&#039; file and click Open.&lt;br /&gt;
&lt;br /&gt;
AnkhSVN now asks you where to save the project locally.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT!&#039;&#039;&#039; EDuke32 is a makefile project, as such, it needs to be located in a directory with only [http://en.wikipedia.org/wiki/8.3_filename 8 characters] (for example &#039;&#039;&#039;C:\EDuke32\&#039;&#039;&#039; or &#039;&#039;&#039;D:\Source\EDuke32&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Choose the local directory, the &#039;&#039;&#039;Type&#039;&#039;&#039; drop-down menu should be set to &#039;&#039;&#039;Latest Version&#039;&#039;&#039;, click on OK to save the project on your hard drive. The program now downloads the latest files from the SVN.&lt;br /&gt;
&lt;br /&gt;
When done, EDuke32 is shown as your current solution, now you can continue onto either fiddling with the source or just compiling it.&lt;br /&gt;
&lt;br /&gt;
===Includes===&lt;br /&gt;
&lt;br /&gt;
As already mentioned before, EDuke32 is a makefile project so you cannot include OGGVorbis in the &#039;&#039;&#039;Project &amp;amp;rarr; Properties&#039;&#039;&#039; menu as usual, but you will need to add the includes in the global properties:&lt;br /&gt;
&lt;br /&gt;
# Navigate to &#039;&#039;&#039;Tools &amp;amp;rarr; Options&#039;&#039;&#039;.&lt;br /&gt;
# Click on &#039;&#039;&#039;Show all settings&#039;&#039;&#039; to show the settings we need to change.&lt;br /&gt;
# Open the &#039;&#039;&#039;Projets and Solutions&#039;&#039;&#039; category and choose &#039;&#039;&#039;VC++ Directories&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Now we need to link the Include directories.&lt;br /&gt;
&lt;br /&gt;
====General Include directories====&lt;br /&gt;
&lt;br /&gt;
Make sure the Platform is set to Win32 and select &#039;&#039;&#039;Include files&#039;&#039;&#039; from the &#039;&#039;&#039;Show directories for:&#039;&#039;&#039; -drop down menu.&lt;br /&gt;
&lt;br /&gt;
Click on an empty row and add the local directory names for OGGVorbis and DirectX SDK. For example:&lt;br /&gt;
* C:\Program Files\oggvorbis-win32sdk-1.0.1\include&lt;br /&gt;
* C:\Program Files\DirectX 7 SDK\include&lt;br /&gt;
&lt;br /&gt;
Notice how each directory has the include subdirectory chosen (&amp;quot;\include\&amp;quot;). If your version differs, try finding the correct directory for each or the program will not compile properly.&lt;br /&gt;
&lt;br /&gt;
The new linked directories are saved automatically so don&#039;t click on OK, it will only close the Options menu.&lt;br /&gt;
&lt;br /&gt;
Next up, we need to link the libaries.&lt;br /&gt;
&lt;br /&gt;
====Library directories====&lt;br /&gt;
&lt;br /&gt;
Next, Select &#039;&#039;&#039;Library files&#039;&#039;&#039; from the &#039;&#039;&#039;Show directories for:&#039;&#039;&#039; -drop down menu.&lt;br /&gt;
&lt;br /&gt;
Click on an empty row and add the local directory names for OGGVorbis and DirectX SDK. For example:&lt;br /&gt;
* C:\Program Files\oggvorbis-win32sdk-1.0.1\lib&lt;br /&gt;
* C:\Program Files\DirectX 7 SDK\lib&lt;br /&gt;
&lt;br /&gt;
Notice how each directory has the library subdirectory chosen (either &#039;&#039;&#039;lib&#039;&#039;&#039; or &#039;&#039;&#039;libs&#039;&#039;&#039;).&lt;br /&gt;
&lt;br /&gt;
Now click on OK to exit the Options menu.&lt;br /&gt;
&lt;br /&gt;
===Compiling===&lt;br /&gt;
&lt;br /&gt;
Either click on the green play button, or navigate the menus to &#039;&#039;&#039;Build &amp;amp;rarr; Build eduke32&#039;&#039;&#039; and VS08 starts compiling the executables.&lt;br /&gt;
&lt;br /&gt;
You will probably see alot of warnings with wrong datatype conversions but these don&#039;t affect the outcome.&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Building_EDuke32_on_Windows&amp;diff=7099</id>
		<title>Building EDuke32 on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Building_EDuke32_on_Windows&amp;diff=7099"/>
		<updated>2008-08-03T16:14:45Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;building eduke32 on windows with microsoft visual c++ &lt;br /&gt;
&lt;br /&gt;
note: this was what worked for me, there are probablly better ways. If you want to document them go right ahead --plugwash.&lt;br /&gt;
&lt;br /&gt;
get visual c++ express edition from http://www.microsoft.com/express/download/ and install it. The paths in theese instructions assume it is installed in the default location.&lt;br /&gt;
&lt;br /&gt;
unfortunately ml.exe is missing from the express edition, lukilly there is a copy in the freely downloadable windows server 2003 ddk which can be obtained from http://www.microsoft.com/whdc/devtools/ddk/default.mspx . Install this and copy ml.exe to your visual studio bin directory&lt;br /&gt;
&lt;br /&gt;
windows.h, windef.h, winnt.h,basetsd.h,guiddef.h, pshpack4.h, pshpack1.h, pshpack2.h, pshpack4.h, pshpack8.h, poppack.h, winbase.h, winerror.h, wingdi.h, winuser.h, tvout.h, winnls.h, wincon.h, winver.h, winreg.h, winnetwk.h, winsvc.h, mcx.h, imm.h, shlobj.h, ole2.h, objbase.h, rpc.h, rpcdce.h, rpcdcep.h, rpcnsi.h, rpcnterr.h, rpcasync.h, rpcndr.h, rpcnsip.h, wtypes.h, unknwn.h, cguid.h, urlmon.h, oleidl.h, servprov.h, msxml.h , oaidl.h, propidl.h, oleauto.h, prsht.h, commctrl.h, shlguid.h, isguids.h, exdisp.h, ocidl.h, docobj.h, shldisp.h, specstrings.h, winsock2.h, qos.h, ws2tcpip.h, ddraw.h, dinput.h, windowsx.h, shellapi.h, winresrc.h, winuser.rh, commctrl.rh, dde.rh, winnt.rh, dlgs.h, mmsystem.h, dsound.h, d3dtypes.h, user32.lib, gdi32.lib, shell32.lib, dxguid.lib, winmm.lib, wsock32.lib, commctl32.lib, glu32.lib, uuid.lib, cderr.h, dde.h, ddeml.h, lzexpand.h, nb30.h, winperf.h, winsock.h, wincrypt.h, winscard.h, winioctl.h, winsmcard.h, commdlg.h and the whole gl include directory also seem to be missing, again theese can be obtained from the windows server 2003 ddk. With the exception of cderr.h, ddeml.h, winperf.h and lzexpand.h which I got from the wnet directory and a few files that were only found in a generic crt directory in the ddk I used the win2K versions from that ddk.&lt;br /&gt;
&lt;br /&gt;
I had to modify ws2tcpip.h to add the following typedef just before the final #ENDIF&lt;br /&gt;
&lt;br /&gt;
typedef int socklen_t; &lt;br /&gt;
&lt;br /&gt;
This was fixed in the &amp;quot;winxp&amp;quot; version of that file included with the ddk but trying to use the winxp version resulted in a demand for another header that I could not meet with bits from the ddk.&lt;br /&gt;
&lt;br /&gt;
I also had to modify windows.h to not include winpref.h which I didn&#039;t have&lt;br /&gt;
&lt;br /&gt;
download http://www.vorbis.com/files/1.0.1/windows/OggVorbis-win32sdk-1.0.1.zip and extracted it (I extracted it in c:\ and work on that assumption in theese instructions)&lt;br /&gt;
&lt;br /&gt;
download http://connect.creativelabs.com/openal/Downloads/OpenAL11CoreSDK.zip and run the installer inside (I installed it in the default location and work on that assumption in theese instructions)&lt;br /&gt;
&lt;br /&gt;
start the visual studio 2005 command prompt&lt;br /&gt;
&lt;br /&gt;
clean up some environment variables that the vs command prompt forgets to clean, add the include paths for vorbis and openal to the include file path and add the path for the vorbis libs to the library path&lt;br /&gt;
&lt;br /&gt;
 PATH=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\Microsoft Visual Studio 8\VC\BIN;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem&lt;br /&gt;
 set INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;C:\oggvorbis-win32sdk-1.0.1\include;C:\Program Files\OpenAL 1.1 SDK\include;AL\include&lt;br /&gt;
 set LIB=C:\Program Files\Microsoft Visual Studio 8\VC\LIB;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\lib;C:\oggvorbis-win32sdk-1.0.1\lib&lt;br /&gt;
change to the build subdirectory of your eduke32 tree and run&lt;br /&gt;
 nmake -f Makefile.msvc&lt;br /&gt;
 cd ..\eduke32&lt;br /&gt;
 nmake -f Makefile.msvc&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Building_EDuke32_on_Windows&amp;diff=7098</id>
		<title>Building EDuke32 on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Building_EDuke32_on_Windows&amp;diff=7098"/>
		<updated>2008-08-03T16:08:19Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;building eduke32 on windows with microsoft visual c++ &lt;br /&gt;
&lt;br /&gt;
note: this was what worked for me, there are probablly better ways. If you want to document them go right ahead --plugwash.&lt;br /&gt;
&lt;br /&gt;
note: i&#039;ve been trying to fix this up for the latest eduke32 snapshot but haven&#039;t got it working yet.&lt;br /&gt;
&lt;br /&gt;
get visual c++ express edition from http://www.microsoft.com/express/download/ and install it&lt;br /&gt;
&lt;br /&gt;
unfortunately ml.exe is missing from the express edition, lukilly there is a copy in the freely downloadable windows server 2003 ddk which can be obtained from http://www.microsoft.com/whdc/devtools/ddk/default.mspx . Install this and copy ml.exe to your visual studio bin directory&lt;br /&gt;
&lt;br /&gt;
windows.h, windef.h, winnt.h,basetsd.h,guiddef.h, pshpack4.h, pshpack1.h, pshpack2.h, pshpack4.h, pshpack8.h, poppack.h, winbase.h, winerror.h, wingdi.h, winuser.h, tvout.h, winnls.h, wincon.h, winver.h, winreg.h, winnetwk.h, winsvc.h, mcx.h, imm.h, shlobj.h, ole2.h, objbase.h, rpc.h, rpcdce.h, rpcdcep.h, rpcnsi.h, rpcnterr.h, rpcasync.h, rpcndr.h, rpcnsip.h, wtypes.h, unknwn.h, cguid.h, urlmon.h, oleidl.h, servprov.h, msxml.h , oaidl.h, propidl.h, oleauto.h, prsht.h, commctrl.h, shlguid.h, isguids.h, exdisp.h, ocidl.h, docobj.h, shldisp.h, specstrings.h, winsock2.h, qos.h, ws2tcpip.h, ddraw.h, dinput.h, windowsx.h, shellapi.h, winresrc.h, winuser.rh, commctrl.rh, dde.rh, winnt.rh, dlgs.h, mmsystem.h, dsound.h, d3dtypes.h, user32.lib, gdi32.lib, shell32.lib, dxguid.lib, winmm.lib, wsock32.lib, commctl32.lib, glu32.lib, uuid.lib, cderr.h, dde.h, ddeml.h, lzexpand.h, nb30.h, winperf.h, winsock.h, wincrypt.h, winscard.h, winioctl.h, winsmcard.h, commdlg.h and the whole gl include directory also seem to be missing, again theese can be obtained from the windows server 2003 ddk. With the exception of cderr.h, ddeml.h, winperf.h and lzexpand.h which I got from the wnet directory and a few files that were only found in a generic crt directory in the ddk I used the win2K versions from that ddk.&lt;br /&gt;
&lt;br /&gt;
I had to modify ws2tcpip.h to add the following typedef just before the final #ENDIF&lt;br /&gt;
&lt;br /&gt;
typedef int socklen_t; &lt;br /&gt;
&lt;br /&gt;
This was fixed in the &amp;quot;winxp&amp;quot; version of that file included with the ddk but trying to use the winxp version resulted in a demand for another header that I could not meet with bits from the ddk.&lt;br /&gt;
&lt;br /&gt;
I also had to modify windows.h to not include winpref.h which I didn&#039;t have&lt;br /&gt;
&lt;br /&gt;
download http://www.vorbis.com/files/1.0.1/windows/OggVorbis-win32sdk-1.0.1.zip and extracted it (I extracted it in c:\ and work on that assumption in theese instructions)&lt;br /&gt;
&lt;br /&gt;
download http://connect.creativelabs.com/openal/Downloads/OpenAL11CoreSDK.zip and run the installer inside (I installed it in the default location and work on that assumption in theese instructions)&lt;br /&gt;
&lt;br /&gt;
start the visual studio 2005 command prompt&lt;br /&gt;
&lt;br /&gt;
clean up some environment variables that the vs command prompt forgets to clean, add the include paths for vorbis and openal to the include file path and add the path for the vorbis libs to the library path&lt;br /&gt;
&lt;br /&gt;
 PATH=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\Microsoft Visual Studio 8\VC\BIN;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem&lt;br /&gt;
 set INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;C:\oggvorbis-win32sdk-1.0.1\include;C:\Program Files\OpenAL 1.1 SDK\include;AL\include&lt;br /&gt;
 set LIB=C:\Program Files\Microsoft Visual Studio 8\VC\LIB;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\lib;C:\oggvorbis-win32sdk-1.0.1\lib&lt;br /&gt;
change to the build subdirectory of your eduke32 tree and run&lt;br /&gt;
 nmake -f Makefile.msvc&lt;br /&gt;
 cd ..\eduke32&lt;br /&gt;
 nmake -f Makefile.msvc&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Building_EDuke32_on_Windows&amp;diff=7097</id>
		<title>Building EDuke32 on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Building_EDuke32_on_Windows&amp;diff=7097"/>
		<updated>2008-08-03T16:07:50Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;building eduke32 on windows with microsoft visual c++ &lt;br /&gt;
&lt;br /&gt;
note: this was what worked for me, there are probablly better ways. If you want to document them go right ahead --plugwash.&lt;br /&gt;
&lt;br /&gt;
note: i&#039;ve been trying to fix this up for the latest eduke32 snapshot but haven&#039;t got it working yet.&lt;br /&gt;
&lt;br /&gt;
get visual c++ express edition from http://www.microsoft.com/express/download/ and install it&lt;br /&gt;
&lt;br /&gt;
unfortunately ml.exe is missing from the express edition, lukilly there is a copy in the freely downloadable windows server 2003 ddk which can be obtained from http://www.microsoft.com/whdc/devtools/ddk/default.mspx . Install this and copy ml.exe to your visual studio bin directory&lt;br /&gt;
&lt;br /&gt;
windows.h, windef.h, winnt.h,basetsd.h,guiddef.h, pshpack4.h, pshpack1.h, pshpack2.h, pshpack4.h, pshpack8.h, poppack.h, winbase.h, winerror.h, wingdi.h, winuser.h, tvout.h, winnls.h, wincon.h, winver.h, winreg.h, winnetwk.h, winsvc.h, mcx.h, imm.h, shlobj.h, ole2.h, objbase.h, rpc.h, rpcdce.h, rpcdcep.h, rpcnsi.h, rpcnterr.h, rpcasync.h, rpcndr.h, rpcnsip.h, wtypes.h, unknwn.h, cguid.h, urlmon.h, oleidl.h, servprov.h, msxml.h , oaidl.h, propidl.h, oleauto.h, prsht.h, commctrl.h, shlguid.h, isguids.h, exdisp.h, ocidl.h, docobj.h, shldisp.h, specstrings.h, winsock2.h, qos.h, ws2tcpip.h, ddraw.h, dinput.h, windowsx.h, shellapi.h, winresrc.h, winuser.rh, commctrl.rh, dde.rh, winnt.rh, dlgs.h, mmsystem.h, dsound.h, d3dtypes.h, user32.lib, gdi32.lib, shell32.lib, dxguid.lib, winmm.lib, wsock32.lib, commctl32.lib, glu32.lib, uuid.lib, cderr.h, dde.h, ddeml.h, lzexpand.h, nb30.h, winperf.h, winsock.h, wincrypt.h, winscard.h, winioctl.h, winsmcard.h, commdlg.h and the whole gl include directory also seem to be missing, again theese can be obtained from the windows server 2003 ddk. With the exception of cderr.h, ddeml.h, winperf.h and lzexpand.h which I got from the wnet directory and a few files that were only found in a generic crt directory in the ddk I used the win2K versions from that ddk.&lt;br /&gt;
&lt;br /&gt;
I had to modify ws2tcpip.h to add the following typedef just before the final #ENDIF&lt;br /&gt;
&lt;br /&gt;
typedef int socklen_t; &lt;br /&gt;
&lt;br /&gt;
This was fixed in the &amp;quot;winxp&amp;quot; version of that file included with the ddk but trying to use the winxp version resulted in a demand for another header that I could not meet with bits from the ddk.&lt;br /&gt;
&lt;br /&gt;
I also had to modify windows.h to not include winpref.h which I didn&#039;t have&lt;br /&gt;
&lt;br /&gt;
download http://www.vorbis.com/files/1.0.1/windows/OggVorbis-win32sdk-1.0.1.zip and extracted it (I extracted it in c:\ and work on that assumption in theese instructions)&lt;br /&gt;
&lt;br /&gt;
download http://connect.creativelabs.com/openal/Downloads/OpenAL11CoreSDK.zip and run the installer inside (I installed it in the default location and work on that assumption in theese instructions)&lt;br /&gt;
&lt;br /&gt;
start the visual studio 2005 command prompt&lt;br /&gt;
&lt;br /&gt;
clean up some environment variables that the vs command prompt forgets to clean, add the include paths for vorbis and openal to the include file path and add the path for the vorbis libs to the library path&lt;br /&gt;
&lt;br /&gt;
 PATH=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\Microsoft Visual Studio 8\VC\BIN;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem&lt;br /&gt;
 set INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;C:\oggvorbis-win32sdk-1.0.1\include;C:\Program Files\OpenAL 1.1 SDK\include;AL\include&lt;br /&gt;
 set LIB=C:\Program Files\Microsoft Visual Studio 8\VC\LIB;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\lib;C:\oggvorbis-win32sdk-1.0.1\lib&lt;br /&gt;
change to the build subdirectory of your eduke32 tree and run&lt;br /&gt;
nmake -f Makefile.msvc&lt;br /&gt;
cd ..\eduke32&lt;br /&gt;
nmake -f Makefile.msvc&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Building_EDuke32_on_Windows&amp;diff=7096</id>
		<title>Building EDuke32 on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Building_EDuke32_on_Windows&amp;diff=7096"/>
		<updated>2008-08-03T16:00:20Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;building eduke32 on windows with microsoft visual c++ &lt;br /&gt;
&lt;br /&gt;
note: this was what worked for me, there are probablly better ways. If you want to document them go right ahead --plugwash.&lt;br /&gt;
&lt;br /&gt;
note: i&#039;ve been trying to fix this up for the latest eduke32 snapshot but haven&#039;t got it working yet.&lt;br /&gt;
&lt;br /&gt;
get visual c++ express edition from http://www.microsoft.com/express/download/ and install it&lt;br /&gt;
&lt;br /&gt;
unfortunately ml.exe is missing from the express edition, lukilly there is a copy in the freely downloadable windows server 2003 ddk which can be obtained from http://www.microsoft.com/whdc/devtools/ddk/default.mspx . Install this and copy ml.exe to your visual studio bin directory&lt;br /&gt;
&lt;br /&gt;
windows.h, windef.h, winnt.h,basetsd.h,guiddef.h, pshpack4.h, pshpack1.h, pshpack2.h, pshpack4.h, pshpack8.h, poppack.h, winbase.h, winerror.h, wingdi.h, winuser.h, tvout.h, winnls.h, wincon.h, winver.h, winreg.h, winnetwk.h, winsvc.h, mcx.h, imm.h, shlobj.h, ole2.h, objbase.h, rpc.h, rpcdce.h, rpcdcep.h, rpcnsi.h, rpcnterr.h, rpcasync.h, rpcndr.h, rpcnsip.h, wtypes.h, unknwn.h, cguid.h, urlmon.h, oleidl.h, servprov.h, msxml.h , oaidl.h, propidl.h, oleauto.h, prsht.h, commctrl.h, shlguid.h, isguids.h, exdisp.h, ocidl.h, docobj.h, shldisp.h, specstrings.h, winsock2.h, qos.h, ws2tcpip.h, ddraw.h, dinput.h, windowsx.h, shellapi.h, winresrc.h, winuser.rh, commctrl.rh, dde.rh, winnt.rh, dlgs.h, mmsystem.h, dsound.h, d3dtypes.h, user32.lib, gdi32.lib, shell32.lib, dxguid.lib, winmm.lib, wsock32.lib, commctl32.lib, glu32.lib, uuid.lib, cderr.h, dde.h, ddeml.h, lzexpand.h, nb30.h, winperf.h, winsock.h, wincrypt.h, winscard.h, winioctl.h, winsmcard.h, commdlg.h and the whole gl include directory also seem to be missing, again theese can be obtained from the windows server 2003 ddk. With the exception of cderr.h, ddeml.h, winperf.h and lzexpand.h which I got from the wnet directory and a few files that were only found in a generic crt directory in the ddk I used the win2K versions from that ddk.&lt;br /&gt;
&lt;br /&gt;
I had to modify ws2tcpip.h to add the following typedef just before the final #ENDIF&lt;br /&gt;
&lt;br /&gt;
typedef int socklen_t; &lt;br /&gt;
&lt;br /&gt;
This was fixed in the &amp;quot;winxp&amp;quot; version of that file included with the ddk but trying to use the winxp version resulted in a demand for another header that I could not meet with bits from the ddk.&lt;br /&gt;
&lt;br /&gt;
I also had to modify windows.h to not include winpref.h which I didn&#039;t have&lt;br /&gt;
&lt;br /&gt;
download http://www.vorbis.com/files/1.0.1/windows/OggVorbis-win32sdk-1.0.1.zip and extracted it (I extracted it in c:\ and work on that assumption in theese instructions)&lt;br /&gt;
&lt;br /&gt;
download http://connect.creativelabs.com/openal/Downloads/OpenAL11CoreSDK.zip and run the installer inside (I installed it in the default location and work on that assumption in theese instructions)&lt;br /&gt;
&lt;br /&gt;
start the visual studio 2005 command prompt&lt;br /&gt;
&lt;br /&gt;
clean up some environment variables that the vs command prompt forgets to clean and add the include paths for vorbis and openal to the include file path&lt;br /&gt;
&lt;br /&gt;
 PATH=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\Microsoft Visual Studio 8\VC\BIN;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem&lt;br /&gt;
 set INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;C:\oggvorbis-win32sdk-1.0.1\include;C:\Program Files\OpenAL 1.1 SDK\include;AL\include&lt;br /&gt;
&lt;br /&gt;
change to the build subdirectory of your eduke32 tree and run&lt;br /&gt;
nmake -f Makefile.msvc&lt;br /&gt;
cd ..\eduke32&lt;br /&gt;
nmake -f Makefile.msvc&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Building_EDuke32_on_Windows&amp;diff=7001</id>
		<title>Building EDuke32 on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Building_EDuke32_on_Windows&amp;diff=7001"/>
		<updated>2008-06-22T15:35:50Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;building eduke32 on windows with microsoft visual c++ &lt;br /&gt;
&lt;br /&gt;
note: this was what worked for me, there are probablly better ways. If you want to document them go right ahead --plugwash.&lt;br /&gt;
&lt;br /&gt;
note: i&#039;ve been trying to fix this up for the latest eduke32 snapshot but haven&#039;t got it working yet.&lt;br /&gt;
&lt;br /&gt;
get visual c++ express edition from http://www.microsoft.com/express/download/ and install it&lt;br /&gt;
&lt;br /&gt;
unfortunately ml.exe is missing from the express edition, lukilly there is a copy in the freely downloadable windows server 2003 ddk which can be obtained from http://www.microsoft.com/whdc/devtools/ddk/default.mspx . Install this and copy ml.exe to your visual studio bin directory&lt;br /&gt;
&lt;br /&gt;
windows.h, windef.h, winnt.h,basetsd.h,guiddef.h, pshpack4.h, pshpack1.h, pshpack2.h, pshpack4.h, pshpack8.h, poppack.h, winbase.h, winerror.h, wingdi.h, winuser.h, tvout.h, winnls.h, wincon.h, winver.h, winreg.h, winnetwk.h, winsvc.h, mcx.h, imm.h, shlobj.h, ole2.h, objbase.h, rpc.h, rpcdce.h, rpcdcep.h, rpcnsi.h, rpcnterr.h, rpcasync.h, rpcndr.h, rpcnsip.h, wtypes.h, unknwn.h, cguid.h, urlmon.h, oleidl.h, servprov.h, msxml.h , oaidl.h, propidl.h, oleauto.h, prsht.h, commctrl.h, shlguid.h, isguids.h, exdisp.h, ocidl.h, docobj.h, shldisp.h, specstrings.h, winsock2.h, qos.h, ws2tcpip.h, ddraw.h, dinput.h, windowsx.h, shellapi.h, winresrc.h, winuser.rh, commctrl.rh, dde.rh, winnt.rh, dlgs.h, mmsystem.h, dsound.h, d3dtypes.h, user32.lib, gdi32.lib, shell32.lib, dxguid.lib, winmm.lib, wsock32.lib, commctl32.lib, glu32.lib, uuid.lib, cderr.h, dde.h, ddeml.h, lzexpand.h, nb30.h, winperf.h, winsock.h, wincrypt.h, winscard.h, winioctl.h, winsmcard.h, commdlg.h and the whole gl include directory also seem to be missing, again theese can be obtained from the windows server 2003 ddk. With the exception of cderr.h, ddeml.h, winperf.h and lzexpand.h which I got from the wnet directory and a few files that were only found in a generic crt directory in the ddk I used the win2K versions from that ddk.&lt;br /&gt;
&lt;br /&gt;
I had to modify ws2tcpip.h to add the following typedef just before the final #ENDIF&lt;br /&gt;
&lt;br /&gt;
typedef int socklen_t; &lt;br /&gt;
&lt;br /&gt;
This was fixed in the &amp;quot;winxp&amp;quot; version of that file included with the ddk but trying to use the winxp version resulted in a demand for another header that I could not meet with bits from the ddk.&lt;br /&gt;
&lt;br /&gt;
I also had to modify windows.h to not include winpref.h which I didn&#039;t have&lt;br /&gt;
&lt;br /&gt;
download http://www.vorbis.com/files/1.0.1/windows/OggVorbis-win32sdk-1.0.1.zip and extracted it (I extracted it in c:\ and work on that assumption in theese instructions)&lt;br /&gt;
&lt;br /&gt;
download http://connect.creativelabs.com/openal/Downloads/OpenAL11CoreSDK.zip and run the installer inside (I installed it in the default location and work on that assumption in theese instructions)&lt;br /&gt;
&lt;br /&gt;
start the visual studio 2005 command prompt&lt;br /&gt;
&lt;br /&gt;
clean up some environment variables that the vs command prompt forgets to clean and add the include paths for vorbis and openal to the include file path&lt;br /&gt;
&lt;br /&gt;
 PATH=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\Microsoft Visual Studio 8\VC\BIN;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem&lt;br /&gt;
 set INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE;C:\oggvorbis-win32sdk-1.0.1\include;C:\Program Files\OpenAL 1.1 SDK\include&lt;br /&gt;
&lt;br /&gt;
change to the build subdirectory of your eduke32 tree and run&lt;br /&gt;
nmake -f Makefile.msvc&lt;br /&gt;
cd ..\eduke32&lt;br /&gt;
nmake -f Makefile.msvc&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Talk:Building_EDuke32_on_Windows&amp;diff=6996</id>
		<title>Talk:Building EDuke32 on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Talk:Building_EDuke32_on_Windows&amp;diff=6996"/>
		<updated>2008-06-19T16:54:05Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==mail from terminx which may help get the build process working with the latest eduke32, i haven&#039;t investigated it yet==&lt;br /&gt;
&lt;br /&gt;
Which ones are you missing?  You need the OpenAL stuff and OggVorbis-win32sdk-1.0.1.zip at the least, perhaps some other SDKs as well.&lt;br /&gt;
Richard C. Gobeille&lt;br /&gt;
http://www.eduke32.com&lt;br /&gt;
terminx@gmail.com&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
peter green wrote:&lt;br /&gt;
&amp;gt; It seems the latest version of eduke32 requires some new 3rd party libraries to build, where should I get theese from?&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Palette_data_files&amp;diff=6600</id>
		<title>Palette data files</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Palette_data_files&amp;diff=6600"/>
		<updated>2008-04-19T16:20:29Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: New page: Palette, palette mapping and transparancy data is stored in two files, palette.dat and lookup.dat.  palette.dat  index 0: 768 bytes of palette data for the main palette. Each color stored ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Palette, palette mapping and transparancy data is stored in two files, palette.dat and lookup.dat.&lt;br /&gt;
&lt;br /&gt;
palette.dat&lt;br /&gt;
&lt;br /&gt;
index 0:&lt;br /&gt;
768 bytes of palette data for the main palette. Each color stored as three bytes for red green and blue in that order. Values only range from 0 to 63 so scaling will be required for acceptable display on a modern system.&lt;br /&gt;
&lt;br /&gt;
index 768:&lt;br /&gt;
two byte little endian integer containing number of &amp;quot;palookup&amp;quot; tables (used to make art look darker) This number is hereafter known as numpalookups&lt;br /&gt;
&lt;br /&gt;
index 770:&lt;br /&gt;
numpalookups &amp;quot;palookup&amp;quot; tables. Theese are simple 256 byte lookup tables which map from a color in the image to a color in the display palette.&lt;br /&gt;
&lt;br /&gt;
index 770+(numpalookups*256):&lt;br /&gt;
655536 bytes of transparancy data. Essentially a 2D array which takes two color indexes and returns a color index to display.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
lookup.dat&lt;br /&gt;
index 0:&lt;br /&gt;
number of spritepals (num_tables)&lt;br /&gt;
&lt;br /&gt;
index 1:&lt;br /&gt;
spritepals, Each spritepal has a prefix byte with it&#039;s spritepal number then 256 bytes of lookup data. &lt;br /&gt;
&lt;br /&gt;
index 1+(num_tables*768):&lt;br /&gt;
alternate main palettes.&lt;br /&gt;
5 pallettes in the same format as the main palette (768 bytes each)&lt;br /&gt;
WATERpalette: used for underwater&lt;br /&gt;
SLIMEpalette: used for nightvision (in combination with a spritepal which is used to make enemy sprites glow) and presumablly something to do with slime.&lt;br /&gt;
TITLEpalette: used for the screen where the words duke nukem 3D atomic fly in.&lt;br /&gt;
REALMSpalette: used for the 3D realms title screen&lt;br /&gt;
BOSS1palette: used for the animiation you get after defeating the boss at the end of episode 1.&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Lookup.dat&amp;diff=6599</id>
		<title>Lookup.dat</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Lookup.dat&amp;diff=6599"/>
		<updated>2008-04-19T15:09:50Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: Redirecting to Palette data files&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[palette data files]]&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Palette.dat&amp;diff=6598</id>
		<title>Palette.dat</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Palette.dat&amp;diff=6598"/>
		<updated>2008-04-19T15:09:29Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: Redirecting to Palette data files&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#redirect [[palette data files]]&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Building_EDuke32_on_Windows&amp;diff=6546</id>
		<title>Building EDuke32 on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Building_EDuke32_on_Windows&amp;diff=6546"/>
		<updated>2008-03-22T22:02:34Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;building eduke32 on windows with microsoft visual c++ (incomplete)&lt;br /&gt;
&lt;br /&gt;
get visual c++ express edition from http://www.microsoft.com/express/download/ and install it&lt;br /&gt;
&lt;br /&gt;
unfortunately ml.exe is missing from the express edition, lukilly there is a copy in the freely downloadable windows server 2003 ddk which can be obtained from http://www.microsoft.com/whdc/devtools/ddk/default.mspx . Install this and copy ml.exe to your visual studio bin directory&lt;br /&gt;
&lt;br /&gt;
windows.h, windef.h, winnt.h,basetsd.h,guiddef.h, pshpack4.h, pshpack1.h, pshpack2.h, pshpack4.h, pshpack8.h, poppack.h, winbase.h, winerror.h, wingdi.h, winuser.h, tvout.h, winnls.h, wincon.h, winver.h, winreg.h, winnetwk.h, winsvc.h, mcx.h, imm.h, shlobj.h, ole2.h, objbase.h, rpc.h, rpcdce.h, rpcdcep.h, rpcnsi.h, rpcnterr.h, rpcasync.h, rpcndr.h, rpcnsip.h, wtypes.h, unknwn.h, cguid.h, urlmon.h, oleidl.h, servprov.h, msxml.h , oaidl.h, propidl.h, oleauto.h, prsht.h, commctrl.h, shlguid.h, isguids.h, exdisp.h, ocidl.h, docobj.h, shldisp.h, specstrings.h, winsock2.h, qos.h, ws2tcpip.h, ddraw.h, dinput.h, windowsx.h, shellapi.h, winresrc.h, winuser.rh, commctrl.rh, dde.rh, winnt.rh, dlgs.h, mmsystem.h, dsound.h, d3dtypes.h, user32.lib, gdi32.lib, shell32.lib, dxguid.lib, winmm.lib, wsock32.lib, commctl32.lib, glu32.lib, uuid.lib, cderr.h, dde.h, ddeml.h, lzexpand.h, nb30.h, winperf.h, winsock.h, wincrypt.h, winscard.h, winioctl.h, winsmcard.h, commdlg.h and the whole gl include directory also seem to be missing, again theese can be obtained from the windows server 2003 ddk. With the exception of cderr.h, ddeml.h, winperf.h and lzexpand.h which I got from the wnet directory and a few files that were only found in a generic crt directory in the ddk I used the win2K versions from that ddk.&lt;br /&gt;
&lt;br /&gt;
I had to modify ws2tcpip.h to add the following typedef just before the final #ENDIF&lt;br /&gt;
&lt;br /&gt;
typedef int socklen_t; &lt;br /&gt;
&lt;br /&gt;
This was fixed in the &amp;quot;winxp&amp;quot; version of that file included with the ddk but trying to use the winxp version resulted in a demand for another header that I could not meet with bits from the ddk.&lt;br /&gt;
&lt;br /&gt;
I also had to modify windows.h to not include winpref.h which I didn&#039;t have&lt;br /&gt;
&lt;br /&gt;
start the visual studio 2005 command prompt&lt;br /&gt;
&lt;br /&gt;
clean up some environment variables that the vs command prompt forgets to clean&lt;br /&gt;
&lt;br /&gt;
PATH=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\Microsoft Visual Studio 8\VC\BIN;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem&lt;br /&gt;
set INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE&lt;br /&gt;
&lt;br /&gt;
change to the build subdirectory of your eduke32 tree and run&lt;br /&gt;
nmake -f Makefile.msvc&lt;br /&gt;
cd ..\eduke32&lt;br /&gt;
nmake -f Makefuke.msvc&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Building_EDuke32_on_Windows&amp;diff=6545</id>
		<title>Building EDuke32 on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Building_EDuke32_on_Windows&amp;diff=6545"/>
		<updated>2008-03-22T21:23:56Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;building eduke32 on windows with microsoft visual c++ (incomplete)&lt;br /&gt;
&lt;br /&gt;
get visual c++ express edition from http://www.microsoft.com/express/download/ and install it&lt;br /&gt;
&lt;br /&gt;
unfortunately ml.exe is missing from the express edition, lukilly there is a copy in the freely downloadable windows server 2003 ddk which can be obtained from http://www.microsoft.com/whdc/devtools/ddk/default.mspx . Install this and copy ml.exe to your visual studio bin directory&lt;br /&gt;
&lt;br /&gt;
windows.h, windef.h, winnt.h,basetsd.h,guiddef.h, pshpack4.h, pshpack1.h, pshpack2.h, pshpack4.h, pshpack8.h, poppack.h, winbase.h, winerror.h, wingdi.h, winuser.h, tvout.h, winnls.h, wincon.h, winver.h, winreg.h, winnetwk.h, winsvc.h, mcx.h, imm.h, shlobj.h, ole2.h, objbase.h, rpc.h, rpcdce.h, rpcdcep.h, rpcnsi.h, rpcnterr.h, rpcasync.h, rpcndr.h, rpcnsip.h, wtypes.h, unknwn.h, cguid.h, urlmon.h, oleidl.h, servprov.h, msxml.h , oaidl.h, propidl.h, oleauto.h, prsht.h, commctrl.h, shlguid.h, isguids.h, exdisp.h, ocidl.h, docobj.h, shldisp.h, specstrings.h, winsock2.h, qos.h, ws2tcpip.h and the whole gl directory also seem to be missing, again theese can be obtained from the windows server 2003 ddk. I used the win2K versions from that ddk.&lt;br /&gt;
&lt;br /&gt;
I had to modify ws2tcpip.h to add the following typedef just before the final #ENDIF&lt;br /&gt;
&lt;br /&gt;
typedef int socklen_t; &lt;br /&gt;
&lt;br /&gt;
This was fixed in the &amp;quot;winxp&amp;quot; version of that file included with the ddk but trying to use the winxp version resulted in a demand for another header that I could not meet with bits from the ddk.&lt;br /&gt;
&lt;br /&gt;
start the visual studio 2005 command prompt&lt;br /&gt;
&lt;br /&gt;
clean up some environment variables that the vs command prompt forgets to clean&lt;br /&gt;
&lt;br /&gt;
PATH=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\Microsoft Visual Studio 8\VC\BIN;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem&lt;br /&gt;
set INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE&lt;br /&gt;
&lt;br /&gt;
change to the build subdirectory of your eduke32 tree and run&lt;br /&gt;
nmake -f Makefile.msvc&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Building_EDuke32_on_Windows&amp;diff=6543</id>
		<title>Building EDuke32 on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Building_EDuke32_on_Windows&amp;diff=6543"/>
		<updated>2008-03-22T20:36:55Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: ok seems watcom is a non starter, lets try msvc instead&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;building eduke32 on windows with microsoft visual c++ (incomplete)&lt;br /&gt;
&lt;br /&gt;
get visual c++ express edition from http://www.microsoft.com/express/download/ and install it&lt;br /&gt;
&lt;br /&gt;
unfortunately ml.exe is missing from the express edition, lukilly there is a copy in the freely downloadable windows server 2003 ddk which can be obtained from http://www.microsoft.com/whdc/devtools/ddk/default.mspx . Install this and copy ml.exe to your visual studio bin directory&lt;br /&gt;
&lt;br /&gt;
windows.h also seems to be missing, again this can be obtained from the windows server 2003 ddk , i used the win2K version&lt;br /&gt;
&lt;br /&gt;
start the visual studio 2005 command prompt&lt;br /&gt;
&lt;br /&gt;
clean up some environment variables that the vs command prompt forgets to clean&lt;br /&gt;
&lt;br /&gt;
PATH=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\Microsoft Visual Studio 8\VC\BIN;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem&lt;br /&gt;
set INCLUDE=C:\Program Files\Microsoft Visual Studio 8\VC\INCLUDE&lt;br /&gt;
&lt;br /&gt;
change to the build subdirectory of your eduke32 tree and run&lt;br /&gt;
nmake -f Makefile.msvc&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Talk:Building_EDuke32_on_Windows&amp;diff=6542</id>
		<title>Talk:Building EDuke32 on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Talk:Building_EDuke32_on_Windows&amp;diff=6542"/>
		<updated>2008-03-22T18:03:40Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: New page: I&amp;#039;m getting theese errors when trying to build eduke32 on windows using openwatcom   C:\eduke32_src_20080206\build&amp;gt;wmake -f Makefile.watcom  Open Watcom Make Version 1.7  Portions Copyrigh...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;I&#039;m getting theese errors when trying to build eduke32 on windows using openwatcom&lt;br /&gt;
&lt;br /&gt;
 C:\eduke32_src_20080206\build&amp;gt;wmake -f Makefile.watcom&lt;br /&gt;
 Open Watcom Make Version 1.7&lt;br /&gt;
 Portions Copyright (c) 1988-2002 Sybase, Inc. All Rights Reserved.&lt;br /&gt;
 Source code is available under the Sybase Open Watcom Public License.&lt;br /&gt;
 See http://www.openwatcom.org/ for details.&lt;br /&gt;
         %null&lt;br /&gt;
 &lt;br /&gt;
 C:\eduke32_src_20080206\build&amp;gt; &lt;br /&gt;
 &lt;br /&gt;
 C:\eduke32_src_20080206\eduke32&amp;gt;wmake -f Makefile.watcom&lt;br /&gt;
 Open Watcom Make Version 1.7&lt;br /&gt;
 Portions Copyright (c) 1988-2002 Sybase, Inc. All Rights Reserved.&lt;br /&gt;
 Source code is available under the Sybase Open Watcom Public License.&lt;br /&gt;
 See http://www.openwatcom.org/ for details.&lt;br /&gt;
 Makefile.watcom(85): Error(E09): Ignoring out of place Path Specifier&lt;br /&gt;
 Makefile.watcom(85): Warning(W79): Makefile may be Microsoft; try /ms switch&lt;br /&gt;
 Makefile.watcom(88): Error(E09): Ignoring out of place Path Specifier&lt;br /&gt;
 Makefile.watcom(88): Warning(W79): Makefile may be Microsoft; try /ms switch&lt;br /&gt;
 Makefile.watcom(88): Error(E09): Ignoring out of place Path Specifier&lt;br /&gt;
 Makefile.watcom(88): Warning(W79): Makefile may be Microsoft; try /ms switch&lt;br /&gt;
 Error(E02): Make execution terminated&lt;br /&gt;
 &lt;br /&gt;
-- [[User:Plugwash|Plugwash]] 11:03, 22 March 2008 (PDT)&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Building_EDuke32_on_Windows&amp;diff=6541</id>
		<title>Building EDuke32 on Windows</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Building_EDuke32_on_Windows&amp;diff=6541"/>
		<updated>2008-03-22T17:53:41Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: New page: Instructions for building eduke32 on windows with open watcom.  note: I have started writing theese instructions but have not yet had a succesfull build if you see any errors or have anyth...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Instructions for building eduke32 on windows with open watcom.&lt;br /&gt;
&lt;br /&gt;
note: I have started writing theese instructions but have not yet had a succesfull build if you see any errors or have anything to add please do so -- [[User:Plugwash|Plugwash]] 10:53, 22 March 2008 (PDT)&lt;br /&gt;
&lt;br /&gt;
download open watcom from http://openwatcom.mirrors.skynet.be/pub/ftp.openwatcom.org/open-watcom-c-win32-1.7a.exe and install it.&lt;br /&gt;
download the eduke32 source from http://wiki.eduke32.com/stuff/ and extract it.&lt;br /&gt;
&lt;br /&gt;
open a command promt&lt;br /&gt;
&lt;br /&gt;
set the path appropriately so the watcom tools are on and any other tools with conflicting names are off e.g.&lt;br /&gt;
path=C:\WINDOWS\system32;C:\WINDOWS;C:\WATCOM\binnt;C:\WATCOM\BINW&lt;br /&gt;
&lt;br /&gt;
change to the build subdirectory of the eduke source tree e.g. &lt;br /&gt;
c:&lt;br /&gt;
cd \eduke32_src_20080206\build&lt;br /&gt;
&lt;br /&gt;
setup other environment variables needed by watcom&lt;br /&gt;
set EDPATH=c:\watcom\eddata&lt;br /&gt;
set INCLUDE=C:\WATCOM\H;C:\WATCOM\H\NT&lt;br /&gt;
set OS=Windows_NT&lt;br /&gt;
set WATCOM=c:\watcom&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Talk:Clipdist&amp;diff=4219</id>
		<title>Talk:Clipdist</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Talk:Clipdist&amp;diff=4219"/>
		<updated>2005-10-29T18:47:01Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: are you sure its a sphere&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== are you sure its a sphere ==&lt;br /&gt;
&lt;br /&gt;
i&#039;m sure i remember the clipping boundry being a cylinder not a sphere for a face sprite. [[User:Plugwash|Plugwash]] ([[User talk:Plugwash|Talk]]) 11:47, 29 October 2005 (PDT)&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Map&amp;diff=3228</id>
		<title>Map</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Map&amp;diff=3228"/>
		<updated>2005-09-17T18:15:11Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Map usually reffers to a .map file which contains a complete level built out of sectors and sprites. The format is documented at the end of the text displayed by buildhlp.exe from the duke cd and in the file buildinf.txt in src.zip in http://www.advsys.net/ken/buildsrc/kenbuild.zip .&lt;br /&gt;
&lt;br /&gt;
Map can also reffer to the overhead map shown when tab is pressed. On the first press the map is shown as a transparent overlay on the second press it is shown with solid fill for the floors. On the third press the display returns to normal.&lt;br /&gt;
&lt;br /&gt;
note: in current public releases the solid map mode is broken. This has already been fixed in internal development versions.&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Eventloadactor&amp;diff=3221</id>
		<title>Eventloadactor</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Eventloadactor&amp;diff=3221"/>
		<updated>2005-09-16T21:22:51Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The eventloadactor blocks run when an actor is loaded into the map &amp;amp;mdash; despite the name, it is not a game event but rather an entirely separate type of block ended with enda. It is most often used for moving settings out of a [[sprite]]&#039;s hitag or lotag and into a [[gamevar]] before they have undesirable hardcoded effects.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
gamevar ZERO 0 0&lt;br /&gt;
gamevar HITAGSAVED 0 2&lt;br /&gt;
gamevar LOTAGSAVED 0 2&lt;br /&gt;
&lt;br /&gt;
eventloadactor MYSPRITE&lt;br /&gt;
{&lt;br /&gt;
    getactor[THISACTOR].hitag HITAGSAVED&lt;br /&gt;
    getactor[THISACTOR].lotag LOTAGSAVED&lt;br /&gt;
    setactor[THISACTOR].hitag ZERO&lt;br /&gt;
    setactor[THISACTOR].lotag ZERO&lt;br /&gt;
}&lt;br /&gt;
enda&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Sector&amp;diff=3211</id>
		<title>Sector</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Sector&amp;diff=3211"/>
		<updated>2005-09-15T12:18:01Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A sector is the basic element of levels in the build engine. Each sector has a floor and ceiling which may slope and a number of walls. Sectors have quite a lot of properties which can be obtained through [[getsector]] and changed through [[setsector]].&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Sector&amp;diff=3210</id>
		<title>Sector</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Sector&amp;diff=3210"/>
		<updated>2005-09-15T12:17:49Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A sector is the basic element of levels in the build engine. Each sector has a floor and ceiling which may slope and a number of walls. Sectors have quite a lot of properties which can be obtained through [[getsector[[ and changed through [[setsector]].&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Sector&amp;diff=3209</id>
		<title>Sector</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Sector&amp;diff=3209"/>
		<updated>2005-09-15T12:17:35Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A sector is the basic element of levels in the build engine. Each sector has a floor and ceiling which may slope and a number of walls. Sectors have quite a lot of properties which can be obtained through getsector and changed through setsector.&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Scripting&amp;diff=3208</id>
		<title>Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Scripting&amp;diff=3208"/>
		<updated>2005-09-15T12:12:59Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: /* Events */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About This Guide==&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
===Intro===&lt;br /&gt;
This guide will get you started with the basic aspects of EDuke32&#039;s commands -- those which set it apart from vanilla DN3D.  This guide makes no assumptions regarding the programming experience of the reader, other than that the reader comprehends and understands the basic CON system as was seen in Duke Nukem 3D 1.3d-1.5.&lt;br /&gt;
&lt;br /&gt;
===Con Basics===&lt;br /&gt;
As stated, this guide assume that you are familiar with the original CON code from Duke3D.  If you are not already familiar with the default commands, the authors of this guide recommend the following guide to the basics, imported into the EDukeWiki for your convenience:&lt;br /&gt;
* [[Confaq42|Con FAQ 4.2 by Jonah Bishop (note: some sections have been shuffled around a bit by TX)]] &lt;br /&gt;
** [http://rtcm.thecomitatus.com/knowledge-base/downloads-rtcm/duke3d-faqs-con/confaq42.zip Download stand-alone zipped version (original version from 1999 in .txt format)]&lt;br /&gt;
&lt;br /&gt;
Another good source of basic information is the following FAQ:&lt;br /&gt;
* [http://rtcm.thecomitatus.com/knowledge-base/downloads-rtcm/duke3d-faqs-con/H_CONFAQ.zip Con Editing Information v1.3 by James Ferry]&lt;br /&gt;
&lt;br /&gt;
==Gamevars==&lt;br /&gt;
&lt;br /&gt;
===About===&lt;br /&gt;
[[Gamevar|Gamevars]] were introduced in [[WW2GI]] and remain the most important aspect of the new commandset.  Gamevars allow you to store, manipulate, and execute code based on defined values.  Prior to gamevars, the only usable alternatives were manipulations of inventory item counters and were, as you can imagine, very limited.&lt;br /&gt;
&lt;br /&gt;
===Types===&lt;br /&gt;
There are three basic types of gamevar, each type storing a signed 32-bit fixed-point integer.  The three basic types are as follows:&lt;br /&gt;
* Global variable: A global variable will be the same for any actor it is used in. Changing a global variable changes it for all actors in the game. &lt;br /&gt;
* Per-player variable: A per-player variable may be set independently for each player in the game.  If a player performs an action that triggers a per-player variable change within an event or the APLAYER actor code, it will only change for the player that initiated that action.  If an actor changes a per-player variable, it will change for the closest player to the actor that changed it.&lt;br /&gt;
* Per-actor variable: A per-actor variable may be independently assigned to each copy of an actor in the game.&lt;br /&gt;
&lt;br /&gt;
===Use and manipulation===&lt;br /&gt;
&lt;br /&gt;
Custom variables are defined with the [[gamevar]] command, and the term gamevar is therefore used to describe custom variables in EDuke32.&lt;br /&gt;
&lt;br /&gt;
The syntax for defining a gamevar is:&lt;br /&gt;
::gamevar &amp;lt;varname&amp;gt; &amp;lt;value&amp;gt; &amp;lt;flags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may use upper or lowercase letters for &amp;lt;varname&amp;gt;.  EDuke32 is case-sensitive, so a var named &amp;quot;EXAMPLE1&amp;quot; is different from &amp;quot;example1.&amp;quot;  Variable names should not begin with a digit. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;value&amp;gt; of the gamevar may be positive or negative.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;flags&amp;gt; may be set to either 0 (global), 1 (per-player), or 2 (per-actor).&lt;br /&gt;
&lt;br /&gt;
Manipulation of gamevars is accomplished by using a variety of commands that range in functionality from simple mathematical functions to grabbing internal values for manipulation in the CONs.  Here are a few of the more common variable manipulation primitives:&lt;br /&gt;
&lt;br /&gt;
*[[addvar]], [[addvarvar]]&lt;br /&gt;
*[[divvar]], [[divvarvar]]&lt;br /&gt;
*[[mulvar]], [[mulvarvar]]&lt;br /&gt;
*[[randvar]], [[randvarvar]]&lt;br /&gt;
*[[subvar]], [[subvarvar]]&lt;br /&gt;
*[[setvar]], [[setvarvar]]&lt;br /&gt;
&lt;br /&gt;
And some of the more rarely used ones:&lt;br /&gt;
&lt;br /&gt;
*[[andvar]], [[andvarvar]]&lt;br /&gt;
*[[sin]], [[cos]]&lt;br /&gt;
*[[orvar]], [[orvarvar]]&lt;br /&gt;
*[[shiftvarl]], [[shiftvarr]]&lt;br /&gt;
*[[xorvar]], [[xorvarvar]]&lt;br /&gt;
&lt;br /&gt;
Note that a complete list of primitives is, of course, available [[Full_command_list|here]].  The importance of manipulating gamevars will become clear when we get to talking about getting and setting the members of the various structures in the game.  Also note that as of EDuke32 1.3.0, all commands which accept read-only gamevars will also now accept constants in place of them.&lt;br /&gt;
&lt;br /&gt;
==Members of game structures==&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
===Player===&lt;br /&gt;
===Actor===&lt;br /&gt;
===Sector===&lt;br /&gt;
===Wall===&lt;br /&gt;
&lt;br /&gt;
==Events==&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
EDuke32 provides both an object-oriented and an event-oriented interface to the game&#039;s internal workings.  As you already know, the object-oriented part of Duke is the actor system -- in contrast to that, we&#039;ll be talking about the event-oriented portion in this section.  As the name suggests, an [[events|event]] is a block of code that is triggered when a certain event in the game happens.  Events in the game are triggered internally whenever a certain point in the code is reached.&lt;br /&gt;
&lt;br /&gt;
Events are a key component in the manipulation of the game.  Using events, we can do a variety of things such as intercept keypresses, draw to the screen (more on this later), redefine what a player does when certain actions are executed, et cetera.&lt;br /&gt;
&lt;br /&gt;
===Synchronised and display code===&lt;br /&gt;
Events introduce the ability for con code to be run in an unsynchronised manner. For example display events may run different numbers of times on different systems. If you wan&#039;t your mod to be usable in multiplayer it is important to be sure whether an event is a synchronised event or a display event and avoid doing anything that changes the game state (including [[ifrnd]] and [[randvar]]) in display code. &lt;br /&gt;
&lt;br /&gt;
===onevent and endevent===&lt;br /&gt;
[[onevent]] is the command used to start the definition of a block of code to be associated with one of the [[EDuke32 event list|events]].  Similiar to the [[actor]] keyword, onevent must be terminated by the equivalent of [[enda]], an [[endevent]].&lt;br /&gt;
&lt;br /&gt;
===eventloadactor===&lt;br /&gt;
[[eventloadactor]] runs when an actor is loaded into the map. Despite the name it is not a game event but an entirely seperate type of block ended with enda. It is most usefull for moving settings out of hitags and lotags before they have unwanted hardcoded effects.&lt;br /&gt;
&lt;br /&gt;
==Drawing to the screen==&lt;br /&gt;
The ability to properly draw to the screen is a huge improvement over the hackish abominations involving quotes and unused characters that we were forced to endure when using 1.3d and 1.5.  There are several different drawing commands available, ranging in functionality from drawing graphics to the screen to printing text stored in quotes (see the section on string manipulation for more information).&lt;br /&gt;
&lt;br /&gt;
===Drawing commands===&lt;br /&gt;
*[[rotatesprite]]&lt;br /&gt;
*[[gametext]]&lt;br /&gt;
*[[minitext]]&lt;br /&gt;
*[[digitalnumber]]&lt;br /&gt;
*[[myos]] (deprecated)&lt;br /&gt;
*[[myospal]] (deprecated)&lt;br /&gt;
*[[myosx]] (deprecated)&lt;br /&gt;
*[[myospalx]] (deprecated)&lt;br /&gt;
&lt;br /&gt;
==Custom projectiles==&lt;br /&gt;
===Defining custom projectiles===&lt;br /&gt;
===Manipulating custom projectiles mid-game===&lt;br /&gt;
&lt;br /&gt;
==String manipulation==&lt;br /&gt;
===Quote redefinition mid-game===&lt;br /&gt;
===Copying and concatenation===&lt;br /&gt;
===Dynamic quotes===&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Scripting&amp;diff=3207</id>
		<title>Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Scripting&amp;diff=3207"/>
		<updated>2005-09-15T12:08:03Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: /* Onevent and endevent */ rm incorrect caps&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About This Guide==&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
===Intro===&lt;br /&gt;
This guide will get you started with the basic aspects of EDuke32&#039;s commands -- those which set it apart from vanilla DN3D.  This guide makes no assumptions regarding the programming experience of the reader, other than that the reader comprehends and understands the basic CON system as was seen in Duke Nukem 3D 1.3d-1.5.&lt;br /&gt;
&lt;br /&gt;
===Con Basics===&lt;br /&gt;
As stated, this guide assume that you are familiar with the original CON code from Duke3D.  If you are not already familiar with the default commands, the authors of this guide recommend the following guide to the basics, imported into the EDukeWiki for your convenience:&lt;br /&gt;
* [[Confaq42|Con FAQ 4.2 by Jonah Bishop (note: some sections have been shuffled around a bit by TX)]] &lt;br /&gt;
** [http://rtcm.thecomitatus.com/knowledge-base/downloads-rtcm/duke3d-faqs-con/confaq42.zip Download stand-alone zipped version (original version from 1999 in .txt format)]&lt;br /&gt;
&lt;br /&gt;
Another good source of basic information is the following FAQ:&lt;br /&gt;
* [http://rtcm.thecomitatus.com/knowledge-base/downloads-rtcm/duke3d-faqs-con/H_CONFAQ.zip Con Editing Information v1.3 by James Ferry]&lt;br /&gt;
&lt;br /&gt;
==Gamevars==&lt;br /&gt;
&lt;br /&gt;
===About===&lt;br /&gt;
[[Gamevar|Gamevars]] were introduced in [[WW2GI]] and remain the most important aspect of the new commandset.  Gamevars allow you to store, manipulate, and execute code based on defined values.  Prior to gamevars, the only usable alternatives were manipulations of inventory item counters and were, as you can imagine, very limited.&lt;br /&gt;
&lt;br /&gt;
===Types===&lt;br /&gt;
There are three basic types of gamevar, each type storing a signed 32-bit fixed-point integer.  The three basic types are as follows:&lt;br /&gt;
* Global variable: A global variable will be the same for any actor it is used in. Changing a global variable changes it for all actors in the game. &lt;br /&gt;
* Per-player variable: A per-player variable may be set independently for each player in the game.  If a player performs an action that triggers a per-player variable change within an event or the APLAYER actor code, it will only change for the player that initiated that action.  If an actor changes a per-player variable, it will change for the closest player to the actor that changed it.&lt;br /&gt;
* Per-actor variable: A per-actor variable may be independently assigned to each copy of an actor in the game.&lt;br /&gt;
&lt;br /&gt;
===Use and manipulation===&lt;br /&gt;
&lt;br /&gt;
Custom variables are defined with the [[gamevar]] command, and the term gamevar is therefore used to describe custom variables in EDuke32.&lt;br /&gt;
&lt;br /&gt;
The syntax for defining a gamevar is:&lt;br /&gt;
::gamevar &amp;lt;varname&amp;gt; &amp;lt;value&amp;gt; &amp;lt;flags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may use upper or lowercase letters for &amp;lt;varname&amp;gt;.  EDuke32 is case-sensitive, so a var named &amp;quot;EXAMPLE1&amp;quot; is different from &amp;quot;example1.&amp;quot;  Variable names should not begin with a digit. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;value&amp;gt; of the gamevar may be positive or negative.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;flags&amp;gt; may be set to either 0 (global), 1 (per-player), or 2 (per-actor).&lt;br /&gt;
&lt;br /&gt;
Manipulation of gamevars is accomplished by using a variety of commands that range in functionality from simple mathematical functions to grabbing internal values for manipulation in the CONs.  Here are a few of the more common variable manipulation primitives:&lt;br /&gt;
&lt;br /&gt;
*[[addvar]], [[addvarvar]]&lt;br /&gt;
*[[divvar]], [[divvarvar]]&lt;br /&gt;
*[[mulvar]], [[mulvarvar]]&lt;br /&gt;
*[[randvar]], [[randvarvar]]&lt;br /&gt;
*[[subvar]], [[subvarvar]]&lt;br /&gt;
*[[setvar]], [[setvarvar]]&lt;br /&gt;
&lt;br /&gt;
And some of the more rarely used ones:&lt;br /&gt;
&lt;br /&gt;
*[[andvar]], [[andvarvar]]&lt;br /&gt;
*[[sin]], [[cos]]&lt;br /&gt;
*[[orvar]], [[orvarvar]]&lt;br /&gt;
*[[shiftvarl]], [[shiftvarr]]&lt;br /&gt;
*[[xorvar]], [[xorvarvar]]&lt;br /&gt;
&lt;br /&gt;
Note that a complete list of primitives is, of course, available [[Full_command_list|here]].  The importance of manipulating gamevars will become clear when we get to talking about getting and setting the members of the various structures in the game.  Also note that as of EDuke32 1.3.0, all commands which accept read-only gamevars will also now accept constants in place of them.&lt;br /&gt;
&lt;br /&gt;
==Members of game structures==&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
===Player===&lt;br /&gt;
===Actor===&lt;br /&gt;
===Sector===&lt;br /&gt;
===Wall===&lt;br /&gt;
&lt;br /&gt;
==Events==&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
EDuke32 provides both an object-oriented and an event-oriented interface to the game&#039;s internal workings.  As you already know, the object-oriented part of Duke is the actor system -- in contrast to that, we&#039;ll be talking about the event-oriented portion in this section.  As the name suggests, an [[events|event]] is a block of code that is triggered when a certain event in the game happens.  Events in the game are triggered internally whenever a certain point in the code is reached.&lt;br /&gt;
&lt;br /&gt;
Events are a key component in the manipulation of the game.  Using events, we can do a variety of things such as intercept keypresses, draw to the screen (more on this later), redefine what a player does when certain actions are executed, et cetera.&lt;br /&gt;
&lt;br /&gt;
===onevent and endevent===&lt;br /&gt;
[[onevent]] is the command used to start the definition of a block of code to be associated with one of the [[EDuke32 event list|events]].  Similiar to the [[actor]] keyword, onevent must be terminated by the equivalent of [[enda]], an [[endevent]].&lt;br /&gt;
&lt;br /&gt;
===eventloadactor===&lt;br /&gt;
[[eventloadactor]] runs when an actor is loaded into the map. Despite the name it is not a game event but an entirely seperate type of block ended with enda. It is most usefull for moving settings out of hitags and lotags before they have unwanted hardcoded effects.&lt;br /&gt;
&lt;br /&gt;
==Drawing to the screen==&lt;br /&gt;
The ability to properly draw to the screen is a huge improvement over the hackish abominations involving quotes and unused characters that we were forced to endure when using 1.3d and 1.5.  There are several different drawing commands available, ranging in functionality from drawing graphics to the screen to printing text stored in quotes (see the section on string manipulation for more information).&lt;br /&gt;
&lt;br /&gt;
===Drawing commands===&lt;br /&gt;
*[[rotatesprite]]&lt;br /&gt;
*[[gametext]]&lt;br /&gt;
*[[minitext]]&lt;br /&gt;
*[[digitalnumber]]&lt;br /&gt;
*[[myos]] (deprecated)&lt;br /&gt;
*[[myospal]] (deprecated)&lt;br /&gt;
*[[myosx]] (deprecated)&lt;br /&gt;
*[[myospalx]] (deprecated)&lt;br /&gt;
&lt;br /&gt;
==Custom projectiles==&lt;br /&gt;
===Defining custom projectiles===&lt;br /&gt;
===Manipulating custom projectiles mid-game===&lt;br /&gt;
&lt;br /&gt;
==String manipulation==&lt;br /&gt;
===Quote redefinition mid-game===&lt;br /&gt;
===Copying and concatenation===&lt;br /&gt;
===Dynamic quotes===&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Scripting&amp;diff=3206</id>
		<title>Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Scripting&amp;diff=3206"/>
		<updated>2005-09-15T12:07:21Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About This Guide==&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
===Intro===&lt;br /&gt;
This guide will get you started with the basic aspects of EDuke32&#039;s commands -- those which set it apart from vanilla DN3D.  This guide makes no assumptions regarding the programming experience of the reader, other than that the reader comprehends and understands the basic CON system as was seen in Duke Nukem 3D 1.3d-1.5.&lt;br /&gt;
&lt;br /&gt;
===Con Basics===&lt;br /&gt;
As stated, this guide assume that you are familiar with the original CON code from Duke3D.  If you are not already familiar with the default commands, the authors of this guide recommend the following guide to the basics, imported into the EDukeWiki for your convenience:&lt;br /&gt;
* [[Confaq42|Con FAQ 4.2 by Jonah Bishop (note: some sections have been shuffled around a bit by TX)]] &lt;br /&gt;
** [http://rtcm.thecomitatus.com/knowledge-base/downloads-rtcm/duke3d-faqs-con/confaq42.zip Download stand-alone zipped version (original version from 1999 in .txt format)]&lt;br /&gt;
&lt;br /&gt;
Another good source of basic information is the following FAQ:&lt;br /&gt;
* [http://rtcm.thecomitatus.com/knowledge-base/downloads-rtcm/duke3d-faqs-con/H_CONFAQ.zip Con Editing Information v1.3 by James Ferry]&lt;br /&gt;
&lt;br /&gt;
==Gamevars==&lt;br /&gt;
&lt;br /&gt;
===About===&lt;br /&gt;
[[Gamevar|Gamevars]] were introduced in [[WW2GI]] and remain the most important aspect of the new commandset.  Gamevars allow you to store, manipulate, and execute code based on defined values.  Prior to gamevars, the only usable alternatives were manipulations of inventory item counters and were, as you can imagine, very limited.&lt;br /&gt;
&lt;br /&gt;
===Types===&lt;br /&gt;
There are three basic types of gamevar, each type storing a signed 32-bit fixed-point integer.  The three basic types are as follows:&lt;br /&gt;
* Global variable: A global variable will be the same for any actor it is used in. Changing a global variable changes it for all actors in the game. &lt;br /&gt;
* Per-player variable: A per-player variable may be set independently for each player in the game.  If a player performs an action that triggers a per-player variable change within an event or the APLAYER actor code, it will only change for the player that initiated that action.  If an actor changes a per-player variable, it will change for the closest player to the actor that changed it.&lt;br /&gt;
* Per-actor variable: A per-actor variable may be independently assigned to each copy of an actor in the game.&lt;br /&gt;
&lt;br /&gt;
===Use and manipulation===&lt;br /&gt;
&lt;br /&gt;
Custom variables are defined with the [[gamevar]] command, and the term gamevar is therefore used to describe custom variables in EDuke32.&lt;br /&gt;
&lt;br /&gt;
The syntax for defining a gamevar is:&lt;br /&gt;
::gamevar &amp;lt;varname&amp;gt; &amp;lt;value&amp;gt; &amp;lt;flags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may use upper or lowercase letters for &amp;lt;varname&amp;gt;.  EDuke32 is case-sensitive, so a var named &amp;quot;EXAMPLE1&amp;quot; is different from &amp;quot;example1.&amp;quot;  Variable names should not begin with a digit. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;value&amp;gt; of the gamevar may be positive or negative.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;flags&amp;gt; may be set to either 0 (global), 1 (per-player), or 2 (per-actor).&lt;br /&gt;
&lt;br /&gt;
Manipulation of gamevars is accomplished by using a variety of commands that range in functionality from simple mathematical functions to grabbing internal values for manipulation in the CONs.  Here are a few of the more common variable manipulation primitives:&lt;br /&gt;
&lt;br /&gt;
*[[addvar]], [[addvarvar]]&lt;br /&gt;
*[[divvar]], [[divvarvar]]&lt;br /&gt;
*[[mulvar]], [[mulvarvar]]&lt;br /&gt;
*[[randvar]], [[randvarvar]]&lt;br /&gt;
*[[subvar]], [[subvarvar]]&lt;br /&gt;
*[[setvar]], [[setvarvar]]&lt;br /&gt;
&lt;br /&gt;
And some of the more rarely used ones:&lt;br /&gt;
&lt;br /&gt;
*[[andvar]], [[andvarvar]]&lt;br /&gt;
*[[sin]], [[cos]]&lt;br /&gt;
*[[orvar]], [[orvarvar]]&lt;br /&gt;
*[[shiftvarl]], [[shiftvarr]]&lt;br /&gt;
*[[xorvar]], [[xorvarvar]]&lt;br /&gt;
&lt;br /&gt;
Note that a complete list of primitives is, of course, available [[Full_command_list|here]].  The importance of manipulating gamevars will become clear when we get to talking about getting and setting the members of the various structures in the game.  Also note that as of EDuke32 1.3.0, all commands which accept read-only gamevars will also now accept constants in place of them.&lt;br /&gt;
&lt;br /&gt;
==Members of game structures==&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
===Player===&lt;br /&gt;
===Actor===&lt;br /&gt;
===Sector===&lt;br /&gt;
===Wall===&lt;br /&gt;
&lt;br /&gt;
==Events==&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
EDuke32 provides both an object-oriented and an event-oriented interface to the game&#039;s internal workings.  As you already know, the object-oriented part of Duke is the actor system -- in contrast to that, we&#039;ll be talking about the event-oriented portion in this section.  As the name suggests, an [[events|event]] is a block of code that is triggered when a certain event in the game happens.  Events in the game are triggered internally whenever a certain point in the code is reached.&lt;br /&gt;
&lt;br /&gt;
Events are a key component in the manipulation of the game.  Using events, we can do a variety of things such as intercept keypresses, draw to the screen (more on this later), redefine what a player does when certain actions are executed, et cetera.&lt;br /&gt;
&lt;br /&gt;
===Onevent and endevent===&lt;br /&gt;
[[Onevent]] is the command used to start the definition of a block of code to be associated with one of the [[EDuke32 event list|events]].  Similiar to the [[actor]] keyword, onevent must be terminated by the equivalent of [[enda]], an [[endevent]].&lt;br /&gt;
&lt;br /&gt;
===eventloadactor===&lt;br /&gt;
[[eventloadactor]] runs when an actor is loaded into the map. Despite the name it is not a game event but an entirely seperate type of block ended with enda. It is most usefull for moving settings out of hitags and lotags before they have unwanted hardcoded effects.&lt;br /&gt;
&lt;br /&gt;
==Drawing to the screen==&lt;br /&gt;
The ability to properly draw to the screen is a huge improvement over the hackish abominations involving quotes and unused characters that we were forced to endure when using 1.3d and 1.5.  There are several different drawing commands available, ranging in functionality from drawing graphics to the screen to printing text stored in quotes (see the section on string manipulation for more information).&lt;br /&gt;
&lt;br /&gt;
===Drawing commands===&lt;br /&gt;
*[[rotatesprite]]&lt;br /&gt;
*[[gametext]]&lt;br /&gt;
*[[minitext]]&lt;br /&gt;
*[[digitalnumber]]&lt;br /&gt;
*[[myos]] (deprecated)&lt;br /&gt;
*[[myospal]] (deprecated)&lt;br /&gt;
*[[myosx]] (deprecated)&lt;br /&gt;
*[[myospalx]] (deprecated)&lt;br /&gt;
&lt;br /&gt;
==Custom projectiles==&lt;br /&gt;
===Defining custom projectiles===&lt;br /&gt;
===Manipulating custom projectiles mid-game===&lt;br /&gt;
&lt;br /&gt;
==String manipulation==&lt;br /&gt;
===Quote redefinition mid-game===&lt;br /&gt;
===Copying and concatenation===&lt;br /&gt;
===Dynamic quotes===&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Eventloadactor&amp;diff=3205</id>
		<title>Eventloadactor</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Eventloadactor&amp;diff=3205"/>
		<updated>2005-09-15T12:07:11Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[eventloadactor]] runs when an actor is loaded into the map. Despite the name it is not a game event but an entirely seperate type of block ended with enda. It is most usefull for moving settings out of hitags and lotags and into [[gamevar]]s before they have unwanted hardcoded effects.&lt;br /&gt;
&lt;br /&gt;
  gamevar ZERO 0 0&lt;br /&gt;
  gamevar HITAGSAVED 0 2&lt;br /&gt;
  gamevar LOTAGSAVED 0 2&lt;br /&gt;
  eventloadactor MYSPRITE&lt;br /&gt;
    getactor[THISACTOR].hitag HITAGSAVED&lt;br /&gt;
    getactor[THISACTOR].lotag LOTAGSAVED&lt;br /&gt;
    setactor[THISACTOR].hitag ZERO&lt;br /&gt;
    setactor[THISACTOR].lotag ZERO&lt;br /&gt;
  &lt;br /&gt;
  enda&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Scripting&amp;diff=3204</id>
		<title>Scripting</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Scripting&amp;diff=3204"/>
		<updated>2005-09-15T11:57:50Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: /* About */ according to matteuses site they go back to ww2gi&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==About This Guide==&lt;br /&gt;
&amp;lt;div class=&amp;quot;floatright&amp;quot;&amp;gt;__TOC__&amp;lt;/div&amp;gt;&lt;br /&gt;
===Intro===&lt;br /&gt;
This guide will get you started with the basic aspects of EDuke32&#039;s commands -- those which set it apart from vanilla DN3D.  This guide makes no assumptions regarding the programming experience of the reader, other than that the reader comprehends and understands the basic CON system as was seen in Duke Nukem 3D 1.3d-1.5.&lt;br /&gt;
&lt;br /&gt;
===Con Basics===&lt;br /&gt;
As stated, this guide assume that you are familiar with the original CON code from Duke3D.  If you are not already familiar with the default commands, the authors of this guide recommend the following guide to the basics, imported into the EDukeWiki for your convenience:&lt;br /&gt;
* [[Confaq42|Con FAQ 4.2 by Jonah Bishop (note: some sections have been shuffled around a bit by TX)]] &lt;br /&gt;
** [http://rtcm.thecomitatus.com/knowledge-base/downloads-rtcm/duke3d-faqs-con/confaq42.zip Download stand-alone zipped version (original version from 1999 in .txt format)]&lt;br /&gt;
&lt;br /&gt;
Another good source of basic information is the following FAQ:&lt;br /&gt;
* [http://rtcm.thecomitatus.com/knowledge-base/downloads-rtcm/duke3d-faqs-con/H_CONFAQ.zip Con Editing Information v1.3 by James Ferry]&lt;br /&gt;
&lt;br /&gt;
==Gamevars==&lt;br /&gt;
&lt;br /&gt;
===About===&lt;br /&gt;
[[Gamevar|Gamevars]] were introduced in [[WW2GI]] and remain the most important aspect of the new commandset.  Gamevars allow you to store, manipulate, and execute code based on defined values.  Prior to gamevars, the only usable alternatives were manipulations of inventory item counters and were, as you can imagine, very limited.&lt;br /&gt;
&lt;br /&gt;
===Types===&lt;br /&gt;
There are three basic types of gamevar, each type storing a signed 32-bit fixed-point integer.  The three basic types are as follows:&lt;br /&gt;
* Global variable: A global variable will be the same for any actor it is used in. Changing a global variable changes it for all actors in the game. &lt;br /&gt;
* Per-player variable: A per-player variable may be set independently for each player in the game.  If a player performs an action that triggers a per-player variable change within an event or the APLAYER actor code, it will only change for the player that initiated that action.  If an actor changes a per-player variable, it will change for the closest player to the actor that changed it.&lt;br /&gt;
* Per-actor variable: A per-actor variable may be independently assigned to each copy of an actor in the game.&lt;br /&gt;
&lt;br /&gt;
===Use and manipulation===&lt;br /&gt;
&lt;br /&gt;
Custom variables are defined with the [[gamevar]] command, and the term gamevar is therefore used to describe custom variables in EDuke32.&lt;br /&gt;
&lt;br /&gt;
The syntax for defining a gamevar is:&lt;br /&gt;
::gamevar &amp;lt;varname&amp;gt; &amp;lt;value&amp;gt; &amp;lt;flags&amp;gt;&lt;br /&gt;
&lt;br /&gt;
You may use upper or lowercase letters for &amp;lt;varname&amp;gt;.  EDuke32 is case-sensitive, so a var named &amp;quot;EXAMPLE1&amp;quot; is different from &amp;quot;example1.&amp;quot;  Variable names should not begin with a digit. &lt;br /&gt;
&lt;br /&gt;
The &amp;lt;value&amp;gt; of the gamevar may be positive or negative.&lt;br /&gt;
&lt;br /&gt;
The &amp;lt;flags&amp;gt; may be set to either 0 (global), 1 (per-player), or 2 (per-actor).&lt;br /&gt;
&lt;br /&gt;
Manipulation of gamevars is accomplished by using a variety of commands that range in functionality from simple mathematical functions to grabbing internal values for manipulation in the CONs.  Here are a few of the more common variable manipulation primitives:&lt;br /&gt;
&lt;br /&gt;
*[[addvar]], [[addvarvar]]&lt;br /&gt;
*[[divvar]], [[divvarvar]]&lt;br /&gt;
*[[mulvar]], [[mulvarvar]]&lt;br /&gt;
*[[randvar]], [[randvarvar]]&lt;br /&gt;
*[[subvar]], [[subvarvar]]&lt;br /&gt;
*[[setvar]], [[setvarvar]]&lt;br /&gt;
&lt;br /&gt;
And some of the more rarely used ones:&lt;br /&gt;
&lt;br /&gt;
*[[andvar]], [[andvarvar]]&lt;br /&gt;
*[[sin]], [[cos]]&lt;br /&gt;
*[[orvar]], [[orvarvar]]&lt;br /&gt;
*[[shiftvarl]], [[shiftvarr]]&lt;br /&gt;
*[[xorvar]], [[xorvarvar]]&lt;br /&gt;
&lt;br /&gt;
Note that a complete list of primitives is, of course, available [[Full_command_list|here]].  The importance of manipulating gamevars will become clear when we get to talking about getting and setting the members of the various structures in the game.  Also note that as of EDuke32 1.3.0, all commands which accept read-only gamevars will also now accept constants in place of them.&lt;br /&gt;
&lt;br /&gt;
==Members of game structures==&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
===Player===&lt;br /&gt;
===Actor===&lt;br /&gt;
===Sector===&lt;br /&gt;
===Wall===&lt;br /&gt;
&lt;br /&gt;
==Events==&lt;br /&gt;
&lt;br /&gt;
===Overview===&lt;br /&gt;
EDuke32 provides both an object-oriented and an event-oriented interface to the game&#039;s internal workings.  As you already know, the object-oriented part of Duke is the actor system -- in contrast to that, we&#039;ll be talking about the event-oriented portion in this section.  As the name suggests, an [[events|event]] is a block of code that is triggered when a certain event in the game happens.  Events in the game are triggered internally whenever a certain point in the code is reached.&lt;br /&gt;
&lt;br /&gt;
Events are a key component in the manipulation of the game.  Using events, we can do a variety of things such as intercept keypresses, draw to the screen (more on this later), redefine what a player does when certain actions are executed, et cetera.&lt;br /&gt;
&lt;br /&gt;
===Onevent and endevent===&lt;br /&gt;
[[Onevent]] is the command used to start the definition of a block of code to be associated with one of the [[EDuke32 event list|events]].  Similiar to the [[actor]] keyword, onevent must be terminated by the equivalent of [[enda]], an [[endevent]].&lt;br /&gt;
&lt;br /&gt;
===Special events===&lt;br /&gt;
&lt;br /&gt;
==Drawing to the screen==&lt;br /&gt;
The ability to properly draw to the screen is a huge improvement over the hackish abominations involving quotes and unused characters that we were forced to endure when using 1.3d and 1.5.  There are several different drawing commands available, ranging in functionality from drawing graphics to the screen to printing text stored in quotes (see the section on string manipulation for more information).&lt;br /&gt;
&lt;br /&gt;
===Drawing commands===&lt;br /&gt;
*[[rotatesprite]]&lt;br /&gt;
*[[gametext]]&lt;br /&gt;
*[[minitext]]&lt;br /&gt;
*[[digitalnumber]]&lt;br /&gt;
*[[myos]] (deprecated)&lt;br /&gt;
*[[myospal]] (deprecated)&lt;br /&gt;
*[[myosx]] (deprecated)&lt;br /&gt;
*[[myospalx]] (deprecated)&lt;br /&gt;
&lt;br /&gt;
==Custom projectiles==&lt;br /&gt;
===Defining custom projectiles===&lt;br /&gt;
===Manipulating custom projectiles mid-game===&lt;br /&gt;
&lt;br /&gt;
==String manipulation==&lt;br /&gt;
===Quote redefinition mid-game===&lt;br /&gt;
===Copying and concatenation===&lt;br /&gt;
===Dynamic quotes===&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Talk:Change_the_player%27s_jump_height&amp;diff=3190</id>
		<title>Talk:Change the player&#039;s jump height</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Talk:Change_the_player%27s_jump_height&amp;diff=3190"/>
		<updated>2005-09-09T01:34:17Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;would be nice if it were possible to do the opposite to get mario style jumps ;) [[User:Plugwash|Plugwash]] 20:34, 8 September 2005 (CDT)&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=User:Plugwash&amp;diff=2533</id>
		<title>User:Plugwash</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=User:Plugwash&amp;diff=2533"/>
		<updated>2005-09-02T13:08:10Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wanted for teamduke:&lt;br /&gt;
&lt;br /&gt;
* control over gametype list (patch applied to TXs working tree but not in any release yet)&lt;br /&gt;
* control over who autoaims at who &lt;br /&gt;
* control over who can hurt who (for team friendly fire)&lt;br /&gt;
* control over scoring of kills e.g. to deduct points for killing a teammate.&lt;br /&gt;
&lt;br /&gt;
Other things i&#039;d like to see.&lt;br /&gt;
&lt;br /&gt;
* Ability to define an action by absoloute tile number rather than relative tile number (having to define the same actions 3 times for 3 actors is highly annoying).&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Zshoot&amp;diff=2116</id>
		<title>Zshoot</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Zshoot&amp;diff=2116"/>
		<updated>2005-08-31T01:35:23Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;zshoot &amp;lt;[[gamevar|zvel]]&amp;gt; &amp;lt;projectile&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Shoot]]s &amp;lt;projectile&amp;gt; with the [[zvel]] &amp;lt;[[gamevar|zvel]]&amp;gt;.  Values for &amp;lt;[[gamevar|zvel]]&amp;gt; can be calculated using the [[ldist]] command.  These functions are useful for causing an [[actor]] to aim vertically at objects other than the player.&lt;br /&gt;
&lt;br /&gt;
WARNING: this command is buggy, if zvel is 0 the command will behave exactly like shoot.&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Ldist&amp;diff=2539</id>
		<title>Ldist</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Ldist&amp;diff=2539"/>
		<updated>2005-08-31T01:19:38Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;ldist&#039;&#039;&#039; calculates the 2D distance between two actors and then for some strange reason adds 1 to the result.&lt;br /&gt;
&lt;br /&gt;
ldist &amp;lt;actor1&amp;gt; &amp;lt;actor2&amp;gt;&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Getangle&amp;diff=2522</id>
		<title>Getangle</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Getangle&amp;diff=2522"/>
		<updated>2005-08-31T01:08:16Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;getangle &amp;lt;x&amp;gt; &amp;lt;y&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Get&#039;s the angle formed by the displacements &amp;lt;x&amp;gt; and &amp;lt;y&amp;gt;. In most languages this function is known as arctan2. &lt;br /&gt;
&lt;br /&gt;
NOTE: To make one actor face another some subtraction is involved. see [[make one actor face another]] in the examples.&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Talk:Findnearactor&amp;diff=2538</id>
		<title>Talk:Findnearactor</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Talk:Findnearactor&amp;diff=2538"/>
		<updated>2005-08-31T01:02:01Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;At least in 2.0 findnearactor did not nessacerally find the nearest actor if there was more than one actor of the required type within range.&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Talk:Break&amp;diff=2537</id>
		<title>Talk:Break</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Talk:Break&amp;diff=2537"/>
		<updated>2005-08-31T00:48:05Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: putting conversation onto talk page so someone can answer it when they have time&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;  [02:01] &amp;lt;plugwash&amp;gt; i&#039;ve been trying to improve the documentation for break in the wiki and i came accross something that makes no sense&lt;br /&gt;
  [02:01] &amp;lt;plugwash&amp;gt; all break in con seems to do is make parse return 1&lt;br /&gt;
  [02:03] &amp;lt;plugwash&amp;gt; however parseifelse ignores the return of parse yet constructions like ifgotweapononce break seem to work even though i can&#039;t see any way the could work&lt;br /&gt;
  [02:04] &amp;lt;reverendterminx&amp;gt; don&#039;t know what to tell you because I don&#039;t have time to look at it now&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Switch&amp;diff=2536</id>
		<title>Switch</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Switch&amp;diff=2536"/>
		<updated>2005-08-31T00:34:00Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;switch&#039;&#039;&#039; statement in con is similar to that in C.&lt;br /&gt;
&lt;br /&gt;
  switch &amp;lt;gamevar&amp;gt;&lt;br /&gt;
    case &amp;lt;constant&amp;gt;&lt;br /&gt;
      &amp;lt;do something&amp;gt;&lt;br /&gt;
      [[break]]&lt;br /&gt;
    case &amp;lt;constant&amp;gt;&lt;br /&gt;
      &amp;lt;do something&amp;gt;&lt;br /&gt;
      break&lt;br /&gt;
  endswitch&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Switch&amp;diff=1118</id>
		<title>Switch</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Switch&amp;diff=1118"/>
		<updated>2005-08-31T00:32:27Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The &#039;&#039;&#039;switch&#039;&#039;&#039; statement in con is similar to that in C.&lt;br /&gt;
&lt;br /&gt;
switch &amp;lt;gamevar&amp;gt;&lt;br /&gt;
  case &amp;lt;constant&amp;gt;&lt;br /&gt;
    &amp;lt;do something&amp;gt;&lt;br /&gt;
    [[break]]&lt;br /&gt;
  case &amp;lt;constant&amp;gt;&lt;br /&gt;
    &amp;lt;do something&amp;gt;&lt;br /&gt;
    break&lt;br /&gt;
endswitch&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Case&amp;diff=2535</id>
		<title>Case</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Case&amp;diff=2535"/>
		<updated>2005-08-31T00:30:05Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[switch]]&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Talk:Cactor&amp;diff=2084</id>
		<title>Talk:Cactor</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Talk:Cactor&amp;diff=2084"/>
		<updated>2005-08-31T00:25:27Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;There&#039;s more to cactor than simply changing the enemy type I believe.  I&#039;ve been doing some tests with it, and it seems to &lt;br /&gt;
# retain the original health of the first actor (as expected, but worth noting)&lt;br /&gt;
# have some kind of correlation between the last action frame of the original actor and its relation to the initial actor frame and the action frame with which the second actor starts, if that makes any sense.  For example, I used a gamevar to swap a liztroop into a lizman and vice versa, and oftentimes the lizman would appear in the crouch or dead position until shot.&lt;br /&gt;
&lt;br /&gt;
nevermind, TX showed me the light&lt;br /&gt;
(both comments above by userper)&lt;br /&gt;
:can you by any chance reveal in what way he showed you the light? [[User:Plugwash|Plugwash]] 19:25, 30 Aug 2005 (CDT)&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Activatebysector&amp;diff=2534</id>
		<title>Activatebysector</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Activatebysector&amp;diff=2534"/>
		<updated>2005-08-31T00:21:53Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;activatebysector&#039;&#039;&#039; calls the activatebysector function in sector.c it takes two parameters both gamevars. but it is uncommented and i can&#039;t figure out what it is actually supposed to do.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sect&amp;gt; presumablly a sector.&lt;br /&gt;
&amp;lt;j&amp;gt; possiblly an activator number or a player number or something.&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Activatebysector&amp;diff=1116</id>
		<title>Activatebysector</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Activatebysector&amp;diff=1116"/>
		<updated>2005-08-31T00:21:26Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;activatebysector&#039;&#039; calls the activatebysector function in sector.c it takes two parameters both gamevars. but it is uncommented and i can&#039;t figure out what it is actually supposed to do.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;sect&amp;gt; presumablly a sector.&lt;br /&gt;
&amp;lt;j&amp;gt; possiblly an activator number or a player number or something.&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Action&amp;diff=1920</id>
		<title>Action</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Action&amp;diff=1920"/>
		<updated>2005-08-31T00:08:41Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;An action is an animation for an [[actor]]. Actions are defined outside of an [[actor]].&lt;br /&gt;
&lt;br /&gt;
action &amp;lt;name&amp;gt; &amp;lt;startframe&amp;gt; &amp;lt;frames&amp;gt; &amp;lt;viewtype&amp;gt; &amp;lt;incvalue&amp;gt; &amp;lt;delay&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;name&amp;gt; is the name of the action.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;startframe&amp;gt; is the starting frame number (relative to the main sprite of the [[actor]]).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;frames&amp;gt; is the total number of frames in the action. Must be at least 1.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;viewtype&amp;gt; is the number of sides drawn for the actor.  Prior to 3D models, this method was used to simulate a 3D appearance for sprites.  Valid values are: &lt;br /&gt;
:&#039;&#039;&#039;1&#039;&#039;&#039; - The sprite will appear the same regardless of the angle at which it is viewed.&lt;br /&gt;
:&#039;&#039;&#039;3&#039;&#039;&#039; - The sprite will have 16 angles built from only 4 art tiles. A new frame is drawn every 22.5 degrees in a clockwise pattern beginning with the front of the sprite.  The pattern is as follows, with 1, 2, 3, and 4 being the order of the four tiles used, and M denoting that the tile is mirrored: 1M, 2M, 3M, 4M, 4, 3, 2, 1, 1M, 2M, 3M, 4M, 4, 3, 2, 1.&lt;br /&gt;
:&#039;&#039;&#039;5&#039;&#039;&#039; - The sprite will have 8 angles constructed from 5 art tiles, three of which are mirrored.  A new frame is drawn every 45 degrees in a clockwise pattern beginning with the front of the sprite using the following pattern: 1, 2, 3, 4, 5, 4M, 3M, 2M. &lt;br /&gt;
:&#039;&#039;&#039;7&#039;&#039;&#039; - The sprite will have 12 angles constructed from 7 art tiles, five of which are mirrored.  A new frame is drawn every 30 degrees in a clockwise pattern beginning with the front of the sprite using the following pattern: 1, 2, 3, 4, 5, 6, 7, 6M, 5M, 4M, 3M, 2M.&lt;br /&gt;
:&#039;&#039;&#039;8&#039;&#039;&#039; - The sprite will have 8 angles constructed from 8 art tiles.  A new frame is drawn every 45 degress in a clockwise pattern beginning with the front of the sprite using the simple pattern: 1, 2, 3, 4, 5, 6, 7, 8.&lt;br /&gt;
&amp;lt;!--what if anything do the other values do--?&lt;br /&gt;
&lt;br /&gt;
1 is generally used for pickups and often things like fire hydrants.  3 is useful only for very symmetrical actors but does give the most angles. 5 and 7 are for enemies and simila which have a single axis of symetry and where you wan&#039;t a front view such that when they face at you they actually look like they are facing at you. 8 is for stuff with little in the way of symetry.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;incvalue&amp;gt; is the direction of the animation. 1 to advance forward, -1 to go back.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;delay&amp;gt; is the delay between frames.&lt;br /&gt;
 &lt;br /&gt;
To call an action from within an actor simply put:&lt;br /&gt;
&lt;br /&gt;
action &amp;lt;name&amp;gt; &lt;br /&gt;
&lt;br /&gt;
Note: Every frame advance adds 1 to [[actioncount]]. To reset an animation, either call the action again or use [[resetactioncount]]. Starting a new animation will also reset [[actioncount]] to 0.&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=COOP&amp;diff=2513</id>
		<title>COOP</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=COOP&amp;diff=2513"/>
		<updated>2005-08-30T15:15:51Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: add line breaks&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This stores the game type for multiplayer&lt;br /&gt;
&lt;br /&gt;
0: dukematch (spawn)&amp;lt;br&amp;gt;&lt;br /&gt;
1: cooperative play&amp;lt;br&amp;gt;&lt;br /&gt;
2: dukematch (no spawn)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
plugwash is working on a patch to allow the list of game types to be altered from con.&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=User:Plugwash&amp;diff=1121</id>
		<title>User:Plugwash</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=User:Plugwash&amp;diff=1121"/>
		<updated>2005-08-29T22:41:21Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wanted for teamduke:&lt;br /&gt;
&lt;br /&gt;
* control over gametype list (patch applied to TXs working tree but not in any release yet)&lt;br /&gt;
* control over who autoaims at who &lt;br /&gt;
* control over who can hurt who (for team friendly fire)&lt;br /&gt;
* control over scoring of kills e.g. to deduct points for killing a teammate.&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=User:Plugwash&amp;diff=1110</id>
		<title>User:Plugwash</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=User:Plugwash&amp;diff=1110"/>
		<updated>2005-08-29T22:35:43Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wanted for teamduke:&lt;br /&gt;
&lt;br /&gt;
* control over gametype list (patch with TX but not applied yet)&lt;br /&gt;
* control over who autoaims at who &lt;br /&gt;
* control over who can hurt who (for team friendly fire)&lt;br /&gt;
* control over scoring of kills e.g. to deduct points for killing a teammate.&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=User:Plugwash&amp;diff=1109</id>
		<title>User:Plugwash</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=User:Plugwash&amp;diff=1109"/>
		<updated>2005-08-29T22:35:11Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wanted for teamduke:&lt;br /&gt;
&lt;br /&gt;
* control over gametype list (patch with TX but not applied yet)&lt;br /&gt;
* control over who autoaims at who &lt;br /&gt;
* control over who can hurt who (for team friendly fire)&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Ifrnd&amp;diff=2523</id>
		<title>Ifrnd</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Ifrnd&amp;diff=2523"/>
		<updated>2005-08-29T13:29:12Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ifrnd &amp;lt;value&amp;gt; { &amp;lt;do somethin!&amp;gt; }&lt;br /&gt;
&lt;br /&gt;
An [[if condition]] stating the probability of it &#039;doin somethin!&#039; in this case.&lt;br /&gt;
&lt;br /&gt;
NOTE: It&#039;s out of 256 as max, so &#039;ifrnd 256 = 100%&#039;, and &#039;ifrnd 128 = 50%&#039;&lt;br /&gt;
&lt;br /&gt;
This command must only be used in synchronised code or you will cause desyncs. for display code use [[displayrand]] instead.&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=COOP&amp;diff=1114</id>
		<title>COOP</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=COOP&amp;diff=1114"/>
		<updated>2005-08-29T13:23:35Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;This stores the game type for multiplayer&lt;br /&gt;
&lt;br /&gt;
0: dukematch (spawn)&lt;br /&gt;
1: cooperative play&lt;br /&gt;
2: dukematch (no spawn)&lt;br /&gt;
&lt;br /&gt;
plugwash is working on a patch to allow the list of game types to be altered from con.&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=User:Plugwash&amp;diff=1108</id>
		<title>User:Plugwash</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=User:Plugwash&amp;diff=1108"/>
		<updated>2005-08-29T00:08:49Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Wanted for teamduke:&lt;br /&gt;
&lt;br /&gt;
* control over gametype list (patch with TX but not applied yet)&lt;br /&gt;
* control over who autoaims at who &lt;br /&gt;
* team friendly fire&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
	<entry>
		<id>https://wiki.eduke32.com/w/index.php?title=Constantly_updated_gamevars&amp;diff=1919</id>
		<title>Constantly updated gamevars</title>
		<link rel="alternate" type="text/html" href="https://wiki.eduke32.com/w/index.php?title=Constantly_updated_gamevars&amp;diff=1919"/>
		<updated>2005-08-27T23:17:01Z</updated>

		<summary type="html">&lt;p&gt;Plugwash: add coop&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;These are [[gamevar]]s which are defined as direct pointers to internal variables in the game.  While some will change frequently, others will remain static for the whole game.  Please note that the values of most of these variables will be different on each peer, so you must not rely on them for anything that could possibly have an effect on sync.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;strong&amp;gt;Do not attempt to redefine these or you will have problems.&amp;lt;/strong&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*[[currentweapon]]&lt;br /&gt;
*[[gs]]&lt;br /&gt;
*[[gun_pos]]&lt;br /&gt;
*[[looking_angSR1]]&lt;br /&gt;
*[[looking_arc]]&lt;br /&gt;
*[[myconnectindex]]&lt;br /&gt;
*[[screenpeek]]&lt;br /&gt;
*[[numplayers]]&lt;br /&gt;
*[[weaponcount]]&lt;br /&gt;
*[[weapon_xoffset]]&lt;br /&gt;
*[[windowx1]]&lt;br /&gt;
*[[windowx2]]&lt;br /&gt;
*[[windowy1]]&lt;br /&gt;
*[[windowy2]]&lt;br /&gt;
*[[xdim]]&lt;br /&gt;
*[[ydim]]&lt;br /&gt;
*[[coop]]&lt;/div&gt;</summary>
		<author><name>Plugwash</name></author>
	</entry>
</feed>