====== Creating a CamVator Sequence ====== A ``CamVator`` sequence can be used as an alternative to using an .avi file at the beginning or the end of a mission. File sizes can be kept down, and it's much easier to let the engine handle all of the 'animation' (e.g. AIs moving around). The principle of the ``CamVator`` sequence is that the player is attached to an invisible, silent elevator, which can then move around the level. Various events can be triggered along the way. This tutorial will tell you how to create a ``CamVator``, how to attach the ``Player`` to it, and how to get it moving. ===== Assumptions ===== * You're reasonably familiar with conversations * You can create new objects in the hierarchy * You can use custom scripts ===== Creating the CamVator ===== Most of the elevator objects make a noise when activated. It is easy enough to silence them, but it's easier just to create a ``Raft`` (``Physical -> TerrainLike -> Lift -> Raft``). To turn it into a suitable CamVator, you need to add the property ``Renderer -> Render Type``: $$Not Rendered$$. This will make it invisible. Next, you should resize the object. Edit the ``Physics -> Model -> Dimensions`` property so that the X Y and Z values of size are all equal to $$1$$. This only resizes the physics model. To resize the bounding box of the object, change the D W and H values (in the bottom-left of the __Dromed__ window) to $$1$$. Resizing it may not always be necessary, but it helps to minimise the risk of it interfering with other things. If an elevator is not properly linked, __Dromed__ will not allow you to compute the pathfinding database. Therefore you should do the following, just to be on the safe side: Create a ``TerrPt`` where the ``CamVator`` is to start, and create a [[dromed:link:tpathinit|TPathInit]] link to from the ``CamVator`` to this ``TerrPt``. You should then create another ``TerrPt`` and create a [[dromed:link:tpathinit|TPath]] link from the first ``TerrPt`` to the second one. It doesn't matter whether or not the second one is in the right place, you can sort that out later. ===== Attaching the Player ===== To attach one object to another, a [[dromed:link:physattach|PhysAttach]] link is needed, but when the player is involved things aren't quite that simple. The player is represented by an object called ``[[:glossary:ps#player|Player]]``, which is created automatically when the game starts. In other words, you cannot link to/from it directly. You can however use a conversation to add the link. Adding the ``PhysAttach`` link should not be the //first// step of the conversation however, because the player would actually be dragged towards the ``CamVator`` at high speed. Instead, the first step of the conversation should be to frob a button that is linked to a ``TeleportTrap``, which should be very close to the ``CamVator``. Alternatively, you can add the **TrapTeleporter** script to the starting ``TerrPt`` and link it to your Starting Point, then trigger something that will send a //TurnOn// message to the first ``TerrPt``, such as a button. The second step of the conversation should then be to add a PhyAttach link **from** the Player **to** the ``CamVator``. ===== Making the CamVator Move ===== If you used a button to teleport the player, you can use this same button to make the ``CamVator`` move. If you link it ([[dromed:link:controldevice|ControlDevice]]) to the ``CamVator``, it will then move along the route defined by the [[dromed:link:tpath|TPath]] links, and will only stop if it receives a ``TurnOff`` message (e.g. from a button linked to an ``Inverter``). If instead the button is linked to ``TerrPt``, the ``CamVator`` will head directly to it (in a straight line), assuming the ``TerrPt`` can be reached via the [[dromed:link:tpath|Tpath]] links to/from the initial ``TerrPt``. ===== Starting the Conversation ===== Clearly the conversation needs to be activated as soon as the game starts. One way to do this is to create a ``Lever`` and edit the ``Tweq -> JointState`` property so that $$On$$ is selected for ``AnimS``, then you can link the lever to the conversation ([[:dromed/link/controldevice|ControlDevice]]). ===== Creating a Fade-In Effect ===== To make the starting of the ``CamVator`` appear smooth, it is the convention to have the player start in a room with a plain black texture, and then have the black gradually fade, making the level gradually become visible. The most reliable method of creating the fade-in effect is to use Telliamed's ``TrapRenderFlash`` script. To do this, find the ``Renderflash`` archetype (``SFX -> FlashFX``) and add a child archetype called ``BlackFlash``. Add to this the property ``SFX > FlashBombInfo`` and set the R, G and B values to $$0$$. Then add to some object the script ``TrapRenderFlash``, and create a RenderFlash link to ``BlackFlash``. The button that is used to teleport the player and to start the ``CamVator`` can also be linked ([[dromed:link:controldevice|ControlDevice]]) to the object with the ``TrapRenderFlash`` script. ===== Notes ===== It is //probably// possible to use custom scripts to do everything mentioned above, but it has not yet been done. For example, one of Nameless Voice's scripts, ``NVLinkBuilder`` could be used. Anyone who wishes to try using custom scripts should be mindful that for some things, timing is **essential**. For example, the player must be teleported **before** the ``PhysAttach`` link is created, and the flash must start **before** the teleport is triggered. You can force traps to activate sequentially by linking multiple ``RelayTrap``s in series. The first relay triggers the render flash and the second relay, which triggers the teleport and the third relay, etc. Whether to use relay traps or a conversation is a choice you make for comfort and convenience.