Do we need points based stat generation at all?
Collapse
X
-
I don't think the fact that WoW is a gear-focused grind fest really matters in this conversation, although it is true. Perhaps the great amount of diverse itemization in WoW offsets the ability to customize stats. I believe that *bands have good itemization but people almost always ignore stats for resists, which is sad. -
Of course WOW emphasizes gear. Gear requires you to either grind for gold or do boring, repetative quests. That's great when your customers pay by the hour. No fair making an optimized starting charachter that lets you skip the first hour or two of grinding.Leave a comment:
-
Just as a point of reference, in WoW you don't pick your stats at all, either at birth or throughout the game. They are assigned when you roll a character based on race/class and automatically get increased per level based on your class.
When they came out with it, it was very much against most of the other RPGs out there that demanded customization, and people complained. Until they played it and realized that there are enough ways to customize your character and taking out stat manipulation let you focus on other things, like gear itemization. You can still stack your stats with gear.Leave a comment:
-
The problem, I think, isAh, I might not have been clear. The current algorithm is intended to be exactly the one you proposed early in this thread, and it's that I'm trying to tweak (see http://trac.rephial.org/browser/trunk/src/birth.c#L766 for the implementation). I'm assuming anyway that I've not put in a bucket of bugs, it's not that complicated an algorithm after all.
My intention was that if you cannot achieve 18/10 here, you should not spend any points at all on dex until the last phase. Instead, you spend a lot of points even when you cannot achieve 18/10.Code:813 /* If possible buy adj DEX of 18/10 */ 814 case 1: 815 { 816 if (!maxed[A_DEX] && p_ptr->state.stat_top[A_DEX] < 18+10) 817 { 818 if (!buy_stat(A_DEX, stats, points_spent, points_left)) 819 maxed[A_DEX] = TRUE; 820 } 821 else 822 { 823 step++; 824 } 825 826 break; 827 }Leave a comment:
-
It still has two notable problems:
for full casters, the spell-casting stat is much more important.
CON is undervalued. Starting with a low base CON is OK only if you don't plan to go much past 2000'.Leave a comment:
-
Ah, I might not have been clear. The current algorithm is intended to be exactly the one you proposed early in this thread, and it's that I'm trying to tweak (see http://trac.rephial.org/browser/trunk/src/birth.c#L766 for the implementation). I'm assuming anyway that I've not put in a bucket of bugs, it's not that complicated an algorithm after all.Leave a comment:
-
My current char, a dwarf ranger choosing str over dex just to highlight this issue, http://angband.oook.cz/ladder-show.php?id=8845 is doing just fine. I am ready to take on Morgoth with a base dex of 18/20, and could still get my full 5 blows with the melee weapons [Calris and Aglarang] I was considering using against Sauron. I admit that I am not sure base str 18 + dex 10 was better than str 17 + dex 14, but I'm not sure it wasn't better either.
Dex just isn't that important to mages, priests, or rangers early on, and it's not that important to anyone in the late game considering how little you need and what you are likely to have by then.
As to specifics, I gave a full algorithm for spending stat points early on in this thread. It probably needs a little tweaking. In contrast, the initial stats I see at startup in 1375 are just plain crazy.
In the late game, CON > spellstat > STR > DEX. In the early game, DEX 18/10 > Spellstat > STR > DEX 18 > CON.Leave a comment:
-
Right, seeing as I still don't really have a clue what to do here:- http://rephial.org/research/birthstats1.txt is a table showing the (adjusted, not base) stats produced by the current algorithm.
- http://rephial.org/research/birthstats-dex17.txt represents a change I made to my local copy because dex seemed to be overvalued where we initially try just for base 17 in dex and rely on the later "spend more points on dex if available" bit to boost it up - this doesn't really achieve the aim of hitting the significant breakpoint as often as possible, but might still be of interest.
- http://rephial.org/research/birthstats-lessdex.txt is another tweak I tried buying the 18/10 dex but excluding it from the later "spend leftover points" step.
If anyone has concrete suggestions for tweaking that algorithm I can easily adjust it and generate new tables for comparison. Assuming anyone still cares.
Likewise, do say if you think either of the tweaks I've made give better stat distribution because I'll commit them as a "better than nothing" change in svn.
Addressing a couple of other points from the thread:
When it comes to not hardcoding the breakpoint(s), we may as well (eventually, if we need to) just put them in an edit file as breakpoints with commented explanations, because otherwise we'll be hardcoding the dagger as the item to use for comparison, and so on down the line until the "determining breakpoints" code is impossible to understand or we end up using brute force to try every combination of stats and weapons.
When it comes to the INT_MANA, MIXED flags, and so on, I currently use the spellcasting stat already defined in the edit files, and use a low max blows to indicate that a class is a pure spellcaster, rather than adding more flags. Again, we can always change it later if it matters.Leave a comment:
- http://rephial.org/research/birthstats1.txt is a table showing the (adjusted, not base) stats produced by the current algorithm.
-
I don't have this problem in Angband, but it occurs to me that something like this would really help in UnAngband, where moderately optimized character initialization is overwhelmingly complex. (All those classes, specializations, races--who knows what you should do to get a reasonable starting character.)Leave a comment:
-
So long as we are obsessing ridiculously, the 18/10 dex shouldn't be hardcoded either. Some generalization of the code I wrote for "with +3 dex you get another blow" should be used to determine which str/dex combos get max blows with a dagger. If all of the gore of the blows stuff is indirected to a single function and if any of it changes, starting stats would adjust automatically. That would also pick up the case where you need to start with base 18 str.Leave a comment:
-
Universal at least, the definition of "high-level" may be open to interpretation.Since the values would be presented by the code in birth.c that generates the stat buying screen, you somehow will have to make do merely with a high-level universal programming language. It extends just fine since that code is already accessing the race and class mods.
Adding an external table that would have to be parsed would be more work, not less, and would suffer further when future races were added or any stat mods were changed.
My point was without some footprint in the class or race data, it can't be extensible, because you can't make intelligent decisions about how to allocate stats. That footprint can be specific builds or it could be flags which affect a native C algorithm, as described above. Forgive me for debating a method.Leave a comment:
-
It could be both compiled in and flexible. I would give the p_class.txt file some extra flags that would be used by the formula in calculating suggested values.
N:0:Warrior
F:FIGHTER | NOSPELL
N:1:Mage
F:SPELLCASTER | INT_MANA
N:2:Priest
F:SPELLCASTER | WIS_MANA
N:3:Rogue
F:MIXED | INT_MANA
N:4:Ranger
F:MIXED | INT_MANA
N:5:Paladin
F:MIXED | WIS_MANA
(Add more flags and adjust to taste ;-)
Now the clever bit is that when you have some new classes you don't need to re-do the formula, just give them appropriate flags.
N:6:War-Mage
F:MIXED | INT_MANA
N:7:High Priest
F:SPELLCASTER | WIS_MANA | INT_MANA
N:8:Gladiator
F:FIGHTER | NOSPELL
(Coming soon to a variant near you!)Leave a comment:
-
Since the values would be presented by the code in birth.c that generates the stat buying screen, you somehow will have to make do merely with a high-level universal programming language. It extends just fine since that code is already accessing the race and class mods.
Adding an external table that would have to be parsed would be more work, not less, and would suffer further when future races were added or any stat mods were changed.Leave a comment:
-
Hee hee~
Personally I think good base stats that don't achieve the perfect break points are still better than newbies spending points in non-spell-stat INT/WIS or CHR, but you do have a point: blanket class base stats are not perfect. The only way I can see to reconcile this issue is with a race-class table. To avoid a table, you'll need a formula, which either has to be compiled in due to the per-class nature of the stat allocation (bad for extension), or powered with a scripting language (not present).
A table wouldn't necessarily defeat the edit files though - each race could have a list of suggested builds for each class. Something like...
The character generator could just load the starting stats from the race data for the class you picked, if it was supplied in the p_race.txt file. Otherwise, it wouldn't distribute any points.Code:N:0:Human S:0:0:0:0:0:0 R:0:0:0:0:0:10:0:0 X:10:100:0 I:1:14:6 H:72:6:66:4 W:180:25:150:20 C:0|1|2|3|4|5 [COLOR="Yellow"][B]# B:class:str:int:wis:dex:con:chr B:0:17:0:0:17:17:0 B:1:17:17:0:12:16:0 B:2:17:0:17:12:16:0[/B][/COLOR] ...
Leave a comment:
-
I disagree. The whole point of suggested values is for the newbie, who does not realize 18/10 dex is magical, to get a reasonable allocation. Choosing a base dex of 17 that does not equate to precisely 18/10 dex is usually a mistake, a big mistake, except for warriors.Okay, a table of starting stats for each class isn't really any more complicated than equally dividing your points, so you could use something like this:
This way any melee class has high-as-is-cheap STR and DEX, so they'll get multiple blows if not max starting blows, and all the hybrid classes will have at least 16 spell stat (for 1.0 spells per level) as long as you don't pick a race with a spell stat penalty for that class. Every combination with one of these builds won't come out perfect, but it's a good place to start.Code:STR INT WIS DEX CON CHR Warrior 17 10 10 17 17 10 Mage 17 17 10 12 16 10 Priest 17 10 17 12 16 10 Rogue 17 15 10 17 13 10 Ranger 17 14 10 17 14 10 Paladin 17 10 15 17 13 10
The important values are the combo values, not the base values. If you ignore that, you might as well forget the whole exercise.Leave a comment:
Leave a comment: