================================================================
Title             : Training Facility 8472
Version           : 1.00
Release Date      : 7-11-2001
Filename          : TF8472.zip
Author            : Aahz
Email Address     : aahz@nwlink.com
Web Page          : communities.msn.com/aahzland

I put this document together to describe some of the technical challenges I experienced in this map.  Folks are welcome to use any of these concepts, or where I mention glitches, feedback on how to overcome them is welcome.  I'll describe each concept and the method I used to implement them.

==============
Implementation
==============

GameTypeNotify.U  
----------------
I put this simple script file together to help me better shape the level for specific game types.  As soon as the first player spawns in the level, the appropriate event is fired.

Assault 	= fires 'ASGame' event
CTF 		= fires 'CaptureGame' event
Domination	= fires 'DOMGame' event
TeamDM 		= fires 'TGPGame' event
DeathMatch 	= fires 'DMGame' event

To use this, add it to your level (under Trigger, TimedTrigger).  Use as you would any other event to trigger movers, lights, dispatchers or anything affected by an event.  In this map there's a dispatcher with a Tag matching each of the Events listed above.  When the game starts, the appropriate set of events is also fired.


GameTypes
---------
PlayerStarts - there are several Playerstarts in the level, some are team game starts and others are standard UT playerstarts.  The TeamGame starts are in the appropriate respawn rooms.  By default the only Playerstarts set to Enabled are the TeamGame ones (Assault and CTF).  GameTypeNotify is used to Enable the other playerstarts for non-teamgame games.

Assault - the game type trophies (assault targets) are attached to AttachMovers.  By default the trophies are visible in the map, but as soon as the game starts the GameTypeNotify event is fired and any game that's not Assault hides them.  If you notice, the final trophy is in the core of the map.  It's only available when all 4 of the other trophies are collected...  in any order.  To do this I used a BabyCow.  Really.  If you open the map in the editor you'll see the poor thing.  Here's what happens.  The cow is suspended at the top of a small cage (invisible to the players).  There are 4 false floors beneath the cow, one with a tag matching the first 4 FortStandards.  As any of the initial 4 FortStandards is collected, one of the 4 false floors is removed and the cow slips down a few pixels.  When all 4 of the floors are removed, the cow falls into a TriggerDeath object, killing it.  When it dies, it fires an event which opens the central core arena.  It's not pretty, but it works. :)

CTF - Two changes here... first there are teleporters in each flag base enabled to allow players to navigate back to the respawn rooms.  This is done with the help of GameTypeNotify.  As soon as the game starts, the CTF event is fired, which activates the movers (doors) blocking the respawn rooms.  This same event unblocks the BlockedPath to them so the bots know they're there.  The 2nd change is minor...  inside the respawn rooms you'll notice little Red and Blue team icons on the picture of the Red and Blue bases, respectively.  This is just a sheet mover activated when the CTF game starts.

Domination - The Skaarj is released into the Teleport arena (see below for details).

Deathmatch - The Skaarj is released into the Teleport arena (see below for details).

The Skaarj - Similar to the BabyCow in the Assault level, the Skaarj is hidden in a small cage outside the normal playing area.  It's standing on a false floor (mover).  At the top of the cage is a teleporter into the Teleport Arena.  When the appropriate event is fired, the Skaarj is shot upwards into the teleporter and thus into the Teleport arena.  The Skaarj is visible in all game types except Assault.  Since the teleport arena is an assault target it wouldn't be nice to have him there while players are trying to guard.

The MiniArena - Inside the LowGrav arena there's a mini deathmatch arena.  This is a replica of the teleport arena accessible through the blue teleporter rings spinnng around on top of it.  Inside the mini arena there's a mini player (the Gold Team), a mini Skaarj, a mini Nali and mini weapons and pickups.  Depending on the timing, you may see some interesting battles inside here.  Incidentally I added pathnodes to this arena, but since everything is so small, the engine can't handle the reduced collision height calculations (I think).  You may see the mini player in there running into a wall... but it's ok. He'll figure it out eventually.  I created the level using brushes and adjusted the various display properties on the object inside the small arena.  If you look inside the central room of the mini area you may see a glowing blue tint.  If this is present then there is someone in the teleport arena.  If it's off, the only one in the teleport arena is the Skaarj.

Illuminated Signs - Around the central core you'll see "Area In Use" signs hanging outside the arena.  When a player is inside the arena, the sign will light up.  In the Core room you'll see a similar effect on the floor.  Since the level is so large, this enables players to find each other more quickly. Also, it draws folks into the hub so they can see the signs and increasing the chance of them finding each other.  This is done using TriggerLights, SpecialLit textures and the PlayerEvent on the ZoneInfo actor.  When the player is in a Zone, the ZoneInfo's PlayerEvent is fired.  The TriggerLights are set to TriggerControl so they're active as long as there's a player in the Zone.  Since the texture (Area In Use) is set to SpecialLit, the light affects it, thus lighting it.

The Trap - inside one of the arenas you'll see an odd looking structure with 4 TV displays.  In the center of this contraption is a button.  This is a trap.  The TVs are portals to 4 other areas of the level.  Note: you can fire weapons into these other rooms (see the Redeemer behind you?).  In CTF games, you can use this these with the translocator as well.  The trap is simply a triggered PressureZone.  As soon as the button is pressed, the player inside the contraption is surrounded by a glowing forcefield, protecting him/her from the pressure zone.  Anyone else in the room is summarily dismissed.  To do this I created a Zone inside the larger pressure zone...  the zone is large enough to protect the player inside it.  The blue forcefield you see pop up is just a set of translucent sheets set up as a Mover.  When the button is pressed, the PressureZone is triggered and the Forcefield is raised.  The bots don't quite get it and may step outside the protective zone after the trap is sprung, but they do trip it if there's someone else in the room with them.


There are a few other bells and whistles in there, but those are the biggies.


Problems
========
Limitations - I ran into a limit for navigation network.  If you notice, there are MANY pathnodes in there.  There are several weapons, heath items, pickup and teleporters.  These all contribute to the navigation network.  When I thought I had the level finished I got frustrated with the bots, they would play fine for a while but then get locked into a loop, moving back and forth between pathnodes.  When I reviewed the Log file, I saw the dreaded error.  The bots exceeded their search capacity on the path network (1000, I think).  I spent quite a bit of time reducing this count to be below 1000 without affecting the gameplay.  I have to say though, I didn't run into many other issues... the engine handled this quite well.

Bots - There aren't many problems with the bots in this one, but there are a few.  The bots don't get along with a few of the lifts very well when they're told to Freelance.  There are two problems.. first, they think they can all fit on a single lift (team games like Assault), so they try, hit their heads and step off.  They pile back on and repeat.  They eventually make it through though.  Also, while the bots are told to Freelance, they try to stick together as a team.  A leader is identified and the leader stays put until he/she can see at least 2 followers.  This can get frustrating.  If the leader and followers are moving long and the leader turns the corner, he/she may lose site of the followers.  The leader stops until he/she again has 2 followers.  Combine this with the lift and things go haywire.  The leader bot stands at the bottom of the lift at the LiftExit.  The follower bots come up and stand close.  The leader bot jumps on the lift and goes up.  The leader realizes that he/she no longer has followers (they're down below), so he/she stays on the lift.  The lift goes down and the others try to pile on.  The leader sees the followers again and stays on the lift.  The lift goes up, and again the leader notices that he/she no longer has followers.  The cycle repeats.  Timing helps this a bit, but if anyone knows the proper way to fix FreeLancing bots, I'd like to hear from you.  There are a few other minor bot issues, but they shouldn't affect game play too much.

The core - The core seems sluggish to me.  I tried to pick it apart, and reduced as much technology in this room as possible, but it's still a little sluggish.  I think it may have something to do with the triggerlights there.

Architecture - the level is large and some of the areas have funky brushes.  A full rebuild takes about half an hour so you can imagine what it was like trying to track down BSP holes.  There were a few areas vulnerable to this, but I think I fixed them all (finally).  If you see issues, please let me know.

That Player Bot - there's a player bot in the mini arena.  This sole bot makes up the Gold team.  My intent here was to have a mini deathmatch session happening with various UT players (Soldiers, Commandos, etc.).  The problem is that these bots were listed as the Gold team in team games and as you know there are only two teams, Red and Blue.  The Gold team generated errors as it tried to update the scoreboard and the like.  I originally had 4 UT mini-bots in this arena, but the errors they generated were just too troubling.  I resorted to just a single Unreal 1 bot...  he generates a few errors in the log file but generally doesn't muck things up.

Irresponsible Crates - you will see many large crates in the low-grav room.  Some of these are set up as movers, rotating and just having fun in the low-grav environment.  Some of the architecture problems I listed above really messed with these "mover" crates.  As they rotated they would fade in and out as they passed through node and cut areas.  I experimented with the brush order and finally got them all to a non-flicker state.


