Angband Forums blows per turn
 Register FAQ Members List Calendar Search Today's Posts Mark Forums Read

 October 27, 2009, 04:29 #1 fizzix Prophet   Join Date: Aug 2009 Location: Madison, Wisconsin, US Posts: 3,002 blows per turn I've always felt that the blows per round calculation felt a little shoddy and after reading this 6 month old thread: http://angband.oook.cz/forum/showthread.php?t=1691 I've become convinced that my original feeling is correct. I was thinking of trying my hand at a simplified calculation, but before I start, I'd like to know if any significant progress has already been accomplished. If this is a settled issue or not. (I'm guessing it isn't) The basic idea is that a new calculation would have to satisfy the following conditions: It is a function of STR, DEX, weapon weight, character class, and possibly character level It is simpler than the current calculation It is compatible with either an integral or a fractional blows per round system It will not require any weapon rebalancing any other conditions I'm missing?
 October 27, 2009, 16:44 #2 fizzix Prophet   Join Date: Aug 2009 Location: Madison, Wisconsin, US Posts: 3,002 I have played around with a couple formulas for blows per turn. Right now I'm leaning towards something that looks like: 1+(str*dex)/(a*weight^2 + b*weight + c) + clevel*class_factor STR and DEX would be numbers from 3-38 with 18/200 corresponding to the maximum value of 38. I'm trying to completely avoid having table values and to minimize the number of arbitrary constants. Although, I may have to go to higher order polynomials, either in the numerator or the denominator. This first ratio term is designed to go between 0 and 2. The constants a,b,c will have to be empirically determined, And there may need to be some fudging by forcing maximums and minimums on each term. ("may" here means, "definitely") The class_factor would look like 1/15 for warriors, 1/20 for rangers, rogues, paladins and 1/30 for priests and mages. This term be capped at 3,2 and 1 respectively. In the current integral blow system, warriors would get additional blows at clevel 15, 30 and 45 regardless of weapon weight. paladins, rogues and rangers would get blows at 20 and 40, mages and priests at 30. Basic guidelines for the constants is that STR 17, DEX 17 should barely get an extra blow with the lightest weapons at game start. and STR 38, DEX 38 should barely get maximum blows with the heaviest weapons. Some minor tweaks will be needed to change between an integral and a fractional blow system, but it would follow much easier with this formula than with the current implementation.
 October 27, 2009, 17:41 #3 Marble Dice Swordsman   Join Date: Jun 2008 Location: Columbia, MO. USA Posts: 405 I seem to recall someone getting somewhat close to emulating the current table system with a formula, but I don't remember which thread I read that in, nor is simply emulating the current system a good goal. Under a system such as you propose, everyone would get 1 blow to start, and optionally up to 2 extra blows depending on str, dex, and weapon weight. Warriors would gain an extra 3 blows by leveling, hybrids would gain 2, and casters 1, leaving the total number of max blows per class unchanged. I think I'm in favor of the general premise, by moving some of the blows over to character level you de-emphasize the need to scum for stat potions, without completely removing the importance of stats for melee attacks. A similar approach is being considered for caster SP. This would limit the number of starting blows to 3, which would be worse than what is currently attainable by some warriors builds, but they'd get the lost blow back at level 15. This could possibly also make it more difficult for low level warrior winners, since they won't get their last blow until 45, but maybe low level warrior winners wouldn't normally have the stats for all 6 blows anyway?
October 27, 2009, 18:16   #4
fizzix
Prophet

Join Date: Aug 2009
Posts: 3,002
Quote:
 Originally Posted by Marble Dice I seem to recall someone getting somewhat close to emulating the current table system with a formula, but I don't remember which thread I read that in, nor is simply emulating the current system a good goal.
I think the post you may be referring to is from the thread I linked to at the beginning. It was by Polyonymous and I'll reprint it here.

Quote:
 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) 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.
This was actually my starting point, but I then decided that I didn't actually want to recreate the current system. (i feel it's broken) I also wanted to eliminate seemingly arbitrary str and dex tables and make the overall function much more linear.

Quote:
 Originally Posted by Marble Dice Under a system such as you propose, everyone would get 1 blow to start, and optionally up to 2 extra blows depending on str, dex, and weapon weight. Warriors would gain an extra 3 blows by leveling, hybrids would gain 2, and casters 1, leaving the total number of max blows per class unchanged. I think I'm in favor of the general premise, by moving some of the blows over to character level you de-emphasize the need to scum for stat potions, without completely removing the importance of stats for melee attacks. A similar approach is being considered for caster SP. This would limit the number of starting blows to 3, which would be worse than what is currently attainable by some warriors builds, but they'd get the lost blow back at level 15. This could possibly also make it more difficult for low level warrior winners, since they won't get their last blow until 45, but maybe low level warrior winners wouldn't normally have the stats for all 6 blows anyway?
Yes that's kind of the point. Make there be more of a balance between level dependent and stat dependence. Right now there really isn't that much of a difference between a maxed out level 40 character and a level 50 character. I feel that there should be. I also would be in favor of any approach that evens out SP and HP in a similar fashion.

 October 27, 2009, 18:26 #5 fizzix Prophet   Join Date: Aug 2009 Location: Madison, Wisconsin, US Posts: 3,002 So I came up with some numbers that work fairly well. These can be tweaked even more. blowsperturn = STR*DEX/(175 + MINIMUM(200, 2*weight^2) + 10*weight) STR and DEX go from 3-38 with 18/200 equaling 38. weight is capped at 3 on the lower end. A cap at the higher end is also possible, but not necessary. At start, 17 STR and 17 DEX will get two blows per round with anything 5 pounds or lighter. 3 blows per round is attainable at start with anything 3 pounds or lighter, but not really if you want to invest significantly in INT or WIS. To get max blows with a 30 pounds weapon you will need to be near maximum in both STR and DEX. The heaviest weapon that has attainable max blows is 34 lbs. I ran through some intermediate values and they seem pretty good. I don't have a convenient graphical way to present the results though. Perhaps contour plots for individual weapon weights?
 October 28, 2009, 01:35 #6 PowerDiver Prophet   Join Date: Mar 2008 Posts: 2,712 It probably does not matter, but in these formulas you should assume that 18/200 gets boosted from a value of 38 to a value of 40 for the bonus of maxing it out. My view is instead of making things multiplicative, to have several different formulas and take the min value. So you might be str limited, dex limited, or class/clvl limited. I don't really see how to decide which approach is better.
October 28, 2009, 01:53   #7
Hariolor
Swordsman

Join Date: Sep 2008
Posts: 289
Quote:
 Originally Posted by PowerDiver It probably does not matter, but in these formulas you should assume that 18/200 gets boosted from a value of 38 to a value of 40 for the bonus of maxing it out. My view is instead of making things multiplicative, to have several different formulas and take the min value. So you might be str limited, dex limited, or class/clvl limited. I don't really see how to decide which approach is better.
Theoretically, it should be possible to balance a single formula so that one can achieve a practical limitation because of str, or dex, or clevel. Any of the approaches above would seem to be on the right track.

I suspect the best route for this would be to build several linear functions atop one another (summing), such that the sum of all of them, maxxed, would provide the optimal blows/round with the heaviest weapon. This would then be easily ported into a more granular system like fractional blows, as it would already be linear in nature, and hence potentially more fair...

I'll try to whip something up here that demonstrates what I mean.

 October 28, 2009, 04:22 #8 Hariolor Swordsman   Join Date: Sep 2008 Posts: 289 OK - assumptions: STR and DEX range 1-40. Weapon Weight [WW] ranges 1-40. Character Level [CL] ranges 1-50. Everyone gets 1 blow no matter what. Then add to it the result of... Formula: Fighter (LOG(((((STR+DEX)/2)/(WW))))+0.3)*CL/3 Paladins and Rogues (LOG(((((STR+DEX)/2)/(WW))))+0.3)*CL*4/15 Rangers and Priests (LOG(((((STR+DEX)/2)/(WW))))+0.3)*CL*2/5 Mages (LOG(((((STR+DEX)/2)/(WW))))+0.3)*CL*2/15 I wanted to make a very simple line y=mx, so... Basically I averaged STR and DEX, then divided by the weight of the weapon. I then add .3 to this (due to the nature of the LOG function) Taking the LOG will linearize a wide range of possible values (1-40). This is the slope of my line. I then multiplied by an appropriate modifier based on CL. Round the result up or down to the nearest whole integer, and you have the number of bonus blows that round. Naturally, at higher stats and CL it becomes necessary to enforce a hard cap on the max number of bonus blows based on class. (Nobody should get 17 bonus blows/round, for example) I am not claiming this is a 1:1 replacement of the current system. It weights things a bit more heavily towards CL, especially in the early game. For example, a CL1 fighter with 18/50 STR and 18/30 DEX will not get a bonus blow until CL3, even with a whip (WW=3). This could be easily remedied by reducing the weight of the lightest weapons somewhat. I also recognize that this means a fighter with those stats will be getting 6 blows/round with a whip by CL12. However, I think that's OK, as you could also be getting 4 blows with WW=6, 3 with WW=18, and 2 with WW=32 It's not perfect, but I think it might be close. Furthermore, eliminate the rounding, and it is an easy switch to a fractional system. if someone can tell me how to share it, I've made a spreadsheet with dropdowns for STR DEX CL and WW, which will automatically calculate the blows/round for each class under this method. I'll happily post it here or email it to anyone who'd like to play with it. Cheers
 October 28, 2009, 12:40 #9 half Knight     Join Date: Jan 2009 Posts: 904 You almost certainly don't want to treat STR and DEX symmetrically. For example, when wielding a dagger, you shouldn't get more blows for having a higher strength, as you are dexterity limited with that weapon. In general, each weapon would benefit from extra strength only up to a certain amount of strength which depends on the weapon's weight. I think you want a formula that limits blows based on dex (in a weight independent manner?) and also limits blows based on strength in a very weight dependent manner. For example, you could have a function to deal with the strength part that lies between 0 and 1 and multiplies the dex part of the function. For example: blows = 1 + (dex_part) * (strength_and_weight_part) strength_and_weight_part = MIN(1, strength / weight * k) dex_part = ? ------ Another point is that you might want to use this opportunity to redo weapon weights in a sensible manner, since the people who put in the original values knew nothing about real weapons weights (perhaps they used values from D&D?). It is not that hard to find real weights based on old collections online, and I can provide sensible values for most weapons if people want them. eg Longsword = 3lb, Shortsword = 1.5lb etc.
October 28, 2009, 14:54   #10
fizzix
Prophet

Join Date: Aug 2009
Posts: 3,002
Quote:
 Originally Posted by half You almost certainly don't want to treat STR and DEX symmetrically. For example, when wielding a dagger, you shouldn't get more blows for having a higher strength, as you are dexterity limited with that weapon. In general, each weapon would benefit from extra strength only up to a certain amount of strength which depends on the weapon's weight. I think you want a formula that limits blows based on dex (in a weight independent manner?) and also limits blows based on strength in a very weight dependent manner. For example, you could have a function to deal with the strength part that lies between 0 and 1 and multiplies the dex part of the function. For example: blows = 1 + (dex_part) * (strength_and_weight_part) strength_and_weight_part = MIN(1, strength / weight * k) dex_part = ? ------ Another point is that you might want to use this opportunity to redo weapon weights in a sensible manner, since the people who put in the original values knew nothing about real weapons weights (perhaps they used values from D&D?). It is not that hard to find real weights based on old collections online, and I can provide sensible values for most weapons if people want them. eg Longsword = 3lb, Shortsword = 1.5lb etc.
This is roughly how the system stands now. The current implementation gives a number of blows based on STR/WW with some class modifications. It then puts that through a DEX filter that decides whether you get the full amount of blows or not. That's not exactly how it works, but it's very close.

The main problem I have with this system is that it, by necessity, creates arbitrary absolute break points in DEX. These break points would go away with a fractional blows system, but there's no way to get around it in a integral blows system. If you want a formula flexible for both, you need to make sure one of your limiting factors is not a single variable.

The second thing I was looking for was simplicity, trying to lose the arbitrary values from the strength, dexterity and bpt tables.

I originally looked at functions that were ratios of STR/(WW - DEX) with appropriate numerical factors eliminated. This did not yield any suitable functions.

The next set of functions I looked at were very similar to Hariolor's with STR+DEX in the numerator and a linear function of WW in the denominator. I switched to the product of STR and DEX and a quadratic in the denominator because I liked the idea of BPT being maximized when STR and DEX are roughly equal. In Hariolor's system, DEX becomes a useless stat to put points into until it's inefficient to put more into STR.

I'm not wedded to this idea. However, I think *something* simpler, without arbitrary break points in DEX, and adaptable to a fractional system is important.

Lastly, if there is a desire to reweigh the weapons, this will throw all of this off. And an entirely new set of functions will be necessary, perhaps even more contrived than before. Furthermore, it might require a reevaluation of the encumberance calculation. I think the current weights of weapons were not meant to be realistic, but rather were chosen for gameplay issues. After all, the same size long sword for a kobold and a dunadan is laughable. It might be better to not think of lbs as Imperial (or US) pounds but rather as MIddle-Earth pounds, an entirely different unit of measure.

 Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)
 Thread Tools Display Modes Linear Mode

 Posting Rules You may not post new threads You may not post replies You may not post attachments You may not edit your posts BB code is On Smilies are On [IMG] code is On HTML code is Off Forum Rules
 Forum Jump User Control Panel Private Messages Subscriptions Who's Online Search Forums Forums Home Angband     AAR     Vanilla     Development     ToME     Sil     Variants     Competition The real world     Idle chatter     Oook! Obsolete     v4

 Similar Threads Thread Thread Starter Forum Replies Last Post tigen Vanilla 22 September 13, 2009 22:47 Donald Jonker Vanilla 14 March 3, 2009 23:47 vorondil Vanilla 24 December 24, 2008 20:13 Conker AAR 2 November 9, 2007 05:40 ShinX3 AAR 3 November 6, 2007 09:09

All times are GMT +1. The time now is 12:25.