The forum is being replaced with new software. Please use the replacement hosted at https://forum.angband.live/ in the meantime. These forums will stay open until migrating old topics can be achieved, though posting will eventually be locked. Thankyou for your patience.

something's wrong with The One Ring

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Sky
    Veteran
    • Oct 2016
    • 2309

    something's wrong with The One Ring

    i have noticed that The One Ring consistently generates very mild level feelings.
    I have just found it in a undead pit at DL98 with a LF 6-6.

    A Dragon Armour will generate a LF x-8 and a good RoP will be x-9.
    PDSM is LF x-9.

    Dragon Armours have a power of 500-700, The One Ring has a power of 1.4M; is this some sort of bit-wraparound problem?
    "i can take this dracolich"
  • Nick
    Vanilla maintainer
    • Apr 2007
    • 9359

    #2
    The object rating is a 32-bit integer, so that shouldn't be causing a wrap problem. Was it lying on the floor, or dropped by a monster?
    One for the Dark Lord on his dark throne
    In the Land of Mordor where the Shadows lie.

    Comment

    • PowerWyrm
      Prophet
      • Apr 2008
      • 2942

      #3
      Originally posted by Sky
      The One Ring has a power of 1.4M; is this some sort of bit-wraparound problem?
      I think that's normal because the One Ring has multiple sets of abilities (like all immunities or all abilities) that trigger some INHIBIT_POWER numbers which multiply themselves. There must be an integer overflow in the object feeling code instead.

      Edit: I checked my variant and the One Ring has a power of 20000 which is exactly INHIBIT_POWER, so indeed it's a bug in power calculation.
      Last edited by PowerWyrm; June 29, 2022, 08:47.
      PWMAngband variant maintainer - check https://github.com/draconisPW/PWMAngband (or http://www.mangband.org/forum/viewforum.php?f=9) to learn more about this new variant!

      Comment

      • Sky
        Veteran
        • Oct 2016
        • 2309

        #4
        Originally posted by Nick
        The object rating is a 32-bit integer, so that shouldn't be causing a wrap problem. Was it lying on the floor, or dropped by a monster?
        nope, on the ground. "in a pit".
        d) the Ring of Power 'The One Ring' (+15,+15) <+5>
        Found lying on the floor in a pit at 4900 feet (level 98)

        it wasn't just this once, i've found it 4 times since, well, my last visits, and every time i noticed it was a LF x-7, this time, it was LF 6-6 !

        You had mentioned that level feelings are just the amount of money (as in, value of the items) that's on the ground so i thought, maybe they are capped at 30k as in the shops. Maybe thats why a big vault full of random egos has a higher value.
        "i can take this dracolich"

        Comment

        • sffp
          Swordsman
          • Apr 2020
          • 434

          #5
          I have never found this ring

          Comment

          • Nick
            Vanilla maintainer
            • Apr 2007
            • 9359

            #6
            Originally posted by Nick
            The object rating is a 32-bit integer, so that shouldn't be causing a wrap problem.
            Well, that comment aged poorly. Luckily backwardsEric has done a fix, it will be in the dev builds soon.
            One for the Dark Lord on his dark throne
            In the Land of Mordor where the Shadows lie.

            Comment

            • backwardsEric
              Knight
              • Aug 2019
              • 534

              #7
              Originally posted by Nick
              Well, that comment aged poorly. Luckily backwardsEric has done a fix, it will be in the dev builds soon.
              That change probably isn't good enough. As PowerWyrm said, it's likely an issue in the object_value_real() calculation; its return value is an int, which will be a 16-bit type when compiling for win32, and that won't be enough to hold the value of the plain gold ring.

              Comment

              • backwardsEric
                Knight
                • Aug 2019
                • 534

                #8
                Originally posted by backwardsEric
                That change probably isn't good enough. As PowerWyrm said, it's likely an issue in the object_value_real() calculation; its return value is an int, which will be a 16-bit type when compiling for win32, and that won't be enough to hold the value of the plain gold ring.
                I take that back, int is a 32-bit type on win32; and object_value_real() for the plain gold ring returns 1682025150 when the Windows front end is run under Wine. I'm still a bit doubtful that the other floor objects would add enough to the rating to cause an overflow (the plain gold ring's contribution is capped at 25000 * 25000 = 625000000; would need ~6 times that from the other objects to overflow a uint32_t).

                Comment

                • PowerWyrm
                  Prophet
                  • Apr 2008
                  • 2942

                  #9
                  Originally posted by backwardsEric
                  object_value_real() for the plain gold ring returns 1682025150
                  In my variant which is based off V, when I put a debug breakpoint on object_value_real() for the One Ring, I get 400100000 from a base power of 20000. If like OP said the V power for the One Ring is 1400000, there will be an overflow in object_value_real() since you get value = a * power * power + b * power with a = 1 and b = 5 and power = 1400000 -> value = 1 960 007 000 000, which turns into 1 501 913 024 after fitting into an int32.

                  So the bug in indeed in object_power().
                  PWMAngband variant maintainer - check https://github.com/draconisPW/PWMAngband (or http://www.mangband.org/forum/viewforum.php?f=9) to learn more about this new variant!

                  Comment

                  • Thraalbee
                    Knight
                    • Sep 2010
                    • 692

                    #10
                    Maybe you are looking at this the wrong way. Are you sure you are in control? Have you considered the option that if the ring finds @ unattractive it projects low value?

                    Comment

                    • backwardsEric
                      Knight
                      • Aug 2019
                      • 534

                      #11
                      Originally posted by PowerWyrm
                      In my variant which is based off V, when I put a debug breakpoint on object_value_real() for the One Ring, I get 400100000 from a base power of 20000. If like OP said the V power for the One Ring is 1400000, there will be an overflow in object_value_real() since you get value = a * power * power + b * power with a = 1 and b = 5 and power = 1400000 -> value = 1 960 007 000 000, which turns into 1 501 913 024 after fitting into an int32.

                      So the bug in indeed in object_power().
                      In 4.2.4, the object power for the plain gold ring is 41010 so the expression object_value_real() doesn't overflow. In any case, it should be modified to saturate at the maximum to protect against wraparound in case some other change inflates the values from object_power().

                      Comment

                      • Sky
                        Veteran
                        • Oct 2016
                        • 2309

                        #12
                        keep in mind, i'm just reading the power value from the artifact spoiler file. I dont actually know if that is correct.
                        "i can take this dracolich"

                        Comment

                        Working...
                        😀
                        😂
                        🥰
                        😘
                        🤢
                        😎
                        😞
                        😡
                        👍
                        👎
                        MMOMBuy POE 2 Currency