This member has provided no bio about themself...

RSS My Blogs

Developer Blog: Design Tool (and more models)

conradcn Blog 1 comment

For the past week, we've been working on a very important part of our development: the design tools. Modders should take notice too, as we're planning on releasing these either with the finished game or soon after it's done.

The design tools were developed in C# with Windows Forms, and give a pretty good idea of how the game's story is structured. Currently, the whole thing is split into two programs: the general design tool and the story design tool.

Character Archetypes:

The stories in The Kingsport Cases are incredibly complicated and branching because of the procedural writing, so we need tools to organize the huge amounts of information we need to deal with. The central units of all of this is, as with any story, the characters involved.


In this game, we want characters to be able to repeat believably across multiple stories. That means that, instead of writing specific characters, we need to write character roles. The characters themselves are different from playthrough to playthrough, but each character placed into a story has a role to fill. These roles are tied to every part of the story, from their goals (Plot Directives) to the knowledge they have and their relationship with the player.

Procedural Dialogue, and why we're not crazy

Each personality and trait has a set effect on relationships with other characters (an introverted person is going to find a bubbly person annoying, for example), and these relationships have an important role in dialogue. For the dialogue to take all of this into account, we can't just set up dialogue trees for every possible set of cases in existence. That would take literally hundreds of years, and we don't have that kind of budget. That's where our special dialogue tool comes in.

This tool lets the user craft dialogue that can be chosen from a common pool, instead of from a tree. This is one of the important features that makes The Kingsport Cases possible. It essentially boils down to units of dialogue called "Social Moves." These social moves are comprised of a list of intents and preconditions, which determine whether it makes sense for the move to be used (for example, a character may not be nice to you if they plan to murder you).
After that, it chooses an result based on more specific preconditions (if you try to flirt with someone who hates your guts, they will reject you, for example). Here, the script that the dialogue follows is chosen based on a set of conditions, as well as a set of effects to your relationship, knowledge, and other factors. Additionally, it can add a bit of knowledge to the characters' "gossip pools" (a concept borrowed from Prom Week), which can be referred back to later to describe why NPCs act the way they do ("You didn't give me pancakes when I asked, and you want me to risk my life for you?!").
And that's basically the heart of our social engine. In a week or so, I'll talk about how this ties in with knowledge and plot progression (here's a hint: It's also procedurally generated)

More models

We don't have any in-engine screenshots yet because we've been focusing on this (without a design tool, we can't get started on the writing, which is the most time-consuming part of the endeavor), but we should have something shiny for you next week. Until then, enjoy the new set of daily models:

More models

We don't have any in-engine screenshots yet because we've been focusing on this (without a design tool, we can't get started on the writing, which is the most time-consuming part of the endeavor), but we should have something shiny for you next week. Until then, enjoy the new set of daily models:


Observatory

Storage room

Boiler room

Library

Closet

Library

Developer blog: Introduction and 3D content

conradcn Blog 4 comments

Welcome to The Kingsport Cases:

A horror game you can never really get used to.


Everyone says we should start a blog chronicling the rise (and hopefully not the fall) of our indie game company, Machines in Motion. So here it is, the first post.

I'd like to start this off by expressing our surprise that anyone is actually reading this. Good on you. You can say you read this blog before it was cool, or, if you're seeing this in the future, you can tell all of your martian friends that you went all the way back through our archives. Either way, thanks. You're a dedicated fan.

But let's get to the topic at hand:

The Kingsport Cases is a survival horror game centered around unraveling mysteries in an ever-changing world filled with deep characters, environments, and plots. It has fully procedurally-generated everything, allowing for thousands of unique stories, each different from any other, but connected by characters that can recur and remember your interactions with them. Be nice, and they may reward you with information in the future. Almost get them killed though, and you might see them again as a cult leader with a personal vendetta.

The game's technical challenges lie mostly in writing. Creating the sheer quantity of dialogue needed to make hundreds of unique characters across many plot lines is no mean feat, and we'll get to how we're doing that in a later developer post.

But, for now, let's talk about an easier problem: Level generation.

Levels are generated using a graph-based system. Each room has a node that can connect to a specific type of other room (such as a hallway or bedroom). Each story archetype has a list of rooms it needs, and the level generation algorithm fills in the rest, throwing rooms, blood-soaked daggers, monster portals, and other bits and pieces in as needed. Levels are additionally optimized to enforce exploration, and vital clues will be placed in disparate parts of the world, forcing players to walk through the entire mansion to get everything they need.
This system poses a problem though: we need a lot of 3D models of environments, especially because we're trying to make the levels unique across many cases that use the same tile set. To this end, we will be making one room model or texture per day, and posting the results here, in addition to our engine work.

Here's the backlog from the past five days (plus a couple bonus models):