Conversations Tutorial

By Deep Qantas
(aka Teemu Salmela)

  1. An incentive for conversations

  2. First you should make and airbrush, a room around it and maybe add a torch too. Load the ConVict script and compute pathfinding and build room database. Just do all the stuff you usually do in the beginning.

    After making this environment, you can add two guards, but make sure, that Garrett won't be visible to them. For example, you can put the torch so, that it's too dark for them to see you.

    Edit the first ones properties and name him Tom. And of course the other one is Jerry. Change Tom's properties and add Speech->Voice. The text should be 'guards', but we have to change it to 'guard3'. Jerry's voice must be changed too, but to 'guard2'. It's important that the voices are right. Otherwise the conversation won't work. Tom is 'guard3' and Jerry 'guard2'.

    Now we have two actors, but we need the actual conversation. Create a marker and name it 'BearConv' or 'MyOwnConv' or anything you like. I shall call it 'BearConv'. It doesn't matter where the marker is, but it would be wise to keep it somewhere near the actors.

    Then we need to change the markers properties. Add S->Scripts and put 'TrapConverse' in the first line. Add AI->Conversations->SaveConversation and check the box. Add AI->Conversations->Conversation and just click 'OK' twice. Don't get confused by the big dialog box. It's somewhat large, but you can manage with 1024x768 or even 800x600 screen. The 'OK' is in the lower left corner. And pushing enter usually means 'OK'

    Now we have actors and the conversation. We just need to connect them, so link 'BearConv' to 'Tom' with 'AIConversationActor' and change the data to '1'. Link it to 'Jerry' as well but change the data to '2'. The numbers mean the number of the actor.

    The conversation is working, but there is one flaw. The actors don't say anything yet, so we'll now edit the lines. Open up the properties of the 'BearConv' and edit that AI->Conversations->Conversation. Now you should see a window with 11 steps. The steps are executed in order and the next step doesn't start before the last one is finished. There are also these 'Abort' things, but we'll see to them later.

    Double-click the '00' and the big dialog box appears on your screen. As you can see, there are 6 smaller steps, or actions, if you prefer. These are also for motions and pushing buttons, but as for now, we just use them for speech. Let's just edit the upper part of this box. Change the 'Actor' to 'ActorOne', which means Tom and 'Conversation:Action 0' to 'Play sound/motion'. In the first argument, enter 'sg_c01' and in the second argument, 'LineNo 1'. That 'sg_c01' is the name of the conversation and 'LineNo 1' is obviously the line number. Don't worry about these yet.

    When you press 'OK', you're back at the properties. Open the conversation steps again and now choose '01'. Change 'Actor' to 'ActorTwo', Tom, and use the same action and first argument, but the second argument should be 'LineNo 2'. Just edit the '02' with 'ActorOne' and 'LineNo 3' and then we'll try how it sounds in game.

    Before we are able to test it, we must make a ControlDevice. In this case, a switch or a button will do. Create a switch or a button and link it with 'ControlDevice' to the 'BearConv'. Locate it somewhere near Garrett, so there isn't any trouble with the guards. Now just check portalizations and all those things one more time and test it.

    If everything went fine, you should now have a three line conversation which starts when you press the button. Not too great, eh? Well, this was just a demonstration. Now I have to explain all this (sigh).

  3. Advanced conversations

  4. Let's start with the voices. As you remember, Tom's voice was 'guard3' and Jerry's 'guard2'. You might think 'Why on Earth can't I use some other voices?'. This is because the conversations are made for specific actors. The conversation made in demonstration is the same you can hear in front of Bafford's, and the voices of these actors are 'guard3' and 'guard2'. The freedom of choice is limited to using built-in conversations. Of course, this doesn't limit our creativity. You can take a part from here and a bit from there. If you like, you can finish that conversation by adding more lines starting from '03'.

    Then there is this 'sg_c01' and 'LineNo'. That 'sg' is for 'sergeant' or something like that. There are also 'hm' and 'sv' for hammers and servants. 'c01' is for 'conversation 1'. I guess you could search the Snd.crf file for all the conversation, but I prefer studying the game levels. For example, another conversation 'sg_c12' has also two actors, 'guard1' and 'guard2'. 'LineNo' is of course the line number, but you'll have to be careful with this too. 'LineNo 1' means guard 1 and for example 'LineNo 4' means guard 2.

    Next thing is this marker. It's preferable to name it, so you can easily find it later. Those 'AIConversationActor' links are quite self-explanatory. You just have to be careful with those numbers in 'Data'. If you forget them or they go wrong… Actor one should obviously be the one saying line one.

    Now let's try something new. Open the conversation part '01' and change the second action, 'Action 1' to the following…

      Actor: ActorTwo
      Conversation: Action 1: Play sound/motion
      Argument 3: 'Conversation 0, Baz 0'.

    Now try it out. Cool, eh? That 'Baz 0' might confuse you, but don't worry, you're not the only one confused. Here's something else to try out…

    "Conversation 0, Quux 0" Cross arms behind back
    "Conversation 0, Baz 0" Jump and shake arms a littleas if agitated
    "Conversation 0, Baz 0, Quux 0" Raise arms as ifto say I don't know
    "Conversation 0, Bar 0" Lean backward as if surprised
    "Conversation 0, Bar 0, Quux 0" Cross arms in front
    "Conversation 0, Bar 0, Baz 0" Move arms as if countingor conducting music
    "Conversation 0, Foo 0" Raise left hand and nod asif greeting
    "Conversation 0, Foo 0, Baz 0" Nod head as in agreementor acknowledgement
    "Conversation 0, Foo 0, Bar 0" Take a step forwardwith one foot, then back
    "Conversation 0, Foo 0, Bar 0, Baz 0" Look right
    "Conversation 0, Quux 0, Foo 0" Cross arms
    "Conversation 0, Quux 0, Bar 0" Keep arms crossed

    These motions make a little color for your otherwise so boring conversation. One thing to notice is that speech technically last for just a moment. This means, if you play motion before speech, the guard will move first and speak after his little show, so play sound first.

    In addition to this Play sound/motion action, there are a lot of other possibilities. I'll now explain some of them. To tell the truth, I don't actually know the meaning of them all.

      Goto object
      Arg. 1: Object number or name
        The actor walks to the object defined in argument 1.
      Arg. 1: -
      Arg. 2: Object number or name
        The actor turns towards the object defined in argument 2.
      Frob object
      Arg. 1: Object number or name
        The actor pushes a button or pulls a switch or anything that is appropriate for the object. Note that the actor doesn't have to be anywhere near the object, and doesn't actually 'push' the object.
      Arg. 1: Amount
        Simply makes the actor to stand still for the amount of time. 1000 is one second.
      Add link
      Arg. 1: Type of link
      Arg. 2: To
      Arg. 3: From
        With this you can add links in-game. For example, you have a button, but you want it to be active after the player has heard some valuable information. Like where the button is.
      Remove link
      Arg. 1: Type of link
      Arg. 2: To
      Arg. 3: From
        This is the opposite of the Add link, but should be used more often. When you have a conversation, you should destroy the ControlDevice link to it as soon as possible, so it doesn't start all over again if player goes taffing around.
      Add/Remove meta-property
      Arg. 1: 'Add' or 'Remove'
      Arg. 2: Name of meta-property
        This is quite like the two last ones, but this adds or removes the actor's meta-property. If you don't know what a meta-property is, read the corresponding tutorial.

    That's quite about it. There are some other actions that I didn't mention, but they're not so important and if you really need them, you can easily explore them yourself. One thing to remember is that every action needs an actor. Even if they don't actually do anything with the actor.

    In our example, we used a button to trigger the event, but it would of course be much better to activate it with player entering a specific room. This is specified in another tutorial.

    And now as you should be able to do conversations on your own, why don't you try it out. Make a two person conversation, which consist motions and another actor walking to a button and pushing it, and then coming back. And make sure that the conversation cannot be started twice. Don't worry about the meaning of the speech, just make it work.

    If you do something wrong, just check it from the tutorial. When you succeed, you can move to the next part.

  5. Garrett as an actor and recording sounds

  6. Everybody remembers the infamous Cutty and the conversation in Cragscleft. This was the only conversation, where Garrett actually spoke in-game and was done with some obscure method called OldConversation and is much related on script. It's simple to do an identical conversation with the normal method.

    The problem is that player isn't actually a creature, so he/she cannot be an actor. If you're thinking about making the starting point an actor or an actor that is attached to Garrett or something like that… forget it. It's so much simpler to do this with VOTraps. As you remember from the last part, you can make actors to frob objects, and they don't move in any way. So we plainly make the actor to push a button which has a ControlDevice link to a VOTrap which makes the sound.

    Let's start with the VOTrap. If you don't remember how it's done, let me refresh your memory. Create a button and a VOTrap. Make a ControlDevice link from the button to the VOTrap and a SoundDescription link from the VOTrap to the sound you want to hear. For example 'garm0201' is fine. Move the button somewhere near the start and try it. If you hear 'Hmm… a few too many to get by here.' coming 'inside your head', your VOTrap is working.

    Now we have to hide the button. Put it somewhere underground or just anywhere, where there is no room, so you could hear the button being pressed. When the actor now frobs the button, it will seem like Garrett just made a comment. Let's look at the conversation then.

    Make the '00' a normal conversation part with someone as Actor1. If you want you can use one of the previous ones. When the actor has done his part we'll make our trick in '01'. We need two actions for this. The actor on both these actions is Actor1. The same one as in '00', but this time he just frobs the button and waits. Action0 is Frob object and argument 1 is the button number or if you have named it, you can use the name. Action1 is Wait and argument 1 is… let's say 3000.

    Test it and you should now have a conversation with Garrett involved. Of course, the conversation doesn't make much sense, because their topics don't quite match. You can fix this by finding the sounds that make at least some reason or if you're feeling creative, you can record your own sounds.

    To record sounds, you need an external program. I use GoldWave, but I suppose almost anything will do. For playback rate 22050Hz is good and saving format… well I use 8 bit mono, but 16 bit mono works too. Note that when you open the original sounds, if they seem to be 'Microsoft ADPCM; 4bit' or something weird like that, you should change it to something more usual. If you save them in wrong format, it will crash Thief.

    Then the directories. Easiest way to do this is to create a \snd directory under the Thief directory and the unzip the files from snd.crf to that directory. You should then have, for example, the file C:\Thief\Snd\Guard3\English\Sg3c0101.wav in right place. Then you just re-record them. And don't bother trying to put them back in the snd.crf for Thief looks first in the directories and then the Crf-files.

    Yep. That's quite about it. You should now be able to your own conversations and make the actors do all the funny things. If something doesn't work, try to find the reason first by yourself and then refer to the tutorial.

    If you need an example for this, try downloading my 'level' called 'Conversation at the Gate' from the Circle,

  7. What else to do with conversations

  8. Conversation can be used in very multiple ways. Mastering it can make you be able to do most stunning tricks and solve the most serious problems on your levels. Of course, I admire it almost as much as Totality admires sources and receptrons… Right, Totality?

    You may have seen Little Mouse's the Mouse Certified Alarm System. Now we're making something like that, but with a little modification. The alarm will go off if the guard doesn't press the button every two minutes. This isn't probably the only way to make this, but I'll show you how I did it. You can modify it on your own.

    Create some area, where you have a button on the wall. On the other side of the wall (in the solid void), make a blueroom (a room which isn't seen in-game) and another button in there. Name the first button 'CountDownButton' and the second one 'AlarmButton'. Create one guard somewhere near the buttons and one 'FrogBeast' inside the blueroom. Name the guard 'Mr Jacobson' and the frog 'TimerFrog'.

    Now create patrol points (TrolPt) for Mr J and spread them around the area. Make sure they're on a hight, where guards could touch them. Link the patrol points with each other with AiPatrol (for example, from first to second, second to third, third to first). Now give Mr J the property; Ai->Ability->Patrol: Does patrol: True, and place him upon one of the patrol points.

    Now we need to make Mr Jacobson push the CountDownButton, so we create a marker named 'ButtonSpot' in front of the switch and add a AiWatchObj link from Mr J to a patrol point near the button. I suggest that you name the patrol point first. After we have created the link, we must edit its properties. change the properties to following:

    Watch kind: Self Entry
    Trigger: ...
    Radius 5
    Hight 5
    Req. awareness (0) None
    Line req. None
    Min. alertness (0) None
    Max. alertness (1) Low
    Exit: ...
    Link kill option Don't kill
    Kill like links ( )
    No tesh once triggered ( )
    Reuse delay 20000 (which is 20 seconds)
    Reset delay 0
    Step 1: Goto object
    Arg. 1 ButtonSpot
    Step 2: Face
    Arg. 1 -
    Arg. 2 CountDownButton
    Step 3: Play sound/motion
    Arg. 1 -
    Arg. 2 -
    Arg. 2 WorldFrob 0, AtWaist 0, BellPull 0
    Step 4: Frob object
    Arg. 1 CountDownButton

    When you test it, Mr Jacobson should be patrolling around and when he comes by he goes over to push the button. You may need to move the ButtonSpot so he doesn't stand too far or too near the button.

    Now we can make the actual conversation. Create a marker called 'TimerConv' in the blueroom, and make a ControlDevice link from the CountDownButton to it. Make the frog actor one with the AiConversationActor link. Give TimerConv the normal properties and copy following to the conversation's properties in step '00':

    Actor: ActorOne
    Action 0 Wait
    Arg. 1 120 000 (120 seconds)
    Actor: ActorOne
    Action 1 Frob object
    Arg. 1 AlarmButton
    This means that the frog will wait two minutes and then set off the alarm. Every time the guard (or a sneaky thief) pushes the button, frog starts counting from the beginning.

    Now we just need the alarm, so find the 'RamirezAlarm' and place it on the wall (note that some of the alarm lights don't work) and just add a ControlDevice link from the AlarmButton to the alarm.

    Add two more guards to see how it works out, and don't forget a blackjack, so the alarm actually does go off (after mugging of Mr Jacobson).

  9. Tips and hints


If you need help, write me, or go to the Forum,

And if you don't want to be labeled as a newbie, use the Forum's search function first!

Deep Qantas (Teemu Salmela)
or ICQ# 36112496

Thanks to:

Totality and THE THIEF for support
Digital Nightfall for not losing his nerves with my posts
Datoyminaytah for his cool level (I still can't understand how Farkus turns to player)
and last but not least
Glen Sawyer for translating this thing on HTML

End of tutorial.