Angband.oook.cz
Angband.oook.cz
AboutVariantsLadderForumCompetitionComicScreenshotsFunniesLinks

Go Back   Angband Forums > Angband > Vanilla

Reply
 
Thread Tools Display Modes
Old October 27, 2009, 03:29   #1
fizzix
Prophet
 
Join Date: Aug 2009
Location: Madison, Wisconsin, US
Posts: 3,025
fizzix is on a distinguished road
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?
fizzix is offline   Reply With Quote
Old October 27, 2009, 15:44   #2
fizzix
Prophet
 
Join Date: Aug 2009
Location: Madison, Wisconsin, US
Posts: 3,025
fizzix is on a distinguished road
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.
fizzix is offline   Reply With Quote
Old October 27, 2009, 16:41   #3
Marble Dice
Swordsman
 
Join Date: Jun 2008
Location: Portland, OR, USA
Posts: 412
Marble Dice is on a distinguished road
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?
Marble Dice is offline   Reply With Quote
Old October 27, 2009, 17:16   #4
fizzix
Prophet
 
Join Date: Aug 2009
Location: Madison, Wisconsin, US
Posts: 3,025
fizzix is on a distinguished road
Quote:
Originally Posted by Marble Dice View Post
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 View Post
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 View Post
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.
fizzix is offline   Reply With Quote
Old October 27, 2009, 17:26   #5
fizzix
Prophet
 
Join Date: Aug 2009
Location: Madison, Wisconsin, US
Posts: 3,025
fizzix is on a distinguished road
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?
fizzix is offline   Reply With Quote
Old October 28, 2009, 00:35   #6
PowerDiver
Prophet
 
Join Date: Mar 2008
Posts: 2,755
PowerDiver is on a distinguished road
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.
PowerDiver is offline   Reply With Quote
Old October 28, 2009, 00:53   #7
Hariolor
Swordsman
 
Join Date: Sep 2008
Posts: 289
Hariolor is on a distinguished road
Quote:
Originally Posted by PowerDiver View Post
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.
Hariolor is offline   Reply With Quote
Old October 28, 2009, 03:22   #8
Hariolor
Swordsman
 
Join Date: Sep 2008
Posts: 289
Hariolor is on a distinguished road
Cool

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
Hariolor is offline   Reply With Quote
Old October 28, 2009, 11:40   #9
half
Knight
 
half's Avatar
 
Join Date: Jan 2009
Posts: 910
half is on a distinguished road
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.
half is offline   Reply With Quote
Old October 28, 2009, 13:54   #10
fizzix
Prophet
 
Join Date: Aug 2009
Location: Madison, Wisconsin, US
Posts: 3,025
fizzix is on a distinguished road
Quote:
Originally Posted by half View Post
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.
fizzix is offline   Reply With Quote
Reply


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

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 Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
stochastic energy and fractional blows tigen Vanilla 22 September 13, 2009 21:47
Feature request: display char creation blows as if wielding whip Donald Jonker Vanilla 14 March 3, 2009 22:47
weapons: multiple blows versus multiple slays vorondil Vanilla 24 December 24, 2008 19:13
Max Blows Conker AAR 2 November 9, 2007 04:40
AAR - Don't Forget to Turn Out the Light ShinX3 AAR 3 November 6, 2007 08:09


All times are GMT +1. The time now is 13:10.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2023, vBulletin Solutions Inc.