Ultima Game Developer: Conversation Trees


One of the fundamental systems in any RPG is the conversation system, which allows players to converse with the people of your world. Ultima has always featured some form of conversation, although in the early days a simple “Use” on an NPC would provide only a small amount of text. In later Ultimas, NPCs were complex, and their conversations became elaborate “trees”, where selecting one response would provide additional options to converse with them about. Additionally, certain NPCs would have additional conversation options depending on what quest flags were set for the player, or if they were carrying specific objects in their inventory.

Creating conversation scripts for each of your NPCs will be an important step in fleshing out your Ultima game. In most cases you will seperate your NPCs into two groups, basic NPCs who need little, if any, important conversation options, and the important NPCs, from which the player will obtain quests, purchase items, or otherwise need to interact with on a much more ongoing basis.

Basic NPCs should not be neglected. While it would be a simple matter to assign every guard NPC a single line (i.e., “Move along.”), this leads to boring characters and can detract from the immersiveness of the story. What I tend to do is assign each NPC pawn a few metatags. This is usually Name, Job, and which batch of Scripts they will use. Since every NPC has a name and job, the universal Ultima conversation choices (Name, Job, and Bye) are always present. Additionally, each batch of scripts can return these values in different ways. For example, a guard using my NPCGuard01 script replies to “Name” with “The names %npc_name. Around here, most just call me Corporeal. Or Guard. Sometimes, Hey You.” Creating multiple batches of scripts for each NPC type allows you to give a variety to your otherwise bland NPCs.

Important NPCs will generally have a full script for each named character. After all, its easy to tell if all shopkeepers are from the same batch, since the player is much more likely to speak with them in each town. Each needs to be written in a unique voice, so the player can tie the face of the NPC to their speech patterns (and, if using speech, the actual sound of their voice). Making them consistent is important as well.

Writing a script for an NPC is an art in and of itself. While games don’t tend to need Hollywood scripts, it’s very easy to pick out games where little thought was given to the conversation. If you plan to add speech, this is even more important, as its easier to pick out bad scripts by sound than it is while reading. Additionally, remember that too much text can be just as detrimental as too little; if it takes two minutes of conversing before you can sell the loot you just obtained, players will hate your script.

Finally, remember that making scripts sensitive to the events of the world are important. Anyone involved in quests should have links to the events of that quest, so they can interact with the player as they progress. Events in the world with far-reaching consequences should affect the conversation options of anyone the player interacts with.

Implementing conversation trees in the game will depend on your Game Engine of choice, but most have similar features. In a single-player game, it is sometimes beneficial to pause the events of the world as you interact; I don’t recommend this personally, as it breaks the fourth wall slightly, but if you have a fast timeframe (say a 36-minute day), a noticeable chunk can be gone following a few minute conversation. In multi-player, this isn’t an option (unless the player “disappears” or cannot be interrupted while conversing, such as some MMOs do); instead, make sure the player can see enough of the space around them that they can break the conversation if something important is happening.

Another thing that Ultima is famous for is the NPC portraits, which are displayed during a conversation. This can be a handy way of giving the NPC a personality, and allow the player to attach a face to the character. While traditionally, a flat image is used for the character, there are other options: if using a low-resolution model for the NPC, you could use an animated image, or even a higher-resolution “head”, within the frame. Using a high-resolution model could allow you to attach a “conversation camera” directly to each NPC, and show their face in the frame; this also allows you to show the background behind them, so its more context sensitive. In any event, if using an animated face, be sure to look into lip-syncing technology, so that your NPCs look like they are saying what you want them to say. This will help to improve your immersiveness.

As you can see, there are many ways to implement conversations in your game. What is your preferred method of player interaction?

Browncoat Jayson

Join me in New Britannia!

You may also like...

5 Responses

  1. Excellent article, thanks. 🙂 I’m in the early planning phase of offline player conversation AI, so all of this is very interesting to me. Cool that you talk about lip syncing dialogue to portraits, which I haven’t thought about since playing Wing Commander I/II.

    • Browncoat Jayson says:

      I was looking at Ultima VII/Exult, and wondering how much work it would take to add speech, and then animating the portraits, doing lip syncing, etc. Just incredible the hours it would take.

      In a way, I’m glad UDK has a built in system for it. lol

  2. There is a great article on Gamasutra about Conversation Trees and how to implement them with various options: http://bit.ly/1rLyOzQ

  1. November 28, 2011

    […] Conversation Trees […]

  2. December 1, 2011

    […] Conversation Trees – a look at conversation mechanics, fundamental to RPGs and particularly necessary in an Ultima game! […]

Leave a Reply