        ------------------------------------------------------
        |  COMPLETE EXPLANATION OF THE DARK FORCES INF FILE  |
        |    by Jereth Kok (kokj4m@stmichaels.vic.edu.au)    |
        ------------------------------------------------------


Acknowledgements:
-----------------

LucasArts Entertainment Company --      creators of Dark Forces
Yves Borckmans                  --      creator of DFUSE, some additional
                                        information
Ben & Pat McBride               --      makers of the DFUSE tutorials 
Anyone else who I haven't mentioned and believe that they have made 
a significant contribution to the world of Dark Forces editing!


G'day, fellow Dark Forces editors!
 
This file (INFFILE.TXT) gives an explanation of most of the functions
of the .INF file, which is an essential part of a true Dark Forces level. The
SECBASE level which is included contains demonstrations of elevators and  
triggers, which are some of the .INF file's functions. Remeber to put the
SECBASE.* files in your Dark directory! Take a look at SECBASE.INF, to see
the examples, then play the level to see how they work.

I assume that anyone reading this file or using the demo already has managed
to obtain Yves Borckman's DFUSE program. You will need LEVMAP, a .LEV and .O
file editor which is a part of DFUSE. However, although LEVMAP reads the .INF
file, it does not edit it. This must be done with a standard text file editor,
such as MS-DOS editor. This is extremely complicated, and any slight error
will stuff up a level. Believe me, it took me ages to figure out the basic
workings of the .INF file! I had to look through all of the examples in 
LucasArt's original 14 levels! I don't really want every single person to go 
through that, so I made this file and the demo.

Ben and Pat McBride gave you a simple example of using the INF file, showing
how to make a moving floor. This file is for die-hard level makers, showing
the usage of just about everything that can be in an INF file (anything I've
come across in my wanderings through the INF files of the original levels).
I've tried to make it as un-technical as possible!


CONTENTS
--------

1. INF file description
2. Variables for elevators and triggers
3. Elevators
4. Triggers
5. Teleporter chutes
6. Messages
7. Other stuff


1. INF (INFormation) file description
-------------------------------------

To those of you who have edited DOOM maps before, the INF file is like DOOM's
sector tags and line actions, only much more powerful. Variables are used
so that item actions can be specified customly, rather than just using set 
actions such as "platform lowers, then raises to nearest floor". 

To those of you who haven't done DOOM editing, here is the best I can do to
describe the INF file: The LEV file, as you should know, contains information
on the architecture of a level, ie. Sectors, Lines and Vertices. However, the
INF file contains dymanimcs of a level, i.e. Sectors and Lines that move
around and interact with the player. For example, the LEV file would contain a
stationary room. The INF file could make a lift that goes up and down and a 
switch that operates it. 

Here follows a description of each elevator (moving sector), trigger and
message, so get a coke and bag of chips and get comfortable...


2. VARIABLES FOR ELEVATORS AND TRIGGERS
---------------------------------------

Firstly, the possible variables for elevators and triggers must be
understood. Note that all of these variables may not be used in every
elevator or trigger. That is, a particular elevator or trigger may only
contain a few of these variables.


The variables:
---------------------------------------  
| stop           (elevators)          |
| master         (elevators)          |
| event_mask     (elevators/triggers) |
| event          (triggers)           |
| entity_mask    (triggers, I think!) |
| speed          (elevators)          |
| center         (elevators)          |
| angle          (elevators)          |
| key            (elevators)          |
| client         (triggers)           |
| slave          (elevators)          |
---------------------------------------

Here are descriptions and explanations on the usage of each of the variables.
Anything in square brackets - [] - need to be replaced with appropriate
values.


stop
----
description:

A stop is a value that an elevator can arrive at. This value varies depending
on the type of elevator (eg. the value for elevator move_floor is the 
altitude of the floor). After the stop value, there needs to be another value.
This other value can either be the time the elevator remains at the stop in
seconds, "hold", "terminate" or "complete". Hold means that the elevator will
remain at the stop until told to move to another stop. Terminate means that
the elevator will terminate at the stop (it will stay there permanently). 
Complete means that the mission will be complete when the elevator arrives
at the stop.

usage:
        stop: [value] [time]/hold/terminate/complete


master
------
description:

A master value can either be on or off. If master is on, the elevator will 
function. If master is off, the elevator won't function, even if the
event_mask (more on this later!) is carried out or a message (more on this
later too) is sent, telling it to move.

usage:
        master: on/off


event_mask
----------
description:

Event_mask is a value which determines under what conditions an elevator or
trigger will function. For an elevator, the conditions will move it 
to its next stop. For a trigger, the conditions determine how it can be
triggered. These are the possible values:

---------------------------------------------------------------------
| 0       Nothing                                                   |
| 1       Cross line from front side                                |
| 2       Cross line from back side                                 |
| 4       Enter sector                                              |
| 8       Leave sector                                              |
| 16      Nudge line from front side / Nudge sector from inside     |
| 32      Nudge line from back side /  Nudge sector from outside    |
| 64      Explosion                                                 |     
| 256     Shoot at line (see entity_mask)                           |
| 512     Touch floor of sector                                     |
|                                                                   |
| Custom values (see event:)    Set off by a trigger with an event: |              |     
---------------------------------------------------------------------

If you want a sector or line to have more than one of these values, then add
the desired values up. For example, an elevator that can be operated by 
entering the sector or nudging in from inside has event_mask: 20 (16 + 4).

usage:
        event_mask: [value]


event
-----
description:

Event creates a custom event value. A trigger can be given a custom event
value, and any elevator with this event value as its event_mask value will
operate when the trigger is triggered. The custom event value has to be a
power of 2 that is 65536 or greater (65536, 131072, 262144, 524288, 1048576
and so on).

This is needed with multi-class elevators where each class is controlled by 
a separate switch. For example in the Research Facility (level 4), the sector
called "Corecat" (spins around the Phrik metal) is two classes of elevator - 
elevator move_fc and elevator morph_spin2. Two switches control these classes
individually. If the "event" variable was not used, both switches would move
both classes of elevator to its next stop at the same time. Utilising the
"event" variable, it is made possible to have one switch control spinning and one
control the moving floor/ceiling.


usage:
        event: [value]


entity_mask
-----------
Entity_mask defines the entity that triggers certain triggers. The default
is the player.

Here are the values that are used in the original 14 levels.

-----------------------------------------------------------------------------
| -1            unknown, see IMPCITY.INF. Used with event_mask: 308 Seems to|
|               work the same as *                                          | 
| 1             an enemy (eg. an enemy crossing a line trigger)             |
| 8             one of your weapons (eg. a "shoot" switch)                  |
| *             usually used with event_mask: 272 - you can shoot at the    |
|               trigger and nudge it                                        |
| 2147483656    unknown, see the DTENTION.INF, RAMSHED.INF and ARC.INF.     |
|                       Usually used with event_mask: 304. Seems to work the|
|                       same way as *                                       |
|----------------------------------------------------------------------------

**Could anyone who has figured out the unknown values please mail me at the
address at the top of this file and tell me them??? **

Entity_mask is always used in triggers except in the Research Facility (level
4), where it is applied to an elevator (the big one that spins around the
Phrik metal and moves up and down). I don't know its function here. Removing 
the entity_mask from its sequence does not affect the elevator's workings!
Any explanations???

usage:

        entity_mask: [value]



speed
-----
description:

Speed is a value that determines the speed of an elevator.
Speed: 0 is instantaneous.

usage:
        speed: [value]


center
------
description:

Center defines the X and Z coordinates of the center of revolution of a
spinning sector.

usage:
        center: [x coord] [z coord]


angle
-----
description:

Angle defines the angle in degrees of a scrolling wall, floor or ceiling
texture. Angle also defines the angle in degrees of a horizontally moving
sector. For scrolling walls, angle: 0 is down. For scrolling walls, scrolling
ceilings and moving sectors, angle: 0 is north.

usage:
        angle: 0-360


key
---
description:

The value of key defines which key is needed to operate an elevator. Key is
optional, of course. Just leave it out if you don't want your elevator to
need a key to operate.

usage:
        key: red/blue/yellow


client
------
description:

Client is used with triggers only. It defines which sector the trigger
affects.

usage:
        client: [client sector name]


slave
-----
description:

Slave is optional and is used with elevators only. Slave determines which
sector is a slave of the elevator it is applied to. The slave copies whatever
the elevator does.

usage:
        slave: [slave sector name]





3. ELEVATORS
------------

Here are the elevators:
----------------------------------
| elevator change_light          |
| elevator change_wall_light     |
| elevator morph_move1           |
| elevator morph_move2           |
| elevator morph_spin1           |
| elevator morph_spin2           |
| elevator elevator rotate_wall  |
| elevator door                  |
| elevator door_mid              |
| elevator basic                 |
| elevator inv                   |
| elevator move_ceiling          |
| elevator move_floor            |
| elevator move_fc               |
| elevator scroll_ceiling        |
| elevator scroll_floor          |
| elevator scroll_wall           |
----------------------------------

All elevators will comprise of this:


item: sector    name: [sector name]
        seq

        seqend


Classes of elevators and relevant variable information are placed between the
"seq" and "seqend". You can put more than one class between the "seq" and
"seqend" to create a sector that is two or more types of elevator.

Here is a description of each elevator class and how to use it. The variables
that are needed for each class are shown. Any variables in {} are optional.

Note that anything in square brackets - [] - must be replaced with
appropriate values.

There can always be an unlimited amount of stops (except for elevator door 
and elevator door_mid which don't use stops). The stop values for
each type of elevator are explained.

IMPORTANT: Each time you add an elevator to the INF file, you must update
           the "items #" at the start of the INF file.


elevator change_light 
---------------------
description: changing light level (ambience) in sector.
             
             Stop values are sector ambience.

usage: 
                        class: elevator change_light
                        event_mask: 
                        {master: }
                        stop: 
                        speed:       
                        {slave: }


elevator change_wall_light 
--------------------------
description: changing ambience on wall. Note that you apply this elevator 
             to a whole sector, but make specific walls change light by
             giving those walls flag 1 bit 8 (allow change wall light) in
             Levmap. Walls without this flag will not change ambience even
             if their sector is an elevator change_wall_light. 

             Stops values are wall ambience.

usage:
                        class: elevator change_wall_light
                        event_mask: 
                        {master: }
                        stop:
                        speed: 
                        {slave: }


elevator morph_move1 
--------------------
description: A sector that moves horizontally. The player doesn't move with
             the sector. IMPORTANT - each of the moving sector's walls, as
             well as any mirrors of those walls need to be given the flag 1
             bit 32 (wall morph with sector). Otherwise, the sector would not
             move visually.

             Stop values are distances on the X-Z (horizontal) plane.

usage:
                        class: elevator morph_move1
                        event_mask: 
                        stop: 
                        {master: }
                        speed: 
                        angle: 
                        {key: }
                        {slave: }
                

elevator morph_move2 
--------------------
description: A sector that moves horizontally. The player moves with 
             the sector. IMPORTANT - each of the moving sector's walls, as
             well as any mirrors of those walls need to be given the flag 1
             bit 32 (wall morph with sector). Otherwise, the sector would not
             move visually.

             Stop values are distances on the X-Z (horizontal) plane.


usage: 
                        class: elevator morph_move2
                        event_mask: 
                        stop: 
                        {master: }
                        speed: 
                        angle: 
                        {key: }
                        {slave: }


elevator morph_spin1 
--------------------
description: A sector that spins around a point. The player doesn't spin with
             the sector. IMPORTANT - each of the spinning sector's walls, as
             well as any mirrors of those walls need to be given the flag 1
             bit 32 (wall morph with sector). Otherwise, the sector would not
             spin visually.

             Stop values are angles in degrees.


usage:
                        class: elevator morph_spin1
                        event_mask: 
                        {stop: }
                        {master: }
                        speed: 
                        center: 
                        {key: }
                        {slave: }

elevator morph_spin2 
--------------------
description: A sector that spins around a point. The player spins with 
             the sector. IMPORTANT - each of the spinning sector's walls, as
             well as any mirrors of those walls need to be given the flag 1
             bit 32 (wall morph with sector). Otherwise, the sector would not
             spin visually.

             Stop values are angles in degrees.


usage: 
                        class: elevator morph_spin2
                        event_mask: 
                        {stop: }
                        {master: }
                        speed: 
                        center: 
                        {key: }
                        {slave: }


elevator rotate_wall
--------------------
description: The walls of a sector with this elevator will rotate around
             the specified center.

             Stop values are angles in degrees.


usage: 
                        class: elevator rotate_wall
                        event_mask: 
                        {stop: }
                        {master: }
                        speed: 
                        center: 
                        {key: }
                        {slave: }


elevator door
-------------
description: Normal door. Note, that it is easier to just use flag 1 bit 2
             on a sector for a normal door. Elevator door is only
             really needed for a key door.

             Make sure that a sector with this elevator has the
             ceiling altitude of the door when it is OPEN!!!


usage:
                        class: elevator door
                        {master: }
                        {key: }


elevator door_mid
-----------------
description: A 2 part door (opens upwards and downwards). Information for
             the top and bottom parts are specified individually.
             
             "addon: 0" is the top part
             "addon: 1" is the bottom part

             The floor altitude of a sector with this elevator has to be the
             BOTTOM of the door. The ceiling altitude has to be the TOP of 
             the door. The door will split halfway between.

usage:
                        class: elevator door_mid
                        {master: }
                        addon: 0
                        speed:
                        {key: }
                        addon: 1
                        speed: 
                        {key: }



elevator basic
--------------
description: floor that moves up and down.

             Stop values are the altitude of the floor.

usage:
                        class: elevator basic
                        event_mask: 
                        stop: 
                        {master: }
                        speed: 
                        {key: }
                        {slave: }


elevator inv 
------------
description: ceiling that moves up and down. Often used for making doors.

             Stop values are the altitude of the ceiling.

usage: 
                        class: elevator inv
                        event_mask: 
                        stop: 
                        {master: }
                        speed: 
                        {key: }
                        {slave: }
                        

elevator move_ceiling 
---------------------
description: Ceiling that moves up and down. In fact, pretty much the same as
             elevator inv.

             Stop values are the altitude of the ceiling.


usage: 
                        class: elevator move_ceiling
                        event_mask: 
                        stop: 
                        {master: }
                        speed: 
                        {key: }
                        {slave: }


elevator move_floor 
-------------------
description: floor that moves up and down. In fact, the same as elevator
             basic.

             Stop values are the altitude of the floor.


usage: 
                        class: elevator move_floor
                        event_mask: 
                        stop: 
                        {master: }
                        speed: 
                        {key: }
                        {slave: }


elevator move_fc 
----------------
description: Floor and ceiling that move up and down together.

             Stop values are the altitude of the floor.

usage: 
                        class: elevator move_fc
                        event_mask: 
                        stop: 
                        {master: }
                        speed: 
                        {key: }
                        {slave: }


elevator scroll_ceiling 
-----------------------
description: ceiling texture scrolls

             Stop values are distances on the X-Z (horizontal) plane.

usage: 
                        class: elevator scroll_ceiling
                        event_mask: 
                        {stop: }
                        {master: }
                        speed: 
                        angle: 
                        {slave: }


elevator scroll_floor
---------------------
description: floor texture scrolls. Player moves with it. Useful for making
             conveyor belts, flowing water and flowing sewage. Remember, use
             a second altitude with water and sewage for better effect!

             Stop values are distances on the X-Z (horizontal) plane.


usage: 
                        class: elevator scroll_floor
                        event_mask: 
                        {stop: }
                        {master: }
                        speed: 
                        angle: 
                        {slave: }


elevator scroll_wall
--------------------
description: Wall texture scrolls. Useful for making waterfalls. Note that
             you apply this elevator to a whole sector, but make specific
             walls scroll by giving those walls flag 1 bit 64, 128, 256 or
             512 in Levmap depending on whether you want the top, middle,
             bottom or sign texture to scroll. Walls without any of these
             flags will not scroll even if their sector is 
             elevator scroll_wall.

             Stop values are distances on the Y (vertical) axis.

usage: 
                        class: elevator scroll_wall
                        event_mask: 
                        {stop: }
                        {master: }
                        speed: 
                        angle: 
                        {slave: }


Just a couple more things - for several of the vertically
moving elevators, it may be necessary to anchor wall textures to prevent
unnatural texture movement. This can be done by setting the flag 1 value for
a wall to 16 (wall tx anchored) or 4096 (sign anchored) in Levmap.

An annoying thing is that it is not possible to anchor floor and ceiling 
textures to a morphing sector. This is what I suggest - for a moving sector,
add a "class: elevator scroll_floor" and/or "class: elevator scroll_ceiling"
with exactly the same stops, angle and speed as the
"class: elevator morph_move1", and the floor and/or ceiling textures will
move together with the sector. For spinning sectors, all you can do is add
a single coloured texture so you can't see the texture movement. The best
texture for this (used by LucasArs too!) is ZPGRYFIL.BM.



4. TRIGGERS
-----------

Here are the triggers:
-----------------------
| trigger standard    |
| trigger             |
| trigger switch1     |
| trigger single      |
| trigger toggle      |
-----------------------

If you thought elevators were complicated, don't worry! Triggers are extremely
simple because all trigger classes are almost identical! ALMOST!

They are entered into the INF file as items in the same way as elevators with
variables and information placed between the "seq" and "seqend", except that
triggers can be applied to both sectors and walls:


item: sector    name: [sector name]
        seq

        seqend

                
                ** OR **


item: line      name: [sector name] num: [wall number]
        seq

        seqend


Here is a description of each trigger class and how to use it. The variables
that are required by each class are shown. Any variables in {} are optional.

Note that anything in square brackets - [] - must be replaced with
appropriate values. 

All triggers can have unlimited clients.

Note: If a specific message is not sent from a trigger to its client, then
      the client will just move to its next stop.

IMPORTANT: Each time you add a trigger to the INF file, you must update
           the "items #" at the start of the INF file.



trigger standard
----------------
description: This can be applied to a sector (entering, leaving or nudging it)
             or a line (crossing it or nudging it). 

usage:
        
                        class: trigger standard
                        event_mask: 
                        {entity_mask: }
                        client: 



trigger
-------
description: exactly the same as trigger standard as far as I know.

usage:

                        class: trigger      
                        event_mask: 
                        {entity_mask: }
                        client: 




trigger switch1
---------------
description: this is used specifically for switch triggers. Remember, the wall
             containing the switch must have a sign which is a switch texture
             or the trigger will NOT operate.

                        
usage:                        
                        class: trigger switch1 
                        event_mask: 
                        {entity_mask: }
                        client: 


trigger single
--------------
description: this is a trigger that can only be used once. Can only be
             applied to lines - sectors will be able to be triggered more  
             than once! 

usage:

                        class: trigger single     
                        client: 
                        event_mask: 
                        {entity_mask: }





trigger toggle
--------------
description: this toggles an elevator between stops. Therefore, the client
             sector MUST have more than one stop. 

usage: 

                        class: trigger toggle
                        event_mask: 
                        {entity_mask: }
                        client: 



5. TELEPORTER CHUTES
--------------------
Teleporter chutes are a special third element of the INF file. They are not
elevators or triggers. Their function is to teleport the player to another 
sector.


NOTE:

Dark Forces teleporter chutes do not have the same intention as the
teleporters in DOOM. In DOOM, teleporters are deliberate and are just another
fun aspect of a level. In Dark Forces, they are not intended to even be
noticed. They are intended to make it look like the player has just 
fallen through a chute into a layer below, for example, in the Robotics
Facility where you fall into the gas room, and Jabba's Ship where you
fall into the area where you rescue Jan. These cases could only be 
accomplished through teleporter chutes because the other method (using
a same sector in both layers) would mean making double adjoin/mirror/walks
for the walls of that sector - something not possible.

Consequently, you can only teleport straight down, so the target sector
MUST be directly below the teleporter chute and must totally enclose the
teleporter chute or it may be possible to teleport outside of a sector. 

It is also possible to teleport up, as in the demo, but this is never
really necessary.


IMPORTANT: Each time you add a teleporter chute  to the INF file, you must
           update the "items #" at the start of the INF file.

usage:
        item: sector    name: [sector name]
                seq
                        class: teleporter chute
                        target: [target sector's name]
                seqend



6. MESSAGES
-----------

Here are the messages:
------------------
| complete       |
| done           |
| goto_stop      |
| next_stop      |
| prev_stop      |
| master_on      |
| master_off     |
| m_trigger      |
| clear_bits     |
| set_bits       |
| wakeup         |
------------------

A description of each message and its usage follows. Anything in [] has to be
replaced appropriately.

Note that for messages that are sent from triggers to elevators, the client of
the trigger must first be specified (obviously). 

When messages are sent from an elevator, they are sent when it ARRIVES at a
stop. Therefore, messages can't be sent from stop 0 unless the elevator is
sent there after going to another stop.

Messages are placed in the sequence of a trigger or an elevator (between the 
seq and seqend).


complete
--------
Description: tells an elevator that a trigger goal has been completed. The
             final num refers to the "TRIG: [num]" in the GOL file. The
             corresponding goal in your Personal Data Assistant (F1) will
             then be shown to be complete. For convenience, send this message
             to your completion elevator (the one with the "complete" stop).

             This message also sends its recipent elevator to its
             next stop. 


usage (trigger to elevator):
                                
        message: complete [num]


usage (elevator to elevator):
                                
        message: [stop] [elevator name] complete [value]


done
----
description: Sent from an elevator to a switch trigger. Tells the switch that
             it is ready to be used again (UNLESS it is a trigger single).

usage:
        
        message: [stop] [sector name]([trigger line number]) done


goto_stop
---------
description: sent from a trigger to an elevator or an elevator to an elevator. 
             Sends the elevator to a specified stop.

usage (from trigger to elevator):
        
        message:  goto_stop [stop number]

usage (from elevator to elevator):

        message: [stop] [elevator name] goto_stop [stop number]


next_stop
---------
description: sent from a trigger to an elevator or an elevator to an elevator. 
             Sends the elevator to its next stop.

usage (trigger to elevator):
        
        message: next_stop

usage (elevator to elevator):

        message: [stop] [elevator name] next_stop


prev_stop
---------
description: sent from a trigger to an elevator or an elevator to an elevator.
             Sends the elevator to its previous stop.

usage (trigger to elevator): 
        
        message: prev_stop

usage (elevator to elevator):

        message: [stop] [elevator name] prev_stop


master_on
---------
description: sent from a trigger to an elevator or an elevator to an elevator.
             Turns the elevator's master on.

usage (trigger to elevator):
        
        message: master_on

usage (elevator to elevator):

        message: [stop] [elevator name] master_on


master_off
---------
description: sent from a trigger to an elevator or an elevator to an elevator.
             Turns the elevator's master off.

usage (trigger to elevator):

        message: master_off

usage (elevator to elevator):

        message: [stop] [elevator name] master_off


m_trigger
---------
description: when sent to a trigger, this message triggers it no matter what
             its event_mask is. Useful for triggering dummy trigger sectors 
             that display messages from TEXT.MSG since "text" (see below)
             can only be sent when a trigger is triggered.

usage: (trigger to sector)

        message: m_trigger

usage: (elevator to sector)

        message: [stop] [sector name] m_trigger

usage: (elevator to line)

        message: [stop] [sector name]([line number]) m_trigger


clear_bits
----------
description: sent from a trigger to an sector or an elevator to a sector or
             wall. Clears specified flag bits. To clear more than one bits
             from a sector a wall, add the bit values up that you want
             cleared.


usage (trigger to sector):  
        
        message: clear_bits [flag number] [bit number]

usage (elevator to sector):

        message: [stop] [sector name] clear_bits [flag number] [bit number]

usage (elevator to line):

       message: [stop] [sector name]([line number]) clear_bits [flag number] [bit number]


set_bits
----------
description: sent from a trigger to an sector or an elevator to a sector or
             wall. Sets specified flag bits. To set more than one flag to a
             sector or wall, add up the bit values that you want to be set.


usage (trigger to sector):  
        
        message: set_bits [flag number] [bit number]

usage (elevator to sector):

        message: [stop] [sector name] set_bits [flag number] [bit number]

usage (elevator to line):

       message: [stop] [sector name]([line number]) set_bits [flag number] [bit number]


wakeup
------
description: sent from a trigger to a sector or an elevator to a sector. Wakes
             up objects in that sector. Useful for waking up generators and 
             3DO object animations (VUE file).


usage (trigger to sector):

        message: wakeup

usage (elevator to sector):

        message: [stop] [sector name] wakeup



7. OTHER STUFF
--------------
Here are some other things that I have come across in INF files.


Page
----
"Page" plays a sound effect when an elevator arrives at a stop. "Page" is
placed in an elevator's sequence (between seq and seqend).

Usage:

        page: [stop] [VOC file]


Text
----
"Text" displays a text message from TEXT.MSG on the top of the screen. Add
your own messages on the end of TEXT.MSG if you want! Messages are sent by
triggers when they are triggered. "Text" is placed in a trigger's sequence.

usage:

        text: [text number - see text.msg]


Sound
-----
"Sound" replaces the default sound effects of an elevator or switch trigger
with another VOC file or silence. Most elevators have 3 sound effects -
leaving a stop, moving between stops, and arriving at a stop. Switches only
have one sound - when the switch is pressed. "Sound" is placed in an
elevator's or switch trigger's sequence.


usage (replacing a sound effect, elevators):

        sound: [sound value] [VOC file]

usage (replacing a sound effect, triggers):

        sound: [VOC file]


usage (replacing a sound effect with silence, elevators):

        sound: [sound value] 0

usage (replacing a sound effect with silence, triggers):

        sound: 0


Here are some good replacement sound effects:

For value 1 (elevators, leaving a stop)
DOOR1-1.VOC
DOOR2-1.VOC
DOOR3-1.VOC
ELEV1-1.VOC
ELEV2-1.VOC
ELEV3-1.VOC

For value 2 (elevators, moving between stops)
DOOR1-2.VOC
DOOR2-2.VOC
DOOR3-2.VOC
ELEV1-2.VOC
ELEV2-2.VOC
ELEV3-2.VOC
ELECTRIC.VOC -- broken door, like in Talay

For value 3 (elevators, arriving at a stop)
DOOR1-3.VOC
DOOR2-3.VOC
DOOR3-3.VOC
ELEV1-3.VOC
ELEV2-3.VOC
ELEV3-3.VOC

For switches
SWITCH1.VOC
SWITCH2.VOC
SWITCH3.VOC


adjoin
------
"Adjoin" adjoins a line to another line when an elevator arrives at a stop.
This is required if you need a line to remove its adjoin with one line and 
adjoin with another line midway through a level. "Adjoin" is placed in an
elevator's sequence.

For example, in level 6 (detention center), you may notice that the 2 main
lifts have a door on each layer adjoined to it on the same line. Since a line
cannot be adjoined to more than one other line at once, the following occurs:
midway through moving up between 2 layers, the elevator move_floor arrives at
a stop which it remains at for 0 seconds. At this stop, a line of the lift
sector is adjoined to a line of the door sector on the layer above, at the
same time removing its adjoin with a line of the door sector on the layer
below. The lift's doors all appear to be directly on top of each other.

usage:

adjoin: [stop] [sector name] [line number] [sector name] [line number]





Well, that's all folks! If you have anything to add to this file, if you want
to correct something I have wrong, if you want to explain one of the unknown
things to me or if you just want to comment or ask a question, mail me at

kokj4m@stmichaels.vic.edu.au

Any additions, corrections or explanations will be put in an updated version
of this file. Include your name so that I can credit you.

Please distribute this file like crazy! Upload it on bulletin boards,
Internet pages, FTP sites, BBS sites etc!


Until next time, Happy Dark Forces level making!

