Cataclysm-DDA icon indicating copy to clipboard operation
Cataclysm-DDA copied to clipboard

Bows should hold a loaded arrow instead of storing the arrow away when canceling a shot

Open BlueDragonFire opened this issue 1 year ago • 21 comments

Describe the bug

When using a bow, if a player presses f to line up a shot, he will take an arrow out of storage and prepare to fire. However, if a player presses f, and then cancels the shot, the character will prioritise placing the arrow back into storage regardless of the circumstances.

This has cost me many runs where a character will knock an arrow, but a zombie will get too close to shoot without serious damage and when trying to switch to melee the zombie will often kill you before you have a chance to draw your weapon. For instance, when using a loop of rope, canceling a shot takes 17 seconds before you are allowed your next turn and often this is enough to get severe bleeds on multiple limbs from just one tough zombie.

Attach save file

N/A

Steps to reproduce

  1. Make a character with any bow, any arrows, and using an inefficient arrow storage like loop of rope
  2. Press f to ready your shot
  3. Cancel the shot and watch the time fly

Expected behavior

I expect the character to still have the arrow loaded in the bow instead of stowing the arrow away. This functions much the same as any other gun and allows the player to drop the bow instantly when needing to switch to melee

Screenshots

No response

Versions and configuration

  • OS: Linux
    • OS Version: Distributor ID: Linuxmint; Description: Linux Mint 20.3; Release: 20.3; Codename: una;
  • Game Version: d6ec466 [64-bit]
  • Graphics Version: Tiles
  • Game Language: System language []
  • Mods loaded: [ Dark Days Ahead [dda], Disable NPC Needs [no_npc_food], Portal Storms Ignore NPCs [personal_portal_storms], No Fungal Growth [no_fungal_growth], Bionic Professions [package_bionic_professions], Stats Through Kills [stats_through_kills], Stats Through Skills [StatsThroughSkills] ]

Additional context

No response

BlueDragonFire avatar Feb 18 '24 14:02 BlueDragonFire

For instance, when using a loop of rope, canceling a shot takes 17 seconds before you are allowed your next turn

So... don't do that? This is working as intended. You cannot simply store an arrow on a bow's drawstring, ready to go.

RenechCDDA avatar Feb 18 '24 14:02 RenechCDDA

So... don't do that? This is working as intended.

Game doesn't ask what to do with an arrow, It goes straight to any valid container. Game should ask, the same way as with any other wielded item - i.e store, drop, holster.

Cenness avatar Feb 18 '24 15:02 Cenness

Actually, I can see this working like certain containers, where the arrow will 'spill' out of the bow if it's not actively being held, but it can still be loaded?

Aimless-dude avatar Feb 18 '24 15:02 Aimless-dude

So... don't do that? This is working as intended.

Game doesn't ask what to do with an arrow, It goes straight to any valid container. Game should ask, the same way as with any other wielded item - i.e store, drop, holster.

That would be a UX nightmare. I don't want to have a popup every single time I unload a ranged weapon, especially with how often this winds up happening for bows.

#71596 brought this issue up with gun magazines, and Kevin suggested a better solution, which is the same one we use for hauling - separate keybinds for "Reload and drop the old ammo" vs "reload and put the old ammo away."

Side note, instead of a prompt asking what you want to do with an empty magazine, we could have a seperate keybind for "reload and drop the old magazine" vs "reload and stash the old magazine".

Shooting a bow uses slightly different mechanics so it'd be a different keybind or a toggle somewhere, but that would be much better than seeing a popup every time.

loop of rope

Well there's your problem. Make a quiver! They're easier to craft than ever given that there's now a birchbark and pipe version. The loop of rope item is extremely shitty on purpose because it only really exists as a failsafe.

worm-girl avatar Feb 18 '24 15:02 worm-girl

You cannot simply store an arrow on a bow's drawstring, ready to go.

Yes and no. There is another ways to prepare next arrow (and shooting, while moving too). For example https://youtu.be/mMBAztgY4Ss?si=rs2TJQGBgyTe5suD&t=863

At fact, in real world this is surely possible at some ways (not a newbie level for sure, but possible after practice). People can use not only Olympic archery style, others just exist being more practical for combat conditions...

Just 'simply store an arrow on a bow's drawstring' example: https://youtu.be/kj1rQWdA8AA?si=ekbx4a9NYqnwIy5C&t=68 https://youtu.be/kj1rQWdA8AA?si=XblDMwjJ9HlbBNFh&t=134 String nocks and string loop (for bowstring) just exist in real world, same for modified arrows itself https://i.postimg.cc/CMPNxKRH/11.jpg

Rokharn avatar Feb 18 '24 20:02 Rokharn

Actually, I can see this working like certain containers, where the arrow will 'spill' out of the bow if it's not actively being held, but it can still be loaded?

Spilling would be preferable to having to wait to put the arrow back. Alternatively, you could just have a button in the 'f' firing menu that toggles whether you want your arrows to store on cancel or drop on cancel

BlueDragonFire avatar Feb 18 '24 21:02 BlueDragonFire

For instance, when using a loop of rope, canceling a shot takes 17 seconds before you are allowed your next turn

So... don't do that? This is working as intended. You cannot simply store an arrow on a bow's drawstring, ready to go.

No, but you could drop it or you could hold the arrow in your other hand and decide what to do with it or you can hold both in the same hand, just not drawn. It seems pretty nonsensical to decide to carefully put away your arrow while being torn apart.

And IRL, you can walk like normal with an arrow in your bow. You don't have to walk around with your bow fully drawn all the time

BlueDragonFire avatar Feb 18 '24 21:02 BlueDragonFire

loop of rope

Well there's your problem. Make a quiver! They're easier to craft than ever given that there's now a birchbark and pipe version. The loop of rope item is extremely shitty on purpose because it only really exists as a failsafe.

It was 6 days into a new run. A loop of rope was all I could afford to use at that moment

BlueDragonFire avatar Feb 18 '24 21:02 BlueDragonFire

And IRL, you can walk like normal with an arrow in your bow. You don't have to walk around with your bow fully drawn all the time

We're not likely to have two hands anytime soon (if ever), but adding a second load state to the bow could work. One where you've just got the arrow and the bow together in your hands, and one where it's drawn. Pressing "f" could automatically do both as it automatically does the one now, and then canceling could return you to the new middle state. Then you'd just unload your bow to get your arrow back, if you wanted to put it away. We could even add a keybind to half-load the bow.

It'd take a little bit of C++, and a system to make it spit the arrow out if you dropped or wore the bow, but there are a couple of places we could use a system like this - slings come to mind.

worm-girl avatar Feb 19 '24 00:02 worm-girl

Then you'd just unload your bow to get your arrow back

And we're back to step one. Unloading does the exact same thing as [f] cancel does now - it puts arrow into any valid container. Or maybe you meant that in that case player would have an option to drop bow and/or arrow?

Cenness avatar Feb 19 '24 11:02 Cenness

It's got to be a keybind with exactly as few button presses as there are now or it'll be godawful to play with.

worm-girl avatar Feb 19 '24 13:02 worm-girl

It's got to be a keybind with exactly as few button presses as there are now or it'll be godawful to play with.

It could simply be a toggle in the [f] firing menu just like pressing '.' to steady your aim or switching firing modes to precise or careful. Simply make it a toggle, could even make it exclusive to bows, and it's done. If toggle is enabled, you drop your arrow, if disabled, you stow it.

BlueDragonFire avatar Feb 19 '24 16:02 BlueDragonFire

It is feasible to walk around with an arrow nocked on your bow, and there are legitimate reasons to do so, so in broad strokes this would be nice to have, the only question is making it happen without causing annoyance as fairyarmadillo points out.

I think the ideal option is to just defer unloading the arrow until you unwield the bow or manually unload. The tricky part is just making sure you catch all the options for unwielding. If you wear the bow or put it in an inventory, you should also put the arrow in your inventory, or maybe leave it wielded? If you drop the bow (either intentionally or due to some effect that makes you drop it) the arrow should stop off the bow.

kevingranade avatar Mar 03 '24 18:03 kevingranade

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions. Please do not bump or comment on this issue unless you are actively working on it. Stale issues, and stale issues that are closed are still considered.

github-actions[bot] avatar Apr 02 '24 18:04 github-actions[bot]

This was not addressed by #73305 and it looks like that needs to be reverted anyway.

kevingranade avatar May 03 '24 18:05 kevingranade

Why would it need to be reverted?

Zireael07 avatar May 03 '24 19:05 Zireael07

Why would it need to be reverted?

It didn't follow attribution requirements.

Maleclypse avatar May 03 '24 22:05 Maleclypse

This was not addressed by #73305 and it looks like that needs to be reverted anyway.

I thought that after #73305 it is no longer needed to have your bow pre-loaded. Now I got a new idea, once #73550 is merged, I'll make another PR to apply it.

The question is, do you think I should add a (melee) penalty to a loaded bow? And, will ripoff works for items held in PC's hand? I mean it is reasonable to have your arrow knocked off by a hulk.

osuphobia avatar May 11 '24 02:05 osuphobia

Getting hit in melee already resets your aim, making bows generally not usable that way.

worm-girl avatar May 11 '24 06:05 worm-girl

Getting hit in melee already resets your aim, making bows generally not usable that way.

If you are talking about melee penalty, I mean to increase Moves Per Attack for loaded bow when used for melee attack.

About ripoff, seems that it only affects item worn on the character, not item wielded, when escaping from grabbing?

osuphobia avatar May 11 '24 06:05 osuphobia

no_RAS RAS1 RAS2 RAS3

On the half way of my new idea. Any suggestions?

osuphobia avatar May 14 '24 08:05 osuphobia