Welcome, Guest. Please login or register.

Login with username, password and session length

 
Advanced search

1411560 Posts in 69384 Topics- by 58443 Members - Latest Member: junkmail

May 03, 2024, 03:22:00 PM

Need hosting? Check out Digital Ocean
(more details in this thread)
TIGSource ForumsCommunityDevLogsPrimetime Detective: a procedural crime procedural
Pages: [1]
Print
Author Topic: Primetime Detective: a procedural crime procedural  (Read 3596 times)
Graham
Level 0
**


View Profile
« on: September 15, 2016, 12:39:07 PM »



Primetime Detective is a procedural crime procedural.

Procedural: Meaning the game dynamically generates suspects and crimes so no two playthroughs are the same.

Crime: It's your job to solve the crimes by interrogating suspects, directing your team to investigate the evidence, and deciding who to accuse.

Procedural: The game takes place within a procedural television series, and you need to not only solve crimes but do so in a way that interests an audience, increases your ratings, and keeps your show on the air.


The game could be described as Columbo meets Crusader Kings or Papers, Please meets Perry Mason.

I've been working on it on-and-off (mostly off) for a long time. I have a full-time job and a six-month-old son, so it's currently crammed into the tiny amount of spare time I have in the evenings.

What I want Primetime Detective to be

A game in which:

You feel like a TV detective - I hope to make a game where solving mysteries means solving an actual mystery and not simply revealing a pre-defined story the game spools out for you, and where the tools you use to do so are the tools of a detective, including asking questions, reviewing evidence, and drawing connections.

You are rewarded for picking interesting options - In roguelikes, I drink every unidentified potion I find because that's the funniest, most exciting thing I can do. I want to make a game in which picking the funniest, most exciting option is how you win.

You fail forward - Strongly related to the point above. I really like the game Masq, a soap opera-like piece of interactive fiction which branches substantially over its short running time. Any decision you make can have horrible, unintended consequences, but the game doesn't end and the story continues. It's all scripted, but it still feels like collaborative storytelling.

The interface tells the story - The core of the interface is a 'conspiracy wall', on which players can pin polaroids, relevant clippings, draw strings between them to indicate relationships, and write notes. The wall should also be marked and change over time.

What it is right now

It generates people with personalities, relationships and faces; it creates inciting events, prompts murder to happen, and attributes motive; you can move polaroids around and draw on them and connect them with string.

There's a parser, which processes formatted .txt files (so I can write quickly) and turns them into the screenplay that appears at the bottom of the screen and the questions the player can ask. There's a rudimentary AI for suspects to decide whether they should lie to you or blame someone else.

There's a rough structure to episode, as they advance through 'acts' of the story, with twists and limits on how many actions you can take.

What it is not yet

You can't yet play through a single case from beginning to end, which is obviously a major milestone. There's much procedural generation work still to do, in terms of how it generates the crimes and lines for the script. All of the art is placeholder. There are going to be 'cast members', who have more scripted (less procedural) stories and who act as essentially the player's skills/abilities. Only two of them are implemented and only in their most rudimentary form.

It's not yet playable and it's not yet fun and it's not yet a thing I know will ever be fun. I'm trying to take the shortest route to reach that point.

I'll try to update this devlog regularly as I work on new things, and explain the systems I've already done. If anyone has any feedback or questions, please share them - I don't know what I'm doing.
Logged
FK in the Coffee
Level 10
*****


meme pixels


View Profile
« Reply #1 on: September 15, 2016, 02:32:09 PM »

I'm really intrigued by the premise! Definitely looking forward to seeing more.
Logged
growbotgame
Level 0
**



View Profile WWW
« Reply #2 on: September 16, 2016, 02:41:31 AM »

I'm creating the art for this game and really excited to start work on the visuals Smiley
Logged
SiJaf
Level 0
**



View Profile WWW
« Reply #3 on: September 16, 2016, 03:31:47 AM »

I really like the concept!  Hand Thumbs Up Left

I think getting a compelling procedural criminal case working is already a good challenge, but you even upped the ante with adding the television audience feature. That aspect reminds me of old hollywood movie management games I used to play (Hollywood Pictures, The Movies or kinda MadTV) or recent Kairosoft games. If you can get the feedback loop  right and players can anticipate what actions create positive audience reactions, it can become really addictive.

Looking forward to hear more.
Logged

Graham
Level 0
**


View Profile
« Reply #4 on: September 16, 2016, 10:34:23 AM »

Thanks for the kind words all!

That aspect reminds me of old hollywood movie management games I used to play (Hollywood Pictures, The Movies or kinda MadTV) or recent Kairosoft games. If you can get the feedback loop  right and players can anticipate what actions create positive audience reactions, it can become really addictive.

I really dug The Movies; it had flaws but always seemed the kind of game that had so much potential that it deserved a sequel.
Logged
Sankar
Level 0
***



View Profile WWW
« Reply #5 on: September 16, 2016, 09:03:08 PM »

Looks very interesting, Hope to see more!
Logged

Graham
Level 0
**


View Profile
« Reply #6 on: June 05, 2017, 01:43:47 PM »

I'm alive! I'm still working on Primetime Detective. Making games on the side with a full-time job and a one-year-old is /hard/.

Nothing has visibly changed about the game since I first posted about it, but lots has changed behind the scenes. Most of this time has been focused on the parser, which takes the raw .txt files I write and transfers them into the game.

These text files are 'storylets' - small pieces of narrative that prompt the player to make a decision - in a similar mould to Fallen London or other interactive fiction games. They also confer structural information (what other storylets they link to) and can change contents based on the current game state.

Creating this system has all been ad hoc and designed to solve the game I'm making, so it's only after the fact that I've been reading about different formats for interactive stories. The closest to what I've made is what Emily Short calls a salience-based narrative: each storylet has a set of parameters that include or exclude it from a list of potential stories according to whether the game state makes those parameters true; the player makes decisions in storylet that change the game state; the game chooses the next storylet according to which parameters are now true.

There's more structure to this as indicated by each story being an episode of murder mystery television: there needs to be an intro scene that sets up a crime; there need to be scenes of interrogation and investigation; there needs to be a twist; and there needs to be a conclusion, in which you accuse someone and succeed or fail. But within there's a lot of flexibility I define within the storylets.

The greater challenge in all this has been coming up with markup language for these storylet text files that doesn't become too cumbersome or intrusive when writing. I'd say I've failed at this - it works for me, but would be a nightmare for anyone else to use. The issue is that there are so many wildcards: a suspect responding in an interrogation needs to say lines of dialogue which take into account i) their current mood ii) whether they're lying or not iii) the tone in which the player asked the question (grumpily, happily, casually, etc.) iv) the procedurally generated facts of the case, including the name of the victim, any evidence, location of the crime, etc. v) their relationship with other suspects... It's a lot to account for.

But it all works now, more or less. I'm currently in the process of writing a set of simple, sample scripts, that would allow episodes to be played through from beginning to end. It won't reflect the full variety available, because with just a couple of episodes players won't be able to radically change the game state in the way they will eventually. These types of branching narratives get better when you have a density of storylets large enough that the player's available options, and the resulting consequences, becomes thrilling. That's a ways off, but a playable build draws nearer.

I can now write something like this in a text file:

Quote
*It was you!

{amIGuilty(true): What possible reason would I have for doing that? ~motiveList() %accuse%}{amIGuilty(false): You're a fool. %accuse% >wrong=all< }

And when the player says "It was you!" in the game, it'll look up this text file, and then if the player is right, have the suspect say, "What possible reason would I have for doing that?", then draw a list of possible responses for the player from the 'discovered motives' list, and register this whole thing as a scene of accusation. If they're wrong, it does the "You're a fool." response, then skips to a new part of the script called "wrong" and plays out everything present in that scene. This is the tip of the iceberg.

Thanks for reading! I have no idea if this is of interest, but I need need need to get into the habit of talking about the game again. To end, here's a partial list of commands and variables I can place in text files and the parser can interpret.

//this denotes a comment

*name - names a section, like an anchor you can search for

//%name%,%askedabout%,%asked%,%opinionOf%

//pronouns: (the game'll support other pronouns than just he/she, at least for player characters)
%heShe:victim%
%himHer:suspect%
%hisHer:guilty%

//names
%victimFull% - full name
%victimF% - first
%victimS% - second

//evidence
%evidence% - mention an existing piece of evidence at random
%evidenceNew% - mention a not-yet discovered piece of evidence, and reveal it

//%crimeScene% - the crimescene, duh

//{asked(>2):}, amIGuilty(true), amIGuilty(false), chance(50), high(patience), low(patience), high(rel), low(rel), mid(rel)

//{whatDoIKnow(questionPartial):} - I think this reveals something random that I know about the person I’m asking about

//goalTarget(questionPartial), goalTarget(!questionPartial), goalTarget(me) - if the suspect’s goalTarget is being asked about, or not, or is themselves

//~patience(-10), relVal(-10),

//~questionAdd(What’s a dog?) - adds a question to the person being interrogated
//~questionAll(What’s a dog?) - adds a question to every suspect
//~questionNamed(What’s a dog?) - adds a question to the suspect named as part of another question
//~questionGoalTarget(What’s a dog?) - adds a question to a suspects goalTarget

//~motiveList() - lists the motives you’ve discovered about that suspect as questions.

//~evidenceFind(all) - find all evidence
//~evidenceFind(1) - find the specified number of evidence

// ~answer(name) - grab a random answer from the ‘name’ suspect/character and start an interrogation with them
// ~answer(scene) - 'scene' is literal, not a placeholder. Grabs answers from the currently open file.

// %accuse% - jump to the fourth act.

// %motiveNew% - reveal and name an as-yet undiscovered motive.

//>grab< from *grab a random part of the script and >grab=all< to grab everything from *grab
//>grab=file=filename< - grab everything from section 'grab' in file filename
//>grab=filerand=filename< - grab something random from section 'grab' in file filename
//>grab=desc< - grab a random description line from file filename
//if the scenechange doesn't specify (eg. >grab<) then it'll look at the script for line types. If THOSE don't specify, I think it'll default to dialogue?Huh??

//~traitAdd(traitName)

//{trait(traitName): If you have this trait, this message will appear.}

//#name - add ‘name’ to a list, so it can be looked up later and used as a checked flag
//!name - look up the list of checked flags to see if ‘name’ exists, proceed if true
Logged
Graham
Level 0
**


View Profile
« Reply #7 on: June 06, 2017, 01:58:52 PM »

Today I've worked specifically on interrogations. These are the scenes in which the player can question the suspects of a crime, with default questions such as "What do you know about the victim?", "What's your relationship with [suspect]?" and case-specific questions that unlock based on previous answers.

As I mentioned above, I can't directly write answers to these questions, because the facts of the case are procedurally generated. This includes a simulation of what each suspect knows about the crime and their fellow suspects, with people in relationships knowing more about each other, and with each suspect making a decision whether to lie when you ask a question.

So if I ask, "What do you know about the victim?", and the suspect I ask is the person who committed the crime, then they'll decide to lie, review their own relationships with other suspects, and decide to reveal either false information or true-and-damaging information about another suspect they dislike.

Alternatively, if the person you're asking is not the murderer, but knows who is, then they'll similarly review their relationship with that person. If they love the murderer, they'll decide to lie to cover for them, and then decide who to pin it on instead with again false or true-and-damaging information.

The information suspects share can take many forms, from simple "He did it!" to "X was jealous of Y because Y was promoted at work" or "X was bitter, because his good looks have faded with age."

In any case, I need the suspect logic to play out, resolve as a placeholder line, and then look up my script for a set of possible replacements for that placeholder which take into account the game states I mentioned in the previous post (suspect mood, question tone, appropriate names, etc.) and have some flair/randomness to avoid any leftover repetition.

Today specifically, I worked out the structure and did some writing for answers to "What's your relationship with [suspect]?".
Logged
joey4track
Level 1
*



View Profile
« Reply #8 on: June 06, 2017, 11:57:44 PM »

This is the best, we need more detective games, more noir, more narrative based gameplay!!  Noir
Logged
nikwin
Level 0
**


View Profile
« Reply #9 on: June 07, 2017, 02:41:25 AM »

I love the premise. I really want to see what you come up with!
Logged
Ninja Dodo
Level 4
****



View Profile WWW
« Reply #10 on: June 07, 2017, 04:17:34 AM »

I am intrigued.
Logged

Pages: [1]
Print
Jump to:  

Theme orange-lt created by panic