Putting thing in bowl with a spoon

I have a canister of sulfur and the poor soul who is playing my game has to scoop some out with a spoon and put it in a bowl. Swiping code from the tutorials, I have stopped the player from taking the sulfur from the canister. I am not sure how to allow them to use the spoon to take the sulfur, however.
I tried to write a PutWith in the sulfur object but that wouldn’t compile. So do I need a Indirect Object in the sulfur object or the spoon object?
I’ve been messing with this for a couple weeks so any help or hints is appreciated.

Output:
>take small canister
Taken.
 
>open small canister
Opening the small canister reveals a powdered sulfur.
 
>put sulfur in medium bowl
(first trying to take the powdered sulfur)
You are already holding it.

Code:
++ canister1: OpenableContainer 'small canister'
"The small canister feels light. The lid is screwed on loosely. "
bulk = 0.3
;
+++ sulfur: Thing 'powdered sulfur'
"Sulfur can be mixed with glass powder and a bit of wax to make an inexpensive match head. "
bulk = 0.1

dobjFor(Take)
{
verify()
{
if(isIn(gActor))
illogicalNow('You are already holding it. ');
}
action()
{
actionMoveInto(gActor);
}
report()
{
"Taken. ";
}
};
3 Likes

So I don’t have the opportunity to crank out some code right now, but there are two ways I might go about this:

  1. Create a new Scoop action that goes something like (SCOOP | SPOON) X (WITH | USING | INTO) Y.
  2. Allow the player to pour sulfur into the spoon.

It might even be good to implement both of these, to make it intuitive for more players. These are just some brainstorm solutions, tho, so let me know your thoughts on them.

2 Likes

One quick note: in verify you are testing for isIn the PC, regardless of whether or not it’s in a nested container. Perhaps you mean isDirectlyIn or isDirectlyHeldBy there.
Having a SCOOP/SPOON verb would be good, but I’d also make sure that cruder phrasings will also work: PUT SULFUR IN SPOON, or GET/TAKE SULFUR WITH SPOON (TakeWith would need to be a new verb, though… I made one for my game).
Perhaps in the sulfur’s Take verify you could enforce that a spoon needs to be held. If not, illogicalNow('You\'ll need a spoon.'), otherwise report can say ‘You get a spoonful of sulfur.’

Unfortunately, I could only write up a comprehensive code sample in adv3; for a3Lite, I’d need to do some research.

3 Likes

All good suggestions. I did see a post from you @johnnywz00 regarding your TakeWith verb. Going to try these.
Thank you!

2 Likes

Let me know if you’re still having trouble, and I can try to write up some more specific code…

1 Like

Thanks! I should have a couple hours this weekend to try some things. I appreciate your offer and I will let you know either way.

2 Likes

It may not be worth doing, but just in case it’s of interest, if you included the TIA extension in your game it would be possible to implement a PUT X IN Y WITH Z verb (with Z being regarded as the Auxiliary Object).

3 Likes

Fantastic! That is exactly what I needed. Thank you!

2 Likes

I would be interested some time to play around with TIA verbs myself… but it strikes me as something that you would need to notify the player about, somewhere. Most parser players aren’t going to try three-object phrasings on their own. Also, if you only vaguely hint that three-object phrasings are possible, there’s the potential for players to get rather disenchanted trying random three-object wordings all throughout the game without getting any response, if PUT X IN Y WITH Z is the only implemented triplet. Just some thoughts that come to mind… I haven’t had to think deeply about the TIA structure before, so I’m not sure how I’d approach it…

2 Likes

Thank you for your feedback! This is my first parser, after all.
I had originally planned on writing it for TALP but there is no way I am going to make that deadline. Maybe next year. But one of the requirements of TALP is to include a tutorial at the beginning of play where I will include the three-object commands. I’m also including a lot of hints in the descriptions of things that should help the player along with the right commands.
Regardless, even if I end up just allowing the player to dump the powder into the bowl, this is a great learning opportunity. :slight_smile:

2 Likes

I think you’re right. I played with TIA in my big WIP, and found something similar to what you noted earlier:

In the verify or check routine for PUT FLOUR IN BOWL I gave the player a clue, something like “The head baker will have a meltdown if you touch the flour with your bare hands. You’ll need to put the flour in the bowl with something clean.”

It’s important, I think, to lay out the command form in the response, which provides two clues: (a) what the object might be, and (b) how to form the verb (in case someone tries PUT FLOUR IN BOWL USING SPOON. Of course, you can add a number of suitable alternatives in the VerbRule definition, but players will always manage to think of a word you didn’t consider).

If you don’t want to clue them on (a), well, then at least let them know that “You’ll need to put the flour in the bowl with something other than your hands.” Something like that.

You could also say in HELP or ABOUT, “This game supports PUT X IN Y WITH Z”…but, that risks players running around trying to use it all over the place.

3 Likes

By the bye, for nearly any custom VERB X WITH Y that I create, I write that part of the grammar as ('with' | 'w' | 'using')

3 Likes