In this tutorial, I will describe how to set up a simple Ghosting objective.
In case you don't know, 'Ghosting' is a style of playing Thief in which
you must complete all of your objectives without anyone knowing you were
there in the first place.
Okay, now on to the tutorial!
Open the object heirarchy and create a new metaproperty named M-GhostableAI.
Set up the same mini-conversation in AI->Responses->Body Response and >AI->Responses->Sense Combat Response
You also need to give M-GhostableAI the AI->Utility->Watch: Watch link defaults property, and set it up as follows:
If that huge dialogue box doesn't fit on your screen, you should be able
to get away with just typing in the first letter of what should go in
each box and then hit the tab key, until you can see what you're doing.
Next, add some Act/React Receptrons:
I'm sure you get the idea. If you add any new stims that you think should
fail the ghosting objective, add a receptrons
for those, too.
(The problem with this is that you need to move the original Damage Object receptron so that it only happens after the Frob Object one is triggered. To do that, select it and then hit the 'Add' button. Leave everything as it is and press 'OK'. There should now be two Damage Object receptrons, one on top of and one below Frob Object. If there isn't one below, repeat the procedure until there is. Now, delete all but the bottommost Damage Object receptron.)
Next, put M-GhostableAI on any archetypes
that should make ghosting fail. In most cases, that means adding the metaproperty
to Creature (-8).
Now, you also need to add AIWatchObj from every Ghostable AI in the mission to itself. A daunting proccess if you want to do it manually, but there is another way:
Create two markers (-36) and an Up/Down Switch (-464). Name one marker 'Conv' and the other 'StartConv'. The first marker is going to become an AI, so give it an AI>AI Core>AI of Default and give it the M-NeverEfficient metaproperty (Found under AI Behaviours->AI_B_Gen).
The second marker needs to act as a conversation, so add S>Scripts and set Script 0 to 'TrapConverse', then add AI->Conversations->Conversation and enter the following data into the '00' section:
Create ControlDevice link from the Up/Down Switch to StartConv, and an AIConversationActor link, with a data of 1, from StartConv to Conv.
Finally, add Tweq->JointsState to the
Up/Down Switch and set both AnimC
and Joint1AnimC to On.
The only thing left to do now is to decide what should happen the player
fails his/her ghosting attempt.
Next, create a GoldPlaque (-2926) and add the TrapStim script. Add Editor->Design Note, and set it up as follows:
Give the GoldPlaque the following Act/React Receptrons:
Give 'GhostFail' the 'TrapSetQVar' and a Trap->Quest Var property of:
=2:goal_state_0This will cause the objective you created to be marked as 'cancelled' when the RelayTrap is triggered. (TrapStim only seems to work half the time...)
Create two ControlDevice links; one from 'GhostFail' to the GoldPlaque, and the other both to and from the GoldPlaque.
If you don't want to use GayleSaver's custom scripts for some reason, you could create a more roundabout method to trigger the receptrons, with a little effort.
You still need to add the Book->Text property to the GoldPlaque - just a short message informing the player that his ghosting has failed should do the trick.
You might also want to create a VOTrap (-4862), create a ControlDevice link to it from the RelayTrap, and then give it a SoundDescription link to an appropriate Garrett schema, such as Gar9909, Gar9908, or Gar1103.
You should now have a fully function ghosting objective, which fails when the player alerts someone, and also lets the player know that it has failed.
== New Ghosting Tutorial - gamesys ONLY ==
Copy the Ghosting.sch file to your schemas folder and type reload_schemas into DromEd's console.
Add a new Act/React Stim, 'GhostingStim'. Save the gamesys, the mission, and then reload.
Create two new metaproperties, M-GhostableAI and M-GhostingFailed. We'll get back to them later.
Create a new archetype under VOTrap (-4862)
and name it 'GhostingFailedVO'.
Create a new Genie named 'G-EnableGhostMode', and set up its AI->Responses->Alert Response as follows:
Now, create a new Genie archetype under EnableGhostMode,
and name it 'GhostingFailedText'.
Add AI->Responses->Alert Response, and change the inherited values to those given below:
Now, add an Act/React Source:
And some Act/React Receptrons:
Now, let's move back to the M-GhostingFailed
metaproperty we created earlier.
And two Act/React Receptrons:
And now, the most important part, the M-GhostableAI metaproperty. It also needs quite a lot of Act/React Receptrons:
The M-HuntedFlee metarproperty (found under AI_Behaviors->AI_B_Gen) also needs a receptron (This is for Brother Cavador in 'Kidnap' only):
Finally, add the AI->Utility->Watch: Watch link defaults property, and set it up as follows:
Now, there is only one more thing to do. Find the Garrett (-2099) archetype and add one Source...
...and one receptron:
Of course, the whole system doesn't do anything unless you also add the
M-GhostableAI metaproperty to some archetypes,
namely Undead (-1319), Beast
(-1327), CombatBot (-5388), WorkerBot
(-5383), SpiderBot (-3240), Human
(-14), and possibly Spider (-2103).
Do not add it to Robot (-1783) or Cameras
(-3363), as security cameras and turrets can sometimes be destroyed
with one hit, and therefore the Stimulate
Object receptron could cause problems.
Anyway, EyeballPlant (-5698) inherits from