on Jul 19, 2006
One of the fun things in Oblivion is the ability to rob just about everyone blind. I love slipping into a shop late at night and and pulling a Grinch on them: I steal every single loose object in the place and don’t leave so much as a crumb behind. This means taking lots of worthless stuff like ceramic cups and loose pieces of blank parchment, quill pens, gardening tools, and other items that I can’t even sell. It’s always hilarious to walk into the shop the next morning and see the grinning idiot shopkeeper standing there in his bare room. Makes me wish I could swipe furniture. This also serves as a sort of revenge against all those shopkeepers in Nethack who have slain me over the years.
But then the question arises: What does the player do with his ill-gotten goods? It doesn’t make a lot of sense to let the player wander back in and sell the NPC their own stuff, does it?
Games have tried various ways to handle this. In Morrowwind, a shopkeeper would notice if any items of his were missing. If you then tried to sell him an item of that type (no matter how generic the item may be) then he would “recognise” his missing item. So, if I steal a plain, unadorned fork from Bob, then I can never attempt to sell him a fork in the future because he will always assume it was his missing fork, and that I’m the one who swiped it.
In Oblivion they tried to make the thing a bit smarter, but really they just moved the stupid to a new place. As Mark would tell you, we don’t so much solve problems as we trade one set of problems for another with the hope that the new set of problems is more favorable than the old. Now when you steal an item (any item) from someone then the game flags it as a “stolen” item. In your inventory it is listed with a little red hand next to it, and you can’t sell it to any reputable shopkeeper. You can’t even try – the interface just won’t let you. You can only sell the item to a fence. You can then buy that item right back from them (for about twice the price) and it will be cleared of its “stolen” status. You can then keep or sell it to anyone as you like.
Notice how my inventory is sorted, keeping my harvested potatoes seperate from my stolen potatoes.
Yeah, wouldn’t want to accidently get those items mixed up.
This doesn’t really make any more sense than the old system, but requiring the player to fence stolen goods does sort of add a layer of realisim to the game. Lots of people have complained about the flaws in the new system. After all, if I steal an apple and go to the next town, certainly I shouldn’t need to fence the apple! This is an understandable complaint, although truly solving this problem is more difficult than it seems at first glance. It requires a lot of AI to figure out if an NPC should be able to spot an item as stolen.
So in an ideal world, what would determine if someone could spot a hot item?
- The value of the item. It should be easy to sell a stolen hammer or some blank parchment. Some items are of such little value that they shouldn’t be missed as long as you lifted it unseen. On the other hand, a golden nicknack should be very hard to sell.
- How distinctive it is. You can’t tell a stolen apple from an apple purchased at the store or plucked from a tree, and the NPC’s shouldn’t be able to tell the difference either. On the other hand, a famous ring should be almost impossible to sell.
- The relationship / proximity of the buyer to the original owner. If I steal Bob’s longsword, I shouldn’t be surprised when I can’t sell it to Bob. Perhaps the rest of his family would have heard of the theft and be able to spot his sword as well, so I can’t sell to them either. If Bob is an important man, then perhaps I need to go to another town to find a buyer. If Bob is famous, then perhaps I need to go several towns away.
- The time elapsed since the theft. Right after I take something valuable I would expect lots of people to be on the lookout for the missing item, depending on the fame and influence of the owner. However, as time passes I would expect most of them to forget about it, with the sphere of people shrinking until only the original owner remembers or cares about it.
- How much the owner valued the item and was aware of it. If I take Bob’s longsword from over his fireplace, it should be hard to sell. If he had a whole box of them in his basement, much less so.
- If the theft was noticed. As above, if an item is sitting unused and forgotten in a basement somewhere, then it should be easier to find a buyer because the original owner probably won’t miss it right away.
- How trustworthy the player is. If a silver fork goes missing and the next day a famous hero and champion of the people shows up trying to pawn one, the buyer is not going to be eager to accuse him of petty theft. On the other hand, if my character is some shiftless unknown who just rolled into town last night (right before the item went missing) and appears in the shop the next morning with the same item for sale, it should at least raise some eyebrows.
- How much theft is going on. If there has been a crime wave recently and lots of stuff is missing, then people should be much more suspect of what I have to sell.
I would not want to try to write the AI code for all of this. Each time you add another item on this list to the AI (no small task, some of it) you will just move the stupid from one part of the game to another. You would eventually find yourself trying to write AI capable of gathering clues and evidence and solving crimes before the system was free of idiocy.
In some ways making NPC’s “smarter” makes them seem dumber. I don’t expect much out of a lifeless NPC who stands behind a counter 24/7/365, who has no life, no family, nothing to do and nothing really to say. He’s just an animated vending machine to the player. However, once you give him a little voice acting, a bit of personality, make some of the other people in town his relatives, give him a daily routine of closing up shop and going home, then the player starts thinking of him as a character or even a person. They might say, “I love Henry the shopkeeper. He’s so crabby and pretends to hate his job so much, but the guys at the pub say he’s rich and he could really quit whenever he wanted.”
But all of this is self-defeating in a way, because when Henry starts to seem real to the player then the player starts to expect Henry to behave rationally. Then when Henry does something very stupid (like refusing to buy a stolen potato, or being willing to buy an item you just lifted out of his pocket a second ago, like his own house key) then the illusion is broken and he seems even dumber than the NPC who never did anything and had no personality.
This reminds me of the Uncanny Valley. Up to a certain point making the AI better and better makes the NPC seem more real, until they become too convincing and then their shortcomings suddenly become glaring and overshadow everything else.
It’s an interesting problem, although it still doesn’t help me to know what I’m supposed to do with all of these corncobs I swiped. Will the buyer still be able to tell they are stolen if I turn them into popcorn?
Shamus Young is an old-school OpenGL programmer, author, and composer. He runs this site and if anything is broken you should probably blame him.