Designing Investigate Conversations

“In a lot of games, conversation is provided as a static menu: a character has topics; the player clicks through them; conversation is complete when all have been clicked.

How do we evolve conversation beyond this static paradigm?”

Jon Ingold
Heaven’s Vault

InkleStudio‘s Jon Ingold has written a sequel to his Sparkling Dialog talk, with 5 strategies for dialog gameplay.

Most narrative games employ a core mystery spooled out over the game to keep the readers curious and engaged. One problem with interrogative dialog is when the questions become a grind mechanic, and players feel obligated to “vacuum up” every last clue by exhausting the dialog options. NPCs are treated as kiosks rather than characters with agency who help drive the narrative.

Ingold offers 5 strategies to “keep characters feeling juicy, when the player simply wants to squeeze them dry”, including methods to transition in and out of conversations, and also allowing the NPC to take turns leading the conversation.

Read it on his Gamasutra blog.

Inky updated: images, CSS, and dark theme for web export

Inky the stand-alone editor for writing interactive Ink stories gets some polish that adds a few bells and whistles to the web exporter, including a tag for inserting images, clearing the screen, restarting the story, and a dark theme.

A shiny rewrite of the “Getting Started” tutorial shows off the new export-for-web features and aims to get budding interactive writers in shipshape for the upcoming Ink Jam 2018 on August 30th – September 3rd.

The Ink Unity Integration plugin was updated on July 30th, bringing both up-to-date with Ink 0.8.2.

An unofficial port of the Ink Integration Plugin for Unreal is on Github. Further digging will find Python and a few other ports.

Writing with Ink – Lists with an Oxford Comma

The guys at Inkle Studios have shared their method for printing a list using a recursion function on their Patreon page, but I found an easier method to insert an Oxford Comma when printing a list.

   - 0: No one is here. 
   - 1: Only {IsPresent} is here. 
   - 2: {LIST_MIN(IsPresent)} and {LIST_MAX(IsPresent)} are here. 
   - else: {IsPresent-LIST_MAX(IsPresent)}, and {LIST_MAX(IsPresent)} are here. 

In this example I’m grabbing the LIST_COUNT of IsPresent, and printing the contents  according to how many items there are.

With 3 or more in the list I subtract the LIST_MAX (the last item in the list) from the full list before printing, then insert a comma before printing the LIST_MAX.