Do we need points based stat generation at all?

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Pete Mack
    Prophet
    • Apr 2007
    • 6883

    #16
    @Nick--
    The point is that DEX up to 15 is pretty average; there has to be some cut-off above 15 to get to the next column in the blows table. Whether that should be 18/10 (which is high for anybody except rogues, dunadan or high-elves) or 17, which is feasible for many classes, is a matter of degree.

    Comment

    • Nick
      Vanilla maintainer
      • Apr 2007
      • 9634

      #17
      Originally posted by Pete Mack
      @Nick--
      The point is that DEX up to 15 is pretty average; there has to be some cut-off above 15 to get to the next column in the blows table. Whether that should be 18/10 (which is high for anybody except rogues, dunadan or high-elves) or 17, which is feasible for many classes, is a matter of degree.
      This was indeed other people's point, but not mine. I want to know why the blows table has the entries in it that it does. There are two possibilities:
      1. Someone back in the mists of time filled in the table based on how they thought it should work or
      2. The table is an approximation to some function of DEX and STR/(weapon weight).


      My guess is that it is the latter, but I'm wondering if anyone knows this to be the case, and if so if they know what function.
      One for the Dark Lord on his dark throne
      In the Land of Mordor where the Shadows lie.

      Comment

      • Magnate
        Angband Devteam member
        • May 2007
        • 5110

        #18
        Originally posted by Nick
        This was indeed other people's point, but not mine. I want to know why the blows table has the entries in it that it does. There are two possibilities:
        1. Someone back in the mists of time filled in the table based on how they thought it should work or
        2. The table is an approximation to some function of DEX and STR/(weapon weight).


        My guess is that it is the latter, but I'm wondering if anyone knows this to be the case, and if so if they know what function.
        Hmmm. My guess is the former - it's one of many completely arbitrary sequences in the stat tables. There is no evidence of the original designers using complex formulae to determine anything (and with the DEX values as they are it would have to be pretty complex), so I doubt there's a hidden formula here.
        "Been away so long I hardly knew the place, gee it's good to be back home" - The Beatles

        Comment

        • Polyonymous
          Rookie
          • Mar 2009
          • 14

          #19
          I've been playing around with it for a while now and can discern no major pattern. I've tried best fits of various shapes and sizes. I'm going to guess that the table was generated by a function originally and hacked manually over time (did it used to cap at 5 blows for all characters? the 6 blows items in the table aren't distributed like the rest of the table).

          My best fit when I use the whole table (using the low dex index numbers is debatable as they're essentially outliers for really low dex) looks like

          blows = (3 * str_index + 4 * dex_index + 7)/12 (capped at 1 and 6)

          I tried fitting with a cap of 5 blows. Also tried including str_index^2, dex_index^2, and str_index * dex_index factors. I tried normalizing the dex_index to the stat values to compensate for the fact that the early notches are a bit further apart. I tried modelling as energy/blow instead of blows/round. I tried all combinations of the given variations. None of them significantly improved the fit. The correlation between the equation above and the actual data points is 93.26%.

          If using actual dex values (may seem nicer as then the dex_index lookup can be removed), the formula would be

          blows = (10 * str_index + 5 * dex_linear {3 = 3, 18/150 = 33} - 27)/40 again capped at 1 and 6.

          I'd be curious to see how the table has changed over time to see what it originally was and how it became what it is now.

          Comment

          • Nick
            Vanilla maintainer
            • Apr 2007
            • 9634

            #20
            Originally posted by Polyonymous
            My best fit when I use the whole table (using the low dex index numbers is debatable as they're essentially outliers for really low dex) looks like

            blows = (3 * str_index + 4 * dex_index + 7)/12 (capped at 1 and 6)
            Yeah, I was heading towards that sort of thing when I gave up.

            I'd be curious to see how the table has changed over time to see what it originally was and how it became what it is now.
            Yes. I'm starting to come round to Magnate's point of view that it may have just been done by hand.
            One for the Dark Lord on his dark throne
            In the Land of Mordor where the Shadows lie.

            Comment

            • ajps
              Apprentice
              • May 2007
              • 50

              #21
              Originally posted by PowerDiver
              There are too many combos for a table, so we need a simple algorithm. Here's a possible approach. ...
              Well, I can't imagine it'll stay in this exact form, but I've added your first stab at an algorithm to the latest SVN version as part of the birth process. Basically, when you choose "Point based" generation, the points will start off as described here (barring bugs) with the option to sell stats or reset back to zero to start from scratch. In my limited testing, it made me several playable characters. All of whom died before reaching dlev 4, but you can't read anything into that. Feedback obviously welcome.

              Comment

              • Pete Mack
                Prophet
                • Apr 2007
                • 6883

                #22
                Compiler warnings:
                ui-birth.c:822: warning: ‘next’ may be used uninitialized in this function
                (Harmless, but annoying)

                xtra3.c:1758: warning: implicit declaration of function ‘get_birth_command’
                xtra3.c:1759: warning: control reaches end of non-void function
                (harmless, but scary-looking)

                main-crb.c:2874: warning: implicit declaration of function ‘textui_get_cmd’main-crb.c
                Presumably this needs to be in a header file, since it will have the same problem in all main-xxx.c

                Bug in point-based selection:
                high-elf mage "optimized" for DEX, not for INT.
                Should be closer to:
                STR 17
                INT 17
                DEX 13
                CON 15

                Problem is even worse for Dunadan Priest. (DEX 18, WIS 12, CON 12)

                EDIT: In fact, for just about all class/race combos, DEX is valued a little too high.
                Also tried:
                Paladin Half-Orc
                Dwarf Ranger
                etc...

                Comment

                • ajps
                  Apprentice
                  • May 2007
                  • 50

                  #23
                  Originally posted by Pete Mack
                  Compiler warnings: ...
                  Don't know how I missed all those! Fixed now, thanks.

                  Originally posted by Pete Mack
                  EDIT: In fact, for just about all class/race combos, DEX is valued a little too high.
                  Also tried:
                  Paladin Half-Orc
                  Dwarf Ranger
                  etc...
                  Well, it's easier to fix if it's generally overvalued I suppose, just reduce the aimed-for DEX stat or put more conditions on it. I'll be honest, if I knew the right balance for the different race/class combos I wouldn't be so bothered about putting this in the game in the first place, so I can't really judge.

                  Comment

                  • Magnate
                    Angband Devteam member
                    • May 2007
                    • 5110

                    #24
                    Originally posted by ajps
                    Well, it's easier to fix if it's generally overvalued I suppose, just reduce the aimed-for DEX stat or put more conditions on it. I'll be honest, if I knew the right balance for the different race/class combos I wouldn't be so bothered about putting this in the game in the first place, so I can't really judge.
                    One possibility is to approach DEX like this:

                    if 18/50 is possible, buy it
                    else if 18/10 is possible, buy that
                    else leave it be.

                    IMO that should work for just about any race/class combo, leaving the optimal number of points for STR, CON and spell stat.
                    "Been away so long I hardly knew the place, gee it's good to be back home" - The Beatles

                    Comment

                    • PowerDiver
                      Prophet
                      • Mar 2008
                      • 2820

                      #25
                      Originally posted by Magnate
                      One possibility is to approach DEX like this:

                      if 18/50 is possible, buy it
                      else if 18/10 is possible, buy that
                      else leave it be.
                      Can you give an example where it is smart to start with 18/50 DEX? I know I used to think there were some, but I'm not so sure any more.

                      Also, I never even consider going to base 18 starting stat. That just seems too wasteful. Any examples where you would want to start with an 18 somewhere? It seems likely that for some combo, a base 18 str might be required for 3 blows, but even then would it be worth doing?

                      So long as the discussion is ongoing, I might as well ask if anyone thinks that it should be possible to spend all points on a single stat to start it at base 18/10 to complete the pattern of (20 - B) stats at base B [fails slightly for B = 15].

                      Comment

                      • Marble Dice
                        Swordsman
                        • Jun 2008
                        • 412

                        #26
                        Originally posted by PowerDiver
                        Can you give an example where it is smart to start with 18/50 DEX? I know I used to think there were some, but I'm not so sure any more.
                        Gnome and Kobold Rogues must start with 18/50 DEX if they want 3 blows per round. Unfortunately this also requires spending all of the rest of their points in STR, so I'm not sure I'd call it smart, but it is a possibility. High Elf Rogues on the other hand can get 3 blows with either 18/10 DEX or 18/50 DEX. The latter actually costs 1 fewer point (since you need less STR), so that's pretty clever but not very important. Hobbit Warriors need 18/50 DEX if they want all 4 starting blows.

                        Originally posted by PowerDiver
                        Also, I never even consider going to base 18 starting stat. That just seems too wasteful. Any examples where you would want to start with an 18 somewhere? It seems likely that for some combo, a base 18 str might be required for 3 blows, but even then would it be worth doing?
                        I would seriously consider going up to 18 base INT for an Elf, Hobbit, Gnome, or Dunadan Mage. The extra starting spell and 2 Mana/level at 18/50 INT might be worth the heavy investment and is only possible with those races at 18 base INT. Elf, Kobold, and Gnome Warriors need to go up to 18 base STR if they want 18/40 STR and 4 blows with a light weapon. Considering warriors don't have much else to spend their points on, I'd say it's worth it. Hobbit Warriors are in a similar boat, needing 18 base STR and DEX to get 4 blows, but that's pretty wasteful even for a warrior.

                        Originally posted by PowerDiver
                        So long as the discussion is ongoing, I might as well ask if anyone thinks that it should be possible to spend all points on a single stat to start it at base 18/10 to complete the pattern of (20 - B) stats at base B [fails slightly for B = 15].
                        I do like patterns but if spending all your points in one stat wouldn't ever be viable, then it's probably just another method for newbies to gimp their characters. Of course, that would then let you do an ironman, all charisma, half-troll mage challenge.
                        Last edited by Marble Dice; April 20, 2009, 21:44.

                        Comment

                        • PowerDiver
                          Prophet
                          • Mar 2008
                          • 2820

                          #27
                          Originally posted by Marble Dice
                          Gnome and Kobold Rogues must start with 18/50 DEX if they want 3 blows per round. Unfortunately this also requires spending all of the rest of your points in STR, so I'm not sure I'd call it smart, but it is a possibility. High Elf Rogues on the other hand can get 3 blows with either 18/10 DEX or 18/50 DEX. The latter actually costs 1 fewer point (since you need less STR), so that's pretty smart but not very important.)
                          That's pretty much what I thought. My take is that in all of those cases, 18/50 DEX is a mistake, even for the high-elf rogue.

                          Comment

                          • Magnate
                            Angband Devteam member
                            • May 2007
                            • 5110

                            #28
                            Originally posted by PowerDiver
                            That's pretty much what I thought. My take is that in all of those cases, 18/50 DEX is a mistake, even for the high-elf rogue.
                            I play a lot of HE rogues - and I've moved from starting with 18/10 DEX to 18/50 because I like the extra blow with a rapier, and it doesn't seem to cost me anything. Where do you put the extra points - presumably in CON? I've never yet died a death sufficiently marginal that extra CON would have made a difference (it's always massive damage from an unresisted breath or spell, or a lack of FA which kills me). Plus the extra DEX is helpful for AC and shooting (and hitting in melee, for that matter - and avoiding theft ...).
                            "Been away so long I hardly knew the place, gee it's good to be back home" - The Beatles

                            Comment

                            • PowerDiver
                              Prophet
                              • Mar 2008
                              • 2820

                              #29
                              Originally posted by Magnate
                              I play a lot of HE rogues - and I've moved from starting with 18/10 DEX to 18/50 because I like the extra blow with a rapier, and it doesn't seem to cost me anything. Where do you put the extra points - presumably in CON? I've never yet died a death sufficiently marginal that extra CON would have made a difference (it's always massive damage from an unresisted breath or spell, or a lack of FA which kills me). Plus the extra DEX is helpful for AC and shooting (and hitting in melee, for that matter - and avoiding theft ...).
                              So you're saying that the higher str 18/10 dex version does not get 3 blows with a rapier? Even so, I think I would rather have the higher str, for weight early on, and to get to the point of being able to dig through granite without a digger sooner in the game. I guess the main question is how the blows will look after say 3 each !dex and !str with westernesse(+2) or a stat ring in the midgame. I have a vague recollection that whenever I pumped dex early, by the midgame I found that I wished I had boosted str instead.

                              Also, in the medium/long run, your goal is 18/220 str but only 18/150 dex, so the longer it takes to finish stat gain, the more you want to bias in favor of str.

                              Comment

                              • Marble Dice
                                Swordsman
                                • Jun 2008
                                • 412

                                #30
                                It seems like an algorithm to intelligently distribute stats would have to be specific to each class, and even then it'd still have to be somewhat complicated, and consider multiple specific break points for each stat and the viability of reaching some or all of those break points. In that light, either of the following might make sense:

                                1) Points are distributed equally among all of that class's favored stats. This is convenient because all classes (arguably) have 3 or 4 favored stats, and you can spend all your points on four 16s or three 17s. It's as simple as...

                                Warrior = 17 base STR, DEX, CON
                                Mage = 17 base STR, INT, CON
                                Priest = 17 base STR, WIS, CON
                                Rogue = 16 base STR, INT, DEX, CON
                                Ragner = 16 base STR, INT, DEX, CON
                                Paladin = 16 base STR, WIS, DEX, CON

                                This actually hits the important break points in many cases, and most of those cases it doesn't are obvious race/class mismatches. In the mismatch scenario, the player probably knows what they're doing, and even if they don't, the starting distribution of stats at least gives the them an idea of where to put their points. This is hardly ideal but it is really easy to implement and probably still better than nothing.

                                2) It was suggested before, but a table of recommended stat allocations for all race/classes would only contain 66 different combinations. This is Vanilla specific and it would break if the race or class modifiers were changed or new races or classes were added, but I don't think any kind of algorithm more complicated than #1 above is going to be any more extensible. If I draft up a C-style array indexable by race id, class id, and stat id and populate it with my recommendations for each race/class, would there be interest in reviewing my choices and using a table-based approach?

                                Comment

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