Monsters, objects and randarts - simplification

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Nick
    Vanilla maintainer
    • Apr 2007
    • 9637

    Monsters, objects and randarts - simplification

    Current situation:
    1. 650 lines of code are devoted to evaluating monster power; this is used for monster level feeling, evaluating slays and brands on objects, and could be (but isn't) used for deciding whether monsters are the appropriate rarity.
    2. 750 lines of code are devoted to evaluating the power of wearables and ammo. This is used for prices and randarts.
    3. The randart code (about 2500 lines) does a detailed evaluation of the standard artifact set, including powers, and then designs a new set so that each individual randart has similar power to some standard artifact, and over the two sets of artifacts as a whole each property will appear roughly the same number of times.


    The monster power code is intricate and contains a large number of arbitrary-looking choices for how to value various properties. The object power also has a lot of arbitrary choices, but it's mostly fairly clear how they're made. The core of the randart code is pretty simple and clear (make a frequency table of properties and choose randomly from it), but there are some aspects of it which are outdated, and other choices as to how to allocate power and properties that might be worth considering.

    My current thinking is to
    • Blow away the monster power code, replace monster power by level, maybe with a slight bonus for uniques. The monster list is the core of the game - it is player against monsters - and as such should be handcrafted.
    • Simplify the object power code as much as possible. Ideally each property (sustain, resist, immunity, +1 to a stat, etc) would have its own fixed contribution to power, but in practice we might need to increase power when an item has, say, all the basic resists covered. The main pitfall here is the effect on prices.
    • Some simplification of the randart code, considering options like assessing overall power rather than item-by-item. I think we have a fair bit of leeway here, but because randarts are downstream of objects there will be potentially big effects from changes to the object power code. This might take a while to balance.


    Thoughts?
    One for the Dark Lord on his dark throne
    In the Land of Mordor where the Shadows lie.
  • Derakon
    Prophet
    • Dec 2009
    • 9022

    #2
    I'm fine with removing monster power code, but I'd think very carefully about object power. I suspect that power is not so linear as you describe; in particular, the power of a given item is dependent on all the other items that you could equip in that slot. For example, why are Cambeleg and Paurhach the best artifact gloves? Because one gives you CON and the other gives you regen, and both are not otherwise available on gloves. On the other hand, if you lack Free Action (and let's pretend for a moment that Cambeleg doesn't provide FA) then suddenly any gloves that give FA are the best gloves you could possibly be using.

    Similarly, you can make some very powerful rings indeed without them being excessively unbalancing, because there's so many other powerful rings that the player is having to choose between. No other slot has the potential for handing out a +12 speed bonus (or even larger!). As long as your new super-ring doesn't show up too early, it's fine.

    I honestly don't know how I'd go about assigning object power levels. Too much depends on what the player has already found for me to be confident that we can point at a single item in a vacuum and say "that item is worth this much."

    Maybe what we should do is compile expected player power levels somehow over the course of the game, and then say "we would expect this item to most likely be found at this point in the game, at which point it would modify the player's power by X". Player power can be assigned as a probabilistic sum of flag and stat powers, e.g. at 2000' the player has a 99% chance of the FA flag, 95% of the basic elemental resists, on average a +3.5 to CON, etc. So at that point an item giving FA isn't that valuable, but one giving more CON would be.

    ...but that sounds awfully complicated.

    Comment

    • fizzix
      Prophet
      • Aug 2009
      • 3025

      #3
      Originally posted by Derakon
      I'm fine with removing monster power code, but I'd think very carefully about object power.
      I'm somewhat surprised at this, since if I remember previous discussions you were one of the ardent supporters that monster level should not be direclty tied to monster power.

      Comment

      • Derakon
        Prophet
        • Dec 2009
        • 9022

        #4
        Originally posted by fizzix
        I'm somewhat surprised at this, since if I remember previous discussions you were one of the ardent supporters that monster level should not be direclty tied to monster power.
        I won't claim to be a consistent human. But I believe what you're alluding to was the desire to have a perfectly consistent "monster difficulty curve", where there were no monsters that were unusually powerful for their native depths. Assuming we still allowed that, I guess using treating those monsters' power levels as being their native depths would be inaccurate, but it probably wouldn't have a major impact on other calculations that depend on monster power.

        Or we could just explicitly separate power from native depth and have two manually-set numbers.

        Comment

        • Estie
          Veteran
          • Apr 2008
          • 2347

          #5
          What would happen if you gave items a power value based on some average estimation, and ignored slot/player power/available egos it competes with/etc ?
          (basically Nick´s suggestion, if I understand correctly).

          Where exactly do you need the distinction that speed on a ring is normal while on a body armour its special ?

          For randarts, I would expect that things even out - standarts have a speed option in the bow slot; randarts can be expected to have something with a major speed boost in some unconventional slot, it doesnt have to be the bow slot.

          Currently such a speed item is tied to a powerful standart, otherwise it wont get enough points to become a speed item in a non-speed slot.

          If you do away with that tie, you end up with powerful standarts becoming junk or junk standarts becoming powerful more often. Over the course of creating some 100 artifacts, it is going to even out. I think you wont notice the difference when you look at a random set of randarts.

          Comment

          • fizzix
            Prophet
            • Aug 2009
            • 3025

            #6
            @Derakon: The problem here, and I think one of the problems the initial calculation was trying to solve, is that the most dangerous monsters are precisely those that come earlier than expected. So a dracolisk is a lot more dangerous than a great wyrm of balance (prior to conical breaths) simply because it's the first monster that can breath nether for gobs of damage.

            Conical breaths obviously change things specifically here, but the general idea is the same. The most dangerous monster is the one that's "out of depth" whether by design or by a roll of the die in dungeon generation.

            @Estie: One of the main reasons for tying certain abilities to certain skill slots was the proliferation of +blows or +shots on armor. It's possible just not allowing those abilities on anything but weapons and launchers is good enough for now.

            Still though, the comparison is against the non-artifact items that are available. A +5 speed boost on boots just isn't worth nearly as much as a +5 boost on armor because you can find +10 speed on boots with non-artifact gear. You really do need to account for that.

            Comment

            • Derakon
              Prophet
              • Dec 2009
              • 9022

              #7
              Originally posted by fizzix
              @Derakon: The problem here, and I think one of the problems the initial calculation was trying to solve, is that the most dangerous monsters are precisely those that come earlier than expected. So a dracolisk is a lot more dangerous than a great wyrm of balance (prior to conical breaths) simply because it's the first monster that can breath nether for gobs of damage.
              I don't dispute that, I'm just wondering how much impact that has on use of monster power for calculating item value. After all, when you're considering the value of a piece of equipment, you're (usually, with rPois a big exception) considering its value against all targets, not just the really big ones.

              Comment

              • Pete Mack
                Prophet
                • Apr 2007
                • 6883

                #8
                Item valuation is ridiculously complex. It matters how rare the resistance is, how powerful the equipment slot is, how strong MAX breath damage is, and MAX spell damage as well (for darkness in particular.) And how common the attack is.

                Comment

                • Estie
                  Veteran
                  • Apr 2008
                  • 2347

                  #9
                  Originally posted by fizzix
                  @Derakon: The problem here, and I think one of the problems the initial calculation was trying to solve, is that the most dangerous monsters are precisely those that come earlier than expected. So a dracolisk is a lot more dangerous than a great wyrm of balance (prior to conical breaths) simply because it's the first monster that can breath nether for gobs of damage.

                  Conical breaths obviously change things specifically here, but the general idea is the same. The most dangerous monster is the one that's "out of depth" whether by design or by a roll of the die in dungeon generation.

                  @Estie: One of the main reasons for tying certain abilities to certain skill slots was the proliferation of +blows or +shots on armor. It's possible just not allowing those abilities on anything but weapons and launchers is good enough for now.

                  Still though, the comparison is against the non-artifact items that are available. A +5 speed boost on boots just isn't worth nearly as much as a +5 boost on armor because you can find +10 speed on boots with non-artifact gear. You really do need to account for that.
                  I understand that, because of the ego item distribution, +5 speed on boots is almost worthless and on armor, very relevant. But where exactly do you need the distinction ? What are you trying to achieve ?

                  As for blows/shots, just let +1 blow be equivalent in power to +5 speed. Then have weapons pick up extra blows with a 10% probability and non-weapons with 1%, and you end up with a distribution that is similar to the current situation (if you so wish - adjust values to gusto).

                  Whether the +1 blow ring/helmet ends up being more powerful than a +5 speed ring/helmet depends on many circumstances, but doesnt seem to be relevant.

                  Comment

                  • Pete Mack
                    Prophet
                    • Apr 2007
                    • 6883

                    #10
                    +1 blows is so powerful it will trump +5 speed very quickly. That is 16% up front(roughly) damage increase vs ~10% over time (assuming hasted speed 30.) And if you allow 1% across all slots, that comes to around 6% overall. If you want this, work backwards from the average endgame artifact distribution, and see whether it's too powerful or too weak--keeping in mind that some slots will not have ego items (or just rings of speed/damage/CON)

                    Comment

                    • Derakon
                      Prophet
                      • Dec 2009
                      • 9022

                      #11
                      Originally posted by Estie
                      I understand that, because of the ego item distribution, +5 speed on boots is almost worthless and on armor, very relevant. But where exactly do you need the distinction ? What are you trying to achieve ?
                      The goal is to somehow boil down every item's power to a single scalar value, so that items can be objectively compared to each other in a vacuum. This will, if done properly, be a major boon for making decisions about game balance, because we'll be able to say "the player should have about this power level by this point in the game" and adjust item frequencies to suit.

                      As for blows/shots, just let +1 blow be equivalent in power to +5 speed. Then have weapons pick up extra blows with a 10% probability and non-weapons with 1%, and you end up with a distribution that is similar to the current situation (if you so wish - adjust values to gusto).
                      I believe Magnate tried a similar approach with item power levels, except that he used +damage instead of speed as his "everything converts to this somehow". But Nick is trying to find a solution that doesn't involve a bunch of hardcoded fiddle factors.

                      Comment

                      • Nick
                        Vanilla maintainer
                        • Apr 2007
                        • 9637

                        #12
                        Originally posted by Derakon
                        I'm fine with removing monster power code, but I'd think very carefully about object power. I suspect that power is not so linear as you describe; in particular, the power of a given item is dependent on all the other items that you could equip in that slot.
                        This is true, and I was oversimplifying.

                        The current object power is largely linear, for example
                        Code:
                        	int q = (obj->to_h * TO_HIT_POWER / 2);
                        	p += q;
                        adds a linear bonus per +1 to-hit, where TO_HIT_POWER is the scaling factor.

                        Other things have a bonus for more than one appearing, such as object flags:
                        Code:
                        	for (i = 0; i < N_ELEMENTS(flag_sets); i++) {
                        		if (flag_sets[i].count > 1) {
                        			q = (flag_sets[i].factor * flag_sets[i].count * flag_sets[i].count);
                        			p += q;
                        			log_obj(format("Add %d power for multiple %s, total is %d\n",
                        						   q, flag_sets[i].desc, p));
                        		}
                        
                        		/* Add bonus if item has a full set of these flags */
                        		if (flag_sets[i].count == flag_sets[i].size) {
                        			q = flag_sets[i].bonus;
                        			p += q;
                        			log_obj(format("Add %d power for full set of %s, total is %d\n", 
                        						   q, flag_sets[i].desc, p));
                        		}
                        	}
                        These I think are reasonable, and on the whole I think after some clarification the object power code will not change much apart from the following two areas:
                        • Slays and Brands - here there is a big sum done across all monsters of (monster power) * (best multiplier). This is appealing to me as a mathematician, except for the fact that it forms a small part of the total object power, and so is a tiny little piece of precision in a sea of fudge factors. Better just to treat slays and brands like object flags - they get a fixed value, maybe some bonuses for multiples, and be done with it.
                        • Off-slot extra might, blows and shots. These don't exist in the standard artifact set, and complicate the reasoning for power calculations. I propose disallowing them from randarts.


                        There will still be a certain amount of guesswork required beyond the actual scaling factors - how to assess off-weapon combat bonuses, for example - but I'm inclined to keep it to a minimum.
                        One for the Dark Lord on his dark throne
                        In the Land of Mordor where the Shadows lie.

                        Comment

                        • Derakon
                          Prophet
                          • Dec 2009
                          • 9022

                          #13
                          Originally posted by Nick
                          Off-slot extra might, blows and shots. These don't exist in the standard artifact set, and complicate the reasoning for power calculations. I propose disallowing them from randarts.
                          I kind of like the possibility of off-weapon blows and might. They add a lot of potential interest to randarts. I do recognize that balancing them is a pain.

                          As usual, I feel that extra shots should not even be in the game.

                          Comment

                          • Pete Mack
                            Prophet
                            • Apr 2007
                            • 6883

                            #14
                            I hate those weapons with essentially every slay and brand. They are never remotely as good as the original item. The right way to do it is calculated base damage as a fraction of power, then adjust dice, weight and to_d accordingly. Then add a few slays and brands. A very few. The primary exceptions are CON (for help with full casters) and speed (freeing up a ring slot for damage)

                            Comment

                            • EpicMan
                              Swordsman
                              • Dec 2009
                              • 455

                              #15
                              Originally posted by Derakon
                              I believe Magnate tried a similar approach with item power levels, except that he used +damage instead of speed as his "everything converts to this somehow". But Nick is trying to find a solution that doesn't involve a bunch of hardcoded fiddle factors.
                              What if you took all of the resists, abilities, pluses etc from the standard arts and redistributed them on an equal number of weapons, soft/hard/dragon armors, rings, etc? So if there are 40 (made-up number) instances of Resist Poison in the standart set, 40 (probably different) items will have rPoison in an artifact set. Maybe most (again, made-up) are on body armors in standarts, but in this instance it could be mostly on weapons, or boots, or whatever. If 6 items have +2 STR in Standarts 6 items will have it in the randarts, just not the same items and not in the same rune combinations as in the standarts.

                              The upside is that you could avoid having to use some kind of formula for calculating the power of every possible rune/bonus and just say that the randarts will have the same potential power level as the standarts.

                              Comment

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