This tutorial is intended to teach the basic of sources and receptrons, and to show what a nifty tool they can be. As well as showing basic implementation, it will also describe how to set up a system to teleport Garrett from place to place, without using TrigRoom Scripts.
Though this tutorial is aimed at people new to Sources and Receptrons, it is assumed that the reader has basic Dromed knowledge, and knows how to set up a functional level with Convict loaded and starting points, as well as being able to navigate around Dromed reasonably well. Like all tutorials, do the one in the Dromed download first!
To my mind, sources and receptrons are wonderful, as they allow the formation of complex mock scripts. Most of the puzzles that I have encountered I have solved using Sources and Receptrons.
In case you haven't used sources and receptrons before, I shall attempt to explain how to use them. (If you do know, then skip this bit).
A source and receptron system is affectively a way to turn objects into weird 'keys'. One object is the source. It can be assigned a certain stimulus, either, HolyStim, FireStim, PokeStim, LightBright, WaterStim, etc. Another object is the receptron, it is set up to look for a certain type of stim, and then to do an interface with the game world in some way upon receiving that stim. An example this is of a Holy Water arrow hurting a zombie. The holy water arrow has a holy stimulus on it, and the zombie a receptron for that holy stim. When the zombie is hit by the holy arrow, the receptron triggers, and injures the zombie. Indeed, you can assign objects a holy stim and that object will then injure zombies like a holy arrow.
The actual situation is slightly more complicated than that, there are many different types of options. Each source has a specific strength, and each receptron looks between a range of strengths, and there are various types of 'links' that you can set.
The screenshot above shows the source editor. To get this, in dromed,
click on the properties of an object, then Add->Act/React->Sources,and
then Add. Select the stimulus you wish to assign, and then select the
propagator. This defines what triggers the link. I use either contact
or radius. I am unsure what flow does, and script will probably involve
some hardcoding so is useless for our purposes.
One important thing to remember about both the source and recpetron window is that are a few slight bugs inherit with them. The first time you open up either window, you MUST add any source or receptron, as if you don't it will CRASH. Just add any old thing, making sure that the object setting is valid, and then exit the dialogue box as usual. The source\receptron window should re-appear twice, and if after the first time the source\receptron disappears, then you will have to add another. Once this has been done, you can safely delete the false source\receptron without worry.
For receptrons, you have to specify which source it is to check and between what range of intensities it wants to trigger from, and finally what to do when it encounters that source..
There are a multitude of affects. You can set it up to teleport objects, clone objects, frob objects, add meta-properties, remove meta-properties, kill monsters, stimulate other objects, etc, and so you can see it is very versatile. One of the beauties is that you do not have to specify which specific object you want to target, as there are usually the options of either Me or Target. Setting me for teleport object means that you want to teleport the object that you are currently editting, and target means that you want to target the object where the source came from. Have an explore on what the possible effects are.
As you only have a limited amount of standard stimuli to use, you could use a system of giving each different set a separate stimulus. So Holy source A would have an intensity of 4 and Holy source B an intensity of 10, and then set the receptron so that if it receives a stim between 3 and 5 it heals Garrett, if it receives 9 or more it kills him. One other thing to watch is that on the receptron screen itself the max setting will always match the min setting. This is simply a slight bug, and the actual settings you specify when editting a receptron will work as they say.
This method is viable, but remember to choose a stimulus that will not be used in the course of the game normally. Do not choose Holy Stim if your level is going to be crawling with zombies!
An example of a use of receptrons is to teleport Garrett.
The way I am going to describe involves making your own Gamesys file as it will edit your archetype settings. The Gamesys file is where Thief stores all the object's attributes, and as there was no need to change them under the normal play of the game, they all existed in one file, dark.gam. Whenever you modify an archetype, via Object Hierachy or by accidentally editting the properties of one, you are changing the gamesys, and if you don't save your own file they won't be remembered next time you load up.
First, create two rooms not connected to each other. Texture them up,
and create the normal starting point in one (loading convict and other
such essentials). Then, add a BigFloorLever to both rooms. (Physical->Gizmos->Switches->BigFloorLever),
and name the one in the starting room Teleport1 and the other Teleport2.
Now create two new markers in each room, one StartMark, and the other
Now, we can't simply add our own source to garrett, as, you've guessed it, there isn't one (yet). We instead have to add a source to the Avatar, which is the template for Garrett. This template is what the PlayerFactory link calls when you first enter the level. It takes the template and creates a player box object within the game itself. We can't access this playerbox object as it doesn't exist until the game actually runs so we have to modify the archetype. Before we do this, we better create our own custom gamesys.
Open up the Object Hierachy, and go to the Act/React section. Click on stimulus, and then add, and type in what you want to call your stim. I use TotalityStim. We now have created our own stimulus, but it won't be saved as part of your level normally, you have to manually do it by saving a gamesys file. Under file save choose file, save gamesys, and type in an intelligent name and save it in your thief root directory, I used 'actreact'. Now you have to set your level up to use your custom gamesys. In the command window type 'set_gamesys' followed by the name you typed. If you did it correctly, the bit down the bottom saying DARK.GAM should change to ACTREACT.GAM, or the name of your gamesys file. Save your mission normally changing the filename to what it was before, as otherwise you will overwrite the gamesys file you just saved. If you want to distribute this level you will have to also send that gamesys file.
Now that we have our custom stimulus, we now need to add the source to Avatar Garret. Under object properites edit, Physical->Avatar->Garrett. For some reason, we run into a problem here, as we can't give Garrett sources only receptrons. If you try to add a source, it is not transferred to the playerbox object, but receptrons are. Scroll to where it says receptrons, and then edit them. Click on any of the three receptrons, and then press add to carry the settings across, make sure 'no max' is selected and 'no min' is not selected. Change the stimulus to the custom one, TotalityStim, and change the effect to Stimulate Object, select 'Source' for the first option and 'me'for the second, and then click Edit Effect. Type in the name of the custom stimulus under stimulus, and then type 10 under 'Then Add', then ok out.
So, now when Garret is stimulated by a TotalityStim he will stimulate that same object back with TotalityStim level 10. Now, as we have just edited an archetype we will need to RE-SAVE the gamesys.
Next, select the lever in the start room, and give it a TotalityStim
Source, (Add Act/React, sources). You will notice that you cannot specify
a propagator. Resist the urge to panic, this happens as thief has yet
to recognise your source as a proper one. Save your level, then reload
it. This should reset dromed so you can use your source properly. Go back
to the start lever, and edit the source. Change the propagator to contact,
specifcy any non-zero intensity, say 4, and then edit the shape, click
on the button with 'collision' on, de-select 'collision' and select 'FrobinWorld'.
This means it will trigger when anything frobs it.
Go into game mode, when you pull the lever you should teleport to the other room. To get around the fact that you can't assign a source to Garret when you pull the lever, the lever stimulates you, and then you stimulate the lever which teleports you to the marker. To link up the other lever, add the source as before, and a receptron with the same details as before, but this time select the other marker, TargStart.
You should now be able to jump between the two at will. See the possibilities.,
you don't even need to use markers, you could use dropable objects, and switches
to do this on the fly. For instance, in the level that comes with this bit,
go to the table and pickup the scepter and the switch. Go around a bit and
drop the scepter somewhere (usually by pressing y), and then teleport to the
other room and then press the switch in your inventory. Guess what happens?.
Your own teleport button! You should be able to figure out how this system
works by yourself, if not, decode the level.