Caramel Dialogue: Real Procedural Personalities

In previous GearHead games, dialogue trees had to be constructed manually. Each NPC could have an assigned dialogue tree, and random plots could override this with their own dialogue tree. This worked well but was labor intensive and somewhat inflexible.

GearHead Caramel does things a bit differently. When a conversation starts, a list of all the things this NPC could possibly say is generated. These get linked together into a dialogue using a process similar to a context-free grammar (it’s almost context-free; context-lite maybe?). For instance, a “Hello” node might link to an “Info” node or an “Open Shop” node. A “Mission Offer” node might link to “Accept Mission” and “Reject Mission” nodes. It’s also possible for a conversation node to come with pre-attached replies, for situations that don’t match any of the standard contexts.

These conversation nodes can come from a variety of sources. An NPC might have nodes directly assigned to it, such as a shopkeeper’s “Open Shop” node. A random plot might assign new dialogue nodes to an NPC, such as the “Mission Offer”, “Accept Mission”, and “Reject Mission” nodes that the mission-giver needs. It’s even possible for an NPC to receive dialogue nodes from a generic source, such as requests for information that you can ask to anyone living in a certain area or belonging to a particular faction.

Once the dialogue has been built, the last step is to construct the text. GearHead Caramel uses a token expansion system to procedurally generate a lot of the text used in the game. For instance, instead of assigning the NPC the dialogue “Hello. Nice to meet you!”, I can instead assign the tokens “[HELLO] [NICE_TO_MEET_YOU]”. The dialogue processor will check the grammar dictionary and replace tokens with appropriate text, recursing until no valid tokens remain. There are two main advantages of doing things this way: first, dialogue lines will be subtly different each time they’re seen, helping the world seem a little bit more alive. Second, this technique allows dialogue to be tailored for different personality traits and other character attributes. The grammar dictionary has multiple options for each token, sorted by tags. This helps characters to speak with a consistent voice, even though I don’t know who is going to be speaking a line when I write it.

The token expansion system is also used for the PC’s dialogue, so different player characters should sound different.

Don’t Hug Me I’m Scared

I’m not saying for sure that a new season of Don’t Hug Me I’m Scared is coming up in two weeks, but June 19th is fast approaching, and whatever happens I think Red Guy would want us all to be prepared.

For those who have never seen DHMIS, it’s a creepy musical puppet show about learning, friendship, and WHAT THE HELL DID I JUST WATCH. You can see all of the episodes on YouTube at the link above.

The Mechanical Tarot

The last big part of GearHead Caramel that I need to work out before making a release is the mechanical tarot system. It’s sort of but not exactly a random story generator, since the idea is for it to create an interactive situation rather than a sequence of events. Sort of like the difference between Fallout and Final Fantasy.

The system is loosely based on Smart Terrain Causality Chains, but instead of physical objects the puzzle pieces in this case describe abstract things about the scenario. Things like the roles and motivations of NPCs, or the environmental factors affecting a city. The player can trigger interactions between cards which change the situation. Cards enter play in a “face down” state and must be uncovered by the PC before they can interact.

To generate a scenario, first a desired outcome is chosen. For instance, a village suffering from drought might need a new moisture farm. The scenario generator then works backwards from the desired end point by finding card combinations that lead to it. A moisture farm might be generated by a broken moisture farm plus a water chip. The water chip might be found by bringing an ancient treasure map to a scholar. But the scholar has been falsely accused of murder, so first you need to clear their name… This scenario would begin with cards for the drought, the falsely accused scholar, the broken moisture farm, and the evidence to clear the scholar’s name.

One interesting thing about this scenario generator is that there is no guarantee things will end as planned. Depending on the cards generated, the player might do something completely different from the desired outcome chosen for the scenario. This is perfectly alright. The more cards in play, the greater the chance of unintended interactions being possible.

Because of this, the mechanical tarot scenarios have to be designed with the assumption that the end state is unknowable. I’ll describe how I’m handling that in a later post.

Progress Report

The western gate of Wujung, highway to the deadzone.

GearHead Caramel is getting closer and closer to a first real release. The character generator is working, the shops are working, the skill training interface is working, and missions are working. I’m adding a bit more content so Wujung doesn’t seem so empty; it should be ready to go soon.

(Of course, if you want to see what I’m doing right away, you could always download the development version from GitHub and run it with Python2/PyGame.)

In other news I’ve started a Patreon page for GearHead development. My immediate goal is to commission more artists to work on portrait bits and terrain tiles. This would speed things up immensely. Check it out if you think this is the kind of thing you could get behind.

Victory!

The fundraising campaign for GearHead Caramel was successful, and the image recoloring method has been translated to a C extension. The new version is literally 100x faster than the Python one. Changing portrait colors used to cause a noticeable delay, but now it’s instantaneous. Many thanks to A Bunch of Hacks for their good work!

Work on GearHead Caramel has been continuing at a good pace. In addition to the new recoloring extension, missions are now working in the DeadZone Drifter scenario and there are two new eyecatch screens by Thomas Noppers of Mutant Gangland fame.

If you ever arrive at this blog and it hasn’t been updated in a while, check my twitter feed in the right column. I’ve probably just gotten stuck in a loop of “I’ll update the blog when this thing is finished”, but in a roguelike game there is always something else to do…

Power Level Surging

For the past week and a half I’ve been raising money to hire some C++ programmers for GearHead Caramel, and I’m happy to say that we’re almost there! I’d like to thank everyone who has contributed, ordered art, or bought stuff from my itch.io shop.

Another $100 or so is needed before the programmers can start work. My regular commissions are still open, and I’m adding another option- for just $20 you can add yourself (or a custom character of your choosing) to the GearHead universe! I will provide files for use in GearHead 1, GearHead 2, and GearHead Caramel, as well as a full color version of the portrait suitable for use as a social media avatar.

If you’re interested in a portrait, just get in touch.

The Adventure System

Today I updated GearHead Caramel’s adventure system. This is the bit that allows temporary content to be added to a campaign and then removed later- the same kind of stuff as GearHead 1 and GearHead 2’s random plots.

GearHead Caramel inherited its plot system from Dungeon Monkey Eternal, and while DME has the ability to add and remove adventures to a campaign the method for doing so is awfully kludgy. I won’t go into the gory details here but suffice it to say you needed a dead pheasant and access to a graveyard at midnight.

In the refurbished adventure system, you can simply define an adventure object, and this will be inherited by all subplots. You can end the adventure or any individual subplot any time you like. Similarly, when you create a new scene you can define it as temporary. When the plot that created it ends, the scene is removed from the adventure (along with all of its children).

One problem right now is that if you end an adventure while the PC is still inside one of its temporary scenes, bad things happen. I’ve stuck a notice in the code that you should only end an adventure when the player character is leaving that area. I’m sure I’ll find all kinds of other problems, limitations, and unintended consequences as development continues.

Commissions Open for GearHead Caramel

In order to fund the hiring of some C++ programmers to write an open source PyGame extension for recoloring sprites, I’m opening social media avatar commissions. Want me to turn you into a zombie? Draw your OCs? Show what you’d look like as a post-apocalyptic hamster? Get in touch. And please, spread the word.

Fine Tuning the Portrait Generator

I’ve spent most of today fine tuning the portrait generator bits, moving the anchors around a pixel or two at a time, and I am now so burnt out on faces that I don’t even want to look in a mirror.

While researching how other artists draw cartoonish or caricatured faces, I found something that I hadn’t noticed before: many Japanese cartoonists draw the cheekbone really low. Instead of placing the sharp point of the cheek just under the eye, they’ll move it to under the nose or even beneath the mouth.

Left: Ataru Moroboshi from Urusei Yatsura by Rumiko Takahashi;
Right: Konata Izumi from Lucky Star by Kagami Yoshimizu.

I realize that this stylistic feature is probably old news to most people, but I am partially faceblind and this is a way to abstract faces that I never could have imagined. Sailor Moon creator Naoko Takeuchi does a lot of creative things with faces, and her use of this style is pretty interesting. For characters who are young or cute, she typically draws the cheekbone beneath the nose.

But for characters who are older, more serious or statuesque, the cheekbone rises to the level of the nose or all the way up to a realistic position right under the eye. I suspect that the lowered cheekbone resembles chubby cheeks, making a face look younger, rounder, and cuter.

I found some nice evidence for this theory in the character designs from Mobile Suit Gundam.

Cartooning is complicated stuff, especially when it looks really simple.

New GearHead Caramel Character Creator

I’ve been working on a new character generator for GearHead Caramel. This one is completely widgetified, and can be accessed using the mouse or the keyboard. Take a look at the video to see everything it can do.

I’m hoping to make the first release of DeadZone Drifter, the GHC endless play campaign, before the end of my February vacation. We’ll see how it goes.