CleverRaven / Cataclysm-DDA

Cataclysm - Dark Days Ahead. A turn-based survival game set in a post-apocalyptic world.
http://cataclysmdda.org
Other
10.31k stars 4.14k forks source link

Lack of a consistent guideline for ranged weapon damage #26183

Closed Poragon closed 2 years ago

Poragon commented 5 years ago

Cataclysm currently lacks a consistent guideline for ranged weapons as a whole. While we have the guideline for bullets/guns which does a wonderful job and is outline near the bottom of this document this cannot apply to all projectiles due to differences in terminal ballistics.

Ideally a formula needs to be created for all ranged weapons to follow that accounts for terminal ballistics in either an abstract or detailed way to ensure consistency across ranged weapons.

I've set up a very basic example solution which takes the in game bullets and bullet formula as a base and accounts for terminal ballistics as an end multiplier of damage, with damage increasing as the projectile's lethal nature is more based on wound channels. The numbers and sources behind the example solution can be found in this spreadsheet, and an interactive bit to serve as a quick test of the multiplier on a few of CDDA's weapons can be found on this graph.

I've personally very little experience in terminal ballistics so it's difficult for myself to create a way to abstract them accurately. Any feedback as to other options and alternate solutions would be vastly appreciated!

Poragon commented 5 years ago

I've updated the spreadsheet after much rigorous testing that mainly consisted of plotting data points all over Desmos. The example formula now works well for even edge cases, so long as the Damage Type/Terminal Ballistics (DT) multiplier is properly accounted for. Due to the basing of the formula off of the pre-existing gun balance, the end results are not far off from the current game values in most cases.

Any drastically different values I've found have indicated something wrong with either the gun or projectile itself, such as the incredibly heavy arrows of CDDA. (A Metal Bodkin is 925.942 grain. Assuming best case scenario aka. the bow we're using has a very high draw weight of 80lb we're still at a ratio of 11.5 grains per pound of draw force. Well above the 8 grain per pound rule of thumb for what makes a heavy arrow for a bow.)

Due to this, I believe the current example formula, with some tweaking, has potential use as either a base or the entirety of the new formula for ranged damage. I've also included a calculator on the first sheet so that the formula can be easily tested with any set of projectile kinetic energy and DT combination.

Spreadsheet Link Desmos Link for Damage Formula Demos Link for Damage Curve Desmos Link for AP Formula Desmos Link for AP Curve

mlangsdorf commented 5 years ago

Two requests:

Poragon commented 5 years ago

Table creation is progressing very slowly due to personal busy work, and the sheer amount of manual input my current method requires. for the next bit. If anyone wants to help or has any ideas for expediting the process, I'd much appreciate it!

Theundyingcode commented 5 years ago

a Python script to read the guns and ammo json files and output the various combinations in a csv file would be pretty simple. Do you just want damage and ap values? I could add that to my todo list for the week if you would like.

Poragon commented 5 years ago

If you could do that, it'd be wonderful Undying. For guns damage and AP values are what I'm looking for, and the damage, AP, and weight for the ammos. No idea how the combinations would be automated, but if that's also possible it would be a super time saver for me

Theundyingcode commented 5 years ago

I was thinking of generating tables like:

xxx ammo 1 ammo 2 ammo 3
gun 1 12 23 0
gun 2 0 0 99

make two of them, 1 for damage and one for ap. How dose ammo weight get factored in?

Poragon commented 5 years ago

Ammo weight would be a separate list from the damage/AP differences. Having both current and under formula ammo weights is important as without noting a change in ammo weight, some of the new formula's outputs are a bit crazy. I think I noted the arrows above, and they're a good example. With current CDDA arrow weight the bow damage would be very, very low compared to a more sane arrow weight.

Though, using my current knowledge of notepad++ search function I can fairly easily extract all the ammo weights I need, so if making a separate list for the weights is an issue at all I can get that bit done

Theundyingcode commented 5 years ago

Loading the json is ~85% of the complexity but from there, outputting extra info is trivial. I'll make it output the name, id, weight, dmg and ap.

Theundyingcode commented 5 years ago

So, loading in stuff has proven to be more involved than I was expecting. (It's not hard there is just a lot of different cases to handle -> lot more code -> it's going to take a bit longer)

Here is what it's currently outputting with the following shortcuts in place:

cdda_gunVammo.zip

Theundyingcode commented 5 years ago

Forgot how easy it was to skip errors loop iterations so here now with mods: cdda_gunVammo.zip

btw I was originally going to have it tell you which mod it came from but I got lazy and decided to have it just distinguish between base and mods

Poragon commented 5 years ago

You're a life saver undying, thanks a ton for the gun data. The extra w/ and w/o mods is icing on this data filled cake! I'll get to work running all the values through soon and post the table link here when done!

Theundyingcode commented 5 years ago

I'm almost done with the inheritance handling which will add a lot (ammo in particular uses it a lot) but I figured that would get you started. I don't plan on making the script handle integrated mods though since the complexity of doing so and their numbers would make it easier to do by hand. Anyways this has been a good exercise let me know if there are any tweaks/filters you would like.

kevingranade commented 5 years ago

Btw, your analysis scripts might be something we'd want to drop into the tools directory

Theundyingcode commented 5 years ago

@kevingranade I was thinking about asking if it would be of interest. Right now it's fairly specialized in order to reduce the work but theoretically, it shouldn't be that much work to generalize it into a generic json loader + factory for use in whatever.

Theundyingcode commented 5 years ago

Get your new and improved Gun vs. Ammo tabel 2.0 now with ammo inheritance:

cdda_gunVammo.zip

mlangsdorf commented 5 years ago

Took @Theundyingcode's data and put it into a semi-nicely formatted spreadsheet. https://docs.google.com/spreadsheets/d/1Mhnw44Edzz6HiAxwJnXWNLyG-SAIHk4gnvEeRTEzWNg/edit?usp=sharing

kevin, theundyingcode, poragon - just ping me and I'll give you edit access.

I don't think all of the weapons and ammo variants are getting handled correctly, because this is the 9mm data:

Gun Name Gun ID Source Ammo Type UPS Ammo 1 Dmg 1 Ammo 2 Dmg 2
pipe SMG: 9x19mm smg_9mm MOD 9mm 0 9x19mm JHP 20 9x19mm JHP 20
briefcase SMG briefcase_smg CDDA 9mm 0 9x19mm JHP 26 9x19mm JHP 26
TEC-9 tec9 CDDA 9mm 0 9x19mm JHP 26 9x19mm JHP 26
H&K MP5 hk_mp5 CDDA 9mm 0 9x19mm JHP 28 9x19mm JHP 28
pipe rifle: 9x19mm rifle_9mm CDDA 9mm 0 9x19mm JHP 28 9x19mm JHP 28
STEN sten CDDA 9mm 0 9x19mm JHP 28 9x19mm JHP 28
Calico M960 calico CDDA 9mm 0 9x19mm JHP 30 9x19mm JHP 30
Cx4 Storm cx4 CDDA 9mm 0 9x19mm JHP 30 9x19mm JHP 30

There should be more guns and more ammo variants.

Crossbow data looks right:

Gun Name Gun ID Source Ammo Type UPS Ammo 1 Dmg 1 Ammo 2 Dmg 2 Ammo 3 Dmg 3 Ammo 4 Dmg 4 Ammo 5 Dmg 5 Ammo 6 Dmg 6 Ammo 7 Dmg 7
repeating crossbow rep_crossbow CDDA bolt 0 wooden crossbow bolt 10 metal crossbow bolt 15 steel broadhead bolt 12 steel bodkin bolt 8 steel target bolt 10 explosive crossbow bolt 12 bone crossbow bolt 12
makeshift crossbow crossbow_makeshift MOD bolt 0 wooden crossbow bolt 24 metal crossbow bolt 29 steel broadhead bolt 26 steel bodkin bolt 22 steel target bolt 24 explosive crossbow bolt 26 bone crossbow bolt 26
pistol crossbow hand_crossbow CDDA bolt 0 wooden crossbow bolt 24 metal crossbow bolt 29 steel broadhead bolt 26 steel bodkin bolt 22 steel target bolt 24 explosive crossbow bolt 26 bone crossbow bolt 26
crossbow crossbow CDDA bolt 0 wooden crossbow bolt 44 metal crossbow bolt 49 steel broadhead bolt 46 steel bodkin bolt 42 steel target bolt 44 explosive crossbow bolt 46 bone crossbow bolt 46
composite crossbow compositecrossbow CDDA bolt 0 wooden crossbow bolt 50 metal crossbow bolt 55 steel broadhead bolt 52 steel bodkin bolt 48 steel target bolt 50 explosive crossbow bolt 52 bone crossbow bolt 52
pneumatic bolt driver helsing CDDA bolt 0 wooden crossbow bolt 50 metal crossbow bolt 55 steel broadhead bolt 52 steel bodkin bolt 48 steel target bolt 50 explosive crossbow bolt 52 bone crossbow bolt 52
compound crossbow compcrossbow CDDA bolt 0 wooden crossbow bolt 66 metal crossbow bolt 71 steel broadhead bolt 68 steel bodkin bolt 64 steel target bolt 66 explosive crossbow bolt 68 bone crossbow bolt 68
vortex bolter vortexbolter MOD bolt 0 wooden crossbow bolt 70 metal crossbow bolt 75 steel broadhead bolt 72 steel bodkin bolt 68 steel target bolt 70 explosive crossbow bolt 72 bone crossbow bolt 72
storm bolter bolter MOD bolt 0 wooden crossbow bolt 80 metal crossbow bolt 85 steel broadhead bolt 82 steel bodkin bolt 78 steel target bolt 80 explosive crossbow bolt 82 bone crossbow bolt 82
heavy crossbow huge_crossbow CDDA bolt 0 wooden crossbow bolt 110 metal crossbow bolt 115 steel broadhead bolt 112 steel bodkin bolt 108 steel target bolt 110 explosive crossbow bolt 112 bone crossbow bolt 112

So I don't think it's an issue with my spreadsheet (could be, but don't think so). There's only 184 weapon entries in the original sheet and these seems much too low.

Theundyingcode commented 5 years ago

Haven't gotten around to handling inheritance for guns yet just ammo. (They are currently getting ignored) The whole item factory bit was a lot more than I was initially expecting so I have been adding a bit at a time. The only thing left is to process the deferred guns so one more push. YAY MOTIVATION (-.-)..zzzZZZZ

Theundyingcode commented 5 years ago

Haven't gotten around to handling inheritance for guns yet just ammo. (They are currently getting ignored) The whole item factory bit was a lot more than I was initially expecting so I have been adding a bit at a time. The only thing left is to process the deferred guns so one more push. YAY MOTIVATION (-.-)..zzzZZZZ

Theundyingcode commented 5 years ago

Haven't gotten around to handling inheritance for guns yet just ammo. (They are currently getting ignored) The whole item factory bit was a lot more than I was initially expecting so I have been adding a bit at a time. The only thing left is to process the deferred guns so one more push. YAY MOTIVATION (-.-)..zzzZZZZ

Poragon commented 5 years ago

Yeah, I noticed few missing guns such as the coilgun and shotgun varieties. Was working on a good format for display the value differences but your sheet is much better Langsdorf lol. I'll go ahead and make a copy of it and focus on the work of figuring out the speed of these projectiles, thank a lot for the help!

mlangsdorf commented 5 years ago

Let's not duplicate effort. @Poragon, I can give you access to the sheet and you can make your changes there.

@Theundyingcode, sorry, I read your announcement as saying you had everything and thought I was being helpful by pointing out the missing stuff. Take your time, just either feed me the results when you're done or request access to the sheet so you can update it yourself.

Theundyingcode commented 5 years ago

Sorry I kept you waiting an extra 2 days for literally less than 10 min of work but here is tabel 3.0 now supporting gun inheritance: cdda_gunVammo.zip

mlangsdorf commented 5 years ago

9mm guns, highlighting inheritance

data/json/items/gun/9mm.json:3: "id": "briefcase_smg", data/json/items/gun/9mm.json:40: "id": "calico", data/json/items/gun/9mm.json:71: "id": "cx4", data/json/items/gun/9mm.json:102: "id": "glock_19", data/json/items/gun/9mm.json:103: "copy-from": "pistol_base", data/json/items/gun/9mm.json:129: "id": "hk_mp5", data/json/items/gun/9mm.json:162: "id": "ksub2000", data/json/items/gun/9mm.json:195: "id": "l_lookout_9mm", data/json/items/gun/9mm.json:196: "copy-from": "l_enforcer_45", data/json/items/gun/9mm.json:205: "id": "l_mp_9mm", data/json/items/gun/9mm.json:206: "copy-from": "l_sp_9mm", data/json/items/gun/9mm.json:219: "id": "l_sp_9mm", data/json/items/gun/9mm.json:220: "copy-from": "pistol_base", data/json/items/gun/9mm.json:247: "id": "m9", data/json/items/gun/9mm.json:248: "copy-from": "pistol_base", data/json/items/gun/9mm.json:274: "id": "rifle_9mm", data/json/items/gun/9mm.json:302: "id": "sten", data/json/items/gun/9mm.json:330: "id": "tec9", data/json/items/gun/9mm.json:360: "id": "usp_9mm", data/json/items/gun/9mm.json:361: "copy-from": "pistol_base", data/json/items/gun/9mm.json:388: "id": "uzi", data/json/items/gun/9mm.json:389: "copy-from": "smg_base", data/json/items/gun/9mm.json:419: "id": "glock_17", data/json/items/gun/9mm.json:420: "copy-from": "pistol_base",

9mm guns in the spreadsheet

Name id
briefcase SMG briefcase_smg
TEC-9 tec9
H&K MP5 hk_mp5
pipe rifle: 9x19mm rifle_9mm
STEN sten
H&K MP5 hk_mp5
pipe rifle: 9x19mm rifle_9mm
Calico M960 calico
Cx4 Storm cx4
Cx4 Storm cx4
Calico M960 calico

There should be 16 entries, but there are 10, with 5 duplicates. Also, there are 8 variants of 9mm ammo, but 9mm JHP is showing up twice and no other variants is showing up at all.

Theundyingcode commented 5 years ago

I'll take another look

Theundyingcode commented 5 years ago

So the problem is that I never thought i needed to support inheritance for the abstracts so out of the entire /data/json/items/classes/gun.json file only gun_base gets loaded. A similar problem might be happening with ammo somewhere.

also, ksub2000, l_sp_9mm and, uzi will not get added by design since they have internal mods and I decided the complexity of including mods would make it easier to just add them by hand. I'll look at see about adding a list of skipped guns.

Poragon commented 5 years ago

Was lookin' through the bow section of the comparison sheet @mlangsdorf and it seems the bow damage values are all mussed up? Not quite sure how the values are being drawn from the raw data sheet, but there's some pretty noticeable differences between the two (eg. compound bow w/ firehardended is 22 dmg on raw but 40 on Weapon Data/Sorted Weapon Data)

Edit: Seems to be with all damage values. Weapon damage being added twice?

mlangsdorf commented 5 years ago

Yeah, weapon damage was being added twice. Hammered that out and cleaned out some other bugs.

@Theundyingcode: the only guns where the built in mods should matter for damage calculation are the l_lmg_223 (integral long barrel) and the rm11b_sniper_rifle (integral suppressor). The folding stocks on the uzi and ksub2000 shouldn't matter for the damage analysis.

Theundyingcode commented 5 years ago

Debugging a script with a whole bunch of specific case shortcuts is a nightmare so I scrapped it and wrote a new general purpose one. It was pretty quick to write since I know what i'm doing now and I left out the item factory and just stuck to nested dictionaries.

gun_v_ammo.zip

Notes:

mlangsdorf commented 5 years ago

I think you could just omit the ammos that don't have any damages attached to them, but I don't know how easy it is for you to set that up.

It looks like all the data is there. The only other thing that I would ask for is to print damage as damage/AP but that's not hugely important.

I reworked the spreadsheet so that weapons are sorted in approximate order of ammo power: low powered pistols at the top, heavy vehicle weapons at the botom.

mlangsdorf commented 5 years ago

Spot checking some obvious areas of concern:

Theundyingcode commented 5 years ago

I think you could just omit the ammos that don't have any damages attached to them, but I don't know how easy it is for you to set that up.

Trivial difficulty, not having a damage value causes an error so I am actually checking if it has one and defaulting them to 0. I can just delete them instead.

It looks like all the data is there. The only other thing that I would ask for is to print damage as damage/AP but that's not hugely important.

Should be just some easy string formatting.

I'll make the changes as soon as I get a chance.

Poragon commented 5 years ago

I've got the formula outputting nicely for projectiles that cause damage via wound channel (eg. arrows/bolts) and FMJ bullet type projectiles that cause damage both via wound channeling/cavitation and impact shock. However projectiles that rely primarily on impact shock for damage are proving a bit iffy to work with, namely the test case of the rock. Rocks are proving to be very lethal with the model I'm working with, with an average strength human clocking in at throwing a rock for 19~ damage with a good hit.

Anyone have any sort of idea where rocks should be sitting on the damage scale? I'm not quite sure where the desired range for such projectiles are.

Theundyingcode commented 5 years ago

Anyone have any sort of idea where rocks should be sitting on the damage scale? I'm not quite sure where the desired range for such projectiles are.

The body is really good at absorbing blunt impacts to basically anywhere but the head and joints (If they can't fold in the direction of impact). Unless the come from a MLB pitcher or a superhuman, a normal person can take a hit from a thrown blunt object with little more than a bruise so long as it doesn't hit in a bad place. (throw stones at people to chase them out not kill them) That said, your average person would probably be able to knock you out with a good hit to the head.

Bassically, really low on the damage scale but headshots/crits dealing damage more inline with everything else?

Poragon commented 5 years ago

Lower on the damage was what I was thinkin' too, just means that there will have to be a few ranges for the terminal ballistics factor to take place in. Things more wound channel focused than FMJ round will be more efficient for the KE to DMG conversion, things slightly more cavitation/shock focused than FMJ rounds will also be more efficient for KE to DMG, and things that start shifting to pure shock will be less efficient than FMJ rounds for KE to DMG.

Theundyingcode commented 5 years ago

here is the large table with your requested changes @mlangsdorf:

CDDA_GUNvAMMO.zip

I made the format: dmg(ap) instead of dmg/ap to prevent excel from auto dividing or converting to dates.

mlangsdorf commented 5 years ago

Thanks! BTW, you're not handling weapons with multiple ammo types correctly, like the .410 shotguns. I fixed it up by hand but you may want to look at it.

Okay, we've got the data. Now what?

Theundyingcode commented 5 years ago

BTW, you're not handling weapons with multiple ammo types correctly,

I didn't know there were guns that used multiple ammo types...

Poragon commented 5 years ago

Now that we got the base game data all sorted and nicely displayed thanks to Undyingcode and mlangsdorf, It's just a matter of creating a sheet that will display the same stuff, but with values that the formula has created.

The main work from here on out will be getting the kenetic energy for each ranged weapon, that'll require a bit of research but shouldn't be too terrible since there's some fairly lenient ranges for most projectiles. It'll be easy for guns, since damage for them is derived from their kinetic energy in the first place, and they serve as the base for the whole formula so their damage shouldn't change if it was correct in the first place, just the AP values.

I'll begin work on @mlangsdorf 's spreadsheet and include a new sheet with a few examples of how listing a weapons kinetic energy can be achieved via showing a real world comparison. Once we get all the weapons listed out I can just copy the sorted weapon data sheet and set a formula that looks at the weapons kinetic energy sheet to find the values and we'll have a nice way to see the entire set of results of the formula.

Theundyingcode commented 5 years ago

Did a quick google search for firearm muzzle energy, lots of sites like this: http://www.shooterscalculator.com/bullet-kinetic-energy.php http://gunbelts.com/blog/muzzle-energy-ballistics/#_ Seems like the energy stats of common ammo is super easy to find and the stats for firearm ammo pairs slightly harder but still pretty easy to find.

Poragon commented 5 years ago

Yep, CDDA actually already bases firearm damage around KE, with sqrt(KE) being the damage of the bullet in question. Actually serves as the beginning point of the current iteration of the damage curve, with everything balanced around how guns are balanced effectively. The firearm listings will really just be to double check on things to ensure that no guns have strayed from the current balance (eg. mrlangsdorf mentioned the .50 cal pistol doing more than the rifle, which it should not).

The difficult bit is going to be non-bullet weapons such as bows, crossbow, ect. They have much more complex means of figuring out the KE for a given bow/projectile combo. I'm currently looking around for an easy way to figure out crossbow values, I already found a bow calculator here but there still remains an issue of figuring out what exactly the various draw lengths/weights are for all the different bows in CDDA.

Not quite sure as to how to go about that, as I dunno if the design of the bows actually had any real consistent design or was just eyeballed. Have to dig through some pull requests and maybe find out the thinking behind each one.

mlangsdorf commented 5 years ago

To a first pass, bow/crossbow KE should be the same as bullet KE: 1/2 mv^2. It's going to be harder to get good m and v values for crossbows and arrows, but the basic logic should be the same.

Poragon commented 5 years ago

Yeah, looking into it seems that the draw length differences are the only big thing that will need to be accounted for between crossbow/bows, so any online arrow calculator should work for both. Only thing that remains is figuring out all the bow variants. I've no idea how fast the 'self bow' shoots an arrow, google spits out a pretty wide range for those sorts of bows.

Should we adopt a tier system where there's a percentage increase in KE output per tier, w/ a real life bow analogue (eg. compound bow, we already got stats for that) as the base? Or should we try to match up what each of these bows to their closest real life analogue? Second one has been proving sorta tough given only the info the game gives on the bows.

kevingranade commented 5 years ago

Closest real-world analogue and interpolated the rest.

Poragon commented 5 years ago

Gotcha, I'll begin the construction of the actual kenetic energy sheet on mrlangdorf's doc.

Theundyingcode commented 5 years ago

Not at all helpful but couldn't resist.

Poragon commented 5 years ago

Your gif was great for morale Undying, it's helpful all of its own. On the topic of things that are unhelpful though, bow descriptions. My god, bow descriptions. Over the past day of trying to match up a real world analogue to some of the bows, reading chapter 4 of this about five times, and speaking with darktoes over it, it's become apparent that either some of the bow descriptions in cataclysm straight out lie or they all are so vague that interpolating vital information from them has the potential to completely change the nature of the item.

The selfbow is a perfect example of this. A self bow or simple bow is a bow made from a single piece of wood. Extra material such as horn nocks on the ends, or built-up handles, would normally be accepted as part of a self bow. The materials used for crafting match up here, but the issue comes that absolutely nothing that would really help define the kenetic energy (KE) of a bow has been given from this.

The KE of an arrow leaving the bow is determined by the potential energy (PE) stored in the bow prior to release which can be calculated as shown here; capture

The x on the image is referred to as the draw length of a bow, and the F the draw weight. At the absolute bear minimum, we require these two bits of information (along with an efficiency ratio of PE:KE as thermodynamics demands as such as its a very important bit) to get the KE of the arrow, the goal of all this. As stated before, the bow description gives us none of this so I tried to find a real world analogue. Issue is it turns out you can make a very wide combination of efficiency, draw length, and draw weight on a bow defined as 'a single piece of wood.'

Draw length is dependent on height and bow intent, so even assuming everyone in CDDA is the exact same height as the average american (169.55cm) you still can't make a good estimate as you could make a selfbow to mimic a longbow or a short bow. Draw weight is a similar story with ranges (that you'd likely put into common use) being from 50-70lb. Efficiency depends entirely on the material, bow type, and the skill used in creation, which thankfully we do have. Issue is, there's no stats I can find for "the efficiency of a selfbow made by an amateur" because that's a massive range of sizes and materials, and getting anymore specific turns out no results. To top it all off, talking with the resident bow expert Darktoes revealed that the selfbow described in CDDA isn't even an actual selfbow.

TL;DR: Way back someone made the first bow, they slapped a random name that made no sense on it, threw a damage value that also made no consistent sense on it, totally forgot to mention any relevant things about it in its description and ever since then all bows have been balanced based off only each other. I can't move them from their weird 'bow world' of balance without clarifying exactly what they are which would heavily alter them and I'm concerned that falls under its own issue entirely.

I need a bow-physicist adult ;-;

Theundyingcode commented 5 years ago

I have been doing more work on my script in order to make it load all cdda's json and ended up adding a few more debug messages one bit of which is relevant:

20x66_beanbag copies from 20x66_shot and uses proportional on non-set value: loudness 20x66_bootleg_shot copies from 20x66_shot and uses proportional on non-set value: dispersion 20x66_flechette copies from 20x66_shot and uses relative on non-set value: pierce 38_fmj copies from 38_special and uses relative on non-set value: pierce 9mmP copies from 9mm and uses relative on non-set value: pierce reloaded_shot_00 copies from shot_00 and uses proportional on non-set value: dispersion shot_flechette copies from shot_00 and uses relative on non-set value: pierce shot_scrap copies from shot_00 and uses proportional on non-set value: dispersion armor_acidchitin copies from armor_chitin and uses relative on non-set value: environmental_protection 20x66_slug copies from 20x66_shot and uses relative on non-set value: pierce 38_super copies from 38_special and uses relative on non-set value: pierce 40mm_flechette copies from 40mm_shot and uses relative on non-set value: pierce 9mmP2 copies from 9mm and uses relative on non-set value: pierce reloaded_shot_flechette copies from shot_flechette and uses proportional on non-set value: dispersion shot_slug copies from shot_00 and uses relative on non-set value: pierce m2browning_sawn copies from m2browning and uses relative on non-set value: ranged_damage mosin44 copies from mosin91_30 and uses relative on non-set value: ranged_damage nailrifle copies from nailgun and uses relative on non-set value: range nailrifle copies from nailgun and uses relative on non-set value: ranged_damage 20x66_bootleg_flechette copies from 20x66_flechette and uses proportional on non-set value: dispersion 20x66_frag copies from 20x66_slug and uses proportional on non-set value: dispersion 9mmfmj copies from 9mm and uses relative on non-set value: pierce reloaded_shot_bird copies from shot_bird and uses proportional on non-set value: dispersion 20x66_bootleg_slug copies from 20x66_slug and uses proportional on non-set value: dispersion 22_fmj copies from 22_lr and uses relative on non-set value: pierce

The script assumes that everything should default to 0 so if it can't find the value it's supposed to modify, it pretends it was 0. (relative results in setting it to the relative value and proportional set it to 0) Let me know if this is incorrect behavior.

Poragon commented 5 years ago

After a discussion on discord and staring at bow/crossbow values more, I'm just going to go ahead and make the best real life comparison and try to factor in the crafting skill requirement as an indicator of where the KE should be. It does mean that the comparison sheet isn't really correct for bows/crossbows. We're now comparing CDDA bows/crossbows to CDDA bow/crossbows, re-imagined for clarity then put through the formula.

darktoes commented 5 years ago

I really don't think there's a better way to go about it. Like I mentioned on Discord (restating for others), guns are easy to determine because they have specific models and bullet types that have specific values, and, for the most part, the game uses those specific models and types. Bows and crossbows have been around for thousands of years and there is a LOT of variation within them. The best we can do is try to pick sensible parameters for our test cases and use what data we can find.

So long as we get things roughly standardised, I'm happy to be responsible for tweaking them to roughly realistic and balanced values.

mlangsdorf commented 5 years ago

I think we should be documenting our references, preferably in the JSON and again in doc/ .