--------------------------------------------------------------------------------
:: [BunnyTrack Mapping Enhancements v2]
--------------------------------------------------------------------------------

BTME is a modification for Unreal Tournament to enhance BunnyTrack-maps.
It adds support for weapons and provides mappers with the possibility to
configure various actors. Most features are listed below.

--------------------------------------------------------------------------------
:: Features
--------------------------------------------------------------------------------

* The BTME_Mutator is compatible with any Arena-mutator (e.g. the instagib-mutator).
* The BTME_Mutator provides the possibility to load and configure other mutators.
* The BTME_Mutator provides the possibility to unload unwanted mutators (e.g. ZeroPing variants and BTInsta).
* The BTME_Mutator provides support for AntiBoost and AntiKill.
* The BTME_Mutator provides the possibility to adjust the default-weapon.
* The BTME_Mutator provides the possibility to configure Actors (e.g. Weapons, Ammo).
* The BTME_Mutator provides the possibility to configure Projectiles.
* The BTME_Mutator removes weapons from the Default Inventory (e.g. the Translocator and the Enforcer).
* The BTME_InventoryConfiguration provides the possibility to adjust a players Inventory.
* The BTME_InventoryRequirements provides the possibility to trigger events depending on a players Inventory.
* The BTME_ImpactHammer replaces the standard ImpactHammer.
* The jumpgain and damage for the BTME_ImpactHammer are adjustable.
* The BTME_UT_FlakCannon replaces the standard UT_FlakCannon.
* The BTME_UT_Eightball replaces the standard UT_Eightball.
* The BTME_SniperRifle replaces the standard SniperRifle.
* BTM_ZoneInfo provides support for MultiSkyBoxes and certain event-properties.
* BTME_Objective provides the possibility to configure pickup objectives.
* BTME_ObjectiveTrigger provides the possibility to configure triggered objectives.
* BTME_PlayerKicker provides the possibility to kick players depending on their Inventory.
* BTME_VisibleTeleporter provides the possibility to teleport players depending on their Inventory.
* BTME_Message provides the possibility to configure enhanced Messages.
* BTME_ProjectileSpawner provides the possibility to configure and spawn projectiles.
* BTME_ActorSpawner provides the possibility to configure and spawn actors.
* BTME_ActorConfiguration provides the possibility to configure actors.
* BTME_HUDConfiguration provides the possibility to configure an enhanced HUD in order to show objectives.
* BTME_Mover has an extra State.
* BTME_MoverPositionTrigger provides the possibility to trigger events depending on a movers position.
* BTME_Dispatcher provides the possibility to trigger or untrigger events.
* BTME_ReverseTrigger provides the possibility to reverse trigger and untrigger events.

--------------------------------------------------------------------------------
:: Instructions for mappers
--------------------------------------------------------------------------------

Basic Configuration:
1. Open UnrealEd and make a map.
2. Open the BTME-package from the Actor-Class-browser.
3. Browse to the BTME_Mutator.
4. Place one instance of the BTME_Mutator in your map.
   * Reset the order to 'first' if required.
5. Adjust the BTME_Mutator properties.
   * It's not possible to configure default ProjectileClasses.
   * The HUDMutator is necessary for HUDConfigurations and Messages.
     Clear the HUDMutatorClass-property if you don't need to spawn a HUDMutator.
6. Place weapons and ammo in the map:
   * Place the BTME_ImpactHammer instead of the ImpactHammer.
   * Place the BTME_UT_FlakCannon instead of the UT_FlakCannon.
   * Place the BTME_UT_Eightball instead of the UT_Eightball.
   * Place the BTME_SniperRifle instead of the SniperRifle.
   * Adjust properties (e.g. RespawnTime, bWeaponStay, AmmoAmount).
7. Zone the map properly:
   * Place the BTME_ZoneInfo instead of the ZoneInfo.
8. Build and save the map.

HUD Configuration:
1. Place a BTME_HUDConfiguration in the map.
2. Adjust the tag-property.
3. Configure the BTME_HUDConfiguration
3. Trigger it (e.g. from a BTME_ZoneInfo-event-property).

Messages:
1. Place a BTME_MessageTrigger in the map.
2. Adjust the tag-property.
3. Configure the BTME_MessageTrigger.
4. Trigger it.

Objectives:
* There're 2 types of objectives:
  1. Pickup-objectives (BTME_Objective) are given to a player when they pick it up.
  2. Triggered-objectives (BTME_TriggerObjective) are given to a player when they're triggered using a event.
* Every objective has a GroupTag and a Score.
* Objectives with the same GroupTag belong to one group.
* When a player is given an objective the score will be adjusted.
* The score can be used for special triggers (BTME_InventoryRequirements, BTME_PlayerKicker and BTME_VisibleTeleporter).

Simple Pawn Objectives:
1. Place a Pawn in the map.
2. Place a BTME_ObjectiveTrigger in the map.
3. Configure the BTME_ObjectiveTrigger.
4. Adjust the event-property from the Pawn to match the tag-property of the BTME_ObjectiveTrigger.

Respawning Pawn Objectives:
1. Place BTME_SpawnPoints in the map.
2. Adjust the tag-property for all the BTME_Spawnpoints.
3. Place a BTME_PawnFactory in the map.
4. Configure the BTME_PawnFactory.
   * Set the capacty to less then 0 if you want to have an infinte capacity.
5. Adjust the tag-property (of the BTME_PawnFactory) to match the appropriate tag-properties (of the BTME_SpawnPoints).
6. Place a BTME-dispatcher in the map (a regular dispatcher won't work).
7. Place a BTME_Objective in teh map with the bLock-property set to false and TriggerType-property set to GIVE_OBJECTIVE.
8. Adjust the itemevent-property of the BTME_PawnFactory to match the tag-property of the BTME-dispatcher.
9. Adjust the first Event-property of the BTME-dispatcher to match the tag-property of the BTME_PawnFactory.
10. Adjust the second Event-property of the BTME-dispatcher to match the tag-property of the BTME_Objective.
* Using the BTME_ActorSpawner and BTME_ActorConfiguration it becomes possible to create more complex methods of spawning
  and configuring Pawns.

Adjusting a players Inventory through a BTME_ZoneInfo:
1. Place a BTME_InventoryConfiguration in the map.
2. Configure the BTME_InventoryConfiguration.
3. Adjust the tag-property for the BTME_InventoryConfiguration.
4. Place a BTME_ZoneInfo in the map.
5. Adjust the PlayerSpawnEvent-property (of the BTME_ZoneInfo) to match the tag-property (of the BTME_InventoryConfiguration).
6. Adjust the ZonePlayerEvent-property (of the BTME_ZoneInfo) to match the tag-property (of the BTME_InventoryConfiguration).

MultiSkyBox:
1. Create multiple skyzones with a SkyZoneInfo in each skybox.
2. Adjust the tag-property for each SkyZoneInfo, they should all be unique.
3. Place a BTME_ZoneInfo in the map where you want the skybox to appear.
4. Adjust the SelectedSky-property (of the BTME_ZoneInfo) to match the appropriate tag-property (of the SkyZoneInfo).

Testing:
1. Some actors can be configured for testing.
   (BTME_Dispatcher, BTME_TestDispatcher, BTME_VisibleTeleporter and BTME_PlayerKicker)
2. Create a file named BTME.ini in the UT-Systems-directory
3. Add the text [BTME_v2.BTME_Mutator]
4. Add the text bTesting=true

--------------------------------------------------------------------------------
:: Instructions for players
--------------------------------------------------------------------------------

Objectives-HUD:
* The Objectives-HUD provides information about the objectives.
* The Objectives-HUD can be turned on or off using the command "mutate btme_objectives".
* It's recommended to assign this command to a key.

AntiBoost:
* AntiBoost dissallows player to be boosted by other players.
* AntiBoost can be turned on or off using the command "mutate btme_antiboost".

AntiKill:
* AntiKill dissallows players to be killed by other player.
* AntiKill can be turned on or off using the command "mutate btme_antiboost".

Assigning Commands:
* There're 2 ways to assign commands to a key:
  1. Adjust the User.ini (UnrealTournament/System/User.ini). It contains all key-settings.
  2. Enter the following command in the console: "set input key mutator command"

--------------------------------------------------------------------------------
:: Instructions for server-admins
--------------------------------------------------------------------------------

Configuration:
* The BTME-package was created for mappers. The actors are loaded from the map.
* Server-admins are not supposed to load the BTME_Mutator or any other BTME-actors.

Unwanted Mutators:
* Some mutators can interfere with gameplay (e.g. ZeroPing and BTInsta).
* BTME has the possibility to unload unwanted mutators.
* This can be done by either the mapper or the server-admin.
1. Create a file named BTME.ini in the UT-Systems-directory
2. Add the text [BTME_v2.BTME_Mutator]
3. Add the text RemoveServerMutators[index]=MutatorName where index is a number between 0 and 31

--------------------------------------------------------------------------------
:: Actors
--------------------------------------------------------------------------------

Important:
* BTME_Instructions (Actor->BTME_Instructions)
* BTME_Mutator (Actor->Info>Mutator->BTME_Mutator)
* BTME_ZoneInfo (Actor->Info->ZoneInfo->BTME_ZoneInfo)

Miscellaneous:
* BTME_ActorConfiguration (Actor->Triggers->BTME_ActorConfiguration)
* BTME_ActorSpawner (Actor->Effects->BTME_ActorSpawner)
* BTME_Dispatcher (Actor->Triggers->BTME_Dispatcher)
* BTME_ExplodingWall (Actor->Effects->ExplodingWall->BTME_ExplodingWall)
* BTME_InventoryConfiguration (Actor->Triggers->BTME_InventoryConfiguration)
* BTME_InventoryRequirements (Actor->Triggers->BTME_InventoryRequirements)
* BTME_Mover (Actor->Brush->Mover->BTME_Mover)
* BTME_MoverPositionTrigger (Actor->Triggers->BTME_MoverPositionTrigger)
* BTME_Objective (Actor->Inventory->BTME_Objective)
* BTME_ObjectiveTrigger (Actor->Triggers->BTME_ObjectiveTrigger)
* BTME_PawnFactory (Actor->Keypoint->ThingFactory->CreatureFactory->BTME_PawnFactory)
* BTME_PlayerKicker (Actor->Triggers->Kicker->BTME_PlayerKicker)
* BTME_PlayerReplicationInfo (Actor->Info->ReplicationInfo->BTME_PlayerReplicationInfo)
* BTME_ProjectileSpawner (Actor->Effects->BTME_ProjectileSpawner)
* BTME_Rabbit (Actor->Pawn->FlockPawn->NaliRabbit->BTME_Rabbit)
* BTME_ReverseTrigger (Actor->Triggers->BTME_ReverseTrigger)
* BTME_ShootTrigger (Actor->Triggers->Trigger->BTME_ShootTrigger)
* BTME_SpawnPoint (Actor->NavigationPoint->Spawnpoint->BTME_SpawnPoint)
* BTME_TestDispatcher (Actor->Triggers->BTME_TestDispatcher)
* BTME_TeamDispatcher (Actor->Triggers->BTME_TeamDispatcher)

HUD en Messages:
* BTME_HUDConfiguration (Actor->Triggers->BTME_HUDConfiguration)
* BTME_HUDConfigurationExtra (Actor->Triggers->BTME_HUDConfiguration->BTME_HUDConfigurationExtra)
* BTME_HUDConfigurationDispatcher (Actor->Triggers->BTME_HUDConfiguration->BTME_HUDConfiguratoinDispatcher)
* BTME_HUDConfigurationObjectives (Actor->Triggers->BTME_HUDConfiguration->BTME_HUDConfigurationObjectives)
* BTME_HUDMutator (Actor->Info->Mutator->BTME_HUDMutator)
* BTME_LocalMessage (Actor->Info->LocalMessage->LocalMessagePlus->CriticalEventPlus->BTME_LocalMessage)
* BTME_Message (Actor->Triggers->BTME_Message)
* BTME_SpawnNotify (Actor->SpawnNotify->BTME_SpawnNotify)

Weapons:
* BTME_ImpactHammer (Actor->Inventory->Weapon->TournamentWeapon->ImpactHammer->BTME_ImpactHammer)
* BTME_UT_FlakCannon (Actor->Inventory->Weapon->TournamentWeapon->UT_FlakCannon->BTME_UT_FlakCannon)
* BTME_UT_Eightball (Actor->Inventory->Weapon->TournamentWeapon->UT_Eightball->BTME_UT_Eightball)
* BTME_SniperRifle (Actor->Inventory->Weapon->TournamentWeapon->SniperRifle->BTME_SniperRifle)

Projectiles:
* BTME_VisibleTeleporter (Actor->NavigationPoint->Teleporter->VisibleTeleporter->BTME_Teleporter)
* BTME_BioGlob (Actor->Projectile->UT_BioGel->BioGlob->BTME_BioGlob)
* BTME_BioSplash (Actor->Projectile->UT_BioGel->BioSplash->BTME_BioSplash)
* BTME_flakslug (Actor->Projectile->flakslug->BTME_flakslug)
* BTME_PBolt (Actor->Projectile->PBolt->BTME_PBolt)
* BTME_Razor2 (Actor->Projectile->Razor2->BTME_Razor2)
* BTME_Razor2Alt (Actor->Projectile->Razor2Alt->BTME_Razor2Alt)
* BTME_RocketMk2 (Actor->Projectile->RocketMk2->BTME_RocketMk2)
* BTME_ShockProj (Actor->Projectile->ShockProj->BTME_ShockProj)
* BTME_StarterBolt (Actor->Projectile->PBolt->StarterBolt->BTME_StarterBolt)
* BTME_UT_BioGel (Actor->Projectile->UT_BioGel->BTME_UT_BioGel)
* BTME_UT_Grenade (Actor->Projectile->UT_Grenade->BTME_UT_Grenade)
* BTME_UTChunk (Actor->Projectile->UTChunk->BTME_UTChunk)
* BTME_UTChunk1 (Actor->Projectile->UTChunk1->BTME_UTChunk1)
* BTME_UTChunk2 (Actor->Projectile->UTChunk2->BTME_UTChunk2)
* BTME_UTChunk3 (Actor->Projectile->UTChunk3->BTME_UTChunk3)
* BTME_UTChunk4 (Actor->Projectile->UTChunk4->BTME_UTChunk4)

Smoke Actors:
* BTME_Effects (Actor->Effects->BTME_Effects)

--------------------------------------------------------------------------------
:: Changes
--------------------------------------------------------------------------------

Changes in BTME_v2:
* Added TriggerTypes to BTME_ObjectiveTrigger.
* Added PlayerStartEvent to BTME_ZoneInfo.
* Added more options to BTME_Messages.
* HUD Configuration in seperate actor.
* Added many new Actors
* Fixed many small issues with other Actors

Changes in BTME_v1:
* BTME is the successor to NWBT.
* Added an objective-system with an enhanced HUD.
* Added enhanced HUD Messages.
* Added AntiBoost and AntiKill options.
* Added support for oldschool Inventory-items (still buggy).
* Added retriggerable ExplodingWall.
* Added ProjectileSpawner.
* Added InventoryRequirementsTrigger.
* Removed AdjustInventory from BTME_ZoneInfo, mappers should use PlayerSpawnEvent and ZonePlayerEvent instead.

Changes in NWBT_v6:
* Added LifeSpan-property to ProjectilesConfiguration in NWBT_Mutator.
* Fixed a compatibility-problem with BTCheckPoints and i4Games BunnyTrack 0a.

Changes in NWBT_v5:
* ShockBoosts now works with AntiBoost and BT++ when antiboost is enabled.
* Unload unwanted mutators (e.g. ZeroPing variants and BTInsta).
* Added more options to ProjectileConfiguration.
* It's not possible anymore to adjust default ProjectileClasses.
* The bCanThrow-property is set to false for the default weapons (except for the Redeemer).

Changes in NWBT_v4:
* The Translocator and the Enforcer are removed from the default inventory, no need to enable/disable them anymore.

Changes in NWBT_v3:
* Adjusting Inventory properly when a player spawns in a BTME_Zone. 

Changes in NWBT_v2:
* Added NWBT_ZoneInfo and NWBT_Trigger.
* Added NWBT_ImpactHammer, NWBT_UT_FlakCannon and NWBT_UT_Eightball.
* Added option to configure actors.
* Added option to load and configure other mutators.
* Resetting properties when a game has ended.

Changes in NWBT_v1:
* Added option to configure Weapons and Projectiles.

BlearghMutator:
* Added support for Normal Weapons in BT.
* Compatible with any Arena-mutator.
* Specifically created for one map.

--------------------------------------------------------------------------------
:: Testing
--------------------------------------------------------------------------------

BTME was tested with the following modifications:
* BT1 and BT2
* BT++ 0.97, BT++ 0.98 and BT++ 0.993
* i4Games BunnyTrack 0a
* BTctfV5
* InstaGib
* ZeroPing
* BTInsta
* SmartCTF 4D
* BTCheckPoints
* NexGen 1.12
* UTPureRC7G

--------------------------------------------------------------------------------
:: Issues
--------------------------------------------------------------------------------

* If the BTME_Mutator is placed after placing weapons and Ammo it doesn't work properly.
  Mappers should reset the order of the BTME_Mutator to 'first'.
* I've added support for oldschool Inventory-items, but the oldschool weapons don't work correctly in network-games.
  They appear to be jammed and won't shoot projectiles. Mappers are advised not to include them in their maps.
* It might take some time before the BTME_Mutator is completely loaded.
* Sometimes Messages with Textures don't appear in time. This could be a trigger-issue.
* BT++ has an option to auto-load the instagib-mutator (bAutoLoadInsta). Server-admins and players are advised to disable this option.
* BTctfV5 has an option for team-killing-protection (bNoTKEnabled). Server-admins and players are advised to disable this option.
* When NexGen and UTPure are both running on a server, but not configured properly the server could crash and reload.
  This will break the HUDMutator-chain. Messages, HUDConfigurations and Effects won't work correctly.
  Server-admins are adviced to configure both mods properly or remove one.

--------------------------------------------------------------------------------
:: Additional Information
--------------------------------------------------------------------------------

Developer / Maintainer:
  Jerome Bos a.k.a. Bloeb

Contact:
  jeromebos@gmail.com

Thanks to the BT-community for their ideas, support, bugreports and testing.

--------------------------------------------------------------------------------
:: License
--------------------------------------------------------------------------------

 [BunnyTrack Mapping Enhancements v2]

  Copyright (c) 2010 - 2012 Jerome Bos

  Permission is hereby granted, free of charge, to any person
  obtaining a copy of this software and associated documentation
  files (the "Software"), to deal in the Software without
  restriction, including without limitation the rights to use,
  copy, modify, merge, publish, distribute, sublicense, and/or sell
  copies of the Software, and to permit persons to whom the
  Software is furnished to do so, subject to the following
  conditions:

  1. The above copyright notice and this permission notice shall be
     included in all copies or substantial portions of the Software.
  2. Except as contained in this notice, the names of the authors and
     copyright holders, shall not be used in advertising or otherwise
     to promote the sale, use or other dealings in this Software
     without prior written authorization from the copyright holders.

  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
  OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
  WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
  OTHER DEALINGS IN THE SOFTWARE.
