I was thinking about a way of creating adaptable social play in games - the sort of thing where the NPCs are social algorithmically, rather than in a scripted manner. This is not the same as a plot or drama engine, but it's still a hard problem.
Classically, the real problem is not that the social aspect is hard. Plots and real drama are hard, but just general social activity isn't. In fact, the problem is the opposite: it's far too cut and dry. When implemented, it ends up being painfully simplistic. This is because the basic idea of "he likes you, she doesn't like you" is a very simple one. Switching from one to the other is very basic. You can hide the simple nature of the switching behind complicated minigames or weird requirements. You can hide the simple nature of the like/dislike axis by adding lots of things that can happen when they like or dislike you. But, fundamentally, it's a very simple axis that moves in very simple ways. This makes it too basic to really use.
A few years back I ran a LARP-y board game where the players were psychics. They each had unique psychic powers which could only be recharged when they were in specific situations.
Some of these situations were social. For example, one person might recharge one of their powers if someone nearby laughed. Another might recharge if they agreed to help someone. Other situations weren't overtly social, but ended up shaping the social landscape. For example, in order to recharge his power, this person has to end the turn alone (out of sight of the others). Another charges her power if he takes a point of damage, while another charges his power by healing someone.
It occurs to me now that that might be a suitable way to get social interactions out of NPCs. Each character in the board game had four powers and four ways to charge, which seemed to be plenty. Imagine if you had a superhero game with the same basic philosophy: every superhero has four powers, and any one gains an experience point if you fulfill the situation related to it.
This is a way to give characters "personality", because they want to cause the situation. Our Wolverine analog might gain XP by being alone, being injured, going berserk, and being stealthy. Our Spider-Man analog might gain XP by quipping, seeing happy citizens, hanging out with friends, and rescuing people. These two heroes would have fundamentally different personalities, and would play the game completely differently (whether an NPC or a PC).
When a hero gets a good response out of a person, mission type, or situation, they'll prefer to hang out with them, go on those missions, get into those situations. So if Spider-Man and Wolverine go on a stealth mission to rescue people, Spider-Man will gain XP due to the rescuing and Wolverine due to the stealth. Spider-Man's actual powers are very good at stealth, so Wolverine will probably gain quite a few stealth-mission points, which will actually make him likely to hang out with Spider-Man in the future, which will in turn give Spider-Man his "hang out with friends" XP, and they'd end up hitting it off pretty well.
It's not an empty "we're buddies" status, though, because Spider-Man is continually quipping to get his quip-XP, and Wolverine has no love of quips. So there's going to be a "why does Wolverine put up with him?" vibe. The answer is "because missions with Spider-Man are likely to be stealthy and let me go berserk and get injured."
Villains are simply the same sort of thing, except that the way they earn their XP is less positive. Spider-Man is unlikely to end up as a villain because of his "smiling citizen" XP gain, but, then, the Joker has the same thing. Wolverine would seem to be primed for villainy, but it's all about who he teams up with, who he falls in with.
Anyway, I think it's an interesting idea. I wonder if it would work.