Breaking the "more accurate weapons are always better" disfunction

Been looking into fixing ranged balance for good, see https://github.com/CleverRaven/Cataclysm-DDA/pull/21468
Had what I think is a good idea for addressing the problem we have where rifles are unatturally good at very close range by overhauling how dodging works, but I can’t follow up on it right now, so I want to make sure I don’t forget it.

The stats quo is you spend time aiming, which drives down your dispersion, which you can think of as the width of your shot grouping. At the instant when you fire, the target gets a chance to apply it’s dodge bonus as a penalty to your accuracy. If the target just keeps getting lucky, it can force you to miss no matter how well you aim, though the better you aim, the less likely this is.

What I realized is that a dodging opponent should be continuously attempting to interfere with your aim instead of doing so just at the final instant, and your aim should be “chasing” the opponent.
Just as a visualization, think of a movie or game with modern-ish dogfighting, where the hero (or villan) is trying to get a target lock on their opponent, the opponent is changing direction erratically, and the attacker is trying to steer their targeting recticle over the target so they can get a clean shot off.

To break it down, as the player is aiming, each amount of time spent aiming should be contested by the opponent, with the player improving their aim, and the opponent making it worse by moving away from where the player is aiming.

This isn’t particularly interesting until you adjust the effectiveness of aiming and dodging based on various factors. In particular, aiming speed would be angular speed, and dodging would be linear, so rifles with a low aiming speed would be efective at long range, but once an enemy is close, a rifle would be unable to keep up (unless you have superheros stats, in which case whatever), but a pistol or shotgun, which have much higher aiming speeds, would be able to aim faster than the monster dodges.

Implementation is simple, with each aim action, aim would improve based on weapon aim speed - monster dodge speed, where weapon aim speed is constant and monster dodge speed decreases linearly with range, i.e. monster.dodge_speed() / range.

the problem is not all enemies would even ATTEMPT to dodge, ether from lack of intelligence or lack or knowledge that guns are bad. why would a mi-go avoid the direction a puny human is pointing a tube? and a zombie hulk would only think “SMASH!!!” and move directly towards you. dodging in melee is almost completely instinct, an attempt to avoid the object coming towards you so even nearly brain dead critters would try to dodge a fist or a baseball bat.

so you would need to add dodge rate/speed/aim cost to every monster individually not just a flat rate based on distance.

also, recoil makes using rifles in close range a bad idea anyway, you get one good shot then recoil makes you too inaccurate to get another shot off in time.

That’s interesting, as only intelligent monsters that know what ranged weapons are would try to dodge them.

By the way, does this mean that the player has now a dodge speed too against ranged weapons?

Now I wonder why a NPC headshots you often, while you can’t kill them in the same fashion.

They don’t dodge your attacks, but the bullets tend to avoid their head and torso.

That’s interesting, as only intelligent monsters that know what ranged weapons are would try to dodge them.

By the way, does this mean that the player has now a dodge speed too against ranged weapons?[/quote]
Getting this realistic, creatures that are smart enough to avoid dangers, but do not know people well enough would not know what guns do until the first shot, and maybe not even then, would get progressively better at avoiding aim as their understanding of what the danger is gets better, until it maxes relative to their intelligence (and perception?)

Already I think this might be getting to involved, but since I’ve come this far:

My go to example for this is wolves. They would understand to avoid something slow like a thrown rock instinctively, but would either:

spoiler=Intelligent threat assessmentjump & pause at the first shot. In which case they are completely unknowing what a gun is, but if it hit them, or an ally, would put two and two together especially when the 2nd shot lands, making them either (a)skittish and flinching down at every shot or (b)prone to taking cover and running in serpentine patterns, whether towards or away from shooter.
(2)recognizing gun as the dangerous thing and trying to avoid its direction/ try to flank it perhaps having some pack members act as decoys up front, quickly darting into/out of cover, and making noise while others quietly flank around, sticking to cover as best they can until they are out of the weapon angle (in game this would simply be staying a ~‘greater’ distance from gun than ‘Decoys’ until target is well surrounded)
[/spoiler]
sigh intelligence in regards to guns creates too much variables. This would need to be simplified somehow if used.

anyhow, I think something like this would be the result and the grand scale, possibly with % chance on spawn for (a) or (b) based on creature type
(scrap spoiler, unfinished. Changed my mind once I started. I no longer like this breakdown so much)

(A N)= Guns unknown, generally (A)gressive towards human sized reatures
(A Y)= Guns known, generally (A)gressive towards human sized reatures
(B N)= Guns Unknown, Generally (B)ashfull towards human sized reatures
(B Y)=guns known, generally (B)ashfull towards human sized reatures
AKA - A= agressive b=bashfull Y=has encountered guns N= has (N)ot encountered guns before
(#-) = intelligence(& per?) lvl {rough outline of appropriate action}

#0 - A Y&N = Doesn’t care, only dodge chance is its gait and if it steps into a pothole/changes direction to get around an obstacle/terrain (EX:Brute)

#0 - B Y&N = Humans are predators! Run AWAY! (Ex:Squirrel)

#1 - A - Y&N = Gets angry at pain. Dam flies/not working parts (ex:moose)

#1 - B - Y&N = Scary bang! duck head(not a dodge just a flinch, but head shots that do not account for this will miss if projectile is slower than the noise)

#2 - A Y = Avoid being seen by humans, always ambush being seen is bad for health

A - N = What was that? Jump, Pause & assess, 2nd jump and run a short way, inspect ground for noisy snakes 3 50/50 run short distance or long
If hit: 1st shot- yelp & nip at point hit 2nd run away/ short distance 3rd just run away from area

A - Y = Avoid and ambush

#2 - B Y = avoid being seen, run away

B-N - pauses and looks at

That’s very advanced AI.

you can see why I abandoned even the vague outline of such a thing. It was spiraling out of controll. Needs to be simplifed more than that. Agression levels are already a thing I believe, perhaps work a simple formula off of that and “intelligence” level of species. would be best. Assume all creatures have at least heard a gun before, or are smart enough to figure it out if they care.

General clarifications:
Only monsters with a dodge score will be affected by this, if a monster moves in straight lines at a constant speed, they generally won’t have a dodge score.
Dodging in this context includes any rapid and/or erratic movement, so e.g. a squirrel has a high dodge score, despite having no idea what a gun is. Zombies aren’t usually that fast, but they are quite erratic, so they’d have a mediocre dodge score.
There’s a nuanced additional feature that breaks dodge score into passive and active values. Most creatures aren’t going to be expending effort to move a lot if they aren’t aware of any danger.

Mi-gos are quite intelligent, they would generally know what a gun is in general terms, and as they aren’t indestructible, they’re certainly self-interested enough to dodge. Hulks wouldn’t dodge intentionally, but they naturally move quite erratically, which serves the same purpose.

Im not sure if this should be tyied to just dodge skill. Imagine the scenario:

-A high dodge monster, say a duck, unaware of the player, randomly moving between a few tiles.
-A patrolling NPC with a high dodge or if you plan to exclude NPCs from this, an attack dog type pet following the NPC. Again unaware of the player.

In neither of those cases it makes sense for the monsters to “dodge” out of the players aim.


I think this would work better if it worked like this:

-Give monsters two different movement speeds, one for randomly walking around and for when they are fleeing or chasing something.
-Give an aiming penalty to anything that moves faster than certain speed.
-Then if the monster is moving faster than X speed you can add an extra penalty based on their dodge score.

Either way I think this probably wouldn’t make the less accurate weapons any better. It would just reinforce the current status of high accuracy pistols/shotguns as the best firearms in the game.

Question the first: does a gun with a high ‘Aim Speed’ or a low ‘Aim Speed’ aim faster? This is entirely opaque from the player perspective.

It doesn’t dodge, it moves, which I think, effectively speaking is the same as dodging.

Unless you want to add an “active dodge” by making that a monster which has detected an enemy has increased dodge or “active” dodge.

Yes if it “moves” out of your aim it makes more sense to attach the penalty to movement speed instead of dodge skill

Ah, Good. Should have assumed Kevin would have already thought this out

oops, never posted…

You missed this part.

Moving isn’t dodging and speed isn’t the same as dodge ability.
It’s totally reasonable for a creature to dodge without moving to another square, and likewise a moving creature isn’t necessarily exerting itself to dodge.
Consider a small, fast creature, it might be great at dodging because it can move very fast for its size and change directions many times within a short time period, but it’s overall speed isnt necessarily that high. Likewise you have fast creatures that can’t change direction quickly, they might have very high speed but only ok dodge.

Put another way, this works toward extending the effective range of rifles without making them the ultimate weapon.

Overall the idea sounds good, but it would also need to involve serious rebalancing of the weaker weapons, not just nerfing rifle aim times.
Current firearms are very high damage, but very unreliable. This is a big part of why rifles are the best: they are high burst damage incarnate.

A good way to refine it would be to not just make monsters increase aim time, but hard low-cap aiming recoil depending on their dodge score.
Hard low cap and not soft one provided by aim time increases, because the problem is huge damage headshots, not reliable good hits.

Also about headshots: they currently have gigantic damage modifiers, while grazes are abysmal. This huge spread of ranged damage potential heavily favors high accuracy, high damage weapons being used at point blank.

Increased aim times = lower dps
I’m using rifles vs pistols as an example, but the entire system is fair game for adjustment.

I don’t follow what you mean by hard low-cap recoil. It sounds like you mean high dodge prevents aiming recoil from reaching its minimum, which is effectively what it does now, but without any player feedback.

I’m totally on board with shrinking headshot multipliers. I don’t think grades much matter from a balance pic, they’re pretty much a consolation prize.

It’s not directly about dps - more like “dps concentration”.
For example, a typical use case of a rifle is aiming as much as possible until a hulk gets in range for a burst, bursting, then running around to reposition the hulk for another such burst.
Ammo is too expensive to use it for regular mobs where pure dps matters.

It sounds like you mean high dodge prevents aiming recoil from reaching its minimum, which is effectivelyvwhat it does now, but without any player feedback.

Currently the effect of dodge on firearms is completely minuscule, negligible.
Player feedback is low in either case. Penalty to accuracy would be easy to notice against targets that suddenly notice the player or get stunned - in such a case there would be an immediate and noticeable drop in accuracy for dodgy targets.

Either way, it would be a good idea to include that info somewhere. For example, extended monster information, saying “This monster’s erratic movement slows down your aiming with current weapon by 37% at 10 tile range, or by 78% at 5 tile range”.

I don't think grazes much matter from a balance pic, they're pretty much a consolation prize.

Not necessarily headshots themselves, but the huge increase in damage with accuracy of the hit certainly does and massively so.
Grazes are barely above misses, for example.

If you’re kiting hulks at will you’ve already won and nothing we can do about ranged balance is going to fix it.

I’m not totally against it, you could basically think of the cap as a gap you can’t close, you can never quite line it up perfectly.

Feedback sure, but you already know how I feel about that kind of perfect information dump.

My typo didn’t help there (stupid autocorrect), i agree headshots and “good” damage bonuses could stand to be scaled down. Its only the graze that i was calling out as being irrelevant with respect to balance. Treat it as a miss and its essentially the same outcome.

Wait-wait-wait, but isn’t aiming/recoil tracked “in general” for the PC, not versus each individual monster?

I for one would definitely like it if grazes did a bit more damage.