Sleeping Monsters, Noise, Stealth etc.

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • fizzix
    Prophet
    • Aug 2009
    • 3025

    Sleeping Monsters, Noise, Stealth etc.

    So this is kind of a discussion of some of the random stuff that I've had going in my mind. I know this will be fairly long post because the more I've thought about, the more the ideas grow in scope. I'll structure the post by first discussing what problems I'm trying to resolve and after that I'll go into what solution ideas I've come up with.

    The problems:
    ------------------------------------------------------
    1. Monster range of detection is bizarre: i.e. All monsters have ESP. @ is a monsters range of detection if she is within a certain radius monster. No distinction is made between a separation of walls, permanent walls, closed doors or open squares.

    2. Monsters don't wake up when expected

    A) Monsters don't wake up other monsters: Imagine you're a troll sleeping in a room with your buddies. You feel an arrow hit you, and you know what direction it came from. Instead of waking up your 20 sleeping buddies, you decide to rumble off in complete silence towards the arrow firer.

    B) Combat doesn't wake up monsters: I can't think of anything more noisy than a couple heavily armored combatants fighting to the death. Yet, this doesn't seem to affect sleeping monsters. But creeping by them does?

    C) Waking up by light is inconsistent: Why does magically lighting a room have a very high chance of waking up a monster but jabbing a lantern in their face does not?

    3. Monsters never go back to sleep: Why is it that monsters are always asleep to begin with, but as soon as @ wakes them they are doomed to wander around for eternity in a tortured sleepless state even though @ left the level never to return many ages ago? Poor monsters.

    4. Stealth is not modifiable by motion: We all know that if we don't want to wake up someone we move around them slowly and quietly. How come @ hasn't learned this trick, despite having both int and wis of 18?

    5. @ doesn't know basic anatomy: If you gave me a dagger and told me to go kill a sleeping wraith, I'd probably be in trouble. However, if instead you told me to kill a sleeping elf. I might have a good chance at success, despite being weak and clumsy. However, @ does just as much damage to a prone elf as she does to an awake and fighting one.

    6. @ is deaf: There are 30 hounds rounding the corner up ahead, but @ has no idea about the approaching danger.
    ------------------------------------------------------------------------------
    OK, now for some ideas. Before I get started, many of the ideas presented will require modifications that vary across monsters. I suggest variation by symbol, since this will not require complicating the edit file for monsters. (although it might require a new edit file altogether.) I also fully realize that these changes are *large* in scope and might not even be possible to implement. Certainly not by someone with pitiful coding abilities like me.

    1. Range of Detection: Every action has a noise associated with it. Let's call this NOISE. Every monster (class) has two values of importance. A waking value and a hearing value. Call these WAKE and HEAR. For each player move an ambient noise value is calculated for each square in the vicinity of the player. Call this AMBIENT. For simplicity, despite not being physically correct, let's make noise reduction linear. Let's also give the current player action a noise value of 50. Now we need to decide how noise gets reduced. Let's say an open square reduces noise by 1. A closed door/rubble pile by 10 and a wall by 15. Then the AMBIENT value at any point is NOISE - MAX(SUM[features]) where SUM[features] represents the sum of features through all possible paths to the player. Let's give an example.

    <pre>
    ########
    #...T..#
    ########
    #...@..#
    ########
    </pre>

    In this case the AMBIENT value at T is 34. Open square (that Z is on) is 1 and the wall between is 15. Whereas:

    <pre>
    ########
    #...T..#
    #.######
    #....@..#
    ########
    </pre>

    Has an AMBIENT value at T of 43. Traveling 7 open squares from Z to @.

    Now let's give T a WAKE value of 30 and a HEAR value of 10.

    we roll a 1dAMBIENT. If the result is greater than WAKE then T will wake up. If T is already awake and the result is greater than HEAR then T will head toward the noise source. In the first case, the noise comes through the wall, so T can't really head towards @, but in the second case the noise comes through the open square, so T knows where to head. T will always head towards a square of higher AMBIENT value. The dreaded Zs will have WAKE and HEAR values of 0 each. Note: there is little functional difference between an asleep monster and a non-sleeping monster if WAKE and HEAR are the same. And having a HEAR value higher than WAKE makes little sense.

    As it works now all monsters have ESP. In the above formulation, none do. However, it's reasonable to assume certain monsters, Morgoth, Greater Undead, mind flayers, etc. actually have ESP. These monsters should have an ESP flag and should default to the previous detection methods.

    2A: Any monster motion adjacent to another monster wakes it up. This will screw over stealth based characters but can be balanced by 5.
    2B: Combat has a very high noise value. something like 100. Excepting the case in part 5.

    2C: Well, monsters need separate values wake noise and a wake light. You could imagine a Troll being more sensitive to light than to noise and a worm mass being more sensitive to noise, but completely insensitive to light. The calculation for light is much more simple than for noise. If you are in a players light radius you roll for 'wake light.' If the room gets magically lit (except by enlightenment) you roll for 'wake light' (only once, on the transition).
    Being in light radius does not matter if the square is already perma-lit.

    This will make sneaking up on monsters insanely hard. So in that vein I think we need an added 'sheath light' option in which @ can hide her light source. @ can now see things on all adjacent squares, but does not light up any of them. Alternatively. all magical sources of light (everything besides lanterns and torches) can be considered 'dark' light, in that they do not wake up other monsters.

    An awake monster becomes aware of the player anytime any lit section of the players radius comes into line of sight.

    3. @ wanted to sneak up on our unsuspecting T. However, she tripped over a rock and T woke up. @ can't handle T if the troll is awake so she teleports away. T has a finite awake time. Every turn that T is not aware of @, T's INTEREST decreases. If T becomes aware of @ again, the INTEREST value goes back to full. Let's say monster INTEREST starts at 10000, and decreased by 1d10 every game turn. After roughly 200 unhasted player turns T will fall asleep again. We can make this monster dependent also. So certain monsters fall asleep differently.

    What does T do in the intervening time. Well first T heads to the last place that they heard or saw @. Then T random walks around there, heading towards another monster of like kind if one is nearby.

    4. S for search mode should actually be Stealth mode. This should be settable by the player, allowing them to take N turns for each 1 accounting for a reduction in noise, up to some minimum. The amount of noise @ makes upon movement should be a direct function of their armor and their stealth setting.

    Example: Naked @ makes noise of 50. Each extra turn in motion decreases noise by 5 up to a maximum of 20 off (this can be dex dependent). (each stealth value also decreases noise by 5). Naked @ now has a noise value of 30 meaning that she can sneak up on the T provided she shields her light, since T has a WAKE value of 30 as well. However, what if @ was wearing chain mail, iron shod boots, a metal helm, and some gauntlets. Reasonable guesses would increase her noise by 10 for the mail and the boots and 5 for the helm and gauntlets, leaving her Noise at 80 and giving her no way of sneaking up on T.

    Furthermore, items in @s bag should also make noise as if they were being worn. metal items (excluding rings and amulets) should make lots of noise if you were carrying them around. Obviously all this stuff would need to be balanced, and probably (sadly) is years off from implementation. My numbers are just invented.

    5. Ok so monsters are waking up pretty much anytime @ does anything unless she takes off her armor and blinds herself. But then, unless she can kill something in one blow, she's dead in the water after her first hit. But, she's hitting a prone monster! how in the world can she not do a lot of damage with this hit. @s first attack on a sleeping monster should be 4-5 times more damage than it would be if the monster was awake. Essentially this is like an assassination attempt. Assassination damage should be dependent on stealth, dex and class. And if the monster dies on the first blow it does not wake up the monsters next to it. However, if it does wake, @'s next blow is like a normal combat blow, and pretty much everything will hear it. Assassination can only be made with melee, not with ranged attacks or spells.

    6. Monsters also have a default NOISE value. If @ hears something she should be warned and should direction of where the noise comes from. Resting @ (should also regain HP,SP much quicker) but is less likely to hear noise perhaps.

    So there's a lot here, and I'd be surprised if anyone read this far. The net result for these changes would be that monsters wake up less if @ is skulking but once one wakes, pretty much everything is awake. However, @ can run away out of the Range of Hearing, shut some doors and wait a while and then try again. Hounds are still a major pain, but can now be avoided with enough detection, since you can now detect them before they hear you. Once they start yapping though, they'll wake up everything in the vicinity.

    No changes need to be made on aggravation or monsters that call for help, like shriekers. These are magical effects and are reasonable if they work in a radius type effect.
  • buzzkill
    Prophet
    • May 2008
    • 2939

    #2
    Originally posted by fizzix
    So there's a lot here, and I'd be surprised if anyone read this far.
    I wouldn't be. You've a lot of good ideas here, some of which are already in variants, some of which need to make it into Vanilla. Unfortunately, your expectations are probably right on the money because, A) we fear change, and B) it sounds like a lot of work.
    www.mediafire.com/buzzkill - Get your 32x32 tiles here. UT32 now compatible Ironband and Quickband 9/6/2012.
    My banding life on Buzzkill's ladder.

    Comment

    • will_asher
      DaJAngband Maintainer
      • Apr 2007
      • 1124

      #3
      I'm going to try to simplify your ideas / mix them with my own to think about how I can improve my variant in this area.

      Originally posted by fizzix
      ------------------------------------------------------
      1. Monster range of detection is bizarre: i.e. All monsters have ESP. @ is a monsters range of detection if she is within a certain radius monster. No distinction is made between a separation of walls, permanent walls, closed doors or open squares.
      Any way to fix this correctly would be very hard to code (at least for me). I could simplify this a little to make it so you're more likely to wake monsters up when you're in line of sight. That would improve it some at least.

      Originally posted by fizzix
      1. Range of Detection: Every action has a noise associated with it..
      I skipped reading most of this idea because I could tell from the beginning that it was way too complicated for me. But the first line of it gives me another idea:
      Every action (or most at least) would call a function that has a chance to decrement a monsters sleep counter, (varying by the action in chance and amount) possibly waking the monster up. This function would probably only trigger for monsters in line of sight or very nearby. The code in the function would be very similar to the place at the beginning of the current process_monster() function (And when I say current, I mean current in DaJAngband based on V3.0.9 code. I don't know how much the code of 3.1.1 has changed, but I doubt process_monster() has changed that much).

      Originally posted by fizzix
      2A) Monsters don't wake up other monsters: Imagine you're a troll sleeping in a room with your buddies. You feel an arrow hit you, and you know what direction it came from. Instead of waking up your 20 sleeping buddies, you decide to rumble off in complete silence towards the arrow firer.
      I think I can implement monsters waking each other up. I'd make it so they wake only other monsters of their type because I don't imagine different types of monsters would cooperate most of the time.

      Originally posted by fizzix
      B) Combat doesn't wake up monsters: I can't think of anything more noisy than a couple heavily armored combatants fighting to the death.
      a jackhammer? a rock concert? a childcare center with a dozen screaming toddlers? The roar of a great wyrm of thunder?
      ..This would be fixed by the every action calls the noise function idea above.

      Originally posted by fizzix
      C) Waking up by light is inconsistent: Why does magically lighting a room have a very high chance of waking up a monster but jabbing a lantern in their face does not?
      It wouldn't be too hard to make a lit lantern next to a monster have the same effect as making noise. Having separate values for noise and light would be too much trouble, but we could make HURT_LITE monsters more likely to wake up when the noise function is called by a lantern next to it. (BTW, most worm masses have HURT_LITE, so they would be sensitive to it).

      Originally posted by fizzix
      3. Monsters never go back to sleep: Why is it that monsters are always asleep to begin with, but as soon as @ wakes them they are doomed to wander around for eternity in a tortured sleepless state even though @ left the level never to return many ages ago? Poor monsters.
      This doesn't make sense. We don't know what the monsters do after we've left the level. They probably do go back to sleep.

      Originally posted by fizzix
      4. Stealth is not modifiable by motion: We all know that if we don't want to wake up someone we move around them slowly and quietly. How come @ hasn't learned this trick, despite having both int and wis of 18?
      Having the player chose how slowly he moves would be too complicated (for me), but it would be easy to give the @ a stealth bonus when search mode is on.

      Originally posted by fizzix
      5. @ doesn't know basic anatomy: If you gave me a dagger and told me to go kill a sleeping wraith, I'd probably be in trouble. However, if instead you told me to kill a sleeping elf. I might have a good chance at success, despite being weak and clumsy. However, @ does just as much damage to a prone elf as she does to an awake and fighting one.
      Even real smart people in middle earth didn't know much about internal organs, and a dumb orc would know that slitting a throat of a sleeping person would be more effective than swinging a sword at him. So I don't think intelligence should have anything to do with it, and I don't think most classes should have access to this advantage, but assassins in DaJAngband do get a damage bonus when attacking sleeping monsters. (I should probably let the player know that in the game) All classes do get a minor bonus to-hit against sleeping monsters.
      I am also considering making things like jellies and wraiths immune to critical hits like they are in DND.

      Originally posted by fizzix
      6. @ is deaf: There are 30 hounds rounding the corner up ahead, but @ has no idea about the approaching danger.
      I have implemented a (primitive and not very good) version of hearing monsters in DaJAngband and it's pretty complicated. Giving a message every time you hear a monster can be very annoying (like those 'pushing past' messages that were in the 3.1.x devs for awhile), but if you don't give a message, the player isn't likely to notice (or know why) a monster symbol just appeared on the screen out of line of sight and then dissapeared again.
      Graphics further complicates this because without graphics when you hear a monster in DaJAngband, the symbol always appears grey, but I can't change the color of the graphic tiles or make it so you can't tell the specific monster if you recognise the tile.
      --------------------------------------------------------------------------

      Originally posted by fizzix
      2A: Any monster motion adjacent to another monster wakes it up. This will screw over stealth based characters but can be balanced by 5.
      2B: Combat has a very high noise value. something like 100. Excepting the case in part 5.
      These suggestions IMHO are a little too extreme for the reason you stated.

      Originally posted by fizzix
      An awake monster becomes aware of the player anytime any lit section of the players radius comes into line of sight.
      (in areas which are otherwise dark) ..I should probably put this into DaJAngband because I do have monsters which are awake before they notice you.

      Originally posted by fizzix
      3. @ wanted to sneak up on our unsuspecting T. However, she tripped over a rock and T woke up. @ can't handle T if the troll is awake so she teleports away. T has a finite awake time. Every turn that T is not aware of @, T's INTEREST decreases.
      Morgoth's monsters are relentless. There's no reason that they should lose interest in the player unless they're magically charmed or put to sleep.

      It would make sense for metal armor to have a stealth penalty, but I wouldn't implement that because light armor is already much better than heavy armor in most ways.
      Will_Asher
      aka LibraryAdventurer

      My old variant DaJAngband:
      http://sites.google.com/site/dajangbandwebsite/home (defunct and so old it's forked from Angband 3.1.0 -I think- but it's probably playable...)

      Comment

      • Leewei
        Rookie
        • Sep 2009
        • 6

        #4
        Originally posted by fizzix
        1. Range of Detection: Every action has a noise associated with it. Let's call this NOISE. Every monster (class) has two values of importance. A waking value and a hearing value. Call these WAKE and HEAR. For each player move an ambient noise value is calculated for each square in the vicinity of the player. Call this AMBIENT. For simplicity, despite not being physically correct, let's make noise reduction linear. Let's also give the current player action a noise value of 50. Now we need to decide how noise gets reduced. Let's say an open square reduces noise by 1. A closed door/rubble pile by 10 and a wall by 15. Then the AMBIENT value at any point is NOISE - MAX(SUM[features]) where SUM[features] represents the sum of features through all possible paths to the player. Let's give an example.

        <pre>
        ########
        #...T..#
        ########
        #...@..#
        ########
        </pre>

        In this case the AMBIENT value at T is 34. Open square (that Z is on) is 1 and the wall between is 15. Whereas:

        <pre>
        ########
        #...T..#
        #.######
        #....@..#
        ########
        </pre>

        Has an AMBIENT value at T of 43. Traveling 7 open squares from Z to @.

        Now let's give T a WAKE value of 30 and a HEAR value of 10.

        we roll a 1dAMBIENT. If the result is greater than WAKE then T will wake up. If T is already awake and the result is greater than HEAR then T will head toward the noise source. In the first case, the noise comes through the wall, so T can't really head towards @, but in the second case the noise comes through the open square, so T knows where to head. T will always head towards a square of higher AMBIENT value. The dreaded Zs will have WAKE and HEAR values of 0 each. Note: there is little functional difference between an asleep monster and a non-sleeping monster if WAKE and HEAR are the same. And having a HEAR value higher than WAKE makes little sense.

        As it works now all monsters have ESP. In the above formulation, none do. However, it's reasonable to assume certain monsters, Morgoth, Greater Undead, mind flayers, etc. actually have ESP. These monsters should have an ESP flag and should default to the previous detection methods.
        I wonder if the minimum distance path value for mob AI can somehow be hijacked into this calculation?

        Comment

        • buzzkill
          Prophet
          • May 2008
          • 2939

          #5
          Originally posted by fizzix
          1. Range of Detection: Every action has a noise associated with it. Let's call this NOISE. Every monster (class) has two values of importance. A waking value and a hearing value. Call these WAKE and HEAR. For each player move an ambient noise value is calculated for each square in the vicinity of the player. Call this AMBIENT. For simplicity, despite not being physically correct, let's make noise reduction linear. Let's also give the current player action a noise value of 50. Now we need to decide how noise gets reduced. Let's say an open square reduces noise by 1. A closed door/rubble pile by 10 and a wall by 15. Then the AMBIENT value at any point is NOISE - MAX(SUM[features]) where SUM[features] represents the sum of features through all possible paths to the player. Let's give an example.
          AMBIENT would be better assigned to noise created by things other than the player, most notably awake monsters and distant actions plus maybe a random value assigned to the dungeon level itself (water, wind, etc). The PLAYERNOISE (noise created by the players actions in his square) would have to be louder than the AMBIENT in any given square for it to even have a chance to be noticed. Furthermore, any PLAYERNOISE would last for ONLY 1 turn and would only be generated in turns in which the player is conducting a noise generating action. It wouldn't hang around like a scent in the air would. So, while a monster would be able to head off in the right direction, he would not be able to track the player unless the player continued to generate audible noise on successive turns.
          www.mediafire.com/buzzkill - Get your 32x32 tiles here. UT32 now compatible Ironband and Quickband 9/6/2012.
          My banding life on Buzzkill's ladder.

          Comment

          • Hariolor
            Swordsman
            • Sep 2008
            • 289

            #6
            I am assuming that M is aware that there is a town of grumpy adventurers atop his fortress. I am also assuming that M cares enough about his privacy to want to keep pesky thieves/assassins away from him and his minions while he gathers his power.

            Ergo, M uses his power to make his monsters tireless in their hunt for intruders, and grants them limited ESP to assist in their roles as bodyguards.

            Let's take it as a gift that monsters are ever asleep at all. Apparently the need for rest occasionally overpowers even Morgoth's thralls.

            Comment

            • fizzix
              Prophet
              • Aug 2009
              • 3025

              #7
              Originally posted by buzzkill
              AMBIENT would be better assigned to noise created by things other than the player, most notably awake monsters and distant actions plus maybe a random value assigned to the dungeon level itself (water, wind, etc). The PLAYERNOISE (noise created by the players actions in his square) would have to be louder than the AMBIENT in any given square for it to even have a chance to be noticed. Furthermore, any PLAYERNOISE would last for ONLY 1 turn and would only be generated in turns in which the player is conducting a noise generating action. It wouldn't hang around like a scent in the air would. So, while a monster would be able to head off in the right direction, he would not be able to track the player unless the player continued to generate audible noise on successive turns.
              I think I was going under the assumption that the dungeon is deathly quiet before the player arrives. Therefore, any sound, including monster sounds should wake them up. Again this makes the game impossible for all but a tank, unless you let the monsters go back to sleep eventually.

              also, re other peoples suggestions:
              I guess if you want to go under the assumption that *all* the monsters in the dungeon are directly under Morgoth's control then you *might* be able to argue for never sleeping and for ESP. I always assumed that these were semi-random monsters that gathered their for their own reasons, some of them to depose Morgoth themselves, some to find the amazing loot that's there, and some for their insatiable love of @ meat.

              Comment

              • Bad Tempered Geezer
                Rookie
                • Aug 2009
                • 22

                #8
                Originally posted by fizzix
                6. Monsters also have a default NOISE value. If @ hears something she should be warned and should direction of where the noise comes from. Resting @ (should also regain HP,SP much quicker) but is less likely to hear noise perhaps.
                We could color "open space" dots for noise as we do for light. Instead of being light or dark, they could be on a scale from blue -> red; blue if there was no noise in that square and red if there was very much.

                One would only see the blue/red color effects in a radius dependent on @'s hearing ability. At the beginning, hearing is limited to only the spaces around the player (this is natural, as we can usually only tell as much as "direction" with our hearing). However, this may grow slowly with, say, DEX or level to maybe 3 spaces. A new passive bonus could be added to items (much like ESP) which supernaturally "Improves Hearing" and greatly increases the hearing radius (6 spaces?).

                This would make sneaking around more player-friendly, as one would be able to actually see how much noise one would be making. This would also, in effect, solve the problem of "30 hounds rounding the corner up ahead, but @ has no idea of the approaching danger." If the hearing radius is even very small, one would be able to tell "I'm not in a safe place" or "there are monsters this way as opposed to that way." Except with ghosts, vampires, etc. It's natural that many monsters don't make any noise.

                Hearing would in effect be a limited, rough version of ESP that can cover some of the "unintelligent" monsters and serve the same purpose in the early game before one has acquired ESP. Also, since everyone can hear, it would make ESP less "necessary" as it is now.

                Comment

                • NotMorgoth
                  Adept
                  • Feb 2008
                  • 234

                  #9
                  Something I've always thought would be nice, but I've never yet seen in a variant, even the ones that do have some kind of noise/stealth system, is the ability to use either a spell or some kind of time-triggered trap to create noise in a different part of the dungeon, attracting the monsters to that area so the skillful @ can sneak past undetected.

                  Comment

                  • Antoine
                    Ironband/Quickband Maintainer
                    • Nov 2007
                    • 1010

                    #10
                    Originally posted by fizzix
                    B) Combat doesn't wake up monsters: I can't think of anything more noisy than a couple heavily armored combatants fighting to the death.
                    Hi

                    This has always bothered me too, it doesn't seem right that you can walk up a monster and slowly beat it to death while its pals sitting next to it slumber away peacefully and it screams "GUYS! GUYS! HELP ME! HE'S KILLING ME! OH! OH! I'M DYING! S&*(" and they don't wake up.

                    I've just tried tackling this with a relatively minor change.

                    When a monster attacks you in melee, all nearby sleeping monsters who are in your LOS have a fairly large chance of waking up.

                    So if you can run up to a monster and kill it a single hit, then it never gets an attack against you and you can do the same to the next monster... this I imagine as a rogue creeping round the room slitting throats... but if the monster survives one round of your attacks then it will have a go at you and everyone else will wake up.

                    We'll see how it plays.

                    A.
                    Ironband - http://angband.oook.cz/ironband/

                    Comment

                    • artes
                      Adept
                      • Jun 2011
                      • 113

                      #11
                      Very good ideas, fizzix. I agree on many of them, and I don't think it would be overly difficult to implement a new noise system.

                      Originally posted by fizzix
                      3. @ wanted to sneak up on our unsuspecting T. However, she tripped over a rock and T woke up. @ can't handle T if the troll is awake so she teleports away. T has a finite awake time. Every turn that T is not aware of @, T's INTEREST decreases. If T becomes aware of @ again, the INTEREST value goes back to full. Let's say monster INTEREST starts at 10000, and decreased by 1d10 every game turn. After roughly 200 unhasted player turns T will fall asleep again. We can make this monster dependent also. So certain monsters fall asleep differently.
                      If I were a monster and I knew that @ were on the level, I wouldn't go back to sleep. I would read my scroll of Teleport level.

                      Though some unintelligent monsters, like White worm mass, would maybe not care so much. You are right they could go asleep again.

                      Originally posted by fizzix
                      6. Monsters also have a default NOISE value. If @ hears something she should be warned and should direction of where the noise comes from. Resting @ (should also regain HP,SP much quicker) but is less likely to hear noise perhaps.
                      This would cause a massive message spam. I wonder if it can be implemented by using a sound instead of a message. Or maybe it can be indicated in another way, like if there is a warning lamp that is lit somewhere on the screen. Also I think @ would hear noise better when resting, unless actually sleeping.

                      Comment

                      • half
                        Knight
                        • Jan 2009
                        • 910

                        #12
                        Fizzix,

                        Very interesting ideas. As it happens, I've implemented almost all of them in some form in my unreleased variant 'Sil'. I have about 5 serious beta testers, so I have some idea of how they work.

                        Originally posted by fizzix
                        1. Monster range of detection is bizarre: i.e. All monsters have ESP.

                        For simplicity, despite not being physically correct, let's make noise reduction linear. Let's also give the current player action a noise value of 50. Now we need to decide how noise gets reduced. Let's say an open square reduces noise by 1. A closed door/rubble pile by 10 and a wall by 15.
                        I've done almost exactly this. I used the 4GAI monster flow code to do it. This computes the distance to the player from each accessible square in the map (floors and doors and traps -- passwall monsters don't use it anyway). It computes it in much the way you describe (a breadth first search). It computes distances for door-opening and non-door-opening monsters. I added one for noise dissipation with doors being worth 10 and rubble/walls impassable.

                        This works very well. It is particularly nice to sneak past a group of dangerous monsters, then close the door. It really makes doors much more interesting. If sneaking, you often want to close all doors you go near. I also set up a debug mode that shows distance in this metric in colour on the map for testing. Very useful.

                        A) Monsters don't wake up other monsters: Imagine you're a troll sleeping in a room with your buddies. You feel an arrow hit you, and you know what direction it came from. Instead of waking up your 20 sleeping buddies, you decide to rumble off in complete silence towards the arrow firer.
                        I allow intelligent monsters to cry out if there is another monster of that symbol in LOS (and use an array of crying out messages by monster type). This wakes the monsters of that symbol. I give them a 50% chance of doing this and not on their first turn awake (in which they get no action at all). This makes it fun to try to stop them before they can wake their allies.

                        B) Combat doesn't wake up monsters: I can't think of anything more noisy than a couple heavily armored combatants fighting to the death. Yet, this doesn't seem to affect sleeping monsters. But creeping by them does?
                        I have different amounts of noise created based on the action being performed, and then some for other actions. So the player attacking a monster causes noise (more if you hit than miss) and monsters attacking players, or causing earthquakes or whatever also makes noise. I have special skills in skill trees in Sil and Quiet Fighting is one of them, lessening these penalities a lot.

                        C) Waking up by light is inconsistent: Why does magically lighting a room have a very high chance of waking up a monster but jabbing a lantern in their face does not?
                        This is the only thing on your list I haven't done. I decided against it because turning lanterns on and off is not very fun. Perhaps it can be made fun, I don't know.

                        However, I do have a bonus for monsters to notice you if you are in LOS of them, and a penalty to notice you based on the number of adjacent wall tiles, so there is an advantage to sneaking around the edges of rooms and hiding in corners etc. This is actually very cool, especially as you are notified when monsters are close to waking and can wait in a quite place for them to calm down again.

                        3. Monsters never go back to sleep: Why is it that monsters are always asleep to begin with, but as soon as @ wakes them they are doomed to wander around for eternity in a tortured sleepless state even though @ left the level never to return many ages ago? Poor monsters.
                        I allow for this too. It works pretty well. I have three states for monsters: alert, unwary, asleep. Unwary monsters have a target square (randomly chosen in the dungeon) and try to walk towards it. All monsters in a group have the same target. When they arrive, they walk around in a random walk until after some time they get given a new target. This system makes a stealth based game of Angband much more fun as sometimes a group of monsters will come straight into your room and if you are good at hiding you can sometimes have them go past you. It also works well with the idea above as you can have them become unwary, but target the place they last saw you so the wander to there but if there are still no signs of you will just wander the halls and eventually go back to sleep.

                        4. Stealth is not modifiable by motion: We all know that if we don't want to wake up someone we move around them slowly and quietly.
                        I changed Search mode to Stealth mode and gave a large bonus to stealth. You could have it do both if you wanted, but really search mode is pretty useless.

                        Remember to have an even larger bonus when passing/resting.

                        5. @ doesn't know basic anatomy: If you gave me a dagger and told me to go kill a sleeping wraith, I'd probably be in trouble. However, if instead you told me to kill a sleeping elf. I might have a good chance at success, despite being weak and clumsy. However, @ does just as much damage to a prone elf as she does to an awake and fighting one.
                        Yes, you will want some way to help out the player. These changes really do make stealth based play harder (but *much* more interesting, so stealth loving players should be excited by these ideas). You need to allow some compensation and this is an obvious point. I give a large bonus to hit, which in the Sil combat system helps criticals (you get criticals by rolling much higher to hit than you required). Also in Sil you gt better crits with light weapons so it works nicely. You might need a different way of doing the bonus in Angband.

                        6. @ is deaf: There are 30 hounds rounding the corner up ahead, but @ has no idea about the approaching danger.
                        I have a Listen skill in Sil which is very nice. I have a stealth score for each monster (could be done by letter) and the player gets a chance to hear them using the same noise dissipation metric. If I hear them, I draw a grey asterisk on the square. This works nicely and for invisible monsters too (though ghosts would have very high stealth). If I succeed by enough I show the actual symbol. You can lurk outside a room and open the door to hear the monsters more clearly. You can also see if they are moving to surround you, making for neat tactical play.

                        Overall: great ideas, and they can be made to work well. PM me your email address if you want a beta copy of Sil or the source code (based off NPP and not updated to the new directory structure). I'll probably release it in the autumn.

                        half.

                        Comment

                        • artes
                          Adept
                          • Jun 2011
                          • 113

                          #13
                          Originally posted by half
                          I allow for this too. It works pretty well. I have three states for monsters: alert, unwary, asleep. Unwary monsters have a target square (randomly chosen in the dungeon) and try to walk towards it. All monsters in a group have the same target. When they arrive, they walk around in a random walk until after some time they get given a new target. This system makes a stealth based game of Angband much more fun as sometimes a group of monsters will come straight into your room and if you are good at hiding you can sometimes have them go past you. It also works well with the idea above as you can have them become unwary, but target the place they last saw you so the wander to there but if there are still no signs of you will just wander the halls and eventually go back to sleep.
                          Patrolling monsters? That sounds cool. I imagine a rogue watching from the shadows while a group of trolls walk by.

                          Comment

                          • Magnate
                            Angband Devteam member
                            • May 2007
                            • 5110

                            #14
                            Originally posted by half
                            Very interesting ideas. As it happens, I've implemented almost all of them in some form in my unreleased variant 'Sil'.
                            Your variant sounds very interesting - is it based off V or off another variant? If it's based off V, would you be interested in putting it up on github so we can steal your ideas^w^w^w draw from it to improve V?
                            "Been away so long I hardly knew the place, gee it's good to be back home" - The Beatles

                            Comment

                            • half
                              Knight
                              • Jan 2009
                              • 910

                              #15
                              Originally posted by artes
                              Patrolling monsters? That sounds cool. I imagine a rogue watching from the shadows while a group of trolls walk by.
                              Yes, that's right. Stealthy characters can often hide in the corners of the rooms and pray that no-one notices them. It works even better in column filled rooms as you are mostly out of line of sight.

                              Comment

                              Working...
                              😀
                              😂
                              🥰
                              😘
                              🤢
                              😎
                              😞
                              😡
                              👍
                              👎