Do you hear what I hear..?

Started by Lazloth, February 24, 2003, 04:09:49 AM

Something from another thread prompted me to evaluate listen, and what I'd propose be done with the skill.  I think in its current form, it's ridiculous, as:
(a.) with listen status being "viewable," anyone with any given level can just type listen on until it fires;
(b.) hearing everything spoken in a given area is completely unrealistic.

What I would do is:
1.) reintroduce the old listen code for everyone.  The listen off toggle can live, so that players can filter crap out when/if it becomes unwieldy.  Give this a low percent of success; ideally (though unrealistic in terms of reworked code), a check on table distance for frequency or something similar;
2.) rework the rumor (talk bartender) code to incorporate random blips;
3.) make the listen skill "active" in that it would require an argument.  listen bar or listen 2.elf or, hell, even listen all to try and hear everything.

Ah well, more than likely a spice dream, but would be nice.
quote="CRW"]i very nearly crapped my pants today very far from my house in someone else's vehicle, what a day[/quote]

Quote from: "Lazloth"3.) make the listen skill "active" in that it would require an argument.  listen bar or listen 2.elf or, hell, even listen all to try and hear everything.

This is the one I am most fond of.  In its current incarnation I believe the listen skill represents a near magickal ability to divine what everyone is saying even though they are all talking at the same time and in varying degrees of volume.  To me this is a super human feat.  I have a hard time understanding when just my two children are right in front of me talking at the same time in an otherwise noiseless room

I don't remember who it was, Zagren maybe, but someone suggested on the old GDB something pretty much exactly like what you are suggesting here.  Heck, maybe it was you.

Basically changing the listen skill to be a targeted skill.  A given table or individual could be targeted.  To me this would be the most elegant change available.  See people acting funny at a table, and you'll start listening.  Thing is, they might have already mentioned the topic of their conversation, but you are coming in at the tail end and are left to guess.

"So I pulled it out of him and told him that's what he gets, dressing like that."

Might lead you to wonder just what the hell they were talking about.  (And no, they weren't talking about that.  They were complaining about someone who got stuck with an arrow because he didn't wear enough armor.  Perverts.)

Not sure if I am fond of seeing everyone have even a nerfed version of listen.  People don't talk about important things in public enough as it is.  Giving everyone listen might result in nobody saying anything of content unless they are in a magickally sealed room sitting at a table, whispering while their guards sing 'Ode to ol' Tek' loudly and off key.  Even if it did have a high failure rate, people would clam up just because of the possibility.

The only problem with a targeted listen skill would be the issue of listening through doors.  I would hate to see that ability taken away.

Quote from: "aeshyw"The only problem with a targeted listen skill would be the issue of listening through doors.  I would hate to see that ability taken away.

Hmm, good point.

Then, perhaps, the target used could be a given direction.

listen east

[anecdote] Once, a few years ago, I was at a nightclub and I was actually able to hear every individual voice, sound, and conversation in the room (don't ask what I was on). It made me nauseous, and I had to leave right away. [/anecdote]

When my characters are in busy taverns, and the conversations are scrolling by, I have trouble keeping up sometimes, and I try to make sure my characters are also having trouble keeping up. Getting distracted with your own conversation because you're intent on someone else's, or not knowing what/who someone at another table is talking about, even though you could scroll up and look. But it's really easy to skirt or even cross the line of twinkishness with 'listen' and I have to honestly say I never gave it that much thought before...

That being said, keep in mind that taverns aren't the only place listen is used. There are also quieter places with tables/table objects, and times when you would be, for example, sitting in a home and able to hear people arguing in the next room.

What I would propose, is that based on listen skill, you will get a certain number of tables in a multi-table room. The first table is easy to get, but adding a second or third table will require more listen skill. This would also add more gradations to the skill levels: for example, as it stands, you get all tables fairly quickly, then have a while to wait before you get any other listening abilities.

Also, I agree with the suggestion to be able to target this, but I would also like to see a random table chosen if untargeted (because sometimes interesting things happen where you're not expecting them).

At first, I was going to suggest that each table be give a listen-difficulty rating, but really I think that's a bit too complicated, and will just lead to people sitting in the hard-to-listen table.

At any rate, my basic suggestion is that you still be able to just type 'listen' by itself, but what you hear will be more randomized.
Quote from: tapas on December 04, 2017, 01:47:50 AM
I think we might need to change World Discussion to Armchair Zalanthan Anthropology.

Quote from: "Lazloth"2.) rework the rumor (talk bartender) code to incorporate random blips
Here I meant, incidentally, that the listeners could receive false positives;  rooms could store arrays of strings that might interject randomly.

From a <whatever table> you hear:  " ... Templar and ... elven girl ... "

etc.
quote="CRW"]i very nearly crapped my pants today very far from my house in someone else's vehicle, what a day[/quote]

Quote from: "Lazloth"3.) make the listen skill "active" in that it would require an argument.  listen bar or listen 2.elf or, hell, even listen all to try and hear everything.

I really like this one too - it would certainly make listening more realistic. I think somebody said before that it was Harshlands that has the code where you only pick up certain words from the conversation you are eavesdropping. This would be nifty too. At a low level of the skill you'd only hear fragments of the conversation, building up to virtually always complete sentences. This is pretty realistic as your ear can be trained to hone in on something. I played in an orchestra when I was younger and the conductor had a great ear - he could pick out exactly who had hit a wrong note, was out of time, etc. while everybody was playing. Maybe throw in something like a scale of general noise for rooms at certain times during the day. So maybe, on a scale from 1-10 the Gaj would have a noise level of 5 during the day but build up to a 9 at night, making it more difficult to eavesdrop. I have no idea how hard this would be to code - it sounds to me like a pain in the ass to me. I think it would add a fair bit to the game though if it could be done as listen is quite unrealistic as it stands. Might also make people less afraid to speak in public places as their chances of being eavesdropped will drop a good bit. Would also make that really good eavesdropper an especially valuable resource.

I would be against everybody having the listen skill - I think it would devalue the sneakier types roles too much and probably people would never talk about anything of interest in public as CRW mentioned.
You can't trust any bugger further than you can throw him, and there's nothing you can do about it, so let's have a drink" Dydactylos' philosophical mix of the Cynics, the Stoics and the Epicureans (Small Gods, Terry Pratchett)

Quote from: "Boggis"Maybe throw in something like a scale of general noise for rooms at certain times during the day. So maybe, on a scale from 1-10 the Gaj would have a noise level of 5 during the day but build up to a 9 at night, making it more difficult to eavesdrop. I have no idea how hard this would be to code - it sounds to me like a pain in the ass to me.
It does to me as well. They'd have to code EVERY single room with a number. Although perhaps another solution would be base it upon the number of PCs in the room?

I love the target idea as well. I've tried eavesdropping in real life and it's not easy. I'll have to tune out other people to get the person I want, and even then I won't be able to hear every word.

I don't know diddly about diku but with lamda moo, its derivitives, or code created similarly to it, changing the flags of these rooms to include noise levels isn't all that hard. It would take a coder to create the function of setting noise levels, and then any IMM could implement the different rooms in their zones.

the function would be something like (in english since I wouldn't even dare try the pseudocode, let alone the C)

for each room that isn't already designated as silent (since I imagine some already are)...

add flag "sound_level" = S_L
within S_L include "listen" variable set to "x" range
range = 1-8
define range 1: room + 0
define range 2: room + 1
define range 3: room + 2
define range 4: room + (whisper) room
define range 5: room + (whisper) 1
define range 6: room + closed-door 1
define range 7: room + closed-door 2
define range 8: room + (whisper) closed-door 1
end flag

The tool itself would be something like this:
assuming rooms are numbered within each zone, and assuming bars are coded from a parent similar to "indoor tavern room" and busy city streets are coded from a parent similar to "outdoor city room"

@S_L range "indoor tavern room" as 7
@S_L range "outdoor city room" as 2

It would automatically flag every indoor tavern room with a "listen flag" of rank 7, which in my example would let a listener with max skill be capable of overhearing as far as 2 rooms away within the tavern, even through closed doors, but not be able to hear if someone is whispering in that farthest room.

Obviously this would be unrealistic but I did that just as an example and it isn't meant to be the actual suggestion for implementation.

I just realized - in my example, I'm assuming you're changing the individual rooms. Again, no knowledge of diku and only a smattering of lambda moo...

But I'm assuming all objects have parents. Indoor city rooms might be parented to "the god of indoor city rooms, object number 7" for instance.

If that's the case, all the flags for indoor city rooms are added to the single parent, and reboot resets ALL rooms parented to that object unless an individual room has a specific flag that locks it as independent of its parent. So really all you have to do is re-flag the parent object for the different room types to include a noise level. I'm guessing there's no more than 30 different types of rooms in the game, and probably a lot less from a coding perspective.

Quote from: "John"It does to me as well. They'd have to code EVERY single room with a number. Although perhaps another solution would be base it upon the number of PCs in the room?

Well, without knowing coding I'd guess that they could just throw in a background (couldn't think of the word before!) noise default which would apply to all rooms unless stated otherwise. The rooms with background noise would, for the most part, be inside cities I'd say and even then most of them would be defaulted too. It would really only come into play where significant groups of people gather together - so places like the Gaj, Barrel, Sanctuary, Bazaar, etc. would have their own particular background noise. It really should be harder to eavesdrop in a noisy tavern than in an uncrowded street. I thought the hard part about the coding would be to make the whole skill check thingy work. At the moment I'd guess it's a pretty simple check - you attempt to listen and if your skill roll meets the 'number' required to listen in then you eavesdrop. If not, you hear nothing. The proposed way would have to factor in skill level, location background noise and what table you target and then depending on this result spit out a certain number of words from the conversation depending on how successful you were. That sounds like the tricky part to coding it to me.

I don't think basing it on the number of PCs would be right by the way - your chances of eavesdropping would then increase during off-peak times which is an OOC consideration.
You can't trust any bugger further than you can throw him, and there's nothing you can do about it, so let's have a drink" Dydactylos' philosophical mix of the Cynics, the Stoics and the Epicureans (Small Gods, Terry Pratchett)

As a fairly experienced DIKU coder/builder, thought I'd point out that DIKU is not object-oriented, hence there are no room objects and no inheritance to exploit. Rather, there are room flags denoting the room properties, and it is fairly trivial to insert a test when modifying the listen code to give indoor-flagged rooms a higher noise level. This works as long as your indoor rooms are all at the same noise level, which is likely not to be the case. Chances are however that there are different flags on someone's apartment to the Gaj, and some distinctions can be made - the obvious one to my mind is the Lawful flag - i.e. the flag denoting the presence of tale-bearer VNPCs. It would take an inelegant hack to reconcile this approach with room by room values though.

Quirk
I am God's advocate with the Devil; he, however, is the Spirit of Gravity. How could I be enemy to divine dancing?

Quote from: "Quirk"Rather, there are room flags denoting the room properties, and it is fairly trivial to insert a test when modifying the listen code to give indoor-flagged rooms a higher noise level. This works as long as your indoor rooms are all at the same noise level, which is likely not to be the case.
Shrug, where's there's a will, there's a way.   Adjust to Zalanthan day as applicable, example on earth time.

int determine_noise (room) {
...
int noise_pollution, time, temp = 0;
time = some_function_get_hour(curr_time);  // 24hr clock
/* Time affects noise, but differently in different places */
if set(room, ROOM_INDOORS) {
 /* Taverns get noisier at happy hour */
 if set(room, ROOM_TAVERN) {       // new room type
   noise_pollution = 7;    // very loud initialization
   if ((time >= 0) && (time < 7)) {    // between midnight-6am
     temp = time;                                        
     noise_pollution -= temp;           // progressively quieter
   } else if (time < 16) {                 // between 7am-4pm
    temp = random(1,2);                 // generally quiet
    noise_pollution = temp;
   } else {                         // between 5-midnight
    temp = random(0,2);
    noise_pollution = ((time-10) + temp);// progressively louder
   }
  }  // other indoor rooms
 }   // other room sectors
 return noise_pollution;
}

void string_out ( blah, blah ) {    // whatever the game fn is
...
int chance = 0;
/* Noise pollution affects chance to eavesdrop, based on listen skill */
 if char_affected_by(AFF_LISTENING) {
   int noise = determine_noise(char_in_room);  
   chance =  (get_skill_level(char, LISTEN) - 2*(noise))    
  // arbitrary
 }

 if (chance > random(1,100)) {
   do_eavesdrop();            // successful (current eavesdrop)
   whatever_cleanup;
 } else {
   failure();
 }
...


Just one possibility.  There's a million ways to add "noise" or what-have-you.
quote="CRW"]i very nearly crapped my pants today very far from my house in someone else's vehicle, what a day[/quote]

As I said, it would take an inelegant hack to reconcile the approach I just described (and you wrote some sample code for) with a room by room value with sufficient granularity to set an individual room with a different value. I'm not altogether sure what the code was supposed to add to the discussion.

Besides, you'll find the number 2 isn't a function ;)

*runs his mental C parser over the code*

Quirk
I am God's advocate with the Devil; he, however, is the Spirit of Gravity. How could I be enemy to divine dancing?

Quote from: "Quirk"Besides, you'll find the number 2 isn't a function ;)
Heh, sorry.
Quote from: "Quirk"I'm not altogether sure what the code was supposed to add to the discussion.
The above was just a corollary to simply adding a series of sector types to account for varying noise levels.  Here we have some "randomness" based on the time (ie., how populated a tavern is at a given hour will dictate how loud the noise).   Similarly you could check weather in ROOM_OUTDOORS_DESERT or whatever..
quote="CRW"]i very nearly crapped my pants today very far from my house in someone else's vehicle, what a day[/quote]

I myself feel that there is way to much leway for this skill... I think that right now it is a must that this be change in someway. I like two things ive heard sofar, that I thought of my self when I first got the skill IC.
Quote3.) make the listen skill "active" in that it would require an argument. listen bar or listen 2.elf or, hell, even listen all to try and hear everything.

Quote2.) rework the rumor (talk bartender) code to incorporate random blips;
If these could be implemented I would love everyone.

I love you guys.
Quote from: FiveDisgruntledMonkeys
Don't enter the Labyrinth.
They don't call it the Screaming Mantis Tavern to be cute. It's called foreshadowing. First there's screaming, then mantis head.

I like the idea of having a target for listen, as long as 'listen all' stays an option, and those very good at the skill would still be able to hear most of what's going on when they're toggled this way.

The reason?  Sometimes you -aren't- listening to anything specific.  You could be wandering around the room, just keeping your ears open for something that sounds interesting.  Then you redirect your attention to get all the details.  My only worry is that talking at a table in a very public bar becomes -too- safe.  That would be a bad thing.
She wasn't doing a thing that I could see, except standing there leaning on the balcony railing, holding the universe together. --J.D. Salinger