CleverRaven / Cataclysm-DDA

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

Reach_attack flag could be applied with better justification #14592

Closed Skidborg closed 7 years ago

Skidborg commented 8 years ago

Currently the list of weapons that have reach_attack is short and somewhat incongruous. But before I launch a PR attempting to tidy it up, I'd like some input on the current state of affairs. How far is a tile of reach anyway?

The standard array of spears and polearms have reach_attack.

Bayonets and Sword Bayonets have reach_attack, but since you can install them on SMGs, this means an Uzi can have the same stabby range as a Spear or a Survivor Naginata. Diamond Bayonets don't have reach, which is a contradiction that should be fixed one way or the other.

There are also some weapons without reach_attack where it could be justified. War Scythes, Quarterstaves, and Zweihanders jump immediately to mind. And some edge cases like shovels which are as long as a normal pitchfork, but might be less practical if used to swing at a far target.

sparr commented 8 years ago

First and foremost, the size of a single tile is not specified in-game. The game's scale is variable, tending towards one tile being 0.5-1.0 meters wide in buildings and near the player and 5-50 meters wide in the wilderness.

Even if we decide that a tile is 1m wide at melee range, we still don't specify where the player and monster exist within their tile. The game mechanics abstract away movement within the tile, for dodging and performing techniques and such.

Even if we assume players and monsters are points in the center of their tile, there's still the difference between orthogonal and diagonal directions (the actual geometry of a world that uses a taxicab movement metric is topologically weird).

TL;DR: It's complicated. In short, non-reach is for typical melee weapons. REACH is for weapons that can attack past one intervening monster. REACH3 is for weapons that can attack past two or more intervening monsters.

kevingranade commented 8 years ago

Bayonets should obviously only have reach when affixed to a rifle, anything to the contrary is a bug. I'm closest to buying the war scythe, but I'm skeptical that the grip is solid enough to use at reach.

Skidborg commented 8 years ago

The most simple fix for that would be restricting SMGs to using the Pistol Bayonet for now. But even then, most rifles aren't long enough to compete with a dedicated polearm.

I imagine a War Scythe to be roughly analogous to a bill or an improvised naginata. It's current attack delay makes it a pointless weapon to create for close combat. And structurally (5 foot handle, 3 foot blade), the described modifications would put its max slashing range at around 6 feet.

Watching zweihander videos on Youtube makes me think that, optimally, there should be an entirely separate attack for weapons which could reach but should clearly do better damage in close. Similar case with quarterstaves which can poke at range, but won't be getting full force or accuracy.

Inversely, the massive polearms should be doing most of their damage where their pointy bits are, but be more limited in close combat where there's nothing but haft.

illi-kun commented 7 years ago

This issue was closed as it appears inactive.

Reducing open issues to those which are (or will) be actively worked upon helps us focus our efforts. This issue has not been deleted - it still appears in searches and if it contains relevant information you are encouraged to continue to link to it.

If this issue was a bug

It should be reopened if it can be reproduced in the current build. You can obtain the most recent copy here. Please check there is not a more recent report of this bug before doing so. If no more recent report exists you should continue the discussion in this issue.

If this was a feature request

If the consensus was that the idea was good you could consider submitting an implementation via a PR. If you want to comment further please do so here as opposed to opening a new issue. Before posting check nobody has already made the same point and consider whether your comments are likely to lead to an implementation. If you have doubts about either consider instead voting for the issue

If you want to work on this issue

Then either assign it to yourself or if you are unable to do so claim it via adding a comment. Please don't assign others or make a general request for action.