Dependencies:
Actual script file:
This script was created to help automate the usage of laser tripwires.
The tripwire is basically a beam emitted from a source that moves around.
If the player touches the beam, then he'll take some damage, and possibly
trigger other events based upon what the level designer needs to happen.
To implement a tripwire, they need to specifically consist of the following:
- Source object:
A script_object or script_model that represents where the tripwire is
emitting from.
- Beam object:
A script_object, script_model, or FX that represents the beam
emitting from the source.
- Hurt object:
A trigger_hurt around the area where the beam object will be. This is
the part that the player can walk through. Set all the damage values
accordingly for how much damage you want it to do. If you would like
the tripwire to trigger some event when the player touches the trigger_hurt,
you can use the 'thread' keyvalue to have it execute a function in your
script. Keep in mind that it will execute that function every time the
player triggers the trigger_hurt, so you'll have to account for this
in the function you execute from the trigger_hurt.
- Origin object:
A script_origin that all entities in the group are bound to.
The origin must target the first node in the path (see next item). The
origin must also be in the exact same place as the first node in the
path.
- Tripwire path possibility #1:
A path of info_notnull entities linked CTRL+K style (target to targetname).
If you do not loop the path (meaning have the last node in the path
target the first node in the path), then the tripwires will automagically
teleport back to the first node after they hit the last.
- Tripwire path possibility #2:
A splinepath that is linked CTRL-K style (target to targetname).
If you do not loop the path (meaning have the last node in the path
target the first node in the path), then the tripwire will stop when
it reaches the end of the path
In order for all of the objects to be properly bound together, they all
have to be targetnamed properly. First, you need to think of a unique
targetname to give the source object. So for example, let's give it a
targetname of 'wire1'. The beam object then needs to have a targetname
that begins with the unique targetname from the source object, with an
'_beam' appended onto it. So in this example, the beam object would have
a targetname of 'wire1_beam'.
The origin object targetname needs to follow the same convention, but
with an '_origin' appended onto the end of it. So in this example, the
origin object would have a targetname of 'wire1_origin'. The hurt object
targetname needs to follow the save convention, but with a '_hurt' appended
onto the end of it. So in this example, the hurt object would have a targetname
of 'wire1_hurt'.
After giving all the objects the proper targetname, then you need to
lay out a path in the editor. If you want a simplisitc path where the
objects follow a straight line from one point to the next, setup a series
of info_notnull's and link them together using the CTRL+K method in radiant.
If you want a more complex path where the object curves and accelerates
around, then setup a series of info_splinepath's and link them together
using the CTRL+K method in radiant. After creating the path, use the CTRL+K
method to link the origin object to the first node of the path.
In script, somewhere before you actually have the tripwire start running,
you need to call the setup function on it.
The 'basename' parameter is the string value of the unique targetname
you gave the source object (without the dollar sign). So with our example
from earlier, this would be "wire1". The 'thespeed' parameter
is how fast you want the object to travel along the path.
When you're ready to get it running along it's path, there are two ways
to do this depending upon whether you wish the tripwire to follow a path
of info_notnull's, or info_splinepaths.
For info_notnull's:
Run this function in your script:
The 'basename' parameter is the string value of the unique targetname
you gave the source object (without the dollar sign). So with our example
from earlier, this would be "wire1". You will probably want
to run this function parallel to other functions (i.e. with the 'thread'
command), because this function does not return once it's executed.
For info_splinepath's:
Call the follow command directly on the origin object like this:
When you want the tripwires to stop, there are 2 ways to do this depending
upon whether you had it following a paht of info_notnull's, or info_splinepath's.
For info_notnull's:
Run this function in your script:
The 'basename' parameter is the string value of the unique targetname
you gave the source object (without the dollar sign). So with our example
from earlier, this would be "wire1".
For info_splinepath's:
Call the follow command directly on the origin object like this:
In both of these instances, you have to handle the beam and trigger_hurt
yourself. So you'll either have to remove them, or hide and make them
notsolid.
|