--------------------------------------------------------------------------------
CaroneElevatorSet (Version 1.5, updated March 28, 2002)
-------------------------------------------------------------------------------
Author: Carone
Email: dxediting@carone-online.de 
Homepage: http://www.carone-online.de

Description:	Another "little" thing I created for my Hotel-map(not released yet).
	 	An improved version of the ElevatorMover with new features:
		- Includes "Door"-control: Closes "doors" before moving, opens-closes
		  "doors" when arrived at keyframe
		- Request-memory(1) (If a button is pressed while Elevator is moving
		  the Elevator finishes the movement, then proceeds to the requested
		  keyframe)
		- Realistic-Elevator-Movetime option
		- ...

Update Feb.     2001:
		
		- I made a demomap that shows the features of the CaroneElevator

Update Feb. 23, 2001:

		- Attach-bug of original mover-class fixed
		  Attached "door" possible (Also controllable by CElevator)
		- Outfitted the demomap with attached elevator-doors and added an
		  open-door-button inside the elevator(The bottom one).

Update March 28, 2002:
		- I changed the code a bit and added a few things
		Luckily the new version doesn't have that weird bug that caused
		the elevator to freeze under certain circumstances.
		Added:
		- Two sets of inner doors supported
		- Elevator is breakable
		
		I don't have time to explain the new features of the elevator in this
		readme right now so if you want to know how the new stuff works, come to
		the IRC channel #dxediting on irc.starchat.net and ask me. :)

--------------------------------------------------------------------------------

* Play Information * 

Game: 			Deus Ex
File name: 		CaroneElevatorSet.u
New Graphics:		No
New sounds: 		No
Multi language support: No

* Construction * 

Base: 			ElevatorMover, DeusExMover, SequenceTrigger
			Dispatcher
Build Time:		?



--------------------------------------------------------------------------------

* Loading information * 

Copy the file CaroneElevatorSet.u into the DeusEx-'System\' Directory
('C:\DeusEx\System\'for example)

* Changes to the deusex.ini

In the section that has all the 'EditPackages=' add the line,

EditPackages=CaroneElevatorSet

--------------------------------------------------------------------------------
* Usage Information *

				-----------------
				CaroneElevatorSet
				-----------------
	(The CESequenceDispatcher is not listed here because it's not quite done.
	It works but I'm planning on making some changes. It's located under Triggers
	just like the original Dispatcher.)


The CaroneElevatorSet includes five new classes:

- CaroneElevator 
	The new Elevator-Mover. Located under Brush/Mover/

- CEDoor         
	Slightly modified DeusExMover. These have to be used if (for instance) Elevator-Doors
	are to be controlled by the CaroneElevator using the 'bCEControlsDoors' special feature.
	The CEDoor is the exact same in functionality as the DeusExMover. It has slightly been
	modified only for Door-Control.
	Located under Brush/Mover/DeusExMover/

- CESequenceTrigger
	This SequenceTrigger HAS to be used to trigger the CaroneElevator but it can also
	trigger	the MultiMover and the ElevatorMover.
	Located under Triggers/Trigger/

- CEDoorButton
	Subclass of Button1 in DeusExDecoration. Opens Elevator-doors.

- CESequenceDispatcher
	Working but undocumented(And it's not really necessary, if you know how to use a
	dispatcher and a sequencetrigger, you know how to use this.)


The CaroneElevator basically works like the ElevatorMover. The CESequenceTrigger is used
exactly like the original SeuquenceTrigger, but for the CaroneElevator the CESequenceTrigger
HAS to be used instead.
You'll notice that there are a few more options in the CaroneElevator than the ElevatorMover.
There are two new optionmenus:

CaroneElevator:

	I left the bFollowKeyframes in there but I haven't tested it with this elevator
	(Probably works though).

	CEEvents (Array):

		This is one of the main new features. It sends out an event when the
		CaroneElevator reaches a specific Keyframe. There's an event for every Keyframe.
		This can be used to control elevator doors (or anything else).

		Note: 	You don't have to use the new CEDoor mover for these events.
			These events will trigger anything (Any Actor). See below for details
			on Elevator-controlled doors!!!


	CEMoveTimes (Array):
	
		This is another very useful option. (Those who have worked with Unrealed for
		UT probably notice the resemblance to the GradualMover) 
		These set the MoveTimes of the CaroneElevator between keyframes.
		For instance: CEMoveTimes[0] is the time the CaroneElevator moves from
		keyframe 0 to 1
		For movement between several keyframes the MoveTimes are added.
		See below for influencing the overall movetime (to add realism).

	CEStartEvent:

		The CaroneElevator sends out the event CEStartEvent everytime it starts moving.
		Note: I didn't make it send out the same event when it stops moving because such
		an event is sent out by every mover anyway(The regular Event).

	CEStartEvents (Array):

		This is something I added just to have it available if it's ever needed.
		It might make a dispatcher or another Trigger unnecessary (or whatever). Use it
		if you want to or don't.
		This is obviously different from CEStartEvent because it sends out a specific
		Event when the CaroneElevator starts moving from the matching Keyframe.
		


CElevatorAdvanced:

	It's not all that advanced but I just wanted to put it in a separate OptionMenu.

	bCEControlsDoors:

		This option gives the CaroneElevator total control over elevator doors
		(Or whatever you do with the movers) if set to 'True' and also influences the
		whole elevator. If you press a button while the doors are open the elevator
		closes them first and then starts moving(stuff like that). Let's just say it
		turns your elevator into something close to a real elevator. Just try it out.
		
	!!!!!	Note: (IMPORTANT!!!!!)
	!!!!!		To take advantage of the bCEControlsDoors option you have to make those
	!!!!!		movers which are being triggered by CaroneElevator CEDoor-movers(Included)

	bCEControlsSlave: (Added Feb.23,2001)

		You can attach a slavemover(use the CEDoor class, which is basically a DeusExMover)
		to the CaroneElevator. This option lets the CaroneElevator control that mover just
		like the other movers with bCEControlsDoors.

			
	bRealisticMovetime:

		The RealisticMovetime option, if enabled(true), decreases the overall movetime of
		the CaroneElevator to add some more realism to the movement. The more keyframes
		the elevator has to move through the more time is subtracted.
		Also see RealisticEFactor below.

	CEDoorOpenTime:

		This sets how long the elevator	doors stay open if the elevator controls them
		(bCEControlsDoors = True).
		If bCEControlsDoors is disabled, it's the time the CaroneElevator waits at the
		current triggered Keyframe before proceeding to the next Keyframe that had been
		requested while the Elevator was moving.

	CESlaveMover: (Added Feb.23,2001)
		
		If you attach a mover to the CaroneElevator(like attached doors) and you want it
		to be controlled(opened/closed) by the Elevator you have to put the tag of that
		mover here. You also have to set 'Attachtag' of the "slave-mover" to the 'Tag' of
		the CaroneElevator.


	RealisticEFactor:

		This is the weirdest of them all (and maybe the only one that deserves to be in
		CElevatorAdvanced). 
		RealisticEFactor influences the time that is subtracted from total MoveTime to
		create a more realistic Movetime(set bRealisitcMovetime='true' to enable)
		It makes the Movetime shorter for greater distances.
		Large RealisticEFactor=Shorter MoveTime
		Making it bigger than 0.5 is senseless because MoveTime will be set to 0
		(Actually 1/NumKeys should be the max unless you are going for something special)

		I'll just put down the formula how the new movetime is calculated.
		This formula is certainly not perfect. If anyone has a better one I'd appreciate
		if you told me. But it's not really that important.

		CEMoveTime=CEMoveTime*(1-RealisticEFactor*CEMovekeys);

		CEMoveTime is the sum of the movetimes of all keyframes(CEMovekeys) that the
		CaroneElevator moves through for the particular movement.
		

Additional Information:

How to create an Elevator which controls the doors with bCEControlsDoors enabled:

	Create the CaroneElevator just like you would the original ElevatorMover including
	Keyframes.
	Create doors at each floor including Keyframes(THEY HAVE TO BE CEDoor-CLASS MOVERS!!!).
	Assign each door(Or set of doors on each floor) a different tag. That's all that needs
	to be done with the doors(You may add sound of course).
	Note: The CEDoor-mover is a subclass of DeusExMover and has all of it's features.
	In CaroneElevator-Properties/CEEvents fill in the tags of the doors matching the
	Elevators position for the particular keyframe number.
	You may want to change the movetimes between keyframes if you have different distances
	for each keyframe.
	Set bCEControlsDoors to true in "CaroneElevator-Properties/CElevatorAdvanced/".
	CEDoorOpenTime sets the time the doors stay open.
	Create as many CESequenceTriggers(!!!) as there are Keyframes just like you would for
	the original ElevatorMover. They function exactly like the original SequenceTriggers,
	except they can ALSO trigger the CaroneElevator.
	Finally, place some buttons inside your Elevator (and outside on every floor of course)
	to trigger the CESequenceTriggers.(Maybe I'll create a Button1SequenceTrigger very soon)
	If I haven't forgotten anything you should have a nice working Elevator now.
	
	Note: If you have more than 2 Keyframes you should consider using bRealisticMovetime.


If you don't use the bCEControlsDoors feature:

	If the Elevator(while moving) is triggered for a Keyframe other than the one it's
	on its way to, it saves the request and finishes the current movement, then sends
	the CEEvents-Event for the particular Keyframe and waits for CEDoorOpenTime
	seconds	until it preceeds to the requested keyframe.


One more thing:

	I've thought about making all the features optional so the mapper has total control
	over the CaroneElevator's behaviour but I decided not to do that for now. One reason
	is that it might make the whole thing a little too complicated. If however something
	like that is wanted by many users I'd be glad to think about it again. Tell me what
	you think! 
	I'll give you an example of what kind of things I'm talking about:
	One feature of the CaroneElevator is that (if bCEControlsDoors is enabled!!) it tries
	to close the doors until it succeeds in doing so before proceeding to the triggered
	Keyframe. The obvious problem is that the Elevator could be jammed by moving something
	Invincible between the doors. This makes the Elevator very realistic but some people
	may want to disable that feature.
	It's not difficult at all to make such things optional but I wanted to wait for some
	feedback from the users first.

Finally:

	If you have trouble using the CaroneElevator, the commented script might help you or
 		

	If you have questions or suggestions send me an email (dxediting@carone-online.de)
			or stop by #dxediting on irc.starchat.net
	If you encounter any bugs, please tell me!!!

		And now,

			HAVE FUN with the CaroneElevator!!!!

					Carone









--------------------------------------------------------------------------------
If you want to use this in your map/mod/level please give me credit and tell
me about it. If you add to or modify the script, definitely inform me of it
(Maybe even before you change it because I might have already done what you
plan on doing).

Thanks,

	Carone



* Special Thanks *

Steve Tack for helping with the attach-fix.

DXEditing for the Tutorials on coding( www.dxediting.com )

(And Ionstorm and Eidos of course)


--------------------------------------------------------------------------------
BTW, stop by #dxediting on irc.starchat.net for help with the CaroneElevatorSet or general
SDK-Help and/or just for fun. :)

This modification was not made and is not supported by Ion Storm and Eidos Interactive.