CleverRaven / Cataclysm-DDA

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

Automatically light molotov and pull pin from grenade when throwing #67966

Open oosyrag opened 1 year ago

oosyrag commented 1 year ago

Is your feature request related to a problem? Please describe.

It's fiddly to wield a grenade/molotov, pull pin, and then throw.

The message that shows up saying you need to wield the grenade before activating it only shows up in the log (blue on black background), and can be missed. This results in throwing unprimed grenades.

This is significant if a player were counting on that grenade. They probably aren't getting it back for another try. It's especially egregious when the player DID remember to pull the pin, but just did it in the wrong order and didn't realize it didn't happen.

Solution you would like.

Pulling the pin/lighting a molotov should be included as part of the throwing action, with the action time added to aim time perhaps. This does not preclude pin pulling or lighting manually, in which case the cost of that action would not be added to the firing aim time. This would also allow the player to see how much time it actually takes to prepare the throwable before doing it (don't try to light a molotov with a fire drill in combat).

Describe alternatives you have considered.

Trying to pull the pin in your inventory results in a popup error that requires acknowledgement. Not ideal, as I'd probably still end up frustrated, although better than ending up dead from throwing away my only grenade unprimed.

Additional context

Throwables are already automatically wielded before throwing. This would streamline the use of grenades.

fairyarmadillo commented 1 year ago

I don't think this is a good idea. There are plenty of times when i've wanted to lob a bomb somewhere without blowing it up. Unlit mollies can be used to make noise and spread fuel in preparation for springing a trap (or just distracting enemies) and occasionally you need to toss something to break a window or just send it somewhere.

It's also anti-simulationist. You can throw a grenade irl without exploding it. That should not change.

Needing to wield them first was a purposeful change to stop people blowing themselves up when they activated a grenade that was in the bottom of their backpack. Even if you're using lots of bombs, you're never using so many that the extra button presses legitimately become a hassle to deal with.

oosyrag commented 1 year ago

Maybe a local keybind to allow activating the held item in the throw dialogue then.

Qrox commented 1 year ago

It's also anti-simulationist. You can throw a grenade irl without exploding it. That should not change.

I remember suggesting somewhere that we can make it default to activating the grenade when throwing, and make throwing without activating a non-default option, so that the game can be both simulationist and player-friendly.

fairyarmadillo commented 1 year ago

I remember suggesting somewhere that we can make it default to activating the grenade when throwing, and make throwing without activating a non-default option, so that the game can be both simulationist and player-friendly.

I don't like this because then you have an essentially arbitrary subset of items that are obnoxiously lethal if you accidentally throw them because you hit the wrong keybind. The default behavior should be a non-activated throw. If someone wants to add a toggle or hotkey on top of that to do it in the proposed manner, it wouldn't cause any problems.

NetSysFire commented 1 year ago

I think a good compromise would be adding an "activate and throw" option, but I can see people fat fingering that so it is not ideal either.

oosyrag commented 1 year ago

For me I'm still not seeing the use case or why you would want to throw a nade without activating it. The act of throwing is explicit and requires enough key presses as it is for it not to be an accident. But that's not a big deal, if someone wants to do so it should definitely be possible.

On the flip side, throwing a nade without activating it could lead to death due to shoddy feedback (as the case where the user did want to prime it, such as when it was activated in the inventory before throwing, but the log message was missed). The nade is unrecoverable if it was thrown at the enemy, and didn't do its job of killing said enemy.

A popup requiring aknowledgement when attempting to activate in inventory would be a compromise, but I dislike those (more key presses) in general. A hotkey to prime in the throw dialogue (the item is already in your hand at that point) still sounds like a good solution to me. Highlighted text that the item is inert that shows up when trying to throw would complement that as well.

I don't think fat fingering is a problem that should or could be addressed, as it is a problem either way - throwing when meaning to prime or throwing without meaning to prime. A design direction to prevent fat fingering would lead to an obnoxious amount of "are you sure?" type situations like the one described above, and I don't think that kind of handholding is needed.

fairyarmadillo commented 1 year ago

Fat fingering in the throw menu is a fairly constant problem if you're doing something like throwing knives or rocks at enemies. It is pretty common to repeat the same keystrokes you used for the last ten throws thinking you threw nine items, and now you're whipping your boxers or some other random thing from your inventory at the enemy. You can put your underwear back on, you cannot un-explode a grenade.

Setting hotkeys for throwables does not fix this as the hotkeys get unset when the items leave your inventory or the stack breaks.

I also sometimes want to get an item across a gap before I jump, or I want to have it prepped and ready somewhere that it is not safe to walk to. I mentioned that throwing unlit mollies is frequently a useful thing to do to lay traps, especially as they make noise when they break.

I'm still not convinced this would be a useful addition though. Grenades are relatively uncommon and are not used very often, so the current two extra keypresses needed to pull one out and prime it before throwing isn't really a serious imposition. They are also not ever thrown lightly because of how dangerous they are to the player. It would be a lot of extra work and UI clutter to make a special case solution for something that the game already makes pretty simple.

As a note, you can press shift+a to activate a held item, which solves half the problem you're complaining about already. You still need to manually wield the grenade, but it's otherwise the same number of keypresses as your "prompt in the throw window" idea.

ilovehans10 commented 1 year ago

I think that the best of both worlds is to make it so that there is no change to top level key binds, but to include this as something that can be toggled/done in the throw menu.

The way I see it, there are two options for the throw menu that could solve this issue. The first would be to add a button to the throw targeting screen that activates the item. The second would be to add a button that toggles an automatic throw mode that makes the character activate items automatically during throwing them. Either or both of these options could be implemented for a more streamlined throwing process.

Just to cover my bases, you would never want to automatically activate something after selecting it to be thrown but before throwing, as sometimes people change their minds and we don't want people stuck with an active grenade. This is another upside to these solutions, as you can check if you can throw the object where you want it before activating, without having to enter the throw menu twice.

Because I see a lot of fear about fat-fingering the throw menu, I also want to make it clear that the automatic mode in my suggestion would;

  1. Have to be manually enabled by the player
  2. Not activate the item to be thrown until after the player has hit f to throw. The process would be (t)hrow menu, select target, hit f to throw, game activated the item in your hand then throws it where the player had targeted.
  3. Could very easily have some sort of ***WARNING AUTO-ACTIVATE ON*** warning that could sit in the throw sidebar menu that would be all red and menacing

As a note, you can press shift+a to activate a held item, which solves half the problem you're complaining about already. You still need to manually wield the grenade, but it's otherwise the same number of keypresses as your "prompt in the throw window" idea.

Who wields grenades before going to throw them? Never once have I been in a situation where I am in hostile territory, and I am wielding a grenade to fight off the dead. My point is you can suggest that another solution takes as few keystrokes as desired, but if no one will ever be in a situation where it is applicable, then it isn't really a solution.

github-actions[bot] commented 1 year ago

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.

I-am-Erk commented 1 year ago

I reposted essentially the same issue, and will copy and paste my own content here now, then comment after:


Is your feature request related to a problem? Please describe.

Grenades are super annoying in this game, as anyone who likes to explode stuff can tell you.

Disclaimer: I have never thrown a grenade, and the last time I saw a working dummy grenade was c. 1998, but I did talk to some discorders who have, and I read some wikihow articles too. So I'm kind of an expert I guess, really.

As I understand it, the procedure for throwing a grenade IRL is:

The protocol in CDDA right now is

This is not very intuitive, and not realistic, and a lot of keypresses, and just kind of stupid. Now, the itnernet has told me repeatedly that "realism" and "fun" are opposites, so I'd like to remove fun from grenades (and other armable throwables) and add realism by making them more intuitive, harder to mess up, and require fewer keypresses.

Solution you would like.

  1. By default, throwing a grenade that is not armed should assume you are going to arm it first. There are very few situations in which you may want to throw an unarmed grenade. We should add the time to pull the pin to the throwing process.
  2. throwing a molotov or other armable device should also assume you are first going to arm it. In the case of molotovs we should check for the fastest available fire source and use that (fewest total moves to get it out of container and light molotov). If players want to use a specific fire source they can activate the molotov the old way.
  3. If you want to run the timer on your grenade, or drop it in place armed, then the old technique of activating your grenade should still work for that. Doing this action should say something like you pull the pin and release the spoon of the grenade. The fuse is running!

Future directions

  1. We could add a way to interact with a grenade/armable device and specify "turn off 'arm by default'", or this could be a setting in options. This would restore old behaviour. There are a few situatiosn where this might be desirable, but not many. (one example is that when AI can respond appropriately to grenades, a non-armed grenade could force NPCs to scatter without wasting your bomb)
  2. We may want to add a "grenade proficiency" which decreases time to pull the pin significantly. it's possibly too meta but personally I'd also be willing to have this slightly increase the effectiveness of cover against grenade shrapnel.
  3. Some people would still like to see the fail state of "forgot to pull the pin on grenade". I personally don't think that adds much fun to the game, but if we did have such a thing it should be the result of your character forgetting because of their inexperience, not the player. If I'm playing a veteran navy SEAL, they aren't going to forget how to throw the grenade even if I might. I would suggest that we'd have a low chance of forgetting to arm the grenade based on throwing skill and perception stat, in this case. Having grenade proficiency would drop this chance to zero.

Describe alternatives you have considered.

We could improve the current UI by warning the player if they're about to throw a grenade that hasnt' been armed, but that's another annoying UI popup for a scenario that we shouldn't really be modelling in the first place.

Additional context

Some have pointed out that we should also prompt with an "are you sure?" if you try to arm an explosive while it's still in a container.

I-am-Erk commented 1 year ago

Having reviewed the conversation here and in #69061 I don't think I really agree with the arguments against, which seem to be essentially, "I could accidentally throw a grenade because I am throwing a lot of things at once". Certainly that's a reasonable argument to make this behaviour one that can be disabled, but that's a case where there's not really a lot of question how you managed to get blown up - it's a user error. The current paradigm for grenade activation is not intuitive or user friendly, nor is it a good simulation of how grenades are used. It's very possible to (a) blow yourself up because you assumed the game would properly simulate grenades, which it does not, or (b) throw a grenade with the pin still in because you assumed the game would function like other games, which it does not. What we currently have is neither realistic, nor similar to other video games. You can only know how it works because you've muddled around in cataclysm enough to figure it out, or because you asked someone. That is a problem that needs to be rectified.

One option raised on discord would be to have a prompt the first time you throw a grenade in game asking: "pull the pin before throwing? y/n/Always/never" -- this would alert veterans to the change in options, and ensure that nobody winds up with the options setting that doesn't suit their style.

The 'fat fingers' problem seems to me to be an entirely unrelated one, which is that wielded throwables should probably have an option to automatically reload from inventory so that you're not rapidly cycling windows to throw multiple rocks. I don't think we should design grenade UI around this.

fairyarmadillo commented 1 year ago

What about dynamite, or timer bombs? These things should all behave in a like manner.

I-am-Erk commented 1 year ago

Yes, they should. I'd argue timer bombs aren't something one routinely throws, and they have more than one setting, but anything where an inexperienced player could easily wind up throwing an inert version of something that is obviously and trivially intended as an activated weapon is a UI failure. Dynamite is definitely one such case: nobody is going to be throwing a stick of dynamite without intending to light it first.

fairyarmadillo commented 1 year ago

nobody is going to be throwing a stick of dynamite without intending to light it first.

Gotta disagree here. I throw stuff, including explosives, all the time to make it go places without me going there. One example might be moving gear into useful locations in an area where an enemy with a gun was patrolling and it wouldn't be safe to schlep it over there.

I often do this because items on the ground can be picked up or interacted with more quickly and reliably than they can be retrieved from my inventory.

Another example would be if I wanted to cross some water and didn't have a waterproof container. I would want to throw my stuff to the other side if possible before wading over.

Another example would be tossing gear over a one-tile gap in order to unburden myself enough to jump over the gap. This should not require a bag to do.

Or I could throw dynamite (or more likely, a molotov, which shatters and spills fuel around) to a location and then use an incendiary weapon, such as a fire arrow or a tracer round, to set it off when I wanted.

But I shouldn't really need to argue the use cases specifically. It is trivial to toss an unlit bomb across the room irl, and it's in the spirit of our simulation to maintain the player's ability to do that without having to interrogate why.

Without a toggle (which would be a fine solution), I would be forced to put the item in a container and throw that, which is goofy and not always possible, and doesn't even answer every use case.

Again as long as there's just a toggle or whatever I have no complaint, though the people who are unexpectedly hit with a 500 move cost for fishing their lighter out of the bottom of their backpack with a broken arm might.

I-am-Erk commented 1 year ago

I've already said that it should have a setting to toggle.

Several of those use cases are workarounds for UI issues and the solution should be to improve the UI. The rest are highly situational, and handled just fine by having to hop into a submenu and back; the default assumption should not be that you're trying to ford a river and don't want your dynamite to get wet

oosyrag commented 1 year ago

Gonna pop in here and add for consideration just a additional separate hotkey in the throwing interface for "prime and throw" available when contextually relevant, to preempt additional settings bloat and popup warning confirmations, which I dislike in general. Although I think a warning confirmation when attempting to throw a primeable object without priming is fair - I still think it is more common to want or intend to prime (especially for a new player) than to throw nades and mollies around without lighting them.

keampe commented 1 year ago

The throwing menu is quite similar to the firing menu, so why not just add a "Change Fire Mode" equivalent to the throwing menu. If a gun has semi, burst and full auto you can just cycle between them but if the gun lacks such you cannot. So if you're throwing a grenade you can "Throw active" as default or "Throw inactive" by cycling the throw mode, but if you're accidentally throwing your shorts, you can't. Well, guess that last depends on how long you've been wearing them.....

Another option is to give the grenade 3 states instead of 2. You would have:

  1. Inactive - just called grenade.
  2. Active - called grenade (active) in bright yellow. Here the pin is pulled but the spoon is held, so no count down.
  3. Live - called grenade (live) in red or flashing red. Here the pin is out and the spoon released. IIRC this activates a chemical timer so there is no way short of destroying the grenade to stop it.

So, you would wield the grenade and (a)ctivate it to pull the pin - alternatively wielding might do this by default. If the grenade is thrown or dropped it becomes Live. If the grenade is put back into inventory we add some time to the action to represent putting the pin back in and it becomes inactive. The player could also (a)ctivate a wielded active grenade to either put the pin back in or to release the spoon - it'd be a drop down menu. There is something known as "cooking" a grenade where you release the spoon and hold it for 2-3 seconds before throwing thereby giving the enemy less time to deal with the grenade. I personally wouldn't do this, but it is something people do.

fairyarmadillo commented 1 year ago

Throwing modes is the most painless solution imo.

AlbertNewton commented 1 year ago

Agreed, I think that would be good. But I don't think automatically pulling the pin when you hold a grenade would be a good idea. No other object (that I know of) is inherently dangerous to hold that way.

I-am-Erk commented 1 year ago

Adding the toggle to the throwing menu would be acceptable, yep

keampe commented 1 year ago

Agreed, I think that would be good. But I don't think automatically pulling the pin when you hold a grenade would be a good idea. No other object (that I know of) is inherently dangerous to hold that way.

Just as a note - I wasn't advocating pulling the pin by wielding the grenade, just saying that it could be done that way to decrease the number of keystrokes. I actually wouldn't be in favor of it, my graveyard file is large enough thank you.