I did some more thinking after yesterday’s blog post on tagging, and had an interesting discussion with Mike Cook and Chris Martens about how they approach similar problems. So here are some more thoughts on the subject.
The procedural content generation in Mainframe uses a very simple mechanism, which is both more powerful and trickier to implement and use than I expected at the outset. That mechanism is tagging. You tag bits of content, and then somewhere else you say you want something with a given set of tags.
One of my theses about interactive storytelling is that selecting, adapting, and combining bits of authored content is an approach that is powerful, underexplored, and pragmatic, in that it offers a smooth learning curve from simple and known to, I hope, complex and new. Mainframe is, among other things, an experiment with this approach.
Tagging is one of the more interesting ways to select content. I first saw it used in 2008 as the interface between the AI and the audio system in LMNO. Back then I was mostly impressed by how it reduced the production dependency between AI and audio.
In 2010 and 2011, I worked on an unreleased Diablo-like that used tagging to procedurally generate levels. I did a lot of work on the level design and tool chain. At GDC in 2012, I saw Elan Ruskin’s talk about the dynamic dialog system used at Valve, which used an advanced tagging approach to allow writers to create dialogues. In 2012, we used tagging to select texts in a mobile game. I remember vividly how the actual tagging logic consisted of one line of code, but it took three of us a day to write that line. (It was a LINQ expression in C#, if you’re curious.)
The system in Mainframe is really simple. The core logic is this function:
Last night I innocently tweeted:
Does procedural content generation inherently imply repetition or is it just a really strong connection?
— Jurie Horneman (@jurieongames) November 21, 2015
And then I watched a movie (Pi! still great) and 90 minutes later I checked Twitter and suddenly I had 50 replies.
My tweet was a bit gnomic and lacked context, as tweets often do. I wasn’t talking about repetitiveness: I was talking about how PCG is used by game designers, beyond “hey look we can create a billion dungeons / planets”. Not that there’s anything wrong with that, but I am interested in using it in other ways.
In Mainframe, the IF game Liz England and I made for Procjam, one of my basic tenets was that we should design the game around repetition, because we were using procedural content generation (PCG). When you play it, you will quickly find the element of the game that repeats. Whether it feels repetitive is a different question, although we don’t claim it is not.
This tenet was something I intuitively picked as a design heuristic, but afterwards I started wondering how core it actually is. Is it essence or accident?
I had a lot of fascinating discussions about this last night, and I’ve thought about it some more, and I now think that using PCG as a game designer will always involve repetition in some way. (Again, I am not talking about repetitiveness. This is not about procedural content generation being “bad”.)
Last year I wanted to do something for PROCJAM, Mike Cook’s “make something that makes something” one week game jam, but circumstances conspired against me. This year, I collaborated with Liz England, and we made a horror interactive fiction game called Mainframe. It’s about a spaceship and its mainframe and something is wrong and it needs help.
Making it was a great experience. I learned a lot, and I’m going to be talking about it more.
The texts, assets, and source code can be found on GitHub.
A few days ago, Julian Togelius tweeted this:
Exhibit 1A: The mindset of someone who has no interest in artificial intelligence. https://t.co/uE8BdWb4dS
— Julian Togelius (@togelius)
I replied that I have an interest in AI, and I agree with the quote. Julian didn’t reply, but I was still motivated to write this small blog post. (Thanks Alex :))
I don’t, in fact, know the context of the slide in question, or Julian’s position. But it strongly reminded me of a problem I have encountered a number of times in my career: the conflict between game design and AI programming.
I’ve had a couple of requests for the slides of my talk on the dark side of game development which I gave last year at ENJMIN, and last week at the Northern Game Summit in Kajaani.
After some thought, I’ve decided not to publish them. The actual slides are very spare, often showing just a single image or a few words, so they’re not very helpful. I don’t have detailed presenter notes (as I found to my dismay when I started rehearsing it again about two weeks ago).
One of the images is a portrait of a personal friend, and I feel weird enough using his photo as it is. Some of those words are “stress” and “depression” and “sexism” and “homophobia”.
Because I talked about sexism and mentioned some of the female friends who helped me with that section, I want to reduce the contact surface in case Internet idiots come across the slides.
This is a very personal talk, and I feel that only the actual performance – all the words I said, the way I said them, and the questions I answered afterwards – comes close to saying what I meant to say. This talk only works when I fully believe everything I say, it’s not a dry technical talk at all. Writing slides with full presenter notes that say the same thing would be very hard, perhaps impossible.
And both times the talk wasn’t recorded. Sorry!
If you want to get an impression of what I talked about, the resource post may be helpful.
Here are some resources to go with my talk about the dark side of game development that I gave at Northern Game Summit on October 1st 2015.
Talking to people
Your body language shapes who you are – Amy Cuddy (especially 16 minutes in)
Sexism, racism, homophobia, transphobia
Stress & Depression
General tips for students
Again, many thanks to these ladies for their help with this talk.
Following on from the previous post, here is the new URL to the RSS feed for this website:
Again, sorry for the inconvenience.
Update: Well, this is awkward. This post showed up in both the old and the new feed, even though I turned off the old feed on the WordPress side. I don’t even know how this is technically possible. Undead accounts, leeching content from beyond…
Still. Better change your RSS feed URLs just to be sure.
Update 2: So that old Google account was not dead after all. Why am I not surprised. I managed to regain access to it, logged into FeedBurner, and deactivated the feeds there with permanent redirection to the proper URLs.
The short story: I am going to change the address of the RSS feeds for this site. And I am going to do it today, and then I will create another blog post saying that I’m done. This blog post will also contain the new URLs.
If you do not see this second blog post on May 4th 2015, then you’re still subscribed to the old feed, and if you want to continue to read my blog, you will have to go to the site and get the new feed URLs. Which I cannot publish here for esoteric reasons explained below.
I apologize for the inconvenience. Also, if you subscribed to this blog by email through FeedBurner – and I have no way of knowing if anyone is doing this – then I apologize even more, because that will stop working entirely.
(Update: Changed “right away” to “today” because I am dependent on when RSS services like FeedHQ etc. query the current feed. So, eh, I’ll do it tonight at some point.)
Today I received the evaluation of my GDC 2015 talk on narrative design:
Total Headcount: 470 (holy shit)
Session Ranking within Game Narrative Summit: your session is ranked 13 of 19
Session Ranking within GDC 2015 Summits: your session ranked 82 of 133
-The Total Headcount shows the number of people who were scanned for the session.
-Session Ranking within your summit and amongst all sessions overall at GDC 2015 Summits. Please note, the highest rank is 1 and it is out of the number of sessions within the summit and conference, respectively (excluding sponsored sessions. special events, roundtables, main conference track sessions, tutorials, etc)