Notes on Battlezone 2 v1.2 Deathmatch DLL Source code.

   Disclaimer: this source code release is UNSUPPORTED by Activision,
Pandemic Studios, and the like. While it is a complete archive of an
functional multiplayer DLL source code and MS Visual C++ 6.x project,
it comes with no warranty, no official support, or anything else.

   Included in this archive is a complete set of source code needed to
build Battlezone 2's Deathmatch DLL for version 1.2. Inside the
Missions/Deathmatch01 folder, there is a Deathmatch01.dsw project file
for MS Visual C++ (aka MSVC). Opening this project in that environment
will let you build up a DLL to the Debug/Missions folder off the root
of this archive.

   Please note: the link settings for this DLL have been modified so
that it builds to Deathmatch02.DLL; this has been done so that you do
not overwrite the official DLLs. Please ensure that any DLLs you
create do not have the same name as an existing official DLL;
inconsistent DLLs across various machines may cause sync errors,
crashes, or worse.

   The Strategy02.dll source code is nearly identical; it builds a
recycler for the team in the SetupTeam() function, and also tracks
that recycler for end-of-game conditions.

   Also, this project is set up to make two release versions of the
DLL, one for a normal bzone.exe, and one for a bzoneServer.exe, i.e.
a dedicated server. The difference between them is which .lib they
link against. Both versions of the DLL must be built if you want a DLL
to run from a dedicated server-- a DS cannot load a standard DLL.  The
DS version of a DLL has 'server' pre-mangled onto the .dll name just
before '.dll' as the project shows.

   Comments on multiplayer programming: because BZ2 runs in a lockstep
fashion, every DLL running on all of the machines must behave
identically in terms of anything that affects gamestate. Thus, do not
do anything based on the local player, but if you're doing something,
loop over all players, e.g. a loop like

for(int CheckTeam=0;CheckTeam<MAX_TEAMS;CheckTeam++) {
	Handle h=GetPlayerHandle(CheckTeam);
	if(h) { // Player Exists...
		// .. Do stuff here....
	}
}

   Only visual-only things like objectifying targets (see the
ExecuteRace() function) can be done not identically across platforms.


