the-great-game/docs/codox/Gossip_scripted_plot_and_Johnny_Silverhand.html
2021-02-19 23:44:46 +00:00

56 lines
15 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html PUBLIC ""
"">
<html><head><meta charset="UTF-8" /><title>Gossip, scripted plot, and Johnny Silverhand</title><link rel="stylesheet" type="text/css" href="css/default.css" /><link rel="stylesheet" type="text/css" href="css/highlight.css" /><script type="text/javascript" src="js/highlight.min.js"></script><script type="text/javascript" src="js/jquery.min.js"></script><script type="text/javascript" src="js/page_effects.js"></script><script>hljs.initHighlightingOnLoad();</script></head><body><div id="header"><h2>Generated by <a href="https://github.com/weavejester/codox">Codox</a></h2><h1><a href="index.html"><span class="project-title"><span class="project-name">The-great-game</span> <span class="project-version">0.1.1</span></span></a></h1></div><div class="sidebar primary"><h3 class="no-link"><span class="inner">Project</span></h3><ul class="index-link"><li class="depth-1 "><a href="index.html"><div class="inner">Index</div></a></li></ul><h3 class="no-link"><span class="inner">Topics</span></h3><ul><li class="depth-1 "><a href="Baking-the-world.html"><div class="inner"><span>Baking the world</span></div></a></li><li class="depth-1 "><a href="Game_Play.html"><div class="inner"><span>Game Play</span></div></a></li><li class="depth-1 current"><a href="Gossip_scripted_plot_and_Johnny_Silverhand.html"><div class="inner"><span>Gossip, scripted plot, and Johnny Silverhand</span></div></a></li><li class="depth-1 "><a href="Organic_Quests.html"><div class="inner"><span>Organic Quests</span></div></a></li><li class="depth-1 "><a href="Populating-a-game-world.html"><div class="inner"><span>Populating a game world</span></div></a></li><li class="depth-1 "><a href="Settling-a-game-world.html"><div class="inner"><span>Settling a game world</span></div></a></li><li class="depth-1 "><a href="Simulation-layers.html"><div class="inner"><span>Simulation layers</span></div></a></li><li class="depth-1 "><a href="The-spread-of-knowledge-in-a-large-game-world.html"><div class="inner"><span>The spread of knowledge in a large game world</span></div></a></li><li class="depth-1 "><a href="Uncanny_dialogue.html"><div class="inner"><span>The Uncanny Valley, and dynamically generated dialogue</span></div></a></li><li class="depth-1 "><a href="Voice-acting-considered-harmful.html"><div class="inner"><span>Voice acting considered harmful</span></div></a></li><li class="depth-1 "><a href="economy.html"><div class="inner"><span>Game world economy</span></div></a></li><li class="depth-1 "><a href="intro.html"><div class="inner"><span>Introduction to the-great-game</span></div></a></li><li class="depth-1 "><a href="modelling_trading_cost_and_risk.html"><div class="inner"><span>Modelling trading cost and risk</span></div></a></li><li class="depth-1 "><a href="naming-of-characters.html"><div class="inner"><span>Naming of Characters</span></div></a></li><li class="depth-1 "><a href="on-dying.html"><div class="inner"><span>On Dying</span></div></a></li><li class="depth-1 "><a href="sandbox.html"><div class="inner"><span>Sandbox</span></div></a></li><li class="depth-1 "><a href="sexual-dimorphism.html"><div class="inner"><span>Sexual dimorphism</span></div></a></li></ul><h3 class="no-link"><span class="inner">Namespaces</span></h3><ul><li class="depth-1"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>the-great-game</span></div></div></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>agent</span></div></div></li><li class="depth-3"><a href="the-great-game.agent.agent.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>agent</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -52px;"><span class="top" style="height: 61px;"></span><span class="bottom"></span></span><span>gossip</span></div></div></li><li class="depth-3 branch"><a href="the-great-game.gossip.gossip.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>gossip</span></div></a></li><li class="depth-3"><a href="the-great-game.gossip.news-items.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>news-items</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree" style="top: -83px;"><span class="top" style="height: 92px;"></span><span class="bottom"></span></span><span>merchants</span></div></div></li><li class="depth-3 branch"><a href="the-great-game.merchants.markets.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>markets</span></div></a></li><li class="depth-3 branch"><a href="the-great-game.merchants.merchant-utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>merchant-utils</span></div></a></li><li class="depth-3 branch"><a href="the-great-game.merchants.merchants.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>merchants</span></div></a></li><li class="depth-3 branch"><a href="the-great-game.merchants.planning.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>planning</span></div></a></li><li class="depth-3"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>strategies</span></div></div></li><li class="depth-4"><a href="the-great-game.merchants.strategies.simple.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>simple</span></div></a></li><li class="depth-2 branch"><a href="the-great-game.time.html"><div class="inner"><span class="tree" style="top: -207px;"><span class="top" style="height: 216px;"></span><span class="bottom"></span></span><span>time</span></div></a></li><li class="depth-2 branch"><a href="the-great-game.utils.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>utils</span></div></a></li><li class="depth-2"><div class="no-link"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>world</span></div></div></li><li class="depth-3 branch"><a href="the-great-game.world.location.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>location</span></div></a></li><li class="depth-3 branch"><a href="the-great-game.world.routes.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>routes</span></div></a></li><li class="depth-3 branch"><a href="the-great-game.world.run.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>run</span></div></a></li><li class="depth-3"><a href="the-great-game.world.world.html"><div class="inner"><span class="tree"><span class="top"></span><span class="bottom"></span></span><span>world</span></div></a></li></ul></div><div class="document" id="content"><div class="doc"><div class="markdown"><h1><a href="#gossip-scripted-plot-and-johnny-silverhand" name="gossip-scripted-plot-and-johnny-silverhand"></a>Gossip, scripted plot, and Johnny Silverhand</h1>
<p>Ive been writing literally for years since <a href="null">Voice acting considered harmful</a> in 2015 about game worlds in which the player speaks to non-player characters just by speaking the words they choose in their normal voice, and the non-player character replies using a pipeline that goes, essentially,</p>
<ol>
<li>Alexa/Siri style speech interpretation;</li>
<li>A decision on whether to co-operate based on the particular NPCs general demeanor and particular attitude to the player;</li>
<li>A search of the game state and lore for relevant information;</li>
<li>A filtering of the results based on what the particular NPC can be expected to know;</li>
<li>Generation of a textual response from those results based on a library of templates which defines the particular NPCs dialect and style of speech;</li>
<li>Production of audio using a [Lyrebird]{<a href="https://www.descript.com/overdub?lyrebird=true">https://www.descript.com/overdub?lyrebird=true</a>) style generated voice.</li>
</ol>
<p>As Ive argued before, the game engine necessarily knows everything about the lore, and the current state, of the game world. It would be possible for any non-player character to answer literally any question about the game world, from who was mayor of Night City in 2020 to who lives in the apartment one floor up from yours, to what the weather is like in North Oaks just now.</p>
<p>What individual characters know should, of course, be more limited. People who live in Japantown or Heywood are unlikely to know who lives in a particular apartment in Watson; only real old timers, like Rogue, are likely to remember who was mayor fifty years ago. Thats the reason for filtering; but the filtering really isnt a big deal.</p>
<p>Again, the generation of distinct voices for hundreds of non-player characters isnt any longer a big deal. Distinct social groups the corpos, and the different gangs such as Maelstrom or the Mox, will have their own argot, their own slang, their own habitual figures of speech which can be encoded into template libraries, while technologies like Lyrebird can produce an infinite range of realistic-sounding voices.</p>
<p>In particular, they can mimic real voices. They can mimic the voices of real actors. They can mimic <a href="https://cyberpunk.fandom.com/wiki/Keanu_Reeves">Keanu Reeves</a>.</p>
<p>So: how do you integrate this free form you can say anything to any character style of play with scripted plot?</p>
<p>Obviously, my vision as Ive set out in <a href="Organic_Quests.html">Organic Quests</a> is that many quests should emerge organically from modelling the lives, activities and motivations of non-player characters. But thats a radical vision and not one you can really expect many people to buy into until it has been demonstrated to work. I think that investors are still going to want to have confidence that theres something exciting in the game for players to engage with, and I think directors are still going to want to tell the stories they want to tell.</p>
<p>So if Im to sell the idea of free-form speech interaction with characters in the game world, I need an account of how it works with scripted characters voiced by high value actors in a scripted plot. Im picking Johnny Silverhand as a core example, here, because I think he presents particular challenges.</p>
<p>But I also think these challenges can be addressed very easily.</p>
<p>In <a href="https://www.cyberpunk.net/">Cyberpunk 2077</a>, the player cant just go and find Johnny Silverhand, to speak to him. On the contrary, Johnny will just appear when the script calls for him to appear, and when he does hell always initiate conversation. When a plot NPC initiates conversation with the player, the game could show as it does now a menu of things the player can say, with the implicit promise that selecting any one of these things will at least bring an interesting response which will expand ones knowledge of that character or of the lore.</p>
<p>Just as the player does now, the player in a game with free form speech interaction could choose to say one of the things presented in the menu, and the implicit contract that this would lead to a new revelation, or would advance the plot would remain unchanged. But the player could also choose to go off script, to take the conversation in an unscripted direction, or just to end it.</p>
<p>It should be said that in Cyberpunk 2077, unlike some other games, the player already has the choice to abruptly break off conversations, even with plot characters, so how the game handles breaking off the conversation does not need to change.</p>
<p>How should the game handle unscripted responses in scripted dialogues?</p>
<p>Well, the first and obvious thing is to parse the unscripted response to see whether its a variant of one of the scripted responses, and if it seems that it might be, perhaps ask the player to verify that:</p>
<blockquote>
<p><strong>V</strong>: Just get on with it already.</p>
<p><strong>Panam</strong>: You mean, go to the shiv camp?</p>
<p><strong>V</strong>: Yes, dammit.</p>
</blockquote>
<p>But the second thing is to respond to the response exactly as the non-player character would if the player had initiated the conversation, using the pipeline given at the beginning of this essay. Of course, in the special case of Johnny Silverhand, he is at least initially decidedly hostile and extremely selfish, so his response will typically come at step two in the pipeline:</p>
<blockquote>
<p><strong>V</strong>: Hey, Johnny, whats the quickest way from here to Jig Jig Street?</p>
<p><strong>Johnny</strong>: What am I now, your fucking tour guide?</p>
<p><strong>V</strong>: Oh, come on, Johnny, help me out a bit here, Wheres the nearest gun dealer?</p>
<p><strong>Johnny</strong>: How the fuck should I know? I havent been here for fifty years, all I know is ancient history.</p>
</blockquote>
<p>The benefit of this interaction style is that these responses could be real acted responses by the voice actor (in this case, Keanu Reeves), which avoids the uncanny valley risk that generated speech from a character the player has become used to interacting with may not sound quite natural enough.</p>
<p>But, if weve used Lyrebird technology to capture and mimic Reeves voice, and if Johnny is for some reason uncharacteristically mellow, then generated voice responses should be used. So suppose the player asks something which Johnny ought reasonably to know:</p>
<blockquote>
<p><strong>V:</strong> Hey, Johnny, whats between you and Rogue?</p>
</blockquote>
<p>Thats lore. Its in at least one of the in-game shard texts. The game engine knows it. A text can be generated for Johnny to respond:</p>
<blockquote>
<p><strong>Johnny</strong>: We were lovers, back in the day.</p>
</blockquote>
<p>In any of these cases, in order for the scripted plot to proceed, the non-player character can circle back to the thing they said that the player hasnt yet made an appropriate response to:</p>
<blockquote>
<p><strong>Johnny</strong>:But you didnt answer my question. <em>Repeats question</em>.</p>
</blockquote>
<p>or</p>
<blockquote>
<p><strong>Johnny</strong>: As I said before, <em>Repeats what he said before</em>.</p>
</blockquote>
<p>Again, for key plot characters, the voice actors can actually record multiple different canned texts of this form, so that, when played, they dont sound excessively repetitious.</p>
<p>In short, it doesnt seem to me that it would be at all hard to integrate free form voice interaction with a modern scripted video game. The advantage is that player interaction with non-player characters would become far richer and more engaging, and consequently it would be much easier to allow the player to progress through the plot without the default outcome of every encounter having to be a blood-bath.</p></div></div></div></body></html>