1
0
Fork 0
mirror of https://bitbucket.org/oreolek/imaginary-realities.git synced 2024-05-17 00:18:26 +03:00

Uncommitted changes, what the shit.

This commit is contained in:
richard.m.tew@gmail.com 2015-07-25 09:09:19 +12:00
parent d9b5faeb25
commit 79ea59a791
8 changed files with 118 additions and 113 deletions

View file

@ -27,7 +27,7 @@
The quests and the “intelligent” scripted mobs are now large and vital parts of our MUD, but it still isnt quite the vision I had 10 years ago.
</p>
<h1>A cohesive MUD world with a working ecology</h1>
<h3>A cohesive MUD world with a working ecology</h3>
<p>
If I were to start a MUD from scratch today, with the knowledge I've gained over the years, Id go about it in a very different way. Id create a dynamic world that changes with the time of day and year, the weather and the seasons, with a working ecology system, where all plants and animals have a life cycle of their own, and where players also could affect the ecological balance with their actions — for better or worse.
</p>
@ -38,7 +38,7 @@
I dont know if such a MUD already exists somewhere. Ive never come across one myself. Yet almost all the elements needed already exist in my own home MUD, which is run on modified Circle code and the DG_scripts. If anyone knows of something like this already existing, Id appreciate a link, so I could visit and watch for myself. Otherwise, this is how Id go about it, if I were starting from scratch today:
</p>
<h1>The world</h1>
<h3>The world</h3>
<p>
Id go for a combination between a large, continuous grid and “normal zones”. The main world would be grid based, and Id definitely utilize the beautiful graphic maps from the Client app that KaVir developed for MUSHclient and so generously shared with the community.
</p>
@ -60,7 +60,7 @@
<p>
This is where the fun starts — because what would also be set by the code, based on the terrain on each grid square, would be a “fertility” value which would determine how much vegetation the square could sustain, and how fast it would grow. This value would be the basis for the entire ecology system. There should be a lot more terrains than the usual stock list, and naturally terrains like “field” or “prairie” would have a much higher fertility value than “mountain” or “desert”.
</p>
<h1>Time, seasons and weather</h1>
<h3>Time, seasons and weather</h3>
<p>
Time would naturally play a big role in the ecology system, and not just day and night changes. There is stock code for seasons, with weeks, months and years, which could be developed further. For instance, when farming you'd have to prepare the soil in early spring, then sow, then wait for the harvest in autumn. The outcome of the crop would depend on good tending and timing, (i.e., if you didn't plough or sow at the right time, there would be nothing to harvest).
</p>
@ -85,7 +85,7 @@
<p>
This brings us to the main feature:
</p>
<h1>The ecology system</h1>
<h3>The ecology system</h3>
<p>
The ecology system is controlled by five parameters:
</p>
@ -120,7 +120,7 @@
<p>
There would also be edible mushrooms, vegetables, roots, fruits, nuts and seeds, which animals and humans would compete for.
</p>
<h1>Human Development</h1>
<h3>Human Development</h3>
<p>
To this basic ecology, once it is balanced, I would then add the possibility for the players to farm the land and to fence it in, either to protect ones farming field from herbivores or to protect livestock from carnivores. You should be able to domesticate some animals, but if you fence them in, youd also have to feed and water them regularly.
</p>
@ -174,7 +174,7 @@
<p>
Still, too many bad choices on a too grand scale might result in a global disaster, comparable to a meteor strike. If the players actually manage to crash the system, it would mean permadeath for everyone and a full reboot of the world and player base.
</p>
<h1>Conclusion</h1>
<h3>Conclusion</h3>
<p>
Over the years bits and pieces of these ideas have been added to my own home MUD. We have farm fields, garden plots and orchards, a ranch to raise cattle in, and a large, working mine. You can fell trees, milk cows, shear sheep, skin most animals, and scrape and tan their hides into leather. There is also an extensive mob-run trading system in place. But its still just “bits and pieces”, and Im really tempted to try the full ecology system out in a full scale.
</p>

View file

@ -2,7 +2,7 @@
{% block page_title %}
Dispelling the gloom
{% endblock %}
{% block article_authors %}<span class="author-nick">Akeley</span> (Tomasz Gruca){% endblock %}
{% block article_authors %}Tomasz <span class="author-nick">Akeley</span> Gruca{% endblock %}
{% block article_date %}2nd June 2015{% endblock %}
{% block article_byline %}
{{ super() }}

View file

@ -35,13 +35,13 @@ The second use of ASCII, where we see “text” come to the fore instead of “
<p>
Taking this idea of cryptic messages even further, some roguelikes have used text to offer clues, hints or puzzles to the player, without generally explicitly stating them as such, and relying on the players intuition and understanding of how roguelike designers think to get them through safely. <span class="gametitle">ADOM</span>, for example, contains a massive range of possible statues the player can encounter. These all have a unique description, and the majority also contain a written inscription which, along with the description of the statues (often unusual) appearance, forms the second part of an implicit riddle. Take, for example, this statue description from <span class="gametitle">ADOM</span>:
</p>
<p>
<p class="quotetext">
“This is the statue of a tall human magician, clothed in a long tunic. A decided expression is on his face, and a beautifully-sculpted flame raises from his extended hand.”
</p>
<p>
The statue bears the inscription “Ubun, the fire elementalist. Igne nature renovatur integra”, which translates from Latin approximately to “nature is renewed by fire”. Similarly, consider another statue, described thus:
</p>
<p>
<p class="quotetext">
“It resembles a huge egg, hewn from polished granite.”</span>
</p>
<p>
@ -50,7 +50,7 @@ Its inscription reads “Only a fool would try to break me”. If one prays at t
<p>
A trickier statue to decipher is this:
</p>
<p>
<p class="quotetext">
“Delicately carved from granite and smoothly polished, a young, lithe woman lies prostrate on an ornate settee. She is clothed in thin, revealing attire, with one hand resting wearily against her forehead, and the other reaching languidly outwards. Her posture suggests great personal despair.”</span>
</p>
<p>
@ -75,7 +75,7 @@ Anyone who has been following <span class="gametitle">Ultima Ratio Regum</span>
</div>
</p>
<p>
The intention is to have the game generate a range of different forms of text. For example, as it stands now, the world contains a vast history, but this is crucially a history put into <span class="italicd">narrative</span> rather than simply presented as “fact” a la <span class="gametitle">Dwarf Fortress</span>  different nations will produce competing histories, and histories must be uncovered, and will continue to resonate in the world the player explores. Settlements and individuals are replete with <span class="italicd">informative nicknames that speak to their history, ideologies, or achievements, without simply resorting to piecing together two random words; procedural books will generate telling of historical events, or narratives which give the player hints (so a novel about a certain citys jail might give the player some subtle information about that jail, which may prove useful); procedural poetry will speak to important figures from the worlds past and present; the conversations one has with NPCs should yield useful data about their nations, cultures, religions, social norms and biases, and the like, without ever being too obvious about it. I should note I in no way mean the comment earlier in this paragraph to disparage <span class="gametitle">Dwarf Fortress</span>, glorious masterwork that it is, but rather to emphasise my interest here in semantic procedural generation where <span class="italicd">the player can divine deeper meaning from everything they read, rather than a procedurally-generated world where meaning and ideology are not the focus of the games design (since obviously <span class="gametitle">DF</span> has a thousand other design goals which <span class="gametitle">URR</span> does not). Equally, by making this all procedurally-generated, the player should never be able to learn that Inscription X is guaranteed to refer to Secret Y — this should be unique each time (though the player can of course learn the meta-rules which govern this type of interaction, which is an important part of roguelike mastery). A core part of this is the development of what I am loosely calling a “semantic converter” — still in development (but coming along nicely) at time of writing, this is a section of code which needs to be able to take any piece of <span class="italicd">data</span>, and transform it into any possible type of <span class="italicd">clue</span>. What I mean by this is the game must be able to input a date, a time, a persons nickname, the design on a vase, the colour of brick in a particular civilization, the name of a painting, a historical battle, or anything else, and then <span class="italicd">convert it, regardless of what it is, into a piece of poetry, a novel, something an NPC might say to you, a painting, a symbol or a sign, a holy book, a shop sign, or anything else which hints the player towards the underlying meaning and origin of what they read.
The intention is to have the game generate a range of different forms of text. For example, as it stands now, the world contains a vast history, but this is crucially a history put into <span class="italicd">narrative</span> rather than simply presented as “fact” a la <span class="gametitle">Dwarf Fortress</span>  different nations will produce competing histories, and histories must be uncovered, and will continue to resonate in the world the player explores. Settlements and individuals are replete with <span class="italicd">informative</span> nicknames that speak to their history, ideologies, or achievements, without simply resorting to piecing together two random words; procedural books will generate telling of historical events, or narratives which give the player hints (so a novel about a certain citys jail might give the player some subtle information about that jail, which may prove useful); procedural poetry will speak to important figures from the worlds past and present; the conversations one has with NPCs should yield useful data about their nations, cultures, religions, social norms and biases, and the like, without ever being too obvious about it. I should note I in no way mean the comment earlier in this paragraph to disparage <span class="gametitle">Dwarf Fortress</span>, glorious masterwork that it is, but rather to emphasise my interest here in semantic procedural generation where <span class="italicd">the player can divine deeper meaning</span> from everything they read, rather than a procedurally-generated world where meaning and ideology are not the focus of the games design (since obviously <span class="gametitle">DF</span> has a thousand other design goals which <span class="gametitle">URR</span> does not). Equally, by making this all procedurally-generated, the player should never be able to learn that Inscription X is guaranteed to refer to Secret Y — this should be unique each time (though the player can of course learn the meta-rules which govern this type of interaction, which is an important part of roguelike mastery). A core part of this is the development of what I am loosely calling a “semantic converter” — still in development (but coming along nicely) at time of writing, this is a section of code which needs to be able to take any piece of <span class="italicd">data</span>, and transform it into any possible type of <span class="italicd">clue</span>. What I mean by this is the game must be able to input a date, a time, a persons nickname, the design on a vase, the colour of brick in a particular civilization, the name of a painting, a historical battle, or anything else, and then <span class="italicd">convert</span> it, regardless of what it is, into a piece of poetry, a novel, something an NPC might say to you, a painting, a symbol or a sign, a holy book, a shop sign, or anything else which hints the player towards the underlying meaning and origin of what they read.
</p>
<p>
This, suffice to say, is no easy task.

View file

@ -2,10 +2,19 @@
{% block page_title %}Introduction{% endblock %}
{% block other_content %}
<p>
What a pleasant surprise this must be for you? An issue of Imaginary Realities unexpectedly appearing wherever it was you were looking for whatever else it was you were wanting. But instead you got another issue, bonus! I only wish we had more articles for you, not just the two great ones we do have. But that's merely an opportunity for you to step up and write one for us.
And another issue is out. Thanks to our authors and the editing team, this is our third issue this year. Add to that our new website, and things are looking good!
</p>
<p>
If you're interested in writing an article on text-based gaming, please <a href="request-for-content/index.html">get in touch</a>. Most offers to write articles come from people who suggest ideas they could write about, and I say "They all sound great! Write any of them and send it in! Write two!" Okay, I don't say "Write two!" But you could, if you really wanted to.
The e-books are temporarily unavailable. We have a new website you may have noticed, and there's a lot of work involved, which means we're currently not providing everything we used to. The website is generated from exported versions of the articles, extracted from Google Docs. And we do have the same generation making the PDF and EPUB e-books we've been providing in the past, and that generation does work, but unfortunately the generated results are somewhat ugly. When someone has found the time to sort that out, the e-books will be back.
</p>
<p>
Are you really missing the e-books? If so, you might be interested to know what <a href="https://bitbucket.org/rmtew/imaginary-realities">the source code</a> used to generate our website is open source. You can help out with this, and other things you might think would improve this project, and send a pull request our way for your changes. If you can't access the link provided, try again later, it's likely we've taken it offline while another issue is in the process of being published.
</p>
<p>
Changes to the conditions we make for submitted articles are also happening. Nothing major, this publication is always going to be non-commercial, and no-one is going to get paid a single dime for anything. However, some of the submitted articles have been first drafts, and from now on we'll be asking authors to go over their articles and polish them in order to reduce some of the work required by the editors and proofreaders.
</p>
<p>
If you're interested in writing an article on text-based gaming, please <a href="../request-for-content/index.html">get in touch</a>. Most offers to write articles come from people who suggest ideas they could write about, and I say "They all sound great! Write any of them and send it in! Write two!" Okay, I don't say "Write two!" But you could, if you really wanted to.
</p>
<p>
Anyway, enjoy the articles!

View file

@ -2,7 +2,7 @@
{% block page_title %}
Legend and the lore
{% endblock %}
{% block article_authors %}Hugo Zombiestalker{% endblock %}
{% block article_authors %}<span class="author-nick">Hugo Zombiestalker</span>{% endblock %}
{% block article_date %}3rd May 2015{% endblock %}
{% block article_content %}
<p>
@ -61,9 +61,7 @@
Dialogue is not nearly as important for MUD quests as it is in adventure games, but if you've got a quest where there's dialogue, it needs to be impactful. I think mild humour is important even in the most serious environment. Don't let dialogue slide, and don't think you should remove humour simply because your story is dark and gritty. Humour is natural, and it helps bring players into your world. It's sort of the masseuse your mind needs in order to get through the really hard stuff. The reverse is also true. I read a book on how to write humour, and a key feature was about presenting serious situations and letting ridiculous things happen. The film <span class="publicationtitle">Death at a Funeral</span> (UK) is a great example; it's a black comedy, but the same idea applies. The serious situation: the funeral. The humour: pretty much everything that is said. Heres an excerpt from the video game <span class="gametitle">Grim Fandango</span> that mixes comedy with the macabre:
</p>
<p class="quotetext">
Hector LeMans: Oh Manny... so cynical... What happened to you, Manny, that caused you to lose your sense of hope, your love of life?
</p>
<p class="quotetext">
Hector LeMans: Oh Manny... so cynical... What happened to you, Manny, that caused you to lose your sense of hope, your love of life?<br/>
Manuel Calavera: I died.
</p>
@ -85,15 +83,11 @@
<h3>How does it work?</h3>
<p>
The codex system is quite simple mechanically. There are X amount of entries per “collection”. When you discover and unlock all the entries of a collection, you gain rewards that can include faction reputation, titles, experience points, and so on. Each entry the story) varies in length, so if a story contains four stages, you must unlock that entry four times to get the complete story. You find and loot items from around the game world (usually in the location stated in the entries category) and use these items to unlock the narrative. Let's take a look at the entry <span class="italicd">The Foul Within [3/3]. As you can see, it has three stages. The material below is from the first stage, and it tells us what is required to unlock the next part:
</p>
<p>
<span class="boldd">Entry:</span> The Foul Within
</p>
<p>
<span class="boldd">Text:</span> It always starts off bad and turns worse. Some could say my case started worse and turned bad. Who can tell? We've all lived and lost in this crazy thing we call the apocalypse, but one thing we can all agree on is this: some lose more than they deserve, and others live more than should. When I looked at the remains of my three year old daughter, I knew then that life was never the way I had imagined it, and that for all my years I had been living behind an illusion illuminated by spotlights and shadows on the walls projected by invisible creatures none of us would ever like to see.
The codex system is quite simple mechanically. There are X amount of entries per “collection”. When you discover and unlock all the entries of a collection, you gain rewards that can include faction reputation, titles, experience points, and so on. Each entry the story) varies in length, so if a story contains four stages, you must unlock that entry four times to get the complete story. You find and loot items from around the game world (usually in the location stated in the entries category) and use these items to unlock the narrative. Let's take a look at the entry <span class="italicd">The Foul Within [3/3]</span>. As you can see, it has three stages. The material below is from the first stage, and it tells us what is required to unlock the next part:
</p>
<p>
<span class="boldd">Entry:</span> The Foul Within<br/>
<span class="boldd">Text:</span> It always starts off bad and turns worse. Some could say my case started worse and turned bad. Who can tell? We've all lived and lost in this crazy thing we call the apocalypse, but one thing we can all agree on is this: some lose more than they deserve, and others live more than should. When I looked at the remains of my three year old daughter, I knew then that life was never the way I had imagined it, and that for all my years I had been living behind an illusion illuminated by spotlights and shadows on the walls projected by invisible creatures none of us would ever like to see.</br>
<span class="boldd">Next unlock:</span> 1x sleeping pill with a quality of misc, 1x faded photograph and 2x diary entry with a quality of misc.
</p>
<p>

View file

@ -19,7 +19,7 @@
Articles should not have been previously published. If they have been previously published, they should be substantially revised to be made current, perhaps to address a changing situation, or even a changed viewpoint. Fiction will be accepted, as long as its relationship to the above topics can be determined by a reader.
</p>
<p>
Articles should be in the range of 1000-4000 words. Longer articles are possible for serialisation, with approval required.
Articles should be in the range of 1000-4000 words. Longer articles are possible for serialisation, with approval required. After your initial draft of an article has been written, please go over it and fix any errors and make any improvements you are able to identify before submitting it.
</p>
<h3>Letters</h3>
<p>

View file

@ -2,7 +2,7 @@
{% block page_title %}
The bonds of mudding
{% endblock %}
{% block article_authors %}Clint <span class="author-nick">Itan Kuranes</a> Knapp{% endblock %}
{% block article_authors %}Clint <span class="author-nick">Itan Kuranes</span> Knapp{% endblock %}
{% block article_date %}10th May 2015{% endblock %}
{% block article_content %}
<p>

View file

@ -8,49 +8,53 @@
<p>
The following extract is taken from a large, popular MUD. Not mine, because mine is currently neither large, nor popular. I won't mention the name, because it's not my intention to “call out” anyone about this problem. This is just to indicate that it's a norm that we expect within our games:
</p>
<p class="quotetext">
<span class="command">&lt;NPC&gt; attempts to tidy up the shop a bit.</span><br/>
<span class="command">&lt;NPC&gt; occasionally mutters something about a lawsuit against a certain &lt;NPC2&gt;.</span><br/>
<span class="command">&lt;NPC&gt; says: Do you have a voucher? You can exchange it here.</span><br/>
<span class="command">&lt;NPC&gt; says: I'm sure I'll win if &lt;NPC2&gt; takes me to court.</span><br/>
<span class="command">&lt;NPC&gt; says: Feel free to browse the stock.</span><br/>
<span class="command">&lt;NPC&gt; says: Feel free to browse the stock.</span><br/>
<span class="command">&lt;NPC&gt; rearranges his hat.</span><br/>
<span class="command">&lt;NPC&gt; says: I'm sure I'll win if &lt;NPC2&gt; takes me to court.</span><br/>
<span class="command">&lt;NPC&gt; exclaims: That spell was mine, &lt;NPC2&gt;stole it!</span>
</p>
<pre class="code">
&lt;NPC&gt; attempts to tidy up the shop a bit.
&lt;NPC&gt; occasionally mutters something about a lawsuit against a certain &lt;NPC2&gt;.
&lt;NPC&gt; says: Do you have a voucher? You can exchange it here.
&lt;NPC&gt; says: I'm sure I'll win if &lt;NPC2&gt; takes me to court.
&lt;NPC&gt; says: Feel free to browse the stock.
&lt;NPC&gt; says: Feel free to browse the stock.
&lt;NPC&gt; rearranges his hat.
&lt;NPC&gt; says: I'm sure I'll win if &lt;NPC2&gt; takes me to court.
&lt;NPC&gt; exclaims: That spell was mine, &lt;NPC2&gt;stole it!
</pre>
<p>
The NPC says the same few things, on a loop, forever. You can try to get a rise out of him:
</p>
<p class="quotetext">
<span class="command">&gt; push &lt;NPC&gt;</span><br/>
<span class="command">You push &lt;NPC&gt; over making him sit down.</span><br/>
<span class="command">&lt;NPC&gt; stands up.</span><br/>
<span class="command">&lt;NPC&gt; says: Please ask about talkers if you're not sure.</span>
</p>
<pre class="code">
&gt; push &lt;NPC&gt;
You push &lt;NPC&gt; over making him sit down.
&lt;NPC&gt; stands up.
&lt;NPC&gt; says: Please ask about talkers if you're not sure.
</pre>
<p>
Or violate his civil rights:
</p>
<p class="quotetext">
<span class="command">&gt; slap &lt;NPC&gt;</span><br/>
<span class="command">You slap &lt;NPC&gt;.</span><br/>
<span class="command">&lt;NPC&gt; says: Please ask about talkers if you're not sure.</span><br/>
<span class="command">&lt;NPC&gt; rearranges his hat.</span>
</p>
<pre class="code">
&gt; slap &lt;NPC&gt;
You slap &lt;NPC&gt;.
&lt;NPC&gt; says: Please ask about talkers if you're not sure.
&lt;NPC&gt; rearranges his hat.
</pre>
<p>
It rarely seems to make a difference. The NPC just stands there, wittering through the same tiny collection of chats — a bit of window-dressing that is utterly, irrevocably disconnected from what's happening around it. It's unsatisfying. It's hugely unsatisfying, and on <span class="gametitle">Epitaph</span> we were as guilty of it as anyone. More, in fact, because I never really saw the point of these “vend a chat” type NPCs having much to say. Spending too long in the same room with such an NPC, it would grate painfully on my nerves and I'd find myself having to move elsewhere. As such, our NPC value came from their collection of responses. Each of our NPCs have keywords that, when you ask about them, give a little bit of lore and guidance. Those who played the Ultima games will recognise the conversational style:
</p>
<p class="quotetext">
<span class="command">&gt; ask shawn about winchester</span><br/>
<span class="command">You ask Shawn a question about "winchester".</span><br/>
<span class="command">Shawn whispers to you: This is perhaps the safest place in the entire city - we're far enough away from the hotspots that the zombies rarely wander this far, and even when they do we have enough people here to keep them out. You could think of us as something like the Switzerland of Dunglen - we're neutral in everything so everyone finds us useful enough to support.</span>
</p>
<pre class="code">
&gt; ask shawn about winchester
You ask Shawn a question about "winchester".
Shawn whispers to you: This is perhaps the safest place in the entire city -
we're far enough away from the hotspots that the zombies rarely wander this
far, and even when they do we have enough people here to keep them out. You
could think of us as something like the Switzerland of Dunglen - we're
neutral in everything so everyone finds us useful enough to support.
</pre>
<p>
Our NPCs also had “vend a chat” characteristics, and they'd go through the same tired set of six or so chat strings on a semi-random basis. It's a convention that is deeply ingrained into CRPGs — the memetic “arrow to the knee” in Skyrim is the same problem writ into the bones of a game that prides itself on how immersive it can be. You need to look beyond our usual conventions of RPG game-play to realise why this is such a poor state of affairs if you want a world that genuinely feels alive — truth be told, we're mostly numb to it. So, within <span class="gametitle">Epitaph</span> we resolved to find a way to make our NPCs more passively interesting. We wanted to have NPCs that felt as if they were engaging directly with you, remembering who you were, and also maintaining relationships with the other NPCs around them. We've now put the first version of that in the game, and we're working hard to improve how versatile and interesting the system is.
@ -94,33 +98,33 @@ Next, we needed ways to manipulate that mood. For this, we created “mercurials
That gave us a way to give NPCs variable moods, but we also needed to solve the vend-a-chat problem. We did this by associating chat strings on a mercurial basis, rather than on a mood or NPC basis. NPCs started to say things depending on which mercurials they had applied. An NPC with the “hungry” mercurial might complain about a rumbling stomach or ask if anyone has any food to spare. An NPC that had to spend the night sleeping on the floor might complain about aches and pains. An NPC that gave a player a mission they failed might mutter about their unreliable allies. However, to make sure that the mercurial chats were appropriate we also added a “mood context” which included “what added this mercurial”, “when did they add this mercurial”, and “what other information do I need to know about this mercurial”. Thus, a chat string within a mercurial mood might look like this:
</p>
<p class="quotetext">
<span class="command">"say I would like to kick $cap_applied$ right in the backside."</span>
</p>
<p class="code">
"say I would like to kick $cap_applied$ right in the backside."
</p>
<p>
When the game says to an NPC “it's time for you to say something”, it'll look for which mercurials have been been applied, what contexts it has for those moods, and then it'll construct a chat that is appropriate:
</p>
<p class="quotetext">
<span class="command">"say I would like to kick Drakkos right in the backside."</span>
</p>
<pre class="code">
"say I would like to kick Drakkos right in the backside."
</pre>
<p>
In addition to the <span class="code">$applied$</span> token, there's also extra information that we can provide. We provide a hash-table of these when we apply the mercurial, so we might have the following available: <span class="code">([ "argument" : "stealing from me" ])</span>. That permits chats such as:
</p>
<p class="quotetext">
<span class="command">"say I would like to kick $cap_applied$ right in the backside for $argument$."</span>
</p>
<pre class="code">
"say I would like to kick $cap_applied$ right in the backside for $argument$."
</pre>
<p>
That becomes:
</p>
<p class="quotetext">
<span class="command">"say I would like to kick Drakkos right in the backside for stealing from me."</span>
</p>
<pre class="code">
"say I would like to kick Drakkos right in the backside for stealing from me."
</pre>
<p>
Now, none of these chats are great literature, and that remains true of the chats we currently have in the game. That's a small problem, though — the key thing is that our NPCs can now start to act like they are connected to the game world. If they pass a skill check, they might say something like “I didn't realise I was so good at climbing over obstacles”. If they critically pass, they might say “Nobody in the world is better than me at climbing over obstacles”. If things have been going good for a while, they might start humming cheerfully or cracking jokes. If things have been going badly, they'll be waspish and snap at people, and be less likely to look on the bright side in their own random interactions.
@ -140,62 +144,60 @@ Mercurials also come with responses, and so NPCs can respond based on what mood
In addition to the chats being drawn from NPC moods, we also wanted them have little bit more naturalistic variability, as they are in real life. I didn't want it to just be “I would like to kick <span class="code">$cap_applied$</span> right in the backside” every time, I wanted that to have natural modifications. So, in addition to the global tokens applied from the mood, each chat also has some local tokens that give potential variability that can be slotted in in place of fixed text. For example, this is the (almost) full code of one of our existing mercurials (I removed some of the naughty words, and unset fields; <span class="gametitle">Epitaph</span> is mature content, so NPCs that need a cigarette are likely to swear at you):
</p>
<p class="quotetext">
<pre class="code">
::item "needs a cigarette"::
::-&gt;description:: "You really need a smoke."
::-&gt;chats:: ({
  "I could really do with $a_smoke$.",
  "I need $a_smoke$ to $calm$.",
  "I'm $tense$ - need $a_smoke$.",
})
::-&gt;actions:: ([
  (: 1 :) : ": hums tensely.",
  (: 1 :) : ": stomps around grumpily.",
])
::-&gt;categories:: ({ })
::-&gt;duration:: MERCURIAL_DURATION_SHORT
::-&gt;mood:: MERCURIAL_MODERATE
::-&gt;intensity:: MERCURIAL_INTENSITY_LOW
::-&gt;random_assignment:: 0
::-&gt;can_stack:: 1
::-&gt;local_tokens:: ([
  "smoke" : ({
    "smoke",
    "fag",
    "cigarette",
    "good hit of nicotine",
  }),
  "calm" : ({
    "calm my nerves",
    "calm myself",
    "take the edge off",
  }),
  "tense" : ({
    "tense",
    "on edge",
    "all jangly",
  }),
])
</pre>
</p>
<pre class="code">
::item "needs a cigarette"::
::-&gt;description:: "You really need a smoke."
::-&gt;chats:: ({
  "I could really do with $a_smoke$.",
  "I need $a_smoke$ to $calm$.",
  "I'm $tense$ - need $a_smoke$.",
})
::-&gt;actions:: ([
  (: 1 :) : ": hums tensely.",
  (: 1 :) : ": stomps around grumpily.",
])
::-&gt;categories:: ({ })
::-&gt;duration:: MERCURIAL_DURATION_SHORT
::-&gt;mood:: MERCURIAL_MODERATE
::-&gt;intensity:: MERCURIAL_INTENSITY_LOW
::-&gt;random_assignment:: 0
::-&gt;can_stack:: 1
::-&gt;local_tokens:: ([
  "smoke" : ({
    "smoke",
    "fag",
    "cigarette",
    "good hit of nicotine",
  }),
  "calm" : ({
    "calm my nerves",
    "calm myself",
    "take the edge off",
  }),
  "tense" : ({
    "tense",
    "on edge",
    "all jangly",
  }),
])
</pre>
<p>
Inside the chats are local tokens such as <span class="code">$a_smoke$</span> and <span class="code">$tense$</span>. When a chat is selected, a random element from the right hand side of the <span class="code">local_tokens</span> mapping is selected and put in place of the original token. So, a selected chat may be:
</p>
<p class="quotetext">
<span class="code"> "I'm $tense$ - need $a_smoke$.",</span>
</p>
<pre class="code">
"I'm $tense$ - need $a_smoke$.",
</pre>
<p>
When this is selected and processed, it might end up being parsed as any of:
</p>
<p class="quotetext">
<span class="command">I'm on edge - need a fag.</span><br/>
<span class="command">I'm tense - need a good hit of nicotine.</span></br>
<span class="command">I'm all jangly - need a smoke.</span>
</p>
<pre class="code">
I'm on edge - need a fag.
I'm tense - need a good hit of nicotine.
I'm all jangly - need a smoke.
</pre>
<p>
Thus, a single mood may only have a small number of chats attached, but each of those chats may have dozens, or hundreds, or thousands of possible variations. We're only limited in that respect by our imaginations. This system has been so useful for providing small variation around a theme that it has been ported over to our room chats — that's another area in which I've long felt MUDs don't do things well enough, and also another area for discussion in a later article.
</p>