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.
>take small canister
>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.
++ 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
illogicalNow('You are already holding it. ');
So I don’t have the opportunity to crank out some code right now, but there are two ways I might go about this:
- Create a new
Scoop action that goes something like
(SCOOP | SPOON) X (WITH | USING | INTO) Y.
- 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.
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
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.
All good suggestions. I did see a post from you @johnnywz00 regarding your TakeWith verb. Going to try these.
Let me know if you’re still having trouble, and I can try to write up some more specific code…
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.
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).
Fantastic! That is exactly what I needed. Thank you!
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…
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.
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
ABOUT, “This game supports PUT X IN Y WITH Z”…but, that risks players running around trying to use it all over the place.
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')…