We now know how to add inventory items, as well as code complex interactions in a room. Now we are going to combine those two bits of information and apply that to the inventory items.
Before we begin, let's go ahead and create a second item. In the first tutorial on Inventory items, we made an instance for testItem, now let's go ahead and make another one named antiTestItem. Just like with our first item, we will also need to add antiTestItem to the add list, create the views and cursor, as well as add in the noun and verb to the message resource. In the game.sh file, I am going to assume you defined it as ITEM_ANTITESTITEM. If you have no idea what it is that I am talking about, might I suggest going over the chapter
Creating Inventory Items again.
But if you are ready, lets go ahead and start with our basic instance. It is from here that we are going to build
(instance antiTestItem Sq5InvItem
(properties
view 902
loop 1
cel 0
cursor 902
message V_COMBINETEST
signal $0002
noun N_COMBINETESTER
)
)
Using an item on another item
It is very common to need to combine two or more inventory items. The easiest way to accomplish this is to check for the use of a verb. Our first item we created in the other chapter, we defined the verb associated with it as V_TEST. So really all we need to do is check for the verb noun combination of the two items. To do that, just like we did with
Complex Interactions we are going to add a doVerb method to our inventory items instance. For our purposes here, when the original test item is used on the anti test item, simply drop the test item.
(method (doVerb theVerb param2 param3)
(switch (theVerb)
(case V_TEST
(sq5Inv:hide()) // hides the current window
(send gEgo:put(ITEM_TESTITEM)) // drops the test item
(sq5Inv:curIcon(0)show(gEgo))// changes cursor and shows ego's items
)
(default
(super:doVerb(theVerb param2 rest param3))
)
)// ends verb switch
)// end method
In most cases like this, you are actually going to want to drop both original items and replace them with a third item which represents the other two combined. If that is the case, then you would simply need to alter the send gEgo line.
(send gEgo:put(ITEM_ONE)put(ITEM_TWO)get(ITEM_THREE))
Extending the Money Item to include amount in description