This is a wonderful write-up of an iconic game, but it wasn't until I saw the publishing date that I realized this game is now more than 20 years old!
Weirdly, despite Galatea (and later, Blood and Laurels) amazing everyone with its "natural" NPC conversation design, somehow, this hasn't ever been replicated anywhere else. As far as I know, no one's even TRIED to replicate it, which truly makes me wonder why not.
Ms. Short was clearly taken with the idea of "natural" NPC conversation, and there was a lot of hype over the "Verso" engine used to power Blood and Laurels. But since then? Nothing, as far as I am aware of. The "Verso" engine and whatever algos were used to power Galatea have never been shared, duplicated, or even used again by the original authors.
Frankly, considering how drily Ms. Short talks about how "simple" and cut-and-dry the NPC conversation design was in Galatea makes me wonder why the hell that knowledge never got passed along to anyone else OR re-used by Short herself.
Emily beat me to it, but I was also going to mention her Threaded Conversation (later taken over by Chris Conley) which is an Inform 7 extension based on the later iteration of the systems in Galatea and used in her game Alabaster. She definitely both passed along the knowledge and re-used it herself! ;) https://i7el.herokuapp.com/extensions/threaded-conversation-by-chris-conley
I posted a partial bibliography of articles, tools, and follow-up games related to Galatea. Here are more links about what I've been doing in this space since that list was posted:
may shed light on why some specific emotional effects of Galatea depend on a parser interface, which is commercially a non-starter these days. That doesn't mean we can't do amazing things with NPC conversation, but it's likely to look and feel different unless we find a way to recapture the benefits of the parser without the drawbacks for a mainstream audience. (That is also a subject of considerable discussion and research; some links here: https://emshort.blog/category/parser/parser-v-choice/ )
As for why I haven't done more with Versu, the answer there is entirely to do with the business/legal status of the tool.
*
In the context of the 50 Years series, it also seems fitting to call out a few of the conversational parser IF games that riffed on Galatea's format in the years immediately following:
And some years further on after that, it's worth looking at the character of Progue in Blue Lacuna, by our host Aaron himself, for which the source is available: http://blue-lacuna.textories.com/source/source.html
There's loads more one could add (including links to more of Aaron's own work with social models including Prom Week; assorted audio, VR, and chatbot-based games that take conversation-with-a-character in new directions; and many other areas of work), but I'll stop here.
(also, I realise it might sound unclear at the end there -- definitely not claiming that all those many other experiments in conversational NPCs are inspired by Galatea! Just that this is in fact quite a wide field.)
Thank you SO SO much for this extended reply complete with links. I was aware of "Prom Night" as well as a few other forays into "natural NPC conversations," but I guess what I'm saying is that it is heartily disappointing that no one seems to have taken up the gauntlet and really produced a robust "dynamic NPC conversation" tool that can be applied by writers who aren't good enough at programming to create their own tool.
Frankly, the reason why I brought this up is that I am currently working on an emergent type game in CS format, which is ordinarily node-based and entirely pre-scripted. What I've been wanting to do is set up both a way for the NPC to like/dislike the PC's comments/actions as well as identify and segue into a multi-turn conversation (with personal quirks and variations).
I thought to myself, my gosh, this is pretty hard work to code all that out, so somebody out there smarter than I must've already put together a better system. Somehow, I had it in my head that Galatea was published just a 4-5 years ago, and that somebody, somewhere was closing the gap with AI or a value graph or SOMETHING.
Instead, I'm dismayed to learn that one tool is caught up in legal wrangling and the others are hidden away in parser-land. And there's still no universal "grammar" for designing dynamic conversation algos/trees.
As a postscript, I should add here that I am coming from the "chatbot world" in which, heck yes, we mimic conversations as our core design skill. But these are always extremely narrow in focus and are the functional equivalent of an NPC in Zelda telling you where to find a Golden Key via a hint/exposition dump.
It's a one-trick pony and can be an amusing and effective one at that, but it's not what I was looking for. So far, the closest thing I've seen is what they built in Unity for managing convos in the game Fire Watch.
SHOULD I ever finish my game, and SHOULD the results by worthwhile, I guess it'll be time to start talking about how to classify and organize "shooting the breeze" conversation styles.
Well, I think there are in fact some fairly known/documented design patterns for a lot of this, though I accept you may not have run across them, or they may not be presented in the form of tooling/guidance that you find accessible. (Perennial challenges!)
But basically: what emerged from Galatea, became Threaded Conversation, and then underpinned multiple other tools I've worked on (including Versu's conversation system and conversation flow management in Character Engine) is one where
- the system has an idea of threads of dialogue where the player can continue to pursue a particular idea, and NPCs have complementary turns in which to respond
- at many points, the player may also change the subject with some degree of freedom
- though there is also a concept of restricted turns where the player has e.g. been asked a direct question and the NPC demands a reply to that
- options open to the player depend on what the player has previously learned
- there is also some turn-taking with NPCs, and the NPC may in particular be able to detect that you've hit the end of a particular dialogue thread and be able to initiate a change of conversation of their own
There are lots of nuances about how to build that, what kinds of decision-making NPCs can make in response to things you tell them, etc. But inkle's Overboard has a dialogue system built in ink that does something similar, dynamically furnishing its conversation nodes with appropriate options and doing a consistent cycle through player-led options and NPC-led responses. That's written up -- with code sample! -- here:
Thank you so much both for these helpful comments and links as well as for your many previous posts on the topic! And a special thanks for the "overboard" link that finally delved more into the nitty-gritty of what I was looking for (I really love Inkle's thinking on design, but for some reason, the aesthetic of their story games just turns me right off).
I think parser games have an advantage in that everything is initiated by the player (in terms of conversation). Trying to design a node-based (choice) game made it seem to me impractical for the player to do anything BUT choose to initiate a conversation. If the player chose the topic, of which there might be dozens or more different options, the whole thing would just get out of hand.
Therefore, I went with a "player chooses to talk, NPC chooses the topic". My logic tree thus went like this:
0) (NPC must be present to talk to - if more than 1 present, choose which one to talk to)
1) Player starts talking to NPC
2) Will NPC respond? In my game, the answer's "no" only if the NPC is sleeping. But other factors might preclude responding such as being in a post-apocalytpic scenario (etc) where you don't talk to strangers.
3) If yes, NPC's relation to PC is checked to determine appropriate NPC response to the greeting (friendly, neutral, hostile, etc).
4) Check "priority" of different topics, i.e. if one topic is of paramount importance (such as completing a work task, and the NPC is the PC's supervisor). If a high priority topic is active, go with that. Otherwise, fall back to "chit chat" topics.
5) NPC starts every topic with an "opening statement" that then cycles that thread one position forward.
6) PC has option to respond by affirming, contradicting, or asking a follow-up question (or leaving the conversation).
7) Check to see if NPC likes or dislikes the PC's response. If dislike, the NPC's "annoyance counter" increases. If the NPC becomes too annoyed, the conversation ends. If only slightly annoyed, NPC might change the subject.
8) If NPC responds (in the same topic), NPC goes to the next step in that topic's conversation. Each topic's step counter is recorded so that, in the future, an NPC can "continue on" with that topic even if there's a break between each step (i.e. the NPC or player ends the conversation before the topic plays out).
9) If the topic naturally comes to an end (i.e. NPC still wants to talk but the "steps" are all used up) then the NPC switches to a different topic.
10) If either NPC/PC triggers an end to the conversation, both parties say "goodbye" according to their relationship numbers (i.e. friendly, neutral, hostile).
As far as I can tell, the only thing I'm missing here is for the NPCs to all take a turn doing something that might impact the conversation. Right now, there is a subroutine for "NPCs move" but all it can do is tell the NPC to say goodbye and leave.
What I've built so far isn't too terribly sophisticated, but I'm happy to see I'm at least on the right track. I honestly thought there might be some more important cycles/stats to keep track of, but it's starting to feel doable even with my extremely limited coding skills.
Thank you again one and all for your amazing work, research, and insights!
Funny thing!
I just played this yesterday and today (for the first time). Your article couldn't have had a better timing (for me).
Thank you.
This is a wonderful write-up of an iconic game, but it wasn't until I saw the publishing date that I realized this game is now more than 20 years old!
Weirdly, despite Galatea (and later, Blood and Laurels) amazing everyone with its "natural" NPC conversation design, somehow, this hasn't ever been replicated anywhere else. As far as I know, no one's even TRIED to replicate it, which truly makes me wonder why not.
Ms. Short was clearly taken with the idea of "natural" NPC conversation, and there was a lot of hype over the "Verso" engine used to power Blood and Laurels. But since then? Nothing, as far as I am aware of. The "Verso" engine and whatever algos were used to power Galatea have never been shared, duplicated, or even used again by the original authors.
Frankly, considering how drily Ms. Short talks about how "simple" and cut-and-dry the NPC conversation design was in Galatea makes me wonder why the hell that knowledge never got passed along to anyone else OR re-used by Short herself.
Emily beat me to it, but I was also going to mention her Threaded Conversation (later taken over by Chris Conley) which is an Inform 7 extension based on the later iteration of the systems in Galatea and used in her game Alabaster. She definitely both passed along the knowledge and re-used it herself! ;) https://i7el.herokuapp.com/extensions/threaded-conversation-by-chris-conley
Maybe because that isn't at all what happened. :) Some years ago, about halfway down this page:
https://www.metafilter.com/158340/West-of-House
I posted a partial bibliography of articles, tools, and follow-up games related to Galatea. Here are more links about what I've been doing in this space since that list was posted:
- Posts about Spirit AI's Character Engine ( https://emshort.blog/?s=character+engine )
- Article on character personalities and procedurality in Procedural Generation in Game Design ( https://www.routledge.com/Procedural-Generation-in-Game-Design/Short-Adams/p/book/9781498799195 )
- Current work on Mask of the Rose ( https://www.failbettergames.com/the-mask-in-mask-of-the-rose/ ) talks about social decision-making and how that is looped into relationships and character tracking
This article:
https://emshort.blog/2016/02/23/the-versu-galatea/
may shed light on why some specific emotional effects of Galatea depend on a parser interface, which is commercially a non-starter these days. That doesn't mean we can't do amazing things with NPC conversation, but it's likely to look and feel different unless we find a way to recapture the benefits of the parser without the drawbacks for a mainstream audience. (That is also a subject of considerable discussion and research; some links here: https://emshort.blog/category/parser/parser-v-choice/ )
As for why I haven't done more with Versu, the answer there is entirely to do with the business/legal status of the tool.
*
In the context of the 50 Years series, it also seems fitting to call out a few of the conversational parser IF games that riffed on Galatea's format in the years immediately following:
- Kathleen Fischer's Redemption ( https://ifdb.org/viewgame?id=59d0udoc5ofsg7fj )
- Matt Fendahleen's August ( https://ifdb.org/viewgame?id=yo7axrrxq5h3q42x )
- Chrysoula Tzavelas' shadows on the mirror ( https://ifdb.org/viewgame?id=2gddzk6gmvnq66u1 )
And some years further on after that, it's worth looking at the character of Progue in Blue Lacuna, by our host Aaron himself, for which the source is available: http://blue-lacuna.textories.com/source/source.html
There's loads more one could add (including links to more of Aaron's own work with social models including Prom Week; assorted audio, VR, and chatbot-based games that take conversation-with-a-character in new directions; and many other areas of work), but I'll stop here.
(also, I realise it might sound unclear at the end there -- definitely not claiming that all those many other experiments in conversational NPCs are inspired by Galatea! Just that this is in fact quite a wide field.)
Thank you SO SO much for this extended reply complete with links. I was aware of "Prom Night" as well as a few other forays into "natural NPC conversations," but I guess what I'm saying is that it is heartily disappointing that no one seems to have taken up the gauntlet and really produced a robust "dynamic NPC conversation" tool that can be applied by writers who aren't good enough at programming to create their own tool.
Frankly, the reason why I brought this up is that I am currently working on an emergent type game in CS format, which is ordinarily node-based and entirely pre-scripted. What I've been wanting to do is set up both a way for the NPC to like/dislike the PC's comments/actions as well as identify and segue into a multi-turn conversation (with personal quirks and variations).
I thought to myself, my gosh, this is pretty hard work to code all that out, so somebody out there smarter than I must've already put together a better system. Somehow, I had it in my head that Galatea was published just a 4-5 years ago, and that somebody, somewhere was closing the gap with AI or a value graph or SOMETHING.
Instead, I'm dismayed to learn that one tool is caught up in legal wrangling and the others are hidden away in parser-land. And there's still no universal "grammar" for designing dynamic conversation algos/trees.
As a postscript, I should add here that I am coming from the "chatbot world" in which, heck yes, we mimic conversations as our core design skill. But these are always extremely narrow in focus and are the functional equivalent of an NPC in Zelda telling you where to find a Golden Key via a hint/exposition dump.
It's a one-trick pony and can be an amusing and effective one at that, but it's not what I was looking for. So far, the closest thing I've seen is what they built in Unity for managing convos in the game Fire Watch.
SHOULD I ever finish my game, and SHOULD the results by worthwhile, I guess it'll be time to start talking about how to classify and organize "shooting the breeze" conversation styles.
Well, I think there are in fact some fairly known/documented design patterns for a lot of this, though I accept you may not have run across them, or they may not be presented in the form of tooling/guidance that you find accessible. (Perennial challenges!)
But basically: what emerged from Galatea, became Threaded Conversation, and then underpinned multiple other tools I've worked on (including Versu's conversation system and conversation flow management in Character Engine) is one where
- the system has an idea of threads of dialogue where the player can continue to pursue a particular idea, and NPCs have complementary turns in which to respond
- at many points, the player may also change the subject with some degree of freedom
- though there is also a concept of restricted turns where the player has e.g. been asked a direct question and the NPC demands a reply to that
- options open to the player depend on what the player has previously learned
- there is also some turn-taking with NPCs, and the NPC may in particular be able to detect that you've hit the end of a particular dialogue thread and be able to initiate a change of conversation of their own
There are lots of nuances about how to build that, what kinds of decision-making NPCs can make in response to things you tell them, etc. But inkle's Overboard has a dialogue system built in ink that does something similar, dynamically furnishing its conversation nodes with appropriate options and doing a consistent cycle through player-led options and NPC-led responses. That's written up -- with code sample! -- here:
https://www.patreon.com/posts/overboard-ink-52524338
Thank you so much both for these helpful comments and links as well as for your many previous posts on the topic! And a special thanks for the "overboard" link that finally delved more into the nitty-gritty of what I was looking for (I really love Inkle's thinking on design, but for some reason, the aesthetic of their story games just turns me right off).
I think parser games have an advantage in that everything is initiated by the player (in terms of conversation). Trying to design a node-based (choice) game made it seem to me impractical for the player to do anything BUT choose to initiate a conversation. If the player chose the topic, of which there might be dozens or more different options, the whole thing would just get out of hand.
Therefore, I went with a "player chooses to talk, NPC chooses the topic". My logic tree thus went like this:
0) (NPC must be present to talk to - if more than 1 present, choose which one to talk to)
1) Player starts talking to NPC
2) Will NPC respond? In my game, the answer's "no" only if the NPC is sleeping. But other factors might preclude responding such as being in a post-apocalytpic scenario (etc) where you don't talk to strangers.
3) If yes, NPC's relation to PC is checked to determine appropriate NPC response to the greeting (friendly, neutral, hostile, etc).
4) Check "priority" of different topics, i.e. if one topic is of paramount importance (such as completing a work task, and the NPC is the PC's supervisor). If a high priority topic is active, go with that. Otherwise, fall back to "chit chat" topics.
5) NPC starts every topic with an "opening statement" that then cycles that thread one position forward.
6) PC has option to respond by affirming, contradicting, or asking a follow-up question (or leaving the conversation).
7) Check to see if NPC likes or dislikes the PC's response. If dislike, the NPC's "annoyance counter" increases. If the NPC becomes too annoyed, the conversation ends. If only slightly annoyed, NPC might change the subject.
8) If NPC responds (in the same topic), NPC goes to the next step in that topic's conversation. Each topic's step counter is recorded so that, in the future, an NPC can "continue on" with that topic even if there's a break between each step (i.e. the NPC or player ends the conversation before the topic plays out).
9) If the topic naturally comes to an end (i.e. NPC still wants to talk but the "steps" are all used up) then the NPC switches to a different topic.
10) If either NPC/PC triggers an end to the conversation, both parties say "goodbye" according to their relationship numbers (i.e. friendly, neutral, hostile).
As far as I can tell, the only thing I'm missing here is for the NPCs to all take a turn doing something that might impact the conversation. Right now, there is a subroutine for "NPCs move" but all it can do is tell the NPC to say goodbye and leave.
What I've built so far isn't too terribly sophisticated, but I'm happy to see I'm at least on the right track. I honestly thought there might be some more important cycles/stats to keep track of, but it's starting to feel doable even with my extremely limited coding skills.
Thank you again one and all for your amazing work, research, and insights!