![]() |
|
#1
|
|||
|
|||
|
#51: Building Blocks: Names
I recently received the following question, and offered up the following answer, via email. With the questioner's permission I'm reprinting them here as I think they're of general interest.
>Regarding your latest article about Names, I wanted to ask if >you have any advice on handling a number of like objects in >the same proximity that don't differ in any major way. The >example I'll use is 8 chairs around a dining room table. How >do we allow our players to specify a particular chair at the >table that they want to sit in? It seems strange to break >a table up into several proxes just to be able to manipulate >a specific chair and not every home would have name plates >on each chair. Generally speaking, the chairs around a table >are all exactly alike except a few minor differences like the >tiny scratches on its legs and sides, but I don't believe >most people would search for the tiny scratches in a wood >varnish to find a particular chair. So I'm just curious if >you had any insight into this matter. Yeah, we've thought about that one quite a lot, because it's a continuing problem here. In general, we've come to the conclusion that this isn't an issue of naming at all. Rather it's an issue with how the parser (and how we as people) deal with multiple substantially identical items. Here's a couple of possible solutions: 1. Have your eight chairs each be unique, discrete objects in your room. But, treat them specially because they have the ability to be "filled" or "used up". (This flag might end up being useful in other parts of your system too ... say if you have an oven with a cake in it, who knows what else ...) Let each fillable object have two states: full and empty. By default, all chairs are empty, but when someone interacts with a chair, most likely by sitting in it, it becomes full. Based on the fullness or emptiness of chairs, modify the description of your room (basically, by having "full" and "empty" descriptions): Joe, John, and Diane are sitting in chairs. There are five empty chairs about the table. Make sure that when a chair is filled, the "empty" adjective/description goes away; and when a chair is unfilled, the "empty" adjective/description returns. Finally, only let people sit in empty objects, not full ones. 1b. OK, that works great to first half of the problem--the fact that chairs can be used up, but doesn't deal with the fact that they're substantially identical. So just set up your parser so that whenever a user tries to interact with a substantially identical item, it arbitrarily chooses one from the set or randomly chooses one from the set. > look Joe, John, and Diane are sitting in chairs. There are five empty chairs near the table. > sit in chair [Here, the system decides you can't mean the full chair, because that's illegal, so only considers the five empty chairs, figures out that they're all substantially identical by whatever algorithm you use to determine that, so picks the first one.] You sit in the first empty chair. > look Joe, John, Diane, and you are sitting in chairs. There are four empty chairs near the table. 2. A totally different approach: again, figure that chairs (or other objects) can be either empty or full, but this time just treat it all as one object "eight chairs" and place a limit on it "eight people" or "2000 pounds" or whatever you prefer. You then only have to create one object, which might be a little easier (though allowing for the adjective "eight" might be tricky, since it's usually used for counting), and it still looks about the same. (The trick here is that if you have identical objects it really *doesn't* matter which is used for what.) You then get output like this: > look There are eight chairs near the table. Joe, John, and Diane are sitting in chairs. [As you can see the naming is a little trickier here. "eight chairs" is probably what I call the brief, but somehow the system has to be able to use just the word "chairs" for the further description -- which means you might have to set a special flag for "multiple object" or something, so your system can figure out to only use the counting number for certain types of description.] > sit in chair [Here's the point where the system realizes that "chair" is another name for the "eight chairs" object, looks, sees there is room for you, then allows you to sit down.] You sit in a chair. > look There are eight chairs near the table. Joe, John, Diane, and You are sitting in chairs. Hope that helps. |
|
#2
|
|||
|
|||
|
RE: #51: Building Blocks: Names
Well, I'm the mysterious author of the above email. I thought I would post a follow-up reply giving a bit more detail than I did originally. =)
I'm a little abashed with regards to my lack of clarity in my question, Shannon. Uriel and I have struggled with the answer to the question and came up with the same answers you gave as well. But my dilemna came into play when it actually matters in _which_ chair you sit around the table. For example, I have a character who is a high-ranking noblewoman. She has a large dining hall for dinner parties and gatherings. But as you know, the nobility have a flair for needless classifications and pomp. As such, they tend to pay particular attention to where certain people sit at which tables as it tells a tale of their importance. So, when it _does_ matter which chair you sit in around the table... how do you handle that? Gets a bit tricky. Thanks for all the help, Anjalena
__________________
Mothers tell your children; Be quick you must be strong; Life is never simple; Love is never wrong; Remember what they taught you; How much of it is fear?; Refuse to hand it down; The Legacy stops here! --Melissa Etheridge |
|
#3
|
|||
|
|||
|
Re: RE: #51: Building Blocks: Names
Quote:
If you want to have a really proper dinner party, you could have details like the following: * head chair * first righthand chair * second righthand chair * third righthand chair * first lefthand chair * second lefthand chair * third lefthand chair * foot chair [I suspect this exact naming scheme might not be doable in the Skotos parser because of the use of cardinals in the briefs, which means a slightly less intuitive name might be required.] Hopefully your parser will then show something like this: Billy is sitting in the head chair, Denise is sitting in the first righthand chair, Sal is sitting in the first lefthand chair, and Colin is sitting in the third lefthand chair. The second righthand chair, the second lefthand chair, the third righthand chair, and the foot chair are empty. It's not pretty, but it does get the idea across. If you wanted a little more abstraction, which is less realistic, but more easily intuitive in a textual game, you might create details like: * table head * table middle * table foot Then characters could just choose which third of the table to sit at based on their station: Billy, Denise and Sal are sitting at the table head. Colin is sitting at the table foot. So, those are my first thoughts. Any other ideas or considerations would be very welcome. Shannon |
|
#4
|
|||
|
|||
|
Very interesting. I don't believe we'd thought of things in that way before so that's quite helpful. Unless we'd figured out something better, we were just thinking about doing nameplates on chairs or something... which would be a bit annoying since the names would have to change for each new party. And it wouldn't be very realistic in a more common home.
Thanks so much for the insight, Shannon. I hope we can come back and bother you when we have other brainteasers that confound our grey matter. *grin* Anjalena
__________________
Mothers tell your children; Be quick you must be strong; Life is never simple; Love is never wrong; Remember what they taught you; How much of it is fear?; Refuse to hand it down; The Legacy stops here! --Melissa Etheridge |
![]() |
| Thread Tools | |
| Display Modes | Rate This Thread |
|
|