So, first off, updating Roodylib to support non-container, transparent objects did take quite as many changes as I thought it would. I just need to replace
DoLookIn and add some more code to
CheckReach and
DoLook but that's basically it. Now it's just a waiting game to see if I made more problems for myself.
Anyhow, let's get back to that situation the other day, where I was helping code a wearable coat with a pocket. The problem was that its contents weren't showing up in inventory listings. First, this required a change to
WhatsIn to fix some spacing issues. After that, I realized that
SpecialDesc was only listing children-of-children if the object had more than one child, so I added some code to check for that when there is one child.
You can see the evolution of my code over at this thread:
http://www.joltcountry.com/phpBB2/viewtopic.php?t=8938
While testing all of these compiled coats with their various pockets, I would often take the keychain from the coat pocket just to make sure inventory was still printing correctly even when the coat has no children. At one point, I noticed that while >
REMOVE KEYCHAIN FROM POCKET worked, >
REMOVE KEYCHAIN alone did not. I thought, huh, well, it really should be smart enough that if the object has a parent other than the player, it should be directed to
DoGet.
So, I added some code to fix that, but in doing so, I noticed that
DoTakeOff and
DoWear both had
multi grammar tokens, so out of curiosity (and since my test game had both a coat and the player wearing some shoes), I started testing the commands >
WEAR ALL and >
REMOVE ALL.
Oddly, I found that the
multi grammar token defaulted to not-held items, so both of these commands often would respond with things like "Nothing to wear." I thought, huh, I'll fix that!
So, besides playing around with grammar, I tracked down the problem to hugolib's
VerbHeldMode routine, which redirects the parser to held or not-held behavior based on the verb being used. I also turned on the checkheld system and added some code to
FindObject.
By this point, >
WEAR ALL and >
REMOVE ALL were working correctly, but the results had the player trying to wear or remove everything in his inventory, so I added some code to
ExcludeFromAll so non-clothing items would be ignored.
Long story short, Hugo is now "AIF"-ready!
Welcome, AIF Authors!
So yeah, Hugo can now accept >WEAR ALL and >REMOVE ALL. Still, I wasn't excited about the prospect of default Roodylib behavior making it too easy to disrobe, so I thought, huh, maybe I could do something about that, too.
In the end, I changed ExcludeFromAll so that in the default behavior, it excludes all clothes, too, and in the case of DoTakeOff and DoWear, I changed the ParseError message to "Be specific about what you'd like to <blank>."
So, that means something like >WEAR PANTS AND FUNNY HAT will still work, but >WEAR ALL will get the "Be specific..." message.
Of course, if you want >WEAR ALL to work, all you have to do is set the new "AIF" flag.
My one point of conflict right now is that >REMOVE <object> gets directed to DoGet even when the object is in your location (and not a child of something). On one hand, I feel like I should give that instance a "you can't do that." message, but on the other hand, I wonder if there are room descriptions where "remove" will feel like an applicable verb (and I imagine that most players wouldn't notice that it works there otherwise). Feel free to weigh in!
So yeah, I'll try to get the latest Roodylib uploaded to HbE soon enough so anyone who wants to play around with this stuff can do so.