New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[READY] Ranged balance unit test #21468

Merged
merged 36 commits into from Sep 27, 2017

Conversation

Projects
None yet
8 participants
@kevingranade
Member

kevingranade commented Jul 23, 2017

First stab at an automated test to ensure ranged balance as outlined in #21244
Fixes #21244
Fixes #19718
Fixes #21158

  • NPCs need gear loadouts, they're currently naked.
  • Decrease quickdraw accuracy.
    - [ ] Apply 5x increase to MAX_RECOIL and related values in a more consistent way.
  • Need to increase mid-range accuracy across the board.
  • Reduce accuracy at very high aim levels in some cases.
    - [ ] Apply dispersion scaling changes to item definitions instead of as an override.
  • Evaluate new use cases.
  • add upper and lower caps on aim speed.
  • communicate new system to player.
@Coolthulhu

This comment has been minimized.

Show comment
Hide comment
@Coolthulhu

Coolthulhu Jul 24, 2017

Contributor

RNG has to be there until you write a CD function for your distribution.
CDF for a sum of uniform variables is basically brute force approach: simulate all possible rolls, calculate distribution. Still, most likely better than relying on RNG.
That's a good reason not to use sum of random variables (except maybe as Irvin-Hall, for which there are known formulas).

One important thing those tests should test should be distribution of hit types, not just binary hit/miss.
And even if not test exactly yet, at least print.

Contributor

Coolthulhu commented Jul 24, 2017

RNG has to be there until you write a CD function for your distribution.
CDF for a sum of uniform variables is basically brute force approach: simulate all possible rolls, calculate distribution. Still, most likely better than relying on RNG.
That's a good reason not to use sum of random variables (except maybe as Irvin-Hall, for which there are known formulas).

One important thing those tests should test should be distribution of hit types, not just binary hit/miss.
And even if not test exactly yet, at least print.

@kevingranade

This comment has been minimized.

Show comment
Hide comment
@kevingranade

kevingranade Jul 29, 2017

Member

Wild firing without aiming fails, it's too accurate.

Member

kevingranade commented Jul 29, 2017

Wild firing without aiming fails, it's too accurate.

@Coolthulhu Coolthulhu self-assigned this Jul 30, 2017

@kevingranade kevingranade changed the title from Ranged balance unit test to [WIP] Ranged balance unit test Jul 30, 2017

@Coolthulhu Coolthulhu removed their assignment Jul 30, 2017

@kevingranade

This comment has been minimized.

Show comment
Hide comment
@kevingranade

kevingranade Aug 2, 2017

Member

Needed a massive overhaul for performance reasons, it was taking multiple seconds to complete, and it's just going to continue to get worse over time. (after changes they're running in under 0.05s)
Two major changes were to call projectile_attack_roll() and make assertions about missed_by (solid order of magnitude improvement) and to inject the desired thresholds into the test fixture so it could bail out once the confidence intervals shrunk to not include any desired thresholds. This also allows us to make assertions about several hit qualities at the same range, but that might end up being unecessary.

This covers the bases outlined in #21244 but needs some additional tweaking and then of course the actual balance changes.

  • NPCs need gear loadouts, they're currently naked.
  • Guns need to be geared up when appropriate, currently it only uses vanilla guns.
Member

kevingranade commented Aug 2, 2017

Needed a massive overhaul for performance reasons, it was taking multiple seconds to complete, and it's just going to continue to get worse over time. (after changes they're running in under 0.05s)
Two major changes were to call projectile_attack_roll() and make assertions about missed_by (solid order of magnitude improvement) and to inject the desired thresholds into the test fixture so it could bail out once the confidence intervals shrunk to not include any desired thresholds. This also allows us to make assertions about several hit qualities at the same range, but that might end up being unecessary.

This covers the bases outlined in #21244 but needs some additional tweaking and then of course the actual balance changes.

  • NPCs need gear loadouts, they're currently naked.
  • Guns need to be geared up when appropriate, currently it only uses vanilla guns.
@kevingranade

This comment has been minimized.

Show comment
Hide comment
@kevingranade

kevingranade Aug 19, 2017

Member

Constraint for quickdraw turned out to be overly-agressive after all, it took dropping it to one hit out of 10, increasing the range slightly and increasing MAX_RECOIL (and associated values) by 5x to enforce it properly, but that did it and it seems like a workable adjustment, the original MAX_RECOIL was just a shot in the dark after all rimshot.

Member

kevingranade commented Aug 19, 2017

Constraint for quickdraw turned out to be overly-agressive after all, it took dropping it to one hit out of 10, increasing the range slightly and increasing MAX_RECOIL (and associated values) by 5x to enforce it properly, but that did it and it seems like a workable adjustment, the original MAX_RECOIL was just a shot in the dark after all rimshot.

@kevingranade

This comment has been minimized.

Show comment
Hide comment
@kevingranade

kevingranade Aug 19, 2017

Member

For context, "completely unaimed" is now 3,000 MOA, which in more accessable terms, is roughly 3" (radius) per tle of distance. That doesn't sound like much, but it's 5x as high as it used to be, and it's plenty to make you miss when added to other sources of inaccuracy. I'm pretty happy with that result, it actually gives us a basis for what unaimed accuracy should be as opposed to it being totally arbitrary.

This does cause a problem though, now that aiming is a lot faster, it's more of a no-brainer to keep aiming to the maximum, since the spike in accuracy at the very end is extremely high.
I think we need a progressive aim speed, but before that, we need some expectations around aiming speed as well, otherwise the fixes to accuracy are quite likely to end up wrecking other parts of the system.

Member

kevingranade commented Aug 19, 2017

For context, "completely unaimed" is now 3,000 MOA, which in more accessable terms, is roughly 3" (radius) per tle of distance. That doesn't sound like much, but it's 5x as high as it used to be, and it's plenty to make you miss when added to other sources of inaccuracy. I'm pretty happy with that result, it actually gives us a basis for what unaimed accuracy should be as opposed to it being totally arbitrary.

This does cause a problem though, now that aiming is a lot faster, it's more of a no-brainer to keep aiming to the maximum, since the spike in accuracy at the very end is extremely high.
I think we need a progressive aim speed, but before that, we need some expectations around aiming speed as well, otherwise the fixes to accuracy are quite likely to end up wrecking other parts of the system.

@Firestorm01X2

This comment has been minimized.

Show comment
Hide comment
@Firestorm01X2

Firestorm01X2 Aug 23, 2017

Contributor

How about add relation between aming speed and player weapon skill so unexpirienced player take aim slower?

Contributor

Firestorm01X2 commented Aug 23, 2017

How about add relation between aming speed and player weapon skill so unexpirienced player take aim slower?

@kevingranade

This comment has been minimized.

Show comment
Hide comment
@kevingranade

kevingranade Aug 23, 2017

Member

It's already there.

Member

kevingranade commented Aug 23, 2017

It's already there.

@kevingranade

This comment has been minimized.

Show comment
Hide comment
@kevingranade

kevingranade Aug 27, 2017

Member

Additional info, I wrote a test to find the dispersion value where hit rate exceeds 50% at various ranges, and here's the output:
Range: 1 Dispersion: 1785
Range: 2 Dispersion: 891
Range: 3 Dispersion: 582
Range: 4 Dispersion: 426
Range: 5 Dispersion: 342
Range: 6 Dispersion: 301
Range: 7 Dispersion: 245
Range: 8 Dispersion: 216
Range: 9 Dispersion: 192
Range: 10 Dispersion: 169
Range: 11 Dispersion: 147
Range: 12 Dispersion: 146
Range: 13 Dispersion: 133
Range: 14 Dispersion: 120
Range: 15 Dispersion: 114
Range: 16 Dispersion: 107
Range: 17 Dispersion: 101
Range: 18 Dispersion: 95
Range: 19 Dispersion: 90
Range: 20 Dispersion: 85
Range: 21 Dispersion: 82
Range: 22 Dispersion: 78
Range: 23 Dispersion: 74
Range: 24 Dispersion: 72
Range: 25 Dispersion: 69
Range: 26 Dispersion: 66
Range: 27 Dispersion: 63
Range: 28 Dispersion: 49
Range: 29 Dispersion: 49
Range: 30 Dispersion: 49
Range: 31 Dispersion: 49
Range: 32 Dispersion: 49
Range: 33 Dispersion: 49
Range: 34 Dispersion: 49
Range: 35 Dispersion: 49
Range: 36 Dispersion: 49
Range: 37 Dispersion: 46
Range: 38 Dispersion: 45
Range: 39 Dispersion: 44
Range: 40 Dispersion: 42
Range: 41 Dispersion: 41
Range: 42 Dispersion: 40
Range: 43 Dispersion: 40
Range: 44 Dispersion: 39
Range: 45 Dispersion: 38
Range: 46 Dispersion: 37
Range: 47 Dispersion: 36
Range: 48 Dispersion: 36
Range: 49 Dispersion: 34
Range: 50 Dispersion: 34
Range: 51 Dispersion: 34
Range: 52 Dispersion: 33
Range: 53 Dispersion: 32
Range: 54 Dispersion: 21
Range: 55 Dispersion: 21
Range: 56 Dispersion: 21
Range: 57 Dispersion: 21
Range: 58 Dispersion: 21
Range: 59 Dispersion: 21
Range: 60 Dispersion: 21

Member

kevingranade commented Aug 27, 2017

Additional info, I wrote a test to find the dispersion value where hit rate exceeds 50% at various ranges, and here's the output:
Range: 1 Dispersion: 1785
Range: 2 Dispersion: 891
Range: 3 Dispersion: 582
Range: 4 Dispersion: 426
Range: 5 Dispersion: 342
Range: 6 Dispersion: 301
Range: 7 Dispersion: 245
Range: 8 Dispersion: 216
Range: 9 Dispersion: 192
Range: 10 Dispersion: 169
Range: 11 Dispersion: 147
Range: 12 Dispersion: 146
Range: 13 Dispersion: 133
Range: 14 Dispersion: 120
Range: 15 Dispersion: 114
Range: 16 Dispersion: 107
Range: 17 Dispersion: 101
Range: 18 Dispersion: 95
Range: 19 Dispersion: 90
Range: 20 Dispersion: 85
Range: 21 Dispersion: 82
Range: 22 Dispersion: 78
Range: 23 Dispersion: 74
Range: 24 Dispersion: 72
Range: 25 Dispersion: 69
Range: 26 Dispersion: 66
Range: 27 Dispersion: 63
Range: 28 Dispersion: 49
Range: 29 Dispersion: 49
Range: 30 Dispersion: 49
Range: 31 Dispersion: 49
Range: 32 Dispersion: 49
Range: 33 Dispersion: 49
Range: 34 Dispersion: 49
Range: 35 Dispersion: 49
Range: 36 Dispersion: 49
Range: 37 Dispersion: 46
Range: 38 Dispersion: 45
Range: 39 Dispersion: 44
Range: 40 Dispersion: 42
Range: 41 Dispersion: 41
Range: 42 Dispersion: 40
Range: 43 Dispersion: 40
Range: 44 Dispersion: 39
Range: 45 Dispersion: 38
Range: 46 Dispersion: 37
Range: 47 Dispersion: 36
Range: 48 Dispersion: 36
Range: 49 Dispersion: 34
Range: 50 Dispersion: 34
Range: 51 Dispersion: 34
Range: 52 Dispersion: 33
Range: 53 Dispersion: 32
Range: 54 Dispersion: 21
Range: 55 Dispersion: 21
Range: 56 Dispersion: 21
Range: 57 Dispersion: 21
Range: 58 Dispersion: 21
Range: 59 Dispersion: 21
Range: 60 Dispersion: 21

@kevingranade kevingranade changed the title from [WIP] Ranged balance unit test to [CR] Ranged balance unit test Sep 2, 2017

{
dispersion_sources dispersion = obj.gun_dispersion();
int weapon_dispersion = std::max( obj.gun_dispersion() / 3, 45 );

This comment has been minimized.

@kevingranade

kevingranade Sep 2, 2017

Member

The division by three and minimum dispersion value are temporary fixes, they need to be applied across the weapon definitions.

@kevingranade

kevingranade Sep 2, 2017

Member

The division by three and minimum dispersion value are temporary fixes, they need to be applied across the weapon definitions.

@kevingranade

This comment has been minimized.

Show comment
Hide comment
@kevingranade

kevingranade Sep 2, 2017

Member

All tests pass now.
See 8f13efe for the balance adjustments, as well as a few changes to test criteria.

Member

kevingranade commented Sep 2, 2017

All tests pass now.
See 8f13efe for the balance adjustments, as well as a few changes to test criteria.

@Coolthulhu

This comment has been minimized.

Show comment
Hide comment
@Coolthulhu

Coolthulhu Sep 2, 2017

Contributor

How does the 5x MAX_RECOIL translate to actual gameplay?
Judging by comparison to how inaccurate current 600 recoil is, the 5x MAX_RECOIL will feel not like quickdraw, but like the character actually forgot to raise the gun from the holster.

Contributor

Coolthulhu commented Sep 2, 2017

How does the 5x MAX_RECOIL translate to actual gameplay?
Judging by comparison to how inaccurate current 600 recoil is, the 5x MAX_RECOIL will feel not like quickdraw, but like the character actually forgot to raise the gun from the holster.

@kevingranade

This comment has been minimized.

Show comment
Hide comment
@kevingranade

kevingranade Sep 2, 2017

Member

It roughly enforces the invariants I outlined above, it's practically impossible to hit something outside of point-blank range if you don't aim.

More precisely point blank range is around 4 squares away if nothing else is interfering with your aim (i.e. play with the quickdraw range in the "expert_shooter_accuracy" test). Outside of this range hit rate is under 10% for hits, and under 20% for even grazing hits. Inside this range the hit rate climbs, but it never gets particularly good. Still, players will generally be able to rely on a point-blank shot before the monster starts smacking them around.

Member

kevingranade commented Sep 2, 2017

It roughly enforces the invariants I outlined above, it's practically impossible to hit something outside of point-blank range if you don't aim.

More precisely point blank range is around 4 squares away if nothing else is interfering with your aim (i.e. play with the quickdraw range in the "expert_shooter_accuracy" test). Outside of this range hit rate is under 10% for hits, and under 20% for even grazing hits. Inside this range the hit rate climbs, but it never gets particularly good. Still, players will generally be able to rely on a point-blank shot before the monster starts smacking them around.

@Coolthulhu

This comment has been minimized.

Show comment
Hide comment
@Coolthulhu

Coolthulhu Sep 2, 2017

Contributor

Still, players will generally be able to rely on a point-blank shot before the monster starts smacking them around.

Grazing or sensible?
The ability to sneak in some good shots in between attacks from zombies is vital to making small arms usable. Pistols rely on being able to shoot on the move, where each move resets aim back to MAX_RECOIL.
If aim time from "freshly moved" to "50%+ chance of good+ hit" is above one turn, the gun becomes unusable in close quarters against anything big enough to consider using a gun on, unless the player can already outrun and outkite the thing.
Rifles can afford to be unreliable, as they already rely on range and burst damage. Pistols (other than laser) are absolutely dependent on reliability to have a niche.

Contributor

Coolthulhu commented Sep 2, 2017

Still, players will generally be able to rely on a point-blank shot before the monster starts smacking them around.

Grazing or sensible?
The ability to sneak in some good shots in between attacks from zombies is vital to making small arms usable. Pistols rely on being able to shoot on the move, where each move resets aim back to MAX_RECOIL.
If aim time from "freshly moved" to "50%+ chance of good+ hit" is above one turn, the gun becomes unusable in close quarters against anything big enough to consider using a gun on, unless the player can already outrun and outkite the thing.
Rifles can afford to be unreliable, as they already rely on range and burst damage. Pistols (other than laser) are absolutely dependent on reliability to have a niche.

@kevingranade

This comment has been minimized.

Show comment
Hide comment
@kevingranade

kevingranade Sep 2, 2017

Member

If aim time from "freshly moved" to "50%+ chance of good+ hit" is above one turn, the gun becomes unusable in close quarters against anything big enough to consider using a gun on, unless the player can already outrun and outkite the thing.

I'm fairly certain you can sneak shots in between enemy turns, but if you can't it's totally reasonable, guns should not work in melee, but I'm not worrying about enforcing that right now.

Member

kevingranade commented Sep 2, 2017

If aim time from "freshly moved" to "50%+ chance of good+ hit" is above one turn, the gun becomes unusable in close quarters against anything big enough to consider using a gun on, unless the player can already outrun and outkite the thing.

I'm fairly certain you can sneak shots in between enemy turns, but if you can't it's totally reasonable, guns should not work in melee, but I'm not worrying about enforcing that right now.

@Coolthulhu

This comment has been minimized.

Show comment
Hide comment
@Coolthulhu

Coolthulhu Sep 2, 2017

Contributor

guns should not work in melee

Well, they don't. No need to nerf that further beyond what is in master right now, as this will only further nerf already weak guns (pistols).
Or you could say they actually work all too well, because the best possible gun attack is an assault rifle burst at 1 tile range, but changing MAX_RECOIL does not affect that.

Contributor

Coolthulhu commented Sep 2, 2017

guns should not work in melee

Well, they don't. No need to nerf that further beyond what is in master right now, as this will only further nerf already weak guns (pistols).
Or you could say they actually work all too well, because the best possible gun attack is an assault rifle burst at 1 tile range, but changing MAX_RECOIL does not affect that.

@kevingranade

This comment has been minimized.

Show comment
Hide comment
@kevingranade

kevingranade Sep 2, 2017

Member

"What's in master right now" is not a valid balance target, if you think guns need to be usable in some particular use case, you need to articulate what that means so it can be enforced with a test.

Let me be more clear, the use case of "I want to use guns in melee" is not valid, so it does not influence the implementation.

Member

kevingranade commented Sep 2, 2017

"What's in master right now" is not a valid balance target, if you think guns need to be usable in some particular use case, you need to articulate what that means so it can be enforced with a test.

Let me be more clear, the use case of "I want to use guns in melee" is not valid, so it does not influence the implementation.

@kevingranade

This comment has been minimized.

Show comment
Hide comment
@kevingranade

kevingranade Sep 26, 2017

Member

Ok, that's everything except the overhaul of range_with_even_chance_of_good_hit().

I made the multipliers for dex and per the same (2.25), which is the furthest I could adjust it without making the tests start failing.

Member

kevingranade commented Sep 26, 2017

Ok, that's everything except the overhaul of range_with_even_chance_of_good_hit().

I made the multipliers for dex and per the same (2.25), which is the furthest I could adjust it without making the tests start failing.

@Coolthulhu

This comment has been minimized.

Show comment
Hide comment
@Coolthulhu

Coolthulhu Sep 27, 2017

Contributor

All right, let's get it in for now. The rebases get heavy and it's good enough for now.

Problems not fixed yet:

  • Dexterity is strictly better than perception. The tests should not break as long as sum of modifiers from dex+perception is ~5, meaning it should be safe to make perception give 5 per point and dexterity not help dispersion at all (just aim speed)
  • The new TICKS_TO_SECONDS function returns int. We want float, otherwise it rounds wayyy too much. Also, the name is misleading: everywhere else those units are called "moves", while ticks are variable sized.
  • As a consequence of the rounding above, "time to reach" always gets two trailing zeroes. Some extra precision isn't bad (one decimal would be perfect, because difference between 2.1 and 2.9 is almost 30%), but that ugly truncation above breaks it.
  • Shotguns don't have own test or any other measure of whether they are balanced or not
  • The "regular aim" etc. pseudo-headers in gun item display for guns aren't colored in any way, which makes it harder to spot where they start and end at a glance
  • Aiming is too fast and doesn't slow down fast enough. This brings back part of the "aim perfectly or not at all" dysfunction. Aiming speed should probably get its own set of tests later.
Contributor

Coolthulhu commented Sep 27, 2017

All right, let's get it in for now. The rebases get heavy and it's good enough for now.

Problems not fixed yet:

  • Dexterity is strictly better than perception. The tests should not break as long as sum of modifiers from dex+perception is ~5, meaning it should be safe to make perception give 5 per point and dexterity not help dispersion at all (just aim speed)
  • The new TICKS_TO_SECONDS function returns int. We want float, otherwise it rounds wayyy too much. Also, the name is misleading: everywhere else those units are called "moves", while ticks are variable sized.
  • As a consequence of the rounding above, "time to reach" always gets two trailing zeroes. Some extra precision isn't bad (one decimal would be perfect, because difference between 2.1 and 2.9 is almost 30%), but that ugly truncation above breaks it.
  • Shotguns don't have own test or any other measure of whether they are balanced or not
  • The "regular aim" etc. pseudo-headers in gun item display for guns aren't colored in any way, which makes it harder to spot where they start and end at a glance
  • Aiming is too fast and doesn't slow down fast enough. This brings back part of the "aim perfectly or not at all" dysfunction. Aiming speed should probably get its own set of tests later.

@Coolthulhu Coolthulhu merged commit 41e8209 into CleverRaven:master Sep 27, 2017

3 checks passed

continuous-integration/travis-ci/pr The Travis CI build passed
Details
coverage/coveralls Coverage increased (+0.7%) to 23.215%
Details
gorgon-ghprb Build finished.
Details
@Coolthulhu

This comment has been minimized.

Show comment
Hide comment
@Coolthulhu

Coolthulhu Sep 27, 2017

Contributor

Shit, should have been more careful - I totally missed the part where the tests for high-level characters got adjusted in the wrong way and relaxed into uselessness.

It still solves the part where guns are totally useless that resulted from the revert earlier on, but does not achieve balance.

Contributor

Coolthulhu commented Sep 27, 2017

Shit, should have been more careful - I totally missed the part where the tests for high-level characters got adjusted in the wrong way and relaxed into uselessness.

It still solves the part where guns are totally useless that resulted from the revert earlier on, but does not achieve balance.

@Firestorm01X2

This comment has been minimized.

Show comment
Hide comment
@Firestorm01X2

Firestorm01X2 Sep 27, 2017

Contributor

Create issue on that. Better with "Priority" tag.

Contributor

Firestorm01X2 commented Sep 27, 2017

Create issue on that. Better with "Priority" tag.

@Firestorm01X2

This comment has been minimized.

Show comment
Hide comment
@Firestorm01X2

Firestorm01X2 Sep 27, 2017

Contributor

There is chance that this PR caused crashes on throwing. Look for referenced issue.

Contributor

Firestorm01X2 commented Sep 27, 2017

There is chance that this PR caused crashes on throwing. Look for referenced issue.

@DanmakuDan

This comment has been minimized.

Show comment
Hide comment
@DanmakuDan

DanmakuDan Sep 27, 2017

Contributor

In ranged.cpp,

int time_to_fire( const Character &p, const itype &firingt )

The item being thrown expects a gun type to be associated with it, but there is only a null pointer available for items that can only be thrown (firingt.gun.get() = 0x0), causing the crash in #22001.

const skill_id &skill_used = firingt.gun.get()->skill_used;

The game doesn't crash if you try to throw a gun. This apparently means if I try to throw a pistol, it will use my pistol skill to determine the time it takes to throw it. I tested changing handgun level 0 to level 20, and it caused the aim expected throw time to decrease from 80 to 10.

Additionally, the actual throw time cost is calculated separately at int throw_cost( const player &c, const item &to_throw ) after a target has been confirmed.

Contributor

DanmakuDan commented Sep 27, 2017

In ranged.cpp,

int time_to_fire( const Character &p, const itype &firingt )

The item being thrown expects a gun type to be associated with it, but there is only a null pointer available for items that can only be thrown (firingt.gun.get() = 0x0), causing the crash in #22001.

const skill_id &skill_used = firingt.gun.get()->skill_used;

The game doesn't crash if you try to throw a gun. This apparently means if I try to throw a pistol, it will use my pistol skill to determine the time it takes to throw it. I tested changing handgun level 0 to level 20, and it caused the aim expected throw time to decrease from 80 to 10.

Additionally, the actual throw time cost is calculated separately at int throw_cost( const player &c, const item &to_throw ) after a target has been confirmed.

@kevingranade kevingranade deleted the kevingranade:ranged_balance_unit_test branch Sep 28, 2017

@Sagan-Ro

This comment has been minimized.

Show comment
Hide comment
@Sagan-Ro

Sagan-Ro Oct 13, 2017

Okay, so I have a few questions that are really bugging me:

  1. Why does my laser rifle on burst fire hit an enemy a couple of times then start shooting to the sides of the enemy. As in two-to-five tiles left and right of my target's actual position? If that is due to "recoil"... lasers aren't supposed to have recoil, right?

  2. Why does my character, even when debugged to level 40 skill in everything with 20 STR/INT/PRC/DEX with a scoped and fully outfitted M107 .50 caliber sniper rifle capable of accurately killing human-sized targets over a mile away... LITERALLY have trouble hitting a target across the street? In what universe could that possibly make sense?

I am really, really hoping the absolutely craptastic new "performance" of long-range weaponry and burst firing is just because the new system isn't finished yet. I was playing release 6723 for over a month, and could tag enemies more than 2/3 the time with the Heavy Rail Rifle (scope+gyroscopic stabilizer+tuned mechanism+match trigger) around 55+ squares away. Now I just get grazing hits over 20 squares, and any hit at all seems to go to zero at or past 25 squares.

Thank you so much, I would really like it if my sniper could actually, um... snipe. It's pointless to have long-distance weapons in this game if long-distance attacks are no longer possible.

Sagan-Ro commented Oct 13, 2017

Okay, so I have a few questions that are really bugging me:

  1. Why does my laser rifle on burst fire hit an enemy a couple of times then start shooting to the sides of the enemy. As in two-to-five tiles left and right of my target's actual position? If that is due to "recoil"... lasers aren't supposed to have recoil, right?

  2. Why does my character, even when debugged to level 40 skill in everything with 20 STR/INT/PRC/DEX with a scoped and fully outfitted M107 .50 caliber sniper rifle capable of accurately killing human-sized targets over a mile away... LITERALLY have trouble hitting a target across the street? In what universe could that possibly make sense?

I am really, really hoping the absolutely craptastic new "performance" of long-range weaponry and burst firing is just because the new system isn't finished yet. I was playing release 6723 for over a month, and could tag enemies more than 2/3 the time with the Heavy Rail Rifle (scope+gyroscopic stabilizer+tuned mechanism+match trigger) around 55+ squares away. Now I just get grazing hits over 20 squares, and any hit at all seems to go to zero at or past 25 squares.

Thank you so much, I would really like it if my sniper could actually, um... snipe. It's pointless to have long-distance weapons in this game if long-distance attacks are no longer possible.

@kevingranade

This comment has been minimized.

Show comment
Hide comment
@kevingranade

kevingranade Oct 13, 2017

Member

Please don't post in closed issues.

Member

kevingranade commented Oct 13, 2017

Please don't post in closed issues.

@CleverRaven CleverRaven locked and limited conversation to collaborators Oct 13, 2017

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.