Monday, June 29, 2009

Lies and Seductions

Summary

This is my Master's Thesis project, done as part of Petri Lankoski's PhD project for the Medialab in University of Art and Design Helsinki. It's an adventure game about romance, focusing on social interaction with computer-controlled characters. The player is Abby, who's made a bet that she can seduce a Christian rock singer. To succeed, she needs to work her way into his social network, manipulating his friends to help her. The game is based largely on dialogue, with some minigames thrown in. At the core is the Impression System, a memory and personality model that determines what the NPCs think of Abby.

The game is freely downloadable here. There's also a video (by Petri Lankoski).

The Team

  • Petri Lankoski acted as creative lead, participating in many tasks such as concept design, game design, writing and programming.
  • Raisa Omaheimo developed the basic story and characters and wrote some of the cutscenes.
  • Mike Pohjola wrote most of the dialogue and story content, and helped develop the dialogue editor.
  • Niklas Gustafsson designed the 3D characters and modeled and animated Abby.
  • The other characters were modeled and animated by Reettakaisa Neittaanmäki, Linda Kronman, and Anne Parkkali.
  • Kimmo Karvinen designed and modeled the scenes, and made the UI graphics.
  • Jari Suominen made the music and sound effects, and did programming related to that.
  • Josie vd Stel proof edited the dialogue.
  • I focused on game design and implementation, developing the personality model and the AI system, and did most of the programming and building work. I also created a dialogue editor, and participated in the writing.

Technologies I Used

  • Unity 3D engine and development tool
  • C# for scripting
  • Java for a dialogue editor (Swing, XML, DOM)
  • Pathfinding algorithms (Navmesh, A*)

The Impression System

I'll go into a little more detail about the Impression System now, since it's my most important contribution and the topic of my Thesis. It was a bit of an excersize in wheel reinvention - I realized later that Chris Crawford's Storytron (www.storytron.com) uses a similar though more complex version of it.

The system models two things: the memory and personality of the NPCs. Both are centered around Abby: what they've witnessed her doing and what they think of it. From this, an overall attitude score is calculated. This is how it works:

The NPCs estimate Abby according to a specific set of characteristics, called impressions. There are twenty impressions altogether, such as: Religious, Slutty, Lesbian, Rich, Intelligent, Exquisite... Whenever Abby says or does something, all NPCs in the vicinity adjust their view of her: for example, flirting with someone will increment the Slutty impression in those who witness it. The impressions can then be directly referred to in conversations (the NPCs might, for example, discuss how slutty they think Abby is, or directly critisize her). They are also used to calculate the general attitude the NPCs have towards Abby.

This is where personality modeling comes in. Each NPC has an opinion about each impression, reflecting if they like or dislike that quality and how strongly. For example, Chris loathes slutty girls while Lord James loves them. The overall attitude, determining general reactions, is calculated as follows:

Attitude = impression_1 x opinion_1 + impression_2 x opinion_2 + ... + impression_N x opinion_N

Improving the attitudes of the NPCs by giving the right impressions to the right people is at the core of the game's challenge. To seduce Chris you need to improve his attitude to the level of love, and attitude is also important in getting his friends to help you.

I think the impression system works pretty well, though there are some oddities, and a lot of tweaking was needed to balance the game of course. It's certainly an improvement to the single-value system used in Meren Vangit.

Working with Unity 3D

My second major contribution involved learning the Unity 3D engine and game development environment (unity3d.com). Its features are most directly applicable to developing 3D action games with physics modeling, so we had to do a lot of scripting of our own to implement the feel and style of an adventure game. Nevertheless, it was definately useful, significantly speeding up the development.

Besides that, there was also lots of tweaking and bizarre problems to solve. We used Softimage XSI to create the models and animations, and importing via the .fbx format proved tricky: sometimes our characters looked less like people and more like aliens from outer space, reflected in one of those funhouse mirrors. Genuine bugs on our part also caused amusing effects: the characters had the tendency to float around in their chairs for instance, or wave full glasses of bear around when walking or talking. Suicide by bad pathfinding was also a common occurrence. Fortunately, we got most of that stuff out by the release. (Not all, though: Probably due to some compatibility issue, there's some annoying graphical bugs on some video cards...)

In addition to using Unity itself, I learned countless little things of course, in both game design and programming. One of the most interesting, and rewarding, field was pathfinding. Using the A* and navmesh techniques, the paths the characters take just look so wonderfully smooth and natural. Performance optimization was an interesting topic as well: minimizing the number of draw calls without sacrificing too much of the artistic quality. (Seems there are a lot of important tricks, especially when it comes to lighting and textures.)

I'm hoping the use of development environments like this will become more commonplace. It seems like a good way to counter the increasing workloads in game development. Personally, of course, I hope Unity becomes big so my skills will be in greater demand.

1 comment: