Monday, January 27, 2014

Tutorial: Talking Activators - make things engage dialogue

Object: To be able to speak to static elements (non-Actors)

Difficulty: Quite easy

Time Needed: A couple of minutes

Things you will need:
  • Creation Kit. The Creation Kit is the modding tool for Skyrim and can be downloaded for free on Steam.
  • Basic knowledge in quest/dialogue creation
  • Reading the additional note at the end *do read it!*
What we're going to do

If you have played Skyrim quite a bit, you probably came to meet some strange beings that could talk to you even though they weren't NPCs, but rather some floating magic orb, or just a voice talking out of nowhere. Well, that's what we're going to do here: creating one of those things that can engage dialog with the player.
The method to do it is probably not the one the developers used, but it works, so it's all that matters.

With this tutorial, you can make any static mesh seem to be able to talk: it can be a rock, a giant mushroom, a pretty light FX, or whatever floats the boat of your imagination. Just keep in mind that the activator will be static.


Creating the Talking Activator

1. Open the Creation Kit and load Skyrim.esm.
2. In the Object View window, filter "talkingactivator", then select the category ALL. You will see that there aren't many talking activators available. Duplicate one of them, rename it to your liking, and double click to edit it.
Actually, there isn't much to change here, but it's interesting to take a look. Notice the Voice Type field, and notice that the voice type of those talking activators is always a Unique voice type. Well, it'd be best that you pick one of those Unique voice types, because else, the activator is going to greet you with common racial greetings such as "How can I assist, hm?" or "Yes, sera?". It can ruin the mojo quite badly if you were going to make some badass talking rock.
When you've picked a voice, hit OK, and place your talking activator in the world. Probably in front of the rock, giant mushroom or pretty light FX of your choice.


Creating the dialogue

1. To create a dialogue, you need to create a quest. So, go to the Object Window, in Character>Quest, and create a new quest (right-click>New). If you are not familiar with quests, it would be best that you give a look to the Creation Kit wiki's tutorial on quest creation and dialogue.
2. Upon creating a new quest, the Quest window prompts. Give your quest a name, hit OK, and open it again so you can access more tabs that will be needed in the next steps.
3. Go to Quest Aliases. Right-click>New in the table. In the window that prompts, select "Specific Reference" and click on the button right to the option to select the talking activator in the Render View. Give your alias a nice name, like "Voice".
4. Now we're going to create the dialogue that this Voice will say. So go to the Dialogue View tab.

  • Create a new dialogue view (right-click>new)
  • Create a new dialogue branch (right-click>new)
  • Name your first dialogue topic.

For the purpose of testing, I just made a simple dialogue with two possible answers to the first topic.
5. Once your dialogue is done, go the the Scenes tab.

  • Create a new scene (right-click>new)
  • Create a new phase at end (right-click>create new phase at end)
  • Add an actor (select Voice, or whatever you named your quest alias)
  • Select the phase, right-click>New action>Package

In the window that pops up, right-click in the table>new. The Package window prompts.

  • In the drop-down menu called Package Template, select ForceGreet
  • In the table on the left, click on the first option (Topic) and select the first topic of your dialogue in the drop-down menu, right to the table. You can filter it by typing its name.
  • In the table, you may also click on the third option (Trigger Location), click on the button in the Selected Package Data area, and select your talking activator in the Render View. The radius is set to 500 by default, you might want to reduce it eventually, but it's not very important.
  • Click OK on all the windows that are open to save the changes to your quest.

Now you could think that since you just created a scene, in which your talking activator is supposed to force dialogue when approached by the player, that it would be normal for it to act this way. Well, sadly, that doesn't work, and the talking activator cannot be activated by the player either. So we need to find a way to force the activator to start its scene.

Creating the Trigger or Activator

1. Now we have two options:

  • Creating a trigger volume that will force the dialogue when the player enters it
  • Creating a custom activator that the player can use to start the dialogue

So it's all a matter of whether you want the player to initiate the dialogue or not.

Creating a trigger
For this option, just select an item in your scene that is about the size of the player, and click on the little icon looking like a cube with a T inside, in the toolbar. A red box will appear around the item you selected. You can use the arrows pointing from its center to resize it, or press 2 and move it around to place it near your talking activator.


Creating a custom activator
For this option, go to the Object View, in WorldObjects>Activator and filter any kind of button, simple lever or pull chain as you like. I like the NorPullChain01 but that's personal taste. Duplicate the activator of your choice and rename it, then let's edit its properties.

  • In the field "Name", you could put the name of the character supposed to be speaking (or anything else, we can be tricky). Here, I put "Insane Crystal" because an Azuran crystal on Tamriel is obviously insane.
  • In the field "Activate Text Override", you could put something like "talk". Or it could be anything, like "annoy", "bother", etc. Be crazy if it serves your evil projects.
  • Among the options on the right, you might want to tick "Is Marker". This will make the activator invisible, so it will really look like you're trying to talk to your static mesh, without having to use some device for this purpose.


Now if we leave things as they are, it's gonna be pretty useless, because neither the trigger nor the activators know what to do. For this, we're going to need a little script.


Creating the Trigger or Activator

What this script does is simply to force the activation of the talking activator, which forces it to start its scene.

  • Double click on your trigger/activator in the Render View
  • Go to the Scripts tab, far right in the tabs of the Reference window
  • Click on Add (wait a little for scripts to load)
  • Click on New Script, and give it a name. Click OK.
  • Select your script in the Reference window, right-click>Edit source
  • Paste the following code and save:

ObjectReference Property TalkActivator Auto 
Event OnActivate(ObjectReference akActionRef)
TalkActivator.Activate(Game.GetPlayer(), true)
EndEvent

  • Double-click on your script to edit its properties.
  • Select TalkActivator and click on Edit Value. Click on the button to select the talking activator in the Render View.

And that's it! Now it's time to test this out ingame!


As you can see, this insane crystal talks like a Khajiit, due to MaleKhajiit voice type.

Very important additional note
I had the very displeasing surprise to figure out that this method didn't seem to work anymore as I started to apply it to my mod. I did all the possible tests I could do to figure what wasn't working, until a friend told me of the "quest dialogue bug" that has started to occur with a recent update. This bug makes it impossible to engage dialogue with any NPC or, in this case, a talking activator ...until you save and reload the game.
Yes, the fix is as simple as this. F5, F9, and it all works smoothly again. Don't forget to add this recommendation in the description of your mod when you publish it!

Thanks to Felroki for the tip. If you like Dunmer items or want to see a more Dunmeri revamp of the Gray Quarter, do check out her mods on the Nexus or Steam! She did a fantastic job on them!