DZMapM (Map Mutator) for Unreal 1 By -Zombie (Of DZ)
       unrzombie@yahoo.com
       Website: Will I ever start one?

Version history - Oldest to newest
8/17/03 Initial Release
1/26/04 Version 1.1 - Bug Fixes to ItemReplacer, More Map Fixes, and Added 1 New feature.
                      * Ammo replacing No longer crashes the server.
                      * Added a few new map fixes that could possibly cause a blocked level.
                      * Re-worked the LevelRecycle feature to go along with the new special
                        EndGame and Gateway fixes.
                      * Added bReturnToCrashMap feature (Read into the ReadME for details).
                      * Decoration to Decoration or Item to Decoration replacing does indeed 
                        work fine. Read the Bugs and Issues Section for details.

10/31/04 Version 2.0 - More user friendly replacing, replacement error logging, special map 
                       fixes (RTNP), native Unreal bug fixes, and a MonsterSpawner. :)
                       * The mutator now ONLY works as a true mutator. No more Global serveractor
                         run mode. This was necessary to optimize some of the routines.
                       * Added RTNP map fixes (aka. Previously RTNPMute - RTNP Fix Mute). 
                         This makes normal RTNP maps playable online 
                         without needing re-released fixed maps (ONLY for version 226Gold).
                       * Itemreplacer and DropWhenKilled can be set to only replace/change at 
                         level start rather then continuously. (bLevelStartOnly option)
                       * ItemReplacer now has the options 'ActionOnEvery' and 'ActionMaxNumber'.
                         If you've ever used WMutate from }TCP{Wolf then you should already know 
                         how that works, otherwise read the packaged readme. 
                       * Added Special optional 'Monster Kill Requirement' mode. Players must
                         kill more then 80% of the total monsters in the level before the end is 
                         enabled. Also includes a 'MKRBackupEndMinutes' timer in case the 80% 
                         cannot be met within reasonable time.
                       * Added a MonsterSpawner as a brand new feature. Users can control
                         how many monsters spawn at level startup, how fast they respawn, random
                         spawns from list, and more. (ReadMe for details)
                       * Better error logging and replacing internal unreal actors with other 
                         internal actors. This simplifies replacing when the ReplaceWithClass 
                         actor comes from the normal 'Unreali' or 'UnrealShare' packages.
                       * LevelRecycle option removed. New custom MapSequence configuration now 
                         replaces it.
                       * Fixed an infamous well-known native Unreal bug caused from spawning 
                         carcasses that results in a server crash (250 call CheckReplacment 0000 
                         Infinite recursion).             
                       * Configurable psInventory (Pawn Spawn Inventory) classes. Spawn pawns 
                         from a host pawn after death. Users assign the psInventory classes to 
                         monster pawns using the PawnDWKChanger.

1/11/04 Version 2.01 - Minor trigger fix.
                       * Fixed a small issue with TriggeredDeath actors in a couple maps while
                         'MonsterKillRequirement' mode was enabled.

10/5/06 Version 2.1 - Feature improvements, small additions, optimizations and bug fixes. Old 
		     DZMapM version configurations will need to be re-created using new v2.1 
		     configuration options (start with the new DZMapM.ini).
		     * Fixed a bug in decoration handling for RTNP that caused decorations to
		       destroy on UPak 226 servers.
		     * Fixed 'MonsterKillRequirement' speciallevel mode to work better on a few 
		       original coop maps and to count monster pawns more accurately.
		     * Fixed ItemReplacer to properly replace weapons by SkaarjTroopers and 
		       handle other custom weapon carrying monster pawns appropriately.
		     * Fixed an incorrectly named PsInventory class. 
		     * Added AI hang prevention and pawn stabilizer based on the JCoopZ 
		       implementation. Should prevent most hang instances.
		     * Added another map fix for IsvDeck1 and DasaCellars.
		     * Added to MonsterSpawn a 'bConsiderPlayerLoad' setting to dynamically
		       regulate monster spawn times according to RespawnSeconds / NumPlayers.
		     * Added support to destroy an original class without a replacement. Users
		       must specify "None" in the ReplaceWithClass or PDropWhenKilled settings.
		     * Changed PawnDWKChanger, ItemReplacer, and PawnReplacer array list sizes to
		       support up to 128 configuration entries.
		     * Changed PawnReplacer to not replace pawns within a SkyBox.
		     * Changed MapSequence feature to work and behave identically to JCoop 
		       Sequence feature.
		     * Changed MonsterSpawn 'bSpawnRandom' setting to use a different method that
		       does not use rounding.
		     * Changed DZMapM.int advanced options menu layout.
		     * Improved and changed ItemReplacer replacement routines to intelligently 
		       determine inventory that is safe to handle. In most cases this prevents 
		       gametype player GiveItem conflicts on misconfigured servers.
		     * Improved MonsterSpawn pathnode finding to work in maps that do not have 
		       pathing properly built.
		     * Improved MonsterSpawn spawn testing for pawn collision sizes slightly over
		       200 UUnits.
		     * Improved AutoRunCommands to execute immediately after the first player 
		       joins a level.
		     * Optimizations to much of the PawnDWKChanger, ItemReplacer, and 
		       PawnReplacer routines. Less load early during level start.

10/13/06 Version 2.12 - Fixed MapSequence in RTNP.
		        * Fixed a bug in RTNP teleporter handling that prevented MapSequence
			  from working. Change also prevents the possibility of conflict with
			  RTNP map conversions.
			* Fixed an Eldora RTNP map fix that was broken since v2.0.

12/22/06 Version 2.15 - ItemReplacer and RTNP level fix changes.
		     * Fixed an ItemReplacer conflict with custom map ThingFactory actors that 
		       were configured for spawning inventory.
		     * Fixed RTNP Abyss' end teleporter to enable from the control panel trigger
                       while bLevelBlockPrevention is enabled.
		     * Fixed ItemReplacer bug that caused RTNP upak decorations to drop 3 
		       replacements when originally configured to drop one item.
		     * Changed ItemReplacer decoration content replacement to operate more 
		       appropriately.
		     * Changed an RTNP CrashSite2 level fix to reduce the chances of conflict 
		       with any modified map versions.
07/2/08 Version 2.2 - Fixes to mutator, RTNP, and more levels.
		     * Fixed a bug that could cause player inventory replication failures on some
		       server setups.
		     * Fixed creaturecarcass safety handler bug that caused replacements by a 
		       mutator to be destroyed.
		     * Fixed 'bPreventLevelBlocks' option not staying disabled when configured to
		       be.
		     * Fixed an RTNP CrashSite2 client crash near a forcefield as well as other
		       possibilities in maps.
		     * Added to PawnReplacer a 'bUseCreatureFactory' setting to use an entry for 
		       changing the pawns that will spawn by a creaturefactory actor in a map.
		     * Added another map fix for Passage.
		     * Added another lamer map fix for SkyBase.
		     * Changed RTNP and "The Gateway" teleporter fixes to a better method.
		     * Improved MapSequence feature so that the current map and its URL can be 
		       specified in the 'OriginalNext' setting separated by a colon. This 
		       optional format can allow the function of multiple identical OriginalNext 
		       URLs in the list.
	
<===Index===>
------------------------------------------------------------------------
1. Introduction
2. Install Guide
3. Starting and Using the Mutator
4. Configuration Options
5. Recommendations
6. Bugs and Issues
7. Thanks and Credits
8. Copyright and Permissions
------------------------------------------------------------------------


===============
1. Introduction
===============

Zip Package Contents:
DZMapM.u             - Mutator Class Mod File
DZMapM.int           - Menu / ServerMenu Configution File
DZMapM.ini           - Initialization and Variable Settings File
DZMapMv2-2ReadMe.txt - The file you are reading from now!

Compatibility:	     - Unreal 1
		       Unreal Tournament (UT99)? Untested

1.1 [What is DZMapM (DZ Map Mutator) ?]

     DZMapM is a TrueType Mutator that was originally designed to fix and repair Coop maps that 
could easily become blocked by players. Since then it has been reworked to support fully 
customizable levelPawn, item, and pawn-dropwhenkilled replacing as well as server level recycling,
auto-command execution and a MonsterSpawner. In other words, this is a more thought out and 
featured version than my own personalized server mutator :-). However, I realize that Joss and 
}TCP{Wolf already have great mutators out that can do a lot of what mine does. On the 
other hand, newer additions in DZMapM make this mutator a great customizable engine to a coop or
"monstermash" DM/Team server.


=================
1.2 [Feature Set]
=================
A. Fixes and repairs various bugs in coop maps that can block a level or just plain
   cause problems. Updated *10/31/04* now includes RTNP map fixes.

B. Can configure map sequences for those not using a JCoop or other custom GameTypes. 
   Feature Updated in v1.1 *1/26/04*

C. Customizable replacing of Items/Weapons in a level and on the fly.

D. Customizable replacing of Monster pawns in a level and changing of creaturefactory spawns.

E. Customizable ability to change monsters pawns to drop inventory items after being killed.

F. Customizable ability to auto-execute "set" commands per level on the server.

G. Customizable startoff translator message.

H. New *1/26/04* 
   Ability to return a server recovering from a crash to the map it was last on.

I. Special optional 'Monster Kill Requirement' mode that forces players to kill 80% more monsters 
   to end the level.

J. New added *10/31/04*
   Customizable MonsterSpawner. Users can control how many monsters spawn at level startup, how 
   fast they respawn, random spawns from list, and more.

K. New added *10/31/04*
   Configurable psInventory (Pawn Spawn Inventory) classes. Spawn pawns from a host pawn after
   death.

L. Some fixes to common well-known bugs such as the carcass spawn bug that causes a
   250 call CheckReplacement 0000 infinite recursion (unrelated to DZMapM).

M. New added *10/5/06*
   AI hang prevention to stop servers from hang crashes. Almost identical to the hang prevention 
   in JCoopZ.

=======================
2. [Installation Guide]
=======================
2.1
Unzip all package contents into your Unreal's \System\ folder. DZMapM won't work very well
or function at all if it's missing the DZMapM.int, DZMapM.ini or DZMapM.u file in the 
System folder! Version 2.1+ has some significant changes so make sure to install the updated 
DZMapM.int file too.

2.2
Read section 3.1 on how to run the mutator.


==================================================
3. [Starting and Using the Mutator] PAY ATTENTION!
==================================================
3.1
Start the mutator in a command line by adding "?Mutator=DZMapM.DZMapMutator" to your normal
server command-line starts. If you want to run more than more mutator then add comma to the end 
of the last mutator and put it there. Example: "?Mutator=AKcoop2.AKcoop,DZMapM.DZMapMutator"
Full command-line Example: "C:\Unreal\System\Unreal.exe Vortex2?Game=UnrealShare.CoopGame?Mutator=DZMapM.DZMapMutator -server"

If you ran the mutator in version 1's Global mode in the past, make sure you REMOVE the 
"ServerActors=DZMapM.DZMapMutator" entry or comment it out in the INI file!


==========================
4. [Configuration Options]
==========================
4.1
It is HIGHLY recommended that you configure and setup most of the options from the Advanced 
Options server menu and not always straight from the DZMapM.ini file. All configuration 
information below is organized into the sub-menu sections that they will appear in.

4.2
Global Settings:
	bPreventLevelBlocks - When set to "True" will fix all coop maps of the typical player
                              blocks. Most noticeable fixes include Passage, Noork, Ruins, 
                              IsvDeck1, NaliBoat, NaliC, ExtremeDGen, and ExtremeDark Endings.
                              Updated *10/31/04 Now fixes RTNP maps for v226Gold users.
                              Other specific Behavior Changes: 
                                           * Vortex2 - Near End Elevator Mover
					   * Passage - 2 First door Movers
                                           * Chizra -  Several Pole and Pillar Movers
                                           * Ceremony - Several Pole and Pillar Movers
                                           * Dark - 3 Switch Room Door
                                           * TerraLift - Main Elevator Lift
                                           * Ruins - Several Door and Gate Movers
                                           * TheSunspire - 2 Lifts
                                           * SkyCaves - 1 Watergate Mover
                                           * SkyTown - Subfloor Door and Near End Lift Movers
                                           * Bluff - 2 Big wooden jaw door Movers
                                           * DasaCellars - 2 gate movers by drop down krall
                                           * DCrater - Main starting Lift Mover
                                           * ExtremeLab - Starting player lift mover
                                      RTNP:
                                           * DuskFalls - Near-end dispatcher, new end teleporter,
                                                         and new playerstart.
                                           * NeveC - New end teleporter
                                           * Eldora - Triggers, new end teleporter, new 
                                                      playerstarts.
                                           * Glathriel1 - 1 Mover, and playerstart
                                           * Glathriel2 - Several movers, new end teleporter
                                           * CrashSite - 1 Mover
                                           * CrashSite1 - 1 Mover, new end teleporter
                                           * CrashSite2 - Several movers, dispatcher, trigger, 
                                                          new end teleporter.
                                           * SpireLand - New end teleporter
                                           * Nagomi - 1 mover, new end teleporter
                                           * Velora - Several movers, new end teleporter
                                           * Nagomisun - 1 mover, new end teleporter
                                           * Foundry - 1 mover, new end teleporter
                                           * Toxic - New end teleporter 
                                           * Glacena - New end teleporter
                                           * Abyss - New end teleporter 
                                           * Nalic2 - Trigger to open near-end door, new end 
                                                      teleporter
                              Now you may wonder, "why don't you just mutate every mover in every
                              level so they can all work fine and behave the same?". The reason 
                              why I manually pick out the map flaws is so that I can keep the 
                              level's behavior as close as possible to the original while still 
                              fixing the main possible issues. Although I do have an all general 
                              map fix in place, but it's done so in a way map makers should of 
                              never did while designing their map anyway.
			      Default is True.

        bPreventLamerBlocks - New added *10/31/04. When set to "True" will alter movers
                              in various regular coop maps making it tougher for lame players to
                              consistently block parts of a map. This feature option is
                              not nearly as important as 'bPreventLevelBocks'. Only turn this on
                              if you have players abusing specific places in IsvDeck1, SkyCaves, 
                              SkyTown, VeloraEnd, Bluff, DasaPass, and DasaCellars.
			      Default is False.
                               
        bReturnToCrashMap - New feature added in v1.1 *1/26/04*. When "True" will enable
                            the server to recover and start at the same map it was last on before
                            it crashed. Mainly useful for those admins who use server restarting
                            programs/tools for when the server crashes/hangs.
                            Note: (Read Recommendations Section 5.1 and Bugs/Issues Section 6.4).
			    Default is False.

        bAutoRunCommands - When set to "True" will enable the auto executing of "set"
                           commands on the server at every level start. 
                           Example: AutoRunCommand[0]=set krallelite aggressiveness 10
                                    AutoRunCommand[1]=set minigun pickupammocount 800
                                    AutoRunCommand[2]=set jumpboots charge 99999
                                    AutoRunCommand[3]=set skaarjlord groundspeed 600
                                    etc...

        SpecialLevelMode - New added *10/31/04*. This is a special level rule mode that
                           regulates certain actions in the server and map. The 3 choices are
                           "SpecialMode_Disabled", "MonsterKillRequirement", and "MonsterRespawn".
                           MonsterKillRequirement - Players must kill more then 80% of the total
                                                    monsters in the level before the end is 
                                                    enabled. Also includes a MKRBackupEndMinutes
                                                    timer in case the 80% cannot be met within 
                                                    reasonable time. If you ever need to enable 
                                                    the end teleporter immediately if there is a 
                                                    problem then use the command
                                                    "killall scriptedpawn".
                                                    Note: (READ Bugs/Issues Section 6.6!!!)
                           MonsterRespawn - Allows the MonsterSpawner to respawn new monster 
                                            pawns from the MonsterSpawn list based on the 
                                            'RespawnSeconds' option. If this setting is not used
                                            then monster pawns cannot be respawned on the timer.
                                            Note: (Read Recommendations Section 5.3 for more)
                           SpecialMode_Disabled - Neither of the other 2 feature options are
                                                  enabled. Use this if you want to run a more
                                                  normal game.
			   Default is "SpecialMode_Disabled".

        MKRBackupEndMinutes - New added *10/31/04*. Accompanies the 'MonsterKillRequirement'
                              mode. This is the timer minutes until the ending teleporter
                              is automatically re-enabled. This is necessary because there are
                              cases when 80% monsters killed cannot be met within a reasonable 
                              time or at all for that matter. 
			      Note: If you ever need to enable the end teleporter immediately if 
                              there is a problem then use the command "killall scriptedpawn".
			      Default is "60" minutes.

	DefaultWeaponClass - Specify a new weapon class to mutate the gametype's DefaultWeapon 
			     that is given to players. The DispersionPistol is the normal 
			     DefaultWeapon in most servers, and to change it to a new weapon you 
			     should use this option.
			     Default is blank (no change).

	TranslatorMsg - A string line where you can add your own custom startoff message.
                        Note: (Read Recommendations Section 5.5).
			Default is "Universal Translator".      

        MapSequence[]+ - Added in v2.0 *10/31/04*. This option allows a user to specify how
                         maps will be chain-linked together. When an entry matching OriginalNext 
			 is found in the ending teleporter, the NewNext map is assigned instead.
			 OriginalNext - The mapname (without .unr extension) that the current map 
					will switch to next.
					Note: Read example 2 below for an optional use of this 
					      setting.
			 NewNext - The mapname (without .unr extension) that the current map will 
				   be re-mapped to switch to next INSTEAD.
                         Example: MapSequence[i]=(OriginalNext="EndGame",NewNext="Vortex2",NoURLMap="")
                         	  The QueenEnd map (which normally switches to EndGame) will now 
				  switch to Vortex2 instead.
			 Example 2: MapSequence[i]=(OriginalNext="QueenEnd:EndGame",NewNext="Vortex2")
			   	    The optional ":" colon is used to separate the current map 
				    from the map name URL it was going to switch to next. Used in 
				    cases when multiple custom maps may switch to the same next 
				    map.
             
4.3
MonsterSpawner Settings:
        bMonsterSpawner - When set to "True" will enable the ability to spawn extra monster pawns
                          at every level start and respawn more.

	MonsterSpawn[]+:
		PawnClass - A ScriptedPawn child class that the MonsterSpawner will spawn. Must be in
			    Package.Name format.

        MSpawnerSettings[]+:
                bSpawnRandom - When "True" will spawn monster pawns from the MonsterSpawn list
                               randomly rather then going in list order.
			       Default is False.

		bConsiderPlayerLoad - New added *10/5/06*. When "True" the RespawnSeconds is 
                                      dynamically effected by the number of current players in 
				      the level. The more players in the level the shorter the 
				      RespawnSeconds. The fewer players in the level the closer 
				      RespawnSeconds remains to the stored starting number of 
				      seconds. To calculate timing of monster respawns use this 
				      formula:
				      (RespawnSeconds / TotalPlayers) = Dynamic RespawnSeconds
				      RespawnSeconds DIVIDE_BY TotalPlayers EQUALS the dynamic.
				      Default is False.

                StartupSpawnAmount - The amount of monster pawns spawn from the MonsterSpawn list
                                     that are spawned at the startup of every level.
                                     Note: (Read Recommendations Section 5.6)
				     Default is "15".

                RespawnSeconds - The time it takes before a new monster pawn is spawned from the
                                 MonsterSpawn list into the level. REMEMBER - This option and
                                 monster pawns will NOT respawn IF the SpecialLevelMode is set 
                                 to "SpecialMode_Disabled" or "MonsterKillRequirement". If you
                                 want monster pawns constantly spawning in the level than set
                                 the SpecialLevelMode to "MonsterRespawn". 
                                 Note: (Read Recommendations Section 5.3 for more information)
				 Default is "60".                   

                MaxMonstersAtOnce - How many total monsters may occupy the level at any given 
                                    time. This is a good feature to test and regulate, so try 
				    finding a good balance so that the server runs fast and 
                                    players are happy.
                                    Note: (Read Recommendations Section 5.7)
				    Default is "50".

                MaxMonstersTotal - How many total monsters that the MonsterSpawner is allowed to
                                   spawn in a level before it disables itself.
                                   Setting it to "0" will allow the spawner to have NO total
                                   limit.
                                   Note: (Read Recommendations Section 5.8)
				   Default is "100".

4.4
PawnReplacer Settings:
        bPawnReplacer - When set to "True" will enable the pawn replacing capabilities at
                        every level start.
        ReplacePawn[]+:
		bEnabled - Turns a specific replacer on or off.

                bUseSwitchReplace - When "True" will switch replacements between 
                                    ReplaceWithClass, Alt1ReplaceWithClass, Alt2ReplaceWithClass, 
                                    and Alt3ReplaceWithClass every time the OriginalName matches
                                    in the level. 
                                    Note: (Read Recommendations Section 5.2).
				    Default is False.

		bUseCreatureFactory - New added *07/2/08*. When "True" will use a 
				      creaturefactory actor in a map to change the pawn 
				      (prototype) that will spawn to the replacement.
				      Note: (Read Bugs/Issues Section 6.7).

                OriginalName - Pawn name you want replaced. Only the name is used and NOT the 
			       full class.
                               Example: OriginalName=SkaarjOfficer

                ReplaceWithClass - Primary Replacement class. Must be in Package.Name format. If 
				   you only want to destroy the original you can specify "None" 
				   as the replacement.
                                   Example: ReplaceWithClass=asgard2.packhunter
				   Destroy only Example: ReplaceWithClass=None

                Alt1ReplaceWithClass - First alternate Replacement class. Must be in Package.Name format.
				       If you only want to destroy the original you can specify 
				       "None" as the replacement.
                                       Example: Alt1ReplaceWithClass=asgard2.dragonfly
				       Destroy only Example: Alt1ReplaceWithClass=None
                                       
                Alt2ReplaceWithClass - Second alternate Replacement class. Must be in Package.Name format.
				       If you only want to destroy the original you can specify 
				       "None" as the replacement.
                                       Example: Alt2ReplaceWithClass=asgard2.hornet
				       Destroy only Example: Alt2ReplaceWithClass=None

                Alt3ReplaceWithClass - Third alternate Replacement class. Must be in Package.Name format.
				       If you only want to destroy the original you can specify 
				       "None" as the replacement.
                                       Example: Alt3ReplaceWithClass=asgard2.icetitan
				       Destroy only Example: Alt3ReplaceWithClass=None
                                      
                ReplaceProbability - Percentage probability that the pawn will even be replaced at all.
                                     Example: "ReplaceProbability=1.000000" 100% probability of replacement.
                                              "ReplaceProbability=0.500000" 50% probability of replacement.
                                              "ReplaceProbability=0.250000" 25% probability of replacement.

                PawnProbability - Only used if "bUseSwitchReplace" is false and both 
                                  ReplaceWithClass and Alt1ReplaceWithClass are defined. 
                                  Specifies the probability of Alt1ReplaceWithClass being used
                                  over ReplaceWithClass.
				  Default is "0.000000".

4.5
ItemReplacer Settings:
	bItemReplacer - When set to "True" will enable item/weapon replacing capabilities
                        at every level start.
        ReplaceItem[]+:
		bEnabled - Turns a specific replacer on or off.
               
                bLevelStartOnly - New added *10/31/04*. When "True" will disable the replacing 
                                  of the original item after the level startup finishes. Useful 
                                  if you only want to replace items in a map at startup time, 
                                  and not every time you summon the original item in-game.
				  Default is False.

                bUseSwitchReplace - When "True" will switch replacements between 
                                    ReplaceWithClass, Alt1ReplaceWithClass, Alt2ReplaceWithClass, 
                                    and Alt3ReplaceWithClass every time the OriginalName matches
                                    in the level.
				    Default is False.
                
                ActionOnEvery - New added *10/31/04*. Perform an item replace on every # number 
                                of the original item's appearance on a map. 
                                Example: ActionOnEvery=3
                                         Only every 3rd appearance of the original item is 
                                         replaced. Default entry is "1", for replacing every 
                                         single 1 of the original item on the map.
				Default is "1".
                                
 
                ActionMaxNumber - New added *10/31/04*. How many total replacements of the 
                                  original item is allowed.
                                  Example: ActionMaxNumber=10
                                           After the 10th original item spawns on the map it will 
					   no longer replace the original item.
                                           An entry of "0" disables this option.
				  Default is "0".

                OriginalName - Item name you want replaced. Only the name is used and NOT the 
			       full class.
                               Example: OriginalName=Stinger

                ReplaceWithClass - Primary Replacement class. Must be in Package.Name format.
				   If you only want to destroy the original you can specify 
				   "None" as the replacement.
                                   Example: ReplaceWithClass=Amod.Razerstinger
				   Destroy only Example: ReplaceWithClass=None

                Alt1ReplaceWithClass - First alternate Replacement class. Must be in Package.Name format.
				       If you only want to destroy the original you can specify 
				       "None" as the replacement.
                                       Example: Alt1ReplaceWithClass=Amod.BlueBelt
				       Destroy only Example: Alt1ReplaceWithClass=None
                                       
                Alt2ReplaceWithClass - Second alternate Replacement class. Must be in Package.Name format.
				       If you only want to destroy the original you can specify 
				       "None" as the replacement.
                                       Example: Alt2ReplaceWithClass=Amod.GreenBelt
				       Destroy only Example: Alt2ReplaceWithClass=None

                Alt3ReplaceWithClass - Third alternate Replacement class. Must be in Package.Name format.
				       If you only want to destroy the original you can specify 
				       "None" as the replacement.
                                       Example: Alt3ReplaceWithClass=Amod.OrangeBelt
				       Destroy only Example: Alt3ReplaceWithClass=None

4.6
PawnDWKChanger Settings:
	bPawnDWKChanger - When set to "True" will enable the changing of pawn attributes such as
			  drops after being killed, starting health, and/or other featured pawn
			  property changes.
	AttributePawn[]+:
		bEnabled - Turns a specific attribute changer on or off.

                bLevelStartOnly - New added *10/31/04*. When "True" will disable the changing 
                                  of the pawn's DropWhenKilled after the level startup finishes. 
                                  Useful if you only want to change a pawn's DropWhenKilled in a 
                                  map at startup time, and not every time you summon the original
                                  pawn. 
				  Default is False.

                bUseSwitchChange - When "True" will switch pawn drops between PDropWhenKilled, 
                                   PAlt1DropWhenKilled, PAlt2DropWhenKilled, and 
                                   PAlt3DropWhenKilled every time the OriginalName matches
                                   in the level.
                                   Note: (Read Recommendations Section 5.3).
				   Default is False.

                OriginalName - Item name you want to have items/weapons dropped after death. Only 
			       the name is used and NOT the full class.
                               Example: OriginalName=SkaarjWarrior

		NewHealth - New added *10/5/06*. The new health value that the OriginalName pawn 
			    will spawn with. This option is NOT effected by ChangeProbability.
			    Note: (Read Recommendations Section 5.9 and Bugs/Issues Section 6.6).
			    Default is no setting.

                PDropWhenKilled - Primary DropWhenKilled class. Must be in Package.Name format. 
				  If you only want to remove the original you can specify "None" 
				  so that nothing is dropped.
                                  Example: PDropWhenKilled=Unreali.Armor
				  Remove only Example: PDropWhenKilled=None

                PAlt1DropWhenKilled - First alternate Replacement class. Must be in Package.Name format.
				      If you only want to remove the original you can specify 
				      "None" so that nothing is dropped.
                                      Example: PAlt1DropWhenKilled=Unreali.ShieldBelt
				      Remove only Example: PAlt1PDropWhenKilled=None

                PAlt2DropWhenKilled - Second alternate Replacement class. Must be in Package.Name format.
				      If you only want to remove the original you can specify 
				      "None" so that nothing is dropped.
                                      Example: PAlt2DropWhenKilled=Unreali.PowerShield
				      Remove only Example: PAlt2PDropWhenKilled=None
                                      
                PAlt3DropWhenKilled - Third alternate Replacement class. Must be in Package.Name format.
				      If you only want to remove the original you can specify 
				      "None" so that nothing is dropped.
                                      Example: PAlt3DropWhenKilled=jTool3.jSpeed
				      Remove only Example: PAlt3PDropWhenKilled=None
                                  
                ChangeProbability - Percentage probability that the pawn will even drop an item 
                                    after death.
                                    Example: "ChangeProbability=1.000000" 100% probability of dropping something.
                                             "ChangeProbability=0.500000" 50% probability of dropping something.
                                             "ChangeProbability=0.250000" 25% probability of dropping something.
                                    Note: (Read Recommendations Section 5.4).
				    Default is "0.501000".

4.7
psInventory Settings:
        psInventory classes 1-16
                bUseSwitchSpawn - When "True" will switch spawn in order on the PawnToSpawn
                                  listings. Only turn this on if you have more than 1 PawnToSpawn
                                  assigned in the class.
				  Default is False.
                bLogSpawns - When "True" will print verbose pawn spawn information into the 
                             server log that results after the host pawn dies.
			     Default is False.
                psInv[]+:
                        PawnToSpawn - Pawn you want to spawn from the assigned host pawn after it
                                      dies.
				      Example: PawnToSpawn[0]=Fly
				      Exmaple2: PawnToSpawn[0]=Amod.SuperFly

                        NumToSpawn - The amount of pawns that will spawn out in one instance.
                                     Anything under 10 is reasonable, don't go over that much
                                     because the more spawned in one instance the higher failure
                                     rate anyway.
				     Default is "1".
                
                HOW TO USE: To use a psInventory class you must assign it to a pawn's 
                            DropWhenKilled by using the PawnDWKChanger AttributePawn list.
                            Example: OriginalName=Skaarjlord
                                     PDropWhenKilled=DZMapM.psInventory1
                            OR
                  
                            Combination Example: bUseSwitchChange=True
                                                 OriginalName=Skaarjlord
                                                 PDropWhenKilled=DZMapM.psInventory1
                                                 PAlt1DropWhenKilled=DZMapM.psInventory2

====================
5. [Recommendations]
====================
5.1
The bReturnToCrashMap feature is primarily useful and best used with a server restarting
program/tool. I recommend using in conjunction with a restarting batch file, or ServerDoc. Keep 
in mind that if you use ServerDoc it has a timelimit system which requires one to get a new 
updated copy every 2 months :/. Also, if this feature is enabled be sure that the server's 
"ServerTravelPause" is greater than 1 second or else the server can become stuck repeating the 
same level!
ServerDoc at: http://www.serverdoc.com

5.2
When using the ReplacePawn setup I suggest NOT using "bUseSwitchReplace" if you have only 2
classes for replacement. Instead set "PawnProbability" to around 0.500000 (50%) to keep the game
more random. If you only have one primary replacement than keep "PawnProbability" at 0.00000.
Also, to prevent any replacing problems make sure to define replace classes in order from
primary, Alt1, Alt2, Alt3.

5.3
When the SpecialLevelMode is set to 'MonsterKillRequirement' or 'SpecialMode_Disabled the 
MonsterSpawner 'RespawnSeconds' timer will be automatically disabled. In order for the 
RespawnSeconds timer to respawn new monster pawns the SpecialLevelMode must be set to 
"MonsterRespawn". The reason for this is because if the SpecialLevelMode is set to 
'MonsterKillRequirement' it will be nearly impossible for enough monsters to be killed for the 
end to be enabled. If you want to spawn extra monsters in the level and STILL have to kill 80% 
in order to end then make use of the StartupSpawnAmount.

5.4
When using the AttributePawn setup for DropWhenKilled changing I suggest setting the 
"ChangeProbability" to 0.500000 (50%) or 0.250000 (25%) and lower for dropping inventory items. 
Doing this prevents your server and level from becoming littered by dropped items and making 
the game too easy to stay alive. On the other hand, if you use the psInventory classes you should 
set "ChangeProbability" to whatever you like to keep the game hard.
Also, to prevent any changing problems make sure to define droppeditem classes in order from
primary, Alt1, Alt2, Alt3. 

5.5
When customizing the TranslatorMsg string don't make it longer than 255 characters or more than
the Translator screen in the game can fit. Too much text possibly could prevent anything from 
being displayed as well.

5.6
For 'StartupSpawnAmount' I recommend keeping the number lower than 50. The reason for this is 
because only so many monster pawns can occupy a given PathNode location at map startup. Plus 
DZMapM will automatically regulate this setting if it exceeds half of the total PathNode spawn 
locations in a map. Also, some maps are fairly small and it would be wasteful to try to spawn 
over 50 monster pawns in such small total area.

5.7
For 'MaxMonstersAtOnce' I recommend keeping the number lower than 100. Any higher and you risk 
causing your server become slower and bogged down from the increasing monster count. 

5.8
For 'MaxMonstersTotal' I recommend keeping it at 100 or higher than the 'StartupSpawnAmount'. 
A lower number gives players a chance to actually fully clean out a level if they are persistent 
enough. However, if you want players to have a constant tough battle then set it high as needed
or at "0" to have no limits.

5.9
The NewHealth option of the AttitrutePawn setup should be used instead of the AutoRunCommand 
list to change a pawn's health. The reason is so that the changed health value can be properly 
replicated to players. Using the AutoRunCommand list to change health causes the pawn's health to
be displayed by an enhanced player HUD incorrectly until injured.

====================
6. [Bugs and Issues]
====================
6.1
Decorations are not replacable with pawns ex(monkstatue with jtool3.jcannon). That is not 
supported and will cause crashes.

6.2
When replacing weapons, it will also replace certain pawn weapons as well 
ex(SkaarjTrooper, SkaarjOfficer, SkaarjGunner, SkaarjSniper etc). Their original weapons will be 
replaced to the replacement weapons. I'd consider this a feature as it acts as a gameplay balance
by allowing enemy pawns to return equal firepower.

6.3
The bReturnToCrashMap feature can cause the server to keep repeating the same level if the 
"ServerTravelPause" setting is below 1 second. To avoid this issue, always keep 
"ServerTravelPause" above 1 second.

6.4
If you spot a problem, bug, or a map that needs a new block fix contact me. Be as clear and 
specific as possible so I can have a good idea what to investigate.

6.5
Due to the difficulty in implementing a decent 'MonsterKillRequirement' option you may run
into problems from time to time. There will be cases when 80% killed cannot be met for whatever
reason (pawns stuck in odd unreachable places). That was the whole reason why the 
'MKRBackupEndMinutes' option was added as a fall-back solution. Also, 'MonsterKillRequirement'
will NOT activate on any custom map. It will only function on the normal regular coop maps (no
it won't activate for RTNP maps either sorry). There are also a couple regular coop maps in which
it will not activate due to the way the map was designed. Besides that, if you EVER want to
immediately enable the end teleporter if there is an on-going problem then use the command
"killall scriptedpawn" to clean the map.

6.6
When using NewHealth in the AttributePawn setup the pawn may not have the exact health value that
you specified. This is NOT a bug of DZMapM, but the result of the difficulty level of your 
gameplay. A difficulty of 0 will not multiply the initial health of the pawn. A difficulty of 1-3
will multiply the initial health of the pawn incrementally. If you want to counteract the health 
multiple from the difficulty level you will need to scale down the NewHealth value appropriately 
so that the pawn will have the intended value.

6.7
The bUseCreatureFactory setting in PawnReplacer might cause undesired results if the replacements
do not behave similar or are not a sub-class of the OriginalName pawn. For instance, when the 
original pawn falls to the ground or floats when spawned, but a replacement does not. Some 
creaturefactory spawnpoints may be placed in places on a map where only certain pawns move 
correctly. I suggest testing this setting in maps that have creaturefactory spawns 
(ex. IsvDeck1, TheSunspire, DasaCellars, etc.) so that you can see if your replacements work well 
using a creaturefactory or do not cause a level block.

============
7. Thanks
============
Oblivion[CW]  - * Who got me motivated into a mutator re-work after requesting my map fixes 
                  go public. Also in helping me pin down some bugs. 
                * Time consuming research on identifying the RTNP map bugs for me. Given that I 
                  don't use v226Gold, it was a big help relaying the RTNP information back to me.
	        * Ideas, suggestions, and feedback.

Sgt.Reject    - * Who assisted in pointing out a few bugs I overlooked in some maps.

WingedUnicorn - * For PathNode finding and MonsterSpawn code snippets from the beta WMutate2.

[]KAOS[]Casey - * Pointed out ItemReplacer conflicts, a MonsterSpawner 'bSpawnRandom' flaw, and
		  provided bug+fix information.

Hyper.nl      - * For ideas, suggestions, and feedback.

SmartBall     - * Code optimization suggestions and examples.

Leo(T.C.K.)   - * RTNP map bugs that were overlooked and feedback.

===============================
8. [Copyright and Permissions]
===============================
8.1
This mod is copyrighted 2003-2008 by Zombie (Of DZ). Much of the pure text sourcecode to this mod 
is removed from the U packages and will NOT be distributed to the public. If an author decompiles 
any portion of DZMapM to obtain information for development of a mod please at least give credit 
where it is due. Authors may use this mod as a base to build their own mods extending from its
classes, but all original DZMapM files MUST remain unedited.

8.2
User may not use this mod in commercial exploitation for any type of profit. User may distribute 
this mod to anyone he/she wishes, as long as user does not charge any type of fee for the
distribution of this mod. ALL files of the distribution package must be provided unedited in 
original form.


Disclaimer
The author DISCLAIMS ALL DAMAGE to ANY of your property (whether it is your hardware, software, 
storage medium, or anything else computer, or non-computer related) that may be caused by the 
use, misuse, or distribution of this mod, even if the author has been advised of the possibility
of such loss. If you lose anything (including, but not limited to, time or money) as a result of 
the use, misuse, or distributing of this mod, YOU ARE FULLY RESPONSIBLE for ALL costs, and you 
agree to hold the author COMPLETELY harmless for ALL costs in ANY shape or form. 

Trademarks 
UNREAL (c)1998 Epic Megagames, Inc. All Rights Reserved. Distributed by GT Interactive Software,
Inc. under license. UNREAL and the UNREAL logo are registered trademarks of Epic Megagames, Inc.
All other trademarks and trade names are properties of their respective owners.