Sunday, May 5, 2013

The End

I suppose this blog deserves a proper conclusion. So, here it goes.

I managed to implement the murder mystery game and get it working the night before my presentation. There are demo videos below (finally). 

The way it works is this:
You start as a player character in a world of NPCs (some randomly generated, some not). You can walk around and talk to them, affecting their moods with different actions. At a certain point, either because of you (indirectly) or not, someone will get angry and will murder another character. You will be alerted, at which point you can go around and ask each person how they're feeling and what they've been doing (the murderer will lie about committing murder). You figure out who you think did it and accuse them. If you're right, you win! If you're wrong, you lose.


Relative to the rest of the project, the game was actually pretty easy to implement. The storytelling engine was already defined... All I had to do was define a start state (when someone is murdered, allow the player to accuse) and an end state (when the player accuses, gameover). Everything else just came out of the emotions and actions I defined for the murder mystery, meaning I was able to set it up in almost no time using the code that had already been built. The ease with which the engine was converted into a playable game was a welcome surprise, and a clear indication that this model is great for use with games. Even more of a surprise was how much fun the game was to play. I found myself spending up to half an hour trying to follow characters around and figure out which one had the best motivation for killing the victim (in the demo videos above the murderer says "I did not do anything to (name of victim)" so that the game can be ended quickly, but the hard version has the murderer cover the murder with a good lie like "and then they stormed off."). That's what really works about this murder mystery game. The murderer isn't just chosen at random - they murder because of motive, and the motive is what you investigate. The motive is generated dynamically, and will be different each time. Simple as it is, the model works. I created a game that has a different story each time you play because the characters in the world behave differently every time you play.

Friday, April 19, 2013

Final Stretch

Okay. So, less than one week until the final presentations. Whew.

If you'll remember, at the beta review I was told I had two ways I could take what I showed - the debugging route and the game route. You might also remember that I really wanted to do both. I still really do. So far, though, I've only focused on the former.

I added colors to the characters so you can tell their genders. This was relatively straightforward, but it still took me a while to figure out how to do it and what code to use. I implemented a way of keeping track of character histories and asking about them as well. All that's left for me in the "info" mode is GUI changes - making it look a bit nicer, adding real time emotional values of the characters you're talking to, and adding a button that lets you access your interaction partner's character history. While all that might sound intimidating, I do think the hard part is done. What's left to finish off the info-mode should only take me an afternoon.

I still hope to make good on my mystery idea that I proposed. While I do think you can understand the reasoning and potential behind my dynamic narrative proposal just from the "info mode" I've constructed (and will be completing soon), I think to make people really feel the full impact of what this could mean to games is to show off an actual game. More importantly, to show off how easily a game can be built from this concept. I'm predicting I'd be able to implement this game mode if I work on it for two days straight. I realize I still have to plan and prepare my final presentation, so I'll be cutting it close, but I do think if I can pull it off that it will be well worth it.

Poster Day

We had our project poster demonstrations on Wednesday.

It went fairly well all things considered. Unfortunately we were a bit off the beaten path in the SIG Lab, so we wound up presenting to each other. That said, everybody's projects, posters, and presentations were really fantastic. I presented first to Norm, Aline, and the DMDers. People were already familiar with my project, but I think overall it went well and was good practice for next week (I can't believe I have less than a week left).

The only real concern that came out of the presentation was that Aline told me I had to do a live demo. I'd been planning just to record videos, and a live demo is a little scary. Not because I'm afraid of how my code will behave - every presentation I've ever done for Aline and Norm has been a live demo - but because I don't have a computer that can easily connect to the projection system and run my code. Oh, well. Maybe I can transfer all those files to the pc in the lab and run tests before the presentation on Thursday, or maybe Aline can teach me how to export the unity scene so it plays outside of Unity itself. I'm not too concerned about this, but it bears addressing.

Anyway, the poster I presented is below. I'll do a separate blog post about my progress since last time.



Tuesday, April 9, 2013

Early Blog Post! Steps Forward

The Beta Review was yesterday, and I think it (hopefully) went pretty well. Aline said that all that really needs doing from this point forward is polishing. Norm, though, said that I was about "halfway done either way" - not having a real (fun, objective oriented) game or a fully illustrative demo with character emotions and histories visible onscreen.

With what I now know about Unity, the demo mode should be easy. I've already begun working on character histories, which I feel is the missing link between my original objective (teach computers to tell stories) and what I have now (dynamically generated, non tree based character behaviors that you can build a story out of). Once I implement character histories, I can show how easily the framework I've built can be distilled into coherent, always different stories.

The real reason for this post, though, is that I've thought of an easy way to extend my code into something simple yet playable. A murder mystery like we've been discussing, with only minimal changes to the framework I built. The main problem with the murder mystery is that because everything now needs to be extendable based on input from txt files, I can't have any actions get too specific in their behaviors - then I'm essentially just hard coding actions/emotions like before, instead of leaving that to the "writer". The plan was to create two or three different "game worlds" with different tones to show off how you could create new, shifting experiences for players within a multitude of different kinds of games, and I still plan on doing something similar to this (after all, it shouldn't be that complicated - just creating new action/emotion/config text files). But here is what I would have to do to make a simple playable murder mystery that takes full advantage of my work so far:

  • Start that simulation. Give all characters but the main character a "murder" action that removes one character from the game. The first time a character has been murdered, remove the "murder" action from existence (no serial killers or multiple murderers) and display the message: "Help! Someone's been killed!" Along with a message of who was killed and an alert telling the player to get to the bottom of it.
  • Add an "accuse" action. Every character (player, non player) can accuse other people of murder, but it only ends the game if the player accuses someone. For someone else, it just enrages the person they've accused. Potentially, I could have it so that someone who accuses the murderer is then also murdered.
  • End the game when the player accuses a character. If they are correct, they win. If they are not, the wrong person is incarcerated and they lose.
  • Add just one more "player only" action - "Question". Have each character store their emotional states and whether or not they ever interacted with the victim at the time of the victim's death. "Question" yields "I never knew him" or the emotional state at the time of murder "I was in love." "I was so angry." "I was bored." Thus, we can easily get simple motivations.
  • Modify the "get history" action (assuming I've already implemented it at this point for the data version) so that murderers skip over the line in their history where they've murdered someone, replacing it with another interactions ending moment (so there isn't a conspicuous gap between them talking with the victim and their next action, where the murder obviously went).
  • If I end up making it so that the murderer kills anyone that accuses them that isn't the player, I could have a secondary lose state where you lose if the murderer kills everyone but you.
Hopefully I have time to implement this. I think it's a great example of how a story can be generated dynamically with minimal guidance from the "writer". Simple as the system is, it gives us not only a full murder mystery but motives for the murder, which is what I would say separates it from simpler murder games like "clue" and makes it richer than something like "the Sims."

Sunday, April 7, 2013

PreBeta Updates

Oops. Late post again this week. Sorry. Progress has been slow going, but I've been working really hard. It's hard to think of what to post about... This has been mostly about implementing and debugging what I've already talked about (and debugging, and debugging). I'm finally (finally) getting the hang of Unity GUI. I've been focusing pretty heavily on the "playable" version of the code, which isn't a full game yet but will allow the scope of what I'm doing to be visualized (hopefully). It's a bit frustrating, because it's all a bit tangential to the focus of my project (creating dynamic story) and yet has been taking up the majority of my time (since all of this is really new to me). Even so, I can see why it's necessary - when I show off what my code does to friends and family (despite the fact that it's not actually doing much more with story than it was when it was text based), they seem to grasp the concept and get excited about it much quicker. It's a much better vehicle for proving my thesis: dynamically generated story is possible, even if this won't be the most sophisticated implementation of it.

I'm taking a break the night before my Beta Review to fill you in on my current progress. I've been fleshing out the "game world" a lot in the last few weeks - little tweaks to make the world nicer as I learn Unity. The direction you move your character in with the keypad is now based on the camera position rather than world coordinates. You can "run" by holding down shift (the rate the characters walked at was maddeningly slow). More importantly, other characters now recognize the main character and try to interact with it/you. There's been a lot of tweaking, since the character you control needs to share certain behaviors with NPCs even as you control it.

I've finally got in game pop up menus working (took a while to figure them out). I've got one working, but I'm going to pull an all-nighter trying to get the second one done in time for the beta review. The one that is working works like this: after you get close enough to an in game character that he/she notices you, you freeze and a pop up window appears asking if you want to talk to them (they keep walking up to you while you're frozen). If you say no, the window disappears and they walk away. If you accept, you walk up to them and engage them in conversation. This seems small, but it took forever to implement and I'm hugely proud of it. The conversation right now is one-sided, but what I'm trying to do for tomorrow is take turns in which you pick an action from a popup window (trickier, since the number of potential actions is arbitrary and established by the config file) and then the other character reacts. The real trick is that I want the other conversations that other characters are engaging in to continue in the background, so if you took 5 minutes to decide what course of action to take an entire story could have unfolded in the background.

I don't think I'll have "tell me your story" ready for the beta review (an action in which the other character actually puts into effect the storytelling algorithm I devised and shares with you their personal story) since there's a lot of work I need to do just in terms of testing what the best way of getting the character to remember the story will be. But I'm confident this will be done in time for the final presentation.

Finally, I'm pretty sure once I'm done with this framework that turning this into a demoable game should be fairly easy. I've been working on the concept of "story design" - since the game no longer needs writing, the game now needs a designer to determine what actions/emotions will be prevalent in the game and therefore define it, how common each will be and what their effect will be. By building up dark actions/emotions, light ones, funny ones, etc., radically different kinds of experiences can be had within the same framework. I hope to show that in my final presentation. Since everything is config file based, I don't foresee this being a problem - I just need to make sure my framework works and then do some emotion/action rewriting.

Next update will have video!

Monday, April 1, 2013

Slow Week

Slow week this week, and so short update.

Discovered a bug in my code where apparently ending interactions is no longer a one sided decision (as it used to be). Almost didn't notice, as usually the character on the other side of the interaction ends their side of the interaction soon after, but for a short moment they will follow around the character that's "broken up" with them and continue to interact with them even after the interaction should have ended. This has proven to be a more deeply rooted problem than I initially realized, and I'm just trying to uncover its root right now.

Also backtracked a bit to try and flesh out some of the potential actions by giving them different animations, and discovered that some of the animation files seem not to link up. Also trying to find the root of this problem, though this might be a question for Aline (since it seems like only the four or so animations in the demonstration she wrote up seem to have transferred intact into my code).

Finally, I've just been trying to implement the player 1 controls for the beta/poster next week. It took a backseat to debugging, but it's still my main focus (and it's still giving me some trouble).

Until next week, when hopefully I have something visual to share...

Saturday, March 23, 2013

The Votes Are In

After taking some advice from Aline, I've decided to try to make a "playable" version of my code, where you control a character walking around a 3D world in which story is created in real time. So far I've implemented a character that you can control yourself (in terms of walking around), and my next step is creating character interactions. I need some sort of menu screen that will let you choose the action you wish to take when talking to someone. I have no idea how to do that in Unity yet. I've been doing some research, but so far I haven't been able to figure out how to do it myself. I haven't been trying too long yet, though. The next step after that is making a way to ask characters about their past interactions, so you can get other people's stories (what just happened to them) besides just your own, and learn about why someone might be acting the way they are.

I'm optimistic about finishing this in time for the beta. If I can, I might either try to implement the "story cuts" technique of having the program show you what it deems important through cutting, or else rework a version of the code and the action/config files so that you have a genuine story to play through (a soap opera, a murder mystery, etc), which seems like relatively little work and probably would make the demonstration much more enjoyable.

Thursday, March 14, 2013

Back From Break and Phase 2

When I left for break I had just presented a nearly working version of my program in Unity. This week has been about tying up loose edges. The big project this week was making it so that the characters stopped and interacted in a way that wasn't instantaneous. That's been completed - I'm currently working on adding in animations that play when the characters are interacting based on the action (the action txt file has a line for animation file to be played). After that, I want to reimplement death (my characters can no longer die) and flesh out some more actions and emotions for testing purposes. That should take me through the weekend.

My big question now is what to work on next (Aline, if you're reading this, I'd appreciate your input). My two options are:

  • Dynamic camera that "cuts" to the most interesting part of the scene
or 
  • Interactive game where you control the "main" character and the story is generated around you as you play.
That'll determine what I spend next week doing and what my priorities will be going into the beta and final presentation. I hopefully will have time to do both, but both won't exist within the same version of my code (it doesn't make much sense to be cutting away from a player controlled character, after all). I can think of a number of pros and cons for both, but I'm currently leaning towards the dynamic camera first and interactive game second. It will probably take less time to do the dynamic camera, meaning I'd still have time to try the game, and it's more in keeping with my original goal - making a program that knows how to present the story.

Sunday, March 3, 2013

Screenshots Galore!

Characters have their names floating over their heads until they've had an interaction. Afterwards, their most recent interaction phrase (this character ______ another character) displays over their heads. Characters can have names specified in the config file (Montswana) or can be auto generated (Character 1, 2, 3, etc). Characters walk on random paths until they get close to another character.
Once close enough to another character, the two become "interaction partners" and plot courses towards each other.

Once interaction partners are within an interaction distance, they will stop until one of their actions exits out of the conversation. This will usually happen instantaneously at the moment, as all actions take only a tiny fraction of a second to complete, and so entire interactions are simulated in under a second. 


Whew!

Where to begin?

Following a meeting with Aline where she helped me through most of my biggest problems, all the pieces started falling into place one by one. First I got scene loading working, so that various characters loaded into the scene from the config file. Then I got actions and emotions back up and running, and defined the character object script so that it's more or less the same as the character class from the text based version of my code.

Once I got characters into the scene and walking around, I created a line of text above their heads and attached a script so that they follow the characters and always point towards the camera. I rigged up a script so that the number keys 1-9 correspond to characters 1-9 (technically characters 0-8), and 0 resets the camera so that it isn't attached to anyone. Eventually I will have the opportunity to "cut" using the camera from interesting scene to interesting scene.

Next I got character interactions back online, so that characters could interact with each other based on the config file (I still need to tweak the config file so that there are more interesting directions that conversations can go - right now positive gets more positive and negative gets more negative, without anything like "accidental insult" or the conversation getting dull or conversation ending actions that occur without extreme emotional settings). I made it so that characters find other characters that aren't interacting and walk to each other. Then I re-implemented actions, so that characters could have their interactions and then break away from each other. This made the characters end their interactions, but because they were nearest to the people they just interacted with, they would just start another interaction with those people. So I added a variable to keep track of past partners, so that partners wouldn't repeat (since you would never have a conversation with someone, end it out of boredom or frustration, and immediately start a new one with the same person). I made it so the text above characters' heads displays the action that they are implementing (the action lines from the text based version proved helpful here). I noticed two problems here - there was bunching occurring, where characters would walk to each other and eventually wind up in a cluster in the middle. The other issue was that there was no random wandering - characters just walked to the closest characters to them, interacted, then found the next closest and walked there. I tried to fix both these problems by having characters wander to random points on the screen and only "notice" each other - walk up to each other - if two unoccupied characters get within a certain radius of each other. When that happens, they lock on to one another and walk up to each other as before.

Some immediate next steps: there is still a bit of bunching going on, mostly I think because character interactions are instantaneous. Characters meet with each other and then bounce off. The actions need to have a time interval that they take. Right now, the interaction loop cycles through and implements different actions so that each character performs dozens in under a second, and then they go their separate ways. I need to try to condense this (each consecutive action gets folded into the previous one, each uninteresting action gets suppressed) so that we actually see the actions going on onscreen. After that, I need make it so that actions have corresponding animations (their config files currently have a spot for animation names, but I need to actually implement the code that takes those names and plays the animation). This will be relatively straightforward... Aline already taught me how to do that.

I anticipate things moving a lot faster from here on in. Now that I've got a solid understanding of how Unity works (and more importantly, a solid framework to build off of), it should be a matter of implementing feature by feature (for instance, I still need to reimplement death in the Unity file).

After this there are many ways I can go. My primary target is still turning this into a playable game, though Aline and Norm gave me a number of other targets I can try to meet along the way. One of these is having characters remember past interactions that they can "recall" upon request. In a game I could then ask someone "what did you just do?" and they'll recount their story to me in a complex way that factors in how long ago the action was performed and what its importance value was.

I'll post screenshots soon of what the project looks like right now.

Monday, February 18, 2013

Ten Steps Back

After working this weekend to try and come up with new config files to test, I've discovered that my Unity project is actually horribly broken and that any perceived progress this past week was actually a coincidence. I'm now planning on going back to the original walking person code and starting over with my code integration, hopefully with some help this time (I realize now it was stupid of me to stubbornly try to learn it on my own).

I'm getting really frustrated with Unity. My struggles with it have completely halted any progress on my actual project - the development of dynamic storytelling for games. I feel as though I'm no farther now than I was at the start of the semester - more than a month ago.

I have a little over a week now until the Alpha Reviews are due. I'm still deadset on having my code work in Unity by that deadline, which is a problem due to the fact that I'm starting over and clearly still don't understand the first thing about how Unity works. I've sent an e-mail to Aline asking if she has a few hours this week to try and help me with the code integration. I have a lot of ideas on how to integrate everything, but I don't understand the mechanics of how Unity works. Hopefully, with Aline's help I can get this done by next week. If not, I'm really not sure what the next step is. I don't want to waste any more time on the visualization of something I've had working for months now.

Thursday, February 14, 2013

Finally Some Progress

I really do think the Unity port is coming along, if still a bit slowly. At every turn I pretty much need to figure out "well, what's the Unity version of this?"

Since last week I had a talk with Aline, who seemed to think that the project would be much more impressive if I do manage to pull it off in Unity (which I agree with). She very graciously offered any help I might need (which I've yet to take her up on, with my oddly full schedule) and pointed me towards other people who might be able to help me (again, scheduling has been a nightmare this past week). Next week I might actually (finally) get the chance to sit down and get some one on one help, which is good because the Alphas are due the week after and I really want to get at least the simulation up and running in Unity.

I've been able to get the start script almost fully operational, loading various figures into my scene as well as creating new actions and emotions. I've got an idea of how to link the actions/emotions with the characters... Essentially, I need to rewrite my character script and attach it to my "actors" (the walking figures), which I've already done. I've hit a small snag in that once the characters are created I have trouble getting them to do anything. For example, I can create 5 characters and give them attributes based on my scene txt file, and I have a walking script attached to them that is controlled (again, in theory) by the designated "actions," but they don't actually walk unless they were created before initialization. Which is to say, I can attach scripts that control the figures to them, but I haven't yet figured out how to control my figures or access/activate their scripts once they've been created. I assume I'll be able to figure it out through my usual method - beat my head against the problem and Google it until I strike gold - but if I'm still stuck on this issue by Monday I'll likely be coming in to the SIG Lab to ask someone for assistance. Still optimistic about achieving my alpha goal! Will post photo results once I can actually get these guys to do something (instead of just theoretically being primed and initialized to actually do something).

That's it for now!

Thursday, February 7, 2013

Many Garys

I named my AdaptMan Gary. I'm not sure why.

Anyway, finally something to show. I was able to fix Unity and get a good enough understanding of it that I can now create multiple versions of Gary, though not in any way that's linked to the initial scenefile. I think I know how to handle that, though. It does require major restructuring, but it's more copy-pasting than rewriting from scratch and that's a good thing.

I think step one in Unity version of Storyteller will be "generate characters, get them to walk around". Step two will be "get them to stop and recognize each other" and step three will be "get the complete story thing working."

In the image below, the walking "Gary" was created before runtime. The other three Garys were created at runtime as a test, and in the next test (which will be performed tomorrow, because this has been a long day and I am tired), I will attempt to get them to generate in random (within reason) locations with names and numbers based on the scene file. Might be a bit too much to try and get done in one day given my luck with Unity lately, but I feel like this (no matter how trivial) represents a major breakthrough in my understanding of this program and hopefully will give way to better, faster breakthroughs in the future.


Unity Struggles

I've just been reading a lot about Unity lately. I know what Prefabs are now, and how I'll need them if I want to do dynamic anything in Unity. I know about how there's no main script I can use to control how the game is run, and I know that it's absolutely unlike any coding environment I've ever worked with before. I said earlier that I found Unity intimidating. Now that I'm starting to understand it, I find it terrifying.

Through my research, I've had the revelation that the way my code is structured is fundamentally not going to cooperate with Unity. Unity is object based in a very different way from the one I'm used to... Which is to say, while I have multiple objects all used and updated in the main loop of my main program file, Unity has no such main loop. I need to have each character keep track of themselves and update themselves on each step of the game loop in the game object's Update class, which basically means I have to tear down my code and rebuild it in Unity this time. Additionally, I've been having a bizarre amount of trouble trying to get the scene initialization to work, in addition to some other bizarre bugs. Trying to get Unity to work is really stressing me out, and I feel like it's been distracting me from what the focus of my project was supposed to be - dynamically generating stories for games. I've e-mailed Aline to see how bad the consequences would be for not using Unity, and choosing a more simple approach to a graphical display (maybe something in 2D). I'm not expecting much, though, as I was told implementing my code in Unity would be an important element since I first proposed the project.

I'm currently drafting what I think will work as a scene intializer (if I can get ever get my code to compile). In theory, it should read the scene file and add a number of characters to the scene, but that's it - I haven't been able to figure out porting emotions or actions just yet. That said, I'd be happy to get just this up and running for now. Unfortunately, as I said, my code still will not compile in Unity so I can't tell if I'm going about this the right way (it's not a code error as far as I can tell - Unity says it's missing some important files for compiling my file and I can't seem to find the error online. Weird, as this wasn't happening to me before).

I'll keep trying to get Unity to work until I hear back from Aline. At the very least, I'd like to sit down with her or someone who knows Unity better to help me sort through all this mess, because the learning curve has been much steeper than it was with C#. In writing this, I have actually thought of some ideas on how to proceed without rewriting absolutely everything (don't it always seem to go?), so I will continue to attempt to port my code into Unity, even though I've made virtually no progress in almost a month. I'm going to go ahead and try to get what I have to compile first, though. That seems like a good first start.

EDIT: Code compiles now! Thank you, internet!

Thursday, January 31, 2013

Delays and Apologies

This is the second or third week since I've been back, and unfortunately I still don't have very much progress I can show. This has been a bit of a rough week for me, and progress has been slow going. However, I do have progress to report, as well as a plan for the immediate future.

Progress:
My base code - the text based version of the storyteller - is pretty much complete. I'm sure I'll discover more bugs here and there, and there's much I'd still like to add, but what I have now is functional and ready for the next steps - graphical implementation and game. The one step I really want to implement that's probably more of a headache than it's worth is specific character relationships... That is to say, if Character A loves Character B, but Character C angers Character B, Character B won't take it out on Character A. The thing is, I'm not actually sure that this would make the "simulation" element of my code any more realistic. This may be cynical, but I think it might do the opposite... I think most people act on general feelings  most of the time - stress, anger, love, happiness - won't just affect how you interact with one person. If you interact with a friend when angry, you're likely to lash out at them. If you interact with someone you hate while happy, you're likely to be nice to them (unless they're mean to you and spoil your mood). My point being, I think what I have implemented is actually more accurate than an un-nuanced "everyone feels differently towards everybody" approach. Ideally, I'd implement a complex emotional algorithm in which people's feelings are made up of a combination of general and character specific emotions, but human interaction and behavior simulation isn't as important to my project as general storytelling, and with my samples I've proven that stories with beginning, middle, and end, where characters act on understandable (if simplistic) motivations are achievable with what I have now. That's all I set out to do.

Unity - I've come to understand that I won't be able to make much headway on making my code graphical unless I understand Unity better, so I've taken a bit of a "break" from working on the project to experiment with Unity and learn as much as I can about working with it. So far it's slow going... I've never really worked with anything like it before. But hopefully (and I know I keep promising this), I'll have some screencaps of a Unity version of my code to post next week.

Schedule:
Here's what I would like to achieve by my presentation in mid February:
Fully working Unity graphical implementation of my code, where you give the code parameters and "watch" a story. Simplistic camera editing as my "narrator" that I implement myself.
Then my goal for the end of the semester becomes:
Find a way to make a playable Unity mystery game where the story is generated by my code.

I'm still up in the air on the mystery game element. I almost want to let the player inhabit the main character and play through a story that could be anything... So that you don't know if you're getting a mystery, a love story, a horror, or anything until you're in the game. Even better, I want it so you control (inadvertently) what type of game/story it'll be with the choices you make. That'd be my ideal finished product.

Friday, January 25, 2013

Slow and Steady Progress

Not too much to report since last week. It's been pretty slow, especially with trying to get back into the swing of things. I'm still getting everything up and running again... Had to reinstall Visual Studio, Unity 3, and any other program I planned on using. Ironed out some bugs and nearly finished off the storytelling A.I. Some pretty good results so far... I'll post some next week, along with (hopefully) screenshots of the start of my Unity integration.

Getting a little nervous about the Unity part of the project all over again. It's really not my strength, but I'm hoping I can figure it out relatively quickly - especially if I'm going to be doing any sort of interesting transition work with camera movements. Right now I'm thinking that my first priority (after just getting a visual version of my project) is actually the camera, since "editing" is the closest thing I have to picking and choosing text to display (my current A.I. system). After that, I'm going to get started on turning the whole thing into a whodunnit game, which is going to be a lot of fun but will take a lot of restructuring from what I currently have.

Wednesday, January 16, 2013

And We're Back!

I've been back at Penn for less than a week now, but it's time to get back into the project. Unfortunately, there have been a few setbacks I need to take care of this week before I can keep moving forward. First off, my PC required me to upgrade to Windows 8 (it had come preinstalled with a demo, which expired), and I lost all of my programs. I'm going to need to spend a bit of time reinstalling Visual Studio, Unity, and a bunch of other programs I was using. Luckily, all of the actual code I wrote from last semester is still intact. Unfortunately, I noticed a bug in the code that I haven't been able to trace yet. Specifically, when I put in the "compliment" action, I can somehow cause an infinite loop. No other actions that I've drafted or experimented with seem to have this effect on my code.

The next steps for me seem pretty clear. Once I've reinstalled Unity, I need to find a way to show what my program is doing visually. The next step after that (or maybe a simultaneous step) is fine tuning the storytelling AI. I devised the system for that in past blog posts, and started implementation of it before the vacation.

Finally, I need to start designing a game application for the system I've developed. In a conversation with Aline and Norm at the end of last semester, we decided that since my system was being developed for use in video games, it would make sense to show it off in a game scenario. I haven't decided what the ideal way to do that would be just yet. Right now the plan is for a "Murder on the Orient Express" style close quarters murder mystery game. The player is stuck on a "train" (or other enclosed space) with other characters. The first act the player interacts with the other characters and gets to know them. The second act is triggered by a murder (perhaps unintentionally set off by the player character), and involves the investigation. The third act is triggered by either another murder or the murderer being discovered. In certain ways, though, this doesn't seem groundbreaking in terms of game design. What I really want to do is, using action importance values where 5 means the next phase of the story is triggered, allow for an expanding number of plot points to push the story forward. At first the only AIV 5 are "murder" and "is arrested", but we could keep adding more actions of increasing absurdity (like "jump off the train" or even "get abducted by aliens") that are triggered by specific scenarios and move the story forward in different ways, seriously expanding the number of ways in which the game's story can be experienced.

The goal for next week is to have all of my applications reinstalled, to have AIV and the storytelling AI complete and functioning properly, and to have started on the Unity based graphics representation of my storytelling program.