I've put into motion the beginnings of my project, but I'm still mainly in the design phase.
I've been hashing out pages and pages of design documentation for potential character interactions and behavior controls. As a reminder, my project creates a "primordial stew" of simulated character behavior and actions, and then the storytelling AI recognizes story elements and suppresses any interactions that don't further the story (without actively controlling where the story goes). After talking with Norm and Alex, I'm going to start off by creating the basic, ungoverned character interactions in Python and then experiment with my storytelling AI in text based format before finally attempting to apply this system to graphics.
I've downloaded Python tools and I'm getting reacquainted with the language (it's been several years since I last used it), and so far things are going well. I'm going to start programming "The Sandbox" (what I'm calling the semi-randomized character interactions) later this week based on the designs I've laid out. A brief description follows:
For now my characters will be driven by three emotional levels - boredom, anger, and lust. These states will be values between 0 and 1, and will affect the probabilities of certain actions occurring (though there will always be an element of chance). Boredom will control when a character initiates or leaves a conversation or a room (I'd like the sandbox to have a number of rooms, though this might have to wait until after the demonstration next week). Boredom rises as time goes on and is reduced by actions being performed and the change of the character's emotional state. Anger makes it more likely for a character to be mean to another (more on "verbal" interactions later) or to attack another (the intensity of the attack/the type of attack change based on levels of anger). Anger is increased by unpleasant verbal interactions or having romantic advances spurned, and abates slowly over time. Lust controls a character's romantic interactions with another, and - like anger - these interactions can be different based on the intensity of the emotion (from flirting to sleeping together). For now, lust will be increased by having pleasant verbal interactions with a member of the opposite sex. Eventually I would like to replace "anger" and "lust" with "hate" and "love", more specific emotions that refer specifically to how characters feel about one another (stored in arrays). I hope to implement more specific emotions by next week, but I need to get the basics set in stone first. I have notes on how to implement relationships, affairs, and jealousy once the transition has been completed to "hate" and "love". I believe this will be hugely important to do before I move on to the storytelling AI... relationships tend to be at the heart of most stories.
It's important than when characters engage in a conversation, that the conversation isn't just "talk." They must engage one another in a way that reflects their emotional states and therefore affects the emotional state of the other. This way emotions change, get heated, and drive the characters into action. These interactions, like actions, will be affected by emotions. Characters can flirt, yell at each other, insult each other, compliment each other, or just make idle conversation. When a character begins a conversation, the interaction will keep going (again, driven by emotion with a randomized component) until the conversation is broken by boredom or an action (storming off, an attack, a kiss, etc).
Finally, characters must be able to die. If one character kills another, the dead character can no longer interact with the others, but the effects of its death must be felt. I might at some point add a sadness or fear emotion that would be triggered in the killer, but with just "love" and "hate" implemented, the way characters treat each other could already be greatly affected by the death of one (anger or love grows towards the killer based on how a character feels about the victim).
By next week, I want to be able to drop a bunch of characters into an environment, give them a few turns in which they run free, and have them interact with each other in partially randomized but emotionally driven ways. At that point, I will be able to start writing my storytelling AI. Eventually, I want to implement more emotions and story elements... Items would be greatly helpful, though not necessarily important at this early stage. Existing relationships (either randomized or pre-set by a "writer") would also be interesting, as it would specify the response to certain actions (like affairs or deaths). I'd also like to give some intelligence to the characters, so that they can "know" certain things (someone killed someone else), share and gain knowledge verbally, and even figure things out for themselves. All these elements would greatly improve the story that could be told, and while their implementation might be for a point in the future, I think it is important to plan for them now.
No comments:
Post a Comment