Take all interupted

is there a way for a multi-action to continue despite one of the constituent actions failing?

specifically - “take all” will take objects until one ‘take’ fails (untakeable, out of reach, whatever) then stop. this is jarring and kind of counter-intuitive. i’ve had multiple players have problems with this when an expected item isn’t in their inventory because it was the fourth object in the “take all” but the 3rd take failed.

it doesn’t seem like an unreasonable assumption that ‘take all’ should take all the takeable objects despite whatever else is lying around.

1 Like

It is doable but I never looked at it, because those players who complain will also complain when

> take pole and jump
It's stuck in the rocks.

It wasn't the brightest idea to jump over the pit without a pole.
You are dead!
1 Like

yeah, i agree that, in general, it keeps multi-actions much cleaner and the outcome more predictable.

but i think ‘take all’ is a special case.

1 Like

I hear you, and I still get the same urge to modify take all from time to time. Then I remember out of scope items won’t be attempted to take anyway, unless you add them to scope with (add $ to scope), and then you can use these tools to leave out taking undesirables:

(excluded from all $Obj)
	(out of reach $Obj)
(excluded from all $Obj)
	~(player can reach $Obj)

or

(unlikely [take $Obj])
	(not here $Obj)
(unlikely [take $Obj])
	(out of reach $Obj)
(unlikely [take $Obj])
	~(player can reach $Obj)

Hacking take all code of the library, instead of using the tools that already exist, is an overkill.

Edit: Note that likelihood rules only suppress disambiguation, if you want to definitively exclude some objects from an all action (excluded from all $) is your friend, although it will affect all actions not just take.

that makes sense. there will be edge cases but i guess it wouldn’t be worth digging too deep into stdlib. usually, when there’s an issue it’s something fixable, work-aroundable, or operator error (like when i sometimes designate something an (item *) that isn’t really an item).