Here are a few of the challenges around building a general system:
– Completeness. Can you list all the social actions that exist even in your own culture? What about in other cultures? What about the fact that some of those verbs are much larger-scale than others (e.g. “smirk at X” vs “blackmail X” – the one being a fleeting momentary gesture, the other an extended interaction)?
– Context. The same behavior can mean radically different things in different situations. Resolving this is likely to require a knowledge base and sophistication on nearly the scale of that required to resolve natural language input; you’re probably going to need to do some machine learning.
– Resulting states. In addition to figuring out everything the player can do or any of the other characters can do, you would also have to work out what effects those interactions are going to have.
— What’s your model of human relationships? It might seem like you could have a bunch of relationship names and assign them between characters: “boss”, “parent”, “friend”, etc. But some of those relationships are objectively existent and others are subjective – I might think of you as a friend while you don’t agree that we are friends, for instance. And multiple relationships can exist between people at the same time: if you’re working in a family business, your boss might also be your uncle. So you’re going to need superpositions of possible relationships, rules for how those relationships change, rules about reciprocity and officialness of change, and so on.
— How about mutual opinions? Versu allowed characters to form opinions about others on multiple axes at once, so a character could think that another was attractive but foolish (for instance), or friendly but of low status.
— And emotional states? Often our feelings are superpositions of other, simpler emotions: you might be a little annoyed and a little amused by the behavior of a noisy toddler. Games tend to simplify that a bit, but I think a straight-up positive-negative axis is going to be way too simple for the kind of system we’re talking about here, so we need something more complex.
– Response. Are you automating your characters doing specific things in response to their emotional/relationship states? Are those actions are going to be suitable in all possible story contexts? (Hint: no, they are not.) If you’re leaving it up to authors to write in all the ways that people can react to situations, that poses a substantial authoring burden for using the engine; but finding even an acceptable set of defaults can be pretty challenging.
– Scaling and skewing the engine’s behavior for different story contexts. One of the things we had to deal with Versu was that we wanted different levels of NPC response in different stories. In a realistic drama with a two-hour running time, you want the characters to have fairly moderate, cumulative reactions to emotional inputs, so you can gradually work your way up to being close to someone. In a ten-minute farce, you want every move to be amplified to and to produce cascades of comedic results. You might think, “oh, we can just slap a scalar multiplier on any numerical changes,” but in practice there were lots of other tuning effects we had to look at.
Okay. So let’s imagine you’ve managed to model all that. Now you also have to make that model transparent enough to the player that they can act with agency and never feel like your simulation is buggy. To (very loosely) paraphrase Aristotle, game systems must appear plausible, where real life is confined only to the possible.